1 /* { dg-do run { target { power10_hw } } } */
2 /* { dg-do link { target { ! power10_hw } } } */
3 /* { dg-require-effective-target power10_ok } */
4 /* { dg-options "-mdejagnu-cpu=power10 -save-temps" } */
13 extern void abort (void);
16 main (int argc
, char *argv
[])
19 vector
signed char vsrc_a_char
, vsrc_b_char
;
20 vector
signed char vresult_char
;
21 vector
signed char expected_vresult_char
;
23 vector
unsigned char vsrc_a_uchar
, vsrc_b_uchar
, vsrc_c_uchar
;
24 vector
unsigned char vresult_uchar
;
25 vector
unsigned char expected_vresult_uchar
;
27 vector
signed short vsrc_a_short
, vsrc_b_short
, vsrc_c_short
;
28 vector
signed short vresult_short
;
29 vector
signed short expected_vresult_short
;
31 vector
unsigned short vsrc_a_ushort
, vsrc_b_ushort
, vsrc_c_ushort
;
32 vector
unsigned short vresult_ushort
;
33 vector
unsigned short expected_vresult_ushort
;
35 vector
int vsrc_a_int
, vsrc_b_int
, vsrc_c_int
;
36 vector
int vresult_int
;
37 vector
int expected_vresult_int
;
39 vector
unsigned int vsrc_a_uint
, vsrc_b_uint
, vsrc_c_uint
;
40 vector
unsigned int vresult_uint
;
41 vector
unsigned int expected_vresult_uint
;
43 vector
long long int vsrc_a_ll
, vsrc_b_ll
, vsrc_c_ll
;
44 vector
long long int vresult_ll
;
45 vector
long long int expected_vresult_ll
;
47 vector
unsigned long long int vsrc_a_ull
, vsrc_b_ull
, vsrc_c_ull
;
48 vector
unsigned long long int vresult_ull
;
49 vector
unsigned long long int expected_vresult_ull
;
51 vector
float vresult_f
;
52 vector
float expected_vresult_f
;
53 vector
float vsrc_a_f
, vsrc_b_f
;
55 vector
double vsrc_a_d
, vsrc_b_d
;
56 vector
double vresult_d
;
57 vector
double expected_vresult_d
;
60 vsrc_c_uchar
= (vector
unsigned char) { 0, 0x80, 0, 0x80, 0, 0x80, 0, 0x80,
61 0, 0x80, 0, 0x80, 0, 0x80, 0, 0x80 };
63 vsrc_a_char
= (vector
signed char) { -1, 3, 5, 7, 9, 11, 13, 15,
64 17, 19, 21, 23, 25, 27, 29 };
65 vsrc_b_char
= (vector
signed char) { 2, -4, 6, 8, 10, 12, 14, 16,
66 18, 20, 22, 24, 26, 28, 30, 32 };
67 vsrc_c_uchar
= (vector
unsigned char) { 0, 0x80, 0, 0x80, 0, 0x80, 0, 0x80,
68 0, 0x80, 0, 0x80, 0, 0x80, 0, 0x80 };
69 vresult_char
= (vector
signed char) { 0, 0, 0, 0, 0, 0, 0, 0,
70 0, 0, 0, 0, 0, 0, 0, 0 };
71 expected_vresult_char
= (vector
signed char) { -1, -4, 5, 8,
76 vresult_char
= vec_blendv (vsrc_a_char
, vsrc_b_char
, vsrc_c_uchar
);
78 if (!vec_all_eq (vresult_char
, expected_vresult_char
)) {
80 printf("ERROR, vec_blendv (vsrc_a_char, vsrc_b_char, vsrc_c_uchar)\n");
81 for(i
= 0; i
< 16; i
++)
82 printf(" vresult_char[%d] = %d, expected_vresult_char[%d] = %d\n",
83 i
, vresult_char
[i
], i
, expected_vresult_char
[i
]);
89 vsrc_a_uchar
= (vector
unsigned char) { 1, 3, 5, 7, 9, 11, 13, 15,
90 17, 19, 21, 23, 25, 27, 29 };
91 vsrc_b_uchar
= (vector
unsigned char) { 2, 4, 6, 8, 10, 12, 14, 16,
92 18, 20, 22, 24, 26, 28, 30, 32 };
93 vsrc_c_uchar
= (vector
unsigned char) { 0, 0x80, 0, 0x80, 0, 0x80, 0, 0x80,
94 0, 0x80, 0, 0x80, 0, 0x80, 0, 0x80 };
95 vresult_uchar
= (vector
unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0,
96 0, 0, 0, 0, 0, 0, 0, 0 };
97 expected_vresult_uchar
= (vector
unsigned char) { 1, 4, 5, 8,
102 vresult_uchar
= vec_blendv (vsrc_a_uchar
, vsrc_b_uchar
, vsrc_c_uchar
);
104 if (!vec_all_eq (vresult_uchar
, expected_vresult_uchar
)) {
106 printf("ERROR, vec_blendv (vsrc_a_uchar, vsrc_b_uchar, vsrc_c_uchar)\n");
107 for(i
= 0; i
< 16; i
++)
108 printf(" vresult_uchar[%d] = %d, expected_vresult_uchar[%d] = %d\n",
109 i
, vresult_uchar
[i
], i
, expected_vresult_uchar
[i
]);
115 vsrc_a_short
= (vector
signed short) { -1, 3, 5, 7, 9, 11, 13, 15 };
116 vsrc_b_short
= (vector
signed short) { 2, -4, 6, 8, 10, 12, 14, 16 };
117 vsrc_c_ushort
= (vector
unsigned short) { 0, 0x8000, 0, 0x8000,
118 0, 0x8000, 0, 0x8000 };
119 vresult_short
= (vector
signed short) { 0, 0, 0, 0, 0, 0, 0, 0 };
120 expected_vresult_short
= (vector
signed short) { -1, -4, 5, 8,
123 vresult_short
= vec_blendv (vsrc_a_short
, vsrc_b_short
, vsrc_c_ushort
);
125 if (!vec_all_eq (vresult_short
, expected_vresult_short
)) {
127 printf("ERROR, vec_blendv (vsrc_a_short, vsrc_b_short, vsrc_c_ushort)\n");
128 for(i
= 0; i
< 8; i
++)
129 printf(" vresult_short[%d] = %d, expected_vresult_short[%d] = %d\n",
130 i
, vresult_short
[i
], i
, expected_vresult_short
[i
]);
136 vsrc_a_ushort
= (vector
unsigned short) { 1, 3, 5, 7, 9, 11, 13, 15 };
137 vsrc_b_ushort
= (vector
unsigned short) { 2, 4, 6, 8, 10, 12, 14, 16 };
138 vsrc_c_ushort
= (vector
unsigned short) { 0, 0x8000, 0, 0x8000,
139 0, 0x8000, 0, 0x8000 };
140 vresult_ushort
= (vector
unsigned short) { 0, 0, 0, 0, 0, 0, 0, 0 };
141 expected_vresult_ushort
= (vector
unsigned short) { 1, 4, 5, 8,
144 vresult_ushort
= vec_blendv (vsrc_a_ushort
, vsrc_b_ushort
, vsrc_c_ushort
);
146 if (!vec_all_eq (vresult_ushort
, expected_vresult_ushort
)) {
148 printf("ERROR, vec_blendv (vsrc_a_ushort, vsrc_b_ushort, "
150 for(i
= 0; i
< 8; i
++)
151 printf(" vresult_ushort[%d] = %d, expected_vresult_ushort[%d] = %d\n",
152 i
, vresult_ushort
[i
], i
, expected_vresult_ushort
[i
]);
158 vsrc_a_int
= (vector
signed int) { -1, -3, -5, -7 };
159 vsrc_b_int
= (vector
signed int) { 2, 4, 6, 8 };
160 vsrc_c_uint
= (vector
unsigned int) { 0, 0x80000000, 0, 0x80000000};
161 vresult_int
= (vector
signed int) { 0, 0, 0, 0 };
162 expected_vresult_int
= (vector
signed int) { -1, 4, -5, 8 };
164 vresult_int
= vec_blendv (vsrc_a_int
, vsrc_b_int
, vsrc_c_uint
);
166 if (!vec_all_eq (vresult_int
, expected_vresult_int
)) {
168 printf("ERROR, vec_blendv (vsrc_a_int, vsrc_b_int, vsrc_c_uint)\n");
169 for(i
= 0; i
< 4; i
++)
170 printf(" vresult_int[%d] = %d, expected_vresult_int[%d] = %d\n",
171 i
, vresult_int
[i
], i
, expected_vresult_int
[i
]);
177 vsrc_a_uint
= (vector
unsigned int) { 1, 3, 5, 7 };
178 vsrc_b_uint
= (vector
unsigned int) { 2, 4, 6, 8 };
179 vsrc_c_uint
= (vector
unsigned int) { 0, 0x80000000, 0, 0x80000000 };
180 vresult_uint
= (vector
unsigned int) { 0, 0, 0, 0 };
181 expected_vresult_uint
= (vector
unsigned int) { 1, 4, 5, 8 };
183 vresult_uint
= vec_blendv (vsrc_a_uint
, vsrc_b_uint
, vsrc_c_uint
);
185 if (!vec_all_eq (vresult_uint
, expected_vresult_uint
)) {
187 printf("ERROR, vec_blendv (vsrc_a_uint, vsrc_b_uint, vsrc_c_uint)\n");
188 for(i
= 0; i
< 4; i
++)
189 printf(" vresult_uint[%d] = %d, expected_vresult_uint[%d] = %d\n",
190 i
, vresult_uint
[i
], i
, expected_vresult_uint
[i
]);
196 vsrc_a_ll
= (vector
signed long long int) { -1, -3 };
197 vsrc_b_ll
= (vector
signed long long int) { 2, 4, };
198 vsrc_c_ull
= (vector
unsigned long long int) { 0, 0x8000000000000000ULL
};
199 vresult_ll
= (vector
signed long long int) { 0, 0 };
200 expected_vresult_ll
= (vector
signed long long int) { -1, 4 };
202 vresult_ll
= vec_blendv (vsrc_a_ll
, vsrc_b_ll
, vsrc_c_ull
);
204 if (!vec_all_eq (vresult_ll
, expected_vresult_ll
)) {
206 printf("ERROR, vec_blendv (vsrc_a_ll, vsrc_b_ll, vsrc_c_ull)\n");
207 for(i
= 0; i
< 2; i
++)
208 printf(" vresult_ll[%d] = %d, expected_vresult_ll[%d] = %d\n",
209 i
, vresult_ll
[i
], i
, expected_vresult_ll
[i
]);
215 vsrc_a_ull
= (vector
unsigned long long) { 1, 3 };
216 vsrc_b_ull
= (vector
unsigned long long) { 2, 4 };
217 vsrc_c_ull
= (vector
unsigned long long int) { 0, 0x8000000000000000ULL
};
218 vresult_ull
= (vector
unsigned long long) { 0, 0 };
219 expected_vresult_ull
= (vector
unsigned long long) { 1, 4 };
221 vresult_ull
= vec_blendv (vsrc_a_ull
, vsrc_b_ull
, vsrc_c_ull
);
223 if (!vec_all_eq (vresult_ull
, expected_vresult_ull
)) {
225 printf("ERROR, vec_blendv (vsrc_a_ull, vsrc_b_ull, vsrc_c_ull)\n");
226 for(i
= 0; i
< 2; i
++)
227 printf(" vresult_ull[%d] = %d, expected_vresult_ull[%d] = %d\n",
228 i
, vresult_ull
[i
], i
, expected_vresult_ull
[i
]);
234 vsrc_a_f
= (vector
float) { -1.0, -3.0, -5.0, -7.0 };
235 vsrc_b_f
= (vector
float) { 2.0, 4.0, 6.0, 8.0 };
236 vsrc_c_uint
= (vector
unsigned int) { 0, 0x80000000, 0, 0x80000000};
237 vresult_f
= (vector
float) { 0, 0, 0, 0 };
238 expected_vresult_f
= (vector
float) { -1, 4, -5, 8 };
240 vresult_f
= vec_blendv (vsrc_a_f
, vsrc_b_f
, vsrc_c_uint
);
242 if (!vec_all_eq (vresult_f
, expected_vresult_f
)) {
244 printf("ERROR, vec_blendv (vsrc_a_f, vsrc_b_f, vsrc_c_uint)\n");
245 for(i
= 0; i
< 4; i
++)
246 printf(" vresult_f[%d] = %d, expected_vresult_f[%d] = %d\n",
247 i
, vresult_f
[i
], i
, expected_vresult_f
[i
]);
253 vsrc_a_d
= (vector
double) { -1.0, -3.0 };
254 vsrc_b_d
= (vector
double) { 2.0, 4.0 };
255 vsrc_c_ull
= (vector
unsigned long long int) { 0, 0x8000000000000000ULL
};
256 vresult_d
= (vector
double) { 0, 0 };
257 expected_vresult_d
= (vector
double) { -1, 4 };
259 vresult_d
= vec_blendv (vsrc_a_d
, vsrc_b_d
, vsrc_c_ull
);
261 if (!vec_all_eq (vresult_d
, expected_vresult_d
)) {
263 printf("ERROR, vec_blendv (vsrc_a_d, vsrc_b_d, vsrc_c_ull)\n");
264 for(i
= 0; i
< 4; i
++)
265 printf(" vresult_d[%d] = %d, expected_vresult_d[%d] = %d\n",
266 i
, vresult_d
[i
], i
, expected_vresult_d
[i
]);
275 /* { dg-final { scan-assembler-times {\mxxblendvb\M} 2 } } */
276 /* { dg-final { scan-assembler-times {\mxxblendvh\M} 2 } } */
277 /* { dg-final { scan-assembler-times {\mxxblendvw\M} 3 } } */
278 /* { dg-final { scan-assembler-times {\mxxblendvd\M} 3 } } */