[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 08/25] vmstate: port cris cpu to vmstate
From: |
Juan Quintela |
Subject: |
[Qemu-devel] [PATCH 08/25] vmstate: port cris cpu to vmstate |
Date: |
Tue, 25 Oct 2011 16:00:42 +0200 |
Have to define TLBSet struct.
Multidimensional arrays in C are a mess, just unroll them.
Signed-off-by: Juan Quintela <address@hidden>
CC: Edgar E. Iglesias <address@hidden>
---
target-cris/cpu.h | 13 ++---
target-cris/machine.c | 138 +++++++++++++++++++------------------------------
2 files changed, 60 insertions(+), 91 deletions(-)
diff --git a/target-cris/cpu.h b/target-cris/cpu.h
index 8ae0ce3..2cec75c 100644
--- a/target-cris/cpu.h
+++ b/target-cris/cpu.h
@@ -99,6 +99,11 @@
#define NB_MMU_MODES 2
+typedef struct {
+ uint32_t hi;
+ uint32_t lo;
+} TLBSet;
+
typedef struct CPUCRISState {
uint32_t regs[16];
/* P0 - P15 are referred to as special registers in the docs. */
@@ -152,11 +157,7 @@ typedef struct CPUCRISState {
*
* One for I and another for D.
*/
- struct
- {
- uint32_t hi;
- uint32_t lo;
- } tlbsets[2][4][16];
+ TLBSet tlbsets[2][4][16];
CPU_COMMON
@@ -214,8 +215,6 @@ enum {
#define cpu_gen_code cpu_cris_gen_code
#define cpu_signal_handler cpu_cris_signal_handler
-#define CPU_SAVE_VERSION 1
-
/* MMU modes definitions */
#define MMU_MODE0_SUFFIX _kernel
#define MMU_MODE1_SUFFIX _user
diff --git a/target-cris/machine.c b/target-cris/machine.c
index 8f9c0dd..79494a8 100644
--- a/target-cris/machine.c
+++ b/target-cris/machine.c
@@ -1,90 +1,60 @@
#include "hw/hw.h"
#include "hw/boards.h"
-void cpu_save(QEMUFile *f, void *opaque)
-{
- CPUCRISState *env = opaque;
- int i;
- int s;
- int mmu;
-
- for (i = 0; i < 16; i++)
- qemu_put_be32(f, env->regs[i]);
- for (i = 0; i < 16; i++)
- qemu_put_be32(f, env->pregs[i]);
-
- qemu_put_be32(f, env->pc);
- qemu_put_be32(f, env->ksp);
-
- qemu_put_be32(f, env->dslot);
- qemu_put_be32(f, env->btaken);
- qemu_put_be32(f, env->btarget);
-
- qemu_put_be32(f, env->cc_op);
- qemu_put_be32(f, env->cc_mask);
- qemu_put_be32(f, env->cc_dest);
- qemu_put_be32(f, env->cc_src);
- qemu_put_be32(f, env->cc_result);
- qemu_put_be32(f, env->cc_size);
- qemu_put_be32(f, env->cc_x);
-
- for (s = 0; s < 4; s++) {
- for (i = 0; i < 16; i++)
- qemu_put_be32(f, env->sregs[s][i]);
- }
-
- qemu_put_be32(f, env->mmu_rand_lfsr);
- for (mmu = 0; mmu < 2; mmu++) {
- for (s = 0; s < 4; s++) {
- for (i = 0; i < 16; i++) {
- qemu_put_be32(f, env->tlbsets[mmu][s][i].lo);
- qemu_put_be32(f, env->tlbsets[mmu][s][i].hi);
- }
- }
+static const VMStateDescription vmstate_tlbset = {
+ .name = "cpu/tlbset",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .minimum_version_id_old = 1,
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT32(lo, TLBSet),
+ VMSTATE_UINT32(hi, TLBSet),
+ VMSTATE_END_OF_LIST()
}
-}
-
-int cpu_load(QEMUFile *f, void *opaque, int version_id)
-{
- CPUCRISState *env = opaque;
- int i;
- int s;
- int mmu;
-
- for (i = 0; i < 16; i++)
- env->regs[i] = qemu_get_be32(f);
- for (i = 0; i < 16; i++)
- env->pregs[i] = qemu_get_be32(f);
-
- env->pc = qemu_get_be32(f);
- env->ksp = qemu_get_be32(f);
-
- env->dslot = qemu_get_be32(f);
- env->btaken = qemu_get_be32(f);
- env->btarget = qemu_get_be32(f);
-
- env->cc_op = qemu_get_be32(f);
- env->cc_mask = qemu_get_be32(f);
- env->cc_dest = qemu_get_be32(f);
- env->cc_src = qemu_get_be32(f);
- env->cc_result = qemu_get_be32(f);
- env->cc_size = qemu_get_be32(f);
- env->cc_x = qemu_get_be32(f);
-
- for (s = 0; s < 4; s++) {
- for (i = 0; i < 16; i++)
- env->sregs[s][i] = qemu_get_be32(f);
- }
-
- env->mmu_rand_lfsr = qemu_get_be32(f);
- for (mmu = 0; mmu < 2; mmu++) {
- for (s = 0; s < 4; s++) {
- for (i = 0; i < 16; i++) {
- env->tlbsets[mmu][s][i].lo = qemu_get_be32(f);
- env->tlbsets[mmu][s][i].hi = qemu_get_be32(f);
- }
- }
+};
+
+const VMStateDescription vmstate_cpu = {
+ .name = "cpu",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .minimum_version_id_old = 1,
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT32_ARRAY(regs, CPUState, 16),
+ VMSTATE_UINT32_ARRAY(pregs, CPUState, 16),
+ VMSTATE_UINT32(pc, CPUState),
+ VMSTATE_UINT32(ksp, CPUState),
+ VMSTATE_INT32(dslot, CPUState),
+ VMSTATE_INT32(btaken, CPUState),
+ VMSTATE_UINT32(btarget, CPUState),
+ VMSTATE_UINT32(cc_op, CPUState),
+ VMSTATE_UINT32(cc_mask, CPUState),
+ VMSTATE_UINT32(cc_dest, CPUState),
+ VMSTATE_UINT32(cc_src, CPUState),
+ VMSTATE_UINT32(cc_result, CPUState),
+ VMSTATE_INT32(cc_size, CPUState),
+ VMSTATE_INT32(cc_x, CPUState),
+ VMSTATE_UINT32_ARRAY(sregs[0], CPUState, 16),
+ VMSTATE_UINT32_ARRAY(sregs[1], CPUState, 16),
+ VMSTATE_UINT32_ARRAY(sregs[2], CPUState, 16),
+ VMSTATE_UINT32_ARRAY(sregs[3], CPUState, 16),
+ VMSTATE_UINT32(mmu_rand_lfsr, CPUState),
+ VMSTATE_STRUCT_ARRAY(tlbsets[0][0], CPUState, 16, 0,
+ vmstate_tlbset, TLBSet),
+ VMSTATE_STRUCT_ARRAY(tlbsets[0][1], CPUState, 16, 0,
+ vmstate_tlbset, TLBSet),
+ VMSTATE_STRUCT_ARRAY(tlbsets[0][2], CPUState, 16, 0,
+ vmstate_tlbset, TLBSet),
+ VMSTATE_STRUCT_ARRAY(tlbsets[0][3], CPUState, 16, 0,
+ vmstate_tlbset, TLBSet),
+ VMSTATE_STRUCT_ARRAY(tlbsets[1][0], CPUState, 16, 0,
+ vmstate_tlbset, TLBSet),
+ VMSTATE_STRUCT_ARRAY(tlbsets[1][1], CPUState, 16, 0,
+ vmstate_tlbset, TLBSet),
+ VMSTATE_STRUCT_ARRAY(tlbsets[1][2], CPUState, 16, 0,
+ vmstate_tlbset, TLBSet),
+ VMSTATE_STRUCT_ARRAY(tlbsets[1][3], CPUState, 16, 0,
+ vmstate_tlbset, TLBSet),
+ VMSTATE_END_OF_LIST()
}
+};
- return 0;
-}
--
1.7.6.4
- [Qemu-devel] [PATCH 07/25] vmstate: make microblaze cpus not migrateable, (continued)
- [Qemu-devel] [PATCH 07/25] vmstate: make microblaze cpus not migrateable, Juan Quintela, 2011/10/25
- [Qemu-devel] [PATCH 06/25] vmstate: use new style for lm32 cpus, Juan Quintela, 2011/10/25
- [Qemu-devel] [PATCH 03/25] vmstate: make all architectures export a way to migrate cpu's, Juan Quintela, 2011/10/25
- Re: [Qemu-devel] [PATCH 03/25] vmstate: make all architectures export a way to migrate cpu's, Max Filippov, 2011/10/25
- Re: [Qemu-devel] [PATCH 03/25] vmstate: make all architectures export a way to migrate cpu's, Richard Henderson, 2011/10/25
- Re: [Qemu-devel] [PATCH 03/25] vmstate: make all architectures export a way to migrate cpu's, Michael Walle, 2011/10/25
- [Qemu-devel] [PATCH 08/25] vmstate: port cris cpu to vmstate,
Juan Quintela <=
- [Qemu-devel] [PATCH 09/25] vmstate: machine.c is only compiled for !CONFIG_USER_ONLY, Juan Quintela, 2011/10/25
- [Qemu-devel] [PATCH 11/25] vmstate: introduce float64 arrays, Juan Quintela, 2011/10/25
- [Qemu-devel] [PATCH 10/25] vmstate: introduce float32 arrays, Juan Quintela, 2011/10/25
- [Qemu-devel] [PATCH 17/25] vmstate: make incompatible change for sparc, Juan Quintela, 2011/10/25
- [Qemu-devel] [PATCH 20/25] mips: make tlb an embedded struct instead of a pointer, Juan Quintela, 2011/10/25
- [Qemu-devel] [PATCH 24/25] vmstate: port arm cpu, Juan Quintela, 2011/10/25