xref: /openbmc/qemu/tests/tcg/s390x/vcksm.c (revision 241ab36c)
1*241ab36cSIlya Leoshkevich /*
2*241ab36cSIlya Leoshkevich  * Test the VCKSM instruction.
3*241ab36cSIlya Leoshkevich  *
4*241ab36cSIlya Leoshkevich  * SPDX-License-Identifier: GPL-2.0-or-later
5*241ab36cSIlya Leoshkevich  */
6*241ab36cSIlya Leoshkevich #include <assert.h>
7*241ab36cSIlya Leoshkevich #include <stdlib.h>
8*241ab36cSIlya Leoshkevich #include <string.h>
9*241ab36cSIlya Leoshkevich #include "vx.h"
10*241ab36cSIlya Leoshkevich 
main(void)11*241ab36cSIlya Leoshkevich int main(void)
12*241ab36cSIlya Leoshkevich {
13*241ab36cSIlya Leoshkevich     S390Vector v1;
14*241ab36cSIlya Leoshkevich     S390Vector v2 = {
15*241ab36cSIlya Leoshkevich         .d[0] = 0xb2261c8140edce49ULL,
16*241ab36cSIlya Leoshkevich         .d[1] = 0x387bf5a433af39d1ULL,
17*241ab36cSIlya Leoshkevich     };
18*241ab36cSIlya Leoshkevich     S390Vector v3 = {
19*241ab36cSIlya Leoshkevich         .d[0] = 0x73b03d2c7f9e654eULL,
20*241ab36cSIlya Leoshkevich         .d[1] = 0x23d74e51fb479877ULL,
21*241ab36cSIlya Leoshkevich     };
22*241ab36cSIlya Leoshkevich     S390Vector exp = {.d[0] = 0xdedd7f8eULL, .d[1] = 0ULL};
23*241ab36cSIlya Leoshkevich 
24*241ab36cSIlya Leoshkevich     asm volatile("vcksm %[v1],%[v2],%[v3]"
25*241ab36cSIlya Leoshkevich                  : [v1] "=v" (v1.v)
26*241ab36cSIlya Leoshkevich                  : [v2] "v" (v2.v)
27*241ab36cSIlya Leoshkevich                  , [v3] "v" (v3.v));
28*241ab36cSIlya Leoshkevich     assert(memcmp(&v1, &exp, sizeof(v1)) == 0);
29*241ab36cSIlya Leoshkevich 
30*241ab36cSIlya Leoshkevich     return EXIT_SUCCESS;
31*241ab36cSIlya Leoshkevich }
32