From: Julian Seward Date: Tue, 31 Jan 2006 16:32:25 +0000 (+0000) Subject: Do fre/fres in a way which makes minimal demands on the backend. X-Git-Tag: svn/VALGRIND_3_2_3^2~100 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a28b3f92939ea6757f74b69027864ca96d48c66b;p=thirdparty%2Fvalgrind.git Do fre/fres in a way which makes minimal demands on the backend. git-svn-id: svn://svn.valgrind.org/vex/trunk@1561 --- diff --git a/VEX/priv/guest-ppc/toIR.c b/VEX/priv/guest-ppc/toIR.c index 0014ffbb01..2bb9477344 100644 --- a/VEX/priv/guest-ppc/toIR.c +++ b/VEX/priv/guest-ppc/toIR.c @@ -5723,7 +5723,11 @@ static Bool dis_fp_arith ( UInt theInstr ) } 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 + = IRExpr_Const(IRConst_F64i(0x3ff0000000000000ULL)); + assign( frD, roundToSgl(binop(Iop_DivF64, ieee_one, mkexpr(frB))) ); + } break; case 0x19: // fmuls (Floating Multiply Single, PPC32 p414) @@ -5833,7 +5837,11 @@ static Bool dis_fp_arith ( UInt theInstr ) } 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 + = IRExpr_Const(IRConst_F64i(0x3ff0000000000000ULL)); + assign( frD, binop(Iop_DivF64, ieee_one, mkexpr(frB)) ); + } break; case 0x19: // fmul (Floating Mult (Double Precision), PPC32 p413)