]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Implement fcmovu/fcmovnu. gcc-4.0.1 -msse2 -ftree-vectorize generates them.
authorJulian Seward <jseward@acm.org>
Mon, 4 Jul 2005 10:26:32 +0000 (10:26 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 4 Jul 2005 10:26:32 +0000 (10:26 +0000)
git-svn-id: svn://svn.valgrind.org/vex/trunk@1256

VEX/priv/guest-x86/toIR.c

index a00768edc38b68582846d47335552b032a614dcf..bb264d037d822323364c16dbe7ca18819ca3abdd 100644 (file)
@@ -4006,6 +4006,16 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
                                     get_ST(0), get_ST(r_src)) );
                break;
 
+            case 0xD8 ... 0xDF: /* FCMOVU ST(i), ST(0) */
+               r_src = (UInt)modrm - 0xD8;
+               DIP("fcmovnu %%st(%d), %%st(0)\n", (Int)r_src);
+               put_ST_UNCHECKED(0, 
+                                IRExpr_Mux0X( 
+                                    unop(Iop_1Uto8,
+                                         mk_x86g_calculate_condition(X86CondP)), 
+                                    get_ST(0), get_ST(r_src)) );
+               break;
+
             case 0xE9: /* FUCOMPP %st(0),%st(1) */
                DIP("fucompp %%st(0),%%st(1)\n");
                /* This forces C1 to zero, which isn't right. */
@@ -4152,6 +4162,16 @@ UInt dis_FPU ( Bool* decode_ok, UChar sorb, Int delta )
                                     get_ST(0), get_ST(r_src)) );
                break;
 
+            case 0xD8 ... 0xDF: /* FCMOVNU ST(i), ST(0) */
+               r_src = (UInt)modrm - 0xD8;
+               DIP("fcmovnu %%st(%d), %%st(0)\n", (Int)r_src);
+               put_ST_UNCHECKED(0, 
+                                IRExpr_Mux0X( 
+                                    unop(Iop_1Uto8,
+                                         mk_x86g_calculate_condition(X86CondNP)), 
+                                    get_ST(0), get_ST(r_src)) );
+               break;
+
             case 0xE2:
                DIP("fnclex\n");
                break;