/* Transactional memory state */ static bool tm_needed(void *opaque) { PowerPCCPU *cpu = opaque; CPUPPCState *env = &cpu->env; return msr_ts; } static const VMStateDescription vmstate_tm = { .name = "cpu/tm", .version_id = 1, .minimum_version_id = 1, .minimum_version_id_old = 1, .needed = tm_needed, .fields = (VMStateField []) { VMSTATE_UINTTL_ARRAY(env.tm_gpr, PowerPCCPU, 32), VMSTATE_AVR_ARRAY(env.tm_vsr, PowerPCCPU, 64), VMSTATE_UINT64(env.tm_cr, PowerPCCPU), VMSTATE_UINT64(env.tm_lr, PowerPCCPU), VMSTATE_UINT64(env.tm_ctr, PowerPCCPU), VMSTATE_UINT64(env.tm_fpscr, PowerPCCPU), VMSTATE_UINT64(env.tm_amr, PowerPCCPU), VMSTATE_UINT64(env.tm_ppr, PowerPCCPU), VMSTATE_UINT64(env.tm_vrsave, PowerPCCPU), VMSTATE_UINT32(env.tm_vscr, PowerPCCPU), VMSTATE_UINT64(env.tm_dscr, PowerPCCPU), VMSTATE_UINT64(env.tm_tar, PowerPCCPU), VMSTATE_END_OF_LIST() }, }; #endif
.version_id = 1, .minimum_version_id = 1, .fields = vmstate_fpu_fields }; const VMStateDescription vmstate_inactive_fpu = { .name = "cpu/inactive_fpu", .version_id = 1, .minimum_version_id = 1, .fields = vmstate_fpu_fields }; /* TC state */ static VMStateField vmstate_tc_fields[] = { VMSTATE_UINTTL_ARRAY(gpr, TCState, 32), VMSTATE_UINTTL(PC, TCState), VMSTATE_UINTTL_ARRAY(HI, TCState, MIPS_DSP_ACC), VMSTATE_UINTTL_ARRAY(LO, TCState, MIPS_DSP_ACC), VMSTATE_UINTTL_ARRAY(ACX, TCState, MIPS_DSP_ACC), VMSTATE_UINTTL(DSPControl, TCState), VMSTATE_INT32(CP0_TCStatus, TCState), VMSTATE_INT32(CP0_TCBind, TCState), VMSTATE_UINTTL(CP0_TCHalt, TCState), VMSTATE_UINTTL(CP0_TCContext, TCState), VMSTATE_UINTTL(CP0_TCSchedule, TCState), VMSTATE_UINTTL(CP0_TCScheFBack, TCState), VMSTATE_INT32(CP0_Debug_tcstatus, TCState), VMSTATE_UINTTL(CP0_UserLocal, TCState), VMSTATE_INT32(msacsr, TCState), VMSTATE_END_OF_LIST()
* versions are different. */ #ifndef TARGET_SPARC64 #define SPARC_VMSTATE_VER 7 #else #define SPARC_VMSTATE_VER 9 #endif const VMStateDescription vmstate_sparc_cpu = { .name = "cpu", .version_id = SPARC_VMSTATE_VER, .minimum_version_id = SPARC_VMSTATE_VER, .minimum_version_id_old = SPARC_VMSTATE_VER, .pre_save = cpu_pre_save, .fields = (VMStateField[]) { VMSTATE_UINTTL_ARRAY(env.gregs, SPARCCPU, 8), VMSTATE_UINT32(env.nwindows, SPARCCPU), VMSTATE_VARRAY_MULTIPLY(env.regbase, SPARCCPU, env.nwindows, 16, vmstate_info_uinttl, target_ulong), VMSTATE_CPUDOUBLE_ARRAY(env.fpr, SPARCCPU, TARGET_DPREGS), VMSTATE_UINTTL(env.pc, SPARCCPU), VMSTATE_UINTTL(env.npc, SPARCCPU), VMSTATE_UINTTL(env.y, SPARCCPU), { .name = "psr", .version_id = 0, .size = sizeof(uint32_t), .info = &vmstate_psr, .flags = VMS_SINGLE, .offset = 0,
} static void put_fpcr(QEMUFile *f, void *opaque, size_t size) { CPUAlphaState *env = opaque; qemu_put_be64(f, cpu_alpha_load_fpcr(env)); } static const VMStateInfo vmstate_fpcr = { .name = "fpcr", .get = get_fpcr, .put = put_fpcr, }; static VMStateField vmstate_cpu_fields[] = { VMSTATE_UINTTL_ARRAY(ir, CPUState, 31), VMSTATE_UINTTL_ARRAY(fir, CPUState, 31), /* Save the architecture value of the fpcr, not the internally expanded version. Since this architecture value does not exist in memory to be stored, this requires a but of hoop jumping. We want OFFSET=0 so that we effectively pass ENV to the helper functions, and we need to fill in the name by hand since there's no field of that name. */ { .name = "fpcr", .version_id = 0, .size = sizeof(uint64_t), .info = &vmstate_fpcr, .flags = VMS_SINGLE, .offset = 0 },