1b758aca1SRichard Henderson #include "hw/hw.h" 2b758aca1SRichard Henderson #include "hw/boards.h" 3b758aca1SRichard Henderson 4b758aca1SRichard Henderson static int get_fpcr(QEMUFile *f, void *opaque, size_t size) 5b758aca1SRichard Henderson { 6b758aca1SRichard Henderson CPUAlphaState *env = opaque; 7b758aca1SRichard Henderson cpu_alpha_store_fpcr(env, qemu_get_be64(f)); 8b758aca1SRichard Henderson return 0; 9b758aca1SRichard Henderson } 10b758aca1SRichard Henderson 11b758aca1SRichard Henderson static void put_fpcr(QEMUFile *f, void *opaque, size_t size) 12b758aca1SRichard Henderson { 13b758aca1SRichard Henderson CPUAlphaState *env = opaque; 14b758aca1SRichard Henderson qemu_put_be64(f, cpu_alpha_load_fpcr(env)); 15b758aca1SRichard Henderson } 16b758aca1SRichard Henderson 17b758aca1SRichard Henderson static const VMStateInfo vmstate_fpcr = { 18b758aca1SRichard Henderson .name = "fpcr", 19b758aca1SRichard Henderson .get = get_fpcr, 20b758aca1SRichard Henderson .put = put_fpcr, 21b758aca1SRichard Henderson }; 22b758aca1SRichard Henderson 23b758aca1SRichard Henderson static VMStateField vmstate_cpu_fields[] = { 244d5712f1SAndreas Färber VMSTATE_UINTTL_ARRAY(ir, CPUAlphaState, 31), 254d5712f1SAndreas Färber VMSTATE_UINTTL_ARRAY(fir, CPUAlphaState, 31), 26b758aca1SRichard Henderson /* Save the architecture value of the fpcr, not the internally 27b758aca1SRichard Henderson expanded version. Since this architecture value does not 28b758aca1SRichard Henderson exist in memory to be stored, this requires a but of hoop 29b758aca1SRichard Henderson jumping. We want OFFSET=0 so that we effectively pass ENV 30b758aca1SRichard Henderson to the helper functions, and we need to fill in the name by 31b758aca1SRichard Henderson hand since there's no field of that name. */ 32b758aca1SRichard Henderson { 33b758aca1SRichard Henderson .name = "fpcr", 34b758aca1SRichard Henderson .version_id = 0, 35b758aca1SRichard Henderson .size = sizeof(uint64_t), 36b758aca1SRichard Henderson .info = &vmstate_fpcr, 37b758aca1SRichard Henderson .flags = VMS_SINGLE, 38b758aca1SRichard Henderson .offset = 0 39b758aca1SRichard Henderson }, 404d5712f1SAndreas Färber VMSTATE_UINTTL(pc, CPUAlphaState), 414d5712f1SAndreas Färber VMSTATE_UINTTL(unique, CPUAlphaState), 424d5712f1SAndreas Färber VMSTATE_UINTTL(lock_addr, CPUAlphaState), 434d5712f1SAndreas Färber VMSTATE_UINTTL(lock_value, CPUAlphaState), 44b758aca1SRichard Henderson /* Note that lock_st_addr is not saved; it is a temporary 45b758aca1SRichard Henderson used during the execution of the st[lq]_c insns. */ 46b758aca1SRichard Henderson 474d5712f1SAndreas Färber VMSTATE_UINT8(ps, CPUAlphaState), 484d5712f1SAndreas Färber VMSTATE_UINT8(intr_flag, CPUAlphaState), 494d5712f1SAndreas Färber VMSTATE_UINT8(pal_mode, CPUAlphaState), 504d5712f1SAndreas Färber VMSTATE_UINT8(fen, CPUAlphaState), 5126b46094SRichard Henderson 524d5712f1SAndreas Färber VMSTATE_UINT32(pcc_ofs, CPUAlphaState), 53b758aca1SRichard Henderson 544d5712f1SAndreas Färber VMSTATE_UINTTL(trap_arg0, CPUAlphaState), 554d5712f1SAndreas Färber VMSTATE_UINTTL(trap_arg1, CPUAlphaState), 564d5712f1SAndreas Färber VMSTATE_UINTTL(trap_arg2, CPUAlphaState), 57b758aca1SRichard Henderson 584d5712f1SAndreas Färber VMSTATE_UINTTL(exc_addr, CPUAlphaState), 594d5712f1SAndreas Färber VMSTATE_UINTTL(palbr, CPUAlphaState), 604d5712f1SAndreas Färber VMSTATE_UINTTL(ptbr, CPUAlphaState), 614d5712f1SAndreas Färber VMSTATE_UINTTL(vptptr, CPUAlphaState), 624d5712f1SAndreas Färber VMSTATE_UINTTL(sysval, CPUAlphaState), 634d5712f1SAndreas Färber VMSTATE_UINTTL(usp, CPUAlphaState), 6426b46094SRichard Henderson 654d5712f1SAndreas Färber VMSTATE_UINTTL_ARRAY(shadow, CPUAlphaState, 8), 664d5712f1SAndreas Färber VMSTATE_UINTTL_ARRAY(scratch, CPUAlphaState, 24), 6726b46094SRichard Henderson 68b758aca1SRichard Henderson VMSTATE_END_OF_LIST() 69b758aca1SRichard Henderson }; 70b758aca1SRichard Henderson 71b758aca1SRichard Henderson static const VMStateDescription vmstate_cpu = { 72b758aca1SRichard Henderson .name = "cpu", 73b758aca1SRichard Henderson .version_id = 1, 74b758aca1SRichard Henderson .minimum_version_id = 1, 75b758aca1SRichard Henderson .minimum_version_id_old = 1, 76b758aca1SRichard Henderson .fields = vmstate_cpu_fields, 77b758aca1SRichard Henderson }; 78b758aca1SRichard Henderson 79b758aca1SRichard Henderson void cpu_save(QEMUFile *f, void *opaque) 80b758aca1SRichard Henderson { 81b758aca1SRichard Henderson vmstate_save_state(f, &vmstate_cpu, opaque); 82b758aca1SRichard Henderson } 83b758aca1SRichard Henderson 84b758aca1SRichard Henderson int cpu_load(QEMUFile *f, void *opaque, int version_id) 85b758aca1SRichard Henderson { 86b758aca1SRichard Henderson return vmstate_load_state(f, &vmstate_cpu, opaque, version_id); 87b758aca1SRichard Henderson } 88