|
From: <sv...@va...> - 2005-05-11 22:47:33
|
Author: sewardj
Date: 2005-05-11 23:47:32 +0100 (Wed, 11 May 2005)
New Revision: 1188
Modified:
trunk/priv/host-amd64/isel.c
Log:
Do a bit better for (part of) a very common memcheck idiom: "is this
pointer defined ?"
Modified: trunk/priv/host-amd64/isel.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/priv/host-amd64/isel.c 2005-05-11 16:24:00 UTC (rev 1187)
+++ trunk/priv/host-amd64/isel.c 2005-05-11 22:47:32 UTC (rev 1188)
@@ -2008,6 +2008,21 @@
=20
/* --- patterns rooted at: CmpNEZ64 --- */
=20
+ /* CmpNEZ64(Or64(x,y)) */
+ {
+ DECLARE_PATTERN(p_CmpNEZ64_Or64);
+ DEFINE_PATTERN(p_CmpNEZ64_Or64,
+ unop(Iop_CmpNEZ64, binop(Iop_Or64, bind(0), bind(1)=
)));
+ if (matchIRExpr(&mi, p_CmpNEZ64_Or64, e)) {
+ HReg r0 =3D iselIntExpr_R(env, mi.bindee[0]);
+ AMD64RMI* rmi1 =3D iselIntExpr_RMI(env, mi.bindee[1]);
+ HReg tmp =3D newVRegI(env);
+ addInstr(env, mk_iMOVsd_RR(r0, tmp));
+ addInstr(env, AMD64Instr_Alu64R(Aalu_OR,rmi1,tmp));
+ return Acc_NZ;
+ }
+ }
+
/* CmpNEZ64(x) */
if (e->tag =3D=3D Iex_Unop=20
&& e->Iex.Unop.op =3D=3D Iop_CmpNEZ64) {
|