From e966ae4bc067344b03bf134a9cf355a20474bc3b Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Mon, 27 Jun 2005 08:11:01 +0000 Subject: [PATCH] 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 --- memcheck/mc_translate.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/memcheck/mc_translate.c b/memcheck/mc_translate.c index 23fa722cb..ce165bf86 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 );