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