|  | #include "hw/hw.h" | 
|  | #include "hw/boards.h" | 
|  |  | 
|  | static int get_fpcr(QEMUFile *f, void *opaque, size_t size) | 
|  | { | 
|  | CPUAlphaState *env = opaque; | 
|  | cpu_alpha_store_fpcr(env, qemu_get_be64(f)); | 
|  | return 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 | 
|  | }, | 
|  | VMSTATE_UINTTL(pc, CPUState), | 
|  | VMSTATE_UINTTL(unique, CPUState), | 
|  | VMSTATE_UINTTL(lock_addr, CPUState), | 
|  | VMSTATE_UINTTL(lock_value, CPUState), | 
|  | /* Note that lock_st_addr is not saved; it is a temporary | 
|  | used during the execution of the st[lq]_c insns.  */ | 
|  |  | 
|  | VMSTATE_UINT8(ps, CPUState), | 
|  | VMSTATE_UINT8(intr_flag, CPUState), | 
|  | VMSTATE_UINT8(pal_mode, CPUState), | 
|  | VMSTATE_UINT8(fen, CPUState), | 
|  |  | 
|  | VMSTATE_UINT32(pcc_ofs, CPUState), | 
|  |  | 
|  | VMSTATE_UINTTL(trap_arg0, CPUState), | 
|  | VMSTATE_UINTTL(trap_arg1, CPUState), | 
|  | VMSTATE_UINTTL(trap_arg2, CPUState), | 
|  |  | 
|  | VMSTATE_UINTTL(exc_addr, CPUState), | 
|  | VMSTATE_UINTTL(palbr, CPUState), | 
|  | VMSTATE_UINTTL(ptbr, CPUState), | 
|  | VMSTATE_UINTTL(vptptr, CPUState), | 
|  | VMSTATE_UINTTL(sysval, CPUState), | 
|  | VMSTATE_UINTTL(usp, CPUState), | 
|  |  | 
|  | VMSTATE_UINTTL_ARRAY(shadow, CPUState, 8), | 
|  | VMSTATE_UINTTL_ARRAY(scratch, CPUState, 24), | 
|  |  | 
|  | VMSTATE_END_OF_LIST() | 
|  | }; | 
|  |  | 
|  | static const VMStateDescription vmstate_cpu = { | 
|  | .name = "cpu", | 
|  | .version_id = 1, | 
|  | .minimum_version_id = 1, | 
|  | .minimum_version_id_old = 1, | 
|  | .fields = vmstate_cpu_fields, | 
|  | }; | 
|  |  | 
|  | void cpu_save(QEMUFile *f, void *opaque) | 
|  | { | 
|  | vmstate_save_state(f, &vmstate_cpu, opaque); | 
|  | } | 
|  |  | 
|  | int cpu_load(QEMUFile *f, void *opaque, int version_id) | 
|  | { | 
|  | return vmstate_load_state(f, &vmstate_cpu, opaque, version_id); | 
|  | } |