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);