120 |
120 |
qemu_put_be64s(f, &env->kernelgsbase);
|
121 |
121 |
#endif
|
122 |
122 |
qemu_put_be32s(f, &env->smbase);
|
|
123 |
|
|
124 |
qemu_put_be64s(f, &env->pat);
|
|
125 |
qemu_put_be32s(f, &env->hflags2);
|
|
126 |
qemu_put_be32s(f, (uint32_t *)&env->halted);
|
|
127 |
|
|
128 |
qemu_put_be64s(f, &env->vm_hsave);
|
|
129 |
qemu_put_be64s(f, &env->vm_vmcb);
|
|
130 |
qemu_put_be64s(f, &env->tsc_offset);
|
|
131 |
qemu_put_be64s(f, &env->intercept);
|
|
132 |
qemu_put_be16s(f, &env->intercept_cr_read);
|
|
133 |
qemu_put_be16s(f, &env->intercept_cr_write);
|
|
134 |
qemu_put_be16s(f, &env->intercept_dr_read);
|
|
135 |
qemu_put_be16s(f, &env->intercept_dr_write);
|
|
136 |
qemu_put_be32s(f, &env->intercept_exceptions);
|
|
137 |
qemu_put_8s(f, &env->v_tpr);
|
123 |
138 |
}
|
124 |
139 |
|
125 |
140 |
#ifdef USE_X86LDOUBLE
|
... | ... | |
154 |
169 |
uint16_t fpus, fpuc, fptag, fpregs_format;
|
155 |
170 |
int32_t a20_mask;
|
156 |
171 |
|
157 |
|
if (version_id != 3 && version_id != 4)
|
|
172 |
if (version_id != 3 && version_id != 4 && version_id != 5)
|
158 |
173 |
return -EINVAL;
|
159 |
174 |
for(i = 0; i < CPU_NB_REGS; i++)
|
160 |
175 |
qemu_get_betls(f, &env->regs[i]);
|
... | ... | |
258 |
273 |
qemu_get_be64s(f, &env->fmask);
|
259 |
274 |
qemu_get_be64s(f, &env->kernelgsbase);
|
260 |
275 |
#endif
|
261 |
|
if (version_id >= 4)
|
|
276 |
if (version_id >= 4) {
|
262 |
277 |
qemu_get_be32s(f, &env->smbase);
|
263 |
|
|
264 |
|
/* XXX: compute hflags from scratch, except for CPL and IIF */
|
|
278 |
}
|
|
279 |
if (version_id >= 5) {
|
|
280 |
qemu_get_be64s(f, &env->pat);
|
|
281 |
qemu_get_be32s(f, &env->hflags2);
|
|
282 |
qemu_get_be32s(f, (uint32_t *)&env->halted);
|
|
283 |
|
|
284 |
qemu_get_be64s(f, &env->vm_hsave);
|
|
285 |
qemu_get_be64s(f, &env->vm_vmcb);
|
|
286 |
qemu_get_be64s(f, &env->tsc_offset);
|
|
287 |
qemu_get_be64s(f, &env->intercept);
|
|
288 |
qemu_get_be16s(f, &env->intercept_cr_read);
|
|
289 |
qemu_get_be16s(f, &env->intercept_cr_write);
|
|
290 |
qemu_get_be16s(f, &env->intercept_dr_read);
|
|
291 |
qemu_get_be16s(f, &env->intercept_dr_write);
|
|
292 |
qemu_get_be32s(f, &env->intercept_exceptions);
|
|
293 |
qemu_get_8s(f, &env->v_tpr);
|
|
294 |
}
|
|
295 |
/* XXX: ensure compatiblity for halted bit ? */
|
|
296 |
/* XXX: compute redundant hflags bits */
|
265 |
297 |
env->hflags = hflags;
|
266 |
298 |
tlb_flush(env, 1);
|
267 |
299 |
return 0;
|