|
From: <sv...@va...> - 2006-02-03 19:12:25
|
Author: sewardj
Date: 2006-02-03 19:12:17 +0000 (Fri, 03 Feb 2006)
New Revision: 1563
Log:
Followup to r1562: fixes for ppc64
Modified:
trunk/priv/host-ppc/isel.c
Modified: trunk/priv/host-ppc/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-ppc/isel.c 2006-02-03 16:08:03 UTC (rev 1562)
+++ trunk/priv/host-ppc/isel.c 2006-02-03 19:12:17 UTC (rev 1563)
@@ -136,13 +136,6 @@
return IRExpr_Unop(op, a);
}
=20
-#if 0
-static IRExpr* binop ( IROp op, IRExpr* a1, IRExpr* a2 )
-{
- return IRExpr_Binop(op, a1, a2);
-}
-#endif
-
static IRExpr* mkU32 ( UInt i )
{
return IRExpr_Const(IRConst_U32(i));
@@ -2913,7 +2906,22 @@
}
=20
if (e->tag =3D=3D Iex_Binop) {
+ PPCFpOp fpop =3D Pfp_INVALID;
+ switch (e->Iex.Binop.op) {
+ case Iop_SqrtF64: fpop =3D Pfp_SQRT; break;
+ default: break;
+ }
+ if (fpop !=3D Pfp_INVALID) {
+ HReg fr_dst =3D newVRegF(env);
+ HReg fr_src =3D iselDblExpr(env, e->Iex.Binop.arg2);
+ set_FPU_rounding_mode( env, e->Iex.Binop.arg1 );
+ addInstr(env, PPCInstr_FpUnary(fpop, fr_dst, fr_src));
+ return fr_dst;
+ }
+ }
=20
+ if (e->tag =3D=3D Iex_Binop) {
+
if (e->Iex.Binop.op =3D=3D Iop_RoundF64toF32) {
HReg r_dst =3D newVRegF(env);
HReg r_src =3D iselDblExpr(env, e->Iex.Binop.arg2);
@@ -2981,7 +2989,6 @@
switch (e->Iex.Unop.op) {
case Iop_NegF64: fpop =3D Pfp_NEG; break;
case Iop_AbsF64: fpop =3D Pfp_ABS; break;
- case Iop_SqrtF64: fpop =3D Pfp_SQRT; break;
case Iop_Est5FRSqrt: fpop =3D Pfp_RSQRTE; break;
default: break;
}
|