From: <sv...@va...> - 2011-04-28 21:04:01
|
Author: sewardj Date: 2011-04-28 22:03:54 +0100 (Thu, 28 Apr 2011) New Revision: 2136 Log: Handle Iop_Not64 when doing 32-bit code generation. Also, assert that iselWordExpr_R is not asked to handle Iop_Not64 in 32-bit mode. Fixes #270856. (Maynard Johnson, may...@us...) Modified: trunk/priv/host_ppc_isel.c Modified: trunk/priv/host_ppc_isel.c =================================================================== --- trunk/priv/host_ppc_isel.c 2011-04-28 20:13:45 UTC (rev 2135) +++ trunk/priv/host_ppc_isel.c 2011-04-28 21:03:54 UTC (rev 2136) @@ -1615,6 +1615,7 @@ case Iop_Not16: case Iop_Not32: case Iop_Not64: { + if (op_unop == Iop_Not64) vassert(mode64); HReg r_dst = newVRegI(env); HReg r_src = iselWordExpr_R(env, e->Iex.Unop.arg); addInstr(env, PPCInstr_Unary(Pun_NOT,r_dst,r_src)); @@ -2885,6 +2886,18 @@ return; } + case Iop_Not64: { + HReg xLo, xHi; + HReg tmpLo = newVRegI(env); + HReg tmpHi = newVRegI(env); + iselInt64Expr(&xHi, &xLo, env, e->Iex.Unop.arg); + addInstr(env, PPCInstr_Unary(Pun_NOT,tmpLo,xLo)); + addInstr(env, PPCInstr_Unary(Pun_NOT,tmpHi,xHi)); + *rHi = tmpHi; + *rLo = tmpLo; + return; + } + /* ReinterpF64asI64(e) */ /* Given an IEEE754 double, produce an I64 with the same bit pattern. */ |