]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
s390: Stop CC clobbering by VFMIN and VFMAX
authorAndreas Arnez <arnez@linux.ibm.com>
Thu, 1 Dec 2022 14:20:21 +0000 (15:20 +0100)
committerAndreas Arnez <arnez@linux.ibm.com>
Wed, 11 Jan 2023 15:44:38 +0000 (16:44 +0100)
Valgrind's implementation of the VFMIN and VFMAX instructions clobbers the
condition code, which is wrong.  Stop doing that.

VEX/priv/guest_s390_toIR.c

index 3ef104fcd90a0b714e0f0fecab950fe260499fb6..250daeca13bd7ab1419e5afeee7babaccdf8a8eb 100644 (file)
@@ -19382,7 +19382,6 @@ s390_irgen_VFMIN(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6)
 
    Bool isSingleElementOp = s390_vr_is_single_element_control_set(m5);
    IRDirty* d;
-   IRTemp cc = newTemp(Ity_I64);
 
    s390x_vec_op_details_t details = { .serialized = 0ULL };
    details.op = S390_VEC_OP_VFMIN;
@@ -19393,7 +19392,7 @@ s390_irgen_VFMIN(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6)
    details.m5 = m5;
    details.m6 = m6;
 
-   d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op",
+   d = unsafeIRDirty_0_N(0, "s390x_dirtyhelper_vec_op",
                          &s390x_dirtyhelper_vec_op,
                          mkIRExprVec_2(IRExpr_GSPTR(),
                                        mkU64(details.serialized)));
@@ -19413,7 +19412,6 @@ s390_irgen_VFMIN(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6)
    d->fxState[2].size = sizeof(V128);
 
    stmt(IRStmt_Dirty(d));
-   s390_cc_set(cc);
    return "vfmin";
 }
 
@@ -19425,7 +19423,6 @@ s390_irgen_VFMAX(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6)
 
    Bool isSingleElementOp = s390_vr_is_single_element_control_set(m5);
    IRDirty* d;
-   IRTemp cc = newTemp(Ity_I64);
 
    s390x_vec_op_details_t details = { .serialized = 0ULL };
    details.op = S390_VEC_OP_VFMAX;
@@ -19436,7 +19433,7 @@ s390_irgen_VFMAX(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6)
    details.m5 = m5;
    details.m6 = m6;
 
-   d = unsafeIRDirty_1_N(cc, 0, "s390x_dirtyhelper_vec_op",
+   d = unsafeIRDirty_0_N(0, "s390x_dirtyhelper_vec_op",
                          &s390x_dirtyhelper_vec_op,
                          mkIRExprVec_2(IRExpr_GSPTR(),
                                        mkU64(details.serialized)));
@@ -19456,7 +19453,6 @@ s390_irgen_VFMAX(UChar v1, UChar v2, UChar v3, UChar m4, UChar m5, UChar m6)
    d->fxState[2].size = sizeof(V128);
 
    stmt(IRStmt_Dirty(d));
-   s390_cc_set(cc);
    return "vfmax";
 }