|
From: <sv...@va...> - 2006-01-31 16:32:37
|
Author: sewardj
Date: 2006-01-31 16:32:25 +0000 (Tue, 31 Jan 2006)
New Revision: 1561
Log:
Do fre/fres in a way which makes minimal demands on the backend.
Modified:
trunk/priv/guest-ppc/toIR.c
Modified: trunk/priv/guest-ppc/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-ppc/toIR.c 2006-01-31 16:31:44 UTC (rev 1560)
+++ trunk/priv/guest-ppc/toIR.c 2006-01-31 16:32:25 UTC (rev 1561)
@@ -5723,7 +5723,11 @@
}
DIP("fres%s fr%u,fr%u\n", flag_rC ? ".":"",
frD_addr, frB_addr);
- assign( frD, unop(Iop_Est8FRecip, mkexpr(frB)) );
+ //assign( frD, unop(Iop_Est8FRecip, mkexpr(frB)) );
+ { IRExpr* ieee_one
+ =3D IRExpr_Const(IRConst_F64i(0x3ff0000000000000ULL));
+ assign( frD, roundToSgl(binop(Iop_DivF64, ieee_one, mkexpr(fr=
B))) );
+ }
break;
=20
case 0x19: // fmuls (Floating Multiply Single, PPC32 p414)
@@ -5833,7 +5837,11 @@
}
DIP("fre%s fr%u,fr%u\n", flag_rC ? ".":"",
frD_addr, frB_addr);
- assign( frD, unop(Iop_Est8FRecip, mkexpr(frB)) );
+ //assign( frD, unop(Iop_Est8FRecip, mkexpr(frB)) );
+ { IRExpr* ieee_one
+ =3D IRExpr_Const(IRConst_F64i(0x3ff0000000000000ULL));
+ assign( frD, binop(Iop_DivF64, ieee_one, mkexpr(frB)) );
+ }
break;
=20
case 0x19: // fmul (Floating Mult (Double Precision), PPC32 p413)
|