From: Tom Hughes Date: Mon, 27 Jun 2005 08:11:01 +0000 (+0000) Subject: Improve handling of inlined strlen on amd64 by using the expensive X-Git-Tag: svn/VALGRIND_3_0_0~281 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e966ae4bc067344b03bf134a9cf355a20474bc3b;p=thirdparty%2Fvalgrind.git Improve handling of inlined strlen on amd64 by using the expensive mode for 64 bit add and subtract operations when the bogus literals flags is set and by adding two new constants to the list of bogus literals. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4037 --- diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c index 23fa722cb4..ce165bf864 100644 --- a/memcheck/mc_translate.c +++ b/memcheck/mc_translate.c @@ -1010,6 +1010,14 @@ IRAtom* expensiveAddSub ( MCEnv* mce, opADD = Iop_Add32; opSUB = Iop_Sub32; break; + case Ity_I64: + opAND = Iop_And64; + opOR = Iop_Or64; + opXOR = Iop_Xor64; + opNOT = Iop_Not64; + opADD = Iop_Add64; + opSUB = Iop_Sub64; + break; default: VG_(tool_panic)("expensiveAddSub"); } @@ -1678,9 +1686,21 @@ IRAtom* expr2vbits_Binop ( MCEnv* mce, return mkLeft32(mce, mkUifU32(mce, vatom1,vatom2)); /* could do better: Add64, Sub64 */ - case Iop_Mul64: case Iop_Add64: + if (mce->bogusLiterals) + return expensiveAddSub(mce,True,Ity_I64, + vatom1,vatom2, atom1,atom2); + else + goto cheap_AddSub64; case Iop_Sub64: + if (mce->bogusLiterals) + return expensiveAddSub(mce,False,Ity_I64, + vatom1,vatom2, atom1,atom2); + else + goto cheap_AddSub64; + + cheap_AddSub64: + case Iop_Mul64: return mkLeft64(mce, mkUifU64(mce, vatom1,vatom2)); case Iop_Mul16: @@ -2464,7 +2484,9 @@ static Bool isBogusAtom ( IRAtom* at ) /* VG_(printf)("%llx\n", n); */ return (/*32*/ n == 0xFEFEFEFFULL /*32*/ || n == 0x80808080ULL + /*64*/ || n == 0xFFFFFFFFFEFEFEFFULL /*64*/ || n == 0xFEFEFEFEFEFEFEFFULL + /*64*/ || n == 0x0000000000008080ULL /*64*/ || n == 0x8080808080808080ULL /*64*/ || n == 0x0101010101010101ULL );