]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Handle FUCOM %st(0),%st(?).
authorJulian Seward <jseward@acm.org>
Wed, 5 Oct 2005 17:58:32 +0000 (17:58 +0000)
committerJulian Seward <jseward@acm.org>
Wed, 5 Oct 2005 17:58:32 +0000 (17:58 +0000)
git-svn-id: svn://svn.valgrind.org/vex/trunk@1415

VEX/priv/guest-amd64/toIR.c

index 30f79d42f36992dc980a42285c791f76fc756497..ca735f1780387d7731e41d41a0ce18fbf014237e 100644 (file)
@@ -5404,19 +5404,20 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
                fp_pop();
                break;
 
-//..             case 0xE0 ... 0xE7: /* FUCOM %st(0),%st(?) */
-//..                r_dst = (UInt)modrm - 0xE0;
-//..                DIP("fucom %%st(0),%%st(%d)\n", r_dst);
-//..                /* This forces C1 to zero, which isn't right. */
-//..                put_C3210( 
-//..                    binop( Iop_And32,
-//..                           binop(Iop_Shl32, 
-//..                                 binop(Iop_CmpF64, get_ST(0), get_ST(r_dst)),
-//..                                 mkU8(8)),
-//..                           mkU32(0x4500)
-//..                    ));
-//..                break;
-//.. 
+            case 0xE0 ... 0xE7: /* FUCOM %st(0),%st(?) */
+               r_dst = (UInt)modrm - 0xE0;
+               DIP("fucom %%st(0),%%st(%d)\n", r_dst);
+               /* This forces C1 to zero, which isn't right. */
+               put_C3210(
+                   unop(Iop_32Uto64, 
+                   binop( Iop_And32,
+                          binop(Iop_Shl32, 
+                                binop(Iop_CmpF64, get_ST(0), get_ST(r_dst)),
+                                mkU8(8)),
+                          mkU32(0x4500)
+                   )));
+               break;
+
 //..             case 0xE8 ... 0xEF: /* FUCOMP %st(0),%st(?) */
 //..                r_dst = (UInt)modrm - 0xE8;
 //..                DIP("fucomp %%st(0),%%st(%d)\n", r_dst);