|
From: <sv...@va...> - 2006-12-26 01:56:51
|
Author: sewardj
Date: 2006-12-26 01:56:49 +0000 (Tue, 26 Dec 2006)
New Revision: 1690
Log:
Merge r1660 (%eflags rule for SUBL-CondNLE)
Modified:
branches/VEX_3_2_BRANCH/priv/guest-x86/ghelpers.c
Modified: branches/VEX_3_2_BRANCH/priv/guest-x86/ghelpers.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
--- branches/VEX_3_2_BRANCH/priv/guest-x86/ghelpers.c 2006-12-24 02:20:24=
UTC (rev 1689)
+++ branches/VEX_3_2_BRANCH/priv/guest-x86/ghelpers.c 2006-12-26 01:56:49=
UTC (rev 1690)
@@ -853,6 +853,16 @@
binop(Iop_CmpLE32S, cc_dep1, cc_dep2));
}
=20
+ if (isU32(cc_op, X86G_CC_OP_SUBL) && isU32(cond, X86CondNLE)) {
+ /* long sub/cmp, then LE (signed not less than or equal)
+ --> test dst >s src=20
+ --> test !(dst <=3Ds src) */
+ return binop(Iop_Xor32,
+ unop(Iop_1Uto32,
+ binop(Iop_CmpLE32S, cc_dep1, cc_dep2)),
+ mkU32(1));
+ }
+
if (isU32(cc_op, X86G_CC_OP_SUBL) && isU32(cond, X86CondBE)) {
/* long sub/cmp, then BE (unsigned less than or equal)
--> test dst <=3Du src */
|