From: Florian Krohm Date: Tue, 16 Oct 2012 02:53:33 +0000 (+0000) Subject: s390: Order the operands of the multiply-and-add/subtract IROps X-Git-Tag: svn/VALGRIND_3_9_0^2~222 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4c9c2da107a13d39cbb06de0c89e6fee885f8e21;p=thirdparty%2Fvalgrind.git s390: Order the operands of the multiply-and-add/subtract IROps such that they match the definition in libvex_ir.h. This was spotted by Julian. git-svn-id: svn://svn.valgrind.org/vex/trunk@2552 --- diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c index 114f8bf765..bde121ba50 100644 --- a/VEX/priv/guest_s390_toIR.c +++ b/VEX/priv/guest_s390_toIR.c @@ -10805,7 +10805,7 @@ s390_irgen_MAEBR(UChar r1, UChar r3, UChar r2) IRTemp rounding_mode = encode_bfp_rounding_mode(S390_BFP_ROUND_PER_FPC); put_fpr_w0(r1, qop(Iop_MAddF32, mkexpr(rounding_mode), - get_fpr_w0(r1), get_fpr_w0(r2), get_fpr_w0(r3))); + get_fpr_w0(r3), get_fpr_w0(r2), get_fpr_w0(r1))); return "maebr"; } @@ -10816,7 +10816,7 @@ s390_irgen_MADBR(UChar r1, UChar r3, UChar r2) IRTemp rounding_mode = encode_bfp_rounding_mode(S390_BFP_ROUND_PER_FPC); put_fpr_dw0(r1, qop(Iop_MAddF64, mkexpr(rounding_mode), - get_fpr_dw0(r1), get_fpr_dw0(r2), get_fpr_dw0(r3))); + get_fpr_dw0(r3), get_fpr_dw0(r2), get_fpr_dw0(r1))); return "madbr"; } @@ -10828,7 +10828,7 @@ s390_irgen_MAEB(UChar r3, IRTemp op2addr, UChar r1) IRTemp rounding_mode = encode_bfp_rounding_mode(S390_BFP_ROUND_PER_FPC); put_fpr_w0(r1, qop(Iop_MAddF32, mkexpr(rounding_mode), - get_fpr_w0(r1), op2, get_fpr_w0(r3))); + get_fpr_w0(r3), op2, get_fpr_w0(r1))); return "maeb"; } @@ -10840,7 +10840,7 @@ s390_irgen_MADB(UChar r3, IRTemp op2addr, UChar r1) IRTemp rounding_mode = encode_bfp_rounding_mode(S390_BFP_ROUND_PER_FPC); put_fpr_dw0(r1, qop(Iop_MAddF64, mkexpr(rounding_mode), - get_fpr_dw0(r1), op2, get_fpr_dw0(r3))); + get_fpr_dw0(r3), op2, get_fpr_dw0(r1))); return "madb"; } @@ -10851,7 +10851,7 @@ s390_irgen_MSEBR(UChar r1, UChar r3, UChar r2) IRTemp rounding_mode = encode_bfp_rounding_mode(S390_BFP_ROUND_PER_FPC); put_fpr_w0(r1, qop(Iop_MSubF32, mkexpr(rounding_mode), - get_fpr_w0(r1), get_fpr_w0(r2), get_fpr_w0(r3))); + get_fpr_w0(r3), get_fpr_w0(r2), get_fpr_w0(r1))); return "msebr"; } @@ -10862,7 +10862,7 @@ s390_irgen_MSDBR(UChar r1, UChar r3, UChar r2) IRTemp rounding_mode = encode_bfp_rounding_mode(S390_BFP_ROUND_PER_FPC); put_fpr_dw0(r1, qop(Iop_MSubF64, mkexpr(rounding_mode), - get_fpr_dw0(r1), get_fpr_dw0(r2), get_fpr_dw0(r3))); + get_fpr_dw0(r3), get_fpr_dw0(r2), get_fpr_dw0(r1))); return "msdbr"; } @@ -10874,7 +10874,7 @@ s390_irgen_MSEB(UChar r3, IRTemp op2addr, UChar r1) IRTemp rounding_mode = encode_bfp_rounding_mode(S390_BFP_ROUND_PER_FPC); put_fpr_w0(r1, qop(Iop_MSubF32, mkexpr(rounding_mode), - get_fpr_w0(r1), op2, get_fpr_w0(r3))); + get_fpr_w0(r3), op2, get_fpr_w0(r1))); return "mseb"; } @@ -10886,7 +10886,7 @@ s390_irgen_MSDB(UChar r3, IRTemp op2addr, UChar r1) IRTemp rounding_mode = encode_bfp_rounding_mode(S390_BFP_ROUND_PER_FPC); put_fpr_dw0(r1, qop(Iop_MSubF64, mkexpr(rounding_mode), - get_fpr_dw0(r1), op2, get_fpr_dw0(r3))); + get_fpr_dw0(r3), op2, get_fpr_dw0(r1))); return "msdb"; } diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c index afa5df8961..d42a3ab55c 100644 --- a/VEX/priv/host_s390_isel.c +++ b/VEX/priv/host_s390_isel.c @@ -1869,9 +1869,9 @@ s390_isel_float_expr_wrk(ISelEnv *env, IRExpr *expr) HReg op1, op2, op3, dst; s390_bfp_triop_t bfpop; - op1 = s390_isel_float_expr(env, expr->Iex.Qop.details->arg2); + op3 = s390_isel_float_expr(env, expr->Iex.Qop.details->arg2); op2 = s390_isel_float_expr(env, expr->Iex.Qop.details->arg3); - op3 = s390_isel_float_expr(env, expr->Iex.Qop.details->arg4); + op1 = s390_isel_float_expr(env, expr->Iex.Qop.details->arg4); dst = newVRegF(env); addInstr(env, s390_insn_move(size, dst, op1)); diff --git a/VEX/pub/libvex_ir.h b/VEX/pub/libvex_ir.h index ae397a1976..e210f8671a 100644 --- a/VEX/pub/libvex_ir.h +++ b/VEX/pub/libvex_ir.h @@ -711,7 +711,7 @@ typedef /* Fused multiply-add/sub */ /* :: IRRoundingMode(I32) x F32 x F32 x F32 -> F32 - (computes op3 * op2 +/- op1 */ + (computes arg2 * arg3 +/- arg4) */ Iop_MAddF32, Iop_MSubF32, /* --- guest ppc32/64 specifics, not mandated by 754. --- */