|
From: <sv...@va...> - 2005-06-27 08:11:37
|
Author: tom
Date: 2005-06-27 09:11:01 +0100 (Mon, 27 Jun 2005)
New Revision: 4037
Log:
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.
Modified:
trunk/memcheck/mc_translate.c
Modified: trunk/memcheck/mc_translate.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/mc_translate.c 2005-06-26 20:50:05 UTC (rev 4036)
+++ trunk/memcheck/mc_translate.c 2005-06-27 08:11:01 UTC (rev 4037)
@@ -1010,6 +1010,14 @@
opADD =3D Iop_Add32;
opSUB =3D Iop_Sub32;
break;
+ case Ity_I64:
+ opAND =3D Iop_And64;
+ opOR =3D Iop_Or64;
+ opXOR =3D Iop_Xor64;
+ opNOT =3D Iop_Not64;
+ opADD =3D Iop_Add64;
+ opSUB =3D Iop_Sub64;
+ break;
default:
VG_(tool_panic)("expensiveAddSub");
}
@@ -1678,9 +1686,21 @@
return mkLeft32(mce, mkUifU32(mce, vatom1,vatom2));
=20
/* could do better: Add64, Sub64 */
- case Iop_Mul64:
case Iop_Add64:
+ if (mce->bogusLiterals)
+ return expensiveAddSub(mce,True,Ity_I64,=20
+ vatom1,vatom2, atom1,atom2);
+ else
+ goto cheap_AddSub64;
case Iop_Sub64:
+ if (mce->bogusLiterals)
+ return expensiveAddSub(mce,False,Ity_I64,=20
+ vatom1,vatom2, atom1,atom2);
+ else
+ goto cheap_AddSub64;
+
+ cheap_AddSub64:
+ case Iop_Mul64:
return mkLeft64(mce, mkUifU64(mce, vatom1,vatom2));
=20
case Iop_Mul16:
@@ -2464,7 +2484,9 @@
/* VG_(printf)("%llx\n", n); */
return (/*32*/ n =3D=3D 0xFEFEFEFFULL
/*32*/ || n =3D=3D 0x80808080ULL
+ /*64*/ || n =3D=3D 0xFFFFFFFFFEFEFEFFULL
/*64*/ || n =3D=3D 0xFEFEFEFEFEFEFEFFULL
+ /*64*/ || n =3D=3D 0x0000000000008080ULL
/*64*/ || n =3D=3D 0x8080808080808080ULL
/*64*/ || n =3D=3D 0x0101010101010101ULL
);
|