|
From: <sv...@va...> - 2005-07-04 10:26:35
|
Author: sewardj
Date: 2005-07-04 11:26:32 +0100 (Mon, 04 Jul 2005)
New Revision: 1256
Log:
Implement fcmovu/fcmovnu. gcc-4.0.1 -msse2 -ftree-vectorize generates th=
em.
Modified:
trunk/priv/guest-x86/toIR.c
Modified: trunk/priv/guest-x86/toIR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-x86/toIR.c 2005-07-04 10:08:24 UTC (rev 1255)
+++ trunk/priv/guest-x86/toIR.c 2005-07-04 10:26:32 UTC (rev 1256)
@@ -4006,6 +4006,16 @@
get_ST(0), get_ST(r_src)) );
break;
=20
+ case 0xD8 ... 0xDF: /* FCMOVU ST(i), ST(0) */
+ r_src =3D (UInt)modrm - 0xD8;
+ DIP("fcmovnu %%st(%d), %%st(0)\n", (Int)r_src);
+ put_ST_UNCHECKED(0,=20
+ IRExpr_Mux0X(=20
+ unop(Iop_1Uto8,
+ mk_x86g_calculate_condition(X86=
CondP)),=20
+ 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 @@
get_ST(0), get_ST(r_src)) );
break;
=20
+ case 0xD8 ... 0xDF: /* FCMOVNU ST(i), ST(0) */
+ r_src =3D (UInt)modrm - 0xD8;
+ DIP("fcmovnu %%st(%d), %%st(0)\n", (Int)r_src);
+ put_ST_UNCHECKED(0,=20
+ IRExpr_Mux0X(=20
+ unop(Iop_1Uto8,
+ mk_x86g_calculate_condition(X86=
CondNP)),=20
+ get_ST(0), get_ST(r_src)) );
+ break;
+
case 0xE2:
DIP("fnclex\n");
break;
|