185d8da3fSPhilippe Mathieu-Daudé #include "qemu/osdep.h"
285d8da3fSPhilippe Mathieu-Daudé #include "cpu.h"
385d8da3fSPhilippe Mathieu-Daudé #include "internal.h"
485d8da3fSPhilippe Mathieu-Daudé #include "migration/cpu.h"
585d8da3fSPhilippe Mathieu-Daudé #include "fpu_helper.h"
685d8da3fSPhilippe Mathieu-Daudé
cpu_post_load(void * opaque,int version_id)785d8da3fSPhilippe Mathieu-Daudé static int cpu_post_load(void *opaque, int version_id)
885d8da3fSPhilippe Mathieu-Daudé {
985d8da3fSPhilippe Mathieu-Daudé MIPSCPU *cpu = opaque;
1085d8da3fSPhilippe Mathieu-Daudé CPUMIPSState *env = &cpu->env;
1185d8da3fSPhilippe Mathieu-Daudé
1285d8da3fSPhilippe Mathieu-Daudé restore_fp_status(env);
1385d8da3fSPhilippe Mathieu-Daudé restore_msa_fp_status(env);
1485d8da3fSPhilippe Mathieu-Daudé compute_hflags(env);
1585d8da3fSPhilippe Mathieu-Daudé restore_pamask(env);
1685d8da3fSPhilippe Mathieu-Daudé
1785d8da3fSPhilippe Mathieu-Daudé return 0;
1885d8da3fSPhilippe Mathieu-Daudé }
1985d8da3fSPhilippe Mathieu-Daudé
2085d8da3fSPhilippe Mathieu-Daudé /* FPU state */
2185d8da3fSPhilippe Mathieu-Daudé
get_fpr(QEMUFile * f,void * pv,size_t size,const VMStateField * field)2285d8da3fSPhilippe Mathieu-Daudé static int get_fpr(QEMUFile *f, void *pv, size_t size,
2385d8da3fSPhilippe Mathieu-Daudé const VMStateField *field)
2485d8da3fSPhilippe Mathieu-Daudé {
2585d8da3fSPhilippe Mathieu-Daudé int i;
2685d8da3fSPhilippe Mathieu-Daudé fpr_t *v = pv;
2785d8da3fSPhilippe Mathieu-Daudé /* Restore entire MSA vector register */
2885d8da3fSPhilippe Mathieu-Daudé for (i = 0; i < MSA_WRLEN / 64; i++) {
2985d8da3fSPhilippe Mathieu-Daudé qemu_get_sbe64s(f, &v->wr.d[i]);
3085d8da3fSPhilippe Mathieu-Daudé }
3185d8da3fSPhilippe Mathieu-Daudé return 0;
3285d8da3fSPhilippe Mathieu-Daudé }
3385d8da3fSPhilippe Mathieu-Daudé
put_fpr(QEMUFile * f,void * pv,size_t size,const VMStateField * field,JSONWriter * vmdesc)3485d8da3fSPhilippe Mathieu-Daudé static int put_fpr(QEMUFile *f, void *pv, size_t size,
3585d8da3fSPhilippe Mathieu-Daudé const VMStateField *field, JSONWriter *vmdesc)
3685d8da3fSPhilippe Mathieu-Daudé {
3785d8da3fSPhilippe Mathieu-Daudé int i;
3885d8da3fSPhilippe Mathieu-Daudé fpr_t *v = pv;
3985d8da3fSPhilippe Mathieu-Daudé /* Save entire MSA vector register */
4085d8da3fSPhilippe Mathieu-Daudé for (i = 0; i < MSA_WRLEN / 64; i++) {
4185d8da3fSPhilippe Mathieu-Daudé qemu_put_sbe64s(f, &v->wr.d[i]);
4285d8da3fSPhilippe Mathieu-Daudé }
4385d8da3fSPhilippe Mathieu-Daudé
4485d8da3fSPhilippe Mathieu-Daudé return 0;
4585d8da3fSPhilippe Mathieu-Daudé }
4685d8da3fSPhilippe Mathieu-Daudé
476db6de65SRichard Henderson static const VMStateInfo vmstate_info_fpr = {
4885d8da3fSPhilippe Mathieu-Daudé .name = "fpr",
4985d8da3fSPhilippe Mathieu-Daudé .get = get_fpr,
5085d8da3fSPhilippe Mathieu-Daudé .put = put_fpr,
5185d8da3fSPhilippe Mathieu-Daudé };
5285d8da3fSPhilippe Mathieu-Daudé
5385d8da3fSPhilippe Mathieu-Daudé #define VMSTATE_FPR_ARRAY_V(_f, _s, _n, _v) \
5485d8da3fSPhilippe Mathieu-Daudé VMSTATE_ARRAY(_f, _s, _n, _v, vmstate_info_fpr, fpr_t)
5585d8da3fSPhilippe Mathieu-Daudé
5685d8da3fSPhilippe Mathieu-Daudé #define VMSTATE_FPR_ARRAY(_f, _s, _n) \
5785d8da3fSPhilippe Mathieu-Daudé VMSTATE_FPR_ARRAY_V(_f, _s, _n, 0)
5885d8da3fSPhilippe Mathieu-Daudé
596db6de65SRichard Henderson static const VMStateField vmstate_fpu_fields[] = {
6085d8da3fSPhilippe Mathieu-Daudé VMSTATE_FPR_ARRAY(fpr, CPUMIPSFPUContext, 32),
6185d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT32(fcr0, CPUMIPSFPUContext),
6285d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT32(fcr31, CPUMIPSFPUContext),
6385d8da3fSPhilippe Mathieu-Daudé VMSTATE_END_OF_LIST()
6485d8da3fSPhilippe Mathieu-Daudé };
6585d8da3fSPhilippe Mathieu-Daudé
666db6de65SRichard Henderson static const VMStateDescription vmstate_fpu = {
6785d8da3fSPhilippe Mathieu-Daudé .name = "cpu/fpu",
6885d8da3fSPhilippe Mathieu-Daudé .version_id = 1,
6985d8da3fSPhilippe Mathieu-Daudé .minimum_version_id = 1,
7085d8da3fSPhilippe Mathieu-Daudé .fields = vmstate_fpu_fields
7185d8da3fSPhilippe Mathieu-Daudé };
7285d8da3fSPhilippe Mathieu-Daudé
736db6de65SRichard Henderson static const VMStateDescription vmstate_inactive_fpu = {
7485d8da3fSPhilippe Mathieu-Daudé .name = "cpu/inactive_fpu",
7585d8da3fSPhilippe Mathieu-Daudé .version_id = 1,
7685d8da3fSPhilippe Mathieu-Daudé .minimum_version_id = 1,
7785d8da3fSPhilippe Mathieu-Daudé .fields = vmstate_fpu_fields
7885d8da3fSPhilippe Mathieu-Daudé };
7985d8da3fSPhilippe Mathieu-Daudé
8085d8da3fSPhilippe Mathieu-Daudé /* TC state */
8185d8da3fSPhilippe Mathieu-Daudé
826db6de65SRichard Henderson static const VMStateField vmstate_tc_fields[] = {
8385d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL_ARRAY(gpr, TCState, 32),
8485d8da3fSPhilippe Mathieu-Daudé #if defined(TARGET_MIPS64)
8585d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT64_ARRAY(gpr_hi, TCState, 32),
8685d8da3fSPhilippe Mathieu-Daudé #endif /* TARGET_MIPS64 */
8785d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(PC, TCState),
8885d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL_ARRAY(HI, TCState, MIPS_DSP_ACC),
8985d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL_ARRAY(LO, TCState, MIPS_DSP_ACC),
9085d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL_ARRAY(ACX, TCState, MIPS_DSP_ACC),
9185d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(DSPControl, TCState),
9285d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(CP0_TCStatus, TCState),
9385d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(CP0_TCBind, TCState),
9485d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(CP0_TCHalt, TCState),
9585d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(CP0_TCContext, TCState),
9685d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(CP0_TCSchedule, TCState),
9785d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(CP0_TCScheFBack, TCState),
9885d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(CP0_Debug_tcstatus, TCState),
9985d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(CP0_UserLocal, TCState),
10085d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(msacsr, TCState),
10185d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL_ARRAY(mxu_gpr, TCState, NUMBER_OF_MXU_REGISTERS - 1),
10285d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(mxu_cr, TCState),
10385d8da3fSPhilippe Mathieu-Daudé VMSTATE_END_OF_LIST()
10485d8da3fSPhilippe Mathieu-Daudé };
10585d8da3fSPhilippe Mathieu-Daudé
1066db6de65SRichard Henderson static const VMStateDescription vmstate_tc = {
10785d8da3fSPhilippe Mathieu-Daudé .name = "cpu/tc",
10885d8da3fSPhilippe Mathieu-Daudé .version_id = 2,
10985d8da3fSPhilippe Mathieu-Daudé .minimum_version_id = 2,
11085d8da3fSPhilippe Mathieu-Daudé .fields = vmstate_tc_fields
11185d8da3fSPhilippe Mathieu-Daudé };
11285d8da3fSPhilippe Mathieu-Daudé
1136db6de65SRichard Henderson static const VMStateDescription vmstate_inactive_tc = {
11485d8da3fSPhilippe Mathieu-Daudé .name = "cpu/inactive_tc",
11585d8da3fSPhilippe Mathieu-Daudé .version_id = 2,
11685d8da3fSPhilippe Mathieu-Daudé .minimum_version_id = 2,
11785d8da3fSPhilippe Mathieu-Daudé .fields = vmstate_tc_fields
11885d8da3fSPhilippe Mathieu-Daudé };
11985d8da3fSPhilippe Mathieu-Daudé
12085d8da3fSPhilippe Mathieu-Daudé /* MVP state */
12185d8da3fSPhilippe Mathieu-Daudé
1226db6de65SRichard Henderson static const VMStateDescription vmstate_mvp = {
12385d8da3fSPhilippe Mathieu-Daudé .name = "cpu/mvp",
12485d8da3fSPhilippe Mathieu-Daudé .version_id = 1,
12585d8da3fSPhilippe Mathieu-Daudé .minimum_version_id = 1,
1266db6de65SRichard Henderson .fields = (const VMStateField[]) {
12785d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(CP0_MVPControl, CPUMIPSMVPContext),
12885d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(CP0_MVPConf0, CPUMIPSMVPContext),
12985d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(CP0_MVPConf1, CPUMIPSMVPContext),
13085d8da3fSPhilippe Mathieu-Daudé VMSTATE_END_OF_LIST()
13185d8da3fSPhilippe Mathieu-Daudé }
13285d8da3fSPhilippe Mathieu-Daudé };
13385d8da3fSPhilippe Mathieu-Daudé
13485d8da3fSPhilippe Mathieu-Daudé /* TLB state */
13585d8da3fSPhilippe Mathieu-Daudé
get_tlb(QEMUFile * f,void * pv,size_t size,const VMStateField * field)13685d8da3fSPhilippe Mathieu-Daudé static int get_tlb(QEMUFile *f, void *pv, size_t size,
13785d8da3fSPhilippe Mathieu-Daudé const VMStateField *field)
13885d8da3fSPhilippe Mathieu-Daudé {
13985d8da3fSPhilippe Mathieu-Daudé r4k_tlb_t *v = pv;
14085d8da3fSPhilippe Mathieu-Daudé uint16_t flags;
14185d8da3fSPhilippe Mathieu-Daudé
14285d8da3fSPhilippe Mathieu-Daudé qemu_get_betls(f, &v->VPN);
14385d8da3fSPhilippe Mathieu-Daudé qemu_get_be32s(f, &v->PageMask);
14485d8da3fSPhilippe Mathieu-Daudé qemu_get_be16s(f, &v->ASID);
14559e75927SYongbok Kim qemu_get_be32s(f, &v->MMID);
14685d8da3fSPhilippe Mathieu-Daudé qemu_get_be16s(f, &flags);
14785d8da3fSPhilippe Mathieu-Daudé v->G = (flags >> 10) & 1;
14885d8da3fSPhilippe Mathieu-Daudé v->C0 = (flags >> 7) & 3;
14985d8da3fSPhilippe Mathieu-Daudé v->C1 = (flags >> 4) & 3;
15085d8da3fSPhilippe Mathieu-Daudé v->V0 = (flags >> 3) & 1;
15185d8da3fSPhilippe Mathieu-Daudé v->V1 = (flags >> 2) & 1;
15285d8da3fSPhilippe Mathieu-Daudé v->D0 = (flags >> 1) & 1;
15385d8da3fSPhilippe Mathieu-Daudé v->D1 = (flags >> 0) & 1;
15485d8da3fSPhilippe Mathieu-Daudé v->EHINV = (flags >> 15) & 1;
15585d8da3fSPhilippe Mathieu-Daudé v->RI1 = (flags >> 14) & 1;
15685d8da3fSPhilippe Mathieu-Daudé v->RI0 = (flags >> 13) & 1;
15785d8da3fSPhilippe Mathieu-Daudé v->XI1 = (flags >> 12) & 1;
15885d8da3fSPhilippe Mathieu-Daudé v->XI0 = (flags >> 11) & 1;
15985d8da3fSPhilippe Mathieu-Daudé qemu_get_be64s(f, &v->PFN[0]);
16085d8da3fSPhilippe Mathieu-Daudé qemu_get_be64s(f, &v->PFN[1]);
16185d8da3fSPhilippe Mathieu-Daudé
16285d8da3fSPhilippe Mathieu-Daudé return 0;
16385d8da3fSPhilippe Mathieu-Daudé }
16485d8da3fSPhilippe Mathieu-Daudé
put_tlb(QEMUFile * f,void * pv,size_t size,const VMStateField * field,JSONWriter * vmdesc)16585d8da3fSPhilippe Mathieu-Daudé static int put_tlb(QEMUFile *f, void *pv, size_t size,
16685d8da3fSPhilippe Mathieu-Daudé const VMStateField *field, JSONWriter *vmdesc)
16785d8da3fSPhilippe Mathieu-Daudé {
16885d8da3fSPhilippe Mathieu-Daudé r4k_tlb_t *v = pv;
16985d8da3fSPhilippe Mathieu-Daudé
17085d8da3fSPhilippe Mathieu-Daudé uint16_t asid = v->ASID;
17159e75927SYongbok Kim uint32_t mmid = v->MMID;
17285d8da3fSPhilippe Mathieu-Daudé uint16_t flags = ((v->EHINV << 15) |
17385d8da3fSPhilippe Mathieu-Daudé (v->RI1 << 14) |
17485d8da3fSPhilippe Mathieu-Daudé (v->RI0 << 13) |
17585d8da3fSPhilippe Mathieu-Daudé (v->XI1 << 12) |
17685d8da3fSPhilippe Mathieu-Daudé (v->XI0 << 11) |
17785d8da3fSPhilippe Mathieu-Daudé (v->G << 10) |
17885d8da3fSPhilippe Mathieu-Daudé (v->C0 << 7) |
17985d8da3fSPhilippe Mathieu-Daudé (v->C1 << 4) |
18085d8da3fSPhilippe Mathieu-Daudé (v->V0 << 3) |
18185d8da3fSPhilippe Mathieu-Daudé (v->V1 << 2) |
18285d8da3fSPhilippe Mathieu-Daudé (v->D0 << 1) |
18385d8da3fSPhilippe Mathieu-Daudé (v->D1 << 0));
18485d8da3fSPhilippe Mathieu-Daudé
18585d8da3fSPhilippe Mathieu-Daudé qemu_put_betls(f, &v->VPN);
18685d8da3fSPhilippe Mathieu-Daudé qemu_put_be32s(f, &v->PageMask);
18785d8da3fSPhilippe Mathieu-Daudé qemu_put_be16s(f, &asid);
18859e75927SYongbok Kim qemu_put_be32s(f, &mmid);
18985d8da3fSPhilippe Mathieu-Daudé qemu_put_be16s(f, &flags);
19085d8da3fSPhilippe Mathieu-Daudé qemu_put_be64s(f, &v->PFN[0]);
19185d8da3fSPhilippe Mathieu-Daudé qemu_put_be64s(f, &v->PFN[1]);
19285d8da3fSPhilippe Mathieu-Daudé
19385d8da3fSPhilippe Mathieu-Daudé return 0;
19485d8da3fSPhilippe Mathieu-Daudé }
19585d8da3fSPhilippe Mathieu-Daudé
1966db6de65SRichard Henderson static const VMStateInfo vmstate_info_tlb = {
19785d8da3fSPhilippe Mathieu-Daudé .name = "tlb_entry",
19885d8da3fSPhilippe Mathieu-Daudé .get = get_tlb,
19985d8da3fSPhilippe Mathieu-Daudé .put = put_tlb,
20085d8da3fSPhilippe Mathieu-Daudé };
20185d8da3fSPhilippe Mathieu-Daudé
20285d8da3fSPhilippe Mathieu-Daudé #define VMSTATE_TLB_ARRAY_V(_f, _s, _n, _v) \
20385d8da3fSPhilippe Mathieu-Daudé VMSTATE_ARRAY(_f, _s, _n, _v, vmstate_info_tlb, r4k_tlb_t)
20485d8da3fSPhilippe Mathieu-Daudé
20585d8da3fSPhilippe Mathieu-Daudé #define VMSTATE_TLB_ARRAY(_f, _s, _n) \
20685d8da3fSPhilippe Mathieu-Daudé VMSTATE_TLB_ARRAY_V(_f, _s, _n, 0)
20785d8da3fSPhilippe Mathieu-Daudé
2086db6de65SRichard Henderson static const VMStateDescription vmstate_tlb = {
20985d8da3fSPhilippe Mathieu-Daudé .name = "cpu/tlb",
21059e75927SYongbok Kim .version_id = 3,
21159e75927SYongbok Kim .minimum_version_id = 3,
2126db6de65SRichard Henderson .fields = (const VMStateField[]) {
21385d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT32(nb_tlb, CPUMIPSTLBContext),
21485d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT32(tlb_in_use, CPUMIPSTLBContext),
21585d8da3fSPhilippe Mathieu-Daudé VMSTATE_TLB_ARRAY(mmu.r4k.tlb, CPUMIPSTLBContext, MIPS_TLB_MAX),
21685d8da3fSPhilippe Mathieu-Daudé VMSTATE_END_OF_LIST()
21785d8da3fSPhilippe Mathieu-Daudé }
21885d8da3fSPhilippe Mathieu-Daudé };
21985d8da3fSPhilippe Mathieu-Daudé
22085d8da3fSPhilippe Mathieu-Daudé /* MIPS CPU state */
22185d8da3fSPhilippe Mathieu-Daudé
22285d8da3fSPhilippe Mathieu-Daudé const VMStateDescription vmstate_mips_cpu = {
22385d8da3fSPhilippe Mathieu-Daudé .name = "cpu",
22485d8da3fSPhilippe Mathieu-Daudé .version_id = 21,
22585d8da3fSPhilippe Mathieu-Daudé .minimum_version_id = 21,
22685d8da3fSPhilippe Mathieu-Daudé .post_load = cpu_post_load,
2276db6de65SRichard Henderson .fields = (const VMStateField[]) {
22885d8da3fSPhilippe Mathieu-Daudé /* Active TC */
22985d8da3fSPhilippe Mathieu-Daudé VMSTATE_STRUCT(env.active_tc, MIPSCPU, 1, vmstate_tc, TCState),
23085d8da3fSPhilippe Mathieu-Daudé
23185d8da3fSPhilippe Mathieu-Daudé /* Active FPU */
23285d8da3fSPhilippe Mathieu-Daudé VMSTATE_STRUCT(env.active_fpu, MIPSCPU, 1, vmstate_fpu,
23385d8da3fSPhilippe Mathieu-Daudé CPUMIPSFPUContext),
23485d8da3fSPhilippe Mathieu-Daudé
23585d8da3fSPhilippe Mathieu-Daudé /* MVP */
23685d8da3fSPhilippe Mathieu-Daudé VMSTATE_STRUCT_POINTER(env.mvp, MIPSCPU, vmstate_mvp,
23785d8da3fSPhilippe Mathieu-Daudé CPUMIPSMVPContext),
23885d8da3fSPhilippe Mathieu-Daudé
23985d8da3fSPhilippe Mathieu-Daudé /* TLB */
24085d8da3fSPhilippe Mathieu-Daudé VMSTATE_STRUCT_POINTER(env.tlb, MIPSCPU, vmstate_tlb,
24185d8da3fSPhilippe Mathieu-Daudé CPUMIPSTLBContext),
24285d8da3fSPhilippe Mathieu-Daudé
24385d8da3fSPhilippe Mathieu-Daudé /* CPU metastate */
24485d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT32(env.current_tc, MIPSCPU),
245*a144a3baSPhilippe Mathieu-Daudé VMSTATE_UNUSED(sizeof(uint32_t)), /* was current_fpu */
24685d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.error_code, MIPSCPU),
24785d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.btarget, MIPSCPU),
24885d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.bcond, MIPSCPU),
24985d8da3fSPhilippe Mathieu-Daudé
25085d8da3fSPhilippe Mathieu-Daudé /* Remaining CP0 registers */
25185d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Index, MIPSCPU),
25285d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_VPControl, MIPSCPU),
25385d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Random, MIPSCPU),
25485d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_VPEControl, MIPSCPU),
25585d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_VPEConf0, MIPSCPU),
25685d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_VPEConf1, MIPSCPU),
25785d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_YQMask, MIPSCPU),
25885d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_VPESchedule, MIPSCPU),
25985d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_VPEScheFBack, MIPSCPU),
26085d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_VPEOpt, MIPSCPU),
26185d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT64(env.CP0_EntryLo0, MIPSCPU),
26285d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT64(env.CP0_EntryLo1, MIPSCPU),
26385d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_GlobalNumber, MIPSCPU),
26485d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_Context, MIPSCPU),
26585d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_MemoryMapID, MIPSCPU),
26685d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_PageMask, MIPSCPU),
26785d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_PageGrain, MIPSCPU),
26885d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_SegCtl0, MIPSCPU),
26985d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_SegCtl1, MIPSCPU),
27085d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_SegCtl2, MIPSCPU),
27185d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_PWBase, MIPSCPU),
27285d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_PWField, MIPSCPU),
27385d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_PWSize, MIPSCPU),
27485d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Wired, MIPSCPU),
27585d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_PWCtl, MIPSCPU),
27685d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_SRSConf0, MIPSCPU),
27785d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_SRSConf1, MIPSCPU),
27885d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_SRSConf2, MIPSCPU),
27985d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_SRSConf3, MIPSCPU),
28085d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_SRSConf4, MIPSCPU),
28185d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_HWREna, MIPSCPU),
28285d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_BadVAddr, MIPSCPU),
28385d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT32(env.CP0_BadInstr, MIPSCPU),
28485d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT32(env.CP0_BadInstrP, MIPSCPU),
28585d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT32(env.CP0_BadInstrX, MIPSCPU),
28685d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Count, MIPSCPU),
287fa827426SPhilippe Mathieu-Daudé VMSTATE_UNUSED(sizeof(uint32_t)), /* was CP0_SAARI */
2885235993fSPhilippe Mathieu-Daudé VMSTATE_UNUSED(2 * sizeof(uint64_t)), /* was CP0_SAAR[2] */
28985d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_EntryHi, MIPSCPU),
29085d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Compare, MIPSCPU),
29185d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Status, MIPSCPU),
29285d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_IntCtl, MIPSCPU),
29385d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_SRSCtl, MIPSCPU),
29485d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_SRSMap, MIPSCPU),
29585d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Cause, MIPSCPU),
29685d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_EPC, MIPSCPU),
29785d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_PRid, MIPSCPU),
29885d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_EBase, MIPSCPU),
29985d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_CMGCRBase, MIPSCPU),
30085d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Config0, MIPSCPU),
30185d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Config1, MIPSCPU),
30285d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Config2, MIPSCPU),
30385d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Config3, MIPSCPU),
30485d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Config4, MIPSCPU),
30585d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Config5, MIPSCPU),
30685d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Config6, MIPSCPU),
30785d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Config7, MIPSCPU),
30885d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT64(env.CP0_LLAddr, MIPSCPU),
30985d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT64_ARRAY(env.CP0_MAAR, MIPSCPU, MIPS_MAAR_MAX),
31085d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_MAARI, MIPSCPU),
31185d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.lladdr, MIPSCPU),
31285d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL_ARRAY(env.CP0_WatchLo, MIPSCPU, 8),
31385d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT64_ARRAY(env.CP0_WatchHi, MIPSCPU, 8),
31485d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_XContext, MIPSCPU),
31585d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Framemask, MIPSCPU),
31685d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Debug, MIPSCPU),
31785d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_DEPC, MIPSCPU),
31885d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_Performance0, MIPSCPU),
31985d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_ErrCtl, MIPSCPU),
32085d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINT64(env.CP0_TagLo, MIPSCPU),
32185d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_DataLo, MIPSCPU),
32285d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_TagHi, MIPSCPU),
32385d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_DataHi, MIPSCPU),
32485d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL(env.CP0_ErrorEPC, MIPSCPU),
32585d8da3fSPhilippe Mathieu-Daudé VMSTATE_INT32(env.CP0_DESAVE, MIPSCPU),
32685d8da3fSPhilippe Mathieu-Daudé VMSTATE_UINTTL_ARRAY(env.CP0_KScratch, MIPSCPU, MIPS_KSCRATCH_NUM),
32785d8da3fSPhilippe Mathieu-Daudé
32885d8da3fSPhilippe Mathieu-Daudé /* Inactive TC */
32985d8da3fSPhilippe Mathieu-Daudé VMSTATE_STRUCT_ARRAY(env.tcs, MIPSCPU, MIPS_SHADOW_SET_MAX, 1,
33085d8da3fSPhilippe Mathieu-Daudé vmstate_inactive_tc, TCState),
33185d8da3fSPhilippe Mathieu-Daudé VMSTATE_STRUCT_ARRAY(env.fpus, MIPSCPU, MIPS_FPU_MAX, 1,
33285d8da3fSPhilippe Mathieu-Daudé vmstate_inactive_fpu, CPUMIPSFPUContext),
33385d8da3fSPhilippe Mathieu-Daudé
33485d8da3fSPhilippe Mathieu-Daudé VMSTATE_END_OF_LIST()
33585d8da3fSPhilippe Mathieu-Daudé },
33685d8da3fSPhilippe Mathieu-Daudé };
337