From: Julian Seward Date: Mon, 17 Aug 2015 07:29:07 +0000 (+0000) Subject: Loosen guarding conditions on "mov.w Reg, Reg" so as to allow X-Git-Tag: svn/VALGRIND_3_11_0^2~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79980fcbce66aeb04600f0d8c4d6e38dca826839;p=thirdparty%2Fvalgrind.git Loosen guarding conditions on "mov.w Reg, Reg" so as to allow reading or writing of SP. Fixes #335618. git-svn-id: svn://svn.valgrind.org/vex/trunk@3175 --- diff --git a/VEX/priv/guest_arm_toIR.c b/VEX/priv/guest_arm_toIR.c index cf483ad1fd..22e880b742 100644 --- a/VEX/priv/guest_arm_toIR.c +++ b/VEX/priv/guest_arm_toIR.c @@ -19848,11 +19848,14 @@ DisResult disInstr_THUMB_WRK ( /* ------------ (T?) MVN{S}.W Rd, Rn, {shift} ------------ */ if ((INSN0(15,0) & 0xFFCF) == 0xEA4F && INSN1(15,15) == 0) { - UInt rD = INSN1(11,8); - UInt rN = INSN1(3,0); - if (!isBadRegT(rD) && !isBadRegT(rN)) { - UInt bS = INSN0(4,4); - UInt isMVN = INSN0(5,5); + UInt rD = INSN1(11,8); + UInt rN = INSN1(3,0); + UInt bS = INSN0(4,4); + UInt isMVN = INSN0(5,5); + Bool regsOK = (bS || isMVN) + ? (!isBadRegT(rD) && !isBadRegT(rN)) + : (rD != 15 && rN != 15 && (rD != 13 || rN != 13)); + if (regsOK) { UInt imm5 = (INSN1(14,12) << 2) | INSN1(7,6); UInt how = INSN1(5,4);