|
From: <sv...@va...> - 2011-09-23 08:35:21
|
Author: sewardj
Date: 2011-09-23 09:30:34 +0100 (Fri, 23 Sep 2011)
New Revision: 2204
Log:
Add a couple more spec rules: LO after SUB and GT after SUB.
Modified:
trunk/priv/guest_arm_helpers.c
Modified: trunk/priv/guest_arm_helpers.c
===================================================================
--- trunk/priv/guest_arm_helpers.c 2011-09-22 21:33:27 UTC (rev 2203)
+++ trunk/priv/guest_arm_helpers.c 2011-09-23 08:30:34 UTC (rev 2204)
@@ -532,6 +532,12 @@
binop(Iop_CmpNE32, cc_dep1, cc_dep2));
}
+ if (isU32(cond_n_op, (ARMCondGT << 4) | ARMG_CC_OP_SUB)) {
+ /* GT after SUB --> test argL >s argR
+ --> test argR <s argL */
+ return unop(Iop_1Uto32,
+ binop(Iop_CmpLT32S, cc_dep2, cc_dep1));
+ }
if (isU32(cond_n_op, (ARMCondLE << 4) | ARMG_CC_OP_SUB)) {
/* LE after SUB --> test argL <=s argR */
return unop(Iop_1Uto32,
@@ -557,6 +563,11 @@
return unop(Iop_1Uto32,
binop(Iop_CmpLE32U, cc_dep2, cc_dep1));
}
+ if (isU32(cond_n_op, (ARMCondLO << 4) | ARMG_CC_OP_SUB)) {
+ /* LO after SUB --> test argL <u argR */
+ return unop(Iop_1Uto32,
+ binop(Iop_CmpLT32U, cc_dep1, cc_dep2));
+ }
if (isU32(cond_n_op, (ARMCondLS << 4) | ARMG_CC_OP_SUB)) {
/* LS after SUB --> test argL <=u argR */
|