|
From: <sv...@va...> - 2005-04-27 11:51:18
|
Author: sewardj
Date: 2005-04-27 12:50:56 +0100 (Wed, 27 Apr 2005)
New Revision: 1147
Modified:
trunk/priv/guest-amd64/toIR.c
Log:
Use new 64-to/from-{16,8,1} conversion primops instead of going via
Ity_I32.
Modified: trunk/priv/guest-amd64/toIR.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/guest-amd64/toIR.c 2005-04-27 11:42:44 UTC (rev 1146)
+++ trunk/priv/guest-amd64/toIR.c 2005-04-27 11:50:56 UTC (rev 1147)
@@ -266,16 +266,16 @@
return unop(signd ? Iop_16Sto32 : Iop_16Uto32, src);
}
if (szSmall =3D=3D 1 && szBig =3D=3D 8 && !signd) {
- return unop(Iop_32Uto64, unop(Iop_8Uto32, src));
+ return unop(Iop_8Uto64, src);
}
if (szSmall =3D=3D 1 && szBig =3D=3D 8 && signd) {
- return unop(Iop_32Sto64, unop(Iop_8Sto32, src));
+ return unop(Iop_8Sto64, src);
}
if (szSmall =3D=3D 2 && szBig =3D=3D 8 && !signd) {
- return unop(Iop_32Uto64, unop(Iop_16Uto32, src));
+ return unop(Iop_16Uto64, src);
}
if (szSmall =3D=3D 2 && szBig =3D=3D 8 && signd) {
- return unop(Iop_32Sto64, unop(Iop_16Sto32, src));
+ return unop(Iop_16Sto64, src);
}
vpanic("doScalarWidening(amd64)");
}
@@ -1545,7 +1545,7 @@
/* Exclude the requested condition, OP and NDEP from definedness
checking. We're only interested in DEP1 and DEP2. */
call->Iex.CCall.cee->mcx_mask =3D (1<<0) | (1<<1) | (1<<4);
- return unop(Iop_32to1, unop(Iop_64to32, call));
+ return unop(Iop_64to1, call);
}
=20
/* Build IR to calculate just the carry flag from stored
@@ -1593,8 +1593,8 @@
switch (typeOfIRExpr(irbb->tyenv,e)) {
case Ity_I64: return e;
case Ity_I32: return unop(Iop_32Uto64, e);
- case Ity_I16: return unop(Iop_32Uto64, unop(Iop_16Uto32,e));
- case Ity_I8: return unop(Iop_32Uto64, unop(Iop_8Uto32,e));
+ case Ity_I16: return unop(Iop_16Uto64, e);
+ case Ity_I8: return unop(Iop_8Uto64, e);
default: vpanic("widenUto64");
}
}
@@ -1605,8 +1605,8 @@
switch (typeOfIRExpr(irbb->tyenv,e)) {
case Ity_I64: return e;
case Ity_I32: return unop(Iop_32Sto64, e);
- case Ity_I16: return unop(Iop_32Sto64, unop(Iop_16Sto32,e));
- case Ity_I8: return unop(Iop_32Sto64, unop(Iop_8Sto32,e));
+ case Ity_I16: return unop(Iop_16Sto64, e);
+ case Ity_I8: return unop(Iop_8Sto64, e);
default: vpanic("widenSto64");
}
}
@@ -1625,9 +1625,9 @@
if (src_ty =3D=3D Ity_I64 && dst_ty =3D=3D Ity_I32)
return unop(Iop_64to32, e);
if (src_ty =3D=3D Ity_I64 && dst_ty =3D=3D Ity_I16)
- return unop(Iop_32to16, unop(Iop_64to32, e));
+ return unop(Iop_64to16, e);
if (src_ty =3D=3D Ity_I64 && dst_ty =3D=3D Ity_I8)
- return unop(Iop_32to8, unop(Iop_64to32, e));
+ return unop(Iop_64to8, e);
=20
vex_printf("\nsrc, dst tys are: ");
ppIRType(src_ty);
@@ -6803,7 +6803,7 @@
);
=20
if (sz =3D=3D 2)
- assign( dst, unop(Iop_32to16, unop(Iop_64to32, mkexpr(dst64))) );
+ assign( dst, unop(Iop_64to16, mkexpr(dst64)) );
else
if (sz =3D=3D 4)
assign( dst, unop(Iop_64to32, mkexpr(dst64)) );
|