|
From: <sv...@va...> - 2012-10-16 02:54:18
|
florian 2012-10-16 03:53:33 +0100 (Tue, 16 Oct 2012)
New Revision: 2552
Log:
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.
Modified files:
trunk/priv/guest_s390_toIR.c
trunk/priv/host_s390_isel.c
trunk/pub/libvex_ir.h
Modified: trunk/pub/libvex_ir.h (+1 -1)
===================================================================
--- trunk/pub/libvex_ir.h 2012-10-15 15:03:20 +01:00 (rev 2551)
+++ trunk/pub/libvex_ir.h 2012-10-16 03:53:33 +01:00 (rev 2552)
@@ -711,7 +711,7 @@
/* 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. --- */
Modified: trunk/priv/host_s390_isel.c (+2 -2)
===================================================================
--- trunk/priv/host_s390_isel.c 2012-10-15 15:03:20 +01:00 (rev 2551)
+++ trunk/priv/host_s390_isel.c 2012-10-16 03:53:33 +01:00 (rev 2552)
@@ -1869,9 +1869,9 @@
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));
Modified: trunk/priv/guest_s390_toIR.c (+8 -8)
===================================================================
--- trunk/priv/guest_s390_toIR.c 2012-10-15 15:03:20 +01:00 (rev 2551)
+++ trunk/priv/guest_s390_toIR.c 2012-10-16 03:53:33 +01:00 (rev 2552)
@@ -10805,7 +10805,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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";
}
|