From: Julian Seward Date: Mon, 31 Mar 2008 21:57:17 +0000 (+0000) Subject: Specialise CondNS after SUBB on amd64. X-Git-Tag: svn/VALGRIND_3_4_1^2~37 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bc7a7dac9d05b6e47e5c2824bc518d09ac5921e0;p=thirdparty%2Fvalgrind.git Specialise CondNS after SUBB on amd64. git-svn-id: svn://svn.valgrind.org/vex/trunk@1817 --- diff --git a/VEX/priv/guest-amd64/ghelpers.c b/VEX/priv/guest-amd64/ghelpers.c index b4bcf5f7cc..2f2bf7e047 100644 --- a/VEX/priv/guest-amd64/ghelpers.c +++ b/VEX/priv/guest-amd64/ghelpers.c @@ -1043,6 +1043,18 @@ IRExpr* guest_amd64_spechelper ( HChar* function_name, binop(Iop_Shr64,cc_dep1,mkU8(7)), mkU64(1)); } + if (isU64(cc_op, AMD64G_CC_OP_SUBB) && isU64(cond, AMD64CondNS) + && isU64(cc_dep2, 0)) { + /* byte sub/cmp of zero, then NS --> test !(dst-0 test !(dst (ULong) !dst[7] + */ + return binop(Iop_Xor64, + binop(Iop_And64, + binop(Iop_Shr64,cc_dep1,mkU8(7)), + mkU64(1)), + mkU64(1)); + } /*---------------- LOGICQ ----------------*/ diff --git a/VEX/priv/guest-x86/ghelpers.c b/VEX/priv/guest-x86/ghelpers.c index fb54968011..db4e3d2602 100644 --- a/VEX/priv/guest-x86/ghelpers.c +++ b/VEX/priv/guest-x86/ghelpers.c @@ -967,7 +967,6 @@ IRExpr* guest_x86_spechelper ( HChar* function_name, binop(Iop_Shr32,cc_dep1,mkU8(7)), mkU32(1)); } - if (isU32(cc_op, X86G_CC_OP_SUBB) && isU32(cond, X86CondNS) && isU32(cc_dep2, 0)) { /* byte sub/cmp of zero, then NS --> test !(dst-0