diff options
author | Pavel Zbitskiy <pavel.zbitskiy@gmail.com> | 2018-08-20 22:51:02 -0400 |
---|---|---|
committer | Cornelia Huck <cohuck@redhat.com> | 2018-08-28 17:37:01 +0200 |
commit | ad8c851d2e772397e0c35148a16a8fbb559b2a2e (patch) | |
tree | 7a4665b2084a52dba9cef1ae5bf905eb6e849326 /tests/tcg/s390x/exrl-trtr.c | |
parent | 478d360cd937afe01a1234044ab04a26b73020be (diff) | |
download | qemu-ad8c851d2e772397e0c35148a16a8fbb559b2a2e.zip qemu-ad8c851d2e772397e0c35148a16a8fbb559b2a2e.tar.gz qemu-ad8c851d2e772397e0c35148a16a8fbb559b2a2e.tar.bz2 |
target/s390x: add EX support for TRT and TRTR
Improves "b213c9f5: target/s390x: Implement TRTR" by introducing the
intermediate functions, which are compatible with dx_helper type.
Signed-off-by: Pavel Zbitskiy <pavel.zbitskiy@gmail.com>
Message-Id: <20180821025104.19604-6-pavel.zbitskiy@gmail.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
Diffstat (limited to 'tests/tcg/s390x/exrl-trtr.c')
-rw-r--r-- | tests/tcg/s390x/exrl-trtr.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/tcg/s390x/exrl-trtr.c b/tests/tcg/s390x/exrl-trtr.c new file mode 100644 index 0000000..c33153a --- /dev/null +++ b/tests/tcg/s390x/exrl-trtr.c @@ -0,0 +1,48 @@ +#include <stdint.h> +#include <unistd.h> + +int main(void) +{ + char op1[] = {0, 1, 2, 3}; + char op2[256]; + uint64_t r1 = 0xffffffffffffffffull; + uint64_t r2 = 0xffffffffffffffffull; + uint64_t cc; + int i; + + for (i = 0; i < 256; i++) { + if (i == 1) { + op2[i] = 0xbb; + } else { + op2[i] = 0; + } + } + asm volatile( + " j 2f\n" + "1: trtr 3(1,%[op1]),0(%[op2])\n" + "2: exrl %[op1_len],1b\n" + " lgr %[r1],%%r1\n" + " lgr %[r2],%%r2\n" + " ipm %[cc]\n" + : [r1] "+r" (r1), + [r2] "+r" (r2), + [cc] "=r" (cc) + : [op1] "r" (&op1), + [op1_len] "r" (3), + [op2] "r" (&op2) + : "r1", "r2", "cc"); + cc = (cc >> 28) & 3; + if (cc != 1) { + write(1, "bad cc\n", 7); + return 1; + } + if ((char *)r1 != &op1[1]) { + write(1, "bad r1\n", 7); + return 1; + } + if (r2 != 0xffffffffffffffbbull) { + write(1, "bad r2\n", 7); + return 1; + } + return 0; +} |