From: Julian Seward Date: Fri, 23 Sep 2011 15:04:29 +0000 (+0000) Subject: Add a couple of spec rules for MI and PL after LOGIC. These are X-Git-Tag: svn/VALGRIND_3_7_0^2~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=96b712612639747bd1a88755f5b72aa038588276;p=thirdparty%2Fvalgrind.git 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 --- diff --git a/VEX/priv/guest_arm_helpers.c b/VEX/priv/guest_arm_helpers.c index 8aae1b34fb..f5ed31038f 100644 --- a/VEX/priv/guest_arm_helpers.c +++ b/VEX/priv/guest_arm_helpers.c @@ -676,6 +676,21 @@ IRExpr* guest_arm_spechelper ( HChar* function_name, 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.