]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
s390: Order the operands of the multiply-and-add/subtract IROps
authorFlorian Krohm <florian@eich-krohm.de>
Tue, 16 Oct 2012 02:53:33 +0000 (02:53 +0000)
committerFlorian Krohm <florian@eich-krohm.de>
Tue, 16 Oct 2012 02:53:33 +0000 (02:53 +0000)
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

VEX/priv/guest_s390_toIR.c
VEX/priv/host_s390_isel.c
VEX/pub/libvex_ir.h

index 114f8bf765fd5cd81ee502f06062b11d0a78f585..bde121ba50d26465972a3a82c7edbdbd147ce5a7 100644 (file)
@@ -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";
 }
index afa5df8961644750a1b8e4e16de01ad1013fa718..d42a3ab55c5436edcc53d7aa7eb85c67348ade96 100644 (file)
@@ -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));
 
index ae397a19763b29ac0e93b7328254162ebe9665ec..e210f8671ad54e8784298d43463245a87f0c0668 100644 (file)
@@ -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. --- */