aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/x86/x86_emulate
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2011-03-08 16:14:55 +0000
committerKeir Fraser <keir@xen.org>2011-03-08 16:14:55 +0000
commit076eae8bef9fcbc18b7541a56b3d897ea16b3865 (patch)
tree93ca40efb1ba12a58d056ab24ffce39266857b1f /xen/arch/x86/x86_emulate
parentcc18b6ba43b803dee141e8fe0bedace66603b64b (diff)
downloadxen-076eae8bef9fcbc18b7541a56b3d897ea16b3865.tar.gz
xen-076eae8bef9fcbc18b7541a56b3d897ea16b3865.tar.bz2
xen-076eae8bef9fcbc18b7541a56b3d897ea16b3865.zip
x86_emulate: FPU 0xda instructions have a 32-bit memory operand, not 64-bit.
Signed-off-by: Keir Fraser <keir@xen.org>
Diffstat (limited to 'xen/arch/x86/x86_emulate')
-rw-r--r--xen/arch/x86/x86_emulate/x86_emulate.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c b/xen/arch/x86/x86_emulate/x86_emulate.c
index da5cbd1d61..84f6c3be61 100644
--- a/xen/arch/x86/x86_emulate/x86_emulate.c
+++ b/xen/arch/x86/x86_emulate/x86_emulate.c
@@ -2667,35 +2667,35 @@ x86_emulate(
break;
default:
fail_if(modrm >= 0xc0);
- ea.bytes = 8;
+ ea.bytes = 4;
src = ea;
if ( (rc = ops->read(src.mem.seg, src.mem.off, &src.val,
src.bytes, ctxt)) != 0 )
goto done;
switch ( modrm_reg & 7 )
{
- case 0: /* fiadd m64i */
+ case 0: /* fiadd m32i */
emulate_fpu_insn_memsrc("fiaddl", src.val);
break;
- case 1: /* fimul m64i */
+ case 1: /* fimul m32i */
emulate_fpu_insn_memsrc("fimull", src.val);
break;
- case 2: /* ficom m64i */
+ case 2: /* ficom m32i */
emulate_fpu_insn_memsrc("ficoml", src.val);
break;
- case 3: /* ficomp m64i */
+ case 3: /* ficomp m32i */
emulate_fpu_insn_memsrc("ficompl", src.val);
break;
- case 4: /* fisub m64i */
+ case 4: /* fisub m32i */
emulate_fpu_insn_memsrc("fisubl", src.val);
break;
- case 5: /* fisubr m64i */
+ case 5: /* fisubr m32i */
emulate_fpu_insn_memsrc("fisubrl", src.val);
break;
- case 6: /* fidiv m64i */
+ case 6: /* fidiv m32i */
emulate_fpu_insn_memsrc("fidivl", src.val);
break;
- case 7: /* fidivr m64i */
+ case 7: /* fidivr m32i */
emulate_fpu_insn_memsrc("fidivrl", src.val);
break;
default: