qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v3 0/2] target/s390x: Fix emulation of C(G)HRL


From: Nina Schoetterl-Glausch
Subject: [PATCH v3 0/2] target/s390x: Fix emulation of C(G)HRL
Date: Fri, 10 Mar 2023 12:41:55 +0100

The second operand of COMPARE HALFWORD RELATIVE LONG is a signed
halfword, it does not have the same size as the first operand.
Fix this and add a tcg test for c(g)hrl.

v2 -> v3
 * pick up R-b's (thanks Richard)
 * get rid of tabs in inline asm (cosmetic only)

v1 -> v2
 * rebase on newer version

Nina Schoetterl-Glausch (2):
  target/s390x: Fix emulation of C(G)HRL
  tests/tcg/s390x: Add C(G)HRL test

 target/s390x/tcg/insn-data.h.inc |  4 +-
 target/s390x/tcg/translate.c     |  7 +++
 tests/tcg/s390x/chrl.c           | 80 ++++++++++++++++++++++++++++++++
 tests/tcg/s390x/Makefile.target  |  1 +
 4 files changed, 90 insertions(+), 2 deletions(-)
 create mode 100644 tests/tcg/s390x/chrl.c

Range-diff against v2:
1:  228a1d9cfb ! 1:  899db74823 target/s390x: Fix emulation of C(G)HRL
    @@ Commit message
         halfword, it does not have the same size as the first operand.
     
         Fixes: a7e836d5eb ("target-s390: Convert COMPARE, COMPARE LOGICAL")
    +    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
         Signed-off-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
     
      ## target/s390x/tcg/insn-data.h.inc ##
2:  3b1ca6b682 ! 2:  30868c4692 tests/tcg/s390x: Add C(G)HRL test
    @@ Commit message
         instruction.
         Test the sign extension performed on the second operand.
     
    +    Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
         Signed-off-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
     
      ## tests/tcg/s390x/chrl.c (new) ##
    @@ tests/tcg/s390x/chrl.c (new)
     +    uint32_t program_mask, cc;
     +
     +    asm volatile (
    -+               ".pushsection .rodata\n"
    -+        "0:       .short  1,0x8000\n"
    -+        " .popsection\n"
    ++        ".pushsection .rodata\n"
    ++        "0:\n\t"
    ++        ".short 1, 0x8000\n\t"
    ++        ".popsection\n\t"
     +
    -+        " chrl    %[r],0b\n"
    -+        " ipm     %[program_mask]\n"
    ++        "chrl %[r], 0b\n\t"
    ++        "ipm %[program_mask]\n"
     +        : [program_mask] "=r" (program_mask)
     +        : [r] "r" (1)
     +    );
    @@ tests/tcg/s390x/chrl.c (new)
     +    assert(!cc);
     +
     +    asm volatile (
    -+               ".pushsection .rodata\n"
    -+        "0:       .short  -1,0x8000\n"
    -+        " .popsection\n"
    ++        ".pushsection .rodata\n"
    ++        "0:\n\t"
    ++        ".short -1, 0x8000\n\t"
    ++        ".popsection\n\t"
     +
    -+        " chrl    %[r],0b\n"
    -+        " ipm     %[program_mask]\n"
    ++        "chrl %[r], 0b\n\t"
    ++        "ipm %[program_mask]\n"
     +        : [program_mask] "=r" (program_mask)
     +        : [r] "r" (-1)
     +    );
    @@ tests/tcg/s390x/chrl.c (new)
     +    uint32_t program_mask, cc;
     +
     +    asm volatile (
    -+               ".pushsection .rodata\n"
    -+        "0:       .short  1,0x8000,0,0\n"
    -+        " .popsection\n"
    ++        ".pushsection .rodata\n"
    ++        "0:\n\t"
    ++        ".short 1, 0x8000, 0, 0\n\t"
    ++        ".popsection\n\t"
     +
    -+        " cghrl   %[r],0b\n"
    -+        " ipm     %[program_mask]\n"
    ++        "cghrl %[r], 0b\n\t"
    ++        "ipm %[program_mask]\n"
     +        : [program_mask] "=r" (program_mask)
     +        : [r] "r" (1L)
     +    );
    @@ tests/tcg/s390x/chrl.c (new)
     +    assert(!cc);
     +
     +    asm volatile (
    -+               ".pushsection .rodata\n"
    -+        "0:       .short  -1,0x8000,0,0\n"
    -+        " .popsection\n"
    ++        ".pushsection .rodata\n"
    ++        "0:\n\t"
    ++        ".short -1, 0x8000, 0, 0\n\t"
    ++        ".popsection\n\t"
     +
    -+        " cghrl   %[r],0b\n"
    -+        " ipm     %[program_mask]\n"
    ++        "cghrl %[r], 0b\n\t"
    ++        "ipm %[program_mask]\n"
     +        : [program_mask] "=r" (program_mask)
     +        : [r] "r" (-1L)
     +    );

base-commit: 15002921e878e6cf485f655d580733b5319ea015
-- 
2.39.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]