|
Mark Wielaard |
4e7e6e |
commit 6f472ff11be7fa4a1114b2e3d321609717325311
|
|
Mark Wielaard |
4e7e6e |
Author: tom <tom@8f6e269a-dfd6-0310-a8e1-e2731360e62c>
|
|
Mark Wielaard |
4e7e6e |
Date: Wed Feb 3 10:14:18 2016 +0000
|
|
Mark Wielaard |
4e7e6e |
|
|
Mark Wielaard |
4e7e6e |
Handle missing FCOM case on amd64.
|
|
Mark Wielaard |
4e7e6e |
|
|
Mark Wielaard |
4e7e6e |
Patch from Mark Harris on BZ#212352.
|
|
Mark Wielaard |
4e7e6e |
|
|
Mark Wielaard |
4e7e6e |
|
|
Mark Wielaard |
4e7e6e |
git-svn-id: svn://svn.valgrind.org/vex/trunk@3207 8f6e269a-dfd6-0310-a8e1-e2731360e62c
|
|
Mark Wielaard |
4e7e6e |
|
|
Mark Wielaard |
4e7e6e |
diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c
|
|
Mark Wielaard |
4e7e6e |
index af4817f..936d16f 100644
|
|
Mark Wielaard |
4e7e6e |
--- a/VEX/priv/guest_amd64_toIR.c
|
|
Mark Wielaard |
4e7e6e |
+++ b/VEX/priv/guest_amd64_toIR.c
|
|
Mark Wielaard |
4e7e6e |
@@ -6401,19 +6401,20 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
|
|
Mark Wielaard |
4e7e6e |
fp_do_op_mem_ST_0 ( addr, "mul", dis_buf, Iop_MulF64, True );
|
|
Mark Wielaard |
4e7e6e |
break;
|
|
Mark Wielaard |
4e7e6e |
|
|
Mark Wielaard |
4e7e6e |
-//.. case 2: /* FCOM double-real */
|
|
Mark Wielaard |
4e7e6e |
-//.. DIP("fcoml %s\n", dis_buf);
|
|
Mark Wielaard |
4e7e6e |
-//.. /* This forces C1 to zero, which isn't right. */
|
|
Mark Wielaard |
4e7e6e |
-//.. put_C3210(
|
|
Mark Wielaard |
4e7e6e |
-//.. binop( Iop_And32,
|
|
Mark Wielaard |
4e7e6e |
-//.. binop(Iop_Shl32,
|
|
Mark Wielaard |
4e7e6e |
-//.. binop(Iop_CmpF64,
|
|
Mark Wielaard |
4e7e6e |
-//.. get_ST(0),
|
|
Mark Wielaard |
4e7e6e |
-//.. loadLE(Ity_F64,mkexpr(addr))),
|
|
Mark Wielaard |
4e7e6e |
-//.. mkU8(8)),
|
|
Mark Wielaard |
4e7e6e |
-//.. mkU32(0x4500)
|
|
Mark Wielaard |
4e7e6e |
-//.. ));
|
|
Mark Wielaard |
4e7e6e |
-//.. break;
|
|
Mark Wielaard |
4e7e6e |
+ case 2: /* FCOM double-real */
|
|
Mark Wielaard |
4e7e6e |
+ DIP("fcoml %s\n", dis_buf);
|
|
Mark Wielaard |
4e7e6e |
+ /* This forces C1 to zero, which isn't right. */
|
|
Mark Wielaard |
4e7e6e |
+ put_C3210(
|
|
Mark Wielaard |
4e7e6e |
+ unop(Iop_32Uto64,
|
|
Mark Wielaard |
4e7e6e |
+ binop( Iop_And32,
|
|
Mark Wielaard |
4e7e6e |
+ binop(Iop_Shl32,
|
|
Mark Wielaard |
4e7e6e |
+ binop(Iop_CmpF64,
|
|
Mark Wielaard |
4e7e6e |
+ get_ST(0),
|
|
Mark Wielaard |
4e7e6e |
+ loadLE(Ity_F64,mkexpr(addr))),
|
|
Mark Wielaard |
4e7e6e |
+ mkU8(8)),
|
|
Mark Wielaard |
4e7e6e |
+ mkU32(0x4500)
|
|
Mark Wielaard |
4e7e6e |
+ )));
|
|
Mark Wielaard |
4e7e6e |
+ break;
|
|
Mark Wielaard |
4e7e6e |
|
|
Mark Wielaard |
4e7e6e |
case 3: /* FCOMP double-real */
|
|
Mark Wielaard |
4e7e6e |
DIP("fcompl %s\n", dis_buf);
|