]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Fix incorrect spec rule for LE after INCB, for end-of range cases (arg = 0x7F).
authorJulian Seward <jseward@acm.org>
Sun, 28 Feb 2010 04:51:02 +0000 (04:51 +0000)
committerJulian Seward <jseward@acm.org>
Sun, 28 Feb 2010 04:51:02 +0000 (04:51 +0000)
git-svn-id: svn://svn.valgrind.org/vex/trunk@1962

VEX/priv/guest_amd64_helpers.c

index e087650cf0708ef89be00095cd8a38734499372d..01d774517debbbdb8cda2b7cdd752d3cbd33ecd5 100644 (file)
@@ -1189,11 +1189,12 @@ IRExpr* guest_amd64_spechelper ( HChar* function_name,
       /*---------------- INCB ----------------*/
 
       if (isU64(cc_op, AMD64G_CC_OP_INCB) && isU64(cond, AMD64CondLE)) {
-         /* 8-bit inc, then LE --> test result <=s 0 */
-         return unop(Iop_1Uto64,
-                     binop(Iop_CmpLE64S, 
-                           binop(Iop_Shl64,cc_dep1,mkU8(56)),
-                           mkU64(0)));
+         /* 8-bit inc, then LE --> sign bit of the arg */
+         return binop(Iop_And64,
+                      binop(Iop_Shr64,
+                            binop(Iop_Sub64, cc_dep1, mkU64(1)),
+                            mkU8(7)),
+                      mkU64(1));
       }
 
       /*---------------- INCW ----------------*/