26 |
26 |
void cpu_save(QEMUFile *f, void *opaque)
|
27 |
27 |
{
|
28 |
28 |
CPUState *env = opaque;
|
29 |
|
uint16_t fptag, fpus, fpuc, fpregs_format;
|
|
29 |
uint16_t fptag, fpus, fpregs_format;
|
30 |
30 |
int32_t pending_irq;
|
31 |
31 |
int i, bit;
|
32 |
32 |
|
... | ... | |
39 |
39 |
qemu_put_be32s(f, &env->hflags);
|
40 |
40 |
|
41 |
41 |
/* FPU */
|
42 |
|
fpuc = env->fpuc;
|
43 |
42 |
fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
|
44 |
43 |
fptag = 0;
|
45 |
44 |
for(i = 0; i < 8; i++) {
|
46 |
45 |
fptag |= ((!env->fptags[i]) << i);
|
47 |
46 |
}
|
48 |
47 |
|
49 |
|
qemu_put_be16s(f, &fpuc);
|
|
48 |
qemu_put_be16s(f, &env->fpuc);
|
50 |
49 |
qemu_put_be16s(f, &fpus);
|
51 |
50 |
qemu_put_be16s(f, &fptag);
|
52 |
51 |
|
... | ... | |
198 |
197 |
{
|
199 |
198 |
CPUState *env = opaque;
|
200 |
199 |
int i, guess_mmx;
|
201 |
|
uint16_t fpus, fpuc, fptag, fpregs_format;
|
|
200 |
uint16_t fpus, fptag, fpregs_format;
|
202 |
201 |
int32_t pending_irq;
|
203 |
202 |
|
204 |
203 |
cpu_synchronize_state(env);
|
... | ... | |
210 |
209 |
qemu_get_betls(f, &env->eflags);
|
211 |
210 |
qemu_get_be32s(f, &env->hflags);
|
212 |
211 |
|
213 |
|
qemu_get_be16s(f, &fpuc);
|
|
212 |
qemu_get_be16s(f, &env->fpuc);
|
214 |
213 |
qemu_get_be16s(f, &fpus);
|
215 |
214 |
qemu_get_be16s(f, &fptag);
|
216 |
215 |
qemu_get_be16s(f, &fpregs_format);
|
... | ... | |
260 |
259 |
}
|
261 |
260 |
}
|
262 |
261 |
|
263 |
|
env->fpuc = fpuc;
|
264 |
262 |
/* XXX: restore FPU round state */
|
265 |
263 |
env->fpstt = (fpus >> 11) & 7;
|
266 |
264 |
env->fpus = fpus & ~0x3800;
|