Add a couple of spec rules for MI and PL after LOGIC. These are
important for avoiding false positives in Android syscall handlers.
git-svn-id: svn://svn.valgrind.org/vex/trunk@2206 8f6e269a-dfd6-0310-a8e1-e2731360e62c
diff --git a/priv/guest_arm_helpers.c b/priv/guest_arm_helpers.c
index 8aae1b3..f5ed310 100644
--- a/priv/guest_arm_helpers.c
+++ b/priv/guest_arm_helpers.c
@@ -676,6 +676,21 @@
binop(Iop_CmpNE32, cc_dep1, mkU32(0)));
}
+ if (isU32(cond_n_op, (ARMCondPL << 4) | ARMG_CC_OP_LOGIC)) {
+ /* PL after LOGIC --> test (res >> 31) == 0 */
+ return unop(Iop_1Uto32,
+ binop(Iop_CmpEQ32,
+ binop(Iop_Shr32, cc_dep1, mkU8(31)),
+ mkU32(0)));
+ }
+ if (isU32(cond_n_op, (ARMCondMI << 4) | ARMG_CC_OP_LOGIC)) {
+ /* MI after LOGIC --> test (res >> 31) == 1 */
+ return unop(Iop_1Uto32,
+ binop(Iop_CmpEQ32,
+ binop(Iop_Shr32, cc_dep1, mkU8(31)),
+ mkU32(1)));
+ }
+
/*----------------- AL -----------------*/
/* A critically important case for Thumb code.