From: Julian Seward Date: Tue, 1 Mar 2005 10:19:23 +0000 (+0000) Subject: Add a constant folding rule for MullS32. X-Git-Tag: svn/VALGRIND_3_0_1^2~343 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=393006557006c28265a0c01302391e08ec72d41a;p=thirdparty%2Fvalgrind.git Add a constant folding rule for MullS32. git-svn-id: svn://svn.valgrind.org/vex/trunk@991 --- diff --git a/VEX/priv/ir/iropt.c b/VEX/priv/ir/iropt.c index 52daf92646..ac5dba839a 100644 --- a/VEX/priv/ir/iropt.c +++ b/VEX/priv/ir/iropt.c @@ -1047,6 +1047,19 @@ static IRExpr* fold_Expr ( IRExpr* e ) (e->Iex.Binop.arg1->Iex.Const.con->Ico.U32 * e->Iex.Binop.arg2->Iex.Const.con->Ico.U32))); break; + case Iop_MullS32: { + /* very paranoid */ + UInt u32a = e->Iex.Binop.arg1->Iex.Const.con->Ico.U32; + UInt u32b = e->Iex.Binop.arg2->Iex.Const.con->Ico.U32; + Int s32a = (Int)u32a; + Int s32b = (Int)u32b; + Long s64a = (Long)s32a; + Long s64b = (Long)s32b; + Long sres = s64a * s64b; + ULong ures = (ULong)sres; + e2 = IRExpr_Const(IRConst_U64(ures)); + break; + } /* -- Shl -- */ case Iop_Shl32: