Mark Wielaard c39755
From da3b331c63a6aec0ec3206b1d9ca0df9bced3338 Mon Sep 17 00:00:00 2001
Mark Wielaard c39755
From: Andreas Arnez <arnez@linux.ibm.com>
Mark Wielaard c39755
Date: Mon, 3 Jan 2022 18:15:05 +0100
Mark Wielaard c39755
Subject: [PATCH] s390: Fix VFLRX and WFLRX instructions
Mark Wielaard c39755
Mark Wielaard c39755
Due to a typo in s390_irgen_VFLR, the VFLR instruction behaves incorrectly
Mark Wielaard c39755
when its m3 field contains 4, meaning extended format.  In that case VFLR
Mark Wielaard c39755
is also written as VFLRX (or WFLRX) and supposed to round down from the
Mark Wielaard c39755
extended 128-bit format to the long 64-bit format.  However, the typo
Mark Wielaard c39755
checks for m3 == 2 instead, so the value of 4 is unhandled, causing
Mark Wielaard c39755
Valgrind to throw a specification exception.
Mark Wielaard c39755
Mark Wielaard c39755
This fixes the typo.
Mark Wielaard c39755
---
Mark Wielaard c39755
 VEX/priv/guest_s390_toIR.c | 2 +-
Mark Wielaard c39755
 1 file changed, 1 insertion(+), 1 deletion(-)
Mark Wielaard c39755
Mark Wielaard c39755
diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c
Mark Wielaard c39755
index fffc563d4..3ef104fcd 100644
Mark Wielaard c39755
--- a/VEX/priv/guest_s390_toIR.c
Mark Wielaard c39755
+++ b/VEX/priv/guest_s390_toIR.c
Mark Wielaard c39755
@@ -19008,7 +19008,7 @@ s390_irgen_VFLL(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5)
Mark Wielaard c39755
 static const HChar *
Mark Wielaard c39755
 s390_irgen_VFLR(UChar v1, UChar v2, UChar m3, UChar m4, UChar m5)
Mark Wielaard c39755
 {
Mark Wielaard c39755
-   s390_insn_assert("vflr", m3 == 3 || (s390_host_has_vxe && m3 == 2));
Mark Wielaard c39755
+   s390_insn_assert("vflr", m3 == 3 || (s390_host_has_vxe && m3 == 4));
Mark Wielaard c39755
 
Mark Wielaard c39755
    if (m3 == 3)
Mark Wielaard c39755
       s390_vector_fp_convert(Iop_F64toF32, Ity_F64, Ity_F32, True,
Mark Wielaard c39755
-- 
Mark Wielaard c39755
2.31.1
Mark Wielaard c39755