1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
|
/* { dg-do compile } */
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-options "-mvsx -O2 -fdump-tree-gimple" } */
/* Verify that overloaded built-ins for "and", "andc", "nor", "or" and "xor"
do not produce VIEW_CONVERT_EXPR operations on their operands. Like so:
_1 = VIEW_CONVERT_EXPR<__vector signed int>(x);
_2 = VIEW_CONVERT_EXPR<__vector signed int>(y);
_3 = __builtin_altivec_vand (_1, _2);
D.3245 = VIEW_CONVERT_EXPR<bcvec_t>(_3);
*/
typedef __attribute__((altivec(vector__))) __attribute__((altivec(bool__))) char bcvec_t;
typedef __attribute__((altivec(vector__))) signed char scvec_t;
typedef __attribute__((altivec(vector__))) unsigned char ucvec_t;
typedef __attribute__((altivec(vector__))) __attribute__((altivec(bool__))) short bsvec_t;
typedef __attribute__((altivec(vector__))) signed short ssvec_t;
typedef __attribute__((altivec(vector__))) unsigned short usvec_t;
typedef __attribute__((altivec(vector__))) __attribute__((altivec(bool__))) int bivec_t;
typedef __attribute__((altivec(vector__))) signed int sivec_t;
typedef __attribute__((altivec(vector__))) unsigned int uivec_t;
typedef __attribute__((altivec(vector__))) __attribute__((altivec(bool__))) long long bllvec_t;
typedef __attribute__((altivec(vector__))) signed long long sllvec_t;
typedef __attribute__((altivec(vector__))) unsigned long long ullvec_t;
typedef __attribute__((altivec(vector__))) double dvec_t;
typedef __attribute__((altivec(vector__))) float fvec_t;
bcvec_t
and_0 (bcvec_t x, bcvec_t y)
{
return __builtin_vec_and (x, y);
}
scvec_t
and_1 (scvec_t x, scvec_t y)
{
return __builtin_vec_and (x, y);
}
ucvec_t
and_2 (ucvec_t x, ucvec_t y)
{
return __builtin_vec_and (x, y);
}
bsvec_t
and_3 (bsvec_t x, bsvec_t y)
{
return __builtin_vec_and (x, y);
}
ssvec_t
and_4 (ssvec_t x, ssvec_t y)
{
return __builtin_vec_and (x, y);
}
usvec_t
and_5 (usvec_t x, usvec_t y)
{
return __builtin_vec_and (x, y);
}
bivec_t
and_6 (bivec_t x, bivec_t y)
{
return __builtin_vec_and (x, y);
}
sivec_t
and_7 (sivec_t x, sivec_t y)
{
return __builtin_vec_and (x, y);
}
uivec_t
and_8 (uivec_t x, uivec_t y)
{
return __builtin_vec_and (x, y);
}
bllvec_t
and_9 (bllvec_t x, bllvec_t y)
{
return __builtin_vec_and (x, y);
}
sllvec_t
and_10 (sllvec_t x, sllvec_t y)
{
return __builtin_vec_and (x, y);
}
ullvec_t
and_11 (ullvec_t x, ullvec_t y)
{
return __builtin_vec_and (x, y);
}
dvec_t
and_12 (dvec_t x, dvec_t y)
{
return __builtin_vec_and (x, y);
}
fvec_t
and_13 (fvec_t x, fvec_t y)
{
return __builtin_vec_and (x, y);
}
bcvec_t
andc_0 (bcvec_t x, bcvec_t y)
{
return __builtin_vec_andc (x, y);
}
scvec_t
andc_1 (scvec_t x, scvec_t y)
{
return __builtin_vec_andc (x, y);
}
ucvec_t
andc_2 (ucvec_t x, ucvec_t y)
{
return __builtin_vec_andc (x, y);
}
bsvec_t
andc_3 (bsvec_t x, bsvec_t y)
{
return __builtin_vec_andc (x, y);
}
ssvec_t
andc_4 (ssvec_t x, ssvec_t y)
{
return __builtin_vec_andc (x, y);
}
usvec_t
andc_5 (usvec_t x, usvec_t y)
{
return __builtin_vec_andc (x, y);
}
bivec_t
andc_6 (bivec_t x, bivec_t y)
{
return __builtin_vec_andc (x, y);
}
sivec_t
andc_7 (sivec_t x, sivec_t y)
{
return __builtin_vec_andc (x, y);
}
uivec_t
andc_8 (uivec_t x, uivec_t y)
{
return __builtin_vec_andc (x, y);
}
bllvec_t
andc_9 (bllvec_t x, bllvec_t y)
{
return __builtin_vec_andc (x, y);
}
sllvec_t
andc_10 (sllvec_t x, sllvec_t y)
{
return __builtin_vec_andc (x, y);
}
ullvec_t
andc_11 (ullvec_t x, ullvec_t y)
{
return __builtin_vec_andc (x, y);
}
dvec_t
andc_12 (dvec_t x, dvec_t y)
{
return __builtin_vec_andc (x, y);
}
fvec_t
andc_13 (fvec_t x, fvec_t y)
{
return __builtin_vec_andc (x, y);
}
bcvec_t
nor_0 (bcvec_t x, bcvec_t y)
{
return __builtin_vec_nor (x, y);
}
scvec_t
nor_1 (scvec_t x, scvec_t y)
{
return __builtin_vec_nor (x, y);
}
ucvec_t
nor_2 (ucvec_t x, ucvec_t y)
{
return __builtin_vec_nor (x, y);
}
bsvec_t
nor_3 (bsvec_t x, bsvec_t y)
{
return __builtin_vec_nor (x, y);
}
ssvec_t
nor_4 (ssvec_t x, ssvec_t y)
{
return __builtin_vec_nor (x, y);
}
usvec_t
nor_5 (usvec_t x, usvec_t y)
{
return __builtin_vec_nor (x, y);
}
bivec_t
nor_6 (bivec_t x, bivec_t y)
{
return __builtin_vec_nor (x, y);
}
sivec_t
nor_7 (sivec_t x, sivec_t y)
{
return __builtin_vec_nor (x, y);
}
uivec_t
nor_8 (uivec_t x, uivec_t y)
{
return __builtin_vec_nor (x, y);
}
bllvec_t
nor_9 (bllvec_t x, bllvec_t y)
{
return __builtin_vec_nor (x, y);
}
sllvec_t
nor_10 (sllvec_t x, sllvec_t y)
{
return __builtin_vec_nor (x, y);
}
ullvec_t
nor_11 (ullvec_t x, ullvec_t y)
{
return __builtin_vec_nor (x, y);
}
dvec_t
nor_12 (dvec_t x, dvec_t y)
{
return __builtin_vec_nor (x, y);
}
fvec_t
nor_13 (fvec_t x, fvec_t y)
{
return __builtin_vec_nor (x, y);
}
bcvec_t
or_0 (bcvec_t x, bcvec_t y)
{
return __builtin_vec_or (x, y);
}
scvec_t
or_1 (scvec_t x, scvec_t y)
{
return __builtin_vec_or (x, y);
}
ucvec_t
or_2 (ucvec_t x, ucvec_t y)
{
return __builtin_vec_or (x, y);
}
bsvec_t
or_3 (bsvec_t x, bsvec_t y)
{
return __builtin_vec_or (x, y);
}
ssvec_t
or_4 (ssvec_t x, ssvec_t y)
{
return __builtin_vec_or (x, y);
}
usvec_t
or_5 (usvec_t x, usvec_t y)
{
return __builtin_vec_or (x, y);
}
bivec_t
or_6 (bivec_t x, bivec_t y)
{
return __builtin_vec_or (x, y);
}
sivec_t
or_7 (sivec_t x, sivec_t y)
{
return __builtin_vec_or (x, y);
}
uivec_t
or_8 (uivec_t x, uivec_t y)
{
return __builtin_vec_or (x, y);
}
bllvec_t
or_9 (bllvec_t x, bllvec_t y)
{
return __builtin_vec_or (x, y);
}
sllvec_t
or_10 (sllvec_t x, sllvec_t y)
{
return __builtin_vec_or (x, y);
}
ullvec_t
or_11 (ullvec_t x, ullvec_t y)
{
return __builtin_vec_or (x, y);
}
dvec_t
or_12 (dvec_t x, dvec_t y)
{
return __builtin_vec_or (x, y);
}
fvec_t
or_13 (fvec_t x, fvec_t y)
{
return __builtin_vec_or (x, y);
}
bcvec_t
xor_0 (bcvec_t x, bcvec_t y)
{
return __builtin_vec_xor (x, y);
}
scvec_t
xor_1 (scvec_t x, scvec_t y)
{
return __builtin_vec_xor (x, y);
}
ucvec_t
xor_2 (ucvec_t x, ucvec_t y)
{
return __builtin_vec_xor (x, y);
}
bsvec_t
xor_3 (bsvec_t x, bsvec_t y)
{
return __builtin_vec_xor (x, y);
}
ssvec_t
xor_4 (ssvec_t x, ssvec_t y)
{
return __builtin_vec_xor (x, y);
}
usvec_t
xor_5 (usvec_t x, usvec_t y)
{
return __builtin_vec_xor (x, y);
}
bivec_t
xor_6 (bivec_t x, bivec_t y)
{
return __builtin_vec_xor (x, y);
}
sivec_t
xor_7 (sivec_t x, sivec_t y)
{
return __builtin_vec_xor (x, y);
}
uivec_t
xor_8 (uivec_t x, uivec_t y)
{
return __builtin_vec_xor (x, y);
}
bllvec_t
xor_9 (bllvec_t x, bllvec_t y)
{
return __builtin_vec_xor (x, y);
}
sllvec_t
xor_10 (sllvec_t x, sllvec_t y)
{
return __builtin_vec_xor (x, y);
}
ullvec_t
xor_11 (ullvec_t x, ullvec_t y)
{
return __builtin_vec_xor (x, y);
}
dvec_t
xor_12 (dvec_t x, dvec_t y)
{
return __builtin_vec_xor (x, y);
}
fvec_t
xor_13 (fvec_t x, fvec_t y)
{
return __builtin_vec_xor (x, y);
}
/* { dg-final { scan-tree-dump-not "VIEW_CONVERT_EXPR" "gimple" } } */
|