Revision 0b8f1b10

b/target-sparc/cpu.h
397 397
#define cpu_signal_handler cpu_sparc_signal_handler
398 398
#define cpu_list sparc_cpu_list
399 399

  
400
#define CPU_SAVE_VERSION 4
400
#define CPU_SAVE_VERSION 5
401 401

  
402 402
/* MMU modes definitions */
403 403
#define MMU_MODE0_SUFFIX _user
b/target-sparc/machine.c
1 1
#include "hw/hw.h"
2 2
#include "hw/boards.h"
3
#include "qemu-timer.h"
3 4

  
4 5
#include "exec-all.h"
5 6

  
......
56 57
#ifndef TARGET_SPARC64
57 58
    qemu_put_be32s(f, &env->wim);
58 59
    /* MMU */
59
    for(i = 0; i < 16; i++)
60
    for (i = 0; i < 32; i++)
60 61
        qemu_put_be32s(f, &env->mmuregs[i]);
62
#else
63
    qemu_put_be64s(f, &env->lsu);
64
    for (i = 0; i < 16; i++) {
65
        qemu_put_be64s(f, &env->immuregs[i]);
66
        qemu_put_be64s(f, &env->dmmuregs[i]);
67
    }
68
    for (i = 0; i < 64; i++) {
69
        qemu_put_be64s(f, &env->itlb_tag[i]);
70
        qemu_put_be64s(f, &env->itlb_tte[i]);
71
        qemu_put_be64s(f, &env->dtlb_tag[i]);
72
        qemu_put_be64s(f, &env->dtlb_tte[i]);
73
    }
74
    qemu_put_be32s(f, &env->mmu_version);
75
    for (i = 0; i < MAXTL; i++) {
76
        qemu_put_be64s(f, &env->ts[i].tpc);
77
        qemu_put_be64s(f, &env->ts[i].tnpc);
78
        qemu_put_be64s(f, &env->ts[i].tstate);
79
        qemu_put_be32s(f, &env->ts[i].tt);
80
    }
81
    qemu_put_be32s(f, &env->xcc);
82
    qemu_put_be32s(f, &env->asi);
83
    qemu_put_be32s(f, &env->pstate);
84
    qemu_put_be32s(f, &env->tl);
85
    qemu_put_be32s(f, &env->cansave);
86
    qemu_put_be32s(f, &env->canrestore);
87
    qemu_put_be32s(f, &env->otherwin);
88
    qemu_put_be32s(f, &env->wstate);
89
    qemu_put_be32s(f, &env->cleanwin);
90
    for (i = 0; i < 8; i++)
91
        qemu_put_be64s(f, &env->agregs[i]);
92
    for (i = 0; i < 8; i++)
93
        qemu_put_be64s(f, &env->bgregs[i]);
94
    for (i = 0; i < 8; i++)
95
        qemu_put_be64s(f, &env->igregs[i]);
96
    for (i = 0; i < 8; i++)
97
        qemu_put_be64s(f, &env->mgregs[i]);
98
    qemu_put_be64s(f, &env->fprs);
99
    qemu_put_be64s(f, &env->tick_cmpr);
100
    qemu_put_be64s(f, &env->stick_cmpr);
101
    qemu_put_ptimer(f, env->tick);
102
    qemu_put_ptimer(f, env->stick);
103
    qemu_put_be64s(f, &env->gsr);
104
    qemu_put_be32s(f, &env->gl);
105
    qemu_put_be64s(f, &env->hpstate);
106
    for (i = 0; i < MAXTL; i++)
107
        qemu_put_be64s(f, &env->htstate[i]);
108
    qemu_put_be64s(f, &env->hintp);
109
    qemu_put_be64s(f, &env->htba);
110
    qemu_put_be64s(f, &env->hver);
111
    qemu_put_be64s(f, &env->hstick_cmpr);
112
    qemu_put_be64s(f, &env->ssr);
113
    qemu_get_ptimer(f, env->hstick);
61 114
#endif
62 115
}
63 116

  
......
67 120
    int i;
68 121
    uint32_t tmp;
69 122

  
70
    if (version_id != 4)
123
    if (version_id != 5)
71 124
        return -EINVAL;
72 125
    for(i = 0; i < 8; i++)
73 126
        qemu_get_betls(f, &env->gregs[i]);
......
97 150
#ifndef TARGET_SPARC64
98 151
    qemu_get_be32s(f, &env->wim);
99 152
    /* MMU */
100
    for(i = 0; i < 16; i++)
153
    for (i = 0; i < 32; i++)
101 154
        qemu_get_be32s(f, &env->mmuregs[i]);
155
#else
156
    qemu_get_be64s(f, &env->lsu);
157
    for (i = 0; i < 16; i++) {
158
        qemu_get_be64s(f, &env->immuregs[i]);
159
        qemu_get_be64s(f, &env->dmmuregs[i]);
160
    }
161
    for (i = 0; i < 64; i++) {
162
        qemu_get_be64s(f, &env->itlb_tag[i]);
163
        qemu_get_be64s(f, &env->itlb_tte[i]);
164
        qemu_get_be64s(f, &env->dtlb_tag[i]);
165
        qemu_get_be64s(f, &env->dtlb_tte[i]);
166
    }
167
    qemu_get_be32s(f, &env->mmu_version);
168
    for (i = 0; i < MAXTL; i++) {
169
        qemu_get_be64s(f, &env->ts[i].tpc);
170
        qemu_get_be64s(f, &env->ts[i].tnpc);
171
        qemu_get_be64s(f, &env->ts[i].tstate);
172
        qemu_get_be32s(f, &env->ts[i].tt);
173
    }
174
    qemu_get_be32s(f, &env->xcc);
175
    qemu_get_be32s(f, &env->asi);
176
    qemu_get_be32s(f, &env->pstate);
177
    qemu_get_be32s(f, &env->tl);
178
    env->tsptr = &env->ts[env->tl];
179
    qemu_get_be32s(f, &env->cansave);
180
    qemu_get_be32s(f, &env->canrestore);
181
    qemu_get_be32s(f, &env->otherwin);
182
    qemu_get_be32s(f, &env->wstate);
183
    qemu_get_be32s(f, &env->cleanwin);
184
    for (i = 0; i < 8; i++)
185
        qemu_get_be64s(f, &env->agregs[i]);
186
    for (i = 0; i < 8; i++)
187
        qemu_get_be64s(f, &env->bgregs[i]);
188
    for (i = 0; i < 8; i++)
189
        qemu_get_be64s(f, &env->igregs[i]);
190
    for (i = 0; i < 8; i++)
191
        qemu_get_be64s(f, &env->mgregs[i]);
192
    qemu_get_be64s(f, &env->fprs);
193
    qemu_get_be64s(f, &env->tick_cmpr);
194
    qemu_get_be64s(f, &env->stick_cmpr);
195
    qemu_get_ptimer(f, env->tick);
196
    qemu_get_ptimer(f, env->stick);
197
    qemu_get_be64s(f, &env->gsr);
198
    qemu_get_be32s(f, &env->gl);
199
    qemu_get_be64s(f, &env->hpstate);
200
    for (i = 0; i < MAXTL; i++)
201
        qemu_get_be64s(f, &env->htstate[i]);
202
    qemu_get_be64s(f, &env->hintp);
203
    qemu_get_be64s(f, &env->htba);
204
    qemu_get_be64s(f, &env->hver);
205
    qemu_get_be64s(f, &env->hstick_cmpr);
206
    qemu_get_be64s(f, &env->ssr);
207
    qemu_get_ptimer(f, env->hstick);
102 208
#endif
103 209
    tlb_flush(env, 1);
104 210
    return 0;

Also available in: Unified diff