diff mbox series

[1/4] target/s390x: Fix LCBB overwriting the top 32 bits

Message ID 20230526181240.1425579-2-iii@linux.ibm.com (mailing list archive)
State New, archived
Headers show
Series Fix Fedora 38 Clang on s390x | expand

Commit Message

Ilya Leoshkevich May 26, 2023, 6:12 p.m. UTC
LCBB is supposed to overwrite only the bottom 32 bits, but QEMU
erroneously overwrites the entire register.

Fixes: 6d9303322ed9 ("s390x/tcg: Implement LOAD COUNT TO BLOCK BOUNDARY")
Cc: qemu-stable@nongnu.org
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
---
 target/s390x/tcg/insn-data.h.inc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Richard Henderson May 26, 2023, 11:11 p.m. UTC | #1
On 5/26/23 11:12, Ilya Leoshkevich wrote:
> LCBB is supposed to overwrite only the bottom 32 bits, but QEMU
> erroneously overwrites the entire register.
> 
> Fixes: 6d9303322ed9 ("s390x/tcg: Implement LOAD COUNT TO BLOCK BOUNDARY")
> Cc: qemu-stable@nongnu.org
> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~

> ---
>   target/s390x/tcg/insn-data.h.inc | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/target/s390x/tcg/insn-data.h.inc b/target/s390x/tcg/insn-data.h.inc
> index bcc70d99ba2..e41672684aa 100644
> --- a/target/s390x/tcg/insn-data.h.inc
> +++ b/target/s390x/tcg/insn-data.h.inc
> @@ -486,7 +486,7 @@
>       F(0xb343, LCXBR,   RRE,   Z,   x2h, x2l, new_P, x1_P, negf128, f128, IF_BFP)
>       F(0xb373, LCDFR,   RRE,   FPSSH, 0, f2, new, f1, negf64, 0, IF_AFP1 | IF_AFP2)
>   /* LOAD COUNT TO BLOCK BOUNDARY */
> -    C(0xe727, LCBB,    RXE,   V,   la2, 0, r1, 0, lcbb, 0)
> +    C(0xe727, LCBB,    RXE,   V,   la2, 0, new, r1_32, lcbb, 0)
>   /* LOAD HALFWORD */
>       C(0xb927, LHR,     RRE,   EI,  0, r2_16s, 0, r1_32, mov2, 0)
>       C(0xb907, LGHR,    RRE,   EI,  0, r2_16s, 0, r1, mov2, 0)
David Hildenbrand May 28, 2023, 6:55 p.m. UTC | #2
On 26.05.23 20:12, Ilya Leoshkevich wrote:
> LCBB is supposed to overwrite only the bottom 32 bits, but QEMU
> erroneously overwrites the entire register.
> 
> Fixes: 6d9303322ed9 ("s390x/tcg: Implement LOAD COUNT TO BLOCK BOUNDARY")
> Cc: qemu-stable@nongnu.org
> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
> ---
>   target/s390x/tcg/insn-data.h.inc | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/target/s390x/tcg/insn-data.h.inc b/target/s390x/tcg/insn-data.h.inc
> index bcc70d99ba2..e41672684aa 100644
> --- a/target/s390x/tcg/insn-data.h.inc
> +++ b/target/s390x/tcg/insn-data.h.inc
> @@ -486,7 +486,7 @@
>       F(0xb343, LCXBR,   RRE,   Z,   x2h, x2l, new_P, x1_P, negf128, f128, IF_BFP)
>       F(0xb373, LCDFR,   RRE,   FPSSH, 0, f2, new, f1, negf64, 0, IF_AFP1 | IF_AFP2)
>   /* LOAD COUNT TO BLOCK BOUNDARY */
> -    C(0xe727, LCBB,    RXE,   V,   la2, 0, r1, 0, lcbb, 0)
> +    C(0xe727, LCBB,    RXE,   V,   la2, 0, new, r1_32, lcbb, 0)
>   /* LOAD HALFWORD */
>       C(0xb927, LHR,     RRE,   EI,  0, r2_16s, 0, r1_32, mov2, 0)
>       C(0xb907, LGHR,    RRE,   EI,  0, r2_16s, 0, r1, mov2, 0)

Thanks!

Reviewed-by: David Hildenbrand <david@redhat.com>
diff mbox series

Patch

diff --git a/target/s390x/tcg/insn-data.h.inc b/target/s390x/tcg/insn-data.h.inc
index bcc70d99ba2..e41672684aa 100644
--- a/target/s390x/tcg/insn-data.h.inc
+++ b/target/s390x/tcg/insn-data.h.inc
@@ -486,7 +486,7 @@ 
     F(0xb343, LCXBR,   RRE,   Z,   x2h, x2l, new_P, x1_P, negf128, f128, IF_BFP)
     F(0xb373, LCDFR,   RRE,   FPSSH, 0, f2, new, f1, negf64, 0, IF_AFP1 | IF_AFP2)
 /* LOAD COUNT TO BLOCK BOUNDARY */
-    C(0xe727, LCBB,    RXE,   V,   la2, 0, r1, 0, lcbb, 0)
+    C(0xe727, LCBB,    RXE,   V,   la2, 0, new, r1_32, lcbb, 0)
 /* LOAD HALFWORD */
     C(0xb927, LHR,     RRE,   EI,  0, r2_16s, 0, r1_32, mov2, 0)
     C(0xb907, LGHR,    RRE,   EI,  0, r2_16s, 0, r1, mov2, 0)