aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Quintela <quintela@redhat.com>2009-09-29 22:49:04 +0200
committerAnthony Liguori <aliguori@us.ibm.com>2009-10-05 09:32:42 -0500
commitfc3b0aa23ead267d85c08be5c0015b16be835b1e (patch)
treecbe2282c63afe23d9d6c6b2adc0ac5111165867b
parent468f65814ea5dd9725b6a7d6ab7d1af0e1565c40 (diff)
x86: factor out cpu_get/put_xmm_reg()
Signed-off-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r--target-i386/machine.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/target-i386/machine.c b/target-i386/machine.c
index e59b4ebee4..c68dc118f2 100644
--- a/target-i386/machine.c
+++ b/target-i386/machine.c
@@ -31,6 +31,28 @@ static void cpu_get_seg(QEMUFile *f, SegmentCache *dt)
vmstate_load_state(f, &vmstate_segment, dt, vmstate_segment.version_id);
}
+static const VMStateDescription vmstate_xmm_reg = {
+ .name = "xmm_reg",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .minimum_version_id_old = 1,
+ .fields = (VMStateField []) {
+ VMSTATE_UINT64(XMM_Q(0), XMMReg),
+ VMSTATE_UINT64(XMM_Q(1), XMMReg),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
+static void cpu_put_xmm_reg(QEMUFile *f, XMMReg *xmm_reg)
+{
+ vmstate_save_state(f, &vmstate_xmm_reg, xmm_reg);
+}
+
+static void cpu_get_xmm_reg(QEMUFile *f, XMMReg *xmm_reg)
+{
+ vmstate_load_state(f, &vmstate_xmm_reg, xmm_reg, vmstate_xmm_reg.version_id);
+}
+
static void cpu_pre_save(void *opaque)
{
CPUState *env = opaque;
@@ -128,8 +150,7 @@ void cpu_save(QEMUFile *f, void *opaque)
/* XMM */
qemu_put_be32s(f, &env->mxcsr);
for(i = 0; i < CPU_NB_REGS; i++) {
- qemu_put_be64s(f, &env->xmm_regs[i].XMM_Q(0));
- qemu_put_be64s(f, &env->xmm_regs[i].XMM_Q(1));
+ cpu_put_xmm_reg(f, &env->xmm_regs[i]);
}
#ifdef TARGET_X86_64
@@ -335,8 +356,7 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id)
qemu_get_be32s(f, &env->mxcsr);
for(i = 0; i < CPU_NB_REGS; i++) {
- qemu_get_be64s(f, &env->xmm_regs[i].XMM_Q(0));
- qemu_get_be64s(f, &env->xmm_regs[i].XMM_Q(1));
+ cpu_get_xmm_reg(f, &env->xmm_regs[i]);
}
#ifdef TARGET_X86_64