diff options
author | Ilya Leoshkevich <iii@linux.ibm.com> | 2023-07-24 10:16:07 +0200 |
---|---|---|
committer | Thomas Huth <thuth@redhat.com> | 2023-07-24 18:44:48 +0200 |
commit | 241ab36c0aa1d02ae1b9f38094b9df0c7e76f497 (patch) | |
tree | 11a9a890112b5f889a079603ee4c1a03b92cfdc6 /tests | |
parent | e11e2fc6fbdd6c08d24926b1e80204f1d0457d38 (diff) | |
download | qemu-241ab36c0aa1d02ae1b9f38094b9df0c7e76f497.zip qemu-241ab36c0aa1d02ae1b9f38094b9df0c7e76f497.tar.gz qemu-241ab36c0aa1d02ae1b9f38094b9df0c7e76f497.tar.bz2 |
tests/tcg/s390x: Test VCKSM
Add a small test to prevent regressions.
Tested-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-Id: <20230724082032.66864-15-iii@linux.ibm.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/tcg/s390x/Makefile.target | 1 | ||||
-rw-r--r-- | tests/tcg/s390x/vcksm.c | 31 | ||||
-rw-r--r-- | tests/tcg/s390x/vx.h | 2 |
3 files changed, 34 insertions, 0 deletions
diff --git a/tests/tcg/s390x/Makefile.target b/tests/tcg/s390x/Makefile.target index 71bf39b..1fc9809 100644 --- a/tests/tcg/s390x/Makefile.target +++ b/tests/tcg/s390x/Makefile.target @@ -58,6 +58,7 @@ TESTS += $(PGM_SPECIFICATION_TESTS) Z13_TESTS=vistr Z13_TESTS+=lcbb Z13_TESTS+=locfhr +Z13_TESTS+=vcksm $(Z13_TESTS): CFLAGS+=-march=z13 -O2 TESTS+=$(Z13_TESTS) diff --git a/tests/tcg/s390x/vcksm.c b/tests/tcg/s390x/vcksm.c new file mode 100644 index 0000000..452daaa --- /dev/null +++ b/tests/tcg/s390x/vcksm.c @@ -0,0 +1,31 @@ +/* + * Test the VCKSM instruction. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include <assert.h> +#include <stdlib.h> +#include <string.h> +#include "vx.h" + +int main(void) +{ + S390Vector v1; + S390Vector v2 = { + .d[0] = 0xb2261c8140edce49ULL, + .d[1] = 0x387bf5a433af39d1ULL, + }; + S390Vector v3 = { + .d[0] = 0x73b03d2c7f9e654eULL, + .d[1] = 0x23d74e51fb479877ULL, + }; + S390Vector exp = {.d[0] = 0xdedd7f8eULL, .d[1] = 0ULL}; + + asm volatile("vcksm %[v1],%[v2],%[v3]" + : [v1] "=v" (v1.v) + : [v2] "v" (v2.v) + , [v3] "v" (v3.v)); + assert(memcmp(&v1, &exp, sizeof(v1)) == 0); + + return EXIT_SUCCESS; +} diff --git a/tests/tcg/s390x/vx.h b/tests/tcg/s390x/vx.h index 02e7fd5..00701db 100644 --- a/tests/tcg/s390x/vx.h +++ b/tests/tcg/s390x/vx.h @@ -1,6 +1,8 @@ #ifndef QEMU_TESTS_S390X_VX_H #define QEMU_TESTS_S390X_VX_H +#include <stdint.h> + typedef union S390Vector { uint64_t d[2]; /* doubleword */ uint32_t w[4]; /* word */ |