Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/clang/lib/Headers/altivec.h
35233 views
1
/*===---- altivec.h - Standard header for type generic math ---------------===*\
2
*
3
* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
* See https://llvm.org/LICENSE.txt for license information.
5
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
*
7
\*===----------------------------------------------------------------------===*/
8
9
#ifndef __ALTIVEC_H
10
#define __ALTIVEC_H
11
12
#ifndef __ALTIVEC__
13
#error "AltiVec support not enabled"
14
#endif
15
16
/* Constants for mapping CR6 bits to predicate result. */
17
18
#define __CR6_EQ 0
19
#define __CR6_EQ_REV 1
20
#define __CR6_LT 2
21
#define __CR6_LT_REV 3
22
#define __CR6_GT 4
23
#define __CR6_GT_REV 5
24
#define __CR6_SO 6
25
#define __CR6_SO_REV 7
26
27
/* Constants for vec_test_data_class */
28
#define __VEC_CLASS_FP_SUBNORMAL_N (1 << 0)
29
#define __VEC_CLASS_FP_SUBNORMAL_P (1 << 1)
30
#define __VEC_CLASS_FP_SUBNORMAL (__VEC_CLASS_FP_SUBNORMAL_P | \
31
__VEC_CLASS_FP_SUBNORMAL_N)
32
#define __VEC_CLASS_FP_ZERO_N (1<<2)
33
#define __VEC_CLASS_FP_ZERO_P (1<<3)
34
#define __VEC_CLASS_FP_ZERO (__VEC_CLASS_FP_ZERO_P | \
35
__VEC_CLASS_FP_ZERO_N)
36
#define __VEC_CLASS_FP_INFINITY_N (1<<4)
37
#define __VEC_CLASS_FP_INFINITY_P (1<<5)
38
#define __VEC_CLASS_FP_INFINITY (__VEC_CLASS_FP_INFINITY_P | \
39
__VEC_CLASS_FP_INFINITY_N)
40
#define __VEC_CLASS_FP_NAN (1<<6)
41
#define __VEC_CLASS_FP_NOT_NORMAL (__VEC_CLASS_FP_NAN | \
42
__VEC_CLASS_FP_SUBNORMAL | \
43
__VEC_CLASS_FP_ZERO | \
44
__VEC_CLASS_FP_INFINITY)
45
46
#define __ATTRS_o_ai __attribute__((__overloadable__, __always_inline__))
47
48
#include <stddef.h>
49
50
static __inline__ vector signed char __ATTRS_o_ai vec_perm(
51
vector signed char __a, vector signed char __b, vector unsigned char __c);
52
53
static __inline__ vector unsigned char __ATTRS_o_ai
54
vec_perm(vector unsigned char __a, vector unsigned char __b,
55
vector unsigned char __c);
56
57
static __inline__ vector bool char __ATTRS_o_ai
58
vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c);
59
60
static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
61
vector signed short __b,
62
vector unsigned char __c);
63
64
static __inline__ vector unsigned short __ATTRS_o_ai
65
vec_perm(vector unsigned short __a, vector unsigned short __b,
66
vector unsigned char __c);
67
68
static __inline__ vector bool short __ATTRS_o_ai vec_perm(
69
vector bool short __a, vector bool short __b, vector unsigned char __c);
70
71
static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
72
vector pixel __b,
73
vector unsigned char __c);
74
75
static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
76
vector signed int __b,
77
vector unsigned char __c);
78
79
static __inline__ vector unsigned int __ATTRS_o_ai vec_perm(
80
vector unsigned int __a, vector unsigned int __b, vector unsigned char __c);
81
82
static __inline__ vector bool int __ATTRS_o_ai
83
vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c);
84
85
static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
86
vector float __b,
87
vector unsigned char __c);
88
89
#ifdef __VSX__
90
static __inline__ vector long long __ATTRS_o_ai
91
vec_perm(vector signed long long __a, vector signed long long __b,
92
vector unsigned char __c);
93
94
static __inline__ vector unsigned long long __ATTRS_o_ai
95
vec_perm(vector unsigned long long __a, vector unsigned long long __b,
96
vector unsigned char __c);
97
98
static __inline__ vector bool long long __ATTRS_o_ai
99
vec_perm(vector bool long long __a, vector bool long long __b,
100
vector unsigned char __c);
101
102
static __inline__ vector double __ATTRS_o_ai vec_perm(vector double __a,
103
vector double __b,
104
vector unsigned char __c);
105
#endif
106
107
static __inline__ vector unsigned char __ATTRS_o_ai
108
vec_xor(vector unsigned char __a, vector unsigned char __b);
109
110
/* vec_abs */
111
112
#define __builtin_altivec_abs_v16qi vec_abs
113
#define __builtin_altivec_abs_v8hi vec_abs
114
#define __builtin_altivec_abs_v4si vec_abs
115
116
static __inline__ vector signed char __ATTRS_o_ai
117
vec_abs(vector signed char __a) {
118
return __builtin_altivec_vmaxsb(__a, -__a);
119
}
120
121
static __inline__ vector signed short __ATTRS_o_ai
122
vec_abs(vector signed short __a) {
123
return __builtin_altivec_vmaxsh(__a, -__a);
124
}
125
126
static __inline__ vector signed int __ATTRS_o_ai
127
vec_abs(vector signed int __a) {
128
return __builtin_altivec_vmaxsw(__a, -__a);
129
}
130
131
#ifdef __POWER8_VECTOR__
132
static __inline__ vector signed long long __ATTRS_o_ai
133
vec_abs(vector signed long long __a) {
134
return __builtin_altivec_vmaxsd(__a, -__a);
135
}
136
#endif
137
138
static __inline__ vector float __ATTRS_o_ai vec_abs(vector float __a) {
139
#ifdef __VSX__
140
return __builtin_vsx_xvabssp(__a);
141
#else
142
vector unsigned int __res =
143
(vector unsigned int)__a & (vector unsigned int)(0x7FFFFFFF);
144
return (vector float)__res;
145
#endif
146
}
147
148
#ifdef __VSX__
149
static __inline__ vector double __ATTRS_o_ai vec_abs(vector double __a) {
150
return __builtin_vsx_xvabsdp(__a);
151
}
152
#endif
153
154
/* vec_abss */
155
#define __builtin_altivec_abss_v16qi vec_abss
156
#define __builtin_altivec_abss_v8hi vec_abss
157
#define __builtin_altivec_abss_v4si vec_abss
158
159
static __inline__ vector signed char __ATTRS_o_ai
160
vec_abss(vector signed char __a) {
161
return __builtin_altivec_vmaxsb(
162
__a, __builtin_altivec_vsubsbs((vector signed char)(0), __a));
163
}
164
165
static __inline__ vector signed short __ATTRS_o_ai
166
vec_abss(vector signed short __a) {
167
return __builtin_altivec_vmaxsh(
168
__a, __builtin_altivec_vsubshs((vector signed short)(0), __a));
169
}
170
171
static __inline__ vector signed int __ATTRS_o_ai
172
vec_abss(vector signed int __a) {
173
return __builtin_altivec_vmaxsw(
174
__a, __builtin_altivec_vsubsws((vector signed int)(0), __a));
175
}
176
177
/* vec_absd */
178
#if defined(__POWER9_VECTOR__)
179
180
static __inline__ vector unsigned char __ATTRS_o_ai
181
vec_absd(vector unsigned char __a, vector unsigned char __b) {
182
return __builtin_altivec_vabsdub(__a, __b);
183
}
184
185
static __inline__ vector unsigned short __ATTRS_o_ai
186
vec_absd(vector unsigned short __a, vector unsigned short __b) {
187
return __builtin_altivec_vabsduh(__a, __b);
188
}
189
190
static __inline__ vector unsigned int __ATTRS_o_ai
191
vec_absd(vector unsigned int __a, vector unsigned int __b) {
192
return __builtin_altivec_vabsduw(__a, __b);
193
}
194
195
#endif /* End __POWER9_VECTOR__ */
196
197
/* vec_add */
198
199
static __inline__ vector signed char __ATTRS_o_ai
200
vec_add(vector signed char __a, vector signed char __b) {
201
return __a + __b;
202
}
203
204
static __inline__ vector signed char __ATTRS_o_ai
205
vec_add(vector bool char __a, vector signed char __b) {
206
return (vector signed char)__a + __b;
207
}
208
209
static __inline__ vector signed char __ATTRS_o_ai
210
vec_add(vector signed char __a, vector bool char __b) {
211
return __a + (vector signed char)__b;
212
}
213
214
static __inline__ vector unsigned char __ATTRS_o_ai
215
vec_add(vector unsigned char __a, vector unsigned char __b) {
216
return __a + __b;
217
}
218
219
static __inline__ vector unsigned char __ATTRS_o_ai
220
vec_add(vector bool char __a, vector unsigned char __b) {
221
return (vector unsigned char)__a + __b;
222
}
223
224
static __inline__ vector unsigned char __ATTRS_o_ai
225
vec_add(vector unsigned char __a, vector bool char __b) {
226
return __a + (vector unsigned char)__b;
227
}
228
229
static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
230
vector short __b) {
231
return __a + __b;
232
}
233
234
static __inline__ vector short __ATTRS_o_ai vec_add(vector bool short __a,
235
vector short __b) {
236
return (vector short)__a + __b;
237
}
238
239
static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
240
vector bool short __b) {
241
return __a + (vector short)__b;
242
}
243
244
static __inline__ vector unsigned short __ATTRS_o_ai
245
vec_add(vector unsigned short __a, vector unsigned short __b) {
246
return __a + __b;
247
}
248
249
static __inline__ vector unsigned short __ATTRS_o_ai
250
vec_add(vector bool short __a, vector unsigned short __b) {
251
return (vector unsigned short)__a + __b;
252
}
253
254
static __inline__ vector unsigned short __ATTRS_o_ai
255
vec_add(vector unsigned short __a, vector bool short __b) {
256
return __a + (vector unsigned short)__b;
257
}
258
259
static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
260
vector int __b) {
261
return __a + __b;
262
}
263
264
static __inline__ vector int __ATTRS_o_ai vec_add(vector bool int __a,
265
vector int __b) {
266
return (vector int)__a + __b;
267
}
268
269
static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
270
vector bool int __b) {
271
return __a + (vector int)__b;
272
}
273
274
static __inline__ vector unsigned int __ATTRS_o_ai
275
vec_add(vector unsigned int __a, vector unsigned int __b) {
276
return __a + __b;
277
}
278
279
static __inline__ vector unsigned int __ATTRS_o_ai
280
vec_add(vector bool int __a, vector unsigned int __b) {
281
return (vector unsigned int)__a + __b;
282
}
283
284
static __inline__ vector unsigned int __ATTRS_o_ai
285
vec_add(vector unsigned int __a, vector bool int __b) {
286
return __a + (vector unsigned int)__b;
287
}
288
289
#ifdef __POWER8_VECTOR__
290
static __inline__ vector signed long long __ATTRS_o_ai
291
vec_add(vector signed long long __a, vector signed long long __b) {
292
return __a + __b;
293
}
294
295
static __inline__ vector unsigned long long __ATTRS_o_ai
296
vec_add(vector unsigned long long __a, vector unsigned long long __b) {
297
return __a + __b;
298
}
299
300
#ifdef __SIZEOF_INT128__
301
static __inline__ vector signed __int128 __ATTRS_o_ai
302
vec_add(vector signed __int128 __a, vector signed __int128 __b) {
303
return __a + __b;
304
}
305
306
static __inline__ vector unsigned __int128 __ATTRS_o_ai
307
vec_add(vector unsigned __int128 __a, vector unsigned __int128 __b) {
308
return __a + __b;
309
}
310
#endif
311
312
static __inline__ vector unsigned char __attribute__((__always_inline__))
313
vec_add_u128(vector unsigned char __a, vector unsigned char __b) {
314
return (vector unsigned char)__builtin_altivec_vadduqm(__a, __b);
315
}
316
#elif defined(__VSX__)
317
static __inline__ vector signed long long __ATTRS_o_ai
318
vec_add(vector signed long long __a, vector signed long long __b) {
319
#ifdef __LITTLE_ENDIAN__
320
// Little endian systems on CPU's prior to Power8 don't really exist
321
// so scalarizing is fine.
322
return __a + __b;
323
#else
324
vector unsigned int __res =
325
(vector unsigned int)__a + (vector unsigned int)__b;
326
vector unsigned int __carry = __builtin_altivec_vaddcuw(
327
(vector unsigned int)__a, (vector unsigned int)__b);
328
__carry = (vector unsigned int)__builtin_shufflevector(
329
(vector unsigned char)__carry, (vector unsigned char)__carry, 0, 0, 0, 7,
330
0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0);
331
return (vector signed long long)(__res + __carry);
332
#endif
333
}
334
335
static __inline__ vector unsigned long long __ATTRS_o_ai
336
vec_add(vector unsigned long long __a, vector unsigned long long __b) {
337
return (vector unsigned long long)vec_add((vector signed long long)__a,
338
(vector signed long long)__b);
339
}
340
#endif // __POWER8_VECTOR__
341
342
static __inline__ vector float __ATTRS_o_ai vec_add(vector float __a,
343
vector float __b) {
344
return __a + __b;
345
}
346
347
#ifdef __VSX__
348
static __inline__ vector double __ATTRS_o_ai vec_add(vector double __a,
349
vector double __b) {
350
return __a + __b;
351
}
352
#endif // __VSX__
353
354
/* vec_adde */
355
356
#ifdef __POWER8_VECTOR__
357
#ifdef __SIZEOF_INT128__
358
static __inline__ vector signed __int128 __ATTRS_o_ai
359
vec_adde(vector signed __int128 __a, vector signed __int128 __b,
360
vector signed __int128 __c) {
361
return (vector signed __int128)__builtin_altivec_vaddeuqm(
362
(vector unsigned __int128)__a, (vector unsigned __int128)__b,
363
(vector unsigned __int128)__c);
364
}
365
366
static __inline__ vector unsigned __int128 __ATTRS_o_ai
367
vec_adde(vector unsigned __int128 __a, vector unsigned __int128 __b,
368
vector unsigned __int128 __c) {
369
return __builtin_altivec_vaddeuqm(__a, __b, __c);
370
}
371
#endif
372
373
static __inline__ vector unsigned char __attribute__((__always_inline__))
374
vec_adde_u128(vector unsigned char __a, vector unsigned char __b,
375
vector unsigned char __c) {
376
return (vector unsigned char)__builtin_altivec_vaddeuqm_c(
377
(vector unsigned char)__a, (vector unsigned char)__b,
378
(vector unsigned char)__c);
379
}
380
#endif
381
382
static __inline__ vector signed int __ATTRS_o_ai
383
vec_adde(vector signed int __a, vector signed int __b,
384
vector signed int __c) {
385
vector signed int __mask = {1, 1, 1, 1};
386
vector signed int __carry = __c & __mask;
387
return vec_add(vec_add(__a, __b), __carry);
388
}
389
390
static __inline__ vector unsigned int __ATTRS_o_ai
391
vec_adde(vector unsigned int __a, vector unsigned int __b,
392
vector unsigned int __c) {
393
vector unsigned int __mask = {1, 1, 1, 1};
394
vector unsigned int __carry = __c & __mask;
395
return vec_add(vec_add(__a, __b), __carry);
396
}
397
398
/* vec_addec */
399
400
#ifdef __POWER8_VECTOR__
401
#ifdef __SIZEOF_INT128__
402
static __inline__ vector signed __int128 __ATTRS_o_ai
403
vec_addec(vector signed __int128 __a, vector signed __int128 __b,
404
vector signed __int128 __c) {
405
return (vector signed __int128)__builtin_altivec_vaddecuq(
406
(vector unsigned __int128)__a, (vector unsigned __int128)__b,
407
(vector unsigned __int128)__c);
408
}
409
410
static __inline__ vector unsigned __int128 __ATTRS_o_ai
411
vec_addec(vector unsigned __int128 __a, vector unsigned __int128 __b,
412
vector unsigned __int128 __c) {
413
return __builtin_altivec_vaddecuq(__a, __b, __c);
414
}
415
#endif
416
417
static __inline__ vector unsigned char __attribute__((__always_inline__))
418
vec_addec_u128(vector unsigned char __a, vector unsigned char __b,
419
vector unsigned char __c) {
420
return (vector unsigned char)__builtin_altivec_vaddecuq_c(
421
(vector unsigned char)__a, (vector unsigned char)__b,
422
(vector unsigned char)__c);
423
}
424
425
#ifdef __powerpc64__
426
static __inline__ vector signed int __ATTRS_o_ai
427
vec_addec(vector signed int __a, vector signed int __b,
428
vector signed int __c) {
429
430
signed int __result[4];
431
for (int i = 0; i < 4; i++) {
432
unsigned int __tempa = (unsigned int) __a[i];
433
unsigned int __tempb = (unsigned int) __b[i];
434
unsigned int __tempc = (unsigned int) __c[i];
435
__tempc = __tempc & 0x00000001;
436
unsigned long long __longa = (unsigned long long) __tempa;
437
unsigned long long __longb = (unsigned long long) __tempb;
438
unsigned long long __longc = (unsigned long long) __tempc;
439
unsigned long long __sum = __longa + __longb + __longc;
440
unsigned long long __res = (__sum >> 32) & 0x01;
441
unsigned long long __tempres = (unsigned int) __res;
442
__result[i] = (signed int) __tempres;
443
}
444
445
vector signed int ret = { __result[0], __result[1], __result[2], __result[3] };
446
return ret;
447
}
448
449
static __inline__ vector unsigned int __ATTRS_o_ai
450
vec_addec(vector unsigned int __a, vector unsigned int __b,
451
vector unsigned int __c) {
452
453
unsigned int __result[4];
454
for (int i = 0; i < 4; i++) {
455
unsigned int __tempc = __c[i] & 1;
456
unsigned long long __longa = (unsigned long long) __a[i];
457
unsigned long long __longb = (unsigned long long) __b[i];
458
unsigned long long __longc = (unsigned long long) __tempc;
459
unsigned long long __sum = __longa + __longb + __longc;
460
unsigned long long __res = (__sum >> 32) & 0x01;
461
unsigned long long __tempres = (unsigned int) __res;
462
__result[i] = (signed int) __tempres;
463
}
464
465
vector unsigned int ret = { __result[0], __result[1], __result[2], __result[3] };
466
return ret;
467
}
468
#endif // __powerpc64__
469
#endif // __POWER8_VECTOR__
470
471
/* vec_vaddubm */
472
473
#define __builtin_altivec_vaddubm vec_vaddubm
474
475
static __inline__ vector signed char __ATTRS_o_ai
476
vec_vaddubm(vector signed char __a, vector signed char __b) {
477
return __a + __b;
478
}
479
480
static __inline__ vector signed char __ATTRS_o_ai
481
vec_vaddubm(vector bool char __a, vector signed char __b) {
482
return (vector signed char)__a + __b;
483
}
484
485
static __inline__ vector signed char __ATTRS_o_ai
486
vec_vaddubm(vector signed char __a, vector bool char __b) {
487
return __a + (vector signed char)__b;
488
}
489
490
static __inline__ vector unsigned char __ATTRS_o_ai
491
vec_vaddubm(vector unsigned char __a, vector unsigned char __b) {
492
return __a + __b;
493
}
494
495
static __inline__ vector unsigned char __ATTRS_o_ai
496
vec_vaddubm(vector bool char __a, vector unsigned char __b) {
497
return (vector unsigned char)__a + __b;
498
}
499
500
static __inline__ vector unsigned char __ATTRS_o_ai
501
vec_vaddubm(vector unsigned char __a, vector bool char __b) {
502
return __a + (vector unsigned char)__b;
503
}
504
505
/* vec_vadduhm */
506
507
#define __builtin_altivec_vadduhm vec_vadduhm
508
509
static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
510
vector short __b) {
511
return __a + __b;
512
}
513
514
static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector bool short __a,
515
vector short __b) {
516
return (vector short)__a + __b;
517
}
518
519
static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
520
vector bool short __b) {
521
return __a + (vector short)__b;
522
}
523
524
static __inline__ vector unsigned short __ATTRS_o_ai
525
vec_vadduhm(vector unsigned short __a, vector unsigned short __b) {
526
return __a + __b;
527
}
528
529
static __inline__ vector unsigned short __ATTRS_o_ai
530
vec_vadduhm(vector bool short __a, vector unsigned short __b) {
531
return (vector unsigned short)__a + __b;
532
}
533
534
static __inline__ vector unsigned short __ATTRS_o_ai
535
vec_vadduhm(vector unsigned short __a, vector bool short __b) {
536
return __a + (vector unsigned short)__b;
537
}
538
539
/* vec_vadduwm */
540
541
#define __builtin_altivec_vadduwm vec_vadduwm
542
543
static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
544
vector int __b) {
545
return __a + __b;
546
}
547
548
static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector bool int __a,
549
vector int __b) {
550
return (vector int)__a + __b;
551
}
552
553
static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
554
vector bool int __b) {
555
return __a + (vector int)__b;
556
}
557
558
static __inline__ vector unsigned int __ATTRS_o_ai
559
vec_vadduwm(vector unsigned int __a, vector unsigned int __b) {
560
return __a + __b;
561
}
562
563
static __inline__ vector unsigned int __ATTRS_o_ai
564
vec_vadduwm(vector bool int __a, vector unsigned int __b) {
565
return (vector unsigned int)__a + __b;
566
}
567
568
static __inline__ vector unsigned int __ATTRS_o_ai
569
vec_vadduwm(vector unsigned int __a, vector bool int __b) {
570
return __a + (vector unsigned int)__b;
571
}
572
573
/* vec_vaddfp */
574
575
#define __builtin_altivec_vaddfp vec_vaddfp
576
577
static __inline__ vector float __attribute__((__always_inline__))
578
vec_vaddfp(vector float __a, vector float __b) {
579
return __a + __b;
580
}
581
582
/* vec_addc */
583
584
static __inline__ vector signed int __ATTRS_o_ai
585
vec_addc(vector signed int __a, vector signed int __b) {
586
return (vector signed int)__builtin_altivec_vaddcuw((vector unsigned int)__a,
587
(vector unsigned int)__b);
588
}
589
590
static __inline__ vector unsigned int __ATTRS_o_ai
591
vec_addc(vector unsigned int __a, vector unsigned int __b) {
592
return __builtin_altivec_vaddcuw(__a, __b);
593
}
594
595
#ifdef __POWER8_VECTOR__
596
#ifdef __SIZEOF_INT128__
597
static __inline__ vector signed __int128 __ATTRS_o_ai
598
vec_addc(vector signed __int128 __a, vector signed __int128 __b) {
599
return (vector signed __int128)__builtin_altivec_vaddcuq(
600
(vector unsigned __int128)__a, (vector unsigned __int128)__b);
601
}
602
603
static __inline__ vector unsigned __int128 __ATTRS_o_ai
604
vec_addc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
605
return __builtin_altivec_vaddcuq(__a, __b);
606
}
607
#endif
608
609
static __inline__ vector unsigned char __attribute__((__always_inline__))
610
vec_addc_u128(vector unsigned char __a, vector unsigned char __b) {
611
return (vector unsigned char)__builtin_altivec_vaddcuq_c(
612
(vector unsigned char)__a, (vector unsigned char)__b);
613
}
614
#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
615
616
/* vec_vaddcuw */
617
618
static __inline__ vector unsigned int __attribute__((__always_inline__))
619
vec_vaddcuw(vector unsigned int __a, vector unsigned int __b) {
620
return __builtin_altivec_vaddcuw(__a, __b);
621
}
622
623
/* vec_adds */
624
625
static __inline__ vector signed char __ATTRS_o_ai
626
vec_adds(vector signed char __a, vector signed char __b) {
627
return __builtin_altivec_vaddsbs(__a, __b);
628
}
629
630
static __inline__ vector signed char __ATTRS_o_ai
631
vec_adds(vector bool char __a, vector signed char __b) {
632
return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
633
}
634
635
static __inline__ vector signed char __ATTRS_o_ai
636
vec_adds(vector signed char __a, vector bool char __b) {
637
return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
638
}
639
640
static __inline__ vector unsigned char __ATTRS_o_ai
641
vec_adds(vector unsigned char __a, vector unsigned char __b) {
642
return __builtin_altivec_vaddubs(__a, __b);
643
}
644
645
static __inline__ vector unsigned char __ATTRS_o_ai
646
vec_adds(vector bool char __a, vector unsigned char __b) {
647
return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
648
}
649
650
static __inline__ vector unsigned char __ATTRS_o_ai
651
vec_adds(vector unsigned char __a, vector bool char __b) {
652
return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
653
}
654
655
static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
656
vector short __b) {
657
return __builtin_altivec_vaddshs(__a, __b);
658
}
659
660
static __inline__ vector short __ATTRS_o_ai vec_adds(vector bool short __a,
661
vector short __b) {
662
return __builtin_altivec_vaddshs((vector short)__a, __b);
663
}
664
665
static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
666
vector bool short __b) {
667
return __builtin_altivec_vaddshs(__a, (vector short)__b);
668
}
669
670
static __inline__ vector unsigned short __ATTRS_o_ai
671
vec_adds(vector unsigned short __a, vector unsigned short __b) {
672
return __builtin_altivec_vadduhs(__a, __b);
673
}
674
675
static __inline__ vector unsigned short __ATTRS_o_ai
676
vec_adds(vector bool short __a, vector unsigned short __b) {
677
return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
678
}
679
680
static __inline__ vector unsigned short __ATTRS_o_ai
681
vec_adds(vector unsigned short __a, vector bool short __b) {
682
return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
683
}
684
685
static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
686
vector int __b) {
687
return __builtin_altivec_vaddsws(__a, __b);
688
}
689
690
static __inline__ vector int __ATTRS_o_ai vec_adds(vector bool int __a,
691
vector int __b) {
692
return __builtin_altivec_vaddsws((vector int)__a, __b);
693
}
694
695
static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
696
vector bool int __b) {
697
return __builtin_altivec_vaddsws(__a, (vector int)__b);
698
}
699
700
static __inline__ vector unsigned int __ATTRS_o_ai
701
vec_adds(vector unsigned int __a, vector unsigned int __b) {
702
return __builtin_altivec_vadduws(__a, __b);
703
}
704
705
static __inline__ vector unsigned int __ATTRS_o_ai
706
vec_adds(vector bool int __a, vector unsigned int __b) {
707
return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
708
}
709
710
static __inline__ vector unsigned int __ATTRS_o_ai
711
vec_adds(vector unsigned int __a, vector bool int __b) {
712
return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
713
}
714
715
/* vec_vaddsbs */
716
717
static __inline__ vector signed char __ATTRS_o_ai
718
vec_vaddsbs(vector signed char __a, vector signed char __b) {
719
return __builtin_altivec_vaddsbs(__a, __b);
720
}
721
722
static __inline__ vector signed char __ATTRS_o_ai
723
vec_vaddsbs(vector bool char __a, vector signed char __b) {
724
return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
725
}
726
727
static __inline__ vector signed char __ATTRS_o_ai
728
vec_vaddsbs(vector signed char __a, vector bool char __b) {
729
return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
730
}
731
732
/* vec_vaddubs */
733
734
static __inline__ vector unsigned char __ATTRS_o_ai
735
vec_vaddubs(vector unsigned char __a, vector unsigned char __b) {
736
return __builtin_altivec_vaddubs(__a, __b);
737
}
738
739
static __inline__ vector unsigned char __ATTRS_o_ai
740
vec_vaddubs(vector bool char __a, vector unsigned char __b) {
741
return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
742
}
743
744
static __inline__ vector unsigned char __ATTRS_o_ai
745
vec_vaddubs(vector unsigned char __a, vector bool char __b) {
746
return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
747
}
748
749
/* vec_vaddshs */
750
751
static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
752
vector short __b) {
753
return __builtin_altivec_vaddshs(__a, __b);
754
}
755
756
static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector bool short __a,
757
vector short __b) {
758
return __builtin_altivec_vaddshs((vector short)__a, __b);
759
}
760
761
static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
762
vector bool short __b) {
763
return __builtin_altivec_vaddshs(__a, (vector short)__b);
764
}
765
766
/* vec_vadduhs */
767
768
static __inline__ vector unsigned short __ATTRS_o_ai
769
vec_vadduhs(vector unsigned short __a, vector unsigned short __b) {
770
return __builtin_altivec_vadduhs(__a, __b);
771
}
772
773
static __inline__ vector unsigned short __ATTRS_o_ai
774
vec_vadduhs(vector bool short __a, vector unsigned short __b) {
775
return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
776
}
777
778
static __inline__ vector unsigned short __ATTRS_o_ai
779
vec_vadduhs(vector unsigned short __a, vector bool short __b) {
780
return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
781
}
782
783
/* vec_vaddsws */
784
785
static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
786
vector int __b) {
787
return __builtin_altivec_vaddsws(__a, __b);
788
}
789
790
static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector bool int __a,
791
vector int __b) {
792
return __builtin_altivec_vaddsws((vector int)__a, __b);
793
}
794
795
static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
796
vector bool int __b) {
797
return __builtin_altivec_vaddsws(__a, (vector int)__b);
798
}
799
800
/* vec_vadduws */
801
802
static __inline__ vector unsigned int __ATTRS_o_ai
803
vec_vadduws(vector unsigned int __a, vector unsigned int __b) {
804
return __builtin_altivec_vadduws(__a, __b);
805
}
806
807
static __inline__ vector unsigned int __ATTRS_o_ai
808
vec_vadduws(vector bool int __a, vector unsigned int __b) {
809
return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
810
}
811
812
static __inline__ vector unsigned int __ATTRS_o_ai
813
vec_vadduws(vector unsigned int __a, vector bool int __b) {
814
return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
815
}
816
817
#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
818
defined(__SIZEOF_INT128__)
819
/* vec_vadduqm */
820
821
static __inline__ vector signed __int128 __ATTRS_o_ai
822
vec_vadduqm(vector signed __int128 __a, vector signed __int128 __b) {
823
return __a + __b;
824
}
825
826
static __inline__ vector unsigned __int128 __ATTRS_o_ai
827
vec_vadduqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
828
return __a + __b;
829
}
830
831
/* vec_vaddeuqm */
832
833
static __inline__ vector signed __int128 __ATTRS_o_ai
834
vec_vaddeuqm(vector signed __int128 __a, vector signed __int128 __b,
835
vector signed __int128 __c) {
836
return (vector signed __int128)__builtin_altivec_vaddeuqm(
837
(vector unsigned __int128)__a, (vector unsigned __int128)__b,
838
(vector unsigned __int128)__c);
839
}
840
841
static __inline__ vector unsigned __int128 __ATTRS_o_ai
842
vec_vaddeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
843
vector unsigned __int128 __c) {
844
return __builtin_altivec_vaddeuqm(__a, __b, __c);
845
}
846
847
/* vec_vaddcuq */
848
849
static __inline__ vector signed __int128 __ATTRS_o_ai
850
vec_vaddcuq(vector signed __int128 __a, vector signed __int128 __b) {
851
return (vector signed __int128)__builtin_altivec_vaddcuq(
852
(vector unsigned __int128)__a, (vector unsigned __int128)__b);
853
}
854
855
static __inline__ vector unsigned __int128 __ATTRS_o_ai
856
vec_vaddcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
857
return __builtin_altivec_vaddcuq(__a, __b);
858
}
859
860
/* vec_vaddecuq */
861
862
static __inline__ vector signed __int128 __ATTRS_o_ai
863
vec_vaddecuq(vector signed __int128 __a, vector signed __int128 __b,
864
vector signed __int128 __c) {
865
return (vector signed __int128)__builtin_altivec_vaddecuq(
866
(vector unsigned __int128)__a, (vector unsigned __int128)__b,
867
(vector unsigned __int128)__c);
868
}
869
870
static __inline__ vector unsigned __int128 __ATTRS_o_ai
871
vec_vaddecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
872
vector unsigned __int128 __c) {
873
return __builtin_altivec_vaddecuq(__a, __b, __c);
874
}
875
#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
876
877
/* vec_and */
878
879
#define __builtin_altivec_vand vec_and
880
881
static __inline__ vector signed char __ATTRS_o_ai
882
vec_and(vector signed char __a, vector signed char __b) {
883
return __a & __b;
884
}
885
886
static __inline__ vector signed char __ATTRS_o_ai
887
vec_and(vector bool char __a, vector signed char __b) {
888
return (vector signed char)__a & __b;
889
}
890
891
static __inline__ vector signed char __ATTRS_o_ai
892
vec_and(vector signed char __a, vector bool char __b) {
893
return __a & (vector signed char)__b;
894
}
895
896
static __inline__ vector unsigned char __ATTRS_o_ai
897
vec_and(vector unsigned char __a, vector unsigned char __b) {
898
return __a & __b;
899
}
900
901
static __inline__ vector unsigned char __ATTRS_o_ai
902
vec_and(vector bool char __a, vector unsigned char __b) {
903
return (vector unsigned char)__a & __b;
904
}
905
906
static __inline__ vector unsigned char __ATTRS_o_ai
907
vec_and(vector unsigned char __a, vector bool char __b) {
908
return __a & (vector unsigned char)__b;
909
}
910
911
static __inline__ vector bool char __ATTRS_o_ai vec_and(vector bool char __a,
912
vector bool char __b) {
913
return __a & __b;
914
}
915
916
static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
917
vector short __b) {
918
return __a & __b;
919
}
920
921
static __inline__ vector short __ATTRS_o_ai vec_and(vector bool short __a,
922
vector short __b) {
923
return (vector short)__a & __b;
924
}
925
926
static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
927
vector bool short __b) {
928
return __a & (vector short)__b;
929
}
930
931
static __inline__ vector unsigned short __ATTRS_o_ai
932
vec_and(vector unsigned short __a, vector unsigned short __b) {
933
return __a & __b;
934
}
935
936
static __inline__ vector unsigned short __ATTRS_o_ai
937
vec_and(vector bool short __a, vector unsigned short __b) {
938
return (vector unsigned short)__a & __b;
939
}
940
941
static __inline__ vector unsigned short __ATTRS_o_ai
942
vec_and(vector unsigned short __a, vector bool short __b) {
943
return __a & (vector unsigned short)__b;
944
}
945
946
static __inline__ vector bool short __ATTRS_o_ai
947
vec_and(vector bool short __a, vector bool short __b) {
948
return __a & __b;
949
}
950
951
static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
952
vector int __b) {
953
return __a & __b;
954
}
955
956
static __inline__ vector int __ATTRS_o_ai vec_and(vector bool int __a,
957
vector int __b) {
958
return (vector int)__a & __b;
959
}
960
961
static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
962
vector bool int __b) {
963
return __a & (vector int)__b;
964
}
965
966
static __inline__ vector unsigned int __ATTRS_o_ai
967
vec_and(vector unsigned int __a, vector unsigned int __b) {
968
return __a & __b;
969
}
970
971
static __inline__ vector unsigned int __ATTRS_o_ai
972
vec_and(vector bool int __a, vector unsigned int __b) {
973
return (vector unsigned int)__a & __b;
974
}
975
976
static __inline__ vector unsigned int __ATTRS_o_ai
977
vec_and(vector unsigned int __a, vector bool int __b) {
978
return __a & (vector unsigned int)__b;
979
}
980
981
static __inline__ vector bool int __ATTRS_o_ai vec_and(vector bool int __a,
982
vector bool int __b) {
983
return __a & __b;
984
}
985
986
static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
987
vector float __b) {
988
vector unsigned int __res =
989
(vector unsigned int)__a & (vector unsigned int)__b;
990
return (vector float)__res;
991
}
992
993
static __inline__ vector float __ATTRS_o_ai vec_and(vector bool int __a,
994
vector float __b) {
995
vector unsigned int __res =
996
(vector unsigned int)__a & (vector unsigned int)__b;
997
return (vector float)__res;
998
}
999
1000
static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
1001
vector bool int __b) {
1002
vector unsigned int __res =
1003
(vector unsigned int)__a & (vector unsigned int)__b;
1004
return (vector float)__res;
1005
}
1006
1007
#ifdef __VSX__
1008
static __inline__ vector double __ATTRS_o_ai vec_and(vector bool long long __a,
1009
vector double __b) {
1010
vector unsigned long long __res =
1011
(vector unsigned long long)__a & (vector unsigned long long)__b;
1012
return (vector double)__res;
1013
}
1014
1015
static __inline__ vector double __ATTRS_o_ai
1016
vec_and(vector double __a, vector bool long long __b) {
1017
vector unsigned long long __res =
1018
(vector unsigned long long)__a & (vector unsigned long long)__b;
1019
return (vector double)__res;
1020
}
1021
1022
static __inline__ vector double __ATTRS_o_ai vec_and(vector double __a,
1023
vector double __b) {
1024
vector unsigned long long __res =
1025
(vector unsigned long long)__a & (vector unsigned long long)__b;
1026
return (vector double)__res;
1027
}
1028
1029
static __inline__ vector signed long long __ATTRS_o_ai
1030
vec_and(vector signed long long __a, vector signed long long __b) {
1031
return __a & __b;
1032
}
1033
1034
static __inline__ vector signed long long __ATTRS_o_ai
1035
vec_and(vector bool long long __a, vector signed long long __b) {
1036
return (vector signed long long)__a & __b;
1037
}
1038
1039
static __inline__ vector signed long long __ATTRS_o_ai
1040
vec_and(vector signed long long __a, vector bool long long __b) {
1041
return __a & (vector signed long long)__b;
1042
}
1043
1044
static __inline__ vector unsigned long long __ATTRS_o_ai
1045
vec_and(vector unsigned long long __a, vector unsigned long long __b) {
1046
return __a & __b;
1047
}
1048
1049
static __inline__ vector unsigned long long __ATTRS_o_ai
1050
vec_and(vector bool long long __a, vector unsigned long long __b) {
1051
return (vector unsigned long long)__a & __b;
1052
}
1053
1054
static __inline__ vector unsigned long long __ATTRS_o_ai
1055
vec_and(vector unsigned long long __a, vector bool long long __b) {
1056
return __a & (vector unsigned long long)__b;
1057
}
1058
1059
static __inline__ vector bool long long __ATTRS_o_ai
1060
vec_and(vector bool long long __a, vector bool long long __b) {
1061
return __a & __b;
1062
}
1063
#endif
1064
1065
/* vec_vand */
1066
1067
static __inline__ vector signed char __ATTRS_o_ai
1068
vec_vand(vector signed char __a, vector signed char __b) {
1069
return __a & __b;
1070
}
1071
1072
static __inline__ vector signed char __ATTRS_o_ai
1073
vec_vand(vector bool char __a, vector signed char __b) {
1074
return (vector signed char)__a & __b;
1075
}
1076
1077
static __inline__ vector signed char __ATTRS_o_ai
1078
vec_vand(vector signed char __a, vector bool char __b) {
1079
return __a & (vector signed char)__b;
1080
}
1081
1082
static __inline__ vector unsigned char __ATTRS_o_ai
1083
vec_vand(vector unsigned char __a, vector unsigned char __b) {
1084
return __a & __b;
1085
}
1086
1087
static __inline__ vector unsigned char __ATTRS_o_ai
1088
vec_vand(vector bool char __a, vector unsigned char __b) {
1089
return (vector unsigned char)__a & __b;
1090
}
1091
1092
static __inline__ vector unsigned char __ATTRS_o_ai
1093
vec_vand(vector unsigned char __a, vector bool char __b) {
1094
return __a & (vector unsigned char)__b;
1095
}
1096
1097
static __inline__ vector bool char __ATTRS_o_ai vec_vand(vector bool char __a,
1098
vector bool char __b) {
1099
return __a & __b;
1100
}
1101
1102
static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
1103
vector short __b) {
1104
return __a & __b;
1105
}
1106
1107
static __inline__ vector short __ATTRS_o_ai vec_vand(vector bool short __a,
1108
vector short __b) {
1109
return (vector short)__a & __b;
1110
}
1111
1112
static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
1113
vector bool short __b) {
1114
return __a & (vector short)__b;
1115
}
1116
1117
static __inline__ vector unsigned short __ATTRS_o_ai
1118
vec_vand(vector unsigned short __a, vector unsigned short __b) {
1119
return __a & __b;
1120
}
1121
1122
static __inline__ vector unsigned short __ATTRS_o_ai
1123
vec_vand(vector bool short __a, vector unsigned short __b) {
1124
return (vector unsigned short)__a & __b;
1125
}
1126
1127
static __inline__ vector unsigned short __ATTRS_o_ai
1128
vec_vand(vector unsigned short __a, vector bool short __b) {
1129
return __a & (vector unsigned short)__b;
1130
}
1131
1132
static __inline__ vector bool short __ATTRS_o_ai
1133
vec_vand(vector bool short __a, vector bool short __b) {
1134
return __a & __b;
1135
}
1136
1137
static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
1138
vector int __b) {
1139
return __a & __b;
1140
}
1141
1142
static __inline__ vector int __ATTRS_o_ai vec_vand(vector bool int __a,
1143
vector int __b) {
1144
return (vector int)__a & __b;
1145
}
1146
1147
static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
1148
vector bool int __b) {
1149
return __a & (vector int)__b;
1150
}
1151
1152
static __inline__ vector unsigned int __ATTRS_o_ai
1153
vec_vand(vector unsigned int __a, vector unsigned int __b) {
1154
return __a & __b;
1155
}
1156
1157
static __inline__ vector unsigned int __ATTRS_o_ai
1158
vec_vand(vector bool int __a, vector unsigned int __b) {
1159
return (vector unsigned int)__a & __b;
1160
}
1161
1162
static __inline__ vector unsigned int __ATTRS_o_ai
1163
vec_vand(vector unsigned int __a, vector bool int __b) {
1164
return __a & (vector unsigned int)__b;
1165
}
1166
1167
static __inline__ vector bool int __ATTRS_o_ai vec_vand(vector bool int __a,
1168
vector bool int __b) {
1169
return __a & __b;
1170
}
1171
1172
static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
1173
vector float __b) {
1174
vector unsigned int __res =
1175
(vector unsigned int)__a & (vector unsigned int)__b;
1176
return (vector float)__res;
1177
}
1178
1179
static __inline__ vector float __ATTRS_o_ai vec_vand(vector bool int __a,
1180
vector float __b) {
1181
vector unsigned int __res =
1182
(vector unsigned int)__a & (vector unsigned int)__b;
1183
return (vector float)__res;
1184
}
1185
1186
static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
1187
vector bool int __b) {
1188
vector unsigned int __res =
1189
(vector unsigned int)__a & (vector unsigned int)__b;
1190
return (vector float)__res;
1191
}
1192
1193
#ifdef __VSX__
1194
static __inline__ vector signed long long __ATTRS_o_ai
1195
vec_vand(vector signed long long __a, vector signed long long __b) {
1196
return __a & __b;
1197
}
1198
1199
static __inline__ vector signed long long __ATTRS_o_ai
1200
vec_vand(vector bool long long __a, vector signed long long __b) {
1201
return (vector signed long long)__a & __b;
1202
}
1203
1204
static __inline__ vector signed long long __ATTRS_o_ai
1205
vec_vand(vector signed long long __a, vector bool long long __b) {
1206
return __a & (vector signed long long)__b;
1207
}
1208
1209
static __inline__ vector unsigned long long __ATTRS_o_ai
1210
vec_vand(vector unsigned long long __a, vector unsigned long long __b) {
1211
return __a & __b;
1212
}
1213
1214
static __inline__ vector unsigned long long __ATTRS_o_ai
1215
vec_vand(vector bool long long __a, vector unsigned long long __b) {
1216
return (vector unsigned long long)__a & __b;
1217
}
1218
1219
static __inline__ vector unsigned long long __ATTRS_o_ai
1220
vec_vand(vector unsigned long long __a, vector bool long long __b) {
1221
return __a & (vector unsigned long long)__b;
1222
}
1223
1224
static __inline__ vector bool long long __ATTRS_o_ai
1225
vec_vand(vector bool long long __a, vector bool long long __b) {
1226
return __a & __b;
1227
}
1228
#endif
1229
1230
/* vec_andc */
1231
1232
#define __builtin_altivec_vandc vec_andc
1233
1234
static __inline__ vector signed char __ATTRS_o_ai
1235
vec_andc(vector signed char __a, vector signed char __b) {
1236
return __a & ~__b;
1237
}
1238
1239
static __inline__ vector signed char __ATTRS_o_ai
1240
vec_andc(vector bool char __a, vector signed char __b) {
1241
return (vector signed char)__a & ~__b;
1242
}
1243
1244
static __inline__ vector signed char __ATTRS_o_ai
1245
vec_andc(vector signed char __a, vector bool char __b) {
1246
return __a & ~(vector signed char)__b;
1247
}
1248
1249
static __inline__ vector unsigned char __ATTRS_o_ai
1250
vec_andc(vector unsigned char __a, vector unsigned char __b) {
1251
return __a & ~__b;
1252
}
1253
1254
static __inline__ vector unsigned char __ATTRS_o_ai
1255
vec_andc(vector bool char __a, vector unsigned char __b) {
1256
return (vector unsigned char)__a & ~__b;
1257
}
1258
1259
static __inline__ vector unsigned char __ATTRS_o_ai
1260
vec_andc(vector unsigned char __a, vector bool char __b) {
1261
return __a & ~(vector unsigned char)__b;
1262
}
1263
1264
static __inline__ vector bool char __ATTRS_o_ai vec_andc(vector bool char __a,
1265
vector bool char __b) {
1266
return __a & ~__b;
1267
}
1268
1269
static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
1270
vector short __b) {
1271
return __a & ~__b;
1272
}
1273
1274
static __inline__ vector short __ATTRS_o_ai vec_andc(vector bool short __a,
1275
vector short __b) {
1276
return (vector short)__a & ~__b;
1277
}
1278
1279
static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
1280
vector bool short __b) {
1281
return __a & ~(vector short)__b;
1282
}
1283
1284
static __inline__ vector unsigned short __ATTRS_o_ai
1285
vec_andc(vector unsigned short __a, vector unsigned short __b) {
1286
return __a & ~__b;
1287
}
1288
1289
static __inline__ vector unsigned short __ATTRS_o_ai
1290
vec_andc(vector bool short __a, vector unsigned short __b) {
1291
return (vector unsigned short)__a & ~__b;
1292
}
1293
1294
static __inline__ vector unsigned short __ATTRS_o_ai
1295
vec_andc(vector unsigned short __a, vector bool short __b) {
1296
return __a & ~(vector unsigned short)__b;
1297
}
1298
1299
static __inline__ vector bool short __ATTRS_o_ai
1300
vec_andc(vector bool short __a, vector bool short __b) {
1301
return __a & ~__b;
1302
}
1303
1304
static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
1305
vector int __b) {
1306
return __a & ~__b;
1307
}
1308
1309
static __inline__ vector int __ATTRS_o_ai vec_andc(vector bool int __a,
1310
vector int __b) {
1311
return (vector int)__a & ~__b;
1312
}
1313
1314
static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
1315
vector bool int __b) {
1316
return __a & ~(vector int)__b;
1317
}
1318
1319
static __inline__ vector unsigned int __ATTRS_o_ai
1320
vec_andc(vector unsigned int __a, vector unsigned int __b) {
1321
return __a & ~__b;
1322
}
1323
1324
static __inline__ vector unsigned int __ATTRS_o_ai
1325
vec_andc(vector bool int __a, vector unsigned int __b) {
1326
return (vector unsigned int)__a & ~__b;
1327
}
1328
1329
static __inline__ vector unsigned int __ATTRS_o_ai
1330
vec_andc(vector unsigned int __a, vector bool int __b) {
1331
return __a & ~(vector unsigned int)__b;
1332
}
1333
1334
static __inline__ vector bool int __ATTRS_o_ai vec_andc(vector bool int __a,
1335
vector bool int __b) {
1336
return __a & ~__b;
1337
}
1338
1339
static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
1340
vector float __b) {
1341
vector unsigned int __res =
1342
(vector unsigned int)__a & ~(vector unsigned int)__b;
1343
return (vector float)__res;
1344
}
1345
1346
static __inline__ vector float __ATTRS_o_ai vec_andc(vector bool int __a,
1347
vector float __b) {
1348
vector unsigned int __res =
1349
(vector unsigned int)__a & ~(vector unsigned int)__b;
1350
return (vector float)__res;
1351
}
1352
1353
static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
1354
vector bool int __b) {
1355
vector unsigned int __res =
1356
(vector unsigned int)__a & ~(vector unsigned int)__b;
1357
return (vector float)__res;
1358
}
1359
1360
#ifdef __VSX__
1361
static __inline__ vector double __ATTRS_o_ai vec_andc(vector bool long long __a,
1362
vector double __b) {
1363
vector unsigned long long __res =
1364
(vector unsigned long long)__a & ~(vector unsigned long long)__b;
1365
return (vector double)__res;
1366
}
1367
1368
static __inline__ vector double __ATTRS_o_ai
1369
vec_andc(vector double __a, vector bool long long __b) {
1370
vector unsigned long long __res =
1371
(vector unsigned long long)__a & ~(vector unsigned long long)__b;
1372
return (vector double)__res;
1373
}
1374
1375
static __inline__ vector double __ATTRS_o_ai vec_andc(vector double __a,
1376
vector double __b) {
1377
vector unsigned long long __res =
1378
(vector unsigned long long)__a & ~(vector unsigned long long)__b;
1379
return (vector double)__res;
1380
}
1381
1382
static __inline__ vector signed long long __ATTRS_o_ai
1383
vec_andc(vector signed long long __a, vector signed long long __b) {
1384
return __a & ~__b;
1385
}
1386
1387
static __inline__ vector signed long long __ATTRS_o_ai
1388
vec_andc(vector bool long long __a, vector signed long long __b) {
1389
return (vector signed long long)__a & ~__b;
1390
}
1391
1392
static __inline__ vector signed long long __ATTRS_o_ai
1393
vec_andc(vector signed long long __a, vector bool long long __b) {
1394
return __a & ~(vector signed long long)__b;
1395
}
1396
1397
static __inline__ vector unsigned long long __ATTRS_o_ai
1398
vec_andc(vector unsigned long long __a, vector unsigned long long __b) {
1399
return __a & ~__b;
1400
}
1401
1402
static __inline__ vector unsigned long long __ATTRS_o_ai
1403
vec_andc(vector bool long long __a, vector unsigned long long __b) {
1404
return (vector unsigned long long)__a & ~__b;
1405
}
1406
1407
static __inline__ vector unsigned long long __ATTRS_o_ai
1408
vec_andc(vector unsigned long long __a, vector bool long long __b) {
1409
return __a & ~(vector unsigned long long)__b;
1410
}
1411
1412
static __inline__ vector bool long long __ATTRS_o_ai
1413
vec_andc(vector bool long long __a, vector bool long long __b) {
1414
return __a & ~__b;
1415
}
1416
#endif
1417
1418
/* vec_vandc */
1419
1420
static __inline__ vector signed char __ATTRS_o_ai
1421
vec_vandc(vector signed char __a, vector signed char __b) {
1422
return __a & ~__b;
1423
}
1424
1425
static __inline__ vector signed char __ATTRS_o_ai
1426
vec_vandc(vector bool char __a, vector signed char __b) {
1427
return (vector signed char)__a & ~__b;
1428
}
1429
1430
static __inline__ vector signed char __ATTRS_o_ai
1431
vec_vandc(vector signed char __a, vector bool char __b) {
1432
return __a & ~(vector signed char)__b;
1433
}
1434
1435
static __inline__ vector unsigned char __ATTRS_o_ai
1436
vec_vandc(vector unsigned char __a, vector unsigned char __b) {
1437
return __a & ~__b;
1438
}
1439
1440
static __inline__ vector unsigned char __ATTRS_o_ai
1441
vec_vandc(vector bool char __a, vector unsigned char __b) {
1442
return (vector unsigned char)__a & ~__b;
1443
}
1444
1445
static __inline__ vector unsigned char __ATTRS_o_ai
1446
vec_vandc(vector unsigned char __a, vector bool char __b) {
1447
return __a & ~(vector unsigned char)__b;
1448
}
1449
1450
static __inline__ vector bool char __ATTRS_o_ai
1451
vec_vandc(vector bool char __a, vector bool char __b) {
1452
return __a & ~__b;
1453
}
1454
1455
static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
1456
vector short __b) {
1457
return __a & ~__b;
1458
}
1459
1460
static __inline__ vector short __ATTRS_o_ai vec_vandc(vector bool short __a,
1461
vector short __b) {
1462
return (vector short)__a & ~__b;
1463
}
1464
1465
static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
1466
vector bool short __b) {
1467
return __a & ~(vector short)__b;
1468
}
1469
1470
static __inline__ vector unsigned short __ATTRS_o_ai
1471
vec_vandc(vector unsigned short __a, vector unsigned short __b) {
1472
return __a & ~__b;
1473
}
1474
1475
static __inline__ vector unsigned short __ATTRS_o_ai
1476
vec_vandc(vector bool short __a, vector unsigned short __b) {
1477
return (vector unsigned short)__a & ~__b;
1478
}
1479
1480
static __inline__ vector unsigned short __ATTRS_o_ai
1481
vec_vandc(vector unsigned short __a, vector bool short __b) {
1482
return __a & ~(vector unsigned short)__b;
1483
}
1484
1485
static __inline__ vector bool short __ATTRS_o_ai
1486
vec_vandc(vector bool short __a, vector bool short __b) {
1487
return __a & ~__b;
1488
}
1489
1490
static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
1491
vector int __b) {
1492
return __a & ~__b;
1493
}
1494
1495
static __inline__ vector int __ATTRS_o_ai vec_vandc(vector bool int __a,
1496
vector int __b) {
1497
return (vector int)__a & ~__b;
1498
}
1499
1500
static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
1501
vector bool int __b) {
1502
return __a & ~(vector int)__b;
1503
}
1504
1505
static __inline__ vector unsigned int __ATTRS_o_ai
1506
vec_vandc(vector unsigned int __a, vector unsigned int __b) {
1507
return __a & ~__b;
1508
}
1509
1510
static __inline__ vector unsigned int __ATTRS_o_ai
1511
vec_vandc(vector bool int __a, vector unsigned int __b) {
1512
return (vector unsigned int)__a & ~__b;
1513
}
1514
1515
static __inline__ vector unsigned int __ATTRS_o_ai
1516
vec_vandc(vector unsigned int __a, vector bool int __b) {
1517
return __a & ~(vector unsigned int)__b;
1518
}
1519
1520
static __inline__ vector bool int __ATTRS_o_ai vec_vandc(vector bool int __a,
1521
vector bool int __b) {
1522
return __a & ~__b;
1523
}
1524
1525
static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
1526
vector float __b) {
1527
vector unsigned int __res =
1528
(vector unsigned int)__a & ~(vector unsigned int)__b;
1529
return (vector float)__res;
1530
}
1531
1532
static __inline__ vector float __ATTRS_o_ai vec_vandc(vector bool int __a,
1533
vector float __b) {
1534
vector unsigned int __res =
1535
(vector unsigned int)__a & ~(vector unsigned int)__b;
1536
return (vector float)__res;
1537
}
1538
1539
static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
1540
vector bool int __b) {
1541
vector unsigned int __res =
1542
(vector unsigned int)__a & ~(vector unsigned int)__b;
1543
return (vector float)__res;
1544
}
1545
1546
#ifdef __VSX__
1547
static __inline__ vector signed long long __ATTRS_o_ai
1548
vec_vandc(vector signed long long __a, vector signed long long __b) {
1549
return __a & ~__b;
1550
}
1551
1552
static __inline__ vector signed long long __ATTRS_o_ai
1553
vec_vandc(vector bool long long __a, vector signed long long __b) {
1554
return (vector signed long long)__a & ~__b;
1555
}
1556
1557
static __inline__ vector signed long long __ATTRS_o_ai
1558
vec_vandc(vector signed long long __a, vector bool long long __b) {
1559
return __a & ~(vector signed long long)__b;
1560
}
1561
1562
static __inline__ vector unsigned long long __ATTRS_o_ai
1563
vec_vandc(vector unsigned long long __a, vector unsigned long long __b) {
1564
return __a & ~__b;
1565
}
1566
1567
static __inline__ vector unsigned long long __ATTRS_o_ai
1568
vec_vandc(vector bool long long __a, vector unsigned long long __b) {
1569
return (vector unsigned long long)__a & ~__b;
1570
}
1571
1572
static __inline__ vector unsigned long long __ATTRS_o_ai
1573
vec_vandc(vector unsigned long long __a, vector bool long long __b) {
1574
return __a & ~(vector unsigned long long)__b;
1575
}
1576
1577
static __inline__ vector bool long long __ATTRS_o_ai
1578
vec_vandc(vector bool long long __a, vector bool long long __b) {
1579
return __a & ~__b;
1580
}
1581
#endif
1582
1583
/* vec_avg */
1584
1585
static __inline__ vector signed char __ATTRS_o_ai
1586
vec_avg(vector signed char __a, vector signed char __b) {
1587
return __builtin_altivec_vavgsb(__a, __b);
1588
}
1589
1590
static __inline__ vector unsigned char __ATTRS_o_ai
1591
vec_avg(vector unsigned char __a, vector unsigned char __b) {
1592
return __builtin_altivec_vavgub(__a, __b);
1593
}
1594
1595
static __inline__ vector short __ATTRS_o_ai vec_avg(vector short __a,
1596
vector short __b) {
1597
return __builtin_altivec_vavgsh(__a, __b);
1598
}
1599
1600
static __inline__ vector unsigned short __ATTRS_o_ai
1601
vec_avg(vector unsigned short __a, vector unsigned short __b) {
1602
return __builtin_altivec_vavguh(__a, __b);
1603
}
1604
1605
static __inline__ vector int __ATTRS_o_ai vec_avg(vector int __a,
1606
vector int __b) {
1607
return __builtin_altivec_vavgsw(__a, __b);
1608
}
1609
1610
static __inline__ vector unsigned int __ATTRS_o_ai
1611
vec_avg(vector unsigned int __a, vector unsigned int __b) {
1612
return __builtin_altivec_vavguw(__a, __b);
1613
}
1614
1615
/* vec_vavgsb */
1616
1617
static __inline__ vector signed char __attribute__((__always_inline__))
1618
vec_vavgsb(vector signed char __a, vector signed char __b) {
1619
return __builtin_altivec_vavgsb(__a, __b);
1620
}
1621
1622
/* vec_vavgub */
1623
1624
static __inline__ vector unsigned char __attribute__((__always_inline__))
1625
vec_vavgub(vector unsigned char __a, vector unsigned char __b) {
1626
return __builtin_altivec_vavgub(__a, __b);
1627
}
1628
1629
/* vec_vavgsh */
1630
1631
static __inline__ vector short __attribute__((__always_inline__))
1632
vec_vavgsh(vector short __a, vector short __b) {
1633
return __builtin_altivec_vavgsh(__a, __b);
1634
}
1635
1636
/* vec_vavguh */
1637
1638
static __inline__ vector unsigned short __attribute__((__always_inline__))
1639
vec_vavguh(vector unsigned short __a, vector unsigned short __b) {
1640
return __builtin_altivec_vavguh(__a, __b);
1641
}
1642
1643
/* vec_vavgsw */
1644
1645
static __inline__ vector int __attribute__((__always_inline__))
1646
vec_vavgsw(vector int __a, vector int __b) {
1647
return __builtin_altivec_vavgsw(__a, __b);
1648
}
1649
1650
/* vec_vavguw */
1651
1652
static __inline__ vector unsigned int __attribute__((__always_inline__))
1653
vec_vavguw(vector unsigned int __a, vector unsigned int __b) {
1654
return __builtin_altivec_vavguw(__a, __b);
1655
}
1656
1657
/* vec_ceil */
1658
1659
static __inline__ vector float __ATTRS_o_ai vec_ceil(vector float __a) {
1660
#ifdef __VSX__
1661
return __builtin_vsx_xvrspip(__a);
1662
#else
1663
return __builtin_altivec_vrfip(__a);
1664
#endif
1665
}
1666
1667
#ifdef __VSX__
1668
static __inline__ vector double __ATTRS_o_ai vec_ceil(vector double __a) {
1669
return __builtin_vsx_xvrdpip(__a);
1670
}
1671
#endif
1672
1673
/* vec_roundp */
1674
static __inline__ vector float __ATTRS_o_ai vec_roundp(vector float __a) {
1675
return vec_ceil(__a);
1676
}
1677
1678
#ifdef __VSX__
1679
static __inline__ vector double __ATTRS_o_ai vec_roundp(vector double __a) {
1680
return vec_ceil(__a);
1681
}
1682
#endif
1683
1684
/* vec_vrfip */
1685
1686
static __inline__ vector float __attribute__((__always_inline__))
1687
vec_vrfip(vector float __a) {
1688
return __builtin_altivec_vrfip(__a);
1689
}
1690
1691
/* vec_cmpb */
1692
1693
static __inline__ vector int __attribute__((__always_inline__))
1694
vec_cmpb(vector float __a, vector float __b) {
1695
return __builtin_altivec_vcmpbfp(__a, __b);
1696
}
1697
1698
/* vec_vcmpbfp */
1699
1700
static __inline__ vector int __attribute__((__always_inline__))
1701
vec_vcmpbfp(vector float __a, vector float __b) {
1702
return __builtin_altivec_vcmpbfp(__a, __b);
1703
}
1704
1705
/* vec_cmpeq */
1706
1707
static __inline__ vector bool char __ATTRS_o_ai
1708
vec_cmpeq(vector signed char __a, vector signed char __b) {
1709
return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1710
(vector char)__b);
1711
}
1712
1713
static __inline__ vector bool char __ATTRS_o_ai
1714
vec_cmpeq(vector unsigned char __a, vector unsigned char __b) {
1715
return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1716
(vector char)__b);
1717
}
1718
1719
static __inline__ vector bool char __ATTRS_o_ai
1720
vec_cmpeq(vector bool char __a, vector bool char __b) {
1721
return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1722
(vector char)__b);
1723
}
1724
1725
static __inline__ vector bool short __ATTRS_o_ai vec_cmpeq(vector short __a,
1726
vector short __b) {
1727
return (vector bool short)__builtin_altivec_vcmpequh(__a, __b);
1728
}
1729
1730
static __inline__ vector bool short __ATTRS_o_ai
1731
vec_cmpeq(vector unsigned short __a, vector unsigned short __b) {
1732
return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,
1733
(vector short)__b);
1734
}
1735
1736
static __inline__ vector bool short __ATTRS_o_ai
1737
vec_cmpeq(vector bool short __a, vector bool short __b) {
1738
return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,
1739
(vector short)__b);
1740
}
1741
1742
static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector int __a,
1743
vector int __b) {
1744
return (vector bool int)__builtin_altivec_vcmpequw(__a, __b);
1745
}
1746
1747
static __inline__ vector bool int __ATTRS_o_ai
1748
vec_cmpeq(vector unsigned int __a, vector unsigned int __b) {
1749
return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,
1750
(vector int)__b);
1751
}
1752
1753
static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector bool int __a,
1754
vector bool int __b) {
1755
return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,
1756
(vector int)__b);
1757
}
1758
1759
#ifdef __POWER8_VECTOR__
1760
static __inline__ vector bool long long __ATTRS_o_ai
1761
vec_cmpeq(vector signed long long __a, vector signed long long __b) {
1762
return (vector bool long long)__builtin_altivec_vcmpequd(__a, __b);
1763
}
1764
1765
static __inline__ vector bool long long __ATTRS_o_ai
1766
vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {
1767
return (vector bool long long)__builtin_altivec_vcmpequd(
1768
(vector long long)__a, (vector long long)__b);
1769
}
1770
1771
static __inline__ vector bool long long __ATTRS_o_ai
1772
vec_cmpeq(vector bool long long __a, vector bool long long __b) {
1773
return (vector bool long long)__builtin_altivec_vcmpequd(
1774
(vector long long)__a, (vector long long)__b);
1775
}
1776
#elif defined(__VSX__)
1777
static __inline__ vector bool long long __ATTRS_o_ai
1778
vec_cmpeq(vector signed long long __a, vector signed long long __b) {
1779
vector bool int __wordcmp =
1780
vec_cmpeq((vector signed int)__a, (vector signed int)__b);
1781
#ifdef __LITTLE_ENDIAN__
1782
__wordcmp &= __builtin_shufflevector(__wordcmp, __wordcmp, 3, 0, 1, 2);
1783
return (vector bool long long)__builtin_shufflevector(__wordcmp, __wordcmp, 1,
1784
1, 3, 3);
1785
#else
1786
__wordcmp &= __builtin_shufflevector(__wordcmp, __wordcmp, 1, 2, 3, 0);
1787
return (vector bool long long)__builtin_shufflevector(__wordcmp, __wordcmp, 0,
1788
0, 2, 2);
1789
#endif
1790
}
1791
1792
static __inline__ vector bool long long __ATTRS_o_ai
1793
vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {
1794
return vec_cmpeq((vector signed long long)__a, (vector signed long long)__b);
1795
}
1796
1797
static __inline__ vector bool long long __ATTRS_o_ai
1798
vec_cmpeq(vector bool long long __a, vector bool long long __b) {
1799
return vec_cmpeq((vector signed long long)__a, (vector signed long long)__b);
1800
}
1801
#endif
1802
1803
static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector float __a,
1804
vector float __b) {
1805
#ifdef __VSX__
1806
return (vector bool int)__builtin_vsx_xvcmpeqsp(__a, __b);
1807
#else
1808
return (vector bool int)__builtin_altivec_vcmpeqfp(__a, __b);
1809
#endif
1810
}
1811
1812
#ifdef __VSX__
1813
static __inline__ vector bool long long __ATTRS_o_ai
1814
vec_cmpeq(vector double __a, vector double __b) {
1815
return (vector bool long long)__builtin_vsx_xvcmpeqdp(__a, __b);
1816
}
1817
#endif
1818
1819
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
1820
static __inline__ vector bool __int128 __ATTRS_o_ai
1821
vec_cmpeq(vector signed __int128 __a, vector signed __int128 __b) {
1822
return (vector bool __int128)__builtin_altivec_vcmpequq(
1823
(vector unsigned __int128)__a, (vector unsigned __int128)__b);
1824
}
1825
1826
static __inline__ vector bool __int128 __ATTRS_o_ai
1827
vec_cmpeq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
1828
return (vector bool __int128)__builtin_altivec_vcmpequq(
1829
(vector unsigned __int128)__a, (vector unsigned __int128)__b);
1830
}
1831
1832
static __inline__ vector bool __int128 __ATTRS_o_ai
1833
vec_cmpeq(vector bool __int128 __a, vector bool __int128 __b) {
1834
return (vector bool __int128)__builtin_altivec_vcmpequq(
1835
(vector unsigned __int128)__a, (vector unsigned __int128)__b);
1836
}
1837
#endif
1838
1839
#ifdef __POWER9_VECTOR__
1840
/* vec_cmpne */
1841
1842
static __inline__ vector bool char __ATTRS_o_ai
1843
vec_cmpne(vector bool char __a, vector bool char __b) {
1844
return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
1845
(vector char)__b);
1846
}
1847
1848
static __inline__ vector bool char __ATTRS_o_ai
1849
vec_cmpne(vector signed char __a, vector signed char __b) {
1850
return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
1851
(vector char)__b);
1852
}
1853
1854
static __inline__ vector bool char __ATTRS_o_ai
1855
vec_cmpne(vector unsigned char __a, vector unsigned char __b) {
1856
return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
1857
(vector char)__b);
1858
}
1859
1860
static __inline__ vector bool short __ATTRS_o_ai
1861
vec_cmpne(vector bool short __a, vector bool short __b) {
1862
return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
1863
(vector short)__b);
1864
}
1865
1866
static __inline__ vector bool short __ATTRS_o_ai
1867
vec_cmpne(vector signed short __a, vector signed short __b) {
1868
return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
1869
(vector short)__b);
1870
}
1871
1872
static __inline__ vector bool short __ATTRS_o_ai
1873
vec_cmpne(vector unsigned short __a, vector unsigned short __b) {
1874
return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
1875
(vector short)__b);
1876
}
1877
1878
static __inline__ vector bool int __ATTRS_o_ai
1879
vec_cmpne(vector bool int __a, vector bool int __b) {
1880
return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1881
(vector int)__b);
1882
}
1883
1884
static __inline__ vector bool int __ATTRS_o_ai
1885
vec_cmpne(vector signed int __a, vector signed int __b) {
1886
return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1887
(vector int)__b);
1888
}
1889
1890
static __inline__ vector bool int __ATTRS_o_ai
1891
vec_cmpne(vector unsigned int __a, vector unsigned int __b) {
1892
return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1893
(vector int)__b);
1894
}
1895
1896
static __inline__ vector bool int __ATTRS_o_ai
1897
vec_cmpne(vector float __a, vector float __b) {
1898
return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1899
(vector int)__b);
1900
}
1901
1902
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
1903
static __inline__ vector bool __int128 __ATTRS_o_ai
1904
vec_cmpne(vector unsigned __int128 __a, vector unsigned __int128 __b) {
1905
return (vector bool __int128)~(__builtin_altivec_vcmpequq(
1906
(vector unsigned __int128)__a, (vector unsigned __int128)__b));
1907
}
1908
1909
static __inline__ vector bool __int128 __ATTRS_o_ai
1910
vec_cmpne(vector signed __int128 __a, vector signed __int128 __b) {
1911
return (vector bool __int128)~(__builtin_altivec_vcmpequq(
1912
(vector unsigned __int128)__a, (vector unsigned __int128)__b));
1913
}
1914
1915
static __inline__ vector bool __int128 __ATTRS_o_ai
1916
vec_cmpne(vector bool __int128 __a, vector bool __int128 __b) {
1917
return (vector bool __int128)~(__builtin_altivec_vcmpequq(
1918
(vector unsigned __int128)__a, (vector unsigned __int128)__b));
1919
}
1920
#endif
1921
1922
/* vec_cmpnez */
1923
1924
static __inline__ vector bool char __ATTRS_o_ai
1925
vec_cmpnez(vector signed char __a, vector signed char __b) {
1926
return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,
1927
(vector char)__b);
1928
}
1929
1930
static __inline__ vector bool char __ATTRS_o_ai
1931
vec_cmpnez(vector unsigned char __a, vector unsigned char __b) {
1932
return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,
1933
(vector char)__b);
1934
}
1935
1936
static __inline__ vector bool short __ATTRS_o_ai
1937
vec_cmpnez(vector signed short __a, vector signed short __b) {
1938
return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,
1939
(vector short)__b);
1940
}
1941
1942
static __inline__ vector bool short __ATTRS_o_ai
1943
vec_cmpnez(vector unsigned short __a, vector unsigned short __b) {
1944
return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,
1945
(vector short)__b);
1946
}
1947
1948
static __inline__ vector bool int __ATTRS_o_ai
1949
vec_cmpnez(vector signed int __a, vector signed int __b) {
1950
return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,
1951
(vector int)__b);
1952
}
1953
1954
static __inline__ vector bool int __ATTRS_o_ai
1955
vec_cmpnez(vector unsigned int __a, vector unsigned int __b) {
1956
return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,
1957
(vector int)__b);
1958
}
1959
1960
static __inline__ signed int __ATTRS_o_ai
1961
vec_cntlz_lsbb(vector signed char __a) {
1962
#ifdef __LITTLE_ENDIAN__
1963
return __builtin_altivec_vctzlsbb((vector unsigned char)__a);
1964
#else
1965
return __builtin_altivec_vclzlsbb((vector unsigned char)__a);
1966
#endif
1967
}
1968
1969
static __inline__ signed int __ATTRS_o_ai
1970
vec_cntlz_lsbb(vector unsigned char __a) {
1971
#ifdef __LITTLE_ENDIAN__
1972
return __builtin_altivec_vctzlsbb((vector unsigned char)__a);
1973
#else
1974
return __builtin_altivec_vclzlsbb(__a);
1975
#endif
1976
}
1977
1978
static __inline__ signed int __ATTRS_o_ai
1979
vec_cnttz_lsbb(vector signed char __a) {
1980
#ifdef __LITTLE_ENDIAN__
1981
return __builtin_altivec_vclzlsbb((vector unsigned char)__a);
1982
#else
1983
return __builtin_altivec_vctzlsbb((vector unsigned char)__a);
1984
#endif
1985
}
1986
1987
static __inline__ signed int __ATTRS_o_ai
1988
vec_cnttz_lsbb(vector unsigned char __a) {
1989
#ifdef __LITTLE_ENDIAN__
1990
return __builtin_altivec_vclzlsbb(__a);
1991
#else
1992
return __builtin_altivec_vctzlsbb(__a);
1993
#endif
1994
}
1995
1996
static __inline__ vector unsigned int __ATTRS_o_ai
1997
vec_parity_lsbb(vector unsigned int __a) {
1998
return __builtin_altivec_vprtybw(__a);
1999
}
2000
2001
static __inline__ vector unsigned int __ATTRS_o_ai
2002
vec_parity_lsbb(vector signed int __a) {
2003
return __builtin_altivec_vprtybw((vector unsigned int)__a);
2004
}
2005
2006
#ifdef __SIZEOF_INT128__
2007
static __inline__ vector unsigned __int128 __ATTRS_o_ai
2008
vec_parity_lsbb(vector unsigned __int128 __a) {
2009
return __builtin_altivec_vprtybq(__a);
2010
}
2011
2012
static __inline__ vector unsigned __int128 __ATTRS_o_ai
2013
vec_parity_lsbb(vector signed __int128 __a) {
2014
return __builtin_altivec_vprtybq((vector unsigned __int128)__a);
2015
}
2016
#endif
2017
2018
static __inline__ vector unsigned long long __ATTRS_o_ai
2019
vec_parity_lsbb(vector unsigned long long __a) {
2020
return __builtin_altivec_vprtybd(__a);
2021
}
2022
2023
static __inline__ vector unsigned long long __ATTRS_o_ai
2024
vec_parity_lsbb(vector signed long long __a) {
2025
return __builtin_altivec_vprtybd((vector unsigned long long)__a);
2026
}
2027
2028
#else
2029
/* vec_cmpne */
2030
2031
static __inline__ vector bool char __ATTRS_o_ai
2032
vec_cmpne(vector bool char __a, vector bool char __b) {
2033
return ~(vec_cmpeq(__a, __b));
2034
}
2035
2036
static __inline__ vector bool char __ATTRS_o_ai
2037
vec_cmpne(vector signed char __a, vector signed char __b) {
2038
return ~(vec_cmpeq(__a, __b));
2039
}
2040
2041
static __inline__ vector bool char __ATTRS_o_ai
2042
vec_cmpne(vector unsigned char __a, vector unsigned char __b) {
2043
return ~(vec_cmpeq(__a, __b));
2044
}
2045
2046
static __inline__ vector bool short __ATTRS_o_ai
2047
vec_cmpne(vector bool short __a, vector bool short __b) {
2048
return ~(vec_cmpeq(__a, __b));
2049
}
2050
2051
static __inline__ vector bool short __ATTRS_o_ai
2052
vec_cmpne(vector signed short __a, vector signed short __b) {
2053
return ~(vec_cmpeq(__a, __b));
2054
}
2055
2056
static __inline__ vector bool short __ATTRS_o_ai
2057
vec_cmpne(vector unsigned short __a, vector unsigned short __b) {
2058
return ~(vec_cmpeq(__a, __b));
2059
}
2060
2061
static __inline__ vector bool int __ATTRS_o_ai
2062
vec_cmpne(vector bool int __a, vector bool int __b) {
2063
return ~(vec_cmpeq(__a, __b));
2064
}
2065
2066
static __inline__ vector bool int __ATTRS_o_ai
2067
vec_cmpne(vector signed int __a, vector signed int __b) {
2068
return ~(vec_cmpeq(__a, __b));
2069
}
2070
2071
static __inline__ vector bool int __ATTRS_o_ai
2072
vec_cmpne(vector unsigned int __a, vector unsigned int __b) {
2073
return ~(vec_cmpeq(__a, __b));
2074
}
2075
2076
static __inline__ vector bool int __ATTRS_o_ai
2077
vec_cmpne(vector float __a, vector float __b) {
2078
return ~(vec_cmpeq(__a, __b));
2079
}
2080
#endif
2081
2082
#ifdef __POWER8_VECTOR__
2083
static __inline__ vector bool long long __ATTRS_o_ai
2084
vec_cmpne(vector bool long long __a, vector bool long long __b) {
2085
return (vector bool long long)
2086
~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
2087
}
2088
2089
static __inline__ vector bool long long __ATTRS_o_ai
2090
vec_cmpne(vector signed long long __a, vector signed long long __b) {
2091
return (vector bool long long)
2092
~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
2093
}
2094
2095
static __inline__ vector bool long long __ATTRS_o_ai
2096
vec_cmpne(vector unsigned long long __a, vector unsigned long long __b) {
2097
return (vector bool long long)
2098
~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
2099
}
2100
#elif defined(__VSX__)
2101
static __inline__ vector bool long long __ATTRS_o_ai
2102
vec_cmpne(vector bool long long __a, vector bool long long __b) {
2103
return (vector bool long long)~(
2104
vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
2105
}
2106
2107
static __inline__ vector bool long long __ATTRS_o_ai
2108
vec_cmpne(vector signed long long __a, vector signed long long __b) {
2109
return (vector bool long long)~(
2110
vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
2111
}
2112
2113
static __inline__ vector bool long long __ATTRS_o_ai
2114
vec_cmpne(vector unsigned long long __a, vector unsigned long long __b) {
2115
return (vector bool long long)~(
2116
vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
2117
}
2118
#endif
2119
2120
#ifdef __VSX__
2121
static __inline__ vector bool long long __ATTRS_o_ai
2122
vec_cmpne(vector double __a, vector double __b) {
2123
return (vector bool long long)
2124
~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
2125
}
2126
#endif
2127
2128
/* vec_cmpgt */
2129
2130
static __inline__ vector bool char __ATTRS_o_ai
2131
vec_cmpgt(vector signed char __a, vector signed char __b) {
2132
return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
2133
}
2134
2135
static __inline__ vector bool char __ATTRS_o_ai
2136
vec_cmpgt(vector unsigned char __a, vector unsigned char __b) {
2137
return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
2138
}
2139
2140
static __inline__ vector bool short __ATTRS_o_ai vec_cmpgt(vector short __a,
2141
vector short __b) {
2142
return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
2143
}
2144
2145
static __inline__ vector bool short __ATTRS_o_ai
2146
vec_cmpgt(vector unsigned short __a, vector unsigned short __b) {
2147
return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
2148
}
2149
2150
static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector int __a,
2151
vector int __b) {
2152
return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
2153
}
2154
2155
static __inline__ vector bool int __ATTRS_o_ai
2156
vec_cmpgt(vector unsigned int __a, vector unsigned int __b) {
2157
return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
2158
}
2159
2160
#ifdef __POWER8_VECTOR__
2161
static __inline__ vector bool long long __ATTRS_o_ai
2162
vec_cmpgt(vector signed long long __a, vector signed long long __b) {
2163
return (vector bool long long)__builtin_altivec_vcmpgtsd(__a, __b);
2164
}
2165
2166
static __inline__ vector bool long long __ATTRS_o_ai
2167
vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {
2168
return (vector bool long long)__builtin_altivec_vcmpgtud(__a, __b);
2169
}
2170
#elif defined(__VSX__)
2171
static __inline__ vector bool long long __ATTRS_o_ai
2172
vec_cmpgt(vector signed long long __a, vector signed long long __b) {
2173
vector signed int __sgtw = (vector signed int)vec_cmpgt(
2174
(vector signed int)__a, (vector signed int)__b);
2175
vector unsigned int __ugtw = (vector unsigned int)vec_cmpgt(
2176
(vector unsigned int)__a, (vector unsigned int)__b);
2177
vector unsigned int __eqw = (vector unsigned int)vec_cmpeq(
2178
(vector signed int)__a, (vector signed int)__b);
2179
#ifdef __LITTLE_ENDIAN__
2180
__ugtw = __builtin_shufflevector(__ugtw, __ugtw, 3, 0, 1, 2) & __eqw;
2181
__sgtw |= (vector signed int)__ugtw;
2182
return (vector bool long long)__builtin_shufflevector(__sgtw, __sgtw, 1, 1, 3,
2183
3);
2184
#else
2185
__ugtw = __builtin_shufflevector(__ugtw, __ugtw, 1, 2, 3, 0) & __eqw;
2186
__sgtw |= (vector signed int)__ugtw;
2187
return (vector bool long long)__builtin_shufflevector(__sgtw, __sgtw, 0, 0, 2,
2188
2);
2189
#endif
2190
}
2191
2192
static __inline__ vector bool long long __ATTRS_o_ai
2193
vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {
2194
vector unsigned int __ugtw = (vector unsigned int)vec_cmpgt(
2195
(vector unsigned int)__a, (vector unsigned int)__b);
2196
vector unsigned int __eqw = (vector unsigned int)vec_cmpeq(
2197
(vector signed int)__a, (vector signed int)__b);
2198
#ifdef __LITTLE_ENDIAN__
2199
__eqw = __builtin_shufflevector(__ugtw, __ugtw, 3, 0, 1, 2) & __eqw;
2200
__ugtw |= __eqw;
2201
return (vector bool long long)__builtin_shufflevector(__ugtw, __ugtw, 1, 1, 3,
2202
3);
2203
#else
2204
__eqw = __builtin_shufflevector(__ugtw, __ugtw, 1, 2, 3, 0) & __eqw;
2205
__ugtw |= __eqw;
2206
return (vector bool long long)__builtin_shufflevector(__ugtw, __ugtw, 0, 0, 2,
2207
2);
2208
#endif
2209
}
2210
#endif
2211
2212
static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector float __a,
2213
vector float __b) {
2214
#ifdef __VSX__
2215
return (vector bool int)__builtin_vsx_xvcmpgtsp(__a, __b);
2216
#else
2217
return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
2218
#endif
2219
}
2220
2221
#ifdef __VSX__
2222
static __inline__ vector bool long long __ATTRS_o_ai
2223
vec_cmpgt(vector double __a, vector double __b) {
2224
return (vector bool long long)__builtin_vsx_xvcmpgtdp(__a, __b);
2225
}
2226
#endif
2227
2228
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
2229
static __inline__ vector bool __int128 __ATTRS_o_ai
2230
vec_cmpgt(vector signed __int128 __a, vector signed __int128 __b) {
2231
return (vector bool __int128)__builtin_altivec_vcmpgtsq(__a, __b);
2232
}
2233
2234
static __inline__ vector bool __int128 __ATTRS_o_ai
2235
vec_cmpgt(vector unsigned __int128 __a, vector unsigned __int128 __b) {
2236
return (vector bool __int128)__builtin_altivec_vcmpgtuq(__a, __b);
2237
}
2238
#endif
2239
2240
/* vec_cmpge */
2241
2242
static __inline__ vector bool char __ATTRS_o_ai
2243
vec_cmpge(vector signed char __a, vector signed char __b) {
2244
return ~(vec_cmpgt(__b, __a));
2245
}
2246
2247
static __inline__ vector bool char __ATTRS_o_ai
2248
vec_cmpge(vector unsigned char __a, vector unsigned char __b) {
2249
return ~(vec_cmpgt(__b, __a));
2250
}
2251
2252
static __inline__ vector bool short __ATTRS_o_ai
2253
vec_cmpge(vector signed short __a, vector signed short __b) {
2254
return ~(vec_cmpgt(__b, __a));
2255
}
2256
2257
static __inline__ vector bool short __ATTRS_o_ai
2258
vec_cmpge(vector unsigned short __a, vector unsigned short __b) {
2259
return ~(vec_cmpgt(__b, __a));
2260
}
2261
2262
static __inline__ vector bool int __ATTRS_o_ai
2263
vec_cmpge(vector signed int __a, vector signed int __b) {
2264
return ~(vec_cmpgt(__b, __a));
2265
}
2266
2267
static __inline__ vector bool int __ATTRS_o_ai
2268
vec_cmpge(vector unsigned int __a, vector unsigned int __b) {
2269
return ~(vec_cmpgt(__b, __a));
2270
}
2271
2272
static __inline__ vector bool int __ATTRS_o_ai vec_cmpge(vector float __a,
2273
vector float __b) {
2274
#ifdef __VSX__
2275
return (vector bool int)__builtin_vsx_xvcmpgesp(__a, __b);
2276
#else
2277
return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
2278
#endif
2279
}
2280
2281
#ifdef __VSX__
2282
static __inline__ vector bool long long __ATTRS_o_ai
2283
vec_cmpge(vector double __a, vector double __b) {
2284
return (vector bool long long)__builtin_vsx_xvcmpgedp(__a, __b);
2285
}
2286
2287
static __inline__ vector bool long long __ATTRS_o_ai
2288
vec_cmpge(vector signed long long __a, vector signed long long __b) {
2289
return ~(vec_cmpgt(__b, __a));
2290
}
2291
2292
static __inline__ vector bool long long __ATTRS_o_ai
2293
vec_cmpge(vector unsigned long long __a, vector unsigned long long __b) {
2294
return ~(vec_cmpgt(__b, __a));
2295
}
2296
#endif
2297
2298
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
2299
static __inline__ vector bool __int128 __ATTRS_o_ai
2300
vec_cmpge(vector signed __int128 __a, vector signed __int128 __b) {
2301
return ~(vec_cmpgt(__b, __a));
2302
}
2303
2304
static __inline__ vector bool __int128 __ATTRS_o_ai
2305
vec_cmpge(vector unsigned __int128 __a, vector unsigned __int128 __b) {
2306
return ~(vec_cmpgt(__b, __a));
2307
}
2308
#endif
2309
2310
/* vec_vcmpgefp */
2311
2312
static __inline__ vector bool int __attribute__((__always_inline__))
2313
vec_vcmpgefp(vector float __a, vector float __b) {
2314
return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
2315
}
2316
2317
/* vec_vcmpgtsb */
2318
2319
static __inline__ vector bool char __attribute__((__always_inline__))
2320
vec_vcmpgtsb(vector signed char __a, vector signed char __b) {
2321
return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
2322
}
2323
2324
/* vec_vcmpgtub */
2325
2326
static __inline__ vector bool char __attribute__((__always_inline__))
2327
vec_vcmpgtub(vector unsigned char __a, vector unsigned char __b) {
2328
return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
2329
}
2330
2331
/* vec_vcmpgtsh */
2332
2333
static __inline__ vector bool short __attribute__((__always_inline__))
2334
vec_vcmpgtsh(vector short __a, vector short __b) {
2335
return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
2336
}
2337
2338
/* vec_vcmpgtuh */
2339
2340
static __inline__ vector bool short __attribute__((__always_inline__))
2341
vec_vcmpgtuh(vector unsigned short __a, vector unsigned short __b) {
2342
return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
2343
}
2344
2345
/* vec_vcmpgtsw */
2346
2347
static __inline__ vector bool int __attribute__((__always_inline__))
2348
vec_vcmpgtsw(vector int __a, vector int __b) {
2349
return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
2350
}
2351
2352
/* vec_vcmpgtuw */
2353
2354
static __inline__ vector bool int __attribute__((__always_inline__))
2355
vec_vcmpgtuw(vector unsigned int __a, vector unsigned int __b) {
2356
return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
2357
}
2358
2359
/* vec_vcmpgtfp */
2360
2361
static __inline__ vector bool int __attribute__((__always_inline__))
2362
vec_vcmpgtfp(vector float __a, vector float __b) {
2363
return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
2364
}
2365
2366
/* vec_cmple */
2367
2368
static __inline__ vector bool char __ATTRS_o_ai
2369
vec_cmple(vector signed char __a, vector signed char __b) {
2370
return vec_cmpge(__b, __a);
2371
}
2372
2373
static __inline__ vector bool char __ATTRS_o_ai
2374
vec_cmple(vector unsigned char __a, vector unsigned char __b) {
2375
return vec_cmpge(__b, __a);
2376
}
2377
2378
static __inline__ vector bool short __ATTRS_o_ai
2379
vec_cmple(vector signed short __a, vector signed short __b) {
2380
return vec_cmpge(__b, __a);
2381
}
2382
2383
static __inline__ vector bool short __ATTRS_o_ai
2384
vec_cmple(vector unsigned short __a, vector unsigned short __b) {
2385
return vec_cmpge(__b, __a);
2386
}
2387
2388
static __inline__ vector bool int __ATTRS_o_ai
2389
vec_cmple(vector signed int __a, vector signed int __b) {
2390
return vec_cmpge(__b, __a);
2391
}
2392
2393
static __inline__ vector bool int __ATTRS_o_ai
2394
vec_cmple(vector unsigned int __a, vector unsigned int __b) {
2395
return vec_cmpge(__b, __a);
2396
}
2397
2398
static __inline__ vector bool int __ATTRS_o_ai vec_cmple(vector float __a,
2399
vector float __b) {
2400
return vec_cmpge(__b, __a);
2401
}
2402
2403
#ifdef __VSX__
2404
static __inline__ vector bool long long __ATTRS_o_ai
2405
vec_cmple(vector double __a, vector double __b) {
2406
return vec_cmpge(__b, __a);
2407
}
2408
2409
static __inline__ vector bool long long __ATTRS_o_ai
2410
vec_cmple(vector signed long long __a, vector signed long long __b) {
2411
return vec_cmpge(__b, __a);
2412
}
2413
2414
static __inline__ vector bool long long __ATTRS_o_ai
2415
vec_cmple(vector unsigned long long __a, vector unsigned long long __b) {
2416
return vec_cmpge(__b, __a);
2417
}
2418
#endif
2419
2420
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
2421
static __inline__ vector bool __int128 __ATTRS_o_ai
2422
vec_cmple(vector signed __int128 __a, vector signed __int128 __b) {
2423
return vec_cmpge(__b, __a);
2424
}
2425
2426
static __inline__ vector bool __int128 __ATTRS_o_ai
2427
vec_cmple(vector unsigned __int128 __a, vector unsigned __int128 __b) {
2428
return vec_cmpge(__b, __a);
2429
}
2430
#endif
2431
2432
/* vec_cmplt */
2433
2434
static __inline__ vector bool char __ATTRS_o_ai
2435
vec_cmplt(vector signed char __a, vector signed char __b) {
2436
return vec_cmpgt(__b, __a);
2437
}
2438
2439
static __inline__ vector bool char __ATTRS_o_ai
2440
vec_cmplt(vector unsigned char __a, vector unsigned char __b) {
2441
return vec_cmpgt(__b, __a);
2442
}
2443
2444
static __inline__ vector bool short __ATTRS_o_ai vec_cmplt(vector short __a,
2445
vector short __b) {
2446
return vec_cmpgt(__b, __a);
2447
}
2448
2449
static __inline__ vector bool short __ATTRS_o_ai
2450
vec_cmplt(vector unsigned short __a, vector unsigned short __b) {
2451
return vec_cmpgt(__b, __a);
2452
}
2453
2454
static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector int __a,
2455
vector int __b) {
2456
return vec_cmpgt(__b, __a);
2457
}
2458
2459
static __inline__ vector bool int __ATTRS_o_ai
2460
vec_cmplt(vector unsigned int __a, vector unsigned int __b) {
2461
return vec_cmpgt(__b, __a);
2462
}
2463
2464
static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector float __a,
2465
vector float __b) {
2466
return vec_cmpgt(__b, __a);
2467
}
2468
2469
#ifdef __VSX__
2470
static __inline__ vector bool long long __ATTRS_o_ai
2471
vec_cmplt(vector double __a, vector double __b) {
2472
return vec_cmpgt(__b, __a);
2473
}
2474
#endif
2475
2476
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
2477
static __inline__ vector bool __int128 __ATTRS_o_ai
2478
vec_cmplt(vector signed __int128 __a, vector signed __int128 __b) {
2479
return vec_cmpgt(__b, __a);
2480
}
2481
2482
static __inline__ vector bool __int128 __ATTRS_o_ai
2483
vec_cmplt(vector unsigned __int128 __a, vector unsigned __int128 __b) {
2484
return vec_cmpgt(__b, __a);
2485
}
2486
#endif
2487
2488
#ifdef __VSX__
2489
static __inline__ vector bool long long __ATTRS_o_ai
2490
vec_cmplt(vector signed long long __a, vector signed long long __b) {
2491
return vec_cmpgt(__b, __a);
2492
}
2493
2494
static __inline__ vector bool long long __ATTRS_o_ai
2495
vec_cmplt(vector unsigned long long __a, vector unsigned long long __b) {
2496
return vec_cmpgt(__b, __a);
2497
}
2498
#endif
2499
2500
#ifdef __POWER8_VECTOR__
2501
/* vec_popcnt */
2502
2503
static __inline__ vector unsigned char __ATTRS_o_ai
2504
vec_popcnt(vector signed char __a) {
2505
return (vector unsigned char)__builtin_altivec_vpopcntb(
2506
(vector unsigned char)__a);
2507
}
2508
static __inline__ vector unsigned char __ATTRS_o_ai
2509
vec_popcnt(vector unsigned char __a) {
2510
return __builtin_altivec_vpopcntb(__a);
2511
}
2512
static __inline__ vector unsigned short __ATTRS_o_ai
2513
vec_popcnt(vector signed short __a) {
2514
return (vector unsigned short)__builtin_altivec_vpopcnth(
2515
(vector unsigned short)__a);
2516
}
2517
static __inline__ vector unsigned short __ATTRS_o_ai
2518
vec_popcnt(vector unsigned short __a) {
2519
return __builtin_altivec_vpopcnth(__a);
2520
}
2521
static __inline__ vector unsigned int __ATTRS_o_ai
2522
vec_popcnt(vector signed int __a) {
2523
return __builtin_altivec_vpopcntw((vector unsigned int)__a);
2524
}
2525
static __inline__ vector unsigned int __ATTRS_o_ai
2526
vec_popcnt(vector unsigned int __a) {
2527
return __builtin_altivec_vpopcntw(__a);
2528
}
2529
static __inline__ vector unsigned long long __ATTRS_o_ai
2530
vec_popcnt(vector signed long long __a) {
2531
return __builtin_altivec_vpopcntd((vector unsigned long long)__a);
2532
}
2533
static __inline__ vector unsigned long long __ATTRS_o_ai
2534
vec_popcnt(vector unsigned long long __a) {
2535
return __builtin_altivec_vpopcntd(__a);
2536
}
2537
2538
#define vec_vclz vec_cntlz
2539
/* vec_cntlz */
2540
2541
static __inline__ vector signed char __ATTRS_o_ai
2542
vec_cntlz(vector signed char __a) {
2543
return (vector signed char)__builtin_altivec_vclzb((vector unsigned char)__a);
2544
}
2545
static __inline__ vector unsigned char __ATTRS_o_ai
2546
vec_cntlz(vector unsigned char __a) {
2547
return __builtin_altivec_vclzb(__a);
2548
}
2549
static __inline__ vector signed short __ATTRS_o_ai
2550
vec_cntlz(vector signed short __a) {
2551
return (vector signed short)__builtin_altivec_vclzh(
2552
(vector unsigned short)__a);
2553
}
2554
static __inline__ vector unsigned short __ATTRS_o_ai
2555
vec_cntlz(vector unsigned short __a) {
2556
return __builtin_altivec_vclzh(__a);
2557
}
2558
static __inline__ vector signed int __ATTRS_o_ai
2559
vec_cntlz(vector signed int __a) {
2560
return (vector signed int)__builtin_altivec_vclzw((vector unsigned int)__a);
2561
}
2562
static __inline__ vector unsigned int __ATTRS_o_ai
2563
vec_cntlz(vector unsigned int __a) {
2564
return __builtin_altivec_vclzw(__a);
2565
}
2566
static __inline__ vector signed long long __ATTRS_o_ai
2567
vec_cntlz(vector signed long long __a) {
2568
return (vector signed long long)__builtin_altivec_vclzd(
2569
(vector unsigned long long)__a);
2570
}
2571
static __inline__ vector unsigned long long __ATTRS_o_ai
2572
vec_cntlz(vector unsigned long long __a) {
2573
return __builtin_altivec_vclzd(__a);
2574
}
2575
#endif
2576
2577
#ifdef __POWER9_VECTOR__
2578
2579
/* vec_cnttz */
2580
2581
static __inline__ vector signed char __ATTRS_o_ai
2582
vec_cnttz(vector signed char __a) {
2583
return (vector signed char)__builtin_altivec_vctzb((vector unsigned char)__a);
2584
}
2585
static __inline__ vector unsigned char __ATTRS_o_ai
2586
vec_cnttz(vector unsigned char __a) {
2587
return __builtin_altivec_vctzb(__a);
2588
}
2589
static __inline__ vector signed short __ATTRS_o_ai
2590
vec_cnttz(vector signed short __a) {
2591
return (vector signed short)__builtin_altivec_vctzh(
2592
(vector unsigned short)__a);
2593
}
2594
static __inline__ vector unsigned short __ATTRS_o_ai
2595
vec_cnttz(vector unsigned short __a) {
2596
return __builtin_altivec_vctzh(__a);
2597
}
2598
static __inline__ vector signed int __ATTRS_o_ai
2599
vec_cnttz(vector signed int __a) {
2600
return (vector signed int)__builtin_altivec_vctzw((vector unsigned int)__a);
2601
}
2602
static __inline__ vector unsigned int __ATTRS_o_ai
2603
vec_cnttz(vector unsigned int __a) {
2604
return __builtin_altivec_vctzw(__a);
2605
}
2606
static __inline__ vector signed long long __ATTRS_o_ai
2607
vec_cnttz(vector signed long long __a) {
2608
return (vector signed long long)__builtin_altivec_vctzd(
2609
(vector unsigned long long)__a);
2610
}
2611
static __inline__ vector unsigned long long __ATTRS_o_ai
2612
vec_cnttz(vector unsigned long long __a) {
2613
return __builtin_altivec_vctzd(__a);
2614
}
2615
2616
/* vec_first_match_index */
2617
2618
static __inline__ unsigned __ATTRS_o_ai
2619
vec_first_match_index(vector signed char __a, vector signed char __b) {
2620
vector unsigned long long __res =
2621
#ifdef __LITTLE_ENDIAN__
2622
vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2623
#else
2624
vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2625
#endif
2626
if (__res[0] == 64) {
2627
return (__res[1] + 64) >> 3;
2628
}
2629
return __res[0] >> 3;
2630
}
2631
2632
static __inline__ unsigned __ATTRS_o_ai
2633
vec_first_match_index(vector unsigned char __a, vector unsigned char __b) {
2634
vector unsigned long long __res =
2635
#ifdef __LITTLE_ENDIAN__
2636
vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2637
#else
2638
vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2639
#endif
2640
if (__res[0] == 64) {
2641
return (__res[1] + 64) >> 3;
2642
}
2643
return __res[0] >> 3;
2644
}
2645
2646
static __inline__ unsigned __ATTRS_o_ai
2647
vec_first_match_index(vector signed short __a, vector signed short __b) {
2648
vector unsigned long long __res =
2649
#ifdef __LITTLE_ENDIAN__
2650
vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2651
#else
2652
vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2653
#endif
2654
if (__res[0] == 64) {
2655
return (__res[1] + 64) >> 4;
2656
}
2657
return __res[0] >> 4;
2658
}
2659
2660
static __inline__ unsigned __ATTRS_o_ai
2661
vec_first_match_index(vector unsigned short __a, vector unsigned short __b) {
2662
vector unsigned long long __res =
2663
#ifdef __LITTLE_ENDIAN__
2664
vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2665
#else
2666
vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2667
#endif
2668
if (__res[0] == 64) {
2669
return (__res[1] + 64) >> 4;
2670
}
2671
return __res[0] >> 4;
2672
}
2673
2674
static __inline__ unsigned __ATTRS_o_ai
2675
vec_first_match_index(vector signed int __a, vector signed int __b) {
2676
vector unsigned long long __res =
2677
#ifdef __LITTLE_ENDIAN__
2678
vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2679
#else
2680
vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2681
#endif
2682
if (__res[0] == 64) {
2683
return (__res[1] + 64) >> 5;
2684
}
2685
return __res[0] >> 5;
2686
}
2687
2688
static __inline__ unsigned __ATTRS_o_ai
2689
vec_first_match_index(vector unsigned int __a, vector unsigned int __b) {
2690
vector unsigned long long __res =
2691
#ifdef __LITTLE_ENDIAN__
2692
vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2693
#else
2694
vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2695
#endif
2696
if (__res[0] == 64) {
2697
return (__res[1] + 64) >> 5;
2698
}
2699
return __res[0] >> 5;
2700
}
2701
2702
/* vec_first_match_or_eos_index */
2703
2704
static __inline__ unsigned __ATTRS_o_ai
2705
vec_first_match_or_eos_index(vector signed char __a, vector signed char __b) {
2706
/* Compare the result of the comparison of two vectors with either and OR the
2707
result. Either the elements are equal or one will equal the comparison
2708
result if either is zero.
2709
*/
2710
vector bool char __tmp1 = vec_cmpeq(__a, __b);
2711
vector bool char __tmp2 = __tmp1 |
2712
vec_cmpeq((vector signed char)__tmp1, __a) |
2713
vec_cmpeq((vector signed char)__tmp1, __b);
2714
2715
vector unsigned long long __res =
2716
#ifdef __LITTLE_ENDIAN__
2717
vec_cnttz((vector unsigned long long)__tmp2);
2718
#else
2719
vec_cntlz((vector unsigned long long)__tmp2);
2720
#endif
2721
if (__res[0] == 64) {
2722
return (__res[1] + 64) >> 3;
2723
}
2724
return __res[0] >> 3;
2725
}
2726
2727
static __inline__ unsigned __ATTRS_o_ai
2728
vec_first_match_or_eos_index(vector unsigned char __a,
2729
vector unsigned char __b) {
2730
vector bool char __tmp1 = vec_cmpeq(__a, __b);
2731
vector bool char __tmp2 = __tmp1 |
2732
vec_cmpeq((vector unsigned char)__tmp1, __a) |
2733
vec_cmpeq((vector unsigned char)__tmp1, __b);
2734
2735
vector unsigned long long __res =
2736
#ifdef __LITTLE_ENDIAN__
2737
vec_cnttz((vector unsigned long long)__tmp2);
2738
#else
2739
vec_cntlz((vector unsigned long long)__tmp2);
2740
#endif
2741
if (__res[0] == 64) {
2742
return (__res[1] + 64) >> 3;
2743
}
2744
return __res[0] >> 3;
2745
}
2746
2747
static __inline__ unsigned __ATTRS_o_ai
2748
vec_first_match_or_eos_index(vector signed short __a, vector signed short __b) {
2749
vector bool short __tmp1 = vec_cmpeq(__a, __b);
2750
vector bool short __tmp2 = __tmp1 |
2751
vec_cmpeq((vector signed short)__tmp1, __a) |
2752
vec_cmpeq((vector signed short)__tmp1, __b);
2753
2754
vector unsigned long long __res =
2755
#ifdef __LITTLE_ENDIAN__
2756
vec_cnttz((vector unsigned long long)__tmp2);
2757
#else
2758
vec_cntlz((vector unsigned long long)__tmp2);
2759
#endif
2760
if (__res[0] == 64) {
2761
return (__res[1] + 64) >> 4;
2762
}
2763
return __res[0] >> 4;
2764
}
2765
2766
static __inline__ unsigned __ATTRS_o_ai
2767
vec_first_match_or_eos_index(vector unsigned short __a,
2768
vector unsigned short __b) {
2769
vector bool short __tmp1 = vec_cmpeq(__a, __b);
2770
vector bool short __tmp2 = __tmp1 |
2771
vec_cmpeq((vector unsigned short)__tmp1, __a) |
2772
vec_cmpeq((vector unsigned short)__tmp1, __b);
2773
2774
vector unsigned long long __res =
2775
#ifdef __LITTLE_ENDIAN__
2776
vec_cnttz((vector unsigned long long)__tmp2);
2777
#else
2778
vec_cntlz((vector unsigned long long)__tmp2);
2779
#endif
2780
if (__res[0] == 64) {
2781
return (__res[1] + 64) >> 4;
2782
}
2783
return __res[0] >> 4;
2784
}
2785
2786
static __inline__ unsigned __ATTRS_o_ai
2787
vec_first_match_or_eos_index(vector signed int __a, vector signed int __b) {
2788
vector bool int __tmp1 = vec_cmpeq(__a, __b);
2789
vector bool int __tmp2 = __tmp1 | vec_cmpeq((vector signed int)__tmp1, __a) |
2790
vec_cmpeq((vector signed int)__tmp1, __b);
2791
2792
vector unsigned long long __res =
2793
#ifdef __LITTLE_ENDIAN__
2794
vec_cnttz((vector unsigned long long)__tmp2);
2795
#else
2796
vec_cntlz((vector unsigned long long)__tmp2);
2797
#endif
2798
if (__res[0] == 64) {
2799
return (__res[1] + 64) >> 5;
2800
}
2801
return __res[0] >> 5;
2802
}
2803
2804
static __inline__ unsigned __ATTRS_o_ai
2805
vec_first_match_or_eos_index(vector unsigned int __a, vector unsigned int __b) {
2806
vector bool int __tmp1 = vec_cmpeq(__a, __b);
2807
vector bool int __tmp2 = __tmp1 |
2808
vec_cmpeq((vector unsigned int)__tmp1, __a) |
2809
vec_cmpeq((vector unsigned int)__tmp1, __b);
2810
2811
vector unsigned long long __res =
2812
#ifdef __LITTLE_ENDIAN__
2813
vec_cnttz((vector unsigned long long)__tmp2);
2814
#else
2815
vec_cntlz((vector unsigned long long)__tmp2);
2816
#endif
2817
if (__res[0] == 64) {
2818
return (__res[1] + 64) >> 5;
2819
}
2820
return __res[0] >> 5;
2821
}
2822
2823
/* vec_first_mismatch_index */
2824
2825
static __inline__ unsigned __ATTRS_o_ai
2826
vec_first_mismatch_index(vector signed char __a, vector signed char __b) {
2827
vector unsigned long long __res =
2828
#ifdef __LITTLE_ENDIAN__
2829
vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2830
#else
2831
vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2832
#endif
2833
if (__res[0] == 64) {
2834
return (__res[1] + 64) >> 3;
2835
}
2836
return __res[0] >> 3;
2837
}
2838
2839
static __inline__ unsigned __ATTRS_o_ai
2840
vec_first_mismatch_index(vector unsigned char __a, vector unsigned char __b) {
2841
vector unsigned long long __res =
2842
#ifdef __LITTLE_ENDIAN__
2843
vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2844
#else
2845
vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2846
#endif
2847
if (__res[0] == 64) {
2848
return (__res[1] + 64) >> 3;
2849
}
2850
return __res[0] >> 3;
2851
}
2852
2853
static __inline__ unsigned __ATTRS_o_ai
2854
vec_first_mismatch_index(vector signed short __a, vector signed short __b) {
2855
vector unsigned long long __res =
2856
#ifdef __LITTLE_ENDIAN__
2857
vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2858
#else
2859
vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2860
#endif
2861
if (__res[0] == 64) {
2862
return (__res[1] + 64) >> 4;
2863
}
2864
return __res[0] >> 4;
2865
}
2866
2867
static __inline__ unsigned __ATTRS_o_ai
2868
vec_first_mismatch_index(vector unsigned short __a, vector unsigned short __b) {
2869
vector unsigned long long __res =
2870
#ifdef __LITTLE_ENDIAN__
2871
vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2872
#else
2873
vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2874
#endif
2875
if (__res[0] == 64) {
2876
return (__res[1] + 64) >> 4;
2877
}
2878
return __res[0] >> 4;
2879
}
2880
2881
static __inline__ unsigned __ATTRS_o_ai
2882
vec_first_mismatch_index(vector signed int __a, vector signed int __b) {
2883
vector unsigned long long __res =
2884
#ifdef __LITTLE_ENDIAN__
2885
vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2886
#else
2887
vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2888
#endif
2889
if (__res[0] == 64) {
2890
return (__res[1] + 64) >> 5;
2891
}
2892
return __res[0] >> 5;
2893
}
2894
2895
static __inline__ unsigned __ATTRS_o_ai
2896
vec_first_mismatch_index(vector unsigned int __a, vector unsigned int __b) {
2897
vector unsigned long long __res =
2898
#ifdef __LITTLE_ENDIAN__
2899
vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2900
#else
2901
vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2902
#endif
2903
if (__res[0] == 64) {
2904
return (__res[1] + 64) >> 5;
2905
}
2906
return __res[0] >> 5;
2907
}
2908
2909
/* vec_first_mismatch_or_eos_index */
2910
2911
static __inline__ unsigned __ATTRS_o_ai
2912
vec_first_mismatch_or_eos_index(vector signed char __a,
2913
vector signed char __b) {
2914
vector unsigned long long __res =
2915
#ifdef __LITTLE_ENDIAN__
2916
vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2917
#else
2918
vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2919
#endif
2920
if (__res[0] == 64) {
2921
return (__res[1] + 64) >> 3;
2922
}
2923
return __res[0] >> 3;
2924
}
2925
2926
static __inline__ unsigned __ATTRS_o_ai
2927
vec_first_mismatch_or_eos_index(vector unsigned char __a,
2928
vector unsigned char __b) {
2929
vector unsigned long long __res =
2930
#ifdef __LITTLE_ENDIAN__
2931
vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2932
#else
2933
vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2934
#endif
2935
if (__res[0] == 64) {
2936
return (__res[1] + 64) >> 3;
2937
}
2938
return __res[0] >> 3;
2939
}
2940
2941
static __inline__ unsigned __ATTRS_o_ai
2942
vec_first_mismatch_or_eos_index(vector signed short __a,
2943
vector signed short __b) {
2944
vector unsigned long long __res =
2945
#ifdef __LITTLE_ENDIAN__
2946
vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2947
#else
2948
vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2949
#endif
2950
if (__res[0] == 64) {
2951
return (__res[1] + 64) >> 4;
2952
}
2953
return __res[0] >> 4;
2954
}
2955
2956
static __inline__ unsigned __ATTRS_o_ai
2957
vec_first_mismatch_or_eos_index(vector unsigned short __a,
2958
vector unsigned short __b) {
2959
vector unsigned long long __res =
2960
#ifdef __LITTLE_ENDIAN__
2961
vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2962
#else
2963
vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2964
#endif
2965
if (__res[0] == 64) {
2966
return (__res[1] + 64) >> 4;
2967
}
2968
return __res[0] >> 4;
2969
}
2970
2971
static __inline__ unsigned __ATTRS_o_ai
2972
vec_first_mismatch_or_eos_index(vector signed int __a, vector signed int __b) {
2973
vector unsigned long long __res =
2974
#ifdef __LITTLE_ENDIAN__
2975
vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2976
#else
2977
vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2978
#endif
2979
if (__res[0] == 64) {
2980
return (__res[1] + 64) >> 5;
2981
}
2982
return __res[0] >> 5;
2983
}
2984
2985
static __inline__ unsigned __ATTRS_o_ai
2986
vec_first_mismatch_or_eos_index(vector unsigned int __a,
2987
vector unsigned int __b) {
2988
vector unsigned long long __res =
2989
#ifdef __LITTLE_ENDIAN__
2990
vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2991
#else
2992
vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2993
#endif
2994
if (__res[0] == 64) {
2995
return (__res[1] + 64) >> 5;
2996
}
2997
return __res[0] >> 5;
2998
}
2999
3000
static __inline__ vector double __ATTRS_o_ai
3001
vec_insert_exp(vector double __a, vector unsigned long long __b) {
3002
return __builtin_vsx_xviexpdp((vector unsigned long long)__a,__b);
3003
}
3004
3005
static __inline__ vector double __ATTRS_o_ai
3006
vec_insert_exp(vector unsigned long long __a, vector unsigned long long __b) {
3007
return __builtin_vsx_xviexpdp(__a,__b);
3008
}
3009
3010
static __inline__ vector float __ATTRS_o_ai
3011
vec_insert_exp(vector float __a, vector unsigned int __b) {
3012
return __builtin_vsx_xviexpsp((vector unsigned int)__a,__b);
3013
}
3014
3015
static __inline__ vector float __ATTRS_o_ai
3016
vec_insert_exp(vector unsigned int __a, vector unsigned int __b) {
3017
return __builtin_vsx_xviexpsp(__a,__b);
3018
}
3019
3020
#if defined(__powerpc64__)
3021
static __inline__ vector signed char __ATTRS_o_ai vec_xl_len(const signed char *__a,
3022
size_t __b) {
3023
return (vector signed char)__builtin_vsx_lxvl(__a, (__b << 56));
3024
}
3025
3026
static __inline__ vector unsigned char __ATTRS_o_ai
3027
vec_xl_len(const unsigned char *__a, size_t __b) {
3028
return (vector unsigned char)__builtin_vsx_lxvl(__a, (__b << 56));
3029
}
3030
3031
static __inline__ vector signed short __ATTRS_o_ai vec_xl_len(const signed short *__a,
3032
size_t __b) {
3033
return (vector signed short)__builtin_vsx_lxvl(__a, (__b << 56));
3034
}
3035
3036
static __inline__ vector unsigned short __ATTRS_o_ai
3037
vec_xl_len(const unsigned short *__a, size_t __b) {
3038
return (vector unsigned short)__builtin_vsx_lxvl(__a, (__b << 56));
3039
}
3040
3041
static __inline__ vector signed int __ATTRS_o_ai vec_xl_len(const signed int *__a,
3042
size_t __b) {
3043
return (vector signed int)__builtin_vsx_lxvl(__a, (__b << 56));
3044
}
3045
3046
static __inline__ vector unsigned int __ATTRS_o_ai vec_xl_len(const unsigned int *__a,
3047
size_t __b) {
3048
return (vector unsigned int)__builtin_vsx_lxvl(__a, (__b << 56));
3049
}
3050
3051
static __inline__ vector float __ATTRS_o_ai vec_xl_len(const float *__a, size_t __b) {
3052
return (vector float)__builtin_vsx_lxvl(__a, (__b << 56));
3053
}
3054
3055
#ifdef __SIZEOF_INT128__
3056
static __inline__ vector signed __int128 __ATTRS_o_ai
3057
vec_xl_len(const signed __int128 *__a, size_t __b) {
3058
return (vector signed __int128)__builtin_vsx_lxvl(__a, (__b << 56));
3059
}
3060
3061
static __inline__ vector unsigned __int128 __ATTRS_o_ai
3062
vec_xl_len(const unsigned __int128 *__a, size_t __b) {
3063
return (vector unsigned __int128)__builtin_vsx_lxvl(__a, (__b << 56));
3064
}
3065
#endif
3066
3067
static __inline__ vector signed long long __ATTRS_o_ai
3068
vec_xl_len(const signed long long *__a, size_t __b) {
3069
return (vector signed long long)__builtin_vsx_lxvl(__a, (__b << 56));
3070
}
3071
3072
static __inline__ vector unsigned long long __ATTRS_o_ai
3073
vec_xl_len(const unsigned long long *__a, size_t __b) {
3074
return (vector unsigned long long)__builtin_vsx_lxvl(__a, (__b << 56));
3075
}
3076
3077
static __inline__ vector double __ATTRS_o_ai vec_xl_len(const double *__a,
3078
size_t __b) {
3079
return (vector double)__builtin_vsx_lxvl(__a, (__b << 56));
3080
}
3081
3082
static __inline__ vector unsigned char __ATTRS_o_ai
3083
vec_xl_len_r(const unsigned char *__a, size_t __b) {
3084
vector unsigned char __res =
3085
(vector unsigned char)__builtin_vsx_lxvll(__a, (__b << 56));
3086
vector unsigned char __mask =
3087
(vector unsigned char)__builtin_altivec_lvsr(16 - __b, (int *)NULL);
3088
return (vector unsigned char)__builtin_altivec_vperm_4si(
3089
(vector int)__res, (vector int)__res, __mask);
3090
}
3091
3092
// vec_xst_len
3093
static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned char __a,
3094
unsigned char *__b,
3095
size_t __c) {
3096
return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3097
}
3098
3099
static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed char __a,
3100
signed char *__b, size_t __c) {
3101
return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3102
}
3103
3104
static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed short __a,
3105
signed short *__b, size_t __c) {
3106
return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3107
}
3108
3109
static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned short __a,
3110
unsigned short *__b,
3111
size_t __c) {
3112
return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3113
}
3114
3115
static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed int __a,
3116
signed int *__b, size_t __c) {
3117
return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3118
}
3119
3120
static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned int __a,
3121
unsigned int *__b, size_t __c) {
3122
return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3123
}
3124
3125
static __inline__ void __ATTRS_o_ai vec_xst_len(vector float __a, float *__b,
3126
size_t __c) {
3127
return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3128
}
3129
3130
#ifdef __SIZEOF_INT128__
3131
static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed __int128 __a,
3132
signed __int128 *__b,
3133
size_t __c) {
3134
return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3135
}
3136
3137
static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned __int128 __a,
3138
unsigned __int128 *__b,
3139
size_t __c) {
3140
return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3141
}
3142
#endif
3143
3144
static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed long long __a,
3145
signed long long *__b,
3146
size_t __c) {
3147
return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3148
}
3149
3150
static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned long long __a,
3151
unsigned long long *__b,
3152
size_t __c) {
3153
return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3154
}
3155
3156
static __inline__ void __ATTRS_o_ai vec_xst_len(vector double __a, double *__b,
3157
size_t __c) {
3158
return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3159
}
3160
3161
static __inline__ void __ATTRS_o_ai vec_xst_len_r(vector unsigned char __a,
3162
unsigned char *__b,
3163
size_t __c) {
3164
vector unsigned char __mask =
3165
(vector unsigned char)__builtin_altivec_lvsl(16 - __c, (int *)NULL);
3166
vector unsigned char __res =
3167
(vector unsigned char)__builtin_altivec_vperm_4si(
3168
(vector int)__a, (vector int)__a, __mask);
3169
return __builtin_vsx_stxvll((vector int)__res, __b, (__c << 56));
3170
}
3171
#endif
3172
#endif
3173
3174
#if defined(__POWER9_VECTOR__) && defined(__powerpc64__)
3175
#define __vec_ldrmb(PTR, CNT) vec_xl_len_r((const unsigned char *)(PTR), (CNT))
3176
#define __vec_strmb(PTR, CNT, VAL) \
3177
vec_xst_len_r((VAL), (unsigned char *)(PTR), (CNT))
3178
#else
3179
#define __vec_ldrmb __builtin_vsx_ldrmb
3180
#define __vec_strmb __builtin_vsx_strmb
3181
#endif
3182
3183
/* vec_cpsgn */
3184
3185
#ifdef __VSX__
3186
static __inline__ vector float __ATTRS_o_ai vec_cpsgn(vector float __a,
3187
vector float __b) {
3188
return __builtin_vsx_xvcpsgnsp(__b, __a);
3189
}
3190
3191
static __inline__ vector double __ATTRS_o_ai vec_cpsgn(vector double __a,
3192
vector double __b) {
3193
return __builtin_vsx_xvcpsgndp(__b, __a);
3194
}
3195
#endif
3196
3197
/* vec_ctf */
3198
3199
#ifdef __VSX__
3200
// There are some functions that have different signatures with the XL compiler
3201
// from those in Clang/GCC and documented in the PVIPR. This macro ensures that
3202
// the XL-compatible signatures are used for those functions.
3203
#ifdef __XL_COMPAT_ALTIVEC__
3204
#define vec_ctf(__a, __b) \
3205
_Generic((__a), \
3206
vector int: (vector float)__builtin_altivec_vcfsx((vector int)(__a), \
3207
((__b)&0x1F)), \
3208
vector unsigned int: (vector float)__builtin_altivec_vcfux( \
3209
(vector unsigned int)(__a), ((__b)&0x1F)), \
3210
vector unsigned long long: ( \
3211
vector float)(__builtin_vsx_xvcvuxdsp( \
3212
(vector unsigned long long)(__a)) * \
3213
(vector float)(vector unsigned)((0x7f - \
3214
((__b)&0x1F)) \
3215
<< 23)), \
3216
vector signed long long: ( \
3217
vector float)(__builtin_vsx_xvcvsxdsp( \
3218
(vector signed long long)(__a)) * \
3219
(vector float)(vector unsigned)((0x7f - \
3220
((__b)&0x1F)) \
3221
<< 23)))
3222
#else // __XL_COMPAT_ALTIVEC__
3223
#define vec_ctf(__a, __b) \
3224
_Generic( \
3225
(__a), \
3226
vector int: (vector float)__builtin_altivec_vcfsx((vector int)(__a), \
3227
((__b)&0x1F)), \
3228
vector unsigned int: (vector float)__builtin_altivec_vcfux( \
3229
(vector unsigned int)(__a), ((__b)&0x1F)), \
3230
vector unsigned long long: ( \
3231
vector float)(__builtin_convertvector( \
3232
(vector unsigned long long)(__a), vector double) * \
3233
(vector double)(vector unsigned long long)((0x3ffULL - \
3234
((__b)&0x1F)) \
3235
<< 52)), \
3236
vector signed long long: ( \
3237
vector float)(__builtin_convertvector( \
3238
(vector signed long long)(__a), vector double) * \
3239
(vector double)(vector unsigned long long)((0x3ffULL - \
3240
((__b)&0x1F)) \
3241
<< 52)))
3242
#endif // __XL_COMPAT_ALTIVEC__
3243
#else
3244
#define vec_ctf(__a, __b) \
3245
_Generic((__a), \
3246
vector int: (vector float)__builtin_altivec_vcfsx((vector int)(__a), \
3247
((__b)&0x1F)), \
3248
vector unsigned int: (vector float)__builtin_altivec_vcfux( \
3249
(vector unsigned int)(__a), ((__b)&0x1F)))
3250
#endif
3251
3252
/* vec_ctd */
3253
#ifdef __VSX__
3254
#define vec_ctd(__a, __b) \
3255
_Generic((__a), \
3256
vector signed int: ( \
3257
vec_doublee((vector signed int)(__a)) * \
3258
(vector double)(vector unsigned long long)((0x3ffULL - \
3259
((__b)&0x1F)) \
3260
<< 52)), \
3261
vector unsigned int: ( \
3262
vec_doublee((vector unsigned int)(__a)) * \
3263
(vector double)(vector unsigned long long)((0x3ffULL - \
3264
((__b)&0x1F)) \
3265
<< 52)), \
3266
vector unsigned long long: ( \
3267
__builtin_convertvector((vector unsigned long long)(__a), \
3268
vector double) * \
3269
(vector double)(vector unsigned long long)((0x3ffULL - \
3270
((__b)&0x1F)) \
3271
<< 52)), \
3272
vector signed long long: ( \
3273
__builtin_convertvector((vector signed long long)(__a), \
3274
vector double) * \
3275
(vector double)(vector unsigned long long)((0x3ffULL - \
3276
((__b)&0x1F)) \
3277
<< 52)))
3278
#endif // __VSX__
3279
3280
/* vec_vcfsx */
3281
3282
#define vec_vcfux __builtin_altivec_vcfux
3283
/* vec_vcfux */
3284
3285
#define vec_vcfsx(__a, __b) __builtin_altivec_vcfsx((vector int)(__a), (__b))
3286
3287
/* vec_cts */
3288
3289
#ifdef __VSX__
3290
#ifdef __XL_COMPAT_ALTIVEC__
3291
#define vec_cts(__a, __b) \
3292
_Generic((__a), \
3293
vector float: (vector signed int)__builtin_altivec_vctsxs( \
3294
(vector float)(__a), ((__b)&0x1F)), \
3295
vector double: __extension__({ \
3296
vector double __ret = \
3297
(vector double)(__a) * \
3298
(vector double)(vector unsigned long long)((0x3ffULL + \
3299
((__b)&0x1F)) \
3300
<< 52); \
3301
(vector signed long long)__builtin_vsx_xvcvdpsxws(__ret); \
3302
}))
3303
#else // __XL_COMPAT_ALTIVEC__
3304
#define vec_cts(__a, __b) \
3305
_Generic((__a), \
3306
vector float: (vector signed int)__builtin_altivec_vctsxs( \
3307
(vector float)(__a), ((__b)&0x1F)), \
3308
vector double: __extension__({ \
3309
vector double __ret = \
3310
(vector double)(__a) * \
3311
(vector double)(vector unsigned long long)((0x3ffULL + \
3312
((__b)&0x1F)) \
3313
<< 52); \
3314
(vector signed long long)__builtin_convertvector( \
3315
__ret, vector signed long long); \
3316
}))
3317
#endif // __XL_COMPAT_ALTIVEC__
3318
#else
3319
#define vec_cts __builtin_altivec_vctsxs
3320
#endif
3321
3322
/* vec_vctsxs */
3323
3324
#define vec_vctsxs __builtin_altivec_vctsxs
3325
3326
/* vec_ctu */
3327
3328
#ifdef __VSX__
3329
#ifdef __XL_COMPAT_ALTIVEC__
3330
#define vec_ctu(__a, __b) \
3331
_Generic((__a), \
3332
vector float: (vector unsigned int)__builtin_altivec_vctuxs( \
3333
(vector float)(__a), ((__b)&0x1F)), \
3334
vector double: __extension__({ \
3335
vector double __ret = \
3336
(vector double)(__a) * \
3337
(vector double)(vector unsigned long long)((0x3ffULL + \
3338
((__b)&0x1F)) \
3339
<< 52); \
3340
(vector unsigned long long)__builtin_vsx_xvcvdpuxws(__ret); \
3341
}))
3342
#else // __XL_COMPAT_ALTIVEC__
3343
#define vec_ctu(__a, __b) \
3344
_Generic((__a), \
3345
vector float: (vector unsigned int)__builtin_altivec_vctuxs( \
3346
(vector float)(__a), ((__b)&0x1F)), \
3347
vector double: __extension__({ \
3348
vector double __ret = \
3349
(vector double)(__a) * \
3350
(vector double)(vector unsigned long long)((0x3ffULL + \
3351
((__b)&0x1F)) \
3352
<< 52); \
3353
(vector unsigned long long)__builtin_convertvector( \
3354
__ret, vector unsigned long long); \
3355
}))
3356
#endif // __XL_COMPAT_ALTIVEC__
3357
#else
3358
#define vec_ctu __builtin_altivec_vctuxs
3359
#endif
3360
3361
#ifdef __LITTLE_ENDIAN__
3362
/* vec_ctsl */
3363
3364
#ifdef __VSX__
3365
#define vec_ctsl(__a, __b) \
3366
_Generic( \
3367
(__a), vector float \
3368
: __extension__({ \
3369
vector float __ret = \
3370
(vector float)(__a) * \
3371
(vector float)(vector unsigned)((0x7f + ((__b)&0x1F)) << 23); \
3372
__builtin_vsx_xvcvspsxds(__builtin_vsx_xxsldwi(__ret, __ret, 1)); \
3373
}), \
3374
vector double \
3375
: __extension__({ \
3376
vector double __ret = \
3377
(vector double)(__a) * \
3378
(vector double)(vector unsigned long long)((0x3ffULL + \
3379
((__b)&0x1F)) \
3380
<< 52); \
3381
__builtin_convertvector(__ret, vector signed long long); \
3382
}))
3383
3384
/* vec_ctul */
3385
3386
#define vec_ctul(__a, __b) \
3387
_Generic( \
3388
(__a), vector float \
3389
: __extension__({ \
3390
vector float __ret = \
3391
(vector float)(__a) * \
3392
(vector float)(vector unsigned)((0x7f + ((__b)&0x1F)) << 23); \
3393
__builtin_vsx_xvcvspuxds(__builtin_vsx_xxsldwi(__ret, __ret, 1)); \
3394
}), \
3395
vector double \
3396
: __extension__({ \
3397
vector double __ret = \
3398
(vector double)(__a) * \
3399
(vector double)(vector unsigned long long)((0x3ffULL + \
3400
((__b)&0x1F)) \
3401
<< 52); \
3402
__builtin_convertvector(__ret, vector unsigned long long); \
3403
}))
3404
#endif
3405
#else // __LITTLE_ENDIAN__
3406
/* vec_ctsl */
3407
3408
#ifdef __VSX__
3409
#define vec_ctsl(__a, __b) \
3410
_Generic((__a), \
3411
vector float: __extension__({ \
3412
vector float __ret = \
3413
(vector float)(__a) * \
3414
(vector float)(vector unsigned)((0x7f + ((__b)&0x1F)) << 23); \
3415
__builtin_vsx_xvcvspsxds(__ret); \
3416
}), \
3417
vector double: __extension__({ \
3418
vector double __ret = \
3419
(vector double)(__a) * \
3420
(vector double)(vector unsigned long long)((0x3ffULL + \
3421
((__b)&0x1F)) \
3422
<< 52); \
3423
__builtin_convertvector(__ret, vector signed long long); \
3424
}))
3425
3426
/* vec_ctul */
3427
3428
#define vec_ctul(__a, __b) \
3429
_Generic((__a), vector float \
3430
: __extension__({ \
3431
vector float __ret = \
3432
(vector float)(__a) * \
3433
(vector float)(vector unsigned)((0x7f + ((__b)&0x1F)) \
3434
<< 23); \
3435
__builtin_vsx_xvcvspuxds(__ret); \
3436
}), \
3437
vector double \
3438
: __extension__({ \
3439
vector double __ret = \
3440
(vector double)(__a) * \
3441
(vector double)(vector unsigned long long)((0x3ffULL + \
3442
((__b)&0x1F)) \
3443
<< 52); \
3444
__builtin_convertvector(__ret, vector unsigned long long); \
3445
}))
3446
#endif
3447
#endif // __LITTLE_ENDIAN__
3448
3449
/* vec_vctuxs */
3450
3451
#define vec_vctuxs __builtin_altivec_vctuxs
3452
3453
/* vec_signext */
3454
3455
#ifdef __POWER9_VECTOR__
3456
static __inline__ vector signed int __ATTRS_o_ai
3457
vec_signexti(vector signed char __a) {
3458
return __builtin_altivec_vextsb2w(__a);
3459
}
3460
3461
static __inline__ vector signed int __ATTRS_o_ai
3462
vec_signexti(vector signed short __a) {
3463
return __builtin_altivec_vextsh2w(__a);
3464
}
3465
3466
static __inline__ vector signed long long __ATTRS_o_ai
3467
vec_signextll(vector signed char __a) {
3468
return __builtin_altivec_vextsb2d(__a);
3469
}
3470
3471
static __inline__ vector signed long long __ATTRS_o_ai
3472
vec_signextll(vector signed short __a) {
3473
return __builtin_altivec_vextsh2d(__a);
3474
}
3475
3476
static __inline__ vector signed long long __ATTRS_o_ai
3477
vec_signextll(vector signed int __a) {
3478
return __builtin_altivec_vextsw2d(__a);
3479
}
3480
#endif
3481
3482
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
3483
static __inline__ vector signed __int128 __ATTRS_o_ai
3484
vec_signextq(vector signed long long __a) {
3485
return __builtin_altivec_vextsd2q(__a);
3486
}
3487
#endif
3488
3489
/* vec_signed */
3490
3491
static __inline__ vector signed int __ATTRS_o_ai
3492
vec_sld(vector signed int, vector signed int, unsigned const int __c);
3493
3494
static __inline__ vector signed int __ATTRS_o_ai
3495
vec_signed(vector float __a) {
3496
return __builtin_convertvector(__a, vector signed int);
3497
}
3498
3499
#ifdef __VSX__
3500
static __inline__ vector signed long long __ATTRS_o_ai
3501
vec_signed(vector double __a) {
3502
return __builtin_convertvector(__a, vector signed long long);
3503
}
3504
3505
static __inline__ vector signed int __attribute__((__always_inline__))
3506
vec_signed2(vector double __a, vector double __b) {
3507
return (vector signed int) { __a[0], __a[1], __b[0], __b[1] };
3508
}
3509
3510
static __inline__ vector signed int __ATTRS_o_ai
3511
vec_signede(vector double __a) {
3512
#ifdef __LITTLE_ENDIAN__
3513
vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);
3514
return vec_sld(__ret, __ret, 12);
3515
#else
3516
return __builtin_vsx_xvcvdpsxws(__a);
3517
#endif
3518
}
3519
3520
static __inline__ vector signed int __ATTRS_o_ai
3521
vec_signedo(vector double __a) {
3522
#ifdef __LITTLE_ENDIAN__
3523
return __builtin_vsx_xvcvdpsxws(__a);
3524
#else
3525
vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);
3526
return vec_sld(__ret, __ret, 12);
3527
#endif
3528
}
3529
#endif
3530
3531
/* vec_unsigned */
3532
3533
static __inline__ vector unsigned int __ATTRS_o_ai
3534
vec_sld(vector unsigned int, vector unsigned int, unsigned const int __c);
3535
3536
static __inline__ vector unsigned int __ATTRS_o_ai
3537
vec_unsigned(vector float __a) {
3538
return __builtin_convertvector(__a, vector unsigned int);
3539
}
3540
3541
#ifdef __VSX__
3542
static __inline__ vector unsigned long long __ATTRS_o_ai
3543
vec_unsigned(vector double __a) {
3544
return __builtin_convertvector(__a, vector unsigned long long);
3545
}
3546
3547
static __inline__ vector unsigned int __attribute__((__always_inline__))
3548
vec_unsigned2(vector double __a, vector double __b) {
3549
return (vector unsigned int) { __a[0], __a[1], __b[0], __b[1] };
3550
}
3551
3552
static __inline__ vector unsigned int __ATTRS_o_ai
3553
vec_unsignede(vector double __a) {
3554
#ifdef __LITTLE_ENDIAN__
3555
vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);
3556
return vec_sld(__ret, __ret, 12);
3557
#else
3558
return __builtin_vsx_xvcvdpuxws(__a);
3559
#endif
3560
}
3561
3562
static __inline__ vector unsigned int __ATTRS_o_ai
3563
vec_unsignedo(vector double __a) {
3564
#ifdef __LITTLE_ENDIAN__
3565
return __builtin_vsx_xvcvdpuxws(__a);
3566
#else
3567
vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);
3568
return vec_sld(__ret, __ret, 12);
3569
#endif
3570
}
3571
#endif
3572
3573
/* vec_float */
3574
3575
static __inline__ vector float __ATTRS_o_ai
3576
vec_sld(vector float, vector float, unsigned const int __c);
3577
3578
static __inline__ vector float __ATTRS_o_ai
3579
vec_float(vector signed int __a) {
3580
return __builtin_convertvector(__a, vector float);
3581
}
3582
3583
static __inline__ vector float __ATTRS_o_ai
3584
vec_float(vector unsigned int __a) {
3585
return __builtin_convertvector(__a, vector float);
3586
}
3587
3588
#ifdef __VSX__
3589
static __inline__ vector float __ATTRS_o_ai
3590
vec_float2(vector signed long long __a, vector signed long long __b) {
3591
return (vector float) { __a[0], __a[1], __b[0], __b[1] };
3592
}
3593
3594
static __inline__ vector float __ATTRS_o_ai
3595
vec_float2(vector unsigned long long __a, vector unsigned long long __b) {
3596
return (vector float) { __a[0], __a[1], __b[0], __b[1] };
3597
}
3598
3599
static __inline__ vector float __ATTRS_o_ai
3600
vec_float2(vector double __a, vector double __b) {
3601
return (vector float) { __a[0], __a[1], __b[0], __b[1] };
3602
}
3603
3604
static __inline__ vector float __ATTRS_o_ai
3605
vec_floate(vector signed long long __a) {
3606
#ifdef __LITTLE_ENDIAN__
3607
vector float __ret = __builtin_vsx_xvcvsxdsp(__a);
3608
return vec_sld(__ret, __ret, 12);
3609
#else
3610
return __builtin_vsx_xvcvsxdsp(__a);
3611
#endif
3612
}
3613
3614
static __inline__ vector float __ATTRS_o_ai
3615
vec_floate(vector unsigned long long __a) {
3616
#ifdef __LITTLE_ENDIAN__
3617
vector float __ret = __builtin_vsx_xvcvuxdsp(__a);
3618
return vec_sld(__ret, __ret, 12);
3619
#else
3620
return __builtin_vsx_xvcvuxdsp(__a);
3621
#endif
3622
}
3623
3624
static __inline__ vector float __ATTRS_o_ai
3625
vec_floate(vector double __a) {
3626
#ifdef __LITTLE_ENDIAN__
3627
vector float __ret = __builtin_vsx_xvcvdpsp(__a);
3628
return vec_sld(__ret, __ret, 12);
3629
#else
3630
return __builtin_vsx_xvcvdpsp(__a);
3631
#endif
3632
}
3633
3634
static __inline__ vector float __ATTRS_o_ai
3635
vec_floato(vector signed long long __a) {
3636
#ifdef __LITTLE_ENDIAN__
3637
return __builtin_vsx_xvcvsxdsp(__a);
3638
#else
3639
vector float __ret = __builtin_vsx_xvcvsxdsp(__a);
3640
return vec_sld(__ret, __ret, 12);
3641
#endif
3642
}
3643
3644
static __inline__ vector float __ATTRS_o_ai
3645
vec_floato(vector unsigned long long __a) {
3646
#ifdef __LITTLE_ENDIAN__
3647
return __builtin_vsx_xvcvuxdsp(__a);
3648
#else
3649
vector float __ret = __builtin_vsx_xvcvuxdsp(__a);
3650
return vec_sld(__ret, __ret, 12);
3651
#endif
3652
}
3653
3654
static __inline__ vector float __ATTRS_o_ai
3655
vec_floato(vector double __a) {
3656
#ifdef __LITTLE_ENDIAN__
3657
return __builtin_vsx_xvcvdpsp(__a);
3658
#else
3659
vector float __ret = __builtin_vsx_xvcvdpsp(__a);
3660
return vec_sld(__ret, __ret, 12);
3661
#endif
3662
}
3663
#endif
3664
3665
/* vec_double */
3666
3667
#ifdef __VSX__
3668
static __inline__ vector double __ATTRS_o_ai
3669
vec_double(vector signed long long __a) {
3670
return __builtin_convertvector(__a, vector double);
3671
}
3672
3673
static __inline__ vector double __ATTRS_o_ai
3674
vec_double(vector unsigned long long __a) {
3675
return __builtin_convertvector(__a, vector double);
3676
}
3677
3678
static __inline__ vector double __ATTRS_o_ai
3679
vec_doublee(vector signed int __a) {
3680
#ifdef __LITTLE_ENDIAN__
3681
return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));
3682
#else
3683
return __builtin_vsx_xvcvsxwdp(__a);
3684
#endif
3685
}
3686
3687
static __inline__ vector double __ATTRS_o_ai
3688
vec_doublee(vector unsigned int __a) {
3689
#ifdef __LITTLE_ENDIAN__
3690
return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));
3691
#else
3692
return __builtin_vsx_xvcvuxwdp(__a);
3693
#endif
3694
}
3695
3696
static __inline__ vector double __ATTRS_o_ai
3697
vec_doublee(vector float __a) {
3698
#ifdef __LITTLE_ENDIAN__
3699
return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));
3700
#else
3701
return __builtin_vsx_xvcvspdp(__a);
3702
#endif
3703
}
3704
3705
static __inline__ vector double __ATTRS_o_ai
3706
vec_doubleh(vector signed int __a) {
3707
vector double __ret = {__a[0], __a[1]};
3708
return __ret;
3709
}
3710
3711
static __inline__ vector double __ATTRS_o_ai
3712
vec_doubleh(vector unsigned int __a) {
3713
vector double __ret = {__a[0], __a[1]};
3714
return __ret;
3715
}
3716
3717
static __inline__ vector double __ATTRS_o_ai
3718
vec_doubleh(vector float __a) {
3719
vector double __ret = {__a[0], __a[1]};
3720
return __ret;
3721
}
3722
3723
static __inline__ vector double __ATTRS_o_ai
3724
vec_doublel(vector signed int __a) {
3725
vector double __ret = {__a[2], __a[3]};
3726
return __ret;
3727
}
3728
3729
static __inline__ vector double __ATTRS_o_ai
3730
vec_doublel(vector unsigned int __a) {
3731
vector double __ret = {__a[2], __a[3]};
3732
return __ret;
3733
}
3734
3735
static __inline__ vector double __ATTRS_o_ai
3736
vec_doublel(vector float __a) {
3737
vector double __ret = {__a[2], __a[3]};
3738
return __ret;
3739
}
3740
3741
static __inline__ vector double __ATTRS_o_ai
3742
vec_doubleo(vector signed int __a) {
3743
#ifdef __LITTLE_ENDIAN__
3744
return __builtin_vsx_xvcvsxwdp(__a);
3745
#else
3746
return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));
3747
#endif
3748
}
3749
3750
static __inline__ vector double __ATTRS_o_ai
3751
vec_doubleo(vector unsigned int __a) {
3752
#ifdef __LITTLE_ENDIAN__
3753
return __builtin_vsx_xvcvuxwdp(__a);
3754
#else
3755
return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));
3756
#endif
3757
}
3758
3759
static __inline__ vector double __ATTRS_o_ai
3760
vec_doubleo(vector float __a) {
3761
#ifdef __LITTLE_ENDIAN__
3762
return __builtin_vsx_xvcvspdp(__a);
3763
#else
3764
return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));
3765
#endif
3766
}
3767
3768
/* vec_cvf */
3769
static __inline__ vector double __ATTRS_o_ai vec_cvf(vector float __a) {
3770
return vec_doublee(__a);
3771
}
3772
3773
static __inline__ vector float __ATTRS_o_ai vec_cvf(vector double __a) {
3774
return vec_floate(__a);
3775
}
3776
#endif
3777
3778
/* vec_div */
3779
3780
/* Integer vector divides (vectors are scalarized, elements divided
3781
and the vectors reassembled).
3782
*/
3783
static __inline__ vector signed char __ATTRS_o_ai
3784
vec_div(vector signed char __a, vector signed char __b) {
3785
return __a / __b;
3786
}
3787
3788
static __inline__ vector unsigned char __ATTRS_o_ai
3789
vec_div(vector unsigned char __a, vector unsigned char __b) {
3790
return __a / __b;
3791
}
3792
3793
static __inline__ vector signed short __ATTRS_o_ai
3794
vec_div(vector signed short __a, vector signed short __b) {
3795
return __a / __b;
3796
}
3797
3798
static __inline__ vector unsigned short __ATTRS_o_ai
3799
vec_div(vector unsigned short __a, vector unsigned short __b) {
3800
return __a / __b;
3801
}
3802
3803
static __inline__ vector signed int __ATTRS_o_ai
3804
vec_div(vector signed int __a, vector signed int __b) {
3805
return __a / __b;
3806
}
3807
3808
static __inline__ vector unsigned int __ATTRS_o_ai
3809
vec_div(vector unsigned int __a, vector unsigned int __b) {
3810
return __a / __b;
3811
}
3812
3813
#ifdef __VSX__
3814
static __inline__ vector signed long long __ATTRS_o_ai
3815
vec_div(vector signed long long __a, vector signed long long __b) {
3816
return __a / __b;
3817
}
3818
3819
static __inline__ vector unsigned long long __ATTRS_o_ai
3820
vec_div(vector unsigned long long __a, vector unsigned long long __b) {
3821
return __a / __b;
3822
}
3823
3824
static __inline__ vector float __ATTRS_o_ai vec_div(vector float __a,
3825
vector float __b) {
3826
return __a / __b;
3827
}
3828
3829
static __inline__ vector double __ATTRS_o_ai vec_div(vector double __a,
3830
vector double __b) {
3831
return __a / __b;
3832
}
3833
#endif
3834
3835
/* vec_dive */
3836
3837
#ifdef __POWER10_VECTOR__
3838
static __inline__ vector signed int __ATTRS_o_ai
3839
vec_dive(vector signed int __a, vector signed int __b) {
3840
return __builtin_altivec_vdivesw(__a, __b);
3841
}
3842
3843
static __inline__ vector unsigned int __ATTRS_o_ai
3844
vec_dive(vector unsigned int __a, vector unsigned int __b) {
3845
return __builtin_altivec_vdiveuw(__a, __b);
3846
}
3847
3848
static __inline__ vector signed long long __ATTRS_o_ai
3849
vec_dive(vector signed long long __a, vector signed long long __b) {
3850
return __builtin_altivec_vdivesd(__a, __b);
3851
}
3852
3853
static __inline__ vector unsigned long long __ATTRS_o_ai
3854
vec_dive(vector unsigned long long __a, vector unsigned long long __b) {
3855
return __builtin_altivec_vdiveud(__a, __b);
3856
}
3857
3858
#ifdef __SIZEOF_INT128__
3859
static __inline__ vector unsigned __int128 __ATTRS_o_ai
3860
vec_dive(vector unsigned __int128 __a, vector unsigned __int128 __b) {
3861
return __builtin_altivec_vdiveuq(__a, __b);
3862
}
3863
3864
static __inline__ vector signed __int128 __ATTRS_o_ai
3865
vec_dive(vector signed __int128 __a, vector signed __int128 __b) {
3866
return __builtin_altivec_vdivesq(__a, __b);
3867
}
3868
#endif
3869
#endif
3870
3871
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
3872
static __inline__ vector unsigned __int128 __ATTRS_o_ai
3873
vec_div(vector unsigned __int128 __a, vector unsigned __int128 __b) {
3874
return __a / __b;
3875
}
3876
3877
static __inline__ vector signed __int128 __ATTRS_o_ai
3878
vec_div(vector signed __int128 __a, vector signed __int128 __b) {
3879
return __a / __b;
3880
}
3881
#endif /* __POWER10_VECTOR__ */
3882
3883
/* vec_xvtdiv */
3884
3885
#ifdef __VSX__
3886
static __inline__ int __ATTRS_o_ai vec_test_swdiv(vector double __a,
3887
vector double __b) {
3888
return __builtin_vsx_xvtdivdp(__a, __b);
3889
}
3890
3891
static __inline__ int __ATTRS_o_ai vec_test_swdivs(vector float __a,
3892
vector float __b) {
3893
return __builtin_vsx_xvtdivsp(__a, __b);
3894
}
3895
#endif
3896
3897
/* vec_dss */
3898
3899
#define vec_dss __builtin_altivec_dss
3900
3901
/* vec_dssall */
3902
3903
static __inline__ void __attribute__((__always_inline__)) vec_dssall(void) {
3904
__builtin_altivec_dssall();
3905
}
3906
3907
/* vec_dst */
3908
#define vec_dst(__PTR, __CW, __STR) \
3909
__builtin_altivec_dst((const void *)(__PTR), (__CW), (__STR))
3910
3911
/* vec_dstst */
3912
#define vec_dstst(__PTR, __CW, __STR) \
3913
__builtin_altivec_dstst((const void *)(__PTR), (__CW), (__STR))
3914
3915
/* vec_dststt */
3916
#define vec_dststt(__PTR, __CW, __STR) \
3917
__builtin_altivec_dststt((const void *)(__PTR), (__CW), (__STR))
3918
3919
/* vec_dstt */
3920
#define vec_dstt(__PTR, __CW, __STR) \
3921
__builtin_altivec_dstt((const void *)(__PTR), (__CW), (__STR))
3922
3923
/* vec_eqv */
3924
3925
#ifdef __POWER8_VECTOR__
3926
static __inline__ vector signed char __ATTRS_o_ai
3927
vec_eqv(vector signed char __a, vector signed char __b) {
3928
return (vector signed char)__builtin_vsx_xxleqv((vector unsigned int)__a,
3929
(vector unsigned int)__b);
3930
}
3931
3932
static __inline__ vector unsigned char __ATTRS_o_ai
3933
vec_eqv(vector unsigned char __a, vector unsigned char __b) {
3934
return (vector unsigned char)__builtin_vsx_xxleqv((vector unsigned int)__a,
3935
(vector unsigned int)__b);
3936
}
3937
3938
static __inline__ vector bool char __ATTRS_o_ai vec_eqv(vector bool char __a,
3939
vector bool char __b) {
3940
return (vector bool char)__builtin_vsx_xxleqv((vector unsigned int)__a,
3941
(vector unsigned int)__b);
3942
}
3943
3944
static __inline__ vector signed short __ATTRS_o_ai
3945
vec_eqv(vector signed short __a, vector signed short __b) {
3946
return (vector signed short)__builtin_vsx_xxleqv((vector unsigned int)__a,
3947
(vector unsigned int)__b);
3948
}
3949
3950
static __inline__ vector unsigned short __ATTRS_o_ai
3951
vec_eqv(vector unsigned short __a, vector unsigned short __b) {
3952
return (vector unsigned short)__builtin_vsx_xxleqv((vector unsigned int)__a,
3953
(vector unsigned int)__b);
3954
}
3955
3956
static __inline__ vector bool short __ATTRS_o_ai
3957
vec_eqv(vector bool short __a, vector bool short __b) {
3958
return (vector bool short)__builtin_vsx_xxleqv((vector unsigned int)__a,
3959
(vector unsigned int)__b);
3960
}
3961
3962
static __inline__ vector signed int __ATTRS_o_ai
3963
vec_eqv(vector signed int __a, vector signed int __b) {
3964
return (vector signed int)__builtin_vsx_xxleqv((vector unsigned int)__a,
3965
(vector unsigned int)__b);
3966
}
3967
3968
static __inline__ vector unsigned int __ATTRS_o_ai
3969
vec_eqv(vector unsigned int __a, vector unsigned int __b) {
3970
return __builtin_vsx_xxleqv(__a, __b);
3971
}
3972
3973
static __inline__ vector bool int __ATTRS_o_ai vec_eqv(vector bool int __a,
3974
vector bool int __b) {
3975
return (vector bool int)__builtin_vsx_xxleqv((vector unsigned int)__a,
3976
(vector unsigned int)__b);
3977
}
3978
3979
static __inline__ vector signed long long __ATTRS_o_ai
3980
vec_eqv(vector signed long long __a, vector signed long long __b) {
3981
return (vector signed long long)__builtin_vsx_xxleqv(
3982
(vector unsigned int)__a, (vector unsigned int)__b);
3983
}
3984
3985
static __inline__ vector unsigned long long __ATTRS_o_ai
3986
vec_eqv(vector unsigned long long __a, vector unsigned long long __b) {
3987
return (vector unsigned long long)__builtin_vsx_xxleqv(
3988
(vector unsigned int)__a, (vector unsigned int)__b);
3989
}
3990
3991
static __inline__ vector bool long long __ATTRS_o_ai
3992
vec_eqv(vector bool long long __a, vector bool long long __b) {
3993
return (vector bool long long)__builtin_vsx_xxleqv((vector unsigned int)__a,
3994
(vector unsigned int)__b);
3995
}
3996
3997
static __inline__ vector float __ATTRS_o_ai vec_eqv(vector float __a,
3998
vector float __b) {
3999
return (vector float)__builtin_vsx_xxleqv((vector unsigned int)__a,
4000
(vector unsigned int)__b);
4001
}
4002
4003
static __inline__ vector double __ATTRS_o_ai vec_eqv(vector double __a,
4004
vector double __b) {
4005
return (vector double)__builtin_vsx_xxleqv((vector unsigned int)__a,
4006
(vector unsigned int)__b);
4007
}
4008
#endif
4009
4010
/* vec_expte */
4011
4012
static __inline__ vector float __attribute__((__always_inline__))
4013
vec_expte(vector float __a) {
4014
return __builtin_altivec_vexptefp(__a);
4015
}
4016
4017
/* vec_vexptefp */
4018
4019
static __inline__ vector float __attribute__((__always_inline__))
4020
vec_vexptefp(vector float __a) {
4021
return __builtin_altivec_vexptefp(__a);
4022
}
4023
4024
/* vec_floor */
4025
4026
static __inline__ vector float __ATTRS_o_ai vec_floor(vector float __a) {
4027
#ifdef __VSX__
4028
return __builtin_vsx_xvrspim(__a);
4029
#else
4030
return __builtin_altivec_vrfim(__a);
4031
#endif
4032
}
4033
4034
#ifdef __VSX__
4035
static __inline__ vector double __ATTRS_o_ai vec_floor(vector double __a) {
4036
return __builtin_vsx_xvrdpim(__a);
4037
}
4038
#endif
4039
4040
/* vec_roundm */
4041
static __inline__ vector float __ATTRS_o_ai vec_roundm(vector float __a) {
4042
return vec_floor(__a);
4043
}
4044
4045
#ifdef __VSX__
4046
static __inline__ vector double __ATTRS_o_ai vec_roundm(vector double __a) {
4047
return vec_floor(__a);
4048
}
4049
#endif
4050
4051
/* vec_vrfim */
4052
4053
static __inline__ vector float __attribute__((__always_inline__))
4054
vec_vrfim(vector float __a) {
4055
return __builtin_altivec_vrfim(__a);
4056
}
4057
4058
/* vec_ld */
4059
4060
static __inline__ vector signed char __ATTRS_o_ai
4061
vec_ld(long __a, const vector signed char *__b) {
4062
return (vector signed char)__builtin_altivec_lvx(__a, __b);
4063
}
4064
4065
static __inline__ vector signed char __ATTRS_o_ai
4066
vec_ld(long __a, const signed char *__b) {
4067
return (vector signed char)__builtin_altivec_lvx(__a, __b);
4068
}
4069
4070
static __inline__ vector unsigned char __ATTRS_o_ai
4071
vec_ld(long __a, const vector unsigned char *__b) {
4072
return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
4073
}
4074
4075
static __inline__ vector unsigned char __ATTRS_o_ai
4076
vec_ld(long __a, const unsigned char *__b) {
4077
return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
4078
}
4079
4080
static __inline__ vector bool char __ATTRS_o_ai
4081
vec_ld(long __a, const vector bool char *__b) {
4082
return (vector bool char)__builtin_altivec_lvx(__a, __b);
4083
}
4084
4085
static __inline__ vector short __ATTRS_o_ai vec_ld(long __a,
4086
const vector short *__b) {
4087
return (vector short)__builtin_altivec_lvx(__a, __b);
4088
}
4089
4090
static __inline__ vector short __ATTRS_o_ai vec_ld(long __a, const short *__b) {
4091
return (vector short)__builtin_altivec_lvx(__a, __b);
4092
}
4093
4094
static __inline__ vector unsigned short __ATTRS_o_ai
4095
vec_ld(long __a, const vector unsigned short *__b) {
4096
return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
4097
}
4098
4099
static __inline__ vector unsigned short __ATTRS_o_ai
4100
vec_ld(long __a, const unsigned short *__b) {
4101
return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
4102
}
4103
4104
static __inline__ vector bool short __ATTRS_o_ai
4105
vec_ld(long __a, const vector bool short *__b) {
4106
return (vector bool short)__builtin_altivec_lvx(__a, __b);
4107
}
4108
4109
static __inline__ vector pixel __ATTRS_o_ai vec_ld(long __a,
4110
const vector pixel *__b) {
4111
return (vector pixel)__builtin_altivec_lvx(__a, __b);
4112
}
4113
4114
static __inline__ vector int __ATTRS_o_ai vec_ld(long __a,
4115
const vector int *__b) {
4116
return (vector int)__builtin_altivec_lvx(__a, __b);
4117
}
4118
4119
static __inline__ vector int __ATTRS_o_ai vec_ld(long __a, const int *__b) {
4120
return (vector int)__builtin_altivec_lvx(__a, __b);
4121
}
4122
4123
static __inline__ vector unsigned int __ATTRS_o_ai
4124
vec_ld(long __a, const vector unsigned int *__b) {
4125
return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
4126
}
4127
4128
static __inline__ vector unsigned int __ATTRS_o_ai
4129
vec_ld(long __a, const unsigned int *__b) {
4130
return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
4131
}
4132
4133
static __inline__ vector bool int __ATTRS_o_ai
4134
vec_ld(long __a, const vector bool int *__b) {
4135
return (vector bool int)__builtin_altivec_lvx(__a, __b);
4136
}
4137
4138
static __inline__ vector float __ATTRS_o_ai vec_ld(long __a,
4139
const vector float *__b) {
4140
return (vector float)__builtin_altivec_lvx(__a, __b);
4141
}
4142
4143
static __inline__ vector float __ATTRS_o_ai vec_ld(long __a, const float *__b) {
4144
return (vector float)__builtin_altivec_lvx(__a, __b);
4145
}
4146
4147
/* vec_lvx */
4148
4149
static __inline__ vector signed char __ATTRS_o_ai
4150
vec_lvx(long __a, const vector signed char *__b) {
4151
return (vector signed char)__builtin_altivec_lvx(__a, __b);
4152
}
4153
4154
static __inline__ vector signed char __ATTRS_o_ai
4155
vec_lvx(long __a, const signed char *__b) {
4156
return (vector signed char)__builtin_altivec_lvx(__a, __b);
4157
}
4158
4159
static __inline__ vector unsigned char __ATTRS_o_ai
4160
vec_lvx(long __a, const vector unsigned char *__b) {
4161
return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
4162
}
4163
4164
static __inline__ vector unsigned char __ATTRS_o_ai
4165
vec_lvx(long __a, const unsigned char *__b) {
4166
return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
4167
}
4168
4169
static __inline__ vector bool char __ATTRS_o_ai
4170
vec_lvx(long __a, const vector bool char *__b) {
4171
return (vector bool char)__builtin_altivec_lvx(__a, __b);
4172
}
4173
4174
static __inline__ vector short __ATTRS_o_ai vec_lvx(long __a,
4175
const vector short *__b) {
4176
return (vector short)__builtin_altivec_lvx(__a, __b);
4177
}
4178
4179
static __inline__ vector short __ATTRS_o_ai vec_lvx(long __a, const short *__b) {
4180
return (vector short)__builtin_altivec_lvx(__a, __b);
4181
}
4182
4183
static __inline__ vector unsigned short __ATTRS_o_ai
4184
vec_lvx(long __a, const vector unsigned short *__b) {
4185
return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
4186
}
4187
4188
static __inline__ vector unsigned short __ATTRS_o_ai
4189
vec_lvx(long __a, const unsigned short *__b) {
4190
return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
4191
}
4192
4193
static __inline__ vector bool short __ATTRS_o_ai
4194
vec_lvx(long __a, const vector bool short *__b) {
4195
return (vector bool short)__builtin_altivec_lvx(__a, __b);
4196
}
4197
4198
static __inline__ vector pixel __ATTRS_o_ai vec_lvx(long __a,
4199
const vector pixel *__b) {
4200
return (vector pixel)__builtin_altivec_lvx(__a, __b);
4201
}
4202
4203
static __inline__ vector int __ATTRS_o_ai vec_lvx(long __a,
4204
const vector int *__b) {
4205
return (vector int)__builtin_altivec_lvx(__a, __b);
4206
}
4207
4208
static __inline__ vector int __ATTRS_o_ai vec_lvx(long __a, const int *__b) {
4209
return (vector int)__builtin_altivec_lvx(__a, __b);
4210
}
4211
4212
static __inline__ vector unsigned int __ATTRS_o_ai
4213
vec_lvx(long __a, const vector unsigned int *__b) {
4214
return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
4215
}
4216
4217
static __inline__ vector unsigned int __ATTRS_o_ai
4218
vec_lvx(long __a, const unsigned int *__b) {
4219
return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
4220
}
4221
4222
static __inline__ vector bool int __ATTRS_o_ai
4223
vec_lvx(long __a, const vector bool int *__b) {
4224
return (vector bool int)__builtin_altivec_lvx(__a, __b);
4225
}
4226
4227
static __inline__ vector float __ATTRS_o_ai vec_lvx(long __a,
4228
const vector float *__b) {
4229
return (vector float)__builtin_altivec_lvx(__a, __b);
4230
}
4231
4232
static __inline__ vector float __ATTRS_o_ai vec_lvx(long __a, const float *__b) {
4233
return (vector float)__builtin_altivec_lvx(__a, __b);
4234
}
4235
4236
/* vec_lde */
4237
4238
static __inline__ vector signed char __ATTRS_o_ai
4239
vec_lde(long __a, const signed char *__b) {
4240
return (vector signed char)__builtin_altivec_lvebx(__a, __b);
4241
}
4242
4243
static __inline__ vector unsigned char __ATTRS_o_ai
4244
vec_lde(long __a, const unsigned char *__b) {
4245
return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
4246
}
4247
4248
static __inline__ vector short __ATTRS_o_ai vec_lde(long __a, const short *__b) {
4249
return (vector short)__builtin_altivec_lvehx(__a, __b);
4250
}
4251
4252
static __inline__ vector unsigned short __ATTRS_o_ai
4253
vec_lde(long __a, const unsigned short *__b) {
4254
return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
4255
}
4256
4257
static __inline__ vector int __ATTRS_o_ai vec_lde(long __a, const int *__b) {
4258
return (vector int)__builtin_altivec_lvewx(__a, __b);
4259
}
4260
4261
static __inline__ vector unsigned int __ATTRS_o_ai
4262
vec_lde(long __a, const unsigned int *__b) {
4263
return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
4264
}
4265
4266
static __inline__ vector float __ATTRS_o_ai vec_lde(long __a, const float *__b) {
4267
return (vector float)__builtin_altivec_lvewx(__a, __b);
4268
}
4269
4270
/* vec_lvebx */
4271
4272
static __inline__ vector signed char __ATTRS_o_ai
4273
vec_lvebx(long __a, const signed char *__b) {
4274
return (vector signed char)__builtin_altivec_lvebx(__a, __b);
4275
}
4276
4277
static __inline__ vector unsigned char __ATTRS_o_ai
4278
vec_lvebx(long __a, const unsigned char *__b) {
4279
return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
4280
}
4281
4282
/* vec_lvehx */
4283
4284
static __inline__ vector short __ATTRS_o_ai vec_lvehx(long __a,
4285
const short *__b) {
4286
return (vector short)__builtin_altivec_lvehx(__a, __b);
4287
}
4288
4289
static __inline__ vector unsigned short __ATTRS_o_ai
4290
vec_lvehx(long __a, const unsigned short *__b) {
4291
return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
4292
}
4293
4294
/* vec_lvewx */
4295
4296
static __inline__ vector int __ATTRS_o_ai vec_lvewx(long __a, const int *__b) {
4297
return (vector int)__builtin_altivec_lvewx(__a, __b);
4298
}
4299
4300
static __inline__ vector unsigned int __ATTRS_o_ai
4301
vec_lvewx(long __a, const unsigned int *__b) {
4302
return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
4303
}
4304
4305
static __inline__ vector float __ATTRS_o_ai vec_lvewx(long __a,
4306
const float *__b) {
4307
return (vector float)__builtin_altivec_lvewx(__a, __b);
4308
}
4309
4310
/* vec_ldl */
4311
4312
static __inline__ vector signed char __ATTRS_o_ai
4313
vec_ldl(long __a, const vector signed char *__b) {
4314
return (vector signed char)__builtin_altivec_lvxl(__a, __b);
4315
}
4316
4317
static __inline__ vector signed char __ATTRS_o_ai
4318
vec_ldl(long __a, const signed char *__b) {
4319
return (vector signed char)__builtin_altivec_lvxl(__a, __b);
4320
}
4321
4322
static __inline__ vector unsigned char __ATTRS_o_ai
4323
vec_ldl(long __a, const vector unsigned char *__b) {
4324
return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
4325
}
4326
4327
static __inline__ vector unsigned char __ATTRS_o_ai
4328
vec_ldl(long __a, const unsigned char *__b) {
4329
return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
4330
}
4331
4332
static __inline__ vector bool char __ATTRS_o_ai
4333
vec_ldl(long __a, const vector bool char *__b) {
4334
return (vector bool char)__builtin_altivec_lvxl(__a, __b);
4335
}
4336
4337
static __inline__ vector short __ATTRS_o_ai vec_ldl(long __a,
4338
const vector short *__b) {
4339
return (vector short)__builtin_altivec_lvxl(__a, __b);
4340
}
4341
4342
static __inline__ vector short __ATTRS_o_ai vec_ldl(long __a, const short *__b) {
4343
return (vector short)__builtin_altivec_lvxl(__a, __b);
4344
}
4345
4346
static __inline__ vector unsigned short __ATTRS_o_ai
4347
vec_ldl(long __a, const vector unsigned short *__b) {
4348
return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
4349
}
4350
4351
static __inline__ vector unsigned short __ATTRS_o_ai
4352
vec_ldl(long __a, const unsigned short *__b) {
4353
return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
4354
}
4355
4356
static __inline__ vector bool short __ATTRS_o_ai
4357
vec_ldl(long __a, const vector bool short *__b) {
4358
return (vector bool short)__builtin_altivec_lvxl(__a, __b);
4359
}
4360
4361
static __inline__ vector pixel __ATTRS_o_ai vec_ldl(long __a,
4362
const vector pixel *__b) {
4363
return (vector pixel short)__builtin_altivec_lvxl(__a, __b);
4364
}
4365
4366
static __inline__ vector int __ATTRS_o_ai vec_ldl(long __a,
4367
const vector int *__b) {
4368
return (vector int)__builtin_altivec_lvxl(__a, __b);
4369
}
4370
4371
static __inline__ vector int __ATTRS_o_ai vec_ldl(long __a, const int *__b) {
4372
return (vector int)__builtin_altivec_lvxl(__a, __b);
4373
}
4374
4375
static __inline__ vector unsigned int __ATTRS_o_ai
4376
vec_ldl(long __a, const vector unsigned int *__b) {
4377
return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
4378
}
4379
4380
static __inline__ vector unsigned int __ATTRS_o_ai
4381
vec_ldl(long __a, const unsigned int *__b) {
4382
return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
4383
}
4384
4385
static __inline__ vector bool int __ATTRS_o_ai
4386
vec_ldl(long __a, const vector bool int *__b) {
4387
return (vector bool int)__builtin_altivec_lvxl(__a, __b);
4388
}
4389
4390
static __inline__ vector float __ATTRS_o_ai vec_ldl(long __a,
4391
const vector float *__b) {
4392
return (vector float)__builtin_altivec_lvxl(__a, __b);
4393
}
4394
4395
static __inline__ vector float __ATTRS_o_ai vec_ldl(long __a, const float *__b) {
4396
return (vector float)__builtin_altivec_lvxl(__a, __b);
4397
}
4398
4399
/* vec_lvxl */
4400
4401
static __inline__ vector signed char __ATTRS_o_ai
4402
vec_lvxl(long __a, const vector signed char *__b) {
4403
return (vector signed char)__builtin_altivec_lvxl(__a, __b);
4404
}
4405
4406
static __inline__ vector signed char __ATTRS_o_ai
4407
vec_lvxl(long __a, const signed char *__b) {
4408
return (vector signed char)__builtin_altivec_lvxl(__a, __b);
4409
}
4410
4411
static __inline__ vector unsigned char __ATTRS_o_ai
4412
vec_lvxl(long __a, const vector unsigned char *__b) {
4413
return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
4414
}
4415
4416
static __inline__ vector unsigned char __ATTRS_o_ai
4417
vec_lvxl(long __a, const unsigned char *__b) {
4418
return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
4419
}
4420
4421
static __inline__ vector bool char __ATTRS_o_ai
4422
vec_lvxl(long __a, const vector bool char *__b) {
4423
return (vector bool char)__builtin_altivec_lvxl(__a, __b);
4424
}
4425
4426
static __inline__ vector short __ATTRS_o_ai vec_lvxl(long __a,
4427
const vector short *__b) {
4428
return (vector short)__builtin_altivec_lvxl(__a, __b);
4429
}
4430
4431
static __inline__ vector short __ATTRS_o_ai vec_lvxl(long __a,
4432
const short *__b) {
4433
return (vector short)__builtin_altivec_lvxl(__a, __b);
4434
}
4435
4436
static __inline__ vector unsigned short __ATTRS_o_ai
4437
vec_lvxl(long __a, const vector unsigned short *__b) {
4438
return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
4439
}
4440
4441
static __inline__ vector unsigned short __ATTRS_o_ai
4442
vec_lvxl(long __a, const unsigned short *__b) {
4443
return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
4444
}
4445
4446
static __inline__ vector bool short __ATTRS_o_ai
4447
vec_lvxl(long __a, const vector bool short *__b) {
4448
return (vector bool short)__builtin_altivec_lvxl(__a, __b);
4449
}
4450
4451
static __inline__ vector pixel __ATTRS_o_ai vec_lvxl(long __a,
4452
const vector pixel *__b) {
4453
return (vector pixel)__builtin_altivec_lvxl(__a, __b);
4454
}
4455
4456
static __inline__ vector int __ATTRS_o_ai vec_lvxl(long __a,
4457
const vector int *__b) {
4458
return (vector int)__builtin_altivec_lvxl(__a, __b);
4459
}
4460
4461
static __inline__ vector int __ATTRS_o_ai vec_lvxl(long __a, const int *__b) {
4462
return (vector int)__builtin_altivec_lvxl(__a, __b);
4463
}
4464
4465
static __inline__ vector unsigned int __ATTRS_o_ai
4466
vec_lvxl(long __a, const vector unsigned int *__b) {
4467
return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
4468
}
4469
4470
static __inline__ vector unsigned int __ATTRS_o_ai
4471
vec_lvxl(long __a, const unsigned int *__b) {
4472
return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
4473
}
4474
4475
static __inline__ vector bool int __ATTRS_o_ai
4476
vec_lvxl(long __a, const vector bool int *__b) {
4477
return (vector bool int)__builtin_altivec_lvxl(__a, __b);
4478
}
4479
4480
static __inline__ vector float __ATTRS_o_ai vec_lvxl(long __a,
4481
const vector float *__b) {
4482
return (vector float)__builtin_altivec_lvxl(__a, __b);
4483
}
4484
4485
static __inline__ vector float __ATTRS_o_ai vec_lvxl(long __a,
4486
const float *__b) {
4487
return (vector float)__builtin_altivec_lvxl(__a, __b);
4488
}
4489
4490
/* vec_loge */
4491
4492
static __inline__ vector float __attribute__((__always_inline__))
4493
vec_loge(vector float __a) {
4494
return __builtin_altivec_vlogefp(__a);
4495
}
4496
4497
/* vec_vlogefp */
4498
4499
static __inline__ vector float __attribute__((__always_inline__))
4500
vec_vlogefp(vector float __a) {
4501
return __builtin_altivec_vlogefp(__a);
4502
}
4503
4504
/* vec_lvsl */
4505
4506
#ifdef __LITTLE_ENDIAN__
4507
static __inline__ vector unsigned char __ATTRS_o_ai
4508
__attribute__((__deprecated__("use assignment for unaligned little endian \
4509
loads/stores"))) vec_lvsl(int __a, const signed char *__b) {
4510
vector unsigned char mask =
4511
(vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4512
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4513
7, 6, 5, 4, 3, 2, 1, 0};
4514
return vec_perm(mask, mask, reverse);
4515
}
4516
#else
4517
static __inline__ vector unsigned char __ATTRS_o_ai
4518
vec_lvsl(int __a, const signed char *__b) {
4519
return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4520
}
4521
#endif
4522
4523
#ifdef __LITTLE_ENDIAN__
4524
static __inline__ vector unsigned char __ATTRS_o_ai
4525
__attribute__((__deprecated__("use assignment for unaligned little endian \
4526
loads/stores"))) vec_lvsl(int __a, const unsigned char *__b) {
4527
vector unsigned char mask =
4528
(vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4529
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4530
7, 6, 5, 4, 3, 2, 1, 0};
4531
return vec_perm(mask, mask, reverse);
4532
}
4533
#else
4534
static __inline__ vector unsigned char __ATTRS_o_ai
4535
vec_lvsl(int __a, const unsigned char *__b) {
4536
return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4537
}
4538
#endif
4539
4540
#ifdef __LITTLE_ENDIAN__
4541
static __inline__ vector unsigned char __ATTRS_o_ai
4542
__attribute__((__deprecated__("use assignment for unaligned little endian \
4543
loads/stores"))) vec_lvsl(int __a, const short *__b) {
4544
vector unsigned char mask =
4545
(vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4546
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4547
7, 6, 5, 4, 3, 2, 1, 0};
4548
return vec_perm(mask, mask, reverse);
4549
}
4550
#else
4551
static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
4552
const short *__b) {
4553
return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4554
}
4555
#endif
4556
4557
#ifdef __LITTLE_ENDIAN__
4558
static __inline__ vector unsigned char __ATTRS_o_ai
4559
__attribute__((__deprecated__("use assignment for unaligned little endian \
4560
loads/stores"))) vec_lvsl(int __a, const unsigned short *__b) {
4561
vector unsigned char mask =
4562
(vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4563
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4564
7, 6, 5, 4, 3, 2, 1, 0};
4565
return vec_perm(mask, mask, reverse);
4566
}
4567
#else
4568
static __inline__ vector unsigned char __ATTRS_o_ai
4569
vec_lvsl(int __a, const unsigned short *__b) {
4570
return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4571
}
4572
#endif
4573
4574
#ifdef __LITTLE_ENDIAN__
4575
static __inline__ vector unsigned char __ATTRS_o_ai
4576
__attribute__((__deprecated__("use assignment for unaligned little endian \
4577
loads/stores"))) vec_lvsl(int __a, const int *__b) {
4578
vector unsigned char mask =
4579
(vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4580
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4581
7, 6, 5, 4, 3, 2, 1, 0};
4582
return vec_perm(mask, mask, reverse);
4583
}
4584
#else
4585
static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
4586
const int *__b) {
4587
return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4588
}
4589
#endif
4590
4591
#ifdef __LITTLE_ENDIAN__
4592
static __inline__ vector unsigned char __ATTRS_o_ai
4593
__attribute__((__deprecated__("use assignment for unaligned little endian \
4594
loads/stores"))) vec_lvsl(int __a, const unsigned int *__b) {
4595
vector unsigned char mask =
4596
(vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4597
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4598
7, 6, 5, 4, 3, 2, 1, 0};
4599
return vec_perm(mask, mask, reverse);
4600
}
4601
#else
4602
static __inline__ vector unsigned char __ATTRS_o_ai
4603
vec_lvsl(int __a, const unsigned int *__b) {
4604
return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4605
}
4606
#endif
4607
4608
#ifdef __LITTLE_ENDIAN__
4609
static __inline__ vector unsigned char __ATTRS_o_ai
4610
__attribute__((__deprecated__("use assignment for unaligned little endian \
4611
loads/stores"))) vec_lvsl(int __a, const float *__b) {
4612
vector unsigned char mask =
4613
(vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4614
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4615
7, 6, 5, 4, 3, 2, 1, 0};
4616
return vec_perm(mask, mask, reverse);
4617
}
4618
#else
4619
static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
4620
const float *__b) {
4621
return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4622
}
4623
#endif
4624
4625
/* vec_lvsr */
4626
4627
#ifdef __LITTLE_ENDIAN__
4628
static __inline__ vector unsigned char __ATTRS_o_ai
4629
__attribute__((__deprecated__("use assignment for unaligned little endian \
4630
loads/stores"))) vec_lvsr(int __a, const signed char *__b) {
4631
vector unsigned char mask =
4632
(vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4633
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4634
7, 6, 5, 4, 3, 2, 1, 0};
4635
return vec_perm(mask, mask, reverse);
4636
}
4637
#else
4638
static __inline__ vector unsigned char __ATTRS_o_ai
4639
vec_lvsr(int __a, const signed char *__b) {
4640
return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4641
}
4642
#endif
4643
4644
#ifdef __LITTLE_ENDIAN__
4645
static __inline__ vector unsigned char __ATTRS_o_ai
4646
__attribute__((__deprecated__("use assignment for unaligned little endian \
4647
loads/stores"))) vec_lvsr(int __a, const unsigned char *__b) {
4648
vector unsigned char mask =
4649
(vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4650
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4651
7, 6, 5, 4, 3, 2, 1, 0};
4652
return vec_perm(mask, mask, reverse);
4653
}
4654
#else
4655
static __inline__ vector unsigned char __ATTRS_o_ai
4656
vec_lvsr(int __a, const unsigned char *__b) {
4657
return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4658
}
4659
#endif
4660
4661
#ifdef __LITTLE_ENDIAN__
4662
static __inline__ vector unsigned char __ATTRS_o_ai
4663
__attribute__((__deprecated__("use assignment for unaligned little endian \
4664
loads/stores"))) vec_lvsr(int __a, const short *__b) {
4665
vector unsigned char mask =
4666
(vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4667
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4668
7, 6, 5, 4, 3, 2, 1, 0};
4669
return vec_perm(mask, mask, reverse);
4670
}
4671
#else
4672
static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
4673
const short *__b) {
4674
return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4675
}
4676
#endif
4677
4678
#ifdef __LITTLE_ENDIAN__
4679
static __inline__ vector unsigned char __ATTRS_o_ai
4680
__attribute__((__deprecated__("use assignment for unaligned little endian \
4681
loads/stores"))) vec_lvsr(int __a, const unsigned short *__b) {
4682
vector unsigned char mask =
4683
(vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4684
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4685
7, 6, 5, 4, 3, 2, 1, 0};
4686
return vec_perm(mask, mask, reverse);
4687
}
4688
#else
4689
static __inline__ vector unsigned char __ATTRS_o_ai
4690
vec_lvsr(int __a, const unsigned short *__b) {
4691
return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4692
}
4693
#endif
4694
4695
#ifdef __LITTLE_ENDIAN__
4696
static __inline__ vector unsigned char __ATTRS_o_ai
4697
__attribute__((__deprecated__("use assignment for unaligned little endian \
4698
loads/stores"))) vec_lvsr(int __a, const int *__b) {
4699
vector unsigned char mask =
4700
(vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4701
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4702
7, 6, 5, 4, 3, 2, 1, 0};
4703
return vec_perm(mask, mask, reverse);
4704
}
4705
#else
4706
static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
4707
const int *__b) {
4708
return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4709
}
4710
#endif
4711
4712
#ifdef __LITTLE_ENDIAN__
4713
static __inline__ vector unsigned char __ATTRS_o_ai
4714
__attribute__((__deprecated__("use assignment for unaligned little endian \
4715
loads/stores"))) vec_lvsr(int __a, const unsigned int *__b) {
4716
vector unsigned char mask =
4717
(vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4718
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4719
7, 6, 5, 4, 3, 2, 1, 0};
4720
return vec_perm(mask, mask, reverse);
4721
}
4722
#else
4723
static __inline__ vector unsigned char __ATTRS_o_ai
4724
vec_lvsr(int __a, const unsigned int *__b) {
4725
return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4726
}
4727
#endif
4728
4729
#ifdef __LITTLE_ENDIAN__
4730
static __inline__ vector unsigned char __ATTRS_o_ai
4731
__attribute__((__deprecated__("use assignment for unaligned little endian \
4732
loads/stores"))) vec_lvsr(int __a, const float *__b) {
4733
vector unsigned char mask =
4734
(vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4735
vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4736
7, 6, 5, 4, 3, 2, 1, 0};
4737
return vec_perm(mask, mask, reverse);
4738
}
4739
#else
4740
static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
4741
const float *__b) {
4742
return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4743
}
4744
#endif
4745
4746
/* vec_madd */
4747
static __inline__ vector signed short __ATTRS_o_ai
4748
vec_mladd(vector signed short, vector signed short, vector signed short);
4749
static __inline__ vector signed short __ATTRS_o_ai
4750
vec_mladd(vector signed short, vector unsigned short, vector unsigned short);
4751
static __inline__ vector signed short __ATTRS_o_ai
4752
vec_mladd(vector unsigned short, vector signed short, vector signed short);
4753
static __inline__ vector unsigned short __ATTRS_o_ai
4754
vec_mladd(vector unsigned short, vector unsigned short, vector unsigned short);
4755
4756
static __inline__ vector signed short __ATTRS_o_ai vec_madd(
4757
vector signed short __a, vector signed short __b, vector signed short __c) {
4758
return vec_mladd(__a, __b, __c);
4759
}
4760
4761
static __inline__ vector signed short __ATTRS_o_ai
4762
vec_madd(vector signed short __a, vector unsigned short __b,
4763
vector unsigned short __c) {
4764
return vec_mladd(__a, __b, __c);
4765
}
4766
4767
static __inline__ vector signed short __ATTRS_o_ai
4768
vec_madd(vector unsigned short __a, vector signed short __b,
4769
vector signed short __c) {
4770
return vec_mladd(__a, __b, __c);
4771
}
4772
4773
static __inline__ vector unsigned short __ATTRS_o_ai
4774
vec_madd(vector unsigned short __a, vector unsigned short __b,
4775
vector unsigned short __c) {
4776
return vec_mladd(__a, __b, __c);
4777
}
4778
4779
static __inline__ vector float __ATTRS_o_ai vec_madd(vector float __a,
4780
vector float __b,
4781
vector float __c) {
4782
#ifdef __VSX__
4783
return __builtin_vsx_xvmaddasp(__a, __b, __c);
4784
#else
4785
return __builtin_altivec_vmaddfp(__a, __b, __c);
4786
#endif
4787
}
4788
4789
#ifdef __VSX__
4790
static __inline__ vector double __ATTRS_o_ai vec_madd(vector double __a,
4791
vector double __b,
4792
vector double __c) {
4793
return __builtin_vsx_xvmaddadp(__a, __b, __c);
4794
}
4795
#endif
4796
4797
/* vec_vmaddfp */
4798
4799
static __inline__ vector float __attribute__((__always_inline__))
4800
vec_vmaddfp(vector float __a, vector float __b, vector float __c) {
4801
return __builtin_altivec_vmaddfp(__a, __b, __c);
4802
}
4803
4804
/* vec_madds */
4805
4806
static __inline__ vector signed short __attribute__((__always_inline__))
4807
vec_madds(vector signed short __a, vector signed short __b,
4808
vector signed short __c) {
4809
return __builtin_altivec_vmhaddshs(__a, __b, __c);
4810
}
4811
4812
/* vec_vmhaddshs */
4813
static __inline__ vector signed short __attribute__((__always_inline__))
4814
vec_vmhaddshs(vector signed short __a, vector signed short __b,
4815
vector signed short __c) {
4816
return __builtin_altivec_vmhaddshs(__a, __b, __c);
4817
}
4818
4819
/* vec_msub */
4820
4821
#ifdef __VSX__
4822
static __inline__ vector float __ATTRS_o_ai vec_msub(vector float __a,
4823
vector float __b,
4824
vector float __c) {
4825
return __builtin_vsx_xvmsubasp(__a, __b, __c);
4826
}
4827
4828
static __inline__ vector double __ATTRS_o_ai vec_msub(vector double __a,
4829
vector double __b,
4830
vector double __c) {
4831
return __builtin_vsx_xvmsubadp(__a, __b, __c);
4832
}
4833
#endif
4834
4835
/* vec_max */
4836
4837
static __inline__ vector signed char __ATTRS_o_ai
4838
vec_max(vector signed char __a, vector signed char __b) {
4839
return __builtin_altivec_vmaxsb(__a, __b);
4840
}
4841
4842
static __inline__ vector signed char __ATTRS_o_ai
4843
vec_max(vector bool char __a, vector signed char __b) {
4844
return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
4845
}
4846
4847
static __inline__ vector signed char __ATTRS_o_ai
4848
vec_max(vector signed char __a, vector bool char __b) {
4849
return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
4850
}
4851
4852
static __inline__ vector unsigned char __ATTRS_o_ai
4853
vec_max(vector unsigned char __a, vector unsigned char __b) {
4854
return __builtin_altivec_vmaxub(__a, __b);
4855
}
4856
4857
static __inline__ vector unsigned char __ATTRS_o_ai
4858
vec_max(vector bool char __a, vector unsigned char __b) {
4859
return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
4860
}
4861
4862
static __inline__ vector unsigned char __ATTRS_o_ai
4863
vec_max(vector unsigned char __a, vector bool char __b) {
4864
return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
4865
}
4866
4867
static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
4868
vector short __b) {
4869
return __builtin_altivec_vmaxsh(__a, __b);
4870
}
4871
4872
static __inline__ vector short __ATTRS_o_ai vec_max(vector bool short __a,
4873
vector short __b) {
4874
return __builtin_altivec_vmaxsh((vector short)__a, __b);
4875
}
4876
4877
static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
4878
vector bool short __b) {
4879
return __builtin_altivec_vmaxsh(__a, (vector short)__b);
4880
}
4881
4882
static __inline__ vector unsigned short __ATTRS_o_ai
4883
vec_max(vector unsigned short __a, vector unsigned short __b) {
4884
return __builtin_altivec_vmaxuh(__a, __b);
4885
}
4886
4887
static __inline__ vector unsigned short __ATTRS_o_ai
4888
vec_max(vector bool short __a, vector unsigned short __b) {
4889
return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
4890
}
4891
4892
static __inline__ vector unsigned short __ATTRS_o_ai
4893
vec_max(vector unsigned short __a, vector bool short __b) {
4894
return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
4895
}
4896
4897
static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
4898
vector int __b) {
4899
return __builtin_altivec_vmaxsw(__a, __b);
4900
}
4901
4902
static __inline__ vector int __ATTRS_o_ai vec_max(vector bool int __a,
4903
vector int __b) {
4904
return __builtin_altivec_vmaxsw((vector int)__a, __b);
4905
}
4906
4907
static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
4908
vector bool int __b) {
4909
return __builtin_altivec_vmaxsw(__a, (vector int)__b);
4910
}
4911
4912
static __inline__ vector unsigned int __ATTRS_o_ai
4913
vec_max(vector unsigned int __a, vector unsigned int __b) {
4914
return __builtin_altivec_vmaxuw(__a, __b);
4915
}
4916
4917
static __inline__ vector unsigned int __ATTRS_o_ai
4918
vec_max(vector bool int __a, vector unsigned int __b) {
4919
return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
4920
}
4921
4922
static __inline__ vector unsigned int __ATTRS_o_ai
4923
vec_max(vector unsigned int __a, vector bool int __b) {
4924
return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
4925
}
4926
4927
#ifdef __POWER8_VECTOR__
4928
static __inline__ vector signed long long __ATTRS_o_ai
4929
vec_max(vector signed long long __a, vector signed long long __b) {
4930
return __builtin_altivec_vmaxsd(__a, __b);
4931
}
4932
4933
static __inline__ vector signed long long __ATTRS_o_ai
4934
vec_max(vector bool long long __a, vector signed long long __b) {
4935
return __builtin_altivec_vmaxsd((vector signed long long)__a, __b);
4936
}
4937
4938
static __inline__ vector signed long long __ATTRS_o_ai
4939
vec_max(vector signed long long __a, vector bool long long __b) {
4940
return __builtin_altivec_vmaxsd(__a, (vector signed long long)__b);
4941
}
4942
4943
static __inline__ vector unsigned long long __ATTRS_o_ai
4944
vec_max(vector unsigned long long __a, vector unsigned long long __b) {
4945
return __builtin_altivec_vmaxud(__a, __b);
4946
}
4947
4948
static __inline__ vector unsigned long long __ATTRS_o_ai
4949
vec_max(vector bool long long __a, vector unsigned long long __b) {
4950
return __builtin_altivec_vmaxud((vector unsigned long long)__a, __b);
4951
}
4952
4953
static __inline__ vector unsigned long long __ATTRS_o_ai
4954
vec_max(vector unsigned long long __a, vector bool long long __b) {
4955
return __builtin_altivec_vmaxud(__a, (vector unsigned long long)__b);
4956
}
4957
#endif
4958
4959
static __inline__ vector float __ATTRS_o_ai vec_max(vector float __a,
4960
vector float __b) {
4961
#ifdef __VSX__
4962
return __builtin_vsx_xvmaxsp(__a, __b);
4963
#else
4964
return __builtin_altivec_vmaxfp(__a, __b);
4965
#endif
4966
}
4967
4968
#ifdef __VSX__
4969
static __inline__ vector double __ATTRS_o_ai vec_max(vector double __a,
4970
vector double __b) {
4971
return __builtin_vsx_xvmaxdp(__a, __b);
4972
}
4973
#endif
4974
4975
/* vec_vmaxsb */
4976
4977
static __inline__ vector signed char __ATTRS_o_ai
4978
vec_vmaxsb(vector signed char __a, vector signed char __b) {
4979
return __builtin_altivec_vmaxsb(__a, __b);
4980
}
4981
4982
static __inline__ vector signed char __ATTRS_o_ai
4983
vec_vmaxsb(vector bool char __a, vector signed char __b) {
4984
return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
4985
}
4986
4987
static __inline__ vector signed char __ATTRS_o_ai
4988
vec_vmaxsb(vector signed char __a, vector bool char __b) {
4989
return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
4990
}
4991
4992
/* vec_vmaxub */
4993
4994
static __inline__ vector unsigned char __ATTRS_o_ai
4995
vec_vmaxub(vector unsigned char __a, vector unsigned char __b) {
4996
return __builtin_altivec_vmaxub(__a, __b);
4997
}
4998
4999
static __inline__ vector unsigned char __ATTRS_o_ai
5000
vec_vmaxub(vector bool char __a, vector unsigned char __b) {
5001
return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
5002
}
5003
5004
static __inline__ vector unsigned char __ATTRS_o_ai
5005
vec_vmaxub(vector unsigned char __a, vector bool char __b) {
5006
return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
5007
}
5008
5009
/* vec_vmaxsh */
5010
5011
static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
5012
vector short __b) {
5013
return __builtin_altivec_vmaxsh(__a, __b);
5014
}
5015
5016
static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector bool short __a,
5017
vector short __b) {
5018
return __builtin_altivec_vmaxsh((vector short)__a, __b);
5019
}
5020
5021
static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
5022
vector bool short __b) {
5023
return __builtin_altivec_vmaxsh(__a, (vector short)__b);
5024
}
5025
5026
/* vec_vmaxuh */
5027
5028
static __inline__ vector unsigned short __ATTRS_o_ai
5029
vec_vmaxuh(vector unsigned short __a, vector unsigned short __b) {
5030
return __builtin_altivec_vmaxuh(__a, __b);
5031
}
5032
5033
static __inline__ vector unsigned short __ATTRS_o_ai
5034
vec_vmaxuh(vector bool short __a, vector unsigned short __b) {
5035
return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
5036
}
5037
5038
static __inline__ vector unsigned short __ATTRS_o_ai
5039
vec_vmaxuh(vector unsigned short __a, vector bool short __b) {
5040
return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
5041
}
5042
5043
/* vec_vmaxsw */
5044
5045
static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
5046
vector int __b) {
5047
return __builtin_altivec_vmaxsw(__a, __b);
5048
}
5049
5050
static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector bool int __a,
5051
vector int __b) {
5052
return __builtin_altivec_vmaxsw((vector int)__a, __b);
5053
}
5054
5055
static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
5056
vector bool int __b) {
5057
return __builtin_altivec_vmaxsw(__a, (vector int)__b);
5058
}
5059
5060
/* vec_vmaxuw */
5061
5062
static __inline__ vector unsigned int __ATTRS_o_ai
5063
vec_vmaxuw(vector unsigned int __a, vector unsigned int __b) {
5064
return __builtin_altivec_vmaxuw(__a, __b);
5065
}
5066
5067
static __inline__ vector unsigned int __ATTRS_o_ai
5068
vec_vmaxuw(vector bool int __a, vector unsigned int __b) {
5069
return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
5070
}
5071
5072
static __inline__ vector unsigned int __ATTRS_o_ai
5073
vec_vmaxuw(vector unsigned int __a, vector bool int __b) {
5074
return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
5075
}
5076
5077
/* vec_vmaxfp */
5078
5079
static __inline__ vector float __attribute__((__always_inline__))
5080
vec_vmaxfp(vector float __a, vector float __b) {
5081
#ifdef __VSX__
5082
return __builtin_vsx_xvmaxsp(__a, __b);
5083
#else
5084
return __builtin_altivec_vmaxfp(__a, __b);
5085
#endif
5086
}
5087
5088
/* vec_mergeh */
5089
5090
static __inline__ vector signed char __ATTRS_o_ai
5091
vec_mergeh(vector signed char __a, vector signed char __b) {
5092
return vec_perm(__a, __b,
5093
(vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5094
0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5095
0x06, 0x16, 0x07, 0x17));
5096
}
5097
5098
static __inline__ vector unsigned char __ATTRS_o_ai
5099
vec_mergeh(vector unsigned char __a, vector unsigned char __b) {
5100
return vec_perm(__a, __b,
5101
(vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5102
0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5103
0x06, 0x16, 0x07, 0x17));
5104
}
5105
5106
static __inline__ vector bool char __ATTRS_o_ai
5107
vec_mergeh(vector bool char __a, vector bool char __b) {
5108
return vec_perm(__a, __b,
5109
(vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5110
0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5111
0x06, 0x16, 0x07, 0x17));
5112
}
5113
5114
static __inline__ vector short __ATTRS_o_ai vec_mergeh(vector short __a,
5115
vector short __b) {
5116
return vec_perm(__a, __b,
5117
(vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5118
0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5119
0x06, 0x07, 0x16, 0x17));
5120
}
5121
5122
static __inline__ vector unsigned short __ATTRS_o_ai
5123
vec_mergeh(vector unsigned short __a, vector unsigned short __b) {
5124
return vec_perm(__a, __b,
5125
(vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5126
0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5127
0x06, 0x07, 0x16, 0x17));
5128
}
5129
5130
static __inline__ vector bool short __ATTRS_o_ai
5131
vec_mergeh(vector bool short __a, vector bool short __b) {
5132
return vec_perm(__a, __b,
5133
(vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5134
0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5135
0x06, 0x07, 0x16, 0x17));
5136
}
5137
5138
static __inline__ vector pixel __ATTRS_o_ai vec_mergeh(vector pixel __a,
5139
vector pixel __b) {
5140
return vec_perm(__a, __b,
5141
(vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5142
0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5143
0x06, 0x07, 0x16, 0x17));
5144
}
5145
5146
static __inline__ vector int __ATTRS_o_ai vec_mergeh(vector int __a,
5147
vector int __b) {
5148
return vec_perm(__a, __b,
5149
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5150
0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5151
0x14, 0x15, 0x16, 0x17));
5152
}
5153
5154
static __inline__ vector unsigned int __ATTRS_o_ai
5155
vec_mergeh(vector unsigned int __a, vector unsigned int __b) {
5156
return vec_perm(__a, __b,
5157
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5158
0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5159
0x14, 0x15, 0x16, 0x17));
5160
}
5161
5162
static __inline__ vector bool int __ATTRS_o_ai vec_mergeh(vector bool int __a,
5163
vector bool int __b) {
5164
return vec_perm(__a, __b,
5165
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5166
0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5167
0x14, 0x15, 0x16, 0x17));
5168
}
5169
5170
static __inline__ vector float __ATTRS_o_ai vec_mergeh(vector float __a,
5171
vector float __b) {
5172
return vec_perm(__a, __b,
5173
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5174
0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5175
0x14, 0x15, 0x16, 0x17));
5176
}
5177
5178
#ifdef __VSX__
5179
static __inline__ vector signed long long __ATTRS_o_ai
5180
vec_mergeh(vector signed long long __a, vector signed long long __b) {
5181
return vec_perm(__a, __b,
5182
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5183
0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5184
0x14, 0x15, 0x16, 0x17));
5185
}
5186
5187
static __inline__ vector signed long long __ATTRS_o_ai
5188
vec_mergeh(vector signed long long __a, vector bool long long __b) {
5189
return vec_perm(__a, (vector signed long long)__b,
5190
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5191
0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5192
0x14, 0x15, 0x16, 0x17));
5193
}
5194
5195
static __inline__ vector signed long long __ATTRS_o_ai
5196
vec_mergeh(vector bool long long __a, vector signed long long __b) {
5197
return vec_perm((vector signed long long)__a, __b,
5198
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5199
0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5200
0x14, 0x15, 0x16, 0x17));
5201
}
5202
5203
static __inline__ vector unsigned long long __ATTRS_o_ai
5204
vec_mergeh(vector unsigned long long __a, vector unsigned long long __b) {
5205
return vec_perm(__a, __b,
5206
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5207
0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5208
0x14, 0x15, 0x16, 0x17));
5209
}
5210
5211
static __inline__ vector unsigned long long __ATTRS_o_ai
5212
vec_mergeh(vector unsigned long long __a, vector bool long long __b) {
5213
return vec_perm(__a, (vector unsigned long long)__b,
5214
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5215
0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5216
0x14, 0x15, 0x16, 0x17));
5217
}
5218
5219
static __inline__ vector unsigned long long __ATTRS_o_ai
5220
vec_mergeh(vector bool long long __a, vector unsigned long long __b) {
5221
return vec_perm((vector unsigned long long)__a, __b,
5222
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5223
0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5224
0x14, 0x15, 0x16, 0x17));
5225
}
5226
5227
static __inline__ vector bool long long __ATTRS_o_ai
5228
vec_mergeh(vector bool long long __a, vector bool long long __b) {
5229
return vec_perm(__a, __b,
5230
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5231
0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5232
0x14, 0x15, 0x16, 0x17));
5233
}
5234
5235
static __inline__ vector double __ATTRS_o_ai vec_mergeh(vector double __a,
5236
vector double __b) {
5237
return vec_perm(__a, __b,
5238
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5239
0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5240
0x14, 0x15, 0x16, 0x17));
5241
}
5242
static __inline__ vector double __ATTRS_o_ai
5243
vec_mergeh(vector double __a, vector bool long long __b) {
5244
return vec_perm(__a, (vector double)__b,
5245
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5246
0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5247
0x14, 0x15, 0x16, 0x17));
5248
}
5249
static __inline__ vector double __ATTRS_o_ai
5250
vec_mergeh(vector bool long long __a, vector double __b) {
5251
return vec_perm((vector double)__a, __b,
5252
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5253
0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5254
0x14, 0x15, 0x16, 0x17));
5255
}
5256
#endif
5257
5258
/* vec_vmrghb */
5259
5260
#define __builtin_altivec_vmrghb vec_vmrghb
5261
5262
static __inline__ vector signed char __ATTRS_o_ai
5263
vec_vmrghb(vector signed char __a, vector signed char __b) {
5264
return vec_perm(__a, __b,
5265
(vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5266
0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5267
0x06, 0x16, 0x07, 0x17));
5268
}
5269
5270
static __inline__ vector unsigned char __ATTRS_o_ai
5271
vec_vmrghb(vector unsigned char __a, vector unsigned char __b) {
5272
return vec_perm(__a, __b,
5273
(vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5274
0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5275
0x06, 0x16, 0x07, 0x17));
5276
}
5277
5278
static __inline__ vector bool char __ATTRS_o_ai
5279
vec_vmrghb(vector bool char __a, vector bool char __b) {
5280
return vec_perm(__a, __b,
5281
(vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5282
0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5283
0x06, 0x16, 0x07, 0x17));
5284
}
5285
5286
/* vec_vmrghh */
5287
5288
#define __builtin_altivec_vmrghh vec_vmrghh
5289
5290
static __inline__ vector short __ATTRS_o_ai vec_vmrghh(vector short __a,
5291
vector short __b) {
5292
return vec_perm(__a, __b,
5293
(vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5294
0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5295
0x06, 0x07, 0x16, 0x17));
5296
}
5297
5298
static __inline__ vector unsigned short __ATTRS_o_ai
5299
vec_vmrghh(vector unsigned short __a, vector unsigned short __b) {
5300
return vec_perm(__a, __b,
5301
(vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5302
0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5303
0x06, 0x07, 0x16, 0x17));
5304
}
5305
5306
static __inline__ vector bool short __ATTRS_o_ai
5307
vec_vmrghh(vector bool short __a, vector bool short __b) {
5308
return vec_perm(__a, __b,
5309
(vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5310
0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5311
0x06, 0x07, 0x16, 0x17));
5312
}
5313
5314
static __inline__ vector pixel __ATTRS_o_ai vec_vmrghh(vector pixel __a,
5315
vector pixel __b) {
5316
return vec_perm(__a, __b,
5317
(vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5318
0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5319
0x06, 0x07, 0x16, 0x17));
5320
}
5321
5322
/* vec_vmrghw */
5323
5324
#define __builtin_altivec_vmrghw vec_vmrghw
5325
5326
static __inline__ vector int __ATTRS_o_ai vec_vmrghw(vector int __a,
5327
vector int __b) {
5328
return vec_perm(__a, __b,
5329
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5330
0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5331
0x14, 0x15, 0x16, 0x17));
5332
}
5333
5334
static __inline__ vector unsigned int __ATTRS_o_ai
5335
vec_vmrghw(vector unsigned int __a, vector unsigned int __b) {
5336
return vec_perm(__a, __b,
5337
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5338
0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5339
0x14, 0x15, 0x16, 0x17));
5340
}
5341
5342
static __inline__ vector bool int __ATTRS_o_ai vec_vmrghw(vector bool int __a,
5343
vector bool int __b) {
5344
return vec_perm(__a, __b,
5345
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5346
0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5347
0x14, 0x15, 0x16, 0x17));
5348
}
5349
5350
static __inline__ vector float __ATTRS_o_ai vec_vmrghw(vector float __a,
5351
vector float __b) {
5352
return vec_perm(__a, __b,
5353
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5354
0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5355
0x14, 0x15, 0x16, 0x17));
5356
}
5357
5358
/* vec_mergel */
5359
5360
static __inline__ vector signed char __ATTRS_o_ai
5361
vec_mergel(vector signed char __a, vector signed char __b) {
5362
return vec_perm(__a, __b,
5363
(vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5364
0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5365
0x0E, 0x1E, 0x0F, 0x1F));
5366
}
5367
5368
static __inline__ vector unsigned char __ATTRS_o_ai
5369
vec_mergel(vector unsigned char __a, vector unsigned char __b) {
5370
return vec_perm(__a, __b,
5371
(vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5372
0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5373
0x0E, 0x1E, 0x0F, 0x1F));
5374
}
5375
5376
static __inline__ vector bool char __ATTRS_o_ai
5377
vec_mergel(vector bool char __a, vector bool char __b) {
5378
return vec_perm(__a, __b,
5379
(vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5380
0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5381
0x0E, 0x1E, 0x0F, 0x1F));
5382
}
5383
5384
static __inline__ vector short __ATTRS_o_ai vec_mergel(vector short __a,
5385
vector short __b) {
5386
return vec_perm(__a, __b,
5387
(vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5388
0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5389
0x0E, 0x0F, 0x1E, 0x1F));
5390
}
5391
5392
static __inline__ vector unsigned short __ATTRS_o_ai
5393
vec_mergel(vector unsigned short __a, vector unsigned short __b) {
5394
return vec_perm(__a, __b,
5395
(vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5396
0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5397
0x0E, 0x0F, 0x1E, 0x1F));
5398
}
5399
5400
static __inline__ vector bool short __ATTRS_o_ai
5401
vec_mergel(vector bool short __a, vector bool short __b) {
5402
return vec_perm(__a, __b,
5403
(vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5404
0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5405
0x0E, 0x0F, 0x1E, 0x1F));
5406
}
5407
5408
static __inline__ vector pixel __ATTRS_o_ai vec_mergel(vector pixel __a,
5409
vector pixel __b) {
5410
return vec_perm(__a, __b,
5411
(vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5412
0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5413
0x0E, 0x0F, 0x1E, 0x1F));
5414
}
5415
5416
static __inline__ vector int __ATTRS_o_ai vec_mergel(vector int __a,
5417
vector int __b) {
5418
return vec_perm(__a, __b,
5419
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5420
0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5421
0x1C, 0x1D, 0x1E, 0x1F));
5422
}
5423
5424
static __inline__ vector unsigned int __ATTRS_o_ai
5425
vec_mergel(vector unsigned int __a, vector unsigned int __b) {
5426
return vec_perm(__a, __b,
5427
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5428
0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5429
0x1C, 0x1D, 0x1E, 0x1F));
5430
}
5431
5432
static __inline__ vector bool int __ATTRS_o_ai vec_mergel(vector bool int __a,
5433
vector bool int __b) {
5434
return vec_perm(__a, __b,
5435
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5436
0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5437
0x1C, 0x1D, 0x1E, 0x1F));
5438
}
5439
5440
static __inline__ vector float __ATTRS_o_ai vec_mergel(vector float __a,
5441
vector float __b) {
5442
return vec_perm(__a, __b,
5443
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5444
0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5445
0x1C, 0x1D, 0x1E, 0x1F));
5446
}
5447
5448
#ifdef __VSX__
5449
static __inline__ vector signed long long __ATTRS_o_ai
5450
vec_mergel(vector signed long long __a, vector signed long long __b) {
5451
return vec_perm(__a, __b,
5452
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5453
0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5454
0x1C, 0x1D, 0x1E, 0x1F));
5455
}
5456
static __inline__ vector signed long long __ATTRS_o_ai
5457
vec_mergel(vector signed long long __a, vector bool long long __b) {
5458
return vec_perm(__a, (vector signed long long)__b,
5459
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5460
0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5461
0x1C, 0x1D, 0x1E, 0x1F));
5462
}
5463
static __inline__ vector signed long long __ATTRS_o_ai
5464
vec_mergel(vector bool long long __a, vector signed long long __b) {
5465
return vec_perm((vector signed long long)__a, __b,
5466
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5467
0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5468
0x1C, 0x1D, 0x1E, 0x1F));
5469
}
5470
static __inline__ vector unsigned long long __ATTRS_o_ai
5471
vec_mergel(vector unsigned long long __a, vector unsigned long long __b) {
5472
return vec_perm(__a, __b,
5473
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5474
0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5475
0x1C, 0x1D, 0x1E, 0x1F));
5476
}
5477
static __inline__ vector unsigned long long __ATTRS_o_ai
5478
vec_mergel(vector unsigned long long __a, vector bool long long __b) {
5479
return vec_perm(__a, (vector unsigned long long)__b,
5480
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5481
0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5482
0x1C, 0x1D, 0x1E, 0x1F));
5483
}
5484
static __inline__ vector unsigned long long __ATTRS_o_ai
5485
vec_mergel(vector bool long long __a, vector unsigned long long __b) {
5486
return vec_perm((vector unsigned long long)__a, __b,
5487
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5488
0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5489
0x1C, 0x1D, 0x1E, 0x1F));
5490
}
5491
static __inline__ vector bool long long __ATTRS_o_ai
5492
vec_mergel(vector bool long long __a, vector bool long long __b) {
5493
return vec_perm(__a, __b,
5494
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5495
0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5496
0x1C, 0x1D, 0x1E, 0x1F));
5497
}
5498
static __inline__ vector double __ATTRS_o_ai vec_mergel(vector double __a,
5499
vector double __b) {
5500
return vec_perm(__a, __b,
5501
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5502
0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5503
0x1C, 0x1D, 0x1E, 0x1F));
5504
}
5505
static __inline__ vector double __ATTRS_o_ai
5506
vec_mergel(vector double __a, vector bool long long __b) {
5507
return vec_perm(__a, (vector double)__b,
5508
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5509
0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5510
0x1C, 0x1D, 0x1E, 0x1F));
5511
}
5512
static __inline__ vector double __ATTRS_o_ai
5513
vec_mergel(vector bool long long __a, vector double __b) {
5514
return vec_perm((vector double)__a, __b,
5515
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5516
0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5517
0x1C, 0x1D, 0x1E, 0x1F));
5518
}
5519
#endif
5520
5521
/* vec_vmrglb */
5522
5523
#define __builtin_altivec_vmrglb vec_vmrglb
5524
5525
static __inline__ vector signed char __ATTRS_o_ai
5526
vec_vmrglb(vector signed char __a, vector signed char __b) {
5527
return vec_perm(__a, __b,
5528
(vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5529
0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5530
0x0E, 0x1E, 0x0F, 0x1F));
5531
}
5532
5533
static __inline__ vector unsigned char __ATTRS_o_ai
5534
vec_vmrglb(vector unsigned char __a, vector unsigned char __b) {
5535
return vec_perm(__a, __b,
5536
(vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5537
0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5538
0x0E, 0x1E, 0x0F, 0x1F));
5539
}
5540
5541
static __inline__ vector bool char __ATTRS_o_ai
5542
vec_vmrglb(vector bool char __a, vector bool char __b) {
5543
return vec_perm(__a, __b,
5544
(vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5545
0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5546
0x0E, 0x1E, 0x0F, 0x1F));
5547
}
5548
5549
/* vec_vmrglh */
5550
5551
#define __builtin_altivec_vmrglh vec_vmrglh
5552
5553
static __inline__ vector short __ATTRS_o_ai vec_vmrglh(vector short __a,
5554
vector short __b) {
5555
return vec_perm(__a, __b,
5556
(vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5557
0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5558
0x0E, 0x0F, 0x1E, 0x1F));
5559
}
5560
5561
static __inline__ vector unsigned short __ATTRS_o_ai
5562
vec_vmrglh(vector unsigned short __a, vector unsigned short __b) {
5563
return vec_perm(__a, __b,
5564
(vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5565
0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5566
0x0E, 0x0F, 0x1E, 0x1F));
5567
}
5568
5569
static __inline__ vector bool short __ATTRS_o_ai
5570
vec_vmrglh(vector bool short __a, vector bool short __b) {
5571
return vec_perm(__a, __b,
5572
(vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5573
0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5574
0x0E, 0x0F, 0x1E, 0x1F));
5575
}
5576
5577
static __inline__ vector pixel __ATTRS_o_ai vec_vmrglh(vector pixel __a,
5578
vector pixel __b) {
5579
return vec_perm(__a, __b,
5580
(vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5581
0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5582
0x0E, 0x0F, 0x1E, 0x1F));
5583
}
5584
5585
/* vec_vmrglw */
5586
5587
#define __builtin_altivec_vmrglw vec_vmrglw
5588
5589
static __inline__ vector int __ATTRS_o_ai vec_vmrglw(vector int __a,
5590
vector int __b) {
5591
return vec_perm(__a, __b,
5592
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5593
0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5594
0x1C, 0x1D, 0x1E, 0x1F));
5595
}
5596
5597
static __inline__ vector unsigned int __ATTRS_o_ai
5598
vec_vmrglw(vector unsigned int __a, vector unsigned int __b) {
5599
return vec_perm(__a, __b,
5600
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5601
0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5602
0x1C, 0x1D, 0x1E, 0x1F));
5603
}
5604
5605
static __inline__ vector bool int __ATTRS_o_ai vec_vmrglw(vector bool int __a,
5606
vector bool int __b) {
5607
return vec_perm(__a, __b,
5608
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5609
0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5610
0x1C, 0x1D, 0x1E, 0x1F));
5611
}
5612
5613
static __inline__ vector float __ATTRS_o_ai vec_vmrglw(vector float __a,
5614
vector float __b) {
5615
return vec_perm(__a, __b,
5616
(vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5617
0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5618
0x1C, 0x1D, 0x1E, 0x1F));
5619
}
5620
5621
#ifdef __POWER8_VECTOR__
5622
/* vec_mergee */
5623
5624
static __inline__ vector bool int __ATTRS_o_ai vec_mergee(vector bool int __a,
5625
vector bool int __b) {
5626
return vec_perm(__a, __b,
5627
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5628
0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5629
0x18, 0x19, 0x1A, 0x1B));
5630
}
5631
5632
static __inline__ vector signed int __ATTRS_o_ai
5633
vec_mergee(vector signed int __a, vector signed int __b) {
5634
return vec_perm(__a, __b,
5635
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5636
0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5637
0x18, 0x19, 0x1A, 0x1B));
5638
}
5639
5640
static __inline__ vector unsigned int __ATTRS_o_ai
5641
vec_mergee(vector unsigned int __a, vector unsigned int __b) {
5642
return vec_perm(__a, __b,
5643
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5644
0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5645
0x18, 0x19, 0x1A, 0x1B));
5646
}
5647
5648
static __inline__ vector bool long long __ATTRS_o_ai
5649
vec_mergee(vector bool long long __a, vector bool long long __b) {
5650
return vec_mergeh(__a, __b);
5651
}
5652
5653
static __inline__ vector signed long long __ATTRS_o_ai
5654
vec_mergee(vector signed long long __a, vector signed long long __b) {
5655
return vec_mergeh(__a, __b);
5656
}
5657
5658
static __inline__ vector unsigned long long __ATTRS_o_ai
5659
vec_mergee(vector unsigned long long __a, vector unsigned long long __b) {
5660
return vec_mergeh(__a, __b);
5661
}
5662
5663
static __inline__ vector float __ATTRS_o_ai
5664
vec_mergee(vector float __a, vector float __b) {
5665
return vec_perm(__a, __b,
5666
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5667
0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5668
0x18, 0x19, 0x1A, 0x1B));
5669
}
5670
5671
static __inline__ vector double __ATTRS_o_ai
5672
vec_mergee(vector double __a, vector double __b) {
5673
return vec_mergeh(__a, __b);
5674
}
5675
5676
/* vec_mergeo */
5677
5678
static __inline__ vector bool int __ATTRS_o_ai vec_mergeo(vector bool int __a,
5679
vector bool int __b) {
5680
return vec_perm(__a, __b,
5681
(vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5682
0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5683
0x1C, 0x1D, 0x1E, 0x1F));
5684
}
5685
5686
static __inline__ vector signed int __ATTRS_o_ai
5687
vec_mergeo(vector signed int __a, vector signed int __b) {
5688
return vec_perm(__a, __b,
5689
(vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5690
0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5691
0x1C, 0x1D, 0x1E, 0x1F));
5692
}
5693
5694
static __inline__ vector unsigned int __ATTRS_o_ai
5695
vec_mergeo(vector unsigned int __a, vector unsigned int __b) {
5696
return vec_perm(__a, __b,
5697
(vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5698
0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5699
0x1C, 0x1D, 0x1E, 0x1F));
5700
}
5701
5702
static __inline__ vector bool long long __ATTRS_o_ai
5703
vec_mergeo(vector bool long long __a, vector bool long long __b) {
5704
return vec_mergel(__a, __b);
5705
}
5706
5707
static __inline__ vector signed long long __ATTRS_o_ai
5708
vec_mergeo(vector signed long long __a, vector signed long long __b) {
5709
return vec_mergel(__a, __b);
5710
}
5711
5712
static __inline__ vector unsigned long long __ATTRS_o_ai
5713
vec_mergeo(vector unsigned long long __a, vector unsigned long long __b) {
5714
return vec_mergel(__a, __b);
5715
}
5716
5717
static __inline__ vector float __ATTRS_o_ai
5718
vec_mergeo(vector float __a, vector float __b) {
5719
return vec_perm(__a, __b,
5720
(vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5721
0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5722
0x1C, 0x1D, 0x1E, 0x1F));
5723
}
5724
5725
static __inline__ vector double __ATTRS_o_ai
5726
vec_mergeo(vector double __a, vector double __b) {
5727
return vec_mergel(__a, __b);
5728
}
5729
5730
#endif
5731
5732
/* vec_mfvscr */
5733
5734
static __inline__ vector unsigned short __attribute__((__always_inline__))
5735
vec_mfvscr(void) {
5736
return __builtin_altivec_mfvscr();
5737
}
5738
5739
/* vec_min */
5740
5741
static __inline__ vector signed char __ATTRS_o_ai
5742
vec_min(vector signed char __a, vector signed char __b) {
5743
return __builtin_altivec_vminsb(__a, __b);
5744
}
5745
5746
static __inline__ vector signed char __ATTRS_o_ai
5747
vec_min(vector bool char __a, vector signed char __b) {
5748
return __builtin_altivec_vminsb((vector signed char)__a, __b);
5749
}
5750
5751
static __inline__ vector signed char __ATTRS_o_ai
5752
vec_min(vector signed char __a, vector bool char __b) {
5753
return __builtin_altivec_vminsb(__a, (vector signed char)__b);
5754
}
5755
5756
static __inline__ vector unsigned char __ATTRS_o_ai
5757
vec_min(vector unsigned char __a, vector unsigned char __b) {
5758
return __builtin_altivec_vminub(__a, __b);
5759
}
5760
5761
static __inline__ vector unsigned char __ATTRS_o_ai
5762
vec_min(vector bool char __a, vector unsigned char __b) {
5763
return __builtin_altivec_vminub((vector unsigned char)__a, __b);
5764
}
5765
5766
static __inline__ vector unsigned char __ATTRS_o_ai
5767
vec_min(vector unsigned char __a, vector bool char __b) {
5768
return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
5769
}
5770
5771
static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
5772
vector short __b) {
5773
return __builtin_altivec_vminsh(__a, __b);
5774
}
5775
5776
static __inline__ vector short __ATTRS_o_ai vec_min(vector bool short __a,
5777
vector short __b) {
5778
return __builtin_altivec_vminsh((vector short)__a, __b);
5779
}
5780
5781
static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
5782
vector bool short __b) {
5783
return __builtin_altivec_vminsh(__a, (vector short)__b);
5784
}
5785
5786
static __inline__ vector unsigned short __ATTRS_o_ai
5787
vec_min(vector unsigned short __a, vector unsigned short __b) {
5788
return __builtin_altivec_vminuh(__a, __b);
5789
}
5790
5791
static __inline__ vector unsigned short __ATTRS_o_ai
5792
vec_min(vector bool short __a, vector unsigned short __b) {
5793
return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
5794
}
5795
5796
static __inline__ vector unsigned short __ATTRS_o_ai
5797
vec_min(vector unsigned short __a, vector bool short __b) {
5798
return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
5799
}
5800
5801
static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
5802
vector int __b) {
5803
return __builtin_altivec_vminsw(__a, __b);
5804
}
5805
5806
static __inline__ vector int __ATTRS_o_ai vec_min(vector bool int __a,
5807
vector int __b) {
5808
return __builtin_altivec_vminsw((vector int)__a, __b);
5809
}
5810
5811
static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
5812
vector bool int __b) {
5813
return __builtin_altivec_vminsw(__a, (vector int)__b);
5814
}
5815
5816
static __inline__ vector unsigned int __ATTRS_o_ai
5817
vec_min(vector unsigned int __a, vector unsigned int __b) {
5818
return __builtin_altivec_vminuw(__a, __b);
5819
}
5820
5821
static __inline__ vector unsigned int __ATTRS_o_ai
5822
vec_min(vector bool int __a, vector unsigned int __b) {
5823
return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
5824
}
5825
5826
static __inline__ vector unsigned int __ATTRS_o_ai
5827
vec_min(vector unsigned int __a, vector bool int __b) {
5828
return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
5829
}
5830
5831
#ifdef __POWER8_VECTOR__
5832
static __inline__ vector signed long long __ATTRS_o_ai
5833
vec_min(vector signed long long __a, vector signed long long __b) {
5834
return __builtin_altivec_vminsd(__a, __b);
5835
}
5836
5837
static __inline__ vector signed long long __ATTRS_o_ai
5838
vec_min(vector bool long long __a, vector signed long long __b) {
5839
return __builtin_altivec_vminsd((vector signed long long)__a, __b);
5840
}
5841
5842
static __inline__ vector signed long long __ATTRS_o_ai
5843
vec_min(vector signed long long __a, vector bool long long __b) {
5844
return __builtin_altivec_vminsd(__a, (vector signed long long)__b);
5845
}
5846
5847
static __inline__ vector unsigned long long __ATTRS_o_ai
5848
vec_min(vector unsigned long long __a, vector unsigned long long __b) {
5849
return __builtin_altivec_vminud(__a, __b);
5850
}
5851
5852
static __inline__ vector unsigned long long __ATTRS_o_ai
5853
vec_min(vector bool long long __a, vector unsigned long long __b) {
5854
return __builtin_altivec_vminud((vector unsigned long long)__a, __b);
5855
}
5856
5857
static __inline__ vector unsigned long long __ATTRS_o_ai
5858
vec_min(vector unsigned long long __a, vector bool long long __b) {
5859
return __builtin_altivec_vminud(__a, (vector unsigned long long)__b);
5860
}
5861
#endif
5862
5863
static __inline__ vector float __ATTRS_o_ai vec_min(vector float __a,
5864
vector float __b) {
5865
#ifdef __VSX__
5866
return __builtin_vsx_xvminsp(__a, __b);
5867
#else
5868
return __builtin_altivec_vminfp(__a, __b);
5869
#endif
5870
}
5871
5872
#ifdef __VSX__
5873
static __inline__ vector double __ATTRS_o_ai vec_min(vector double __a,
5874
vector double __b) {
5875
return __builtin_vsx_xvmindp(__a, __b);
5876
}
5877
#endif
5878
5879
/* vec_vminsb */
5880
5881
static __inline__ vector signed char __ATTRS_o_ai
5882
vec_vminsb(vector signed char __a, vector signed char __b) {
5883
return __builtin_altivec_vminsb(__a, __b);
5884
}
5885
5886
static __inline__ vector signed char __ATTRS_o_ai
5887
vec_vminsb(vector bool char __a, vector signed char __b) {
5888
return __builtin_altivec_vminsb((vector signed char)__a, __b);
5889
}
5890
5891
static __inline__ vector signed char __ATTRS_o_ai
5892
vec_vminsb(vector signed char __a, vector bool char __b) {
5893
return __builtin_altivec_vminsb(__a, (vector signed char)__b);
5894
}
5895
5896
/* vec_vminub */
5897
5898
static __inline__ vector unsigned char __ATTRS_o_ai
5899
vec_vminub(vector unsigned char __a, vector unsigned char __b) {
5900
return __builtin_altivec_vminub(__a, __b);
5901
}
5902
5903
static __inline__ vector unsigned char __ATTRS_o_ai
5904
vec_vminub(vector bool char __a, vector unsigned char __b) {
5905
return __builtin_altivec_vminub((vector unsigned char)__a, __b);
5906
}
5907
5908
static __inline__ vector unsigned char __ATTRS_o_ai
5909
vec_vminub(vector unsigned char __a, vector bool char __b) {
5910
return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
5911
}
5912
5913
/* vec_vminsh */
5914
5915
static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
5916
vector short __b) {
5917
return __builtin_altivec_vminsh(__a, __b);
5918
}
5919
5920
static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector bool short __a,
5921
vector short __b) {
5922
return __builtin_altivec_vminsh((vector short)__a, __b);
5923
}
5924
5925
static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
5926
vector bool short __b) {
5927
return __builtin_altivec_vminsh(__a, (vector short)__b);
5928
}
5929
5930
/* vec_vminuh */
5931
5932
static __inline__ vector unsigned short __ATTRS_o_ai
5933
vec_vminuh(vector unsigned short __a, vector unsigned short __b) {
5934
return __builtin_altivec_vminuh(__a, __b);
5935
}
5936
5937
static __inline__ vector unsigned short __ATTRS_o_ai
5938
vec_vminuh(vector bool short __a, vector unsigned short __b) {
5939
return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
5940
}
5941
5942
static __inline__ vector unsigned short __ATTRS_o_ai
5943
vec_vminuh(vector unsigned short __a, vector bool short __b) {
5944
return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
5945
}
5946
5947
/* vec_vminsw */
5948
5949
static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
5950
vector int __b) {
5951
return __builtin_altivec_vminsw(__a, __b);
5952
}
5953
5954
static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector bool int __a,
5955
vector int __b) {
5956
return __builtin_altivec_vminsw((vector int)__a, __b);
5957
}
5958
5959
static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
5960
vector bool int __b) {
5961
return __builtin_altivec_vminsw(__a, (vector int)__b);
5962
}
5963
5964
/* vec_vminuw */
5965
5966
static __inline__ vector unsigned int __ATTRS_o_ai
5967
vec_vminuw(vector unsigned int __a, vector unsigned int __b) {
5968
return __builtin_altivec_vminuw(__a, __b);
5969
}
5970
5971
static __inline__ vector unsigned int __ATTRS_o_ai
5972
vec_vminuw(vector bool int __a, vector unsigned int __b) {
5973
return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
5974
}
5975
5976
static __inline__ vector unsigned int __ATTRS_o_ai
5977
vec_vminuw(vector unsigned int __a, vector bool int __b) {
5978
return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
5979
}
5980
5981
/* vec_vminfp */
5982
5983
static __inline__ vector float __attribute__((__always_inline__))
5984
vec_vminfp(vector float __a, vector float __b) {
5985
#ifdef __VSX__
5986
return __builtin_vsx_xvminsp(__a, __b);
5987
#else
5988
return __builtin_altivec_vminfp(__a, __b);
5989
#endif
5990
}
5991
5992
/* vec_mladd */
5993
5994
#define __builtin_altivec_vmladduhm vec_mladd
5995
5996
static __inline__ vector short __ATTRS_o_ai vec_mladd(vector short __a,
5997
vector short __b,
5998
vector short __c) {
5999
return __a * __b + __c;
6000
}
6001
6002
static __inline__ vector short __ATTRS_o_ai vec_mladd(
6003
vector short __a, vector unsigned short __b, vector unsigned short __c) {
6004
return __a * (vector short)__b + (vector short)__c;
6005
}
6006
6007
static __inline__ vector short __ATTRS_o_ai vec_mladd(vector unsigned short __a,
6008
vector short __b,
6009
vector short __c) {
6010
return (vector short)__a * __b + __c;
6011
}
6012
6013
static __inline__ vector unsigned short __ATTRS_o_ai
6014
vec_mladd(vector unsigned short __a, vector unsigned short __b,
6015
vector unsigned short __c) {
6016
return __a * __b + __c;
6017
}
6018
6019
/* vec_vmladduhm */
6020
6021
static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(vector short __a,
6022
vector short __b,
6023
vector short __c) {
6024
return __a * __b + __c;
6025
}
6026
6027
static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(
6028
vector short __a, vector unsigned short __b, vector unsigned short __c) {
6029
return __a * (vector short)__b + (vector short)__c;
6030
}
6031
6032
static __inline__ vector short __ATTRS_o_ai
6033
vec_vmladduhm(vector unsigned short __a, vector short __b, vector short __c) {
6034
return (vector short)__a * __b + __c;
6035
}
6036
6037
static __inline__ vector unsigned short __ATTRS_o_ai
6038
vec_vmladduhm(vector unsigned short __a, vector unsigned short __b,
6039
vector unsigned short __c) {
6040
return __a * __b + __c;
6041
}
6042
6043
/* vec_mradds */
6044
6045
static __inline__ vector short __attribute__((__always_inline__))
6046
vec_mradds(vector short __a, vector short __b, vector short __c) {
6047
return __builtin_altivec_vmhraddshs(__a, __b, __c);
6048
}
6049
6050
/* vec_vmhraddshs */
6051
6052
static __inline__ vector short __attribute__((__always_inline__))
6053
vec_vmhraddshs(vector short __a, vector short __b, vector short __c) {
6054
return __builtin_altivec_vmhraddshs(__a, __b, __c);
6055
}
6056
6057
/* vec_msum */
6058
6059
static __inline__ vector int __ATTRS_o_ai vec_msum(vector signed char __a,
6060
vector unsigned char __b,
6061
vector int __c) {
6062
return __builtin_altivec_vmsummbm(__a, __b, __c);
6063
}
6064
6065
static __inline__ vector unsigned int __ATTRS_o_ai
6066
vec_msum(vector unsigned char __a, vector unsigned char __b,
6067
vector unsigned int __c) {
6068
return __builtin_altivec_vmsumubm(__a, __b, __c);
6069
}
6070
6071
static __inline__ vector int __ATTRS_o_ai vec_msum(vector short __a,
6072
vector short __b,
6073
vector int __c) {
6074
return __builtin_altivec_vmsumshm(__a, __b, __c);
6075
}
6076
6077
static __inline__ vector unsigned int __ATTRS_o_ai
6078
vec_msum(vector unsigned short __a, vector unsigned short __b,
6079
vector unsigned int __c) {
6080
return __builtin_altivec_vmsumuhm(__a, __b, __c);
6081
}
6082
6083
/* vec_msumc */
6084
6085
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
6086
static __inline__ vector unsigned __int128 __ATTRS_o_ai
6087
vec_msumc(vector unsigned long long __a, vector unsigned long long __b,
6088
vector unsigned __int128 __c) {
6089
return __builtin_altivec_vmsumcud(__a, __b, __c);
6090
}
6091
#endif
6092
6093
/* vec_vmsummbm */
6094
6095
static __inline__ vector int __attribute__((__always_inline__))
6096
vec_vmsummbm(vector signed char __a, vector unsigned char __b, vector int __c) {
6097
return __builtin_altivec_vmsummbm(__a, __b, __c);
6098
}
6099
6100
/* vec_vmsumubm */
6101
6102
static __inline__ vector unsigned int __attribute__((__always_inline__))
6103
vec_vmsumubm(vector unsigned char __a, vector unsigned char __b,
6104
vector unsigned int __c) {
6105
return __builtin_altivec_vmsumubm(__a, __b, __c);
6106
}
6107
6108
/* vec_vmsumshm */
6109
6110
static __inline__ vector int __attribute__((__always_inline__))
6111
vec_vmsumshm(vector short __a, vector short __b, vector int __c) {
6112
return __builtin_altivec_vmsumshm(__a, __b, __c);
6113
}
6114
6115
/* vec_vmsumuhm */
6116
6117
static __inline__ vector unsigned int __attribute__((__always_inline__))
6118
vec_vmsumuhm(vector unsigned short __a, vector unsigned short __b,
6119
vector unsigned int __c) {
6120
return __builtin_altivec_vmsumuhm(__a, __b, __c);
6121
}
6122
6123
/* vec_msums */
6124
6125
static __inline__ vector int __ATTRS_o_ai vec_msums(vector short __a,
6126
vector short __b,
6127
vector int __c) {
6128
return __builtin_altivec_vmsumshs(__a, __b, __c);
6129
}
6130
6131
static __inline__ vector unsigned int __ATTRS_o_ai
6132
vec_msums(vector unsigned short __a, vector unsigned short __b,
6133
vector unsigned int __c) {
6134
return __builtin_altivec_vmsumuhs(__a, __b, __c);
6135
}
6136
6137
/* vec_vmsumshs */
6138
6139
static __inline__ vector int __attribute__((__always_inline__))
6140
vec_vmsumshs(vector short __a, vector short __b, vector int __c) {
6141
return __builtin_altivec_vmsumshs(__a, __b, __c);
6142
}
6143
6144
/* vec_vmsumuhs */
6145
6146
static __inline__ vector unsigned int __attribute__((__always_inline__))
6147
vec_vmsumuhs(vector unsigned short __a, vector unsigned short __b,
6148
vector unsigned int __c) {
6149
return __builtin_altivec_vmsumuhs(__a, __b, __c);
6150
}
6151
6152
/* vec_mtvscr */
6153
6154
static __inline__ void __ATTRS_o_ai vec_mtvscr(vector signed char __a) {
6155
__builtin_altivec_mtvscr((vector int)__a);
6156
}
6157
6158
static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned char __a) {
6159
__builtin_altivec_mtvscr((vector int)__a);
6160
}
6161
6162
static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool char __a) {
6163
__builtin_altivec_mtvscr((vector int)__a);
6164
}
6165
6166
static __inline__ void __ATTRS_o_ai vec_mtvscr(vector short __a) {
6167
__builtin_altivec_mtvscr((vector int)__a);
6168
}
6169
6170
static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned short __a) {
6171
__builtin_altivec_mtvscr((vector int)__a);
6172
}
6173
6174
static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool short __a) {
6175
__builtin_altivec_mtvscr((vector int)__a);
6176
}
6177
6178
static __inline__ void __ATTRS_o_ai vec_mtvscr(vector pixel __a) {
6179
__builtin_altivec_mtvscr((vector int)__a);
6180
}
6181
6182
static __inline__ void __ATTRS_o_ai vec_mtvscr(vector int __a) {
6183
__builtin_altivec_mtvscr((vector int)__a);
6184
}
6185
6186
static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned int __a) {
6187
__builtin_altivec_mtvscr((vector int)__a);
6188
}
6189
6190
static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool int __a) {
6191
__builtin_altivec_mtvscr((vector int)__a);
6192
}
6193
6194
static __inline__ void __ATTRS_o_ai vec_mtvscr(vector float __a) {
6195
__builtin_altivec_mtvscr((vector int)__a);
6196
}
6197
6198
/* vec_mul */
6199
6200
/* Integer vector multiplication will involve multiplication of the odd/even
6201
elements separately, then truncating the results and moving to the
6202
result vector.
6203
*/
6204
static __inline__ vector signed char __ATTRS_o_ai
6205
vec_mul(vector signed char __a, vector signed char __b) {
6206
return __a * __b;
6207
}
6208
6209
static __inline__ vector unsigned char __ATTRS_o_ai
6210
vec_mul(vector unsigned char __a, vector unsigned char __b) {
6211
return __a * __b;
6212
}
6213
6214
static __inline__ vector signed short __ATTRS_o_ai
6215
vec_mul(vector signed short __a, vector signed short __b) {
6216
return __a * __b;
6217
}
6218
6219
static __inline__ vector unsigned short __ATTRS_o_ai
6220
vec_mul(vector unsigned short __a, vector unsigned short __b) {
6221
return __a * __b;
6222
}
6223
6224
static __inline__ vector signed int __ATTRS_o_ai
6225
vec_mul(vector signed int __a, vector signed int __b) {
6226
return __a * __b;
6227
}
6228
6229
static __inline__ vector unsigned int __ATTRS_o_ai
6230
vec_mul(vector unsigned int __a, vector unsigned int __b) {
6231
return __a * __b;
6232
}
6233
6234
#ifdef __VSX__
6235
static __inline__ vector signed long long __ATTRS_o_ai
6236
vec_mul(vector signed long long __a, vector signed long long __b) {
6237
return __a * __b;
6238
}
6239
6240
static __inline__ vector unsigned long long __ATTRS_o_ai
6241
vec_mul(vector unsigned long long __a, vector unsigned long long __b) {
6242
return __a * __b;
6243
}
6244
#endif
6245
6246
static __inline__ vector float __ATTRS_o_ai vec_mul(vector float __a,
6247
vector float __b) {
6248
return __a * __b;
6249
}
6250
6251
#ifdef __VSX__
6252
static __inline__ vector double __ATTRS_o_ai vec_mul(vector double __a,
6253
vector double __b) {
6254
return __a * __b;
6255
}
6256
#endif
6257
6258
/* The vmulos* and vmules* instructions have a big endian bias, so
6259
we must reverse the meaning of "even" and "odd" for little endian. */
6260
6261
/* vec_mule */
6262
6263
static __inline__ vector short __ATTRS_o_ai vec_mule(vector signed char __a,
6264
vector signed char __b) {
6265
#ifdef __LITTLE_ENDIAN__
6266
return __builtin_altivec_vmulosb(__a, __b);
6267
#else
6268
return __builtin_altivec_vmulesb(__a, __b);
6269
#endif
6270
}
6271
6272
static __inline__ vector unsigned short __ATTRS_o_ai
6273
vec_mule(vector unsigned char __a, vector unsigned char __b) {
6274
#ifdef __LITTLE_ENDIAN__
6275
return __builtin_altivec_vmuloub(__a, __b);
6276
#else
6277
return __builtin_altivec_vmuleub(__a, __b);
6278
#endif
6279
}
6280
6281
static __inline__ vector int __ATTRS_o_ai vec_mule(vector short __a,
6282
vector short __b) {
6283
#ifdef __LITTLE_ENDIAN__
6284
return __builtin_altivec_vmulosh(__a, __b);
6285
#else
6286
return __builtin_altivec_vmulesh(__a, __b);
6287
#endif
6288
}
6289
6290
static __inline__ vector unsigned int __ATTRS_o_ai
6291
vec_mule(vector unsigned short __a, vector unsigned short __b) {
6292
#ifdef __LITTLE_ENDIAN__
6293
return __builtin_altivec_vmulouh(__a, __b);
6294
#else
6295
return __builtin_altivec_vmuleuh(__a, __b);
6296
#endif
6297
}
6298
6299
#ifdef __POWER8_VECTOR__
6300
static __inline__ vector signed long long __ATTRS_o_ai
6301
vec_mule(vector signed int __a, vector signed int __b) {
6302
#ifdef __LITTLE_ENDIAN__
6303
return __builtin_altivec_vmulosw(__a, __b);
6304
#else
6305
return __builtin_altivec_vmulesw(__a, __b);
6306
#endif
6307
}
6308
6309
static __inline__ vector unsigned long long __ATTRS_o_ai
6310
vec_mule(vector unsigned int __a, vector unsigned int __b) {
6311
#ifdef __LITTLE_ENDIAN__
6312
return __builtin_altivec_vmulouw(__a, __b);
6313
#else
6314
return __builtin_altivec_vmuleuw(__a, __b);
6315
#endif
6316
}
6317
#endif
6318
6319
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
6320
static __inline__ vector signed __int128 __ATTRS_o_ai
6321
vec_mule(vector signed long long __a, vector signed long long __b) {
6322
#ifdef __LITTLE_ENDIAN__
6323
return __builtin_altivec_vmulosd(__a, __b);
6324
#else
6325
return __builtin_altivec_vmulesd(__a, __b);
6326
#endif
6327
}
6328
6329
static __inline__ vector unsigned __int128 __ATTRS_o_ai
6330
vec_mule(vector unsigned long long __a, vector unsigned long long __b) {
6331
#ifdef __LITTLE_ENDIAN__
6332
return __builtin_altivec_vmuloud(__a, __b);
6333
#else
6334
return __builtin_altivec_vmuleud(__a, __b);
6335
#endif
6336
}
6337
#endif
6338
6339
/* vec_vmulesb */
6340
6341
static __inline__ vector short __attribute__((__always_inline__))
6342
vec_vmulesb(vector signed char __a, vector signed char __b) {
6343
#ifdef __LITTLE_ENDIAN__
6344
return __builtin_altivec_vmulosb(__a, __b);
6345
#else
6346
return __builtin_altivec_vmulesb(__a, __b);
6347
#endif
6348
}
6349
6350
/* vec_vmuleub */
6351
6352
static __inline__ vector unsigned short __attribute__((__always_inline__))
6353
vec_vmuleub(vector unsigned char __a, vector unsigned char __b) {
6354
#ifdef __LITTLE_ENDIAN__
6355
return __builtin_altivec_vmuloub(__a, __b);
6356
#else
6357
return __builtin_altivec_vmuleub(__a, __b);
6358
#endif
6359
}
6360
6361
/* vec_vmulesh */
6362
6363
static __inline__ vector int __attribute__((__always_inline__))
6364
vec_vmulesh(vector short __a, vector short __b) {
6365
#ifdef __LITTLE_ENDIAN__
6366
return __builtin_altivec_vmulosh(__a, __b);
6367
#else
6368
return __builtin_altivec_vmulesh(__a, __b);
6369
#endif
6370
}
6371
6372
/* vec_vmuleuh */
6373
6374
static __inline__ vector unsigned int __attribute__((__always_inline__))
6375
vec_vmuleuh(vector unsigned short __a, vector unsigned short __b) {
6376
#ifdef __LITTLE_ENDIAN__
6377
return __builtin_altivec_vmulouh(__a, __b);
6378
#else
6379
return __builtin_altivec_vmuleuh(__a, __b);
6380
#endif
6381
}
6382
6383
/* vec_mulh */
6384
6385
#ifdef __POWER10_VECTOR__
6386
static __inline__ vector signed int __ATTRS_o_ai
6387
vec_mulh(vector signed int __a, vector signed int __b) {
6388
return __builtin_altivec_vmulhsw(__a, __b);
6389
}
6390
6391
static __inline__ vector unsigned int __ATTRS_o_ai
6392
vec_mulh(vector unsigned int __a, vector unsigned int __b) {
6393
return __builtin_altivec_vmulhuw(__a, __b);
6394
}
6395
6396
static __inline__ vector signed long long __ATTRS_o_ai
6397
vec_mulh(vector signed long long __a, vector signed long long __b) {
6398
return __builtin_altivec_vmulhsd(__a, __b);
6399
}
6400
6401
static __inline__ vector unsigned long long __ATTRS_o_ai
6402
vec_mulh(vector unsigned long long __a, vector unsigned long long __b) {
6403
return __builtin_altivec_vmulhud(__a, __b);
6404
}
6405
#endif
6406
6407
/* vec_mulo */
6408
6409
static __inline__ vector short __ATTRS_o_ai vec_mulo(vector signed char __a,
6410
vector signed char __b) {
6411
#ifdef __LITTLE_ENDIAN__
6412
return __builtin_altivec_vmulesb(__a, __b);
6413
#else
6414
return __builtin_altivec_vmulosb(__a, __b);
6415
#endif
6416
}
6417
6418
static __inline__ vector unsigned short __ATTRS_o_ai
6419
vec_mulo(vector unsigned char __a, vector unsigned char __b) {
6420
#ifdef __LITTLE_ENDIAN__
6421
return __builtin_altivec_vmuleub(__a, __b);
6422
#else
6423
return __builtin_altivec_vmuloub(__a, __b);
6424
#endif
6425
}
6426
6427
static __inline__ vector int __ATTRS_o_ai vec_mulo(vector short __a,
6428
vector short __b) {
6429
#ifdef __LITTLE_ENDIAN__
6430
return __builtin_altivec_vmulesh(__a, __b);
6431
#else
6432
return __builtin_altivec_vmulosh(__a, __b);
6433
#endif
6434
}
6435
6436
static __inline__ vector unsigned int __ATTRS_o_ai
6437
vec_mulo(vector unsigned short __a, vector unsigned short __b) {
6438
#ifdef __LITTLE_ENDIAN__
6439
return __builtin_altivec_vmuleuh(__a, __b);
6440
#else
6441
return __builtin_altivec_vmulouh(__a, __b);
6442
#endif
6443
}
6444
6445
#ifdef __POWER8_VECTOR__
6446
static __inline__ vector signed long long __ATTRS_o_ai
6447
vec_mulo(vector signed int __a, vector signed int __b) {
6448
#ifdef __LITTLE_ENDIAN__
6449
return __builtin_altivec_vmulesw(__a, __b);
6450
#else
6451
return __builtin_altivec_vmulosw(__a, __b);
6452
#endif
6453
}
6454
6455
static __inline__ vector unsigned long long __ATTRS_o_ai
6456
vec_mulo(vector unsigned int __a, vector unsigned int __b) {
6457
#ifdef __LITTLE_ENDIAN__
6458
return __builtin_altivec_vmuleuw(__a, __b);
6459
#else
6460
return __builtin_altivec_vmulouw(__a, __b);
6461
#endif
6462
}
6463
#endif
6464
6465
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
6466
static __inline__ vector signed __int128 __ATTRS_o_ai
6467
vec_mulo(vector signed long long __a, vector signed long long __b) {
6468
#ifdef __LITTLE_ENDIAN__
6469
return __builtin_altivec_vmulesd(__a, __b);
6470
#else
6471
return __builtin_altivec_vmulosd(__a, __b);
6472
#endif
6473
}
6474
6475
static __inline__ vector unsigned __int128 __ATTRS_o_ai
6476
vec_mulo(vector unsigned long long __a, vector unsigned long long __b) {
6477
#ifdef __LITTLE_ENDIAN__
6478
return __builtin_altivec_vmuleud(__a, __b);
6479
#else
6480
return __builtin_altivec_vmuloud(__a, __b);
6481
#endif
6482
}
6483
#endif
6484
6485
/* vec_vmulosb */
6486
6487
static __inline__ vector short __attribute__((__always_inline__))
6488
vec_vmulosb(vector signed char __a, vector signed char __b) {
6489
#ifdef __LITTLE_ENDIAN__
6490
return __builtin_altivec_vmulesb(__a, __b);
6491
#else
6492
return __builtin_altivec_vmulosb(__a, __b);
6493
#endif
6494
}
6495
6496
/* vec_vmuloub */
6497
6498
static __inline__ vector unsigned short __attribute__((__always_inline__))
6499
vec_vmuloub(vector unsigned char __a, vector unsigned char __b) {
6500
#ifdef __LITTLE_ENDIAN__
6501
return __builtin_altivec_vmuleub(__a, __b);
6502
#else
6503
return __builtin_altivec_vmuloub(__a, __b);
6504
#endif
6505
}
6506
6507
/* vec_vmulosh */
6508
6509
static __inline__ vector int __attribute__((__always_inline__))
6510
vec_vmulosh(vector short __a, vector short __b) {
6511
#ifdef __LITTLE_ENDIAN__
6512
return __builtin_altivec_vmulesh(__a, __b);
6513
#else
6514
return __builtin_altivec_vmulosh(__a, __b);
6515
#endif
6516
}
6517
6518
/* vec_vmulouh */
6519
6520
static __inline__ vector unsigned int __attribute__((__always_inline__))
6521
vec_vmulouh(vector unsigned short __a, vector unsigned short __b) {
6522
#ifdef __LITTLE_ENDIAN__
6523
return __builtin_altivec_vmuleuh(__a, __b);
6524
#else
6525
return __builtin_altivec_vmulouh(__a, __b);
6526
#endif
6527
}
6528
6529
/* vec_nand */
6530
6531
#ifdef __POWER8_VECTOR__
6532
static __inline__ vector signed char __ATTRS_o_ai
6533
vec_nand(vector signed char __a, vector signed char __b) {
6534
return ~(__a & __b);
6535
}
6536
6537
static __inline__ vector signed char __ATTRS_o_ai
6538
vec_nand(vector signed char __a, vector bool char __b) {
6539
return ~(__a & (vector signed char)__b);
6540
}
6541
6542
static __inline__ vector signed char __ATTRS_o_ai
6543
vec_nand(vector bool char __a, vector signed char __b) {
6544
return (vector signed char)~(__a & (vector bool char)__b);
6545
}
6546
6547
static __inline__ vector unsigned char __ATTRS_o_ai
6548
vec_nand(vector unsigned char __a, vector unsigned char __b) {
6549
return ~(__a & __b);
6550
}
6551
6552
static __inline__ vector unsigned char __ATTRS_o_ai
6553
vec_nand(vector unsigned char __a, vector bool char __b) {
6554
return ~(__a & (vector unsigned char)__b);
6555
}
6556
6557
static __inline__ vector unsigned char __ATTRS_o_ai
6558
vec_nand(vector bool char __a, vector unsigned char __b) {
6559
return (vector unsigned char)~(__a & (vector bool char)__b);
6560
}
6561
6562
static __inline__ vector bool char __ATTRS_o_ai vec_nand(vector bool char __a,
6563
vector bool char __b) {
6564
return ~(__a & __b);
6565
}
6566
6567
static __inline__ vector signed short __ATTRS_o_ai
6568
vec_nand(vector signed short __a, vector signed short __b) {
6569
return ~(__a & __b);
6570
}
6571
6572
static __inline__ vector signed short __ATTRS_o_ai
6573
vec_nand(vector signed short __a, vector bool short __b) {
6574
return ~(__a & (vector signed short)__b);
6575
}
6576
6577
static __inline__ vector signed short __ATTRS_o_ai
6578
vec_nand(vector bool short __a, vector signed short __b) {
6579
return (vector signed short)~(__a & (vector bool short)__b);
6580
}
6581
6582
static __inline__ vector unsigned short __ATTRS_o_ai
6583
vec_nand(vector unsigned short __a, vector unsigned short __b) {
6584
return ~(__a & __b);
6585
}
6586
6587
static __inline__ vector unsigned short __ATTRS_o_ai
6588
vec_nand(vector unsigned short __a, vector bool short __b) {
6589
return ~(__a & (vector unsigned short)__b);
6590
}
6591
6592
static __inline__ vector bool short __ATTRS_o_ai
6593
vec_nand(vector bool short __a, vector bool short __b) {
6594
return ~(__a & __b);
6595
}
6596
6597
static __inline__ vector signed int __ATTRS_o_ai
6598
vec_nand(vector signed int __a, vector signed int __b) {
6599
return ~(__a & __b);
6600
}
6601
6602
static __inline__ vector signed int __ATTRS_o_ai vec_nand(vector signed int __a,
6603
vector bool int __b) {
6604
return ~(__a & (vector signed int)__b);
6605
}
6606
6607
static __inline__ vector signed int __ATTRS_o_ai
6608
vec_nand(vector bool int __a, vector signed int __b) {
6609
return (vector signed int)~(__a & (vector bool int)__b);
6610
}
6611
6612
static __inline__ vector unsigned int __ATTRS_o_ai
6613
vec_nand(vector unsigned int __a, vector unsigned int __b) {
6614
return ~(__a & __b);
6615
}
6616
6617
static __inline__ vector unsigned int __ATTRS_o_ai
6618
vec_nand(vector unsigned int __a, vector bool int __b) {
6619
return ~(__a & (vector unsigned int)__b);
6620
}
6621
6622
static __inline__ vector unsigned int __ATTRS_o_ai
6623
vec_nand(vector bool int __a, vector unsigned int __b) {
6624
return (vector unsigned int)~(__a & (vector bool int)__b);
6625
}
6626
6627
static __inline__ vector bool int __ATTRS_o_ai vec_nand(vector bool int __a,
6628
vector bool int __b) {
6629
return ~(__a & __b);
6630
}
6631
6632
static __inline__ vector float __ATTRS_o_ai
6633
vec_nand(vector float __a, vector float __b) {
6634
return (vector float)(~((vector unsigned int)__a &
6635
(vector unsigned int)__b));
6636
}
6637
6638
static __inline__ vector signed long long __ATTRS_o_ai
6639
vec_nand(vector signed long long __a, vector signed long long __b) {
6640
return ~(__a & __b);
6641
}
6642
6643
static __inline__ vector signed long long __ATTRS_o_ai
6644
vec_nand(vector signed long long __a, vector bool long long __b) {
6645
return ~(__a & (vector signed long long)__b);
6646
}
6647
6648
static __inline__ vector signed long long __ATTRS_o_ai
6649
vec_nand(vector bool long long __a, vector signed long long __b) {
6650
return (vector signed long long)~(__a & (vector bool long long)__b);
6651
}
6652
6653
static __inline__ vector unsigned long long __ATTRS_o_ai
6654
vec_nand(vector unsigned long long __a, vector unsigned long long __b) {
6655
return ~(__a & __b);
6656
}
6657
6658
static __inline__ vector unsigned long long __ATTRS_o_ai
6659
vec_nand(vector unsigned long long __a, vector bool long long __b) {
6660
return ~(__a & (vector unsigned long long)__b);
6661
}
6662
6663
static __inline__ vector unsigned long long __ATTRS_o_ai
6664
vec_nand(vector bool long long __a, vector unsigned long long __b) {
6665
return (vector unsigned long long)~(__a & (vector bool long long)__b);
6666
}
6667
6668
static __inline__ vector bool long long __ATTRS_o_ai
6669
vec_nand(vector bool long long __a, vector bool long long __b) {
6670
return ~(__a & __b);
6671
}
6672
6673
static __inline__ vector double __ATTRS_o_ai
6674
vec_nand(vector double __a, vector double __b) {
6675
return (vector double)(~((vector unsigned long long)__a &
6676
(vector unsigned long long)__b));
6677
}
6678
6679
#endif
6680
6681
/* vec_nmadd */
6682
6683
#ifdef __VSX__
6684
static __inline__ vector float __ATTRS_o_ai vec_nmadd(vector float __a,
6685
vector float __b,
6686
vector float __c) {
6687
return __builtin_vsx_xvnmaddasp(__a, __b, __c);
6688
}
6689
6690
static __inline__ vector double __ATTRS_o_ai vec_nmadd(vector double __a,
6691
vector double __b,
6692
vector double __c) {
6693
return __builtin_vsx_xvnmaddadp(__a, __b, __c);
6694
}
6695
#endif
6696
6697
/* vec_nmsub */
6698
6699
static __inline__ vector float __ATTRS_o_ai vec_nmsub(vector float __a,
6700
vector float __b,
6701
vector float __c) {
6702
#ifdef __VSX__
6703
return __builtin_vsx_xvnmsubasp(__a, __b, __c);
6704
#else
6705
return __builtin_altivec_vnmsubfp(__a, __b, __c);
6706
#endif
6707
}
6708
6709
#ifdef __VSX__
6710
static __inline__ vector double __ATTRS_o_ai vec_nmsub(vector double __a,
6711
vector double __b,
6712
vector double __c) {
6713
return __builtin_vsx_xvnmsubadp(__a, __b, __c);
6714
}
6715
#endif
6716
6717
/* vec_vnmsubfp */
6718
6719
static __inline__ vector float __attribute__((__always_inline__))
6720
vec_vnmsubfp(vector float __a, vector float __b, vector float __c) {
6721
return __builtin_altivec_vnmsubfp(__a, __b, __c);
6722
}
6723
6724
/* vec_nor */
6725
6726
#define __builtin_altivec_vnor vec_nor
6727
6728
static __inline__ vector signed char __ATTRS_o_ai
6729
vec_nor(vector signed char __a, vector signed char __b) {
6730
return ~(__a | __b);
6731
}
6732
6733
static __inline__ vector unsigned char __ATTRS_o_ai
6734
vec_nor(vector unsigned char __a, vector unsigned char __b) {
6735
return ~(__a | __b);
6736
}
6737
6738
static __inline__ vector bool char __ATTRS_o_ai vec_nor(vector bool char __a,
6739
vector bool char __b) {
6740
return ~(__a | __b);
6741
}
6742
6743
static __inline__ vector short __ATTRS_o_ai vec_nor(vector short __a,
6744
vector short __b) {
6745
return ~(__a | __b);
6746
}
6747
6748
static __inline__ vector unsigned short __ATTRS_o_ai
6749
vec_nor(vector unsigned short __a, vector unsigned short __b) {
6750
return ~(__a | __b);
6751
}
6752
6753
static __inline__ vector bool short __ATTRS_o_ai
6754
vec_nor(vector bool short __a, vector bool short __b) {
6755
return ~(__a | __b);
6756
}
6757
6758
static __inline__ vector int __ATTRS_o_ai vec_nor(vector int __a,
6759
vector int __b) {
6760
return ~(__a | __b);
6761
}
6762
6763
static __inline__ vector unsigned int __ATTRS_o_ai
6764
vec_nor(vector unsigned int __a, vector unsigned int __b) {
6765
return ~(__a | __b);
6766
}
6767
6768
static __inline__ vector bool int __ATTRS_o_ai vec_nor(vector bool int __a,
6769
vector bool int __b) {
6770
return ~(__a | __b);
6771
}
6772
6773
static __inline__ vector float __ATTRS_o_ai vec_nor(vector float __a,
6774
vector float __b) {
6775
vector unsigned int __res =
6776
~((vector unsigned int)__a | (vector unsigned int)__b);
6777
return (vector float)__res;
6778
}
6779
6780
#ifdef __VSX__
6781
static __inline__ vector double __ATTRS_o_ai vec_nor(vector double __a,
6782
vector double __b) {
6783
vector unsigned long long __res =
6784
~((vector unsigned long long)__a | (vector unsigned long long)__b);
6785
return (vector double)__res;
6786
}
6787
#endif
6788
6789
/* vec_vnor */
6790
6791
static __inline__ vector signed char __ATTRS_o_ai
6792
vec_vnor(vector signed char __a, vector signed char __b) {
6793
return ~(__a | __b);
6794
}
6795
6796
static __inline__ vector unsigned char __ATTRS_o_ai
6797
vec_vnor(vector unsigned char __a, vector unsigned char __b) {
6798
return ~(__a | __b);
6799
}
6800
6801
static __inline__ vector bool char __ATTRS_o_ai vec_vnor(vector bool char __a,
6802
vector bool char __b) {
6803
return ~(__a | __b);
6804
}
6805
6806
static __inline__ vector short __ATTRS_o_ai vec_vnor(vector short __a,
6807
vector short __b) {
6808
return ~(__a | __b);
6809
}
6810
6811
static __inline__ vector unsigned short __ATTRS_o_ai
6812
vec_vnor(vector unsigned short __a, vector unsigned short __b) {
6813
return ~(__a | __b);
6814
}
6815
6816
static __inline__ vector bool short __ATTRS_o_ai
6817
vec_vnor(vector bool short __a, vector bool short __b) {
6818
return ~(__a | __b);
6819
}
6820
6821
static __inline__ vector int __ATTRS_o_ai vec_vnor(vector int __a,
6822
vector int __b) {
6823
return ~(__a | __b);
6824
}
6825
6826
static __inline__ vector unsigned int __ATTRS_o_ai
6827
vec_vnor(vector unsigned int __a, vector unsigned int __b) {
6828
return ~(__a | __b);
6829
}
6830
6831
static __inline__ vector bool int __ATTRS_o_ai vec_vnor(vector bool int __a,
6832
vector bool int __b) {
6833
return ~(__a | __b);
6834
}
6835
6836
static __inline__ vector float __ATTRS_o_ai vec_vnor(vector float __a,
6837
vector float __b) {
6838
vector unsigned int __res =
6839
~((vector unsigned int)__a | (vector unsigned int)__b);
6840
return (vector float)__res;
6841
}
6842
6843
#ifdef __VSX__
6844
static __inline__ vector signed long long __ATTRS_o_ai
6845
vec_nor(vector signed long long __a, vector signed long long __b) {
6846
return ~(__a | __b);
6847
}
6848
6849
static __inline__ vector unsigned long long __ATTRS_o_ai
6850
vec_nor(vector unsigned long long __a, vector unsigned long long __b) {
6851
return ~(__a | __b);
6852
}
6853
6854
static __inline__ vector bool long long __ATTRS_o_ai
6855
vec_nor(vector bool long long __a, vector bool long long __b) {
6856
return ~(__a | __b);
6857
}
6858
#endif
6859
6860
/* vec_or */
6861
6862
#define __builtin_altivec_vor vec_or
6863
6864
static __inline__ vector signed char __ATTRS_o_ai
6865
vec_or(vector signed char __a, vector signed char __b) {
6866
return __a | __b;
6867
}
6868
6869
static __inline__ vector signed char __ATTRS_o_ai
6870
vec_or(vector bool char __a, vector signed char __b) {
6871
return (vector signed char)__a | __b;
6872
}
6873
6874
static __inline__ vector signed char __ATTRS_o_ai vec_or(vector signed char __a,
6875
vector bool char __b) {
6876
return __a | (vector signed char)__b;
6877
}
6878
6879
static __inline__ vector unsigned char __ATTRS_o_ai
6880
vec_or(vector unsigned char __a, vector unsigned char __b) {
6881
return __a | __b;
6882
}
6883
6884
static __inline__ vector unsigned char __ATTRS_o_ai
6885
vec_or(vector bool char __a, vector unsigned char __b) {
6886
return (vector unsigned char)__a | __b;
6887
}
6888
6889
static __inline__ vector unsigned char __ATTRS_o_ai
6890
vec_or(vector unsigned char __a, vector bool char __b) {
6891
return __a | (vector unsigned char)__b;
6892
}
6893
6894
static __inline__ vector bool char __ATTRS_o_ai vec_or(vector bool char __a,
6895
vector bool char __b) {
6896
return __a | __b;
6897
}
6898
6899
static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
6900
vector short __b) {
6901
return __a | __b;
6902
}
6903
6904
static __inline__ vector short __ATTRS_o_ai vec_or(vector bool short __a,
6905
vector short __b) {
6906
return (vector short)__a | __b;
6907
}
6908
6909
static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
6910
vector bool short __b) {
6911
return __a | (vector short)__b;
6912
}
6913
6914
static __inline__ vector unsigned short __ATTRS_o_ai
6915
vec_or(vector unsigned short __a, vector unsigned short __b) {
6916
return __a | __b;
6917
}
6918
6919
static __inline__ vector unsigned short __ATTRS_o_ai
6920
vec_or(vector bool short __a, vector unsigned short __b) {
6921
return (vector unsigned short)__a | __b;
6922
}
6923
6924
static __inline__ vector unsigned short __ATTRS_o_ai
6925
vec_or(vector unsigned short __a, vector bool short __b) {
6926
return __a | (vector unsigned short)__b;
6927
}
6928
6929
static __inline__ vector bool short __ATTRS_o_ai vec_or(vector bool short __a,
6930
vector bool short __b) {
6931
return __a | __b;
6932
}
6933
6934
static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
6935
vector int __b) {
6936
return __a | __b;
6937
}
6938
6939
static __inline__ vector int __ATTRS_o_ai vec_or(vector bool int __a,
6940
vector int __b) {
6941
return (vector int)__a | __b;
6942
}
6943
6944
static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
6945
vector bool int __b) {
6946
return __a | (vector int)__b;
6947
}
6948
6949
static __inline__ vector unsigned int __ATTRS_o_ai
6950
vec_or(vector unsigned int __a, vector unsigned int __b) {
6951
return __a | __b;
6952
}
6953
6954
static __inline__ vector unsigned int __ATTRS_o_ai
6955
vec_or(vector bool int __a, vector unsigned int __b) {
6956
return (vector unsigned int)__a | __b;
6957
}
6958
6959
static __inline__ vector unsigned int __ATTRS_o_ai
6960
vec_or(vector unsigned int __a, vector bool int __b) {
6961
return __a | (vector unsigned int)__b;
6962
}
6963
6964
static __inline__ vector bool int __ATTRS_o_ai vec_or(vector bool int __a,
6965
vector bool int __b) {
6966
return __a | __b;
6967
}
6968
6969
static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
6970
vector float __b) {
6971
vector unsigned int __res =
6972
(vector unsigned int)__a | (vector unsigned int)__b;
6973
return (vector float)__res;
6974
}
6975
6976
static __inline__ vector float __ATTRS_o_ai vec_or(vector bool int __a,
6977
vector float __b) {
6978
vector unsigned int __res =
6979
(vector unsigned int)__a | (vector unsigned int)__b;
6980
return (vector float)__res;
6981
}
6982
6983
static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
6984
vector bool int __b) {
6985
vector unsigned int __res =
6986
(vector unsigned int)__a | (vector unsigned int)__b;
6987
return (vector float)__res;
6988
}
6989
6990
#ifdef __VSX__
6991
static __inline__ vector double __ATTRS_o_ai vec_or(vector bool long long __a,
6992
vector double __b) {
6993
return (vector double)((vector unsigned long long)__a |
6994
(vector unsigned long long)__b);
6995
}
6996
6997
static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,
6998
vector bool long long __b) {
6999
return (vector double)((vector unsigned long long)__a |
7000
(vector unsigned long long)__b);
7001
}
7002
7003
static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,
7004
vector double __b) {
7005
return (vector double)((vector unsigned long long)__a |
7006
(vector unsigned long long)__b);
7007
}
7008
7009
static __inline__ vector signed long long __ATTRS_o_ai
7010
vec_or(vector signed long long __a, vector signed long long __b) {
7011
return __a | __b;
7012
}
7013
7014
static __inline__ vector signed long long __ATTRS_o_ai
7015
vec_or(vector bool long long __a, vector signed long long __b) {
7016
return (vector signed long long)__a | __b;
7017
}
7018
7019
static __inline__ vector signed long long __ATTRS_o_ai
7020
vec_or(vector signed long long __a, vector bool long long __b) {
7021
return __a | (vector signed long long)__b;
7022
}
7023
7024
static __inline__ vector unsigned long long __ATTRS_o_ai
7025
vec_or(vector unsigned long long __a, vector unsigned long long __b) {
7026
return __a | __b;
7027
}
7028
7029
static __inline__ vector unsigned long long __ATTRS_o_ai
7030
vec_or(vector bool long long __a, vector unsigned long long __b) {
7031
return (vector unsigned long long)__a | __b;
7032
}
7033
7034
static __inline__ vector unsigned long long __ATTRS_o_ai
7035
vec_or(vector unsigned long long __a, vector bool long long __b) {
7036
return __a | (vector unsigned long long)__b;
7037
}
7038
7039
static __inline__ vector bool long long __ATTRS_o_ai
7040
vec_or(vector bool long long __a, vector bool long long __b) {
7041
return __a | __b;
7042
}
7043
#endif
7044
7045
#ifdef __POWER8_VECTOR__
7046
static __inline__ vector signed char __ATTRS_o_ai
7047
vec_orc(vector signed char __a, vector signed char __b) {
7048
return __a | ~__b;
7049
}
7050
7051
static __inline__ vector signed char __ATTRS_o_ai
7052
vec_orc(vector signed char __a, vector bool char __b) {
7053
return __a | (vector signed char)~__b;
7054
}
7055
7056
static __inline__ vector signed char __ATTRS_o_ai
7057
vec_orc(vector bool char __a, vector signed char __b) {
7058
return (vector signed char)(__a | (vector bool char)~__b);
7059
}
7060
7061
static __inline__ vector unsigned char __ATTRS_o_ai
7062
vec_orc(vector unsigned char __a, vector unsigned char __b) {
7063
return __a | ~__b;
7064
}
7065
7066
static __inline__ vector unsigned char __ATTRS_o_ai
7067
vec_orc(vector unsigned char __a, vector bool char __b) {
7068
return __a | (vector unsigned char)~__b;
7069
}
7070
7071
static __inline__ vector unsigned char __ATTRS_o_ai
7072
vec_orc(vector bool char __a, vector unsigned char __b) {
7073
return (vector unsigned char)(__a | (vector bool char)~__b);
7074
}
7075
7076
static __inline__ vector bool char __ATTRS_o_ai vec_orc(vector bool char __a,
7077
vector bool char __b) {
7078
return __a | ~__b;
7079
}
7080
7081
static __inline__ vector signed short __ATTRS_o_ai
7082
vec_orc(vector signed short __a, vector signed short __b) {
7083
return __a | ~__b;
7084
}
7085
7086
static __inline__ vector signed short __ATTRS_o_ai
7087
vec_orc(vector signed short __a, vector bool short __b) {
7088
return __a | (vector signed short)~__b;
7089
}
7090
7091
static __inline__ vector signed short __ATTRS_o_ai
7092
vec_orc(vector bool short __a, vector signed short __b) {
7093
return (vector signed short)(__a | (vector bool short)~__b);
7094
}
7095
7096
static __inline__ vector unsigned short __ATTRS_o_ai
7097
vec_orc(vector unsigned short __a, vector unsigned short __b) {
7098
return __a | ~__b;
7099
}
7100
7101
static __inline__ vector unsigned short __ATTRS_o_ai
7102
vec_orc(vector unsigned short __a, vector bool short __b) {
7103
return __a | (vector unsigned short)~__b;
7104
}
7105
7106
static __inline__ vector unsigned short __ATTRS_o_ai
7107
vec_orc(vector bool short __a, vector unsigned short __b) {
7108
return (vector unsigned short)(__a | (vector bool short)~__b);
7109
}
7110
7111
static __inline__ vector bool short __ATTRS_o_ai
7112
vec_orc(vector bool short __a, vector bool short __b) {
7113
return __a | ~__b;
7114
}
7115
7116
static __inline__ vector signed int __ATTRS_o_ai
7117
vec_orc(vector signed int __a, vector signed int __b) {
7118
return __a | ~__b;
7119
}
7120
7121
static __inline__ vector signed int __ATTRS_o_ai vec_orc(vector signed int __a,
7122
vector bool int __b) {
7123
return __a | (vector signed int)~__b;
7124
}
7125
7126
static __inline__ vector signed int __ATTRS_o_ai
7127
vec_orc(vector bool int __a, vector signed int __b) {
7128
return (vector signed int)(__a | (vector bool int)~__b);
7129
}
7130
7131
static __inline__ vector unsigned int __ATTRS_o_ai
7132
vec_orc(vector unsigned int __a, vector unsigned int __b) {
7133
return __a | ~__b;
7134
}
7135
7136
static __inline__ vector unsigned int __ATTRS_o_ai
7137
vec_orc(vector unsigned int __a, vector bool int __b) {
7138
return __a | (vector unsigned int)~__b;
7139
}
7140
7141
static __inline__ vector unsigned int __ATTRS_o_ai
7142
vec_orc(vector bool int __a, vector unsigned int __b) {
7143
return (vector unsigned int)(__a | (vector bool int)~__b);
7144
}
7145
7146
static __inline__ vector bool int __ATTRS_o_ai vec_orc(vector bool int __a,
7147
vector bool int __b) {
7148
return __a | ~__b;
7149
}
7150
7151
static __inline__ vector float __ATTRS_o_ai
7152
vec_orc(vector bool int __a, vector float __b) {
7153
return (vector float)(__a | ~(vector bool int)__b);
7154
}
7155
7156
static __inline__ vector float __ATTRS_o_ai
7157
vec_orc(vector float __a, vector bool int __b) {
7158
return (vector float)((vector bool int)__a | ~__b);
7159
}
7160
7161
static __inline__ vector float __ATTRS_o_ai vec_orc(vector float __a,
7162
vector float __b) {
7163
return (vector float)((vector unsigned int)__a | ~(vector unsigned int)__b);
7164
}
7165
7166
static __inline__ vector signed long long __ATTRS_o_ai
7167
vec_orc(vector signed long long __a, vector signed long long __b) {
7168
return __a | ~__b;
7169
}
7170
7171
static __inline__ vector signed long long __ATTRS_o_ai
7172
vec_orc(vector signed long long __a, vector bool long long __b) {
7173
return __a | (vector signed long long)~__b;
7174
}
7175
7176
static __inline__ vector signed long long __ATTRS_o_ai
7177
vec_orc(vector bool long long __a, vector signed long long __b) {
7178
return (vector signed long long)(__a | (vector bool long long)~__b);
7179
}
7180
7181
static __inline__ vector unsigned long long __ATTRS_o_ai
7182
vec_orc(vector unsigned long long __a, vector unsigned long long __b) {
7183
return __a | ~__b;
7184
}
7185
7186
static __inline__ vector unsigned long long __ATTRS_o_ai
7187
vec_orc(vector unsigned long long __a, vector bool long long __b) {
7188
return __a | (vector unsigned long long)~__b;
7189
}
7190
7191
static __inline__ vector unsigned long long __ATTRS_o_ai
7192
vec_orc(vector bool long long __a, vector unsigned long long __b) {
7193
return (vector unsigned long long)(__a | (vector bool long long)~__b);
7194
}
7195
7196
static __inline__ vector bool long long __ATTRS_o_ai
7197
vec_orc(vector bool long long __a, vector bool long long __b) {
7198
return __a | ~__b;
7199
}
7200
7201
static __inline__ vector double __ATTRS_o_ai
7202
vec_orc(vector double __a, vector bool long long __b) {
7203
return (vector double)((vector bool long long)__a | ~__b);
7204
}
7205
7206
static __inline__ vector double __ATTRS_o_ai
7207
vec_orc(vector bool long long __a, vector double __b) {
7208
return (vector double)(__a | ~(vector bool long long)__b);
7209
}
7210
7211
static __inline__ vector double __ATTRS_o_ai vec_orc(vector double __a,
7212
vector double __b) {
7213
return (vector double)((vector unsigned long long)__a |
7214
~(vector unsigned long long)__b);
7215
}
7216
#endif
7217
7218
/* vec_vor */
7219
7220
static __inline__ vector signed char __ATTRS_o_ai
7221
vec_vor(vector signed char __a, vector signed char __b) {
7222
return __a | __b;
7223
}
7224
7225
static __inline__ vector signed char __ATTRS_o_ai
7226
vec_vor(vector bool char __a, vector signed char __b) {
7227
return (vector signed char)__a | __b;
7228
}
7229
7230
static __inline__ vector signed char __ATTRS_o_ai
7231
vec_vor(vector signed char __a, vector bool char __b) {
7232
return __a | (vector signed char)__b;
7233
}
7234
7235
static __inline__ vector unsigned char __ATTRS_o_ai
7236
vec_vor(vector unsigned char __a, vector unsigned char __b) {
7237
return __a | __b;
7238
}
7239
7240
static __inline__ vector unsigned char __ATTRS_o_ai
7241
vec_vor(vector bool char __a, vector unsigned char __b) {
7242
return (vector unsigned char)__a | __b;
7243
}
7244
7245
static __inline__ vector unsigned char __ATTRS_o_ai
7246
vec_vor(vector unsigned char __a, vector bool char __b) {
7247
return __a | (vector unsigned char)__b;
7248
}
7249
7250
static __inline__ vector bool char __ATTRS_o_ai vec_vor(vector bool char __a,
7251
vector bool char __b) {
7252
return __a | __b;
7253
}
7254
7255
static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
7256
vector short __b) {
7257
return __a | __b;
7258
}
7259
7260
static __inline__ vector short __ATTRS_o_ai vec_vor(vector bool short __a,
7261
vector short __b) {
7262
return (vector short)__a | __b;
7263
}
7264
7265
static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
7266
vector bool short __b) {
7267
return __a | (vector short)__b;
7268
}
7269
7270
static __inline__ vector unsigned short __ATTRS_o_ai
7271
vec_vor(vector unsigned short __a, vector unsigned short __b) {
7272
return __a | __b;
7273
}
7274
7275
static __inline__ vector unsigned short __ATTRS_o_ai
7276
vec_vor(vector bool short __a, vector unsigned short __b) {
7277
return (vector unsigned short)__a | __b;
7278
}
7279
7280
static __inline__ vector unsigned short __ATTRS_o_ai
7281
vec_vor(vector unsigned short __a, vector bool short __b) {
7282
return __a | (vector unsigned short)__b;
7283
}
7284
7285
static __inline__ vector bool short __ATTRS_o_ai
7286
vec_vor(vector bool short __a, vector bool short __b) {
7287
return __a | __b;
7288
}
7289
7290
static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
7291
vector int __b) {
7292
return __a | __b;
7293
}
7294
7295
static __inline__ vector int __ATTRS_o_ai vec_vor(vector bool int __a,
7296
vector int __b) {
7297
return (vector int)__a | __b;
7298
}
7299
7300
static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
7301
vector bool int __b) {
7302
return __a | (vector int)__b;
7303
}
7304
7305
static __inline__ vector unsigned int __ATTRS_o_ai
7306
vec_vor(vector unsigned int __a, vector unsigned int __b) {
7307
return __a | __b;
7308
}
7309
7310
static __inline__ vector unsigned int __ATTRS_o_ai
7311
vec_vor(vector bool int __a, vector unsigned int __b) {
7312
return (vector unsigned int)__a | __b;
7313
}
7314
7315
static __inline__ vector unsigned int __ATTRS_o_ai
7316
vec_vor(vector unsigned int __a, vector bool int __b) {
7317
return __a | (vector unsigned int)__b;
7318
}
7319
7320
static __inline__ vector bool int __ATTRS_o_ai vec_vor(vector bool int __a,
7321
vector bool int __b) {
7322
return __a | __b;
7323
}
7324
7325
static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
7326
vector float __b) {
7327
vector unsigned int __res =
7328
(vector unsigned int)__a | (vector unsigned int)__b;
7329
return (vector float)__res;
7330
}
7331
7332
static __inline__ vector float __ATTRS_o_ai vec_vor(vector bool int __a,
7333
vector float __b) {
7334
vector unsigned int __res =
7335
(vector unsigned int)__a | (vector unsigned int)__b;
7336
return (vector float)__res;
7337
}
7338
7339
static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
7340
vector bool int __b) {
7341
vector unsigned int __res =
7342
(vector unsigned int)__a | (vector unsigned int)__b;
7343
return (vector float)__res;
7344
}
7345
7346
#ifdef __VSX__
7347
static __inline__ vector signed long long __ATTRS_o_ai
7348
vec_vor(vector signed long long __a, vector signed long long __b) {
7349
return __a | __b;
7350
}
7351
7352
static __inline__ vector signed long long __ATTRS_o_ai
7353
vec_vor(vector bool long long __a, vector signed long long __b) {
7354
return (vector signed long long)__a | __b;
7355
}
7356
7357
static __inline__ vector signed long long __ATTRS_o_ai
7358
vec_vor(vector signed long long __a, vector bool long long __b) {
7359
return __a | (vector signed long long)__b;
7360
}
7361
7362
static __inline__ vector unsigned long long __ATTRS_o_ai
7363
vec_vor(vector unsigned long long __a, vector unsigned long long __b) {
7364
return __a | __b;
7365
}
7366
7367
static __inline__ vector unsigned long long __ATTRS_o_ai
7368
vec_vor(vector bool long long __a, vector unsigned long long __b) {
7369
return (vector unsigned long long)__a | __b;
7370
}
7371
7372
static __inline__ vector unsigned long long __ATTRS_o_ai
7373
vec_vor(vector unsigned long long __a, vector bool long long __b) {
7374
return __a | (vector unsigned long long)__b;
7375
}
7376
7377
static __inline__ vector bool long long __ATTRS_o_ai
7378
vec_vor(vector bool long long __a, vector bool long long __b) {
7379
return __a | __b;
7380
}
7381
#endif
7382
7383
/* vec_pack */
7384
7385
/* The various vector pack instructions have a big-endian bias, so for
7386
little endian we must handle reversed element numbering. */
7387
7388
static __inline__ vector signed char __ATTRS_o_ai
7389
vec_pack(vector signed short __a, vector signed short __b) {
7390
#ifdef __LITTLE_ENDIAN__
7391
return (vector signed char)vec_perm(
7392
__a, __b,
7393
(vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7394
0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7395
#else
7396
return (vector signed char)vec_perm(
7397
__a, __b,
7398
(vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7399
0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7400
#endif
7401
}
7402
7403
static __inline__ vector unsigned char __ATTRS_o_ai
7404
vec_pack(vector unsigned short __a, vector unsigned short __b) {
7405
#ifdef __LITTLE_ENDIAN__
7406
return (vector unsigned char)vec_perm(
7407
__a, __b,
7408
(vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7409
0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7410
#else
7411
return (vector unsigned char)vec_perm(
7412
__a, __b,
7413
(vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7414
0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7415
#endif
7416
}
7417
7418
static __inline__ vector bool char __ATTRS_o_ai
7419
vec_pack(vector bool short __a, vector bool short __b) {
7420
#ifdef __LITTLE_ENDIAN__
7421
return (vector bool char)vec_perm(
7422
__a, __b,
7423
(vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7424
0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7425
#else
7426
return (vector bool char)vec_perm(
7427
__a, __b,
7428
(vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7429
0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7430
#endif
7431
}
7432
7433
static __inline__ vector short __ATTRS_o_ai vec_pack(vector int __a,
7434
vector int __b) {
7435
#ifdef __LITTLE_ENDIAN__
7436
return (vector short)vec_perm(
7437
__a, __b,
7438
(vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7439
0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7440
#else
7441
return (vector short)vec_perm(
7442
__a, __b,
7443
(vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7444
0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7445
#endif
7446
}
7447
7448
static __inline__ vector unsigned short __ATTRS_o_ai
7449
vec_pack(vector unsigned int __a, vector unsigned int __b) {
7450
#ifdef __LITTLE_ENDIAN__
7451
return (vector unsigned short)vec_perm(
7452
__a, __b,
7453
(vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7454
0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7455
#else
7456
return (vector unsigned short)vec_perm(
7457
__a, __b,
7458
(vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7459
0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7460
#endif
7461
}
7462
7463
static __inline__ vector bool short __ATTRS_o_ai vec_pack(vector bool int __a,
7464
vector bool int __b) {
7465
#ifdef __LITTLE_ENDIAN__
7466
return (vector bool short)vec_perm(
7467
__a, __b,
7468
(vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7469
0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7470
#else
7471
return (vector bool short)vec_perm(
7472
__a, __b,
7473
(vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7474
0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7475
#endif
7476
}
7477
7478
#ifdef __VSX__
7479
static __inline__ vector signed int __ATTRS_o_ai
7480
vec_pack(vector signed long long __a, vector signed long long __b) {
7481
#ifdef __LITTLE_ENDIAN__
7482
return (vector signed int)vec_perm(
7483
__a, __b,
7484
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7485
0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7486
#else
7487
return (vector signed int)vec_perm(
7488
__a, __b,
7489
(vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7490
0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7491
#endif
7492
}
7493
static __inline__ vector unsigned int __ATTRS_o_ai
7494
vec_pack(vector unsigned long long __a, vector unsigned long long __b) {
7495
#ifdef __LITTLE_ENDIAN__
7496
return (vector unsigned int)vec_perm(
7497
__a, __b,
7498
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7499
0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7500
#else
7501
return (vector unsigned int)vec_perm(
7502
__a, __b,
7503
(vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7504
0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7505
#endif
7506
}
7507
7508
static __inline__ vector bool int __ATTRS_o_ai
7509
vec_pack(vector bool long long __a, vector bool long long __b) {
7510
#ifdef __LITTLE_ENDIAN__
7511
return (vector bool int)vec_perm(
7512
__a, __b,
7513
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7514
0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7515
#else
7516
return (vector bool int)vec_perm(
7517
__a, __b,
7518
(vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7519
0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7520
#endif
7521
}
7522
7523
static __inline__ vector float __ATTRS_o_ai
7524
vec_pack(vector double __a, vector double __b) {
7525
return (vector float) (__a[0], __a[1], __b[0], __b[1]);
7526
}
7527
#endif
7528
7529
#ifdef __POWER9_VECTOR__
7530
static __inline__ vector unsigned short __ATTRS_o_ai
7531
vec_pack_to_short_fp32(vector float __a, vector float __b) {
7532
vector float __resa = __builtin_vsx_xvcvsphp(__a);
7533
vector float __resb = __builtin_vsx_xvcvsphp(__b);
7534
#ifdef __LITTLE_ENDIAN__
7535
return (vector unsigned short)vec_mergee(__resa, __resb);
7536
#else
7537
return (vector unsigned short)vec_mergeo(__resa, __resb);
7538
#endif
7539
}
7540
7541
#endif
7542
/* vec_vpkuhum */
7543
7544
#define __builtin_altivec_vpkuhum vec_vpkuhum
7545
7546
static __inline__ vector signed char __ATTRS_o_ai
7547
vec_vpkuhum(vector signed short __a, vector signed short __b) {
7548
#ifdef __LITTLE_ENDIAN__
7549
return (vector signed char)vec_perm(
7550
__a, __b,
7551
(vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7552
0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7553
#else
7554
return (vector signed char)vec_perm(
7555
__a, __b,
7556
(vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7557
0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7558
#endif
7559
}
7560
7561
static __inline__ vector unsigned char __ATTRS_o_ai
7562
vec_vpkuhum(vector unsigned short __a, vector unsigned short __b) {
7563
#ifdef __LITTLE_ENDIAN__
7564
return (vector unsigned char)vec_perm(
7565
__a, __b,
7566
(vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7567
0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7568
#else
7569
return (vector unsigned char)vec_perm(
7570
__a, __b,
7571
(vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7572
0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7573
#endif
7574
}
7575
7576
static __inline__ vector bool char __ATTRS_o_ai
7577
vec_vpkuhum(vector bool short __a, vector bool short __b) {
7578
#ifdef __LITTLE_ENDIAN__
7579
return (vector bool char)vec_perm(
7580
__a, __b,
7581
(vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7582
0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7583
#else
7584
return (vector bool char)vec_perm(
7585
__a, __b,
7586
(vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7587
0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7588
#endif
7589
}
7590
7591
/* vec_vpkuwum */
7592
7593
#define __builtin_altivec_vpkuwum vec_vpkuwum
7594
7595
static __inline__ vector short __ATTRS_o_ai vec_vpkuwum(vector int __a,
7596
vector int __b) {
7597
#ifdef __LITTLE_ENDIAN__
7598
return (vector short)vec_perm(
7599
__a, __b,
7600
(vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7601
0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7602
#else
7603
return (vector short)vec_perm(
7604
__a, __b,
7605
(vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7606
0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7607
#endif
7608
}
7609
7610
static __inline__ vector unsigned short __ATTRS_o_ai
7611
vec_vpkuwum(vector unsigned int __a, vector unsigned int __b) {
7612
#ifdef __LITTLE_ENDIAN__
7613
return (vector unsigned short)vec_perm(
7614
__a, __b,
7615
(vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7616
0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7617
#else
7618
return (vector unsigned short)vec_perm(
7619
__a, __b,
7620
(vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7621
0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7622
#endif
7623
}
7624
7625
static __inline__ vector bool short __ATTRS_o_ai
7626
vec_vpkuwum(vector bool int __a, vector bool int __b) {
7627
#ifdef __LITTLE_ENDIAN__
7628
return (vector bool short)vec_perm(
7629
__a, __b,
7630
(vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7631
0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7632
#else
7633
return (vector bool short)vec_perm(
7634
__a, __b,
7635
(vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7636
0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7637
#endif
7638
}
7639
7640
/* vec_vpkudum */
7641
7642
#ifdef __POWER8_VECTOR__
7643
#define __builtin_altivec_vpkudum vec_vpkudum
7644
7645
static __inline__ vector int __ATTRS_o_ai vec_vpkudum(vector long long __a,
7646
vector long long __b) {
7647
#ifdef __LITTLE_ENDIAN__
7648
return (vector int)vec_perm(
7649
__a, __b,
7650
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7651
0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7652
#else
7653
return (vector int)vec_perm(
7654
__a, __b,
7655
(vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7656
0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7657
#endif
7658
}
7659
7660
static __inline__ vector unsigned int __ATTRS_o_ai
7661
vec_vpkudum(vector unsigned long long __a, vector unsigned long long __b) {
7662
#ifdef __LITTLE_ENDIAN__
7663
return (vector unsigned int)vec_perm(
7664
__a, __b,
7665
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7666
0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7667
#else
7668
return (vector unsigned int)vec_perm(
7669
__a, __b,
7670
(vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7671
0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7672
#endif
7673
}
7674
7675
static __inline__ vector bool int __ATTRS_o_ai
7676
vec_vpkudum(vector bool long long __a, vector bool long long __b) {
7677
#ifdef __LITTLE_ENDIAN__
7678
return (vector bool int)vec_perm(
7679
(vector long long)__a, (vector long long)__b,
7680
(vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7681
0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7682
#else
7683
return (vector bool int)vec_perm(
7684
(vector long long)__a, (vector long long)__b,
7685
(vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7686
0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7687
#endif
7688
}
7689
#endif
7690
7691
/* vec_packpx */
7692
7693
static __inline__ vector pixel __attribute__((__always_inline__))
7694
vec_packpx(vector unsigned int __a, vector unsigned int __b) {
7695
#ifdef __LITTLE_ENDIAN__
7696
return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
7697
#else
7698
return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
7699
#endif
7700
}
7701
7702
/* vec_vpkpx */
7703
7704
static __inline__ vector pixel __attribute__((__always_inline__))
7705
vec_vpkpx(vector unsigned int __a, vector unsigned int __b) {
7706
#ifdef __LITTLE_ENDIAN__
7707
return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
7708
#else
7709
return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
7710
#endif
7711
}
7712
7713
/* vec_packs */
7714
7715
static __inline__ vector signed char __ATTRS_o_ai vec_packs(vector short __a,
7716
vector short __b) {
7717
#ifdef __LITTLE_ENDIAN__
7718
return __builtin_altivec_vpkshss(__b, __a);
7719
#else
7720
return __builtin_altivec_vpkshss(__a, __b);
7721
#endif
7722
}
7723
7724
static __inline__ vector unsigned char __ATTRS_o_ai
7725
vec_packs(vector unsigned short __a, vector unsigned short __b) {
7726
#ifdef __LITTLE_ENDIAN__
7727
return __builtin_altivec_vpkuhus(__b, __a);
7728
#else
7729
return __builtin_altivec_vpkuhus(__a, __b);
7730
#endif
7731
}
7732
7733
static __inline__ vector signed short __ATTRS_o_ai vec_packs(vector int __a,
7734
vector int __b) {
7735
#ifdef __LITTLE_ENDIAN__
7736
return __builtin_altivec_vpkswss(__b, __a);
7737
#else
7738
return __builtin_altivec_vpkswss(__a, __b);
7739
#endif
7740
}
7741
7742
static __inline__ vector unsigned short __ATTRS_o_ai
7743
vec_packs(vector unsigned int __a, vector unsigned int __b) {
7744
#ifdef __LITTLE_ENDIAN__
7745
return __builtin_altivec_vpkuwus(__b, __a);
7746
#else
7747
return __builtin_altivec_vpkuwus(__a, __b);
7748
#endif
7749
}
7750
7751
#ifdef __POWER8_VECTOR__
7752
static __inline__ vector int __ATTRS_o_ai vec_packs(vector long long __a,
7753
vector long long __b) {
7754
#ifdef __LITTLE_ENDIAN__
7755
return __builtin_altivec_vpksdss(__b, __a);
7756
#else
7757
return __builtin_altivec_vpksdss(__a, __b);
7758
#endif
7759
}
7760
7761
static __inline__ vector unsigned int __ATTRS_o_ai
7762
vec_packs(vector unsigned long long __a, vector unsigned long long __b) {
7763
#ifdef __LITTLE_ENDIAN__
7764
return __builtin_altivec_vpkudus(__b, __a);
7765
#else
7766
return __builtin_altivec_vpkudus(__a, __b);
7767
#endif
7768
}
7769
#endif
7770
7771
/* vec_vpkshss */
7772
7773
static __inline__ vector signed char __attribute__((__always_inline__))
7774
vec_vpkshss(vector short __a, vector short __b) {
7775
#ifdef __LITTLE_ENDIAN__
7776
return __builtin_altivec_vpkshss(__b, __a);
7777
#else
7778
return __builtin_altivec_vpkshss(__a, __b);
7779
#endif
7780
}
7781
7782
/* vec_vpksdss */
7783
7784
#ifdef __POWER8_VECTOR__
7785
static __inline__ vector int __ATTRS_o_ai vec_vpksdss(vector long long __a,
7786
vector long long __b) {
7787
#ifdef __LITTLE_ENDIAN__
7788
return __builtin_altivec_vpksdss(__b, __a);
7789
#else
7790
return __builtin_altivec_vpksdss(__a, __b);
7791
#endif
7792
}
7793
#endif
7794
7795
/* vec_vpkuhus */
7796
7797
static __inline__ vector unsigned char __attribute__((__always_inline__))
7798
vec_vpkuhus(vector unsigned short __a, vector unsigned short __b) {
7799
#ifdef __LITTLE_ENDIAN__
7800
return __builtin_altivec_vpkuhus(__b, __a);
7801
#else
7802
return __builtin_altivec_vpkuhus(__a, __b);
7803
#endif
7804
}
7805
7806
/* vec_vpkudus */
7807
7808
#ifdef __POWER8_VECTOR__
7809
static __inline__ vector unsigned int __attribute__((__always_inline__))
7810
vec_vpkudus(vector unsigned long long __a, vector unsigned long long __b) {
7811
#ifdef __LITTLE_ENDIAN__
7812
return __builtin_altivec_vpkudus(__b, __a);
7813
#else
7814
return __builtin_altivec_vpkudus(__a, __b);
7815
#endif
7816
}
7817
#endif
7818
7819
/* vec_vpkswss */
7820
7821
static __inline__ vector signed short __attribute__((__always_inline__))
7822
vec_vpkswss(vector int __a, vector int __b) {
7823
#ifdef __LITTLE_ENDIAN__
7824
return __builtin_altivec_vpkswss(__b, __a);
7825
#else
7826
return __builtin_altivec_vpkswss(__a, __b);
7827
#endif
7828
}
7829
7830
/* vec_vpkuwus */
7831
7832
static __inline__ vector unsigned short __attribute__((__always_inline__))
7833
vec_vpkuwus(vector unsigned int __a, vector unsigned int __b) {
7834
#ifdef __LITTLE_ENDIAN__
7835
return __builtin_altivec_vpkuwus(__b, __a);
7836
#else
7837
return __builtin_altivec_vpkuwus(__a, __b);
7838
#endif
7839
}
7840
7841
/* vec_packsu */
7842
7843
static __inline__ vector unsigned char __ATTRS_o_ai
7844
vec_packsu(vector short __a, vector short __b) {
7845
#ifdef __LITTLE_ENDIAN__
7846
return __builtin_altivec_vpkshus(__b, __a);
7847
#else
7848
return __builtin_altivec_vpkshus(__a, __b);
7849
#endif
7850
}
7851
7852
static __inline__ vector unsigned char __ATTRS_o_ai
7853
vec_packsu(vector unsigned short __a, vector unsigned short __b) {
7854
#ifdef __LITTLE_ENDIAN__
7855
return __builtin_altivec_vpkuhus(__b, __a);
7856
#else
7857
return __builtin_altivec_vpkuhus(__a, __b);
7858
#endif
7859
}
7860
7861
static __inline__ vector unsigned short __ATTRS_o_ai
7862
vec_packsu(vector int __a, vector int __b) {
7863
#ifdef __LITTLE_ENDIAN__
7864
return __builtin_altivec_vpkswus(__b, __a);
7865
#else
7866
return __builtin_altivec_vpkswus(__a, __b);
7867
#endif
7868
}
7869
7870
static __inline__ vector unsigned short __ATTRS_o_ai
7871
vec_packsu(vector unsigned int __a, vector unsigned int __b) {
7872
#ifdef __LITTLE_ENDIAN__
7873
return __builtin_altivec_vpkuwus(__b, __a);
7874
#else
7875
return __builtin_altivec_vpkuwus(__a, __b);
7876
#endif
7877
}
7878
7879
#ifdef __POWER8_VECTOR__
7880
static __inline__ vector unsigned int __ATTRS_o_ai
7881
vec_packsu(vector long long __a, vector long long __b) {
7882
#ifdef __LITTLE_ENDIAN__
7883
return __builtin_altivec_vpksdus(__b, __a);
7884
#else
7885
return __builtin_altivec_vpksdus(__a, __b);
7886
#endif
7887
}
7888
7889
static __inline__ vector unsigned int __ATTRS_o_ai
7890
vec_packsu(vector unsigned long long __a, vector unsigned long long __b) {
7891
#ifdef __LITTLE_ENDIAN__
7892
return __builtin_altivec_vpkudus(__b, __a);
7893
#else
7894
return __builtin_altivec_vpkudus(__a, __b);
7895
#endif
7896
}
7897
#endif
7898
7899
/* vec_vpkshus */
7900
7901
static __inline__ vector unsigned char __ATTRS_o_ai
7902
vec_vpkshus(vector short __a, vector short __b) {
7903
#ifdef __LITTLE_ENDIAN__
7904
return __builtin_altivec_vpkshus(__b, __a);
7905
#else
7906
return __builtin_altivec_vpkshus(__a, __b);
7907
#endif
7908
}
7909
7910
static __inline__ vector unsigned char __ATTRS_o_ai
7911
vec_vpkshus(vector unsigned short __a, vector unsigned short __b) {
7912
#ifdef __LITTLE_ENDIAN__
7913
return __builtin_altivec_vpkuhus(__b, __a);
7914
#else
7915
return __builtin_altivec_vpkuhus(__a, __b);
7916
#endif
7917
}
7918
7919
/* vec_vpkswus */
7920
7921
static __inline__ vector unsigned short __ATTRS_o_ai
7922
vec_vpkswus(vector int __a, vector int __b) {
7923
#ifdef __LITTLE_ENDIAN__
7924
return __builtin_altivec_vpkswus(__b, __a);
7925
#else
7926
return __builtin_altivec_vpkswus(__a, __b);
7927
#endif
7928
}
7929
7930
static __inline__ vector unsigned short __ATTRS_o_ai
7931
vec_vpkswus(vector unsigned int __a, vector unsigned int __b) {
7932
#ifdef __LITTLE_ENDIAN__
7933
return __builtin_altivec_vpkuwus(__b, __a);
7934
#else
7935
return __builtin_altivec_vpkuwus(__a, __b);
7936
#endif
7937
}
7938
7939
/* vec_vpksdus */
7940
7941
#ifdef __POWER8_VECTOR__
7942
static __inline__ vector unsigned int __ATTRS_o_ai
7943
vec_vpksdus(vector long long __a, vector long long __b) {
7944
#ifdef __LITTLE_ENDIAN__
7945
return __builtin_altivec_vpksdus(__b, __a);
7946
#else
7947
return __builtin_altivec_vpksdus(__a, __b);
7948
#endif
7949
}
7950
#endif
7951
7952
/* vec_perm */
7953
7954
// The vperm instruction is defined architecturally with a big-endian bias.
7955
// For little endian, we swap the input operands and invert the permute
7956
// control vector. Only the rightmost 5 bits matter, so we could use
7957
// a vector of all 31s instead of all 255s to perform the inversion.
7958
// However, when the PCV is not a constant, using 255 has an advantage
7959
// in that the vec_xor can be recognized as a vec_nor (and for P8 and
7960
// later, possibly a vec_nand).
7961
7962
static __inline__ vector signed char __ATTRS_o_ai vec_perm(
7963
vector signed char __a, vector signed char __b, vector unsigned char __c) {
7964
#ifdef __LITTLE_ENDIAN__
7965
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7966
255, 255, 255, 255, 255, 255, 255, 255};
7967
__d = vec_xor(__c, __d);
7968
return (vector signed char)__builtin_altivec_vperm_4si((vector int)__b,
7969
(vector int)__a, __d);
7970
#else
7971
return (vector signed char)__builtin_altivec_vperm_4si((vector int)__a,
7972
(vector int)__b, __c);
7973
#endif
7974
}
7975
7976
static __inline__ vector unsigned char __ATTRS_o_ai
7977
vec_perm(vector unsigned char __a, vector unsigned char __b,
7978
vector unsigned char __c) {
7979
#ifdef __LITTLE_ENDIAN__
7980
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7981
255, 255, 255, 255, 255, 255, 255, 255};
7982
__d = vec_xor(__c, __d);
7983
return (vector unsigned char)__builtin_altivec_vperm_4si(
7984
(vector int)__b, (vector int)__a, __d);
7985
#else
7986
return (vector unsigned char)__builtin_altivec_vperm_4si(
7987
(vector int)__a, (vector int)__b, __c);
7988
#endif
7989
}
7990
7991
static __inline__ vector bool char __ATTRS_o_ai
7992
vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c) {
7993
#ifdef __LITTLE_ENDIAN__
7994
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7995
255, 255, 255, 255, 255, 255, 255, 255};
7996
__d = vec_xor(__c, __d);
7997
return (vector bool char)__builtin_altivec_vperm_4si((vector int)__b,
7998
(vector int)__a, __d);
7999
#else
8000
return (vector bool char)__builtin_altivec_vperm_4si((vector int)__a,
8001
(vector int)__b, __c);
8002
#endif
8003
}
8004
8005
static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
8006
vector signed short __b,
8007
vector unsigned char __c) {
8008
#ifdef __LITTLE_ENDIAN__
8009
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8010
255, 255, 255, 255, 255, 255, 255, 255};
8011
__d = vec_xor(__c, __d);
8012
return (vector signed short)__builtin_altivec_vperm_4si((vector int)__b,
8013
(vector int)__a, __d);
8014
#else
8015
return (vector signed short)__builtin_altivec_vperm_4si((vector int)__a,
8016
(vector int)__b, __c);
8017
#endif
8018
}
8019
8020
static __inline__ vector unsigned short __ATTRS_o_ai
8021
vec_perm(vector unsigned short __a, vector unsigned short __b,
8022
vector unsigned char __c) {
8023
#ifdef __LITTLE_ENDIAN__
8024
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8025
255, 255, 255, 255, 255, 255, 255, 255};
8026
__d = vec_xor(__c, __d);
8027
return (vector unsigned short)__builtin_altivec_vperm_4si(
8028
(vector int)__b, (vector int)__a, __d);
8029
#else
8030
return (vector unsigned short)__builtin_altivec_vperm_4si(
8031
(vector int)__a, (vector int)__b, __c);
8032
#endif
8033
}
8034
8035
static __inline__ vector bool short __ATTRS_o_ai vec_perm(
8036
vector bool short __a, vector bool short __b, vector unsigned char __c) {
8037
#ifdef __LITTLE_ENDIAN__
8038
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8039
255, 255, 255, 255, 255, 255, 255, 255};
8040
__d = vec_xor(__c, __d);
8041
return (vector bool short)__builtin_altivec_vperm_4si((vector int)__b,
8042
(vector int)__a, __d);
8043
#else
8044
return (vector bool short)__builtin_altivec_vperm_4si((vector int)__a,
8045
(vector int)__b, __c);
8046
#endif
8047
}
8048
8049
static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
8050
vector pixel __b,
8051
vector unsigned char __c) {
8052
#ifdef __LITTLE_ENDIAN__
8053
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8054
255, 255, 255, 255, 255, 255, 255, 255};
8055
__d = vec_xor(__c, __d);
8056
return (vector pixel)__builtin_altivec_vperm_4si((vector int)__b,
8057
(vector int)__a, __d);
8058
#else
8059
return (vector pixel)__builtin_altivec_vperm_4si((vector int)__a,
8060
(vector int)__b, __c);
8061
#endif
8062
}
8063
8064
static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
8065
vector signed int __b,
8066
vector unsigned char __c) {
8067
#ifdef __LITTLE_ENDIAN__
8068
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8069
255, 255, 255, 255, 255, 255, 255, 255};
8070
__d = vec_xor(__c, __d);
8071
return (vector signed int)__builtin_altivec_vperm_4si(__b, __a, __d);
8072
#else
8073
return (vector signed int)__builtin_altivec_vperm_4si(__a, __b, __c);
8074
#endif
8075
}
8076
8077
static __inline__ vector unsigned int __ATTRS_o_ai
8078
vec_perm(vector unsigned int __a, vector unsigned int __b,
8079
vector unsigned char __c) {
8080
#ifdef __LITTLE_ENDIAN__
8081
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8082
255, 255, 255, 255, 255, 255, 255, 255};
8083
__d = vec_xor(__c, __d);
8084
return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__b,
8085
(vector int)__a, __d);
8086
#else
8087
return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__a,
8088
(vector int)__b, __c);
8089
#endif
8090
}
8091
8092
static __inline__ vector bool int __ATTRS_o_ai
8093
vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
8094
#ifdef __LITTLE_ENDIAN__
8095
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8096
255, 255, 255, 255, 255, 255, 255, 255};
8097
__d = vec_xor(__c, __d);
8098
return (vector bool int)__builtin_altivec_vperm_4si((vector int)__b,
8099
(vector int)__a, __d);
8100
#else
8101
return (vector bool int)__builtin_altivec_vperm_4si((vector int)__a,
8102
(vector int)__b, __c);
8103
#endif
8104
}
8105
8106
static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
8107
vector float __b,
8108
vector unsigned char __c) {
8109
#ifdef __LITTLE_ENDIAN__
8110
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8111
255, 255, 255, 255, 255, 255, 255, 255};
8112
__d = vec_xor(__c, __d);
8113
return (vector float)__builtin_altivec_vperm_4si((vector int)__b,
8114
(vector int)__a, __d);
8115
#else
8116
return (vector float)__builtin_altivec_vperm_4si((vector int)__a,
8117
(vector int)__b, __c);
8118
#endif
8119
}
8120
8121
#ifdef __VSX__
8122
static __inline__ vector long long __ATTRS_o_ai
8123
vec_perm(vector signed long long __a, vector signed long long __b,
8124
vector unsigned char __c) {
8125
#ifdef __LITTLE_ENDIAN__
8126
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8127
255, 255, 255, 255, 255, 255, 255, 255};
8128
__d = vec_xor(__c, __d);
8129
return (vector signed long long)__builtin_altivec_vperm_4si(
8130
(vector int)__b, (vector int)__a, __d);
8131
#else
8132
return (vector signed long long)__builtin_altivec_vperm_4si(
8133
(vector int)__a, (vector int)__b, __c);
8134
#endif
8135
}
8136
8137
static __inline__ vector unsigned long long __ATTRS_o_ai
8138
vec_perm(vector unsigned long long __a, vector unsigned long long __b,
8139
vector unsigned char __c) {
8140
#ifdef __LITTLE_ENDIAN__
8141
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8142
255, 255, 255, 255, 255, 255, 255, 255};
8143
__d = vec_xor(__c, __d);
8144
return (vector unsigned long long)__builtin_altivec_vperm_4si(
8145
(vector int)__b, (vector int)__a, __d);
8146
#else
8147
return (vector unsigned long long)__builtin_altivec_vperm_4si(
8148
(vector int)__a, (vector int)__b, __c);
8149
#endif
8150
}
8151
8152
static __inline__ vector bool long long __ATTRS_o_ai
8153
vec_perm(vector bool long long __a, vector bool long long __b,
8154
vector unsigned char __c) {
8155
#ifdef __LITTLE_ENDIAN__
8156
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8157
255, 255, 255, 255, 255, 255, 255, 255};
8158
__d = vec_xor(__c, __d);
8159
return (vector bool long long)__builtin_altivec_vperm_4si(
8160
(vector int)__b, (vector int)__a, __d);
8161
#else
8162
return (vector bool long long)__builtin_altivec_vperm_4si(
8163
(vector int)__a, (vector int)__b, __c);
8164
#endif
8165
}
8166
8167
static __inline__ vector double __ATTRS_o_ai
8168
vec_perm(vector double __a, vector double __b, vector unsigned char __c) {
8169
#ifdef __LITTLE_ENDIAN__
8170
vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8171
255, 255, 255, 255, 255, 255, 255, 255};
8172
__d = vec_xor(__c, __d);
8173
return (vector double)__builtin_altivec_vperm_4si((vector int)__b,
8174
(vector int)__a, __d);
8175
#else
8176
return (vector double)__builtin_altivec_vperm_4si((vector int)__a,
8177
(vector int)__b, __c);
8178
#endif
8179
}
8180
#endif
8181
8182
/* vec_vperm */
8183
8184
static __inline__ vector signed char __ATTRS_o_ai vec_vperm(
8185
vector signed char __a, vector signed char __b, vector unsigned char __c) {
8186
return vec_perm(__a, __b, __c);
8187
}
8188
8189
static __inline__ vector unsigned char __ATTRS_o_ai
8190
vec_vperm(vector unsigned char __a, vector unsigned char __b,
8191
vector unsigned char __c) {
8192
return vec_perm(__a, __b, __c);
8193
}
8194
8195
static __inline__ vector bool char __ATTRS_o_ai vec_vperm(
8196
vector bool char __a, vector bool char __b, vector unsigned char __c) {
8197
return vec_perm(__a, __b, __c);
8198
}
8199
8200
static __inline__ vector short __ATTRS_o_ai
8201
vec_vperm(vector short __a, vector short __b, vector unsigned char __c) {
8202
return vec_perm(__a, __b, __c);
8203
}
8204
8205
static __inline__ vector unsigned short __ATTRS_o_ai
8206
vec_vperm(vector unsigned short __a, vector unsigned short __b,
8207
vector unsigned char __c) {
8208
return vec_perm(__a, __b, __c);
8209
}
8210
8211
static __inline__ vector bool short __ATTRS_o_ai vec_vperm(
8212
vector bool short __a, vector bool short __b, vector unsigned char __c) {
8213
return vec_perm(__a, __b, __c);
8214
}
8215
8216
static __inline__ vector pixel __ATTRS_o_ai
8217
vec_vperm(vector pixel __a, vector pixel __b, vector unsigned char __c) {
8218
return vec_perm(__a, __b, __c);
8219
}
8220
8221
static __inline__ vector int __ATTRS_o_ai vec_vperm(vector int __a,
8222
vector int __b,
8223
vector unsigned char __c) {
8224
return vec_perm(__a, __b, __c);
8225
}
8226
8227
static __inline__ vector unsigned int __ATTRS_o_ai
8228
vec_vperm(vector unsigned int __a, vector unsigned int __b,
8229
vector unsigned char __c) {
8230
return vec_perm(__a, __b, __c);
8231
}
8232
8233
static __inline__ vector bool int __ATTRS_o_ai
8234
vec_vperm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
8235
return vec_perm(__a, __b, __c);
8236
}
8237
8238
static __inline__ vector float __ATTRS_o_ai
8239
vec_vperm(vector float __a, vector float __b, vector unsigned char __c) {
8240
return vec_perm(__a, __b, __c);
8241
}
8242
8243
#ifdef __VSX__
8244
static __inline__ vector long long __ATTRS_o_ai vec_vperm(
8245
vector long long __a, vector long long __b, vector unsigned char __c) {
8246
return vec_perm(__a, __b, __c);
8247
}
8248
8249
static __inline__ vector unsigned long long __ATTRS_o_ai
8250
vec_vperm(vector unsigned long long __a, vector unsigned long long __b,
8251
vector unsigned char __c) {
8252
return vec_perm(__a, __b, __c);
8253
}
8254
8255
static __inline__ vector double __ATTRS_o_ai
8256
vec_vperm(vector double __a, vector double __b, vector unsigned char __c) {
8257
return vec_perm(__a, __b, __c);
8258
}
8259
#endif
8260
8261
/* vec_re */
8262
8263
static __inline__ vector float __ATTRS_o_ai vec_re(vector float __a) {
8264
#ifdef __VSX__
8265
return __builtin_vsx_xvresp(__a);
8266
#else
8267
return __builtin_altivec_vrefp(__a);
8268
#endif
8269
}
8270
8271
#ifdef __VSX__
8272
static __inline__ vector double __ATTRS_o_ai vec_re(vector double __a) {
8273
return __builtin_vsx_xvredp(__a);
8274
}
8275
#endif
8276
8277
/* vec_vrefp */
8278
8279
static __inline__ vector float __attribute__((__always_inline__))
8280
vec_vrefp(vector float __a) {
8281
return __builtin_altivec_vrefp(__a);
8282
}
8283
8284
/* vec_rl */
8285
8286
static __inline__ vector signed char __ATTRS_o_ai
8287
vec_rl(vector signed char __a, vector unsigned char __b) {
8288
return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
8289
}
8290
8291
static __inline__ vector unsigned char __ATTRS_o_ai
8292
vec_rl(vector unsigned char __a, vector unsigned char __b) {
8293
return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
8294
}
8295
8296
static __inline__ vector short __ATTRS_o_ai vec_rl(vector short __a,
8297
vector unsigned short __b) {
8298
return __builtin_altivec_vrlh(__a, __b);
8299
}
8300
8301
static __inline__ vector unsigned short __ATTRS_o_ai
8302
vec_rl(vector unsigned short __a, vector unsigned short __b) {
8303
return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
8304
}
8305
8306
static __inline__ vector int __ATTRS_o_ai vec_rl(vector int __a,
8307
vector unsigned int __b) {
8308
return __builtin_altivec_vrlw(__a, __b);
8309
}
8310
8311
static __inline__ vector unsigned int __ATTRS_o_ai
8312
vec_rl(vector unsigned int __a, vector unsigned int __b) {
8313
return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
8314
}
8315
8316
#ifdef __POWER8_VECTOR__
8317
static __inline__ vector signed long long __ATTRS_o_ai
8318
vec_rl(vector signed long long __a, vector unsigned long long __b) {
8319
return __builtin_altivec_vrld(__a, __b);
8320
}
8321
8322
static __inline__ vector unsigned long long __ATTRS_o_ai
8323
vec_rl(vector unsigned long long __a, vector unsigned long long __b) {
8324
return (vector unsigned long long)__builtin_altivec_vrld(
8325
(vector long long)__a, __b);
8326
}
8327
#endif
8328
8329
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
8330
static __inline__ vector signed __int128 __ATTRS_o_ai
8331
vec_rl(vector signed __int128 __a, vector unsigned __int128 __b) {
8332
return (vector signed __int128)(((vector unsigned __int128)__b
8333
<< (vector unsigned __int128)__a) |
8334
((vector unsigned __int128)__b >>
8335
((__CHAR_BIT__ *
8336
sizeof(vector unsigned __int128)) -
8337
(vector unsigned __int128)__a)));
8338
}
8339
8340
static __inline__ vector unsigned __int128 __ATTRS_o_ai
8341
vec_rl(vector unsigned __int128 __a, vector unsigned __int128 __b) {
8342
return (__b << __a)|(__b >> ((__CHAR_BIT__ * sizeof(vector unsigned __int128)) - __a));
8343
}
8344
#endif
8345
8346
/* vec_rlmi */
8347
#ifdef __POWER9_VECTOR__
8348
static __inline__ vector unsigned int __ATTRS_o_ai
8349
vec_rlmi(vector unsigned int __a, vector unsigned int __b,
8350
vector unsigned int __c) {
8351
return __builtin_altivec_vrlwmi(__a, __c, __b);
8352
}
8353
8354
static __inline__ vector unsigned long long __ATTRS_o_ai
8355
vec_rlmi(vector unsigned long long __a, vector unsigned long long __b,
8356
vector unsigned long long __c) {
8357
return __builtin_altivec_vrldmi(__a, __c, __b);
8358
}
8359
#endif
8360
8361
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
8362
static __inline__ vector unsigned __int128 __ATTRS_o_ai
8363
vec_rlmi(vector unsigned __int128 __a, vector unsigned __int128 __b,
8364
vector unsigned __int128 __c) {
8365
return __builtin_altivec_vrlqmi(__a, __c, __b);
8366
}
8367
8368
static __inline__ vector signed __int128 __ATTRS_o_ai
8369
vec_rlmi(vector signed __int128 __a, vector signed __int128 __b,
8370
vector signed __int128 __c) {
8371
return (vector signed __int128)__builtin_altivec_vrlqmi(
8372
(vector unsigned __int128)__a, (vector unsigned __int128)__c,
8373
(vector unsigned __int128)__b);
8374
}
8375
#endif
8376
8377
/* vec_rlnm */
8378
#ifdef __POWER9_VECTOR__
8379
static __inline__ vector unsigned int __ATTRS_o_ai
8380
vec_rlnm(vector unsigned int __a, vector unsigned int __b,
8381
vector unsigned int __c) {
8382
vector unsigned int OneByte = { 0x8, 0x8, 0x8, 0x8 };
8383
return __builtin_altivec_vrlwnm(__a, ((__c << OneByte) | __b));
8384
}
8385
8386
static __inline__ vector unsigned long long __ATTRS_o_ai
8387
vec_rlnm(vector unsigned long long __a, vector unsigned long long __b,
8388
vector unsigned long long __c) {
8389
vector unsigned long long OneByte = { 0x8, 0x8 };
8390
return __builtin_altivec_vrldnm(__a, ((__c << OneByte) | __b));
8391
}
8392
#endif
8393
8394
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
8395
static __inline__ vector unsigned __int128 __ATTRS_o_ai
8396
vec_rlnm(vector unsigned __int128 __a, vector unsigned __int128 __b,
8397
vector unsigned __int128 __c) {
8398
// Merge __b and __c using an appropriate shuffle.
8399
vector unsigned char TmpB = (vector unsigned char)__b;
8400
vector unsigned char TmpC = (vector unsigned char)__c;
8401
vector unsigned char MaskAndShift =
8402
#ifdef __LITTLE_ENDIAN__
8403
__builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, -1, -1, -1, 16, 0,
8404
1, -1, -1, -1, -1, -1);
8405
#else
8406
__builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, 31, 30, 15, -1,
8407
-1, -1, -1, -1, -1, -1, -1);
8408
#endif
8409
return __builtin_altivec_vrlqnm(__a, (vector unsigned __int128) MaskAndShift);
8410
}
8411
8412
static __inline__ vector signed __int128 __ATTRS_o_ai
8413
vec_rlnm(vector signed __int128 __a, vector signed __int128 __b,
8414
vector signed __int128 __c) {
8415
// Merge __b and __c using an appropriate shuffle.
8416
vector unsigned char TmpB = (vector unsigned char)__b;
8417
vector unsigned char TmpC = (vector unsigned char)__c;
8418
vector unsigned char MaskAndShift =
8419
#ifdef __LITTLE_ENDIAN__
8420
__builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, -1, -1, -1, 16, 0,
8421
1, -1, -1, -1, -1, -1);
8422
#else
8423
__builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, 31, 30, 15, -1,
8424
-1, -1, -1, -1, -1, -1, -1);
8425
#endif
8426
return (vector signed __int128)__builtin_altivec_vrlqnm(
8427
(vector unsigned __int128)__a, (vector unsigned __int128)MaskAndShift);
8428
}
8429
#endif
8430
8431
/* vec_vrlb */
8432
8433
static __inline__ vector signed char __ATTRS_o_ai
8434
vec_vrlb(vector signed char __a, vector unsigned char __b) {
8435
return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
8436
}
8437
8438
static __inline__ vector unsigned char __ATTRS_o_ai
8439
vec_vrlb(vector unsigned char __a, vector unsigned char __b) {
8440
return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
8441
}
8442
8443
/* vec_vrlh */
8444
8445
static __inline__ vector short __ATTRS_o_ai
8446
vec_vrlh(vector short __a, vector unsigned short __b) {
8447
return __builtin_altivec_vrlh(__a, __b);
8448
}
8449
8450
static __inline__ vector unsigned short __ATTRS_o_ai
8451
vec_vrlh(vector unsigned short __a, vector unsigned short __b) {
8452
return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
8453
}
8454
8455
/* vec_vrlw */
8456
8457
static __inline__ vector int __ATTRS_o_ai vec_vrlw(vector int __a,
8458
vector unsigned int __b) {
8459
return __builtin_altivec_vrlw(__a, __b);
8460
}
8461
8462
static __inline__ vector unsigned int __ATTRS_o_ai
8463
vec_vrlw(vector unsigned int __a, vector unsigned int __b) {
8464
return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
8465
}
8466
8467
/* vec_round */
8468
8469
static __inline__ vector float __ATTRS_o_ai vec_round(vector float __a) {
8470
return __builtin_altivec_vrfin(__a);
8471
}
8472
8473
#ifdef __VSX__
8474
#ifdef __XL_COMPAT_ALTIVEC__
8475
static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a);
8476
static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) {
8477
double __fpscr = __builtin_readflm();
8478
__builtin_setrnd(0);
8479
vector double __rounded = vec_rint(__a);
8480
__builtin_setflm(__fpscr);
8481
return __rounded;
8482
}
8483
#else
8484
static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) {
8485
return __builtin_vsx_xvrdpi(__a);
8486
}
8487
#endif
8488
8489
/* vec_rint */
8490
8491
static __inline__ vector float __ATTRS_o_ai vec_rint(vector float __a) {
8492
return __builtin_vsx_xvrspic(__a);
8493
}
8494
8495
static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a) {
8496
return __builtin_vsx_xvrdpic(__a);
8497
}
8498
8499
/* vec_roundc */
8500
8501
static __inline__ vector float __ATTRS_o_ai vec_roundc(vector float __a) {
8502
return __builtin_vsx_xvrspic(__a);
8503
}
8504
8505
static __inline__ vector double __ATTRS_o_ai vec_roundc(vector double __a) {
8506
return __builtin_vsx_xvrdpic(__a);
8507
}
8508
8509
/* vec_nearbyint */
8510
8511
static __inline__ vector float __ATTRS_o_ai vec_nearbyint(vector float __a) {
8512
return __builtin_vsx_xvrspi(__a);
8513
}
8514
8515
static __inline__ vector double __ATTRS_o_ai vec_nearbyint(vector double __a) {
8516
return __builtin_vsx_xvrdpi(__a);
8517
}
8518
#endif
8519
8520
/* vec_vrfin */
8521
8522
static __inline__ vector float __attribute__((__always_inline__))
8523
vec_vrfin(vector float __a) {
8524
return __builtin_altivec_vrfin(__a);
8525
}
8526
8527
/* vec_sqrt */
8528
8529
#ifdef __VSX__
8530
static __inline__ vector float __ATTRS_o_ai vec_sqrt(vector float __a) {
8531
return __builtin_vsx_xvsqrtsp(__a);
8532
}
8533
8534
static __inline__ vector double __ATTRS_o_ai vec_sqrt(vector double __a) {
8535
return __builtin_vsx_xvsqrtdp(__a);
8536
}
8537
#endif
8538
8539
/* vec_rsqrte */
8540
8541
static __inline__ vector float __ATTRS_o_ai vec_rsqrte(vector float __a) {
8542
#ifdef __VSX__
8543
return __builtin_vsx_xvrsqrtesp(__a);
8544
#else
8545
return __builtin_altivec_vrsqrtefp(__a);
8546
#endif
8547
}
8548
8549
#ifdef __VSX__
8550
static __inline__ vector double __ATTRS_o_ai vec_rsqrte(vector double __a) {
8551
return __builtin_vsx_xvrsqrtedp(__a);
8552
}
8553
#endif
8554
8555
static vector float __ATTRS_o_ai vec_rsqrt(vector float __a) {
8556
return __builtin_ppc_rsqrtf(__a);
8557
}
8558
8559
#ifdef __VSX__
8560
static vector double __ATTRS_o_ai vec_rsqrt(vector double __a) {
8561
return __builtin_ppc_rsqrtd(__a);
8562
}
8563
#endif
8564
8565
/* vec_vrsqrtefp */
8566
8567
static __inline__ __vector float __attribute__((__always_inline__))
8568
vec_vrsqrtefp(vector float __a) {
8569
return __builtin_altivec_vrsqrtefp(__a);
8570
}
8571
8572
/* vec_xvtsqrt */
8573
8574
#ifdef __VSX__
8575
static __inline__ int __ATTRS_o_ai vec_test_swsqrt(vector double __a) {
8576
return __builtin_vsx_xvtsqrtdp(__a);
8577
}
8578
8579
static __inline__ int __ATTRS_o_ai vec_test_swsqrts(vector float __a) {
8580
return __builtin_vsx_xvtsqrtsp(__a);
8581
}
8582
#endif
8583
8584
/* vec_sel */
8585
8586
#define __builtin_altivec_vsel_4si vec_sel
8587
8588
static __inline__ vector signed char __ATTRS_o_ai vec_sel(
8589
vector signed char __a, vector signed char __b, vector unsigned char __c) {
8590
return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
8591
}
8592
8593
static __inline__ vector signed char __ATTRS_o_ai
8594
vec_sel(vector signed char __a, vector signed char __b, vector bool char __c) {
8595
return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
8596
}
8597
8598
static __inline__ vector unsigned char __ATTRS_o_ai
8599
vec_sel(vector unsigned char __a, vector unsigned char __b,
8600
vector unsigned char __c) {
8601
return (__a & ~__c) | (__b & __c);
8602
}
8603
8604
static __inline__ vector unsigned char __ATTRS_o_ai vec_sel(
8605
vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
8606
return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
8607
}
8608
8609
static __inline__ vector bool char __ATTRS_o_ai
8610
vec_sel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
8611
return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
8612
}
8613
8614
static __inline__ vector bool char __ATTRS_o_ai vec_sel(vector bool char __a,
8615
vector bool char __b,
8616
vector bool char __c) {
8617
return (__a & ~__c) | (__b & __c);
8618
}
8619
8620
static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
8621
vector short __b,
8622
vector unsigned short __c) {
8623
return (__a & ~(vector short)__c) | (__b & (vector short)__c);
8624
}
8625
8626
static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
8627
vector short __b,
8628
vector bool short __c) {
8629
return (__a & ~(vector short)__c) | (__b & (vector short)__c);
8630
}
8631
8632
static __inline__ vector unsigned short __ATTRS_o_ai
8633
vec_sel(vector unsigned short __a, vector unsigned short __b,
8634
vector unsigned short __c) {
8635
return (__a & ~__c) | (__b & __c);
8636
}
8637
8638
static __inline__ vector unsigned short __ATTRS_o_ai
8639
vec_sel(vector unsigned short __a, vector unsigned short __b,
8640
vector bool short __c) {
8641
return (__a & ~(vector unsigned short)__c) |
8642
(__b & (vector unsigned short)__c);
8643
}
8644
8645
static __inline__ vector bool short __ATTRS_o_ai vec_sel(
8646
vector bool short __a, vector bool short __b, vector unsigned short __c) {
8647
return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
8648
}
8649
8650
static __inline__ vector bool short __ATTRS_o_ai
8651
vec_sel(vector bool short __a, vector bool short __b, vector bool short __c) {
8652
return (__a & ~__c) | (__b & __c);
8653
}
8654
8655
static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
8656
vector int __b,
8657
vector unsigned int __c) {
8658
return (__a & ~(vector int)__c) | (__b & (vector int)__c);
8659
}
8660
8661
static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
8662
vector int __b,
8663
vector bool int __c) {
8664
return (__a & ~(vector int)__c) | (__b & (vector int)__c);
8665
}
8666
8667
static __inline__ vector unsigned int __ATTRS_o_ai vec_sel(
8668
vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
8669
return (__a & ~__c) | (__b & __c);
8670
}
8671
8672
static __inline__ vector unsigned int __ATTRS_o_ai
8673
vec_sel(vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
8674
return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
8675
}
8676
8677
static __inline__ vector bool int __ATTRS_o_ai
8678
vec_sel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
8679
return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
8680
}
8681
8682
static __inline__ vector bool int __ATTRS_o_ai vec_sel(vector bool int __a,
8683
vector bool int __b,
8684
vector bool int __c) {
8685
return (__a & ~__c) | (__b & __c);
8686
}
8687
8688
static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
8689
vector float __b,
8690
vector unsigned int __c) {
8691
vector int __res = ((vector int)__a & ~(vector int)__c) |
8692
((vector int)__b & (vector int)__c);
8693
return (vector float)__res;
8694
}
8695
8696
static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
8697
vector float __b,
8698
vector bool int __c) {
8699
vector int __res = ((vector int)__a & ~(vector int)__c) |
8700
((vector int)__b & (vector int)__c);
8701
return (vector float)__res;
8702
}
8703
8704
#ifdef __VSX__
8705
static __inline__ vector double __ATTRS_o_ai
8706
vec_sel(vector double __a, vector double __b, vector bool long long __c) {
8707
vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
8708
((vector long long)__b & (vector long long)__c);
8709
return (vector double)__res;
8710
}
8711
8712
static __inline__ vector double __ATTRS_o_ai
8713
vec_sel(vector double __a, vector double __b, vector unsigned long long __c) {
8714
vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
8715
((vector long long)__b & (vector long long)__c);
8716
return (vector double)__res;
8717
}
8718
8719
static __inline__ vector bool long long __ATTRS_o_ai
8720
vec_sel(vector bool long long __a, vector bool long long __b,
8721
vector bool long long __c) {
8722
return (__a & ~__c) | (__b & __c);
8723
}
8724
8725
static __inline__ vector bool long long __ATTRS_o_ai
8726
vec_sel(vector bool long long __a, vector bool long long __b,
8727
vector unsigned long long __c) {
8728
return (__a & ~(vector bool long long)__c) |
8729
(__b & (vector bool long long)__c);
8730
}
8731
8732
static __inline__ vector signed long long __ATTRS_o_ai
8733
vec_sel(vector signed long long __a, vector signed long long __b,
8734
vector bool long long __c) {
8735
return (__a & ~(vector signed long long)__c) |
8736
(__b & (vector signed long long)__c);
8737
}
8738
8739
static __inline__ vector signed long long __ATTRS_o_ai
8740
vec_sel(vector signed long long __a, vector signed long long __b,
8741
vector unsigned long long __c) {
8742
return (__a & ~(vector signed long long)__c) |
8743
(__b & (vector signed long long)__c);
8744
}
8745
8746
static __inline__ vector unsigned long long __ATTRS_o_ai
8747
vec_sel(vector unsigned long long __a, vector unsigned long long __b,
8748
vector bool long long __c) {
8749
return (__a & ~(vector unsigned long long)__c) |
8750
(__b & (vector unsigned long long)__c);
8751
}
8752
8753
static __inline__ vector unsigned long long __ATTRS_o_ai
8754
vec_sel(vector unsigned long long __a, vector unsigned long long __b,
8755
vector unsigned long long __c) {
8756
return (__a & ~__c) | (__b & __c);
8757
}
8758
#endif
8759
8760
/* vec_vsel */
8761
8762
static __inline__ vector signed char __ATTRS_o_ai vec_vsel(
8763
vector signed char __a, vector signed char __b, vector unsigned char __c) {
8764
return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
8765
}
8766
8767
static __inline__ vector signed char __ATTRS_o_ai
8768
vec_vsel(vector signed char __a, vector signed char __b, vector bool char __c) {
8769
return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
8770
}
8771
8772
static __inline__ vector unsigned char __ATTRS_o_ai
8773
vec_vsel(vector unsigned char __a, vector unsigned char __b,
8774
vector unsigned char __c) {
8775
return (__a & ~__c) | (__b & __c);
8776
}
8777
8778
static __inline__ vector unsigned char __ATTRS_o_ai vec_vsel(
8779
vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
8780
return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
8781
}
8782
8783
static __inline__ vector bool char __ATTRS_o_ai
8784
vec_vsel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
8785
return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
8786
}
8787
8788
static __inline__ vector bool char __ATTRS_o_ai vec_vsel(vector bool char __a,
8789
vector bool char __b,
8790
vector bool char __c) {
8791
return (__a & ~__c) | (__b & __c);
8792
}
8793
8794
static __inline__ vector short __ATTRS_o_ai
8795
vec_vsel(vector short __a, vector short __b, vector unsigned short __c) {
8796
return (__a & ~(vector short)__c) | (__b & (vector short)__c);
8797
}
8798
8799
static __inline__ vector short __ATTRS_o_ai vec_vsel(vector short __a,
8800
vector short __b,
8801
vector bool short __c) {
8802
return (__a & ~(vector short)__c) | (__b & (vector short)__c);
8803
}
8804
8805
static __inline__ vector unsigned short __ATTRS_o_ai
8806
vec_vsel(vector unsigned short __a, vector unsigned short __b,
8807
vector unsigned short __c) {
8808
return (__a & ~__c) | (__b & __c);
8809
}
8810
8811
static __inline__ vector unsigned short __ATTRS_o_ai
8812
vec_vsel(vector unsigned short __a, vector unsigned short __b,
8813
vector bool short __c) {
8814
return (__a & ~(vector unsigned short)__c) |
8815
(__b & (vector unsigned short)__c);
8816
}
8817
8818
static __inline__ vector bool short __ATTRS_o_ai vec_vsel(
8819
vector bool short __a, vector bool short __b, vector unsigned short __c) {
8820
return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
8821
}
8822
8823
static __inline__ vector bool short __ATTRS_o_ai
8824
vec_vsel(vector bool short __a, vector bool short __b, vector bool short __c) {
8825
return (__a & ~__c) | (__b & __c);
8826
}
8827
8828
static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
8829
vector int __b,
8830
vector unsigned int __c) {
8831
return (__a & ~(vector int)__c) | (__b & (vector int)__c);
8832
}
8833
8834
static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
8835
vector int __b,
8836
vector bool int __c) {
8837
return (__a & ~(vector int)__c) | (__b & (vector int)__c);
8838
}
8839
8840
static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
8841
vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
8842
return (__a & ~__c) | (__b & __c);
8843
}
8844
8845
static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
8846
vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
8847
return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
8848
}
8849
8850
static __inline__ vector bool int __ATTRS_o_ai
8851
vec_vsel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
8852
return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
8853
}
8854
8855
static __inline__ vector bool int __ATTRS_o_ai vec_vsel(vector bool int __a,
8856
vector bool int __b,
8857
vector bool int __c) {
8858
return (__a & ~__c) | (__b & __c);
8859
}
8860
8861
static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
8862
vector float __b,
8863
vector unsigned int __c) {
8864
vector int __res = ((vector int)__a & ~(vector int)__c) |
8865
((vector int)__b & (vector int)__c);
8866
return (vector float)__res;
8867
}
8868
8869
static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
8870
vector float __b,
8871
vector bool int __c) {
8872
vector int __res = ((vector int)__a & ~(vector int)__c) |
8873
((vector int)__b & (vector int)__c);
8874
return (vector float)__res;
8875
}
8876
8877
/* vec_sl */
8878
8879
// vec_sl does modulo arithmetic on __b first, so __b is allowed to be more
8880
// than the length of __a.
8881
static __inline__ vector unsigned char __ATTRS_o_ai
8882
vec_sl(vector unsigned char __a, vector unsigned char __b) {
8883
return __a << (__b %
8884
(vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));
8885
}
8886
8887
static __inline__ vector signed char __ATTRS_o_ai
8888
vec_sl(vector signed char __a, vector unsigned char __b) {
8889
return (vector signed char)vec_sl((vector unsigned char)__a, __b);
8890
}
8891
8892
static __inline__ vector unsigned short __ATTRS_o_ai
8893
vec_sl(vector unsigned short __a, vector unsigned short __b) {
8894
return __a << (__b % (vector unsigned short)(sizeof(unsigned short) *
8895
__CHAR_BIT__));
8896
}
8897
8898
static __inline__ vector short __ATTRS_o_ai vec_sl(vector short __a,
8899
vector unsigned short __b) {
8900
return (vector short)vec_sl((vector unsigned short)__a, __b);
8901
}
8902
8903
static __inline__ vector unsigned int __ATTRS_o_ai
8904
vec_sl(vector unsigned int __a, vector unsigned int __b) {
8905
return __a << (__b %
8906
(vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));
8907
}
8908
8909
static __inline__ vector int __ATTRS_o_ai vec_sl(vector int __a,
8910
vector unsigned int __b) {
8911
return (vector int)vec_sl((vector unsigned int)__a, __b);
8912
}
8913
8914
#ifdef __POWER8_VECTOR__
8915
static __inline__ vector unsigned long long __ATTRS_o_ai
8916
vec_sl(vector unsigned long long __a, vector unsigned long long __b) {
8917
return __a << (__b % (vector unsigned long long)(sizeof(unsigned long long) *
8918
__CHAR_BIT__));
8919
}
8920
8921
static __inline__ vector long long __ATTRS_o_ai
8922
vec_sl(vector long long __a, vector unsigned long long __b) {
8923
return (vector long long)vec_sl((vector unsigned long long)__a, __b);
8924
}
8925
#elif defined(__VSX__)
8926
static __inline__ vector unsigned char __ATTRS_o_ai
8927
vec_vspltb(vector unsigned char __a, unsigned char __b);
8928
static __inline__ vector unsigned long long __ATTRS_o_ai
8929
vec_sl(vector unsigned long long __a, vector unsigned long long __b) {
8930
__b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
8931
8932
// Big endian element one (the right doubleword) can be left shifted as-is.
8933
// The other element needs to be swapped into the right doubleword and
8934
// shifted. Then the right doublewords of the two result vectors are merged.
8935
vector signed long long __rightelt =
8936
(vector signed long long)__builtin_altivec_vslo((vector signed int)__a,
8937
(vector signed int)__b);
8938
#ifdef __LITTLE_ENDIAN__
8939
__rightelt = (vector signed long long)__builtin_altivec_vsl(
8940
(vector signed int)__rightelt,
8941
(vector signed int)vec_vspltb((vector unsigned char)__b, 0));
8942
#else
8943
__rightelt = (vector signed long long)__builtin_altivec_vsl(
8944
(vector signed int)__rightelt,
8945
(vector signed int)vec_vspltb((vector unsigned char)__b, 15));
8946
#endif
8947
__a = __builtin_shufflevector(__a, __a, 1, 0);
8948
__b = __builtin_shufflevector(__b, __b, 1, 0);
8949
vector signed long long __leftelt =
8950
(vector signed long long)__builtin_altivec_vslo((vector signed int)__a,
8951
(vector signed int)__b);
8952
#ifdef __LITTLE_ENDIAN__
8953
__leftelt = (vector signed long long)__builtin_altivec_vsl(
8954
(vector signed int)__leftelt,
8955
(vector signed int)vec_vspltb((vector unsigned char)__b, 0));
8956
return (vector unsigned long long)__builtin_shufflevector(__rightelt,
8957
__leftelt, 0, 2);
8958
#else
8959
__leftelt = (vector signed long long)__builtin_altivec_vsl(
8960
(vector signed int)__leftelt,
8961
(vector signed int)vec_vspltb((vector unsigned char)__b, 15));
8962
return (vector unsigned long long)__builtin_shufflevector(__leftelt,
8963
__rightelt, 1, 3);
8964
#endif
8965
}
8966
8967
static __inline__ vector long long __ATTRS_o_ai
8968
vec_sl(vector long long __a, vector unsigned long long __b) {
8969
return (vector long long)vec_sl((vector unsigned long long)__a, __b);
8970
}
8971
#endif /* __VSX__ */
8972
8973
/* vec_vslb */
8974
8975
#define __builtin_altivec_vslb vec_vslb
8976
8977
static __inline__ vector signed char __ATTRS_o_ai
8978
vec_vslb(vector signed char __a, vector unsigned char __b) {
8979
return vec_sl(__a, __b);
8980
}
8981
8982
static __inline__ vector unsigned char __ATTRS_o_ai
8983
vec_vslb(vector unsigned char __a, vector unsigned char __b) {
8984
return vec_sl(__a, __b);
8985
}
8986
8987
/* vec_vslh */
8988
8989
#define __builtin_altivec_vslh vec_vslh
8990
8991
static __inline__ vector short __ATTRS_o_ai
8992
vec_vslh(vector short __a, vector unsigned short __b) {
8993
return vec_sl(__a, __b);
8994
}
8995
8996
static __inline__ vector unsigned short __ATTRS_o_ai
8997
vec_vslh(vector unsigned short __a, vector unsigned short __b) {
8998
return vec_sl(__a, __b);
8999
}
9000
9001
/* vec_vslw */
9002
9003
#define __builtin_altivec_vslw vec_vslw
9004
9005
static __inline__ vector int __ATTRS_o_ai vec_vslw(vector int __a,
9006
vector unsigned int __b) {
9007
return vec_sl(__a, __b);
9008
}
9009
9010
static __inline__ vector unsigned int __ATTRS_o_ai
9011
vec_vslw(vector unsigned int __a, vector unsigned int __b) {
9012
return vec_sl(__a, __b);
9013
}
9014
9015
/* vec_sld */
9016
9017
#define __builtin_altivec_vsldoi_4si vec_sld
9018
9019
static __inline__ vector signed char __ATTRS_o_ai vec_sld(
9020
vector signed char __a, vector signed char __b, unsigned const int __c) {
9021
unsigned char __d = __c & 0x0F;
9022
#ifdef __LITTLE_ENDIAN__
9023
return vec_perm(
9024
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9025
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9026
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9027
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9028
#else
9029
return vec_perm(
9030
__a, __b,
9031
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9032
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9033
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9034
#endif
9035
}
9036
9037
static __inline__ vector unsigned char __ATTRS_o_ai
9038
vec_sld(vector unsigned char __a, vector unsigned char __b,
9039
unsigned const int __c) {
9040
unsigned char __d = __c & 0x0F;
9041
#ifdef __LITTLE_ENDIAN__
9042
return vec_perm(
9043
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9044
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9045
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9046
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9047
#else
9048
return vec_perm(
9049
__a, __b,
9050
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9051
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9052
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9053
#endif
9054
}
9055
9056
static __inline__ vector bool char __ATTRS_o_ai
9057
vec_sld(vector bool char __a, vector bool char __b, unsigned const int __c) {
9058
unsigned char __d = __c & 0x0F;
9059
#ifdef __LITTLE_ENDIAN__
9060
return vec_perm(
9061
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9062
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9063
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9064
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9065
#else
9066
return vec_perm(
9067
__a, __b,
9068
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9069
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9070
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9071
#endif
9072
}
9073
9074
static __inline__ vector signed short __ATTRS_o_ai vec_sld(
9075
vector signed short __a, vector signed short __b, unsigned const int __c) {
9076
unsigned char __d = __c & 0x0F;
9077
#ifdef __LITTLE_ENDIAN__
9078
return vec_perm(
9079
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9080
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9081
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9082
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9083
#else
9084
return vec_perm(
9085
__a, __b,
9086
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9087
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9088
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9089
#endif
9090
}
9091
9092
static __inline__ vector unsigned short __ATTRS_o_ai
9093
vec_sld(vector unsigned short __a, vector unsigned short __b,
9094
unsigned const int __c) {
9095
unsigned char __d = __c & 0x0F;
9096
#ifdef __LITTLE_ENDIAN__
9097
return vec_perm(
9098
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9099
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9100
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9101
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9102
#else
9103
return vec_perm(
9104
__a, __b,
9105
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9106
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9107
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9108
#endif
9109
}
9110
9111
static __inline__ vector bool short __ATTRS_o_ai
9112
vec_sld(vector bool short __a, vector bool short __b, unsigned const int __c) {
9113
unsigned char __d = __c & 0x0F;
9114
#ifdef __LITTLE_ENDIAN__
9115
return vec_perm(
9116
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9117
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9118
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9119
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9120
#else
9121
return vec_perm(
9122
__a, __b,
9123
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9124
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9125
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9126
#endif
9127
}
9128
9129
static __inline__ vector pixel __ATTRS_o_ai vec_sld(vector pixel __a,
9130
vector pixel __b,
9131
unsigned const int __c) {
9132
unsigned char __d = __c & 0x0F;
9133
#ifdef __LITTLE_ENDIAN__
9134
return vec_perm(
9135
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9136
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9137
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9138
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9139
#else
9140
return vec_perm(
9141
__a, __b,
9142
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9143
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9144
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9145
#endif
9146
}
9147
9148
static __inline__ vector signed int __ATTRS_o_ai
9149
vec_sld(vector signed int __a, vector signed int __b, unsigned const int __c) {
9150
unsigned char __d = __c & 0x0F;
9151
#ifdef __LITTLE_ENDIAN__
9152
return vec_perm(
9153
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9154
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9155
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9156
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9157
#else
9158
return vec_perm(
9159
__a, __b,
9160
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9161
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9162
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9163
#endif
9164
}
9165
9166
static __inline__ vector unsigned int __ATTRS_o_ai vec_sld(
9167
vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {
9168
unsigned char __d = __c & 0x0F;
9169
#ifdef __LITTLE_ENDIAN__
9170
return vec_perm(
9171
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9172
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9173
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9174
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9175
#else
9176
return vec_perm(
9177
__a, __b,
9178
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9179
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9180
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9181
#endif
9182
}
9183
9184
static __inline__ vector bool int __ATTRS_o_ai vec_sld(vector bool int __a,
9185
vector bool int __b,
9186
unsigned const int __c) {
9187
unsigned char __d = __c & 0x0F;
9188
#ifdef __LITTLE_ENDIAN__
9189
return vec_perm(
9190
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9191
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9192
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9193
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9194
#else
9195
return vec_perm(
9196
__a, __b,
9197
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9198
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9199
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9200
#endif
9201
}
9202
9203
static __inline__ vector float __ATTRS_o_ai vec_sld(vector float __a,
9204
vector float __b,
9205
unsigned const int __c) {
9206
unsigned char __d = __c & 0x0F;
9207
#ifdef __LITTLE_ENDIAN__
9208
return vec_perm(
9209
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9210
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9211
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9212
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9213
#else
9214
return vec_perm(
9215
__a, __b,
9216
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9217
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9218
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9219
#endif
9220
}
9221
9222
#ifdef __VSX__
9223
static __inline__ vector bool long long __ATTRS_o_ai
9224
vec_sld(vector bool long long __a, vector bool long long __b,
9225
unsigned const int __c) {
9226
unsigned char __d = __c & 0x0F;
9227
#ifdef __LITTLE_ENDIAN__
9228
return vec_perm(
9229
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9230
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9231
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9232
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9233
#else
9234
return vec_perm(
9235
__a, __b,
9236
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9237
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9238
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9239
#endif
9240
}
9241
9242
static __inline__ vector signed long long __ATTRS_o_ai
9243
vec_sld(vector signed long long __a, vector signed long long __b,
9244
unsigned const int __c) {
9245
unsigned char __d = __c & 0x0F;
9246
#ifdef __LITTLE_ENDIAN__
9247
return vec_perm(
9248
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9249
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9250
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9251
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9252
#else
9253
return vec_perm(
9254
__a, __b,
9255
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9256
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9257
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9258
#endif
9259
}
9260
9261
static __inline__ vector unsigned long long __ATTRS_o_ai
9262
vec_sld(vector unsigned long long __a, vector unsigned long long __b,
9263
unsigned const int __c) {
9264
unsigned char __d = __c & 0x0F;
9265
#ifdef __LITTLE_ENDIAN__
9266
return vec_perm(
9267
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9268
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9269
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9270
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9271
#else
9272
return vec_perm(
9273
__a, __b,
9274
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9275
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9276
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9277
#endif
9278
}
9279
9280
static __inline__ vector double __ATTRS_o_ai vec_sld(vector double __a,
9281
vector double __b,
9282
unsigned const int __c) {
9283
unsigned char __d = __c & 0x0F;
9284
#ifdef __LITTLE_ENDIAN__
9285
return vec_perm(
9286
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9287
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9288
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9289
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9290
#else
9291
return vec_perm(
9292
__a, __b,
9293
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9294
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9295
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9296
#endif
9297
}
9298
#endif
9299
9300
/* vec_sldw */
9301
static __inline__ vector signed char __ATTRS_o_ai vec_sldw(
9302
vector signed char __a, vector signed char __b, unsigned const int __c) {
9303
return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9304
}
9305
9306
static __inline__ vector unsigned char __ATTRS_o_ai
9307
vec_sldw(vector unsigned char __a, vector unsigned char __b,
9308
unsigned const int __c) {
9309
return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9310
}
9311
9312
static __inline__ vector signed short __ATTRS_o_ai vec_sldw(
9313
vector signed short __a, vector signed short __b, unsigned const int __c) {
9314
return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9315
}
9316
9317
static __inline__ vector unsigned short __ATTRS_o_ai
9318
vec_sldw(vector unsigned short __a, vector unsigned short __b,
9319
unsigned const int __c) {
9320
return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9321
}
9322
9323
static __inline__ vector signed int __ATTRS_o_ai
9324
vec_sldw(vector signed int __a, vector signed int __b, unsigned const int __c) {
9325
return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9326
}
9327
9328
static __inline__ vector unsigned int __ATTRS_o_ai vec_sldw(
9329
vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {
9330
return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9331
}
9332
9333
static __inline__ vector float __ATTRS_o_ai vec_sldw(
9334
vector float __a, vector float __b, unsigned const int __c) {
9335
return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9336
}
9337
9338
#ifdef __VSX__
9339
static __inline__ vector signed long long __ATTRS_o_ai
9340
vec_sldw(vector signed long long __a, vector signed long long __b,
9341
unsigned const int __c) {
9342
return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9343
}
9344
9345
static __inline__ vector unsigned long long __ATTRS_o_ai
9346
vec_sldw(vector unsigned long long __a, vector unsigned long long __b,
9347
unsigned const int __c) {
9348
return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9349
}
9350
9351
static __inline__ vector double __ATTRS_o_ai vec_sldw(
9352
vector double __a, vector double __b, unsigned const int __c) {
9353
return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9354
}
9355
#endif
9356
9357
#ifdef __POWER9_VECTOR__
9358
/* vec_slv */
9359
static __inline__ vector unsigned char __ATTRS_o_ai
9360
vec_slv(vector unsigned char __a, vector unsigned char __b) {
9361
return __builtin_altivec_vslv(__a, __b);
9362
}
9363
9364
/* vec_srv */
9365
static __inline__ vector unsigned char __ATTRS_o_ai
9366
vec_srv(vector unsigned char __a, vector unsigned char __b) {
9367
return __builtin_altivec_vsrv(__a, __b);
9368
}
9369
#endif
9370
9371
/* vec_vsldoi */
9372
9373
static __inline__ vector signed char __ATTRS_o_ai
9374
vec_vsldoi(vector signed char __a, vector signed char __b, unsigned char __c) {
9375
unsigned char __d = __c & 0x0F;
9376
#ifdef __LITTLE_ENDIAN__
9377
return vec_perm(
9378
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9379
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9380
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9381
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9382
#else
9383
return vec_perm(
9384
__a, __b,
9385
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9386
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9387
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9388
#endif
9389
}
9390
9391
static __inline__ vector unsigned char __ATTRS_o_ai vec_vsldoi(
9392
vector unsigned char __a, vector unsigned char __b, unsigned char __c) {
9393
unsigned char __d = __c & 0x0F;
9394
#ifdef __LITTLE_ENDIAN__
9395
return vec_perm(
9396
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9397
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9398
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9399
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9400
#else
9401
return vec_perm(
9402
__a, __b,
9403
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9404
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9405
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9406
#endif
9407
}
9408
9409
static __inline__ vector short __ATTRS_o_ai vec_vsldoi(vector short __a,
9410
vector short __b,
9411
unsigned char __c) {
9412
unsigned char __d = __c & 0x0F;
9413
#ifdef __LITTLE_ENDIAN__
9414
return vec_perm(
9415
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9416
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9417
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9418
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9419
#else
9420
return vec_perm(
9421
__a, __b,
9422
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9423
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9424
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9425
#endif
9426
}
9427
9428
static __inline__ vector unsigned short __ATTRS_o_ai vec_vsldoi(
9429
vector unsigned short __a, vector unsigned short __b, unsigned char __c) {
9430
unsigned char __d = __c & 0x0F;
9431
#ifdef __LITTLE_ENDIAN__
9432
return vec_perm(
9433
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9434
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9435
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9436
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9437
#else
9438
return vec_perm(
9439
__a, __b,
9440
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9441
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9442
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9443
#endif
9444
}
9445
9446
static __inline__ vector pixel __ATTRS_o_ai vec_vsldoi(vector pixel __a,
9447
vector pixel __b,
9448
unsigned char __c) {
9449
unsigned char __d = __c & 0x0F;
9450
#ifdef __LITTLE_ENDIAN__
9451
return vec_perm(
9452
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9453
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9454
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9455
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9456
#else
9457
return vec_perm(
9458
__a, __b,
9459
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9460
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9461
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9462
#endif
9463
}
9464
9465
static __inline__ vector int __ATTRS_o_ai vec_vsldoi(vector int __a,
9466
vector int __b,
9467
unsigned char __c) {
9468
unsigned char __d = __c & 0x0F;
9469
#ifdef __LITTLE_ENDIAN__
9470
return vec_perm(
9471
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9472
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9473
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9474
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9475
#else
9476
return vec_perm(
9477
__a, __b,
9478
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9479
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9480
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9481
#endif
9482
}
9483
9484
static __inline__ vector unsigned int __ATTRS_o_ai vec_vsldoi(
9485
vector unsigned int __a, vector unsigned int __b, unsigned char __c) {
9486
unsigned char __d = __c & 0x0F;
9487
#ifdef __LITTLE_ENDIAN__
9488
return vec_perm(
9489
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9490
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9491
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9492
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9493
#else
9494
return vec_perm(
9495
__a, __b,
9496
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9497
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9498
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9499
#endif
9500
}
9501
9502
static __inline__ vector float __ATTRS_o_ai vec_vsldoi(vector float __a,
9503
vector float __b,
9504
unsigned char __c) {
9505
unsigned char __d = __c & 0x0F;
9506
#ifdef __LITTLE_ENDIAN__
9507
return vec_perm(
9508
__b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9509
20 - __d, 21 - __d, 22 - __d, 23 - __d,
9510
24 - __d, 25 - __d, 26 - __d, 27 - __d,
9511
28 - __d, 29 - __d, 30 - __d, 31 - __d));
9512
#else
9513
return vec_perm(
9514
__a, __b,
9515
(vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9516
__d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9517
__d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9518
#endif
9519
}
9520
9521
/* vec_sll */
9522
9523
static __inline__ vector signed char __ATTRS_o_ai
9524
vec_sll(vector signed char __a, vector unsigned char __b) {
9525
return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9526
(vector int)__b);
9527
}
9528
9529
static __inline__ vector signed char __ATTRS_o_ai
9530
vec_sll(vector signed char __a, vector unsigned short __b) {
9531
return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9532
(vector int)__b);
9533
}
9534
9535
static __inline__ vector signed char __ATTRS_o_ai
9536
vec_sll(vector signed char __a, vector unsigned int __b) {
9537
return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9538
(vector int)__b);
9539
}
9540
9541
static __inline__ vector unsigned char __ATTRS_o_ai
9542
vec_sll(vector unsigned char __a, vector unsigned char __b) {
9543
return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9544
(vector int)__b);
9545
}
9546
9547
static __inline__ vector unsigned char __ATTRS_o_ai
9548
vec_sll(vector unsigned char __a, vector unsigned short __b) {
9549
return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9550
(vector int)__b);
9551
}
9552
9553
static __inline__ vector unsigned char __ATTRS_o_ai
9554
vec_sll(vector unsigned char __a, vector unsigned int __b) {
9555
return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9556
(vector int)__b);
9557
}
9558
9559
static __inline__ vector bool char __ATTRS_o_ai
9560
vec_sll(vector bool char __a, vector unsigned char __b) {
9561
return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9562
(vector int)__b);
9563
}
9564
9565
static __inline__ vector bool char __ATTRS_o_ai
9566
vec_sll(vector bool char __a, vector unsigned short __b) {
9567
return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9568
(vector int)__b);
9569
}
9570
9571
static __inline__ vector bool char __ATTRS_o_ai
9572
vec_sll(vector bool char __a, vector unsigned int __b) {
9573
return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9574
(vector int)__b);
9575
}
9576
9577
static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
9578
vector unsigned char __b) {
9579
return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9580
}
9581
9582
static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
9583
vector unsigned short __b) {
9584
return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9585
}
9586
9587
static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
9588
vector unsigned int __b) {
9589
return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9590
}
9591
9592
static __inline__ vector unsigned short __ATTRS_o_ai
9593
vec_sll(vector unsigned short __a, vector unsigned char __b) {
9594
return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9595
(vector int)__b);
9596
}
9597
9598
static __inline__ vector unsigned short __ATTRS_o_ai
9599
vec_sll(vector unsigned short __a, vector unsigned short __b) {
9600
return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9601
(vector int)__b);
9602
}
9603
9604
static __inline__ vector unsigned short __ATTRS_o_ai
9605
vec_sll(vector unsigned short __a, vector unsigned int __b) {
9606
return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9607
(vector int)__b);
9608
}
9609
9610
static __inline__ vector bool short __ATTRS_o_ai
9611
vec_sll(vector bool short __a, vector unsigned char __b) {
9612
return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9613
(vector int)__b);
9614
}
9615
9616
static __inline__ vector bool short __ATTRS_o_ai
9617
vec_sll(vector bool short __a, vector unsigned short __b) {
9618
return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9619
(vector int)__b);
9620
}
9621
9622
static __inline__ vector bool short __ATTRS_o_ai
9623
vec_sll(vector bool short __a, vector unsigned int __b) {
9624
return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9625
(vector int)__b);
9626
}
9627
9628
static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
9629
vector unsigned char __b) {
9630
return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9631
}
9632
9633
static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
9634
vector unsigned short __b) {
9635
return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9636
}
9637
9638
static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
9639
vector unsigned int __b) {
9640
return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9641
}
9642
9643
static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
9644
vector unsigned char __b) {
9645
return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9646
}
9647
9648
static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
9649
vector unsigned short __b) {
9650
return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9651
}
9652
9653
static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
9654
vector unsigned int __b) {
9655
return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9656
}
9657
9658
static __inline__ vector unsigned int __ATTRS_o_ai
9659
vec_sll(vector unsigned int __a, vector unsigned char __b) {
9660
return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9661
(vector int)__b);
9662
}
9663
9664
static __inline__ vector unsigned int __ATTRS_o_ai
9665
vec_sll(vector unsigned int __a, vector unsigned short __b) {
9666
return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9667
(vector int)__b);
9668
}
9669
9670
static __inline__ vector unsigned int __ATTRS_o_ai
9671
vec_sll(vector unsigned int __a, vector unsigned int __b) {
9672
return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9673
(vector int)__b);
9674
}
9675
9676
static __inline__ vector bool int __ATTRS_o_ai
9677
vec_sll(vector bool int __a, vector unsigned char __b) {
9678
return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9679
(vector int)__b);
9680
}
9681
9682
static __inline__ vector bool int __ATTRS_o_ai
9683
vec_sll(vector bool int __a, vector unsigned short __b) {
9684
return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9685
(vector int)__b);
9686
}
9687
9688
static __inline__ vector bool int __ATTRS_o_ai
9689
vec_sll(vector bool int __a, vector unsigned int __b) {
9690
return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9691
(vector int)__b);
9692
}
9693
9694
#ifdef __VSX__
9695
static __inline__ vector signed long long __ATTRS_o_ai
9696
vec_sll(vector signed long long __a, vector unsigned char __b) {
9697
return (vector signed long long)__builtin_altivec_vsl((vector int)__a,
9698
(vector int)__b);
9699
}
9700
9701
static __inline__ vector unsigned long long __ATTRS_o_ai
9702
vec_sll(vector unsigned long long __a, vector unsigned char __b) {
9703
return (vector unsigned long long)__builtin_altivec_vsl((vector int)__a,
9704
(vector int)__b);
9705
}
9706
#endif
9707
9708
/* vec_vsl */
9709
9710
static __inline__ vector signed char __ATTRS_o_ai
9711
vec_vsl(vector signed char __a, vector unsigned char __b) {
9712
return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9713
(vector int)__b);
9714
}
9715
9716
static __inline__ vector signed char __ATTRS_o_ai
9717
vec_vsl(vector signed char __a, vector unsigned short __b) {
9718
return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9719
(vector int)__b);
9720
}
9721
9722
static __inline__ vector signed char __ATTRS_o_ai
9723
vec_vsl(vector signed char __a, vector unsigned int __b) {
9724
return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9725
(vector int)__b);
9726
}
9727
9728
static __inline__ vector unsigned char __ATTRS_o_ai
9729
vec_vsl(vector unsigned char __a, vector unsigned char __b) {
9730
return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9731
(vector int)__b);
9732
}
9733
9734
static __inline__ vector unsigned char __ATTRS_o_ai
9735
vec_vsl(vector unsigned char __a, vector unsigned short __b) {
9736
return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9737
(vector int)__b);
9738
}
9739
9740
static __inline__ vector unsigned char __ATTRS_o_ai
9741
vec_vsl(vector unsigned char __a, vector unsigned int __b) {
9742
return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9743
(vector int)__b);
9744
}
9745
9746
static __inline__ vector bool char __ATTRS_o_ai
9747
vec_vsl(vector bool char __a, vector unsigned char __b) {
9748
return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9749
(vector int)__b);
9750
}
9751
9752
static __inline__ vector bool char __ATTRS_o_ai
9753
vec_vsl(vector bool char __a, vector unsigned short __b) {
9754
return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9755
(vector int)__b);
9756
}
9757
9758
static __inline__ vector bool char __ATTRS_o_ai
9759
vec_vsl(vector bool char __a, vector unsigned int __b) {
9760
return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9761
(vector int)__b);
9762
}
9763
9764
static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
9765
vector unsigned char __b) {
9766
return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9767
}
9768
9769
static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
9770
vector unsigned short __b) {
9771
return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9772
}
9773
9774
static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
9775
vector unsigned int __b) {
9776
return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9777
}
9778
9779
static __inline__ vector unsigned short __ATTRS_o_ai
9780
vec_vsl(vector unsigned short __a, vector unsigned char __b) {
9781
return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9782
(vector int)__b);
9783
}
9784
9785
static __inline__ vector unsigned short __ATTRS_o_ai
9786
vec_vsl(vector unsigned short __a, vector unsigned short __b) {
9787
return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9788
(vector int)__b);
9789
}
9790
9791
static __inline__ vector unsigned short __ATTRS_o_ai
9792
vec_vsl(vector unsigned short __a, vector unsigned int __b) {
9793
return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9794
(vector int)__b);
9795
}
9796
9797
static __inline__ vector bool short __ATTRS_o_ai
9798
vec_vsl(vector bool short __a, vector unsigned char __b) {
9799
return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9800
(vector int)__b);
9801
}
9802
9803
static __inline__ vector bool short __ATTRS_o_ai
9804
vec_vsl(vector bool short __a, vector unsigned short __b) {
9805
return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9806
(vector int)__b);
9807
}
9808
9809
static __inline__ vector bool short __ATTRS_o_ai
9810
vec_vsl(vector bool short __a, vector unsigned int __b) {
9811
return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9812
(vector int)__b);
9813
}
9814
9815
static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
9816
vector unsigned char __b) {
9817
return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9818
}
9819
9820
static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
9821
vector unsigned short __b) {
9822
return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9823
}
9824
9825
static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
9826
vector unsigned int __b) {
9827
return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9828
}
9829
9830
static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
9831
vector unsigned char __b) {
9832
return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9833
}
9834
9835
static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
9836
vector unsigned short __b) {
9837
return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9838
}
9839
9840
static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
9841
vector unsigned int __b) {
9842
return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9843
}
9844
9845
static __inline__ vector unsigned int __ATTRS_o_ai
9846
vec_vsl(vector unsigned int __a, vector unsigned char __b) {
9847
return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9848
(vector int)__b);
9849
}
9850
9851
static __inline__ vector unsigned int __ATTRS_o_ai
9852
vec_vsl(vector unsigned int __a, vector unsigned short __b) {
9853
return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9854
(vector int)__b);
9855
}
9856
9857
static __inline__ vector unsigned int __ATTRS_o_ai
9858
vec_vsl(vector unsigned int __a, vector unsigned int __b) {
9859
return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9860
(vector int)__b);
9861
}
9862
9863
static __inline__ vector bool int __ATTRS_o_ai
9864
vec_vsl(vector bool int __a, vector unsigned char __b) {
9865
return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9866
(vector int)__b);
9867
}
9868
9869
static __inline__ vector bool int __ATTRS_o_ai
9870
vec_vsl(vector bool int __a, vector unsigned short __b) {
9871
return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9872
(vector int)__b);
9873
}
9874
9875
static __inline__ vector bool int __ATTRS_o_ai
9876
vec_vsl(vector bool int __a, vector unsigned int __b) {
9877
return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9878
(vector int)__b);
9879
}
9880
9881
/* vec_slo */
9882
9883
static __inline__ vector signed char __ATTRS_o_ai
9884
vec_slo(vector signed char __a, vector signed char __b) {
9885
return (vector signed char)__builtin_altivec_vslo((vector int)__a,
9886
(vector int)__b);
9887
}
9888
9889
static __inline__ vector signed char __ATTRS_o_ai
9890
vec_slo(vector signed char __a, vector unsigned char __b) {
9891
return (vector signed char)__builtin_altivec_vslo((vector int)__a,
9892
(vector int)__b);
9893
}
9894
9895
static __inline__ vector unsigned char __ATTRS_o_ai
9896
vec_slo(vector unsigned char __a, vector signed char __b) {
9897
return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
9898
(vector int)__b);
9899
}
9900
9901
static __inline__ vector unsigned char __ATTRS_o_ai
9902
vec_slo(vector unsigned char __a, vector unsigned char __b) {
9903
return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
9904
(vector int)__b);
9905
}
9906
9907
static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
9908
vector signed char __b) {
9909
return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9910
}
9911
9912
static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
9913
vector unsigned char __b) {
9914
return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9915
}
9916
9917
static __inline__ vector unsigned short __ATTRS_o_ai
9918
vec_slo(vector unsigned short __a, vector signed char __b) {
9919
return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
9920
(vector int)__b);
9921
}
9922
9923
static __inline__ vector unsigned short __ATTRS_o_ai
9924
vec_slo(vector unsigned short __a, vector unsigned char __b) {
9925
return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
9926
(vector int)__b);
9927
}
9928
9929
static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
9930
vector signed char __b) {
9931
return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9932
}
9933
9934
static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
9935
vector unsigned char __b) {
9936
return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9937
}
9938
9939
static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
9940
vector signed char __b) {
9941
return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
9942
}
9943
9944
static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
9945
vector unsigned char __b) {
9946
return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
9947
}
9948
9949
static __inline__ vector unsigned int __ATTRS_o_ai
9950
vec_slo(vector unsigned int __a, vector signed char __b) {
9951
return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
9952
(vector int)__b);
9953
}
9954
9955
static __inline__ vector unsigned int __ATTRS_o_ai
9956
vec_slo(vector unsigned int __a, vector unsigned char __b) {
9957
return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
9958
(vector int)__b);
9959
}
9960
9961
static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
9962
vector signed char __b) {
9963
return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9964
}
9965
9966
static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
9967
vector unsigned char __b) {
9968
return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9969
}
9970
9971
#ifdef __VSX__
9972
static __inline__ vector signed long long __ATTRS_o_ai
9973
vec_slo(vector signed long long __a, vector signed char __b) {
9974
return (vector signed long long)__builtin_altivec_vslo((vector int)__a,
9975
(vector int)__b);
9976
}
9977
9978
static __inline__ vector signed long long __ATTRS_o_ai
9979
vec_slo(vector signed long long __a, vector unsigned char __b) {
9980
return (vector signed long long)__builtin_altivec_vslo((vector int)__a,
9981
(vector int)__b);
9982
}
9983
9984
static __inline__ vector unsigned long long __ATTRS_o_ai
9985
vec_slo(vector unsigned long long __a, vector signed char __b) {
9986
return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,
9987
(vector int)__b);
9988
}
9989
9990
static __inline__ vector unsigned long long __ATTRS_o_ai
9991
vec_slo(vector unsigned long long __a, vector unsigned char __b) {
9992
return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,
9993
(vector int)__b);
9994
}
9995
#endif
9996
9997
/* vec_vslo */
9998
9999
static __inline__ vector signed char __ATTRS_o_ai
10000
vec_vslo(vector signed char __a, vector signed char __b) {
10001
return (vector signed char)__builtin_altivec_vslo((vector int)__a,
10002
(vector int)__b);
10003
}
10004
10005
static __inline__ vector signed char __ATTRS_o_ai
10006
vec_vslo(vector signed char __a, vector unsigned char __b) {
10007
return (vector signed char)__builtin_altivec_vslo((vector int)__a,
10008
(vector int)__b);
10009
}
10010
10011
static __inline__ vector unsigned char __ATTRS_o_ai
10012
vec_vslo(vector unsigned char __a, vector signed char __b) {
10013
return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
10014
(vector int)__b);
10015
}
10016
10017
static __inline__ vector unsigned char __ATTRS_o_ai
10018
vec_vslo(vector unsigned char __a, vector unsigned char __b) {
10019
return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
10020
(vector int)__b);
10021
}
10022
10023
static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
10024
vector signed char __b) {
10025
return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
10026
}
10027
10028
static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
10029
vector unsigned char __b) {
10030
return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
10031
}
10032
10033
static __inline__ vector unsigned short __ATTRS_o_ai
10034
vec_vslo(vector unsigned short __a, vector signed char __b) {
10035
return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
10036
(vector int)__b);
10037
}
10038
10039
static __inline__ vector unsigned short __ATTRS_o_ai
10040
vec_vslo(vector unsigned short __a, vector unsigned char __b) {
10041
return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
10042
(vector int)__b);
10043
}
10044
10045
static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
10046
vector signed char __b) {
10047
return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
10048
}
10049
10050
static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
10051
vector unsigned char __b) {
10052
return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
10053
}
10054
10055
static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
10056
vector signed char __b) {
10057
return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
10058
}
10059
10060
static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
10061
vector unsigned char __b) {
10062
return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
10063
}
10064
10065
static __inline__ vector unsigned int __ATTRS_o_ai
10066
vec_vslo(vector unsigned int __a, vector signed char __b) {
10067
return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
10068
(vector int)__b);
10069
}
10070
10071
static __inline__ vector unsigned int __ATTRS_o_ai
10072
vec_vslo(vector unsigned int __a, vector unsigned char __b) {
10073
return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
10074
(vector int)__b);
10075
}
10076
10077
static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
10078
vector signed char __b) {
10079
return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
10080
}
10081
10082
static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
10083
vector unsigned char __b) {
10084
return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
10085
}
10086
10087
/* vec_splat */
10088
10089
static __inline__ vector signed char __ATTRS_o_ai
10090
vec_splat(vector signed char __a, unsigned const int __b) {
10091
return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
10092
}
10093
10094
static __inline__ vector unsigned char __ATTRS_o_ai
10095
vec_splat(vector unsigned char __a, unsigned const int __b) {
10096
return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
10097
}
10098
10099
static __inline__ vector bool char __ATTRS_o_ai
10100
vec_splat(vector bool char __a, unsigned const int __b) {
10101
return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
10102
}
10103
10104
static __inline__ vector signed short __ATTRS_o_ai
10105
vec_splat(vector signed short __a, unsigned const int __b) {
10106
unsigned char b0 = (__b & 0x07) * 2;
10107
unsigned char b1 = b0 + 1;
10108
return vec_perm(__a, __a,
10109
(vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
10110
b0, b1, b0, b1, b0, b1));
10111
}
10112
10113
static __inline__ vector unsigned short __ATTRS_o_ai
10114
vec_splat(vector unsigned short __a, unsigned const int __b) {
10115
unsigned char b0 = (__b & 0x07) * 2;
10116
unsigned char b1 = b0 + 1;
10117
return vec_perm(__a, __a,
10118
(vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
10119
b0, b1, b0, b1, b0, b1));
10120
}
10121
10122
static __inline__ vector bool short __ATTRS_o_ai
10123
vec_splat(vector bool short __a, unsigned const int __b) {
10124
unsigned char b0 = (__b & 0x07) * 2;
10125
unsigned char b1 = b0 + 1;
10126
return vec_perm(__a, __a,
10127
(vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
10128
b0, b1, b0, b1, b0, b1));
10129
}
10130
10131
static __inline__ vector pixel __ATTRS_o_ai vec_splat(vector pixel __a,
10132
unsigned const int __b) {
10133
unsigned char b0 = (__b & 0x07) * 2;
10134
unsigned char b1 = b0 + 1;
10135
return vec_perm(__a, __a,
10136
(vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
10137
b0, b1, b0, b1, b0, b1));
10138
}
10139
10140
static __inline__ vector signed int __ATTRS_o_ai
10141
vec_splat(vector signed int __a, unsigned const int __b) {
10142
unsigned char b0 = (__b & 0x03) * 4;
10143
unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
10144
return vec_perm(__a, __a,
10145
(vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
10146
b2, b3, b0, b1, b2, b3));
10147
}
10148
10149
static __inline__ vector unsigned int __ATTRS_o_ai
10150
vec_splat(vector unsigned int __a, unsigned const int __b) {
10151
unsigned char b0 = (__b & 0x03) * 4;
10152
unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
10153
return vec_perm(__a, __a,
10154
(vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
10155
b2, b3, b0, b1, b2, b3));
10156
}
10157
10158
static __inline__ vector bool int __ATTRS_o_ai
10159
vec_splat(vector bool int __a, unsigned const int __b) {
10160
unsigned char b0 = (__b & 0x03) * 4;
10161
unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
10162
return vec_perm(__a, __a,
10163
(vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
10164
b2, b3, b0, b1, b2, b3));
10165
}
10166
10167
static __inline__ vector float __ATTRS_o_ai vec_splat(vector float __a,
10168
unsigned const int __b) {
10169
unsigned char b0 = (__b & 0x03) * 4;
10170
unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
10171
return vec_perm(__a, __a,
10172
(vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
10173
b2, b3, b0, b1, b2, b3));
10174
}
10175
10176
#ifdef __VSX__
10177
static __inline__ vector double __ATTRS_o_ai vec_splat(vector double __a,
10178
unsigned const int __b) {
10179
unsigned char b0 = (__b & 0x01) * 8;
10180
unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
10181
b6 = b0 + 6, b7 = b0 + 7;
10182
return vec_perm(__a, __a,
10183
(vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
10184
b2, b3, b4, b5, b6, b7));
10185
}
10186
static __inline__ vector bool long long __ATTRS_o_ai
10187
vec_splat(vector bool long long __a, unsigned const int __b) {
10188
unsigned char b0 = (__b & 0x01) * 8;
10189
unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
10190
b6 = b0 + 6, b7 = b0 + 7;
10191
return vec_perm(__a, __a,
10192
(vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
10193
b2, b3, b4, b5, b6, b7));
10194
}
10195
static __inline__ vector signed long long __ATTRS_o_ai
10196
vec_splat(vector signed long long __a, unsigned const int __b) {
10197
unsigned char b0 = (__b & 0x01) * 8;
10198
unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
10199
b6 = b0 + 6, b7 = b0 + 7;
10200
return vec_perm(__a, __a,
10201
(vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
10202
b2, b3, b4, b5, b6, b7));
10203
}
10204
static __inline__ vector unsigned long long __ATTRS_o_ai
10205
vec_splat(vector unsigned long long __a, unsigned const int __b) {
10206
unsigned char b0 = (__b & 0x01) * 8;
10207
unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
10208
b6 = b0 + 6, b7 = b0 + 7;
10209
return vec_perm(__a, __a,
10210
(vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
10211
b2, b3, b4, b5, b6, b7));
10212
}
10213
#endif
10214
10215
/* vec_vspltb */
10216
10217
#define __builtin_altivec_vspltb vec_vspltb
10218
10219
static __inline__ vector signed char __ATTRS_o_ai
10220
vec_vspltb(vector signed char __a, unsigned char __b) {
10221
return vec_perm(__a, __a, (vector unsigned char)(__b));
10222
}
10223
10224
static __inline__ vector unsigned char __ATTRS_o_ai
10225
vec_vspltb(vector unsigned char __a, unsigned char __b) {
10226
return vec_perm(__a, __a, (vector unsigned char)(__b));
10227
}
10228
10229
static __inline__ vector bool char __ATTRS_o_ai vec_vspltb(vector bool char __a,
10230
unsigned char __b) {
10231
return vec_perm(__a, __a, (vector unsigned char)(__b));
10232
}
10233
10234
/* vec_vsplth */
10235
10236
#define __builtin_altivec_vsplth vec_vsplth
10237
10238
static __inline__ vector short __ATTRS_o_ai vec_vsplth(vector short __a,
10239
unsigned char __b) {
10240
__b *= 2;
10241
unsigned char b1 = __b + 1;
10242
return vec_perm(__a, __a,
10243
(vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
10244
__b, b1, __b, b1, __b, b1, __b, b1));
10245
}
10246
10247
static __inline__ vector unsigned short __ATTRS_o_ai
10248
vec_vsplth(vector unsigned short __a, unsigned char __b) {
10249
__b *= 2;
10250
unsigned char b1 = __b + 1;
10251
return vec_perm(__a, __a,
10252
(vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
10253
__b, b1, __b, b1, __b, b1, __b, b1));
10254
}
10255
10256
static __inline__ vector bool short __ATTRS_o_ai
10257
vec_vsplth(vector bool short __a, unsigned char __b) {
10258
__b *= 2;
10259
unsigned char b1 = __b + 1;
10260
return vec_perm(__a, __a,
10261
(vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
10262
__b, b1, __b, b1, __b, b1, __b, b1));
10263
}
10264
10265
static __inline__ vector pixel __ATTRS_o_ai vec_vsplth(vector pixel __a,
10266
unsigned char __b) {
10267
__b *= 2;
10268
unsigned char b1 = __b + 1;
10269
return vec_perm(__a, __a,
10270
(vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
10271
__b, b1, __b, b1, __b, b1, __b, b1));
10272
}
10273
10274
/* vec_vspltw */
10275
10276
#define __builtin_altivec_vspltw vec_vspltw
10277
10278
static __inline__ vector int __ATTRS_o_ai vec_vspltw(vector int __a,
10279
unsigned char __b) {
10280
__b *= 4;
10281
unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
10282
return vec_perm(__a, __a,
10283
(vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
10284
b1, b2, b3, __b, b1, b2, b3));
10285
}
10286
10287
static __inline__ vector unsigned int __ATTRS_o_ai
10288
vec_vspltw(vector unsigned int __a, unsigned char __b) {
10289
__b *= 4;
10290
unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
10291
return vec_perm(__a, __a,
10292
(vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
10293
b1, b2, b3, __b, b1, b2, b3));
10294
}
10295
10296
static __inline__ vector bool int __ATTRS_o_ai vec_vspltw(vector bool int __a,
10297
unsigned char __b) {
10298
__b *= 4;
10299
unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
10300
return vec_perm(__a, __a,
10301
(vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
10302
b1, b2, b3, __b, b1, b2, b3));
10303
}
10304
10305
static __inline__ vector float __ATTRS_o_ai vec_vspltw(vector float __a,
10306
unsigned char __b) {
10307
__b *= 4;
10308
unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
10309
return vec_perm(__a, __a,
10310
(vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
10311
b1, b2, b3, __b, b1, b2, b3));
10312
}
10313
10314
/* vec_splat_s8 */
10315
10316
#define __builtin_altivec_vspltisb vec_splat_s8
10317
10318
// FIXME: parameter should be treated as 5-bit signed literal
10319
static __inline__ vector signed char __ATTRS_o_ai
10320
vec_splat_s8(signed char __a) {
10321
return (vector signed char)(__a);
10322
}
10323
10324
/* vec_vspltisb */
10325
10326
// FIXME: parameter should be treated as 5-bit signed literal
10327
static __inline__ vector signed char __ATTRS_o_ai
10328
vec_vspltisb(signed char __a) {
10329
return (vector signed char)(__a);
10330
}
10331
10332
/* vec_splat_s16 */
10333
10334
#define __builtin_altivec_vspltish vec_splat_s16
10335
10336
// FIXME: parameter should be treated as 5-bit signed literal
10337
static __inline__ vector short __ATTRS_o_ai vec_splat_s16(signed char __a) {
10338
return (vector short)(__a);
10339
}
10340
10341
/* vec_vspltish */
10342
10343
// FIXME: parameter should be treated as 5-bit signed literal
10344
static __inline__ vector short __ATTRS_o_ai vec_vspltish(signed char __a) {
10345
return (vector short)(__a);
10346
}
10347
10348
/* vec_splat_s32 */
10349
10350
#define __builtin_altivec_vspltisw vec_splat_s32
10351
10352
// FIXME: parameter should be treated as 5-bit signed literal
10353
static __inline__ vector int __ATTRS_o_ai vec_splat_s32(signed char __a) {
10354
return (vector int)(__a);
10355
}
10356
10357
/* vec_vspltisw */
10358
10359
// FIXME: parameter should be treated as 5-bit signed literal
10360
static __inline__ vector int __ATTRS_o_ai vec_vspltisw(signed char __a) {
10361
return (vector int)(__a);
10362
}
10363
10364
/* vec_splat_u8 */
10365
10366
// FIXME: parameter should be treated as 5-bit signed literal
10367
static __inline__ vector unsigned char __ATTRS_o_ai
10368
vec_splat_u8(unsigned char __a) {
10369
return (vector unsigned char)(__a);
10370
}
10371
10372
/* vec_splat_u16 */
10373
10374
// FIXME: parameter should be treated as 5-bit signed literal
10375
static __inline__ vector unsigned short __ATTRS_o_ai
10376
vec_splat_u16(signed char __a) {
10377
return (vector unsigned short)(__a);
10378
}
10379
10380
/* vec_splat_u32 */
10381
10382
// FIXME: parameter should be treated as 5-bit signed literal
10383
static __inline__ vector unsigned int __ATTRS_o_ai
10384
vec_splat_u32(signed char __a) {
10385
return (vector unsigned int)(__a);
10386
}
10387
10388
/* vec_sr */
10389
10390
// vec_sr does modulo arithmetic on __b first, so __b is allowed to be more
10391
// than the length of __a.
10392
static __inline__ vector unsigned char __ATTRS_o_ai
10393
vec_sr(vector unsigned char __a, vector unsigned char __b) {
10394
return __a >>
10395
(__b % (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));
10396
}
10397
10398
static __inline__ vector signed char __ATTRS_o_ai
10399
vec_sr(vector signed char __a, vector unsigned char __b) {
10400
return (vector signed char)vec_sr((vector unsigned char)__a, __b);
10401
}
10402
10403
static __inline__ vector unsigned short __ATTRS_o_ai
10404
vec_sr(vector unsigned short __a, vector unsigned short __b) {
10405
return __a >>
10406
(__b % (vector unsigned short)(sizeof(unsigned short) * __CHAR_BIT__));
10407
}
10408
10409
static __inline__ vector short __ATTRS_o_ai vec_sr(vector short __a,
10410
vector unsigned short __b) {
10411
return (vector short)vec_sr((vector unsigned short)__a, __b);
10412
}
10413
10414
static __inline__ vector unsigned int __ATTRS_o_ai
10415
vec_sr(vector unsigned int __a, vector unsigned int __b) {
10416
return __a >>
10417
(__b % (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));
10418
}
10419
10420
static __inline__ vector int __ATTRS_o_ai vec_sr(vector int __a,
10421
vector unsigned int __b) {
10422
return (vector int)vec_sr((vector unsigned int)__a, __b);
10423
}
10424
10425
#ifdef __POWER8_VECTOR__
10426
static __inline__ vector unsigned long long __ATTRS_o_ai
10427
vec_sr(vector unsigned long long __a, vector unsigned long long __b) {
10428
return __a >> (__b % (vector unsigned long long)(sizeof(unsigned long long) *
10429
__CHAR_BIT__));
10430
}
10431
10432
static __inline__ vector long long __ATTRS_o_ai
10433
vec_sr(vector long long __a, vector unsigned long long __b) {
10434
return (vector long long)vec_sr((vector unsigned long long)__a, __b);
10435
}
10436
#elif defined(__VSX__)
10437
static __inline__ vector unsigned long long __ATTRS_o_ai
10438
vec_sr(vector unsigned long long __a, vector unsigned long long __b) {
10439
__b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
10440
10441
// Big endian element zero (the left doubleword) can be right shifted as-is.
10442
// However the shift amount must be in the right doubleword.
10443
// The other element needs to be swapped into the left doubleword and
10444
// shifted. Then the left doublewords of the two result vectors are merged.
10445
vector unsigned long long __swapshift =
10446
__builtin_shufflevector(__b, __b, 1, 0);
10447
vector unsigned long long __leftelt =
10448
(vector unsigned long long)__builtin_altivec_vsro(
10449
(vector signed int)__a, (vector signed int)__swapshift);
10450
#ifdef __LITTLE_ENDIAN__
10451
__leftelt = (vector unsigned long long)__builtin_altivec_vsr(
10452
(vector signed int)__leftelt,
10453
(vector signed int)vec_vspltb((vector unsigned char)__swapshift, 0));
10454
#else
10455
__leftelt = (vector unsigned long long)__builtin_altivec_vsr(
10456
(vector signed int)__leftelt,
10457
(vector signed int)vec_vspltb((vector unsigned char)__swapshift, 15));
10458
#endif
10459
__a = __builtin_shufflevector(__a, __a, 1, 0);
10460
vector unsigned long long __rightelt =
10461
(vector unsigned long long)__builtin_altivec_vsro((vector signed int)__a,
10462
(vector signed int)__b);
10463
#ifdef __LITTLE_ENDIAN__
10464
__rightelt = (vector unsigned long long)__builtin_altivec_vsr(
10465
(vector signed int)__rightelt,
10466
(vector signed int)vec_vspltb((vector unsigned char)__b, 0));
10467
return __builtin_shufflevector(__rightelt, __leftelt, 1, 3);
10468
#else
10469
__rightelt = (vector unsigned long long)__builtin_altivec_vsr(
10470
(vector signed int)__rightelt,
10471
(vector signed int)vec_vspltb((vector unsigned char)__b, 15));
10472
return __builtin_shufflevector(__leftelt, __rightelt, 0, 2);
10473
#endif
10474
}
10475
10476
static __inline__ vector long long __ATTRS_o_ai
10477
vec_sr(vector long long __a, vector unsigned long long __b) {
10478
return (vector long long)vec_sr((vector unsigned long long)__a, __b);
10479
}
10480
#endif /* __VSX__ */
10481
10482
/* vec_vsrb */
10483
10484
#define __builtin_altivec_vsrb vec_vsrb
10485
10486
static __inline__ vector signed char __ATTRS_o_ai
10487
vec_vsrb(vector signed char __a, vector unsigned char __b) {
10488
return vec_sr(__a, __b);
10489
}
10490
10491
static __inline__ vector unsigned char __ATTRS_o_ai
10492
vec_vsrb(vector unsigned char __a, vector unsigned char __b) {
10493
return vec_sr(__a, __b);
10494
}
10495
10496
/* vec_vsrh */
10497
10498
#define __builtin_altivec_vsrh vec_vsrh
10499
10500
static __inline__ vector short __ATTRS_o_ai
10501
vec_vsrh(vector short __a, vector unsigned short __b) {
10502
return vec_sr(__a, __b);
10503
}
10504
10505
static __inline__ vector unsigned short __ATTRS_o_ai
10506
vec_vsrh(vector unsigned short __a, vector unsigned short __b) {
10507
return vec_sr(__a, __b);
10508
}
10509
10510
/* vec_vsrw */
10511
10512
#define __builtin_altivec_vsrw vec_vsrw
10513
10514
static __inline__ vector int __ATTRS_o_ai vec_vsrw(vector int __a,
10515
vector unsigned int __b) {
10516
return vec_sr(__a, __b);
10517
}
10518
10519
static __inline__ vector unsigned int __ATTRS_o_ai
10520
vec_vsrw(vector unsigned int __a, vector unsigned int __b) {
10521
return vec_sr(__a, __b);
10522
}
10523
10524
/* vec_sra */
10525
10526
static __inline__ vector signed char __ATTRS_o_ai
10527
vec_sra(vector signed char __a, vector unsigned char __b) {
10528
return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
10529
}
10530
10531
static __inline__ vector unsigned char __ATTRS_o_ai
10532
vec_sra(vector unsigned char __a, vector unsigned char __b) {
10533
return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
10534
}
10535
10536
static __inline__ vector short __ATTRS_o_ai vec_sra(vector short __a,
10537
vector unsigned short __b) {
10538
return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
10539
}
10540
10541
static __inline__ vector unsigned short __ATTRS_o_ai
10542
vec_sra(vector unsigned short __a, vector unsigned short __b) {
10543
return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
10544
}
10545
10546
static __inline__ vector int __ATTRS_o_ai vec_sra(vector int __a,
10547
vector unsigned int __b) {
10548
return __builtin_altivec_vsraw(__a, __b);
10549
}
10550
10551
static __inline__ vector unsigned int __ATTRS_o_ai
10552
vec_sra(vector unsigned int __a, vector unsigned int __b) {
10553
return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
10554
}
10555
10556
#ifdef __POWER8_VECTOR__
10557
static __inline__ vector signed long long __ATTRS_o_ai
10558
vec_sra(vector signed long long __a, vector unsigned long long __b) {
10559
return __a >> __b;
10560
}
10561
10562
static __inline__ vector unsigned long long __ATTRS_o_ai
10563
vec_sra(vector unsigned long long __a, vector unsigned long long __b) {
10564
return (vector unsigned long long)((vector signed long long)__a >> __b);
10565
}
10566
#elif defined(__VSX__)
10567
static __inline__ vector signed long long __ATTRS_o_ai
10568
vec_sra(vector signed long long __a, vector unsigned long long __b) {
10569
__b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
10570
return __a >> __b;
10571
}
10572
10573
static __inline__ vector unsigned long long __ATTRS_o_ai
10574
vec_sra(vector unsigned long long __a, vector unsigned long long __b) {
10575
__b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
10576
return (vector unsigned long long)((vector signed long long)__a >> __b);
10577
}
10578
#endif /* __VSX__ */
10579
10580
/* vec_vsrab */
10581
10582
static __inline__ vector signed char __ATTRS_o_ai
10583
vec_vsrab(vector signed char __a, vector unsigned char __b) {
10584
return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
10585
}
10586
10587
static __inline__ vector unsigned char __ATTRS_o_ai
10588
vec_vsrab(vector unsigned char __a, vector unsigned char __b) {
10589
return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
10590
}
10591
10592
/* vec_vsrah */
10593
10594
static __inline__ vector short __ATTRS_o_ai
10595
vec_vsrah(vector short __a, vector unsigned short __b) {
10596
return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
10597
}
10598
10599
static __inline__ vector unsigned short __ATTRS_o_ai
10600
vec_vsrah(vector unsigned short __a, vector unsigned short __b) {
10601
return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
10602
}
10603
10604
/* vec_vsraw */
10605
10606
static __inline__ vector int __ATTRS_o_ai vec_vsraw(vector int __a,
10607
vector unsigned int __b) {
10608
return __builtin_altivec_vsraw(__a, __b);
10609
}
10610
10611
static __inline__ vector unsigned int __ATTRS_o_ai
10612
vec_vsraw(vector unsigned int __a, vector unsigned int __b) {
10613
return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
10614
}
10615
10616
/* vec_srl */
10617
10618
static __inline__ vector signed char __ATTRS_o_ai
10619
vec_srl(vector signed char __a, vector unsigned char __b) {
10620
return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10621
(vector int)__b);
10622
}
10623
10624
static __inline__ vector signed char __ATTRS_o_ai
10625
vec_srl(vector signed char __a, vector unsigned short __b) {
10626
return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10627
(vector int)__b);
10628
}
10629
10630
static __inline__ vector signed char __ATTRS_o_ai
10631
vec_srl(vector signed char __a, vector unsigned int __b) {
10632
return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10633
(vector int)__b);
10634
}
10635
10636
static __inline__ vector unsigned char __ATTRS_o_ai
10637
vec_srl(vector unsigned char __a, vector unsigned char __b) {
10638
return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10639
(vector int)__b);
10640
}
10641
10642
static __inline__ vector unsigned char __ATTRS_o_ai
10643
vec_srl(vector unsigned char __a, vector unsigned short __b) {
10644
return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10645
(vector int)__b);
10646
}
10647
10648
static __inline__ vector unsigned char __ATTRS_o_ai
10649
vec_srl(vector unsigned char __a, vector unsigned int __b) {
10650
return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10651
(vector int)__b);
10652
}
10653
10654
static __inline__ vector bool char __ATTRS_o_ai
10655
vec_srl(vector bool char __a, vector unsigned char __b) {
10656
return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10657
(vector int)__b);
10658
}
10659
10660
static __inline__ vector bool char __ATTRS_o_ai
10661
vec_srl(vector bool char __a, vector unsigned short __b) {
10662
return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10663
(vector int)__b);
10664
}
10665
10666
static __inline__ vector bool char __ATTRS_o_ai
10667
vec_srl(vector bool char __a, vector unsigned int __b) {
10668
return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10669
(vector int)__b);
10670
}
10671
10672
static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
10673
vector unsigned char __b) {
10674
return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10675
}
10676
10677
static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
10678
vector unsigned short __b) {
10679
return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10680
}
10681
10682
static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
10683
vector unsigned int __b) {
10684
return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10685
}
10686
10687
static __inline__ vector unsigned short __ATTRS_o_ai
10688
vec_srl(vector unsigned short __a, vector unsigned char __b) {
10689
return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10690
(vector int)__b);
10691
}
10692
10693
static __inline__ vector unsigned short __ATTRS_o_ai
10694
vec_srl(vector unsigned short __a, vector unsigned short __b) {
10695
return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10696
(vector int)__b);
10697
}
10698
10699
static __inline__ vector unsigned short __ATTRS_o_ai
10700
vec_srl(vector unsigned short __a, vector unsigned int __b) {
10701
return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10702
(vector int)__b);
10703
}
10704
10705
static __inline__ vector bool short __ATTRS_o_ai
10706
vec_srl(vector bool short __a, vector unsigned char __b) {
10707
return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10708
(vector int)__b);
10709
}
10710
10711
static __inline__ vector bool short __ATTRS_o_ai
10712
vec_srl(vector bool short __a, vector unsigned short __b) {
10713
return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10714
(vector int)__b);
10715
}
10716
10717
static __inline__ vector bool short __ATTRS_o_ai
10718
vec_srl(vector bool short __a, vector unsigned int __b) {
10719
return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10720
(vector int)__b);
10721
}
10722
10723
static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
10724
vector unsigned char __b) {
10725
return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10726
}
10727
10728
static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
10729
vector unsigned short __b) {
10730
return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10731
}
10732
10733
static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
10734
vector unsigned int __b) {
10735
return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10736
}
10737
10738
static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
10739
vector unsigned char __b) {
10740
return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10741
}
10742
10743
static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
10744
vector unsigned short __b) {
10745
return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10746
}
10747
10748
static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
10749
vector unsigned int __b) {
10750
return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10751
}
10752
10753
static __inline__ vector unsigned int __ATTRS_o_ai
10754
vec_srl(vector unsigned int __a, vector unsigned char __b) {
10755
return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10756
(vector int)__b);
10757
}
10758
10759
static __inline__ vector unsigned int __ATTRS_o_ai
10760
vec_srl(vector unsigned int __a, vector unsigned short __b) {
10761
return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10762
(vector int)__b);
10763
}
10764
10765
static __inline__ vector unsigned int __ATTRS_o_ai
10766
vec_srl(vector unsigned int __a, vector unsigned int __b) {
10767
return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10768
(vector int)__b);
10769
}
10770
10771
static __inline__ vector bool int __ATTRS_o_ai
10772
vec_srl(vector bool int __a, vector unsigned char __b) {
10773
return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10774
(vector int)__b);
10775
}
10776
10777
static __inline__ vector bool int __ATTRS_o_ai
10778
vec_srl(vector bool int __a, vector unsigned short __b) {
10779
return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10780
(vector int)__b);
10781
}
10782
10783
static __inline__ vector bool int __ATTRS_o_ai
10784
vec_srl(vector bool int __a, vector unsigned int __b) {
10785
return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10786
(vector int)__b);
10787
}
10788
10789
#ifdef __VSX__
10790
static __inline__ vector signed long long __ATTRS_o_ai
10791
vec_srl(vector signed long long __a, vector unsigned char __b) {
10792
return (vector signed long long)__builtin_altivec_vsr((vector int)__a,
10793
(vector int)__b);
10794
}
10795
10796
static __inline__ vector unsigned long long __ATTRS_o_ai
10797
vec_srl(vector unsigned long long __a, vector unsigned char __b) {
10798
return (vector unsigned long long)__builtin_altivec_vsr((vector int)__a,
10799
(vector int)__b);
10800
}
10801
#endif
10802
10803
/* vec_vsr */
10804
10805
static __inline__ vector signed char __ATTRS_o_ai
10806
vec_vsr(vector signed char __a, vector unsigned char __b) {
10807
return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10808
(vector int)__b);
10809
}
10810
10811
static __inline__ vector signed char __ATTRS_o_ai
10812
vec_vsr(vector signed char __a, vector unsigned short __b) {
10813
return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10814
(vector int)__b);
10815
}
10816
10817
static __inline__ vector signed char __ATTRS_o_ai
10818
vec_vsr(vector signed char __a, vector unsigned int __b) {
10819
return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10820
(vector int)__b);
10821
}
10822
10823
static __inline__ vector unsigned char __ATTRS_o_ai
10824
vec_vsr(vector unsigned char __a, vector unsigned char __b) {
10825
return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10826
(vector int)__b);
10827
}
10828
10829
static __inline__ vector unsigned char __ATTRS_o_ai
10830
vec_vsr(vector unsigned char __a, vector unsigned short __b) {
10831
return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10832
(vector int)__b);
10833
}
10834
10835
static __inline__ vector unsigned char __ATTRS_o_ai
10836
vec_vsr(vector unsigned char __a, vector unsigned int __b) {
10837
return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10838
(vector int)__b);
10839
}
10840
10841
static __inline__ vector bool char __ATTRS_o_ai
10842
vec_vsr(vector bool char __a, vector unsigned char __b) {
10843
return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10844
(vector int)__b);
10845
}
10846
10847
static __inline__ vector bool char __ATTRS_o_ai
10848
vec_vsr(vector bool char __a, vector unsigned short __b) {
10849
return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10850
(vector int)__b);
10851
}
10852
10853
static __inline__ vector bool char __ATTRS_o_ai
10854
vec_vsr(vector bool char __a, vector unsigned int __b) {
10855
return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10856
(vector int)__b);
10857
}
10858
10859
static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
10860
vector unsigned char __b) {
10861
return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10862
}
10863
10864
static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
10865
vector unsigned short __b) {
10866
return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10867
}
10868
10869
static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
10870
vector unsigned int __b) {
10871
return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10872
}
10873
10874
static __inline__ vector unsigned short __ATTRS_o_ai
10875
vec_vsr(vector unsigned short __a, vector unsigned char __b) {
10876
return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10877
(vector int)__b);
10878
}
10879
10880
static __inline__ vector unsigned short __ATTRS_o_ai
10881
vec_vsr(vector unsigned short __a, vector unsigned short __b) {
10882
return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10883
(vector int)__b);
10884
}
10885
10886
static __inline__ vector unsigned short __ATTRS_o_ai
10887
vec_vsr(vector unsigned short __a, vector unsigned int __b) {
10888
return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10889
(vector int)__b);
10890
}
10891
10892
static __inline__ vector bool short __ATTRS_o_ai
10893
vec_vsr(vector bool short __a, vector unsigned char __b) {
10894
return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10895
(vector int)__b);
10896
}
10897
10898
static __inline__ vector bool short __ATTRS_o_ai
10899
vec_vsr(vector bool short __a, vector unsigned short __b) {
10900
return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10901
(vector int)__b);
10902
}
10903
10904
static __inline__ vector bool short __ATTRS_o_ai
10905
vec_vsr(vector bool short __a, vector unsigned int __b) {
10906
return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10907
(vector int)__b);
10908
}
10909
10910
static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
10911
vector unsigned char __b) {
10912
return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10913
}
10914
10915
static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
10916
vector unsigned short __b) {
10917
return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10918
}
10919
10920
static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
10921
vector unsigned int __b) {
10922
return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10923
}
10924
10925
static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
10926
vector unsigned char __b) {
10927
return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10928
}
10929
10930
static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
10931
vector unsigned short __b) {
10932
return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10933
}
10934
10935
static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
10936
vector unsigned int __b) {
10937
return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10938
}
10939
10940
static __inline__ vector unsigned int __ATTRS_o_ai
10941
vec_vsr(vector unsigned int __a, vector unsigned char __b) {
10942
return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10943
(vector int)__b);
10944
}
10945
10946
static __inline__ vector unsigned int __ATTRS_o_ai
10947
vec_vsr(vector unsigned int __a, vector unsigned short __b) {
10948
return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10949
(vector int)__b);
10950
}
10951
10952
static __inline__ vector unsigned int __ATTRS_o_ai
10953
vec_vsr(vector unsigned int __a, vector unsigned int __b) {
10954
return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10955
(vector int)__b);
10956
}
10957
10958
static __inline__ vector bool int __ATTRS_o_ai
10959
vec_vsr(vector bool int __a, vector unsigned char __b) {
10960
return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10961
(vector int)__b);
10962
}
10963
10964
static __inline__ vector bool int __ATTRS_o_ai
10965
vec_vsr(vector bool int __a, vector unsigned short __b) {
10966
return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10967
(vector int)__b);
10968
}
10969
10970
static __inline__ vector bool int __ATTRS_o_ai
10971
vec_vsr(vector bool int __a, vector unsigned int __b) {
10972
return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10973
(vector int)__b);
10974
}
10975
10976
/* vec_sro */
10977
10978
static __inline__ vector signed char __ATTRS_o_ai
10979
vec_sro(vector signed char __a, vector signed char __b) {
10980
return (vector signed char)__builtin_altivec_vsro((vector int)__a,
10981
(vector int)__b);
10982
}
10983
10984
static __inline__ vector signed char __ATTRS_o_ai
10985
vec_sro(vector signed char __a, vector unsigned char __b) {
10986
return (vector signed char)__builtin_altivec_vsro((vector int)__a,
10987
(vector int)__b);
10988
}
10989
10990
static __inline__ vector unsigned char __ATTRS_o_ai
10991
vec_sro(vector unsigned char __a, vector signed char __b) {
10992
return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
10993
(vector int)__b);
10994
}
10995
10996
static __inline__ vector unsigned char __ATTRS_o_ai
10997
vec_sro(vector unsigned char __a, vector unsigned char __b) {
10998
return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
10999
(vector int)__b);
11000
}
11001
11002
static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
11003
vector signed char __b) {
11004
return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11005
}
11006
11007
static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
11008
vector unsigned char __b) {
11009
return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11010
}
11011
11012
static __inline__ vector unsigned short __ATTRS_o_ai
11013
vec_sro(vector unsigned short __a, vector signed char __b) {
11014
return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
11015
(vector int)__b);
11016
}
11017
11018
static __inline__ vector unsigned short __ATTRS_o_ai
11019
vec_sro(vector unsigned short __a, vector unsigned char __b) {
11020
return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
11021
(vector int)__b);
11022
}
11023
11024
static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
11025
vector signed char __b) {
11026
return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11027
}
11028
11029
static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
11030
vector unsigned char __b) {
11031
return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11032
}
11033
11034
static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
11035
vector signed char __b) {
11036
return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
11037
}
11038
11039
static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
11040
vector unsigned char __b) {
11041
return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
11042
}
11043
11044
static __inline__ vector unsigned int __ATTRS_o_ai
11045
vec_sro(vector unsigned int __a, vector signed char __b) {
11046
return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
11047
(vector int)__b);
11048
}
11049
11050
static __inline__ vector unsigned int __ATTRS_o_ai
11051
vec_sro(vector unsigned int __a, vector unsigned char __b) {
11052
return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
11053
(vector int)__b);
11054
}
11055
11056
static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
11057
vector signed char __b) {
11058
return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11059
}
11060
11061
static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
11062
vector unsigned char __b) {
11063
return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11064
}
11065
11066
#ifdef __VSX__
11067
static __inline__ vector signed long long __ATTRS_o_ai
11068
vec_sro(vector signed long long __a, vector signed char __b) {
11069
return (vector signed long long)__builtin_altivec_vsro((vector int)__a,
11070
(vector int)__b);
11071
}
11072
11073
static __inline__ vector signed long long __ATTRS_o_ai
11074
vec_sro(vector signed long long __a, vector unsigned char __b) {
11075
return (vector signed long long)__builtin_altivec_vsro((vector int)__a,
11076
(vector int)__b);
11077
}
11078
11079
static __inline__ vector unsigned long long __ATTRS_o_ai
11080
vec_sro(vector unsigned long long __a, vector signed char __b) {
11081
return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,
11082
(vector int)__b);
11083
}
11084
11085
static __inline__ vector unsigned long long __ATTRS_o_ai
11086
vec_sro(vector unsigned long long __a, vector unsigned char __b) {
11087
return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,
11088
(vector int)__b);
11089
}
11090
#endif
11091
11092
/* vec_vsro */
11093
11094
static __inline__ vector signed char __ATTRS_o_ai
11095
vec_vsro(vector signed char __a, vector signed char __b) {
11096
return (vector signed char)__builtin_altivec_vsro((vector int)__a,
11097
(vector int)__b);
11098
}
11099
11100
static __inline__ vector signed char __ATTRS_o_ai
11101
vec_vsro(vector signed char __a, vector unsigned char __b) {
11102
return (vector signed char)__builtin_altivec_vsro((vector int)__a,
11103
(vector int)__b);
11104
}
11105
11106
static __inline__ vector unsigned char __ATTRS_o_ai
11107
vec_vsro(vector unsigned char __a, vector signed char __b) {
11108
return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
11109
(vector int)__b);
11110
}
11111
11112
static __inline__ vector unsigned char __ATTRS_o_ai
11113
vec_vsro(vector unsigned char __a, vector unsigned char __b) {
11114
return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
11115
(vector int)__b);
11116
}
11117
11118
static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
11119
vector signed char __b) {
11120
return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11121
}
11122
11123
static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
11124
vector unsigned char __b) {
11125
return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11126
}
11127
11128
static __inline__ vector unsigned short __ATTRS_o_ai
11129
vec_vsro(vector unsigned short __a, vector signed char __b) {
11130
return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
11131
(vector int)__b);
11132
}
11133
11134
static __inline__ vector unsigned short __ATTRS_o_ai
11135
vec_vsro(vector unsigned short __a, vector unsigned char __b) {
11136
return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
11137
(vector int)__b);
11138
}
11139
11140
static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
11141
vector signed char __b) {
11142
return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11143
}
11144
11145
static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
11146
vector unsigned char __b) {
11147
return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11148
}
11149
11150
static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
11151
vector signed char __b) {
11152
return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
11153
}
11154
11155
static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
11156
vector unsigned char __b) {
11157
return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
11158
}
11159
11160
static __inline__ vector unsigned int __ATTRS_o_ai
11161
vec_vsro(vector unsigned int __a, vector signed char __b) {
11162
return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
11163
(vector int)__b);
11164
}
11165
11166
static __inline__ vector unsigned int __ATTRS_o_ai
11167
vec_vsro(vector unsigned int __a, vector unsigned char __b) {
11168
return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
11169
(vector int)__b);
11170
}
11171
11172
static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
11173
vector signed char __b) {
11174
return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11175
}
11176
11177
static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
11178
vector unsigned char __b) {
11179
return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11180
}
11181
11182
/* vec_st */
11183
11184
static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, long __b,
11185
vector signed char *__c) {
11186
__builtin_altivec_stvx((vector int)__a, __b, __c);
11187
}
11188
11189
static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, long __b,
11190
signed char *__c) {
11191
__builtin_altivec_stvx((vector int)__a, __b, __c);
11192
}
11193
11194
static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, long __b,
11195
vector unsigned char *__c) {
11196
__builtin_altivec_stvx((vector int)__a, __b, __c);
11197
}
11198
11199
static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, long __b,
11200
unsigned char *__c) {
11201
__builtin_altivec_stvx((vector int)__a, __b, __c);
11202
}
11203
11204
static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
11205
signed char *__c) {
11206
__builtin_altivec_stvx((vector int)__a, __b, __c);
11207
}
11208
11209
static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
11210
unsigned char *__c) {
11211
__builtin_altivec_stvx((vector int)__a, __b, __c);
11212
}
11213
11214
static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
11215
vector bool char *__c) {
11216
__builtin_altivec_stvx((vector int)__a, __b, __c);
11217
}
11218
11219
static __inline__ void __ATTRS_o_ai vec_st(vector short __a, long __b,
11220
vector short *__c) {
11221
__builtin_altivec_stvx((vector int)__a, __b, __c);
11222
}
11223
11224
static __inline__ void __ATTRS_o_ai vec_st(vector short __a, long __b,
11225
short *__c) {
11226
__builtin_altivec_stvx((vector int)__a, __b, __c);
11227
}
11228
11229
static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, long __b,
11230
vector unsigned short *__c) {
11231
__builtin_altivec_stvx((vector int)__a, __b, __c);
11232
}
11233
11234
static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, long __b,
11235
unsigned short *__c) {
11236
__builtin_altivec_stvx((vector int)__a, __b, __c);
11237
}
11238
11239
static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
11240
short *__c) {
11241
__builtin_altivec_stvx((vector int)__a, __b, __c);
11242
}
11243
11244
static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
11245
unsigned short *__c) {
11246
__builtin_altivec_stvx((vector int)__a, __b, __c);
11247
}
11248
11249
static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
11250
vector bool short *__c) {
11251
__builtin_altivec_stvx((vector int)__a, __b, __c);
11252
}
11253
11254
static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
11255
short *__c) {
11256
__builtin_altivec_stvx((vector int)__a, __b, __c);
11257
}
11258
11259
static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
11260
unsigned short *__c) {
11261
__builtin_altivec_stvx((vector int)__a, __b, __c);
11262
}
11263
11264
static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
11265
vector pixel *__c) {
11266
__builtin_altivec_stvx((vector int)__a, __b, __c);
11267
}
11268
11269
static __inline__ void __ATTRS_o_ai vec_st(vector int __a, long __b,
11270
vector int *__c) {
11271
__builtin_altivec_stvx(__a, __b, __c);
11272
}
11273
11274
static __inline__ void __ATTRS_o_ai vec_st(vector int __a, long __b, int *__c) {
11275
__builtin_altivec_stvx(__a, __b, __c);
11276
}
11277
11278
static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, long __b,
11279
vector unsigned int *__c) {
11280
__builtin_altivec_stvx((vector int)__a, __b, __c);
11281
}
11282
11283
static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, long __b,
11284
unsigned int *__c) {
11285
__builtin_altivec_stvx((vector int)__a, __b, __c);
11286
}
11287
11288
static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
11289
int *__c) {
11290
__builtin_altivec_stvx((vector int)__a, __b, __c);
11291
}
11292
11293
static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
11294
unsigned int *__c) {
11295
__builtin_altivec_stvx((vector int)__a, __b, __c);
11296
}
11297
11298
static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
11299
vector bool int *__c) {
11300
__builtin_altivec_stvx((vector int)__a, __b, __c);
11301
}
11302
11303
static __inline__ void __ATTRS_o_ai vec_st(vector float __a, long __b,
11304
vector float *__c) {
11305
__builtin_altivec_stvx((vector int)__a, __b, __c);
11306
}
11307
11308
static __inline__ void __ATTRS_o_ai vec_st(vector float __a, long __b,
11309
float *__c) {
11310
__builtin_altivec_stvx((vector int)__a, __b, __c);
11311
}
11312
11313
/* vec_stvx */
11314
11315
static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, long __b,
11316
vector signed char *__c) {
11317
__builtin_altivec_stvx((vector int)__a, __b, __c);
11318
}
11319
11320
static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, long __b,
11321
signed char *__c) {
11322
__builtin_altivec_stvx((vector int)__a, __b, __c);
11323
}
11324
11325
static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, long __b,
11326
vector unsigned char *__c) {
11327
__builtin_altivec_stvx((vector int)__a, __b, __c);
11328
}
11329
11330
static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, long __b,
11331
unsigned char *__c) {
11332
__builtin_altivec_stvx((vector int)__a, __b, __c);
11333
}
11334
11335
static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
11336
signed char *__c) {
11337
__builtin_altivec_stvx((vector int)__a, __b, __c);
11338
}
11339
11340
static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
11341
unsigned char *__c) {
11342
__builtin_altivec_stvx((vector int)__a, __b, __c);
11343
}
11344
11345
static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
11346
vector bool char *__c) {
11347
__builtin_altivec_stvx((vector int)__a, __b, __c);
11348
}
11349
11350
static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, long __b,
11351
vector short *__c) {
11352
__builtin_altivec_stvx((vector int)__a, __b, __c);
11353
}
11354
11355
static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, long __b,
11356
short *__c) {
11357
__builtin_altivec_stvx((vector int)__a, __b, __c);
11358
}
11359
11360
static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, long __b,
11361
vector unsigned short *__c) {
11362
__builtin_altivec_stvx((vector int)__a, __b, __c);
11363
}
11364
11365
static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, long __b,
11366
unsigned short *__c) {
11367
__builtin_altivec_stvx((vector int)__a, __b, __c);
11368
}
11369
11370
static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
11371
short *__c) {
11372
__builtin_altivec_stvx((vector int)__a, __b, __c);
11373
}
11374
11375
static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
11376
unsigned short *__c) {
11377
__builtin_altivec_stvx((vector int)__a, __b, __c);
11378
}
11379
11380
static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
11381
vector bool short *__c) {
11382
__builtin_altivec_stvx((vector int)__a, __b, __c);
11383
}
11384
11385
static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
11386
short *__c) {
11387
__builtin_altivec_stvx((vector int)__a, __b, __c);
11388
}
11389
11390
static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
11391
unsigned short *__c) {
11392
__builtin_altivec_stvx((vector int)__a, __b, __c);
11393
}
11394
11395
static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
11396
vector pixel *__c) {
11397
__builtin_altivec_stvx((vector int)__a, __b, __c);
11398
}
11399
11400
static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, long __b,
11401
vector int *__c) {
11402
__builtin_altivec_stvx(__a, __b, __c);
11403
}
11404
11405
static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, long __b,
11406
int *__c) {
11407
__builtin_altivec_stvx(__a, __b, __c);
11408
}
11409
11410
static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, long __b,
11411
vector unsigned int *__c) {
11412
__builtin_altivec_stvx((vector int)__a, __b, __c);
11413
}
11414
11415
static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, long __b,
11416
unsigned int *__c) {
11417
__builtin_altivec_stvx((vector int)__a, __b, __c);
11418
}
11419
11420
static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
11421
int *__c) {
11422
__builtin_altivec_stvx((vector int)__a, __b, __c);
11423
}
11424
11425
static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
11426
unsigned int *__c) {
11427
__builtin_altivec_stvx((vector int)__a, __b, __c);
11428
}
11429
11430
static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
11431
vector bool int *__c) {
11432
__builtin_altivec_stvx((vector int)__a, __b, __c);
11433
}
11434
11435
static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, long __b,
11436
vector float *__c) {
11437
__builtin_altivec_stvx((vector int)__a, __b, __c);
11438
}
11439
11440
static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, long __b,
11441
float *__c) {
11442
__builtin_altivec_stvx((vector int)__a, __b, __c);
11443
}
11444
11445
/* vec_ste */
11446
11447
static __inline__ void __ATTRS_o_ai vec_ste(vector signed char __a, long __b,
11448
signed char *__c) {
11449
__builtin_altivec_stvebx((vector char)__a, __b, __c);
11450
}
11451
11452
static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned char __a, long __b,
11453
unsigned char *__c) {
11454
__builtin_altivec_stvebx((vector char)__a, __b, __c);
11455
}
11456
11457
static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, long __b,
11458
signed char *__c) {
11459
__builtin_altivec_stvebx((vector char)__a, __b, __c);
11460
}
11461
11462
static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, long __b,
11463
unsigned char *__c) {
11464
__builtin_altivec_stvebx((vector char)__a, __b, __c);
11465
}
11466
11467
static __inline__ void __ATTRS_o_ai vec_ste(vector short __a, long __b,
11468
short *__c) {
11469
__builtin_altivec_stvehx(__a, __b, __c);
11470
}
11471
11472
static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned short __a, long __b,
11473
unsigned short *__c) {
11474
__builtin_altivec_stvehx((vector short)__a, __b, __c);
11475
}
11476
11477
static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, long __b,
11478
short *__c) {
11479
__builtin_altivec_stvehx((vector short)__a, __b, __c);
11480
}
11481
11482
static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, long __b,
11483
unsigned short *__c) {
11484
__builtin_altivec_stvehx((vector short)__a, __b, __c);
11485
}
11486
11487
static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, long __b,
11488
short *__c) {
11489
__builtin_altivec_stvehx((vector short)__a, __b, __c);
11490
}
11491
11492
static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, long __b,
11493
unsigned short *__c) {
11494
__builtin_altivec_stvehx((vector short)__a, __b, __c);
11495
}
11496
11497
static __inline__ void __ATTRS_o_ai vec_ste(vector int __a, long __b, int *__c) {
11498
__builtin_altivec_stvewx(__a, __b, __c);
11499
}
11500
11501
static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned int __a, long __b,
11502
unsigned int *__c) {
11503
__builtin_altivec_stvewx((vector int)__a, __b, __c);
11504
}
11505
11506
static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, long __b,
11507
int *__c) {
11508
__builtin_altivec_stvewx((vector int)__a, __b, __c);
11509
}
11510
11511
static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, long __b,
11512
unsigned int *__c) {
11513
__builtin_altivec_stvewx((vector int)__a, __b, __c);
11514
}
11515
11516
static __inline__ void __ATTRS_o_ai vec_ste(vector float __a, long __b,
11517
float *__c) {
11518
__builtin_altivec_stvewx((vector int)__a, __b, __c);
11519
}
11520
11521
/* vec_stvebx */
11522
11523
static __inline__ void __ATTRS_o_ai vec_stvebx(vector signed char __a, long __b,
11524
signed char *__c) {
11525
__builtin_altivec_stvebx((vector char)__a, __b, __c);
11526
}
11527
11528
static __inline__ void __ATTRS_o_ai vec_stvebx(vector unsigned char __a,
11529
long __b, unsigned char *__c) {
11530
__builtin_altivec_stvebx((vector char)__a, __b, __c);
11531
}
11532
11533
static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, long __b,
11534
signed char *__c) {
11535
__builtin_altivec_stvebx((vector char)__a, __b, __c);
11536
}
11537
11538
static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, long __b,
11539
unsigned char *__c) {
11540
__builtin_altivec_stvebx((vector char)__a, __b, __c);
11541
}
11542
11543
/* vec_stvehx */
11544
11545
static __inline__ void __ATTRS_o_ai vec_stvehx(vector short __a, long __b,
11546
short *__c) {
11547
__builtin_altivec_stvehx(__a, __b, __c);
11548
}
11549
11550
static __inline__ void __ATTRS_o_ai vec_stvehx(vector unsigned short __a,
11551
long __b, unsigned short *__c) {
11552
__builtin_altivec_stvehx((vector short)__a, __b, __c);
11553
}
11554
11555
static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, long __b,
11556
short *__c) {
11557
__builtin_altivec_stvehx((vector short)__a, __b, __c);
11558
}
11559
11560
static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, long __b,
11561
unsigned short *__c) {
11562
__builtin_altivec_stvehx((vector short)__a, __b, __c);
11563
}
11564
11565
static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, long __b,
11566
short *__c) {
11567
__builtin_altivec_stvehx((vector short)__a, __b, __c);
11568
}
11569
11570
static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, long __b,
11571
unsigned short *__c) {
11572
__builtin_altivec_stvehx((vector short)__a, __b, __c);
11573
}
11574
11575
/* vec_stvewx */
11576
11577
static __inline__ void __ATTRS_o_ai vec_stvewx(vector int __a, long __b,
11578
int *__c) {
11579
__builtin_altivec_stvewx(__a, __b, __c);
11580
}
11581
11582
static __inline__ void __ATTRS_o_ai vec_stvewx(vector unsigned int __a, long __b,
11583
unsigned int *__c) {
11584
__builtin_altivec_stvewx((vector int)__a, __b, __c);
11585
}
11586
11587
static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, long __b,
11588
int *__c) {
11589
__builtin_altivec_stvewx((vector int)__a, __b, __c);
11590
}
11591
11592
static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, long __b,
11593
unsigned int *__c) {
11594
__builtin_altivec_stvewx((vector int)__a, __b, __c);
11595
}
11596
11597
static __inline__ void __ATTRS_o_ai vec_stvewx(vector float __a, long __b,
11598
float *__c) {
11599
__builtin_altivec_stvewx((vector int)__a, __b, __c);
11600
}
11601
11602
/* vec_stl */
11603
11604
static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
11605
vector signed char *__c) {
11606
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11607
}
11608
11609
static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
11610
signed char *__c) {
11611
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11612
}
11613
11614
static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
11615
vector unsigned char *__c) {
11616
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11617
}
11618
11619
static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
11620
unsigned char *__c) {
11621
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11622
}
11623
11624
static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
11625
signed char *__c) {
11626
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11627
}
11628
11629
static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
11630
unsigned char *__c) {
11631
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11632
}
11633
11634
static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
11635
vector bool char *__c) {
11636
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11637
}
11638
11639
static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
11640
vector short *__c) {
11641
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11642
}
11643
11644
static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
11645
short *__c) {
11646
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11647
}
11648
11649
static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
11650
vector unsigned short *__c) {
11651
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11652
}
11653
11654
static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
11655
unsigned short *__c) {
11656
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11657
}
11658
11659
static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
11660
short *__c) {
11661
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11662
}
11663
11664
static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
11665
unsigned short *__c) {
11666
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11667
}
11668
11669
static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
11670
vector bool short *__c) {
11671
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11672
}
11673
11674
static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
11675
short *__c) {
11676
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11677
}
11678
11679
static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
11680
unsigned short *__c) {
11681
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11682
}
11683
11684
static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
11685
vector pixel *__c) {
11686
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11687
}
11688
11689
static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b,
11690
vector int *__c) {
11691
__builtin_altivec_stvxl(__a, __b, __c);
11692
}
11693
11694
static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b, int *__c) {
11695
__builtin_altivec_stvxl(__a, __b, __c);
11696
}
11697
11698
static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
11699
vector unsigned int *__c) {
11700
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11701
}
11702
11703
static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
11704
unsigned int *__c) {
11705
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11706
}
11707
11708
static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
11709
int *__c) {
11710
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11711
}
11712
11713
static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
11714
unsigned int *__c) {
11715
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11716
}
11717
11718
static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
11719
vector bool int *__c) {
11720
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11721
}
11722
11723
static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
11724
vector float *__c) {
11725
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11726
}
11727
11728
static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
11729
float *__c) {
11730
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11731
}
11732
11733
/* vec_stvxl */
11734
11735
static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
11736
vector signed char *__c) {
11737
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11738
}
11739
11740
static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
11741
signed char *__c) {
11742
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11743
}
11744
11745
static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
11746
vector unsigned char *__c) {
11747
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11748
}
11749
11750
static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
11751
unsigned char *__c) {
11752
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11753
}
11754
11755
static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
11756
signed char *__c) {
11757
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11758
}
11759
11760
static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
11761
unsigned char *__c) {
11762
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11763
}
11764
11765
static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
11766
vector bool char *__c) {
11767
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11768
}
11769
11770
static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
11771
vector short *__c) {
11772
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11773
}
11774
11775
static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
11776
short *__c) {
11777
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11778
}
11779
11780
static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
11781
int __b,
11782
vector unsigned short *__c) {
11783
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11784
}
11785
11786
static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
11787
int __b, unsigned short *__c) {
11788
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11789
}
11790
11791
static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
11792
short *__c) {
11793
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11794
}
11795
11796
static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
11797
unsigned short *__c) {
11798
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11799
}
11800
11801
static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
11802
vector bool short *__c) {
11803
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11804
}
11805
11806
static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
11807
short *__c) {
11808
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11809
}
11810
11811
static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
11812
unsigned short *__c) {
11813
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11814
}
11815
11816
static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
11817
vector pixel *__c) {
11818
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11819
}
11820
11821
static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
11822
vector int *__c) {
11823
__builtin_altivec_stvxl(__a, __b, __c);
11824
}
11825
11826
static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
11827
int *__c) {
11828
__builtin_altivec_stvxl(__a, __b, __c);
11829
}
11830
11831
static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
11832
vector unsigned int *__c) {
11833
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11834
}
11835
11836
static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
11837
unsigned int *__c) {
11838
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11839
}
11840
11841
static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
11842
int *__c) {
11843
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11844
}
11845
11846
static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
11847
unsigned int *__c) {
11848
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11849
}
11850
11851
static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
11852
vector bool int *__c) {
11853
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11854
}
11855
11856
static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
11857
vector float *__c) {
11858
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11859
}
11860
11861
static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
11862
float *__c) {
11863
__builtin_altivec_stvxl((vector int)__a, __b, __c);
11864
}
11865
11866
/* vec_sub */
11867
11868
static __inline__ vector signed char __ATTRS_o_ai
11869
vec_sub(vector signed char __a, vector signed char __b) {
11870
return __a - __b;
11871
}
11872
11873
static __inline__ vector signed char __ATTRS_o_ai
11874
vec_sub(vector bool char __a, vector signed char __b) {
11875
return (vector signed char)__a - __b;
11876
}
11877
11878
static __inline__ vector signed char __ATTRS_o_ai
11879
vec_sub(vector signed char __a, vector bool char __b) {
11880
return __a - (vector signed char)__b;
11881
}
11882
11883
static __inline__ vector unsigned char __ATTRS_o_ai
11884
vec_sub(vector unsigned char __a, vector unsigned char __b) {
11885
return __a - __b;
11886
}
11887
11888
static __inline__ vector unsigned char __ATTRS_o_ai
11889
vec_sub(vector bool char __a, vector unsigned char __b) {
11890
return (vector unsigned char)__a - __b;
11891
}
11892
11893
static __inline__ vector unsigned char __ATTRS_o_ai
11894
vec_sub(vector unsigned char __a, vector bool char __b) {
11895
return __a - (vector unsigned char)__b;
11896
}
11897
11898
static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
11899
vector short __b) {
11900
return __a - __b;
11901
}
11902
11903
static __inline__ vector short __ATTRS_o_ai vec_sub(vector bool short __a,
11904
vector short __b) {
11905
return (vector short)__a - __b;
11906
}
11907
11908
static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
11909
vector bool short __b) {
11910
return __a - (vector short)__b;
11911
}
11912
11913
static __inline__ vector unsigned short __ATTRS_o_ai
11914
vec_sub(vector unsigned short __a, vector unsigned short __b) {
11915
return __a - __b;
11916
}
11917
11918
static __inline__ vector unsigned short __ATTRS_o_ai
11919
vec_sub(vector bool short __a, vector unsigned short __b) {
11920
return (vector unsigned short)__a - __b;
11921
}
11922
11923
static __inline__ vector unsigned short __ATTRS_o_ai
11924
vec_sub(vector unsigned short __a, vector bool short __b) {
11925
return __a - (vector unsigned short)__b;
11926
}
11927
11928
static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
11929
vector int __b) {
11930
return __a - __b;
11931
}
11932
11933
static __inline__ vector int __ATTRS_o_ai vec_sub(vector bool int __a,
11934
vector int __b) {
11935
return (vector int)__a - __b;
11936
}
11937
11938
static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
11939
vector bool int __b) {
11940
return __a - (vector int)__b;
11941
}
11942
11943
static __inline__ vector unsigned int __ATTRS_o_ai
11944
vec_sub(vector unsigned int __a, vector unsigned int __b) {
11945
return __a - __b;
11946
}
11947
11948
static __inline__ vector unsigned int __ATTRS_o_ai
11949
vec_sub(vector bool int __a, vector unsigned int __b) {
11950
return (vector unsigned int)__a - __b;
11951
}
11952
11953
static __inline__ vector unsigned int __ATTRS_o_ai
11954
vec_sub(vector unsigned int __a, vector bool int __b) {
11955
return __a - (vector unsigned int)__b;
11956
}
11957
11958
#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
11959
defined(__SIZEOF_INT128__)
11960
static __inline__ vector signed __int128 __ATTRS_o_ai
11961
vec_sub(vector signed __int128 __a, vector signed __int128 __b) {
11962
return __a - __b;
11963
}
11964
11965
static __inline__ vector unsigned __int128 __ATTRS_o_ai
11966
vec_sub(vector unsigned __int128 __a, vector unsigned __int128 __b) {
11967
return __a - __b;
11968
}
11969
#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&
11970
// defined(__SIZEOF_INT128__)
11971
11972
#ifdef __VSX__
11973
static __inline__ vector signed long long __ATTRS_o_ai
11974
vec_sub(vector signed long long __a, vector signed long long __b) {
11975
return __a - __b;
11976
}
11977
11978
static __inline__ vector unsigned long long __ATTRS_o_ai
11979
vec_sub(vector unsigned long long __a, vector unsigned long long __b) {
11980
return __a - __b;
11981
}
11982
11983
static __inline__ vector double __ATTRS_o_ai vec_sub(vector double __a,
11984
vector double __b) {
11985
return __a - __b;
11986
}
11987
#endif
11988
11989
static __inline__ vector float __ATTRS_o_ai vec_sub(vector float __a,
11990
vector float __b) {
11991
return __a - __b;
11992
}
11993
11994
/* vec_vsububm */
11995
11996
#define __builtin_altivec_vsububm vec_vsububm
11997
11998
static __inline__ vector signed char __ATTRS_o_ai
11999
vec_vsububm(vector signed char __a, vector signed char __b) {
12000
return __a - __b;
12001
}
12002
12003
static __inline__ vector signed char __ATTRS_o_ai
12004
vec_vsububm(vector bool char __a, vector signed char __b) {
12005
return (vector signed char)__a - __b;
12006
}
12007
12008
static __inline__ vector signed char __ATTRS_o_ai
12009
vec_vsububm(vector signed char __a, vector bool char __b) {
12010
return __a - (vector signed char)__b;
12011
}
12012
12013
static __inline__ vector unsigned char __ATTRS_o_ai
12014
vec_vsububm(vector unsigned char __a, vector unsigned char __b) {
12015
return __a - __b;
12016
}
12017
12018
static __inline__ vector unsigned char __ATTRS_o_ai
12019
vec_vsububm(vector bool char __a, vector unsigned char __b) {
12020
return (vector unsigned char)__a - __b;
12021
}
12022
12023
static __inline__ vector unsigned char __ATTRS_o_ai
12024
vec_vsububm(vector unsigned char __a, vector bool char __b) {
12025
return __a - (vector unsigned char)__b;
12026
}
12027
12028
/* vec_vsubuhm */
12029
12030
#define __builtin_altivec_vsubuhm vec_vsubuhm
12031
12032
static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
12033
vector short __b) {
12034
return __a - __b;
12035
}
12036
12037
static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector bool short __a,
12038
vector short __b) {
12039
return (vector short)__a - __b;
12040
}
12041
12042
static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
12043
vector bool short __b) {
12044
return __a - (vector short)__b;
12045
}
12046
12047
static __inline__ vector unsigned short __ATTRS_o_ai
12048
vec_vsubuhm(vector unsigned short __a, vector unsigned short __b) {
12049
return __a - __b;
12050
}
12051
12052
static __inline__ vector unsigned short __ATTRS_o_ai
12053
vec_vsubuhm(vector bool short __a, vector unsigned short __b) {
12054
return (vector unsigned short)__a - __b;
12055
}
12056
12057
static __inline__ vector unsigned short __ATTRS_o_ai
12058
vec_vsubuhm(vector unsigned short __a, vector bool short __b) {
12059
return __a - (vector unsigned short)__b;
12060
}
12061
12062
/* vec_vsubuwm */
12063
12064
#define __builtin_altivec_vsubuwm vec_vsubuwm
12065
12066
static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
12067
vector int __b) {
12068
return __a - __b;
12069
}
12070
12071
static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector bool int __a,
12072
vector int __b) {
12073
return (vector int)__a - __b;
12074
}
12075
12076
static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
12077
vector bool int __b) {
12078
return __a - (vector int)__b;
12079
}
12080
12081
static __inline__ vector unsigned int __ATTRS_o_ai
12082
vec_vsubuwm(vector unsigned int __a, vector unsigned int __b) {
12083
return __a - __b;
12084
}
12085
12086
static __inline__ vector unsigned int __ATTRS_o_ai
12087
vec_vsubuwm(vector bool int __a, vector unsigned int __b) {
12088
return (vector unsigned int)__a - __b;
12089
}
12090
12091
static __inline__ vector unsigned int __ATTRS_o_ai
12092
vec_vsubuwm(vector unsigned int __a, vector bool int __b) {
12093
return __a - (vector unsigned int)__b;
12094
}
12095
12096
/* vec_vsubfp */
12097
12098
#define __builtin_altivec_vsubfp vec_vsubfp
12099
12100
static __inline__ vector float __attribute__((__always_inline__))
12101
vec_vsubfp(vector float __a, vector float __b) {
12102
return __a - __b;
12103
}
12104
12105
/* vec_subc */
12106
12107
static __inline__ vector signed int __ATTRS_o_ai
12108
vec_subc(vector signed int __a, vector signed int __b) {
12109
return (vector signed int)__builtin_altivec_vsubcuw((vector unsigned int)__a,
12110
(vector unsigned int) __b);
12111
}
12112
12113
static __inline__ vector unsigned int __ATTRS_o_ai
12114
vec_subc(vector unsigned int __a, vector unsigned int __b) {
12115
return __builtin_altivec_vsubcuw(__a, __b);
12116
}
12117
12118
#ifdef __POWER8_VECTOR__
12119
#ifdef __SIZEOF_INT128__
12120
static __inline__ vector unsigned __int128 __ATTRS_o_ai
12121
vec_subc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
12122
return __builtin_altivec_vsubcuq(__a, __b);
12123
}
12124
12125
static __inline__ vector signed __int128 __ATTRS_o_ai
12126
vec_subc(vector signed __int128 __a, vector signed __int128 __b) {
12127
return (vector signed __int128)__builtin_altivec_vsubcuq(
12128
(vector unsigned __int128)__a, (vector unsigned __int128)__b);
12129
}
12130
#endif
12131
12132
static __inline__ vector unsigned char __attribute__((__always_inline__))
12133
vec_subc_u128(vector unsigned char __a, vector unsigned char __b) {
12134
return (vector unsigned char)__builtin_altivec_vsubcuq_c(
12135
(vector unsigned char)__a, (vector unsigned char)__b);
12136
}
12137
#endif // __POWER8_VECTOR__
12138
12139
/* vec_vsubcuw */
12140
12141
static __inline__ vector unsigned int __attribute__((__always_inline__))
12142
vec_vsubcuw(vector unsigned int __a, vector unsigned int __b) {
12143
return __builtin_altivec_vsubcuw(__a, __b);
12144
}
12145
12146
/* vec_subs */
12147
12148
static __inline__ vector signed char __ATTRS_o_ai
12149
vec_subs(vector signed char __a, vector signed char __b) {
12150
return __builtin_altivec_vsubsbs(__a, __b);
12151
}
12152
12153
static __inline__ vector signed char __ATTRS_o_ai
12154
vec_subs(vector bool char __a, vector signed char __b) {
12155
return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
12156
}
12157
12158
static __inline__ vector signed char __ATTRS_o_ai
12159
vec_subs(vector signed char __a, vector bool char __b) {
12160
return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
12161
}
12162
12163
static __inline__ vector unsigned char __ATTRS_o_ai
12164
vec_subs(vector unsigned char __a, vector unsigned char __b) {
12165
return __builtin_altivec_vsububs(__a, __b);
12166
}
12167
12168
static __inline__ vector unsigned char __ATTRS_o_ai
12169
vec_subs(vector bool char __a, vector unsigned char __b) {
12170
return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
12171
}
12172
12173
static __inline__ vector unsigned char __ATTRS_o_ai
12174
vec_subs(vector unsigned char __a, vector bool char __b) {
12175
return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
12176
}
12177
12178
static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
12179
vector short __b) {
12180
return __builtin_altivec_vsubshs(__a, __b);
12181
}
12182
12183
static __inline__ vector short __ATTRS_o_ai vec_subs(vector bool short __a,
12184
vector short __b) {
12185
return __builtin_altivec_vsubshs((vector short)__a, __b);
12186
}
12187
12188
static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
12189
vector bool short __b) {
12190
return __builtin_altivec_vsubshs(__a, (vector short)__b);
12191
}
12192
12193
static __inline__ vector unsigned short __ATTRS_o_ai
12194
vec_subs(vector unsigned short __a, vector unsigned short __b) {
12195
return __builtin_altivec_vsubuhs(__a, __b);
12196
}
12197
12198
static __inline__ vector unsigned short __ATTRS_o_ai
12199
vec_subs(vector bool short __a, vector unsigned short __b) {
12200
return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
12201
}
12202
12203
static __inline__ vector unsigned short __ATTRS_o_ai
12204
vec_subs(vector unsigned short __a, vector bool short __b) {
12205
return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
12206
}
12207
12208
static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
12209
vector int __b) {
12210
return __builtin_altivec_vsubsws(__a, __b);
12211
}
12212
12213
static __inline__ vector int __ATTRS_o_ai vec_subs(vector bool int __a,
12214
vector int __b) {
12215
return __builtin_altivec_vsubsws((vector int)__a, __b);
12216
}
12217
12218
static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
12219
vector bool int __b) {
12220
return __builtin_altivec_vsubsws(__a, (vector int)__b);
12221
}
12222
12223
static __inline__ vector unsigned int __ATTRS_o_ai
12224
vec_subs(vector unsigned int __a, vector unsigned int __b) {
12225
return __builtin_altivec_vsubuws(__a, __b);
12226
}
12227
12228
static __inline__ vector unsigned int __ATTRS_o_ai
12229
vec_subs(vector bool int __a, vector unsigned int __b) {
12230
return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
12231
}
12232
12233
static __inline__ vector unsigned int __ATTRS_o_ai
12234
vec_subs(vector unsigned int __a, vector bool int __b) {
12235
return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
12236
}
12237
12238
/* vec_vsubsbs */
12239
12240
static __inline__ vector signed char __ATTRS_o_ai
12241
vec_vsubsbs(vector signed char __a, vector signed char __b) {
12242
return __builtin_altivec_vsubsbs(__a, __b);
12243
}
12244
12245
static __inline__ vector signed char __ATTRS_o_ai
12246
vec_vsubsbs(vector bool char __a, vector signed char __b) {
12247
return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
12248
}
12249
12250
static __inline__ vector signed char __ATTRS_o_ai
12251
vec_vsubsbs(vector signed char __a, vector bool char __b) {
12252
return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
12253
}
12254
12255
/* vec_vsububs */
12256
12257
static __inline__ vector unsigned char __ATTRS_o_ai
12258
vec_vsububs(vector unsigned char __a, vector unsigned char __b) {
12259
return __builtin_altivec_vsububs(__a, __b);
12260
}
12261
12262
static __inline__ vector unsigned char __ATTRS_o_ai
12263
vec_vsububs(vector bool char __a, vector unsigned char __b) {
12264
return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
12265
}
12266
12267
static __inline__ vector unsigned char __ATTRS_o_ai
12268
vec_vsububs(vector unsigned char __a, vector bool char __b) {
12269
return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
12270
}
12271
12272
/* vec_vsubshs */
12273
12274
static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
12275
vector short __b) {
12276
return __builtin_altivec_vsubshs(__a, __b);
12277
}
12278
12279
static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector bool short __a,
12280
vector short __b) {
12281
return __builtin_altivec_vsubshs((vector short)__a, __b);
12282
}
12283
12284
static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
12285
vector bool short __b) {
12286
return __builtin_altivec_vsubshs(__a, (vector short)__b);
12287
}
12288
12289
/* vec_vsubuhs */
12290
12291
static __inline__ vector unsigned short __ATTRS_o_ai
12292
vec_vsubuhs(vector unsigned short __a, vector unsigned short __b) {
12293
return __builtin_altivec_vsubuhs(__a, __b);
12294
}
12295
12296
static __inline__ vector unsigned short __ATTRS_o_ai
12297
vec_vsubuhs(vector bool short __a, vector unsigned short __b) {
12298
return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
12299
}
12300
12301
static __inline__ vector unsigned short __ATTRS_o_ai
12302
vec_vsubuhs(vector unsigned short __a, vector bool short __b) {
12303
return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
12304
}
12305
12306
/* vec_vsubsws */
12307
12308
static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
12309
vector int __b) {
12310
return __builtin_altivec_vsubsws(__a, __b);
12311
}
12312
12313
static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector bool int __a,
12314
vector int __b) {
12315
return __builtin_altivec_vsubsws((vector int)__a, __b);
12316
}
12317
12318
static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
12319
vector bool int __b) {
12320
return __builtin_altivec_vsubsws(__a, (vector int)__b);
12321
}
12322
12323
/* vec_vsubuws */
12324
12325
static __inline__ vector unsigned int __ATTRS_o_ai
12326
vec_vsubuws(vector unsigned int __a, vector unsigned int __b) {
12327
return __builtin_altivec_vsubuws(__a, __b);
12328
}
12329
12330
static __inline__ vector unsigned int __ATTRS_o_ai
12331
vec_vsubuws(vector bool int __a, vector unsigned int __b) {
12332
return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
12333
}
12334
12335
static __inline__ vector unsigned int __ATTRS_o_ai
12336
vec_vsubuws(vector unsigned int __a, vector bool int __b) {
12337
return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
12338
}
12339
12340
#ifdef __POWER8_VECTOR__
12341
/* vec_vsubuqm */
12342
12343
#ifdef __SIZEOF_INT128__
12344
static __inline__ vector signed __int128 __ATTRS_o_ai
12345
vec_vsubuqm(vector signed __int128 __a, vector signed __int128 __b) {
12346
return __a - __b;
12347
}
12348
12349
static __inline__ vector unsigned __int128 __ATTRS_o_ai
12350
vec_vsubuqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
12351
return __a - __b;
12352
}
12353
#endif
12354
12355
static __inline__ vector unsigned char __attribute__((__always_inline__))
12356
vec_sub_u128(vector unsigned char __a, vector unsigned char __b) {
12357
return (vector unsigned char)__builtin_altivec_vsubuqm(__a, __b);
12358
}
12359
12360
/* vec_vsubeuqm */
12361
12362
#ifdef __SIZEOF_INT128__
12363
static __inline__ vector signed __int128 __ATTRS_o_ai
12364
vec_vsubeuqm(vector signed __int128 __a, vector signed __int128 __b,
12365
vector signed __int128 __c) {
12366
return (vector signed __int128)__builtin_altivec_vsubeuqm(
12367
(vector unsigned __int128)__a, (vector unsigned __int128)__b,
12368
(vector unsigned __int128)__c);
12369
}
12370
12371
static __inline__ vector unsigned __int128 __ATTRS_o_ai
12372
vec_vsubeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
12373
vector unsigned __int128 __c) {
12374
return __builtin_altivec_vsubeuqm(__a, __b, __c);
12375
}
12376
12377
static __inline__ vector signed __int128 __ATTRS_o_ai
12378
vec_sube(vector signed __int128 __a, vector signed __int128 __b,
12379
vector signed __int128 __c) {
12380
return (vector signed __int128)__builtin_altivec_vsubeuqm(
12381
(vector unsigned __int128)__a, (vector unsigned __int128)__b,
12382
(vector unsigned __int128)__c);
12383
}
12384
12385
static __inline__ vector unsigned __int128 __ATTRS_o_ai
12386
vec_sube(vector unsigned __int128 __a, vector unsigned __int128 __b,
12387
vector unsigned __int128 __c) {
12388
return __builtin_altivec_vsubeuqm(__a, __b, __c);
12389
}
12390
#endif
12391
12392
static __inline__ vector unsigned char __attribute__((__always_inline__))
12393
vec_sube_u128(vector unsigned char __a, vector unsigned char __b,
12394
vector unsigned char __c) {
12395
return (vector unsigned char)__builtin_altivec_vsubeuqm_c(
12396
(vector unsigned char)__a, (vector unsigned char)__b,
12397
(vector unsigned char)__c);
12398
}
12399
12400
/* vec_vsubcuq */
12401
12402
#ifdef __SIZEOF_INT128__
12403
static __inline__ vector signed __int128 __ATTRS_o_ai
12404
vec_vsubcuq(vector signed __int128 __a, vector signed __int128 __b) {
12405
return (vector signed __int128)__builtin_altivec_vsubcuq(
12406
(vector unsigned __int128)__a, (vector unsigned __int128)__b);
12407
}
12408
12409
static __inline__ vector unsigned __int128 __ATTRS_o_ai
12410
vec_vsubcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
12411
return __builtin_altivec_vsubcuq(__a, __b);
12412
}
12413
12414
/* vec_vsubecuq */
12415
12416
static __inline__ vector signed __int128 __ATTRS_o_ai
12417
vec_vsubecuq(vector signed __int128 __a, vector signed __int128 __b,
12418
vector signed __int128 __c) {
12419
return (vector signed __int128)__builtin_altivec_vsubecuq(
12420
(vector unsigned __int128)__a, (vector unsigned __int128)__b,
12421
(vector unsigned __int128)__c);
12422
}
12423
12424
static __inline__ vector unsigned __int128 __ATTRS_o_ai
12425
vec_vsubecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
12426
vector unsigned __int128 __c) {
12427
return __builtin_altivec_vsubecuq(__a, __b, __c);
12428
}
12429
#endif
12430
12431
#ifdef __powerpc64__
12432
static __inline__ vector signed int __ATTRS_o_ai
12433
vec_subec(vector signed int __a, vector signed int __b,
12434
vector signed int __c) {
12435
return vec_addec(__a, ~__b, __c);
12436
}
12437
12438
static __inline__ vector unsigned int __ATTRS_o_ai
12439
vec_subec(vector unsigned int __a, vector unsigned int __b,
12440
vector unsigned int __c) {
12441
return vec_addec(__a, ~__b, __c);
12442
}
12443
#endif
12444
12445
#ifdef __SIZEOF_INT128__
12446
static __inline__ vector signed __int128 __ATTRS_o_ai
12447
vec_subec(vector signed __int128 __a, vector signed __int128 __b,
12448
vector signed __int128 __c) {
12449
return (vector signed __int128)__builtin_altivec_vsubecuq(
12450
(vector unsigned __int128)__a, (vector unsigned __int128)__b,
12451
(vector unsigned __int128)__c);
12452
}
12453
12454
static __inline__ vector unsigned __int128 __ATTRS_o_ai
12455
vec_subec(vector unsigned __int128 __a, vector unsigned __int128 __b,
12456
vector unsigned __int128 __c) {
12457
return __builtin_altivec_vsubecuq(__a, __b, __c);
12458
}
12459
#endif
12460
12461
static __inline__ vector unsigned char __attribute__((__always_inline__))
12462
vec_subec_u128(vector unsigned char __a, vector unsigned char __b,
12463
vector unsigned char __c) {
12464
return (vector unsigned char)__builtin_altivec_vsubecuq_c(
12465
(vector unsigned char)__a, (vector unsigned char)__b,
12466
(vector unsigned char)__c);
12467
}
12468
#endif // __POWER8_VECTOR__
12469
12470
static __inline__ vector signed int __ATTRS_o_ai
12471
vec_sube(vector signed int __a, vector signed int __b,
12472
vector signed int __c) {
12473
vector signed int __mask = {1, 1, 1, 1};
12474
vector signed int __carry = __c & __mask;
12475
return vec_adde(__a, ~__b, __carry);
12476
}
12477
12478
static __inline__ vector unsigned int __ATTRS_o_ai
12479
vec_sube(vector unsigned int __a, vector unsigned int __b,
12480
vector unsigned int __c) {
12481
vector unsigned int __mask = {1, 1, 1, 1};
12482
vector unsigned int __carry = __c & __mask;
12483
return vec_adde(__a, ~__b, __carry);
12484
}
12485
/* vec_sum4s */
12486
12487
static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed char __a,
12488
vector int __b) {
12489
return __builtin_altivec_vsum4sbs(__a, __b);
12490
}
12491
12492
static __inline__ vector unsigned int __ATTRS_o_ai
12493
vec_sum4s(vector unsigned char __a, vector unsigned int __b) {
12494
return __builtin_altivec_vsum4ubs(__a, __b);
12495
}
12496
12497
static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed short __a,
12498
vector int __b) {
12499
return __builtin_altivec_vsum4shs(__a, __b);
12500
}
12501
12502
/* vec_vsum4sbs */
12503
12504
static __inline__ vector int __attribute__((__always_inline__))
12505
vec_vsum4sbs(vector signed char __a, vector int __b) {
12506
return __builtin_altivec_vsum4sbs(__a, __b);
12507
}
12508
12509
/* vec_vsum4ubs */
12510
12511
static __inline__ vector unsigned int __attribute__((__always_inline__))
12512
vec_vsum4ubs(vector unsigned char __a, vector unsigned int __b) {
12513
return __builtin_altivec_vsum4ubs(__a, __b);
12514
}
12515
12516
/* vec_vsum4shs */
12517
12518
static __inline__ vector int __attribute__((__always_inline__))
12519
vec_vsum4shs(vector signed short __a, vector int __b) {
12520
return __builtin_altivec_vsum4shs(__a, __b);
12521
}
12522
12523
/* vec_sum2s */
12524
12525
/* The vsum2sws instruction has a big-endian bias, so that the second
12526
input vector and the result always reference big-endian elements
12527
1 and 3 (little-endian element 0 and 2). For ease of porting the
12528
programmer wants elements 1 and 3 in both cases, so for little
12529
endian we must perform some permutes. */
12530
12531
static __inline__ vector signed int __attribute__((__always_inline__))
12532
vec_sum2s(vector int __a, vector int __b) {
12533
#ifdef __LITTLE_ENDIAN__
12534
vector int __c = (vector signed int)vec_perm(
12535
__b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
12536
8, 9, 10, 11));
12537
__c = __builtin_altivec_vsum2sws(__a, __c);
12538
return (vector signed int)vec_perm(
12539
__c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
12540
8, 9, 10, 11));
12541
#else
12542
return __builtin_altivec_vsum2sws(__a, __b);
12543
#endif
12544
}
12545
12546
/* vec_vsum2sws */
12547
12548
static __inline__ vector signed int __attribute__((__always_inline__))
12549
vec_vsum2sws(vector int __a, vector int __b) {
12550
#ifdef __LITTLE_ENDIAN__
12551
vector int __c = (vector signed int)vec_perm(
12552
__b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
12553
8, 9, 10, 11));
12554
__c = __builtin_altivec_vsum2sws(__a, __c);
12555
return (vector signed int)vec_perm(
12556
__c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
12557
8, 9, 10, 11));
12558
#else
12559
return __builtin_altivec_vsum2sws(__a, __b);
12560
#endif
12561
}
12562
12563
/* vec_sums */
12564
12565
/* The vsumsws instruction has a big-endian bias, so that the second
12566
input vector and the result always reference big-endian element 3
12567
(little-endian element 0). For ease of porting the programmer
12568
wants element 3 in both cases, so for little endian we must perform
12569
some permutes. */
12570
12571
static __inline__ vector signed int __attribute__((__always_inline__))
12572
vec_sums(vector signed int __a, vector signed int __b) {
12573
#ifdef __LITTLE_ENDIAN__
12574
__b = (vector signed int)vec_splat(__b, 3);
12575
__b = __builtin_altivec_vsumsws(__a, __b);
12576
return (vector signed int)(0, 0, 0, __b[0]);
12577
#else
12578
return __builtin_altivec_vsumsws(__a, __b);
12579
#endif
12580
}
12581
12582
/* vec_vsumsws */
12583
12584
static __inline__ vector signed int __attribute__((__always_inline__))
12585
vec_vsumsws(vector signed int __a, vector signed int __b) {
12586
#ifdef __LITTLE_ENDIAN__
12587
__b = (vector signed int)vec_splat(__b, 3);
12588
__b = __builtin_altivec_vsumsws(__a, __b);
12589
return (vector signed int)(0, 0, 0, __b[0]);
12590
#else
12591
return __builtin_altivec_vsumsws(__a, __b);
12592
#endif
12593
}
12594
12595
/* vec_trunc */
12596
12597
static __inline__ vector float __ATTRS_o_ai vec_trunc(vector float __a) {
12598
#ifdef __VSX__
12599
return __builtin_vsx_xvrspiz(__a);
12600
#else
12601
return __builtin_altivec_vrfiz(__a);
12602
#endif
12603
}
12604
12605
#ifdef __VSX__
12606
static __inline__ vector double __ATTRS_o_ai vec_trunc(vector double __a) {
12607
return __builtin_vsx_xvrdpiz(__a);
12608
}
12609
#endif
12610
12611
/* vec_roundz */
12612
static __inline__ vector float __ATTRS_o_ai vec_roundz(vector float __a) {
12613
return vec_trunc(__a);
12614
}
12615
12616
#ifdef __VSX__
12617
static __inline__ vector double __ATTRS_o_ai vec_roundz(vector double __a) {
12618
return vec_trunc(__a);
12619
}
12620
#endif
12621
12622
/* vec_vrfiz */
12623
12624
static __inline__ vector float __attribute__((__always_inline__))
12625
vec_vrfiz(vector float __a) {
12626
return __builtin_altivec_vrfiz(__a);
12627
}
12628
12629
/* vec_unpackh */
12630
12631
/* The vector unpack instructions all have a big-endian bias, so for
12632
little endian we must reverse the meanings of "high" and "low." */
12633
#ifdef __LITTLE_ENDIAN__
12634
#define vec_vupkhpx(__a) __builtin_altivec_vupklpx((vector short)(__a))
12635
#define vec_vupklpx(__a) __builtin_altivec_vupkhpx((vector short)(__a))
12636
#else
12637
#define vec_vupkhpx(__a) __builtin_altivec_vupkhpx((vector short)(__a))
12638
#define vec_vupklpx(__a) __builtin_altivec_vupklpx((vector short)(__a))
12639
#endif
12640
12641
static __inline__ vector short __ATTRS_o_ai
12642
vec_unpackh(vector signed char __a) {
12643
#ifdef __LITTLE_ENDIAN__
12644
return __builtin_altivec_vupklsb((vector char)__a);
12645
#else
12646
return __builtin_altivec_vupkhsb((vector char)__a);
12647
#endif
12648
}
12649
12650
static __inline__ vector bool short __ATTRS_o_ai
12651
vec_unpackh(vector bool char __a) {
12652
#ifdef __LITTLE_ENDIAN__
12653
return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
12654
#else
12655
return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
12656
#endif
12657
}
12658
12659
static __inline__ vector int __ATTRS_o_ai vec_unpackh(vector short __a) {
12660
#ifdef __LITTLE_ENDIAN__
12661
return __builtin_altivec_vupklsh(__a);
12662
#else
12663
return __builtin_altivec_vupkhsh(__a);
12664
#endif
12665
}
12666
12667
static __inline__ vector bool int __ATTRS_o_ai
12668
vec_unpackh(vector bool short __a) {
12669
#ifdef __LITTLE_ENDIAN__
12670
return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
12671
#else
12672
return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
12673
#endif
12674
}
12675
12676
static __inline__ vector unsigned int __ATTRS_o_ai
12677
vec_unpackh(vector pixel __a) {
12678
#ifdef __LITTLE_ENDIAN__
12679
return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
12680
#else
12681
return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
12682
#endif
12683
}
12684
12685
#ifdef __POWER8_VECTOR__
12686
static __inline__ vector long long __ATTRS_o_ai vec_unpackh(vector int __a) {
12687
#ifdef __LITTLE_ENDIAN__
12688
return __builtin_altivec_vupklsw(__a);
12689
#else
12690
return __builtin_altivec_vupkhsw(__a);
12691
#endif
12692
}
12693
12694
static __inline__ vector bool long long __ATTRS_o_ai
12695
vec_unpackh(vector bool int __a) {
12696
#ifdef __LITTLE_ENDIAN__
12697
return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
12698
#else
12699
return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
12700
#endif
12701
}
12702
12703
static __inline__ vector double __ATTRS_o_ai
12704
vec_unpackh(vector float __a) {
12705
return (vector double)(__a[0], __a[1]);
12706
}
12707
#endif
12708
12709
/* vec_vupkhsb */
12710
12711
static __inline__ vector short __ATTRS_o_ai
12712
vec_vupkhsb(vector signed char __a) {
12713
#ifdef __LITTLE_ENDIAN__
12714
return __builtin_altivec_vupklsb((vector char)__a);
12715
#else
12716
return __builtin_altivec_vupkhsb((vector char)__a);
12717
#endif
12718
}
12719
12720
static __inline__ vector bool short __ATTRS_o_ai
12721
vec_vupkhsb(vector bool char __a) {
12722
#ifdef __LITTLE_ENDIAN__
12723
return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
12724
#else
12725
return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
12726
#endif
12727
}
12728
12729
/* vec_vupkhsh */
12730
12731
static __inline__ vector int __ATTRS_o_ai vec_vupkhsh(vector short __a) {
12732
#ifdef __LITTLE_ENDIAN__
12733
return __builtin_altivec_vupklsh(__a);
12734
#else
12735
return __builtin_altivec_vupkhsh(__a);
12736
#endif
12737
}
12738
12739
static __inline__ vector bool int __ATTRS_o_ai
12740
vec_vupkhsh(vector bool short __a) {
12741
#ifdef __LITTLE_ENDIAN__
12742
return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
12743
#else
12744
return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
12745
#endif
12746
}
12747
12748
static __inline__ vector unsigned int __ATTRS_o_ai
12749
vec_vupkhsh(vector pixel __a) {
12750
#ifdef __LITTLE_ENDIAN__
12751
return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
12752
#else
12753
return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
12754
#endif
12755
}
12756
12757
/* vec_vupkhsw */
12758
12759
#ifdef __POWER8_VECTOR__
12760
static __inline__ vector long long __ATTRS_o_ai vec_vupkhsw(vector int __a) {
12761
#ifdef __LITTLE_ENDIAN__
12762
return __builtin_altivec_vupklsw(__a);
12763
#else
12764
return __builtin_altivec_vupkhsw(__a);
12765
#endif
12766
}
12767
12768
static __inline__ vector bool long long __ATTRS_o_ai
12769
vec_vupkhsw(vector bool int __a) {
12770
#ifdef __LITTLE_ENDIAN__
12771
return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
12772
#else
12773
return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
12774
#endif
12775
}
12776
#endif
12777
12778
/* vec_unpackl */
12779
12780
static __inline__ vector short __ATTRS_o_ai
12781
vec_unpackl(vector signed char __a) {
12782
#ifdef __LITTLE_ENDIAN__
12783
return __builtin_altivec_vupkhsb((vector char)__a);
12784
#else
12785
return __builtin_altivec_vupklsb((vector char)__a);
12786
#endif
12787
}
12788
12789
static __inline__ vector bool short __ATTRS_o_ai
12790
vec_unpackl(vector bool char __a) {
12791
#ifdef __LITTLE_ENDIAN__
12792
return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
12793
#else
12794
return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
12795
#endif
12796
}
12797
12798
static __inline__ vector int __ATTRS_o_ai vec_unpackl(vector short __a) {
12799
#ifdef __LITTLE_ENDIAN__
12800
return __builtin_altivec_vupkhsh(__a);
12801
#else
12802
return __builtin_altivec_vupklsh(__a);
12803
#endif
12804
}
12805
12806
static __inline__ vector bool int __ATTRS_o_ai
12807
vec_unpackl(vector bool short __a) {
12808
#ifdef __LITTLE_ENDIAN__
12809
return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
12810
#else
12811
return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
12812
#endif
12813
}
12814
12815
static __inline__ vector unsigned int __ATTRS_o_ai
12816
vec_unpackl(vector pixel __a) {
12817
#ifdef __LITTLE_ENDIAN__
12818
return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
12819
#else
12820
return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
12821
#endif
12822
}
12823
12824
#ifdef __POWER8_VECTOR__
12825
static __inline__ vector long long __ATTRS_o_ai vec_unpackl(vector int __a) {
12826
#ifdef __LITTLE_ENDIAN__
12827
return __builtin_altivec_vupkhsw(__a);
12828
#else
12829
return __builtin_altivec_vupklsw(__a);
12830
#endif
12831
}
12832
12833
static __inline__ vector bool long long __ATTRS_o_ai
12834
vec_unpackl(vector bool int __a) {
12835
#ifdef __LITTLE_ENDIAN__
12836
return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
12837
#else
12838
return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
12839
#endif
12840
}
12841
12842
static __inline__ vector double __ATTRS_o_ai
12843
vec_unpackl(vector float __a) {
12844
return (vector double)(__a[2], __a[3]);
12845
}
12846
#endif
12847
12848
/* vec_vupklsb */
12849
12850
static __inline__ vector short __ATTRS_o_ai
12851
vec_vupklsb(vector signed char __a) {
12852
#ifdef __LITTLE_ENDIAN__
12853
return __builtin_altivec_vupkhsb((vector char)__a);
12854
#else
12855
return __builtin_altivec_vupklsb((vector char)__a);
12856
#endif
12857
}
12858
12859
static __inline__ vector bool short __ATTRS_o_ai
12860
vec_vupklsb(vector bool char __a) {
12861
#ifdef __LITTLE_ENDIAN__
12862
return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
12863
#else
12864
return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
12865
#endif
12866
}
12867
12868
/* vec_vupklsh */
12869
12870
static __inline__ vector int __ATTRS_o_ai vec_vupklsh(vector short __a) {
12871
#ifdef __LITTLE_ENDIAN__
12872
return __builtin_altivec_vupkhsh(__a);
12873
#else
12874
return __builtin_altivec_vupklsh(__a);
12875
#endif
12876
}
12877
12878
static __inline__ vector bool int __ATTRS_o_ai
12879
vec_vupklsh(vector bool short __a) {
12880
#ifdef __LITTLE_ENDIAN__
12881
return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
12882
#else
12883
return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
12884
#endif
12885
}
12886
12887
static __inline__ vector unsigned int __ATTRS_o_ai
12888
vec_vupklsh(vector pixel __a) {
12889
#ifdef __LITTLE_ENDIAN__
12890
return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
12891
#else
12892
return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
12893
#endif
12894
}
12895
12896
/* vec_vupklsw */
12897
12898
#ifdef __POWER8_VECTOR__
12899
static __inline__ vector long long __ATTRS_o_ai vec_vupklsw(vector int __a) {
12900
#ifdef __LITTLE_ENDIAN__
12901
return __builtin_altivec_vupkhsw(__a);
12902
#else
12903
return __builtin_altivec_vupklsw(__a);
12904
#endif
12905
}
12906
12907
static __inline__ vector bool long long __ATTRS_o_ai
12908
vec_vupklsw(vector bool int __a) {
12909
#ifdef __LITTLE_ENDIAN__
12910
return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
12911
#else
12912
return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
12913
#endif
12914
}
12915
#endif
12916
12917
/* vec_vsx_ld */
12918
12919
#ifdef __VSX__
12920
12921
static __inline__ vector bool int __ATTRS_o_ai
12922
vec_vsx_ld(int __a, const vector bool int *__b) {
12923
return (vector bool int)__builtin_vsx_lxvw4x(__a, __b);
12924
}
12925
12926
static __inline__ vector signed int __ATTRS_o_ai
12927
vec_vsx_ld(int __a, const vector signed int *__b) {
12928
return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
12929
}
12930
12931
static __inline__ vector signed int __ATTRS_o_ai
12932
vec_vsx_ld(int __a, const signed int *__b) {
12933
return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
12934
}
12935
12936
static __inline__ vector unsigned int __ATTRS_o_ai
12937
vec_vsx_ld(int __a, const vector unsigned int *__b) {
12938
return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
12939
}
12940
12941
static __inline__ vector unsigned int __ATTRS_o_ai
12942
vec_vsx_ld(int __a, const unsigned int *__b) {
12943
return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
12944
}
12945
12946
static __inline__ vector float __ATTRS_o_ai
12947
vec_vsx_ld(int __a, const vector float *__b) {
12948
return (vector float)__builtin_vsx_lxvw4x(__a, __b);
12949
}
12950
12951
static __inline__ vector float __ATTRS_o_ai vec_vsx_ld(int __a,
12952
const float *__b) {
12953
return (vector float)__builtin_vsx_lxvw4x(__a, __b);
12954
}
12955
12956
static __inline__ vector signed long long __ATTRS_o_ai
12957
vec_vsx_ld(int __a, const vector signed long long *__b) {
12958
return (vector signed long long)__builtin_vsx_lxvd2x(__a, __b);
12959
}
12960
12961
static __inline__ vector unsigned long long __ATTRS_o_ai
12962
vec_vsx_ld(int __a, const vector unsigned long long *__b) {
12963
return (vector unsigned long long)__builtin_vsx_lxvd2x(__a, __b);
12964
}
12965
12966
static __inline__ vector double __ATTRS_o_ai
12967
vec_vsx_ld(int __a, const vector double *__b) {
12968
return (vector double)__builtin_vsx_lxvd2x(__a, __b);
12969
}
12970
12971
static __inline__ vector double __ATTRS_o_ai
12972
vec_vsx_ld(int __a, const double *__b) {
12973
return (vector double)__builtin_vsx_lxvd2x(__a, __b);
12974
}
12975
12976
static __inline__ vector bool short __ATTRS_o_ai
12977
vec_vsx_ld(int __a, const vector bool short *__b) {
12978
return (vector bool short)__builtin_vsx_lxvw4x(__a, __b);
12979
}
12980
12981
static __inline__ vector signed short __ATTRS_o_ai
12982
vec_vsx_ld(int __a, const vector signed short *__b) {
12983
return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
12984
}
12985
12986
static __inline__ vector signed short __ATTRS_o_ai
12987
vec_vsx_ld(int __a, const signed short *__b) {
12988
return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
12989
}
12990
12991
static __inline__ vector unsigned short __ATTRS_o_ai
12992
vec_vsx_ld(int __a, const vector unsigned short *__b) {
12993
return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
12994
}
12995
12996
static __inline__ vector unsigned short __ATTRS_o_ai
12997
vec_vsx_ld(int __a, const unsigned short *__b) {
12998
return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
12999
}
13000
13001
static __inline__ vector bool char __ATTRS_o_ai
13002
vec_vsx_ld(int __a, const vector bool char *__b) {
13003
return (vector bool char)__builtin_vsx_lxvw4x(__a, __b);
13004
}
13005
13006
static __inline__ vector signed char __ATTRS_o_ai
13007
vec_vsx_ld(int __a, const vector signed char *__b) {
13008
return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
13009
}
13010
13011
static __inline__ vector signed char __ATTRS_o_ai
13012
vec_vsx_ld(int __a, const signed char *__b) {
13013
return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
13014
}
13015
13016
static __inline__ vector unsigned char __ATTRS_o_ai
13017
vec_vsx_ld(int __a, const vector unsigned char *__b) {
13018
return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
13019
}
13020
13021
static __inline__ vector unsigned char __ATTRS_o_ai
13022
vec_vsx_ld(int __a, const unsigned char *__b) {
13023
return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
13024
}
13025
13026
#endif
13027
13028
/* vec_vsx_st */
13029
13030
#ifdef __VSX__
13031
13032
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
13033
vector bool int *__c) {
13034
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13035
}
13036
13037
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
13038
signed int *__c) {
13039
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13040
}
13041
13042
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
13043
unsigned int *__c) {
13044
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13045
}
13046
13047
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
13048
vector signed int *__c) {
13049
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13050
}
13051
13052
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
13053
signed int *__c) {
13054
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13055
}
13056
13057
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
13058
vector unsigned int *__c) {
13059
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13060
}
13061
13062
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
13063
unsigned int *__c) {
13064
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13065
}
13066
13067
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
13068
vector float *__c) {
13069
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13070
}
13071
13072
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
13073
float *__c) {
13074
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13075
}
13076
13077
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed long long __a,
13078
int __b,
13079
vector signed long long *__c) {
13080
__builtin_vsx_stxvd2x((vector double)__a, __b, __c);
13081
}
13082
13083
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned long long __a,
13084
int __b,
13085
vector unsigned long long *__c) {
13086
__builtin_vsx_stxvd2x((vector double)__a, __b, __c);
13087
}
13088
13089
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
13090
vector double *__c) {
13091
__builtin_vsx_stxvd2x((vector double)__a, __b, __c);
13092
}
13093
13094
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
13095
double *__c) {
13096
__builtin_vsx_stxvd2x((vector double)__a, __b, __c);
13097
}
13098
13099
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
13100
vector bool short *__c) {
13101
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13102
}
13103
13104
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
13105
signed short *__c) {
13106
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13107
}
13108
13109
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
13110
unsigned short *__c) {
13111
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13112
}
13113
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
13114
vector signed short *__c) {
13115
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13116
}
13117
13118
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
13119
signed short *__c) {
13120
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13121
}
13122
13123
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
13124
int __b,
13125
vector unsigned short *__c) {
13126
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13127
}
13128
13129
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
13130
int __b, unsigned short *__c) {
13131
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13132
}
13133
13134
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
13135
vector bool char *__c) {
13136
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13137
}
13138
13139
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
13140
signed char *__c) {
13141
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13142
}
13143
13144
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
13145
unsigned char *__c) {
13146
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13147
}
13148
13149
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
13150
vector signed char *__c) {
13151
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13152
}
13153
13154
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
13155
signed char *__c) {
13156
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13157
}
13158
13159
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
13160
int __b,
13161
vector unsigned char *__c) {
13162
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13163
}
13164
13165
static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
13166
int __b, unsigned char *__c) {
13167
__builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13168
}
13169
13170
#endif
13171
13172
#ifdef __VSX__
13173
#define vec_xxpermdi __builtin_vsx_xxpermdi
13174
#define vec_xxsldwi __builtin_vsx_xxsldwi
13175
#define vec_permi(__a, __b, __c) \
13176
_Generic((__a), vector signed long long \
13177
: __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1), \
13178
(((__c)&0x1) + 2)), \
13179
vector unsigned long long \
13180
: __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1), \
13181
(((__c)&0x1) + 2)), \
13182
vector double \
13183
: __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1), \
13184
(((__c)&0x1) + 2)))
13185
#endif
13186
13187
/* vec_xor */
13188
13189
#define __builtin_altivec_vxor vec_xor
13190
13191
static __inline__ vector signed char __ATTRS_o_ai
13192
vec_xor(vector signed char __a, vector signed char __b) {
13193
return __a ^ __b;
13194
}
13195
13196
static __inline__ vector signed char __ATTRS_o_ai
13197
vec_xor(vector bool char __a, vector signed char __b) {
13198
return (vector signed char)__a ^ __b;
13199
}
13200
13201
static __inline__ vector signed char __ATTRS_o_ai
13202
vec_xor(vector signed char __a, vector bool char __b) {
13203
return __a ^ (vector signed char)__b;
13204
}
13205
13206
static __inline__ vector unsigned char __ATTRS_o_ai
13207
vec_xor(vector unsigned char __a, vector unsigned char __b) {
13208
return __a ^ __b;
13209
}
13210
13211
static __inline__ vector unsigned char __ATTRS_o_ai
13212
vec_xor(vector bool char __a, vector unsigned char __b) {
13213
return (vector unsigned char)__a ^ __b;
13214
}
13215
13216
static __inline__ vector unsigned char __ATTRS_o_ai
13217
vec_xor(vector unsigned char __a, vector bool char __b) {
13218
return __a ^ (vector unsigned char)__b;
13219
}
13220
13221
static __inline__ vector bool char __ATTRS_o_ai vec_xor(vector bool char __a,
13222
vector bool char __b) {
13223
return __a ^ __b;
13224
}
13225
13226
static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
13227
vector short __b) {
13228
return __a ^ __b;
13229
}
13230
13231
static __inline__ vector short __ATTRS_o_ai vec_xor(vector bool short __a,
13232
vector short __b) {
13233
return (vector short)__a ^ __b;
13234
}
13235
13236
static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
13237
vector bool short __b) {
13238
return __a ^ (vector short)__b;
13239
}
13240
13241
static __inline__ vector unsigned short __ATTRS_o_ai
13242
vec_xor(vector unsigned short __a, vector unsigned short __b) {
13243
return __a ^ __b;
13244
}
13245
13246
static __inline__ vector unsigned short __ATTRS_o_ai
13247
vec_xor(vector bool short __a, vector unsigned short __b) {
13248
return (vector unsigned short)__a ^ __b;
13249
}
13250
13251
static __inline__ vector unsigned short __ATTRS_o_ai
13252
vec_xor(vector unsigned short __a, vector bool short __b) {
13253
return __a ^ (vector unsigned short)__b;
13254
}
13255
13256
static __inline__ vector bool short __ATTRS_o_ai
13257
vec_xor(vector bool short __a, vector bool short __b) {
13258
return __a ^ __b;
13259
}
13260
13261
static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
13262
vector int __b) {
13263
return __a ^ __b;
13264
}
13265
13266
static __inline__ vector int __ATTRS_o_ai vec_xor(vector bool int __a,
13267
vector int __b) {
13268
return (vector int)__a ^ __b;
13269
}
13270
13271
static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
13272
vector bool int __b) {
13273
return __a ^ (vector int)__b;
13274
}
13275
13276
static __inline__ vector unsigned int __ATTRS_o_ai
13277
vec_xor(vector unsigned int __a, vector unsigned int __b) {
13278
return __a ^ __b;
13279
}
13280
13281
static __inline__ vector unsigned int __ATTRS_o_ai
13282
vec_xor(vector bool int __a, vector unsigned int __b) {
13283
return (vector unsigned int)__a ^ __b;
13284
}
13285
13286
static __inline__ vector unsigned int __ATTRS_o_ai
13287
vec_xor(vector unsigned int __a, vector bool int __b) {
13288
return __a ^ (vector unsigned int)__b;
13289
}
13290
13291
static __inline__ vector bool int __ATTRS_o_ai vec_xor(vector bool int __a,
13292
vector bool int __b) {
13293
return __a ^ __b;
13294
}
13295
13296
static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
13297
vector float __b) {
13298
vector unsigned int __res =
13299
(vector unsigned int)__a ^ (vector unsigned int)__b;
13300
return (vector float)__res;
13301
}
13302
13303
static __inline__ vector float __ATTRS_o_ai vec_xor(vector bool int __a,
13304
vector float __b) {
13305
vector unsigned int __res =
13306
(vector unsigned int)__a ^ (vector unsigned int)__b;
13307
return (vector float)__res;
13308
}
13309
13310
static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
13311
vector bool int __b) {
13312
vector unsigned int __res =
13313
(vector unsigned int)__a ^ (vector unsigned int)__b;
13314
return (vector float)__res;
13315
}
13316
13317
#ifdef __VSX__
13318
static __inline__ vector signed long long __ATTRS_o_ai
13319
vec_xor(vector signed long long __a, vector signed long long __b) {
13320
return __a ^ __b;
13321
}
13322
13323
static __inline__ vector signed long long __ATTRS_o_ai
13324
vec_xor(vector bool long long __a, vector signed long long __b) {
13325
return (vector signed long long)__a ^ __b;
13326
}
13327
13328
static __inline__ vector signed long long __ATTRS_o_ai
13329
vec_xor(vector signed long long __a, vector bool long long __b) {
13330
return __a ^ (vector signed long long)__b;
13331
}
13332
13333
static __inline__ vector unsigned long long __ATTRS_o_ai
13334
vec_xor(vector unsigned long long __a, vector unsigned long long __b) {
13335
return __a ^ __b;
13336
}
13337
13338
static __inline__ vector unsigned long long __ATTRS_o_ai
13339
vec_xor(vector bool long long __a, vector unsigned long long __b) {
13340
return (vector unsigned long long)__a ^ __b;
13341
}
13342
13343
static __inline__ vector unsigned long long __ATTRS_o_ai
13344
vec_xor(vector unsigned long long __a, vector bool long long __b) {
13345
return __a ^ (vector unsigned long long)__b;
13346
}
13347
13348
static __inline__ vector bool long long __ATTRS_o_ai
13349
vec_xor(vector bool long long __a, vector bool long long __b) {
13350
return __a ^ __b;
13351
}
13352
13353
static __inline__ vector double __ATTRS_o_ai vec_xor(vector double __a,
13354
vector double __b) {
13355
return (vector double)((vector unsigned long long)__a ^
13356
(vector unsigned long long)__b);
13357
}
13358
13359
static __inline__ vector double __ATTRS_o_ai
13360
vec_xor(vector double __a, vector bool long long __b) {
13361
return (vector double)((vector unsigned long long)__a ^
13362
(vector unsigned long long)__b);
13363
}
13364
13365
static __inline__ vector double __ATTRS_o_ai vec_xor(vector bool long long __a,
13366
vector double __b) {
13367
return (vector double)((vector unsigned long long)__a ^
13368
(vector unsigned long long)__b);
13369
}
13370
#endif
13371
13372
/* vec_vxor */
13373
13374
static __inline__ vector signed char __ATTRS_o_ai
13375
vec_vxor(vector signed char __a, vector signed char __b) {
13376
return __a ^ __b;
13377
}
13378
13379
static __inline__ vector signed char __ATTRS_o_ai
13380
vec_vxor(vector bool char __a, vector signed char __b) {
13381
return (vector signed char)__a ^ __b;
13382
}
13383
13384
static __inline__ vector signed char __ATTRS_o_ai
13385
vec_vxor(vector signed char __a, vector bool char __b) {
13386
return __a ^ (vector signed char)__b;
13387
}
13388
13389
static __inline__ vector unsigned char __ATTRS_o_ai
13390
vec_vxor(vector unsigned char __a, vector unsigned char __b) {
13391
return __a ^ __b;
13392
}
13393
13394
static __inline__ vector unsigned char __ATTRS_o_ai
13395
vec_vxor(vector bool char __a, vector unsigned char __b) {
13396
return (vector unsigned char)__a ^ __b;
13397
}
13398
13399
static __inline__ vector unsigned char __ATTRS_o_ai
13400
vec_vxor(vector unsigned char __a, vector bool char __b) {
13401
return __a ^ (vector unsigned char)__b;
13402
}
13403
13404
static __inline__ vector bool char __ATTRS_o_ai vec_vxor(vector bool char __a,
13405
vector bool char __b) {
13406
return __a ^ __b;
13407
}
13408
13409
static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
13410
vector short __b) {
13411
return __a ^ __b;
13412
}
13413
13414
static __inline__ vector short __ATTRS_o_ai vec_vxor(vector bool short __a,
13415
vector short __b) {
13416
return (vector short)__a ^ __b;
13417
}
13418
13419
static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
13420
vector bool short __b) {
13421
return __a ^ (vector short)__b;
13422
}
13423
13424
static __inline__ vector unsigned short __ATTRS_o_ai
13425
vec_vxor(vector unsigned short __a, vector unsigned short __b) {
13426
return __a ^ __b;
13427
}
13428
13429
static __inline__ vector unsigned short __ATTRS_o_ai
13430
vec_vxor(vector bool short __a, vector unsigned short __b) {
13431
return (vector unsigned short)__a ^ __b;
13432
}
13433
13434
static __inline__ vector unsigned short __ATTRS_o_ai
13435
vec_vxor(vector unsigned short __a, vector bool short __b) {
13436
return __a ^ (vector unsigned short)__b;
13437
}
13438
13439
static __inline__ vector bool short __ATTRS_o_ai
13440
vec_vxor(vector bool short __a, vector bool short __b) {
13441
return __a ^ __b;
13442
}
13443
13444
static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
13445
vector int __b) {
13446
return __a ^ __b;
13447
}
13448
13449
static __inline__ vector int __ATTRS_o_ai vec_vxor(vector bool int __a,
13450
vector int __b) {
13451
return (vector int)__a ^ __b;
13452
}
13453
13454
static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
13455
vector bool int __b) {
13456
return __a ^ (vector int)__b;
13457
}
13458
13459
static __inline__ vector unsigned int __ATTRS_o_ai
13460
vec_vxor(vector unsigned int __a, vector unsigned int __b) {
13461
return __a ^ __b;
13462
}
13463
13464
static __inline__ vector unsigned int __ATTRS_o_ai
13465
vec_vxor(vector bool int __a, vector unsigned int __b) {
13466
return (vector unsigned int)__a ^ __b;
13467
}
13468
13469
static __inline__ vector unsigned int __ATTRS_o_ai
13470
vec_vxor(vector unsigned int __a, vector bool int __b) {
13471
return __a ^ (vector unsigned int)__b;
13472
}
13473
13474
static __inline__ vector bool int __ATTRS_o_ai vec_vxor(vector bool int __a,
13475
vector bool int __b) {
13476
return __a ^ __b;
13477
}
13478
13479
static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
13480
vector float __b) {
13481
vector unsigned int __res =
13482
(vector unsigned int)__a ^ (vector unsigned int)__b;
13483
return (vector float)__res;
13484
}
13485
13486
static __inline__ vector float __ATTRS_o_ai vec_vxor(vector bool int __a,
13487
vector float __b) {
13488
vector unsigned int __res =
13489
(vector unsigned int)__a ^ (vector unsigned int)__b;
13490
return (vector float)__res;
13491
}
13492
13493
static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
13494
vector bool int __b) {
13495
vector unsigned int __res =
13496
(vector unsigned int)__a ^ (vector unsigned int)__b;
13497
return (vector float)__res;
13498
}
13499
13500
#ifdef __VSX__
13501
static __inline__ vector signed long long __ATTRS_o_ai
13502
vec_vxor(vector signed long long __a, vector signed long long __b) {
13503
return __a ^ __b;
13504
}
13505
13506
static __inline__ vector signed long long __ATTRS_o_ai
13507
vec_vxor(vector bool long long __a, vector signed long long __b) {
13508
return (vector signed long long)__a ^ __b;
13509
}
13510
13511
static __inline__ vector signed long long __ATTRS_o_ai
13512
vec_vxor(vector signed long long __a, vector bool long long __b) {
13513
return __a ^ (vector signed long long)__b;
13514
}
13515
13516
static __inline__ vector unsigned long long __ATTRS_o_ai
13517
vec_vxor(vector unsigned long long __a, vector unsigned long long __b) {
13518
return __a ^ __b;
13519
}
13520
13521
static __inline__ vector unsigned long long __ATTRS_o_ai
13522
vec_vxor(vector bool long long __a, vector unsigned long long __b) {
13523
return (vector unsigned long long)__a ^ __b;
13524
}
13525
13526
static __inline__ vector unsigned long long __ATTRS_o_ai
13527
vec_vxor(vector unsigned long long __a, vector bool long long __b) {
13528
return __a ^ (vector unsigned long long)__b;
13529
}
13530
13531
static __inline__ vector bool long long __ATTRS_o_ai
13532
vec_vxor(vector bool long long __a, vector bool long long __b) {
13533
return __a ^ __b;
13534
}
13535
#endif
13536
13537
/* ------------------------ extensions for CBEA ----------------------------- */
13538
13539
/* vec_extract */
13540
13541
static __inline__ signed char __ATTRS_o_ai vec_extract(vector signed char __a,
13542
signed int __b) {
13543
return __a[__b & 0xf];
13544
}
13545
13546
static __inline__ unsigned char __ATTRS_o_ai
13547
vec_extract(vector unsigned char __a, signed int __b) {
13548
return __a[__b & 0xf];
13549
}
13550
13551
static __inline__ unsigned char __ATTRS_o_ai vec_extract(vector bool char __a,
13552
signed int __b) {
13553
return __a[__b & 0xf];
13554
}
13555
13556
static __inline__ signed short __ATTRS_o_ai vec_extract(vector signed short __a,
13557
signed int __b) {
13558
return __a[__b & 0x7];
13559
}
13560
13561
static __inline__ unsigned short __ATTRS_o_ai
13562
vec_extract(vector unsigned short __a, signed int __b) {
13563
return __a[__b & 0x7];
13564
}
13565
13566
static __inline__ unsigned short __ATTRS_o_ai vec_extract(vector bool short __a,
13567
signed int __b) {
13568
return __a[__b & 0x7];
13569
}
13570
13571
static __inline__ signed int __ATTRS_o_ai vec_extract(vector signed int __a,
13572
signed int __b) {
13573
return __a[__b & 0x3];
13574
}
13575
13576
static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector unsigned int __a,
13577
signed int __b) {
13578
return __a[__b & 0x3];
13579
}
13580
13581
static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector bool int __a,
13582
signed int __b) {
13583
return __a[__b & 0x3];
13584
}
13585
13586
#ifdef __VSX__
13587
static __inline__ signed long long __ATTRS_o_ai
13588
vec_extract(vector signed long long __a, signed int __b) {
13589
return __a[__b & 0x1];
13590
}
13591
13592
static __inline__ unsigned long long __ATTRS_o_ai
13593
vec_extract(vector unsigned long long __a, signed int __b) {
13594
return __a[__b & 0x1];
13595
}
13596
13597
static __inline__ unsigned long long __ATTRS_o_ai
13598
vec_extract(vector bool long long __a, signed int __b) {
13599
return __a[__b & 0x1];
13600
}
13601
13602
static __inline__ double __ATTRS_o_ai vec_extract(vector double __a,
13603
signed int __b) {
13604
return __a[__b & 0x1];
13605
}
13606
#endif
13607
13608
static __inline__ float __ATTRS_o_ai vec_extract(vector float __a,
13609
signed int __b) {
13610
return __a[__b & 0x3];
13611
}
13612
13613
#ifdef __POWER9_VECTOR__
13614
13615
#define vec_insert4b __builtin_vsx_insertword
13616
#define vec_extract4b __builtin_vsx_extractuword
13617
13618
/* vec_extract_exp */
13619
13620
static __inline__ vector unsigned int __ATTRS_o_ai
13621
vec_extract_exp(vector float __a) {
13622
return __builtin_vsx_xvxexpsp(__a);
13623
}
13624
13625
static __inline__ vector unsigned long long __ATTRS_o_ai
13626
vec_extract_exp(vector double __a) {
13627
return __builtin_vsx_xvxexpdp(__a);
13628
}
13629
13630
/* vec_extract_sig */
13631
13632
static __inline__ vector unsigned int __ATTRS_o_ai
13633
vec_extract_sig(vector float __a) {
13634
return __builtin_vsx_xvxsigsp(__a);
13635
}
13636
13637
static __inline__ vector unsigned long long __ATTRS_o_ai
13638
vec_extract_sig (vector double __a) {
13639
return __builtin_vsx_xvxsigdp(__a);
13640
}
13641
13642
static __inline__ vector float __ATTRS_o_ai
13643
vec_extract_fp32_from_shorth(vector unsigned short __a) {
13644
vector unsigned short __b =
13645
#ifdef __LITTLE_ENDIAN__
13646
__builtin_shufflevector(__a, __a, 0, -1, 1, -1, 2, -1, 3, -1);
13647
#else
13648
__builtin_shufflevector(__a, __a, -1, 0, -1, 1, -1, 2, -1, 3);
13649
#endif
13650
return __builtin_vsx_xvcvhpsp(__b);
13651
}
13652
13653
static __inline__ vector float __ATTRS_o_ai
13654
vec_extract_fp32_from_shortl(vector unsigned short __a) {
13655
vector unsigned short __b =
13656
#ifdef __LITTLE_ENDIAN__
13657
__builtin_shufflevector(__a, __a, 4, -1, 5, -1, 6, -1, 7, -1);
13658
#else
13659
__builtin_shufflevector(__a, __a, -1, 4, -1, 5, -1, 6, -1, 7);
13660
#endif
13661
return __builtin_vsx_xvcvhpsp(__b);
13662
}
13663
#endif /* __POWER9_VECTOR__ */
13664
13665
/* vec_insert */
13666
13667
static __inline__ vector signed char __ATTRS_o_ai
13668
vec_insert(signed char __a, vector signed char __b, int __c) {
13669
__b[__c & 0xF] = __a;
13670
return __b;
13671
}
13672
13673
static __inline__ vector unsigned char __ATTRS_o_ai
13674
vec_insert(unsigned char __a, vector unsigned char __b, int __c) {
13675
__b[__c & 0xF] = __a;
13676
return __b;
13677
}
13678
13679
static __inline__ vector bool char __ATTRS_o_ai vec_insert(unsigned char __a,
13680
vector bool char __b,
13681
int __c) {
13682
__b[__c & 0xF] = __a;
13683
return __b;
13684
}
13685
13686
static __inline__ vector signed short __ATTRS_o_ai
13687
vec_insert(signed short __a, vector signed short __b, int __c) {
13688
__b[__c & 0x7] = __a;
13689
return __b;
13690
}
13691
13692
static __inline__ vector unsigned short __ATTRS_o_ai
13693
vec_insert(unsigned short __a, vector unsigned short __b, int __c) {
13694
__b[__c & 0x7] = __a;
13695
return __b;
13696
}
13697
13698
static __inline__ vector bool short __ATTRS_o_ai
13699
vec_insert(unsigned short __a, vector bool short __b, int __c) {
13700
__b[__c & 0x7] = __a;
13701
return __b;
13702
}
13703
13704
static __inline__ vector signed int __ATTRS_o_ai
13705
vec_insert(signed int __a, vector signed int __b, int __c) {
13706
__b[__c & 0x3] = __a;
13707
return __b;
13708
}
13709
13710
static __inline__ vector unsigned int __ATTRS_o_ai
13711
vec_insert(unsigned int __a, vector unsigned int __b, int __c) {
13712
__b[__c & 0x3] = __a;
13713
return __b;
13714
}
13715
13716
static __inline__ vector bool int __ATTRS_o_ai vec_insert(unsigned int __a,
13717
vector bool int __b,
13718
int __c) {
13719
__b[__c & 0x3] = __a;
13720
return __b;
13721
}
13722
13723
#ifdef __VSX__
13724
static __inline__ vector signed long long __ATTRS_o_ai
13725
vec_insert(signed long long __a, vector signed long long __b, int __c) {
13726
__b[__c & 0x1] = __a;
13727
return __b;
13728
}
13729
13730
static __inline__ vector unsigned long long __ATTRS_o_ai
13731
vec_insert(unsigned long long __a, vector unsigned long long __b, int __c) {
13732
__b[__c & 0x1] = __a;
13733
return __b;
13734
}
13735
13736
static __inline__ vector bool long long __ATTRS_o_ai
13737
vec_insert(unsigned long long __a, vector bool long long __b, int __c) {
13738
__b[__c & 0x1] = __a;
13739
return __b;
13740
}
13741
static __inline__ vector double __ATTRS_o_ai vec_insert(double __a,
13742
vector double __b,
13743
int __c) {
13744
__b[__c & 0x1] = __a;
13745
return __b;
13746
}
13747
#endif
13748
13749
static __inline__ vector float __ATTRS_o_ai vec_insert(float __a,
13750
vector float __b,
13751
int __c) {
13752
__b[__c & 0x3] = __a;
13753
return __b;
13754
}
13755
13756
/* vec_lvlx */
13757
13758
static __inline__ vector signed char __ATTRS_o_ai
13759
vec_lvlx(int __a, const signed char *__b) {
13760
return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
13761
vec_lvsl(__a, __b));
13762
}
13763
13764
static __inline__ vector signed char __ATTRS_o_ai
13765
vec_lvlx(int __a, const vector signed char *__b) {
13766
return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
13767
vec_lvsl(__a, (unsigned char *)__b));
13768
}
13769
13770
static __inline__ vector unsigned char __ATTRS_o_ai
13771
vec_lvlx(int __a, const unsigned char *__b) {
13772
return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
13773
vec_lvsl(__a, __b));
13774
}
13775
13776
static __inline__ vector unsigned char __ATTRS_o_ai
13777
vec_lvlx(int __a, const vector unsigned char *__b) {
13778
return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
13779
vec_lvsl(__a, (unsigned char *)__b));
13780
}
13781
13782
static __inline__ vector bool char __ATTRS_o_ai
13783
vec_lvlx(int __a, const vector bool char *__b) {
13784
return vec_perm(vec_ld(__a, __b), (vector bool char)(0),
13785
vec_lvsl(__a, (unsigned char *)__b));
13786
}
13787
13788
static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
13789
const short *__b) {
13790
return vec_perm(vec_ld(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
13791
}
13792
13793
static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
13794
const vector short *__b) {
13795
return vec_perm(vec_ld(__a, __b), (vector short)(0),
13796
vec_lvsl(__a, (unsigned char *)__b));
13797
}
13798
13799
static __inline__ vector unsigned short __ATTRS_o_ai
13800
vec_lvlx(int __a, const unsigned short *__b) {
13801
return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
13802
vec_lvsl(__a, __b));
13803
}
13804
13805
static __inline__ vector unsigned short __ATTRS_o_ai
13806
vec_lvlx(int __a, const vector unsigned short *__b) {
13807
return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
13808
vec_lvsl(__a, (unsigned char *)__b));
13809
}
13810
13811
static __inline__ vector bool short __ATTRS_o_ai
13812
vec_lvlx(int __a, const vector bool short *__b) {
13813
return vec_perm(vec_ld(__a, __b), (vector bool short)(0),
13814
vec_lvsl(__a, (unsigned char *)__b));
13815
}
13816
13817
static __inline__ vector pixel __ATTRS_o_ai vec_lvlx(int __a,
13818
const vector pixel *__b) {
13819
return vec_perm(vec_ld(__a, __b), (vector pixel)(0),
13820
vec_lvsl(__a, (unsigned char *)__b));
13821
}
13822
13823
static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a, const int *__b) {
13824
return vec_perm(vec_ld(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
13825
}
13826
13827
static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a,
13828
const vector int *__b) {
13829
return vec_perm(vec_ld(__a, __b), (vector int)(0),
13830
vec_lvsl(__a, (unsigned char *)__b));
13831
}
13832
13833
static __inline__ vector unsigned int __ATTRS_o_ai
13834
vec_lvlx(int __a, const unsigned int *__b) {
13835
return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
13836
vec_lvsl(__a, __b));
13837
}
13838
13839
static __inline__ vector unsigned int __ATTRS_o_ai
13840
vec_lvlx(int __a, const vector unsigned int *__b) {
13841
return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
13842
vec_lvsl(__a, (unsigned char *)__b));
13843
}
13844
13845
static __inline__ vector bool int __ATTRS_o_ai
13846
vec_lvlx(int __a, const vector bool int *__b) {
13847
return vec_perm(vec_ld(__a, __b), (vector bool int)(0),
13848
vec_lvsl(__a, (unsigned char *)__b));
13849
}
13850
13851
static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
13852
const float *__b) {
13853
return vec_perm(vec_ld(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
13854
}
13855
13856
static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
13857
const vector float *__b) {
13858
return vec_perm(vec_ld(__a, __b), (vector float)(0),
13859
vec_lvsl(__a, (unsigned char *)__b));
13860
}
13861
13862
/* vec_lvlxl */
13863
13864
static __inline__ vector signed char __ATTRS_o_ai
13865
vec_lvlxl(int __a, const signed char *__b) {
13866
return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
13867
vec_lvsl(__a, __b));
13868
}
13869
13870
static __inline__ vector signed char __ATTRS_o_ai
13871
vec_lvlxl(int __a, const vector signed char *__b) {
13872
return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
13873
vec_lvsl(__a, (unsigned char *)__b));
13874
}
13875
13876
static __inline__ vector unsigned char __ATTRS_o_ai
13877
vec_lvlxl(int __a, const unsigned char *__b) {
13878
return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
13879
vec_lvsl(__a, __b));
13880
}
13881
13882
static __inline__ vector unsigned char __ATTRS_o_ai
13883
vec_lvlxl(int __a, const vector unsigned char *__b) {
13884
return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
13885
vec_lvsl(__a, (unsigned char *)__b));
13886
}
13887
13888
static __inline__ vector bool char __ATTRS_o_ai
13889
vec_lvlxl(int __a, const vector bool char *__b) {
13890
return vec_perm(vec_ldl(__a, __b), (vector bool char)(0),
13891
vec_lvsl(__a, (unsigned char *)__b));
13892
}
13893
13894
static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
13895
const short *__b) {
13896
return vec_perm(vec_ldl(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
13897
}
13898
13899
static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
13900
const vector short *__b) {
13901
return vec_perm(vec_ldl(__a, __b), (vector short)(0),
13902
vec_lvsl(__a, (unsigned char *)__b));
13903
}
13904
13905
static __inline__ vector unsigned short __ATTRS_o_ai
13906
vec_lvlxl(int __a, const unsigned short *__b) {
13907
return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
13908
vec_lvsl(__a, __b));
13909
}
13910
13911
static __inline__ vector unsigned short __ATTRS_o_ai
13912
vec_lvlxl(int __a, const vector unsigned short *__b) {
13913
return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
13914
vec_lvsl(__a, (unsigned char *)__b));
13915
}
13916
13917
static __inline__ vector bool short __ATTRS_o_ai
13918
vec_lvlxl(int __a, const vector bool short *__b) {
13919
return vec_perm(vec_ldl(__a, __b), (vector bool short)(0),
13920
vec_lvsl(__a, (unsigned char *)__b));
13921
}
13922
13923
static __inline__ vector pixel __ATTRS_o_ai vec_lvlxl(int __a,
13924
const vector pixel *__b) {
13925
return vec_perm(vec_ldl(__a, __b), (vector pixel)(0),
13926
vec_lvsl(__a, (unsigned char *)__b));
13927
}
13928
13929
static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a, const int *__b) {
13930
return vec_perm(vec_ldl(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
13931
}
13932
13933
static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a,
13934
const vector int *__b) {
13935
return vec_perm(vec_ldl(__a, __b), (vector int)(0),
13936
vec_lvsl(__a, (unsigned char *)__b));
13937
}
13938
13939
static __inline__ vector unsigned int __ATTRS_o_ai
13940
vec_lvlxl(int __a, const unsigned int *__b) {
13941
return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
13942
vec_lvsl(__a, __b));
13943
}
13944
13945
static __inline__ vector unsigned int __ATTRS_o_ai
13946
vec_lvlxl(int __a, const vector unsigned int *__b) {
13947
return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
13948
vec_lvsl(__a, (unsigned char *)__b));
13949
}
13950
13951
static __inline__ vector bool int __ATTRS_o_ai
13952
vec_lvlxl(int __a, const vector bool int *__b) {
13953
return vec_perm(vec_ldl(__a, __b), (vector bool int)(0),
13954
vec_lvsl(__a, (unsigned char *)__b));
13955
}
13956
13957
static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
13958
const float *__b) {
13959
return vec_perm(vec_ldl(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
13960
}
13961
13962
static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
13963
vector float *__b) {
13964
return vec_perm(vec_ldl(__a, __b), (vector float)(0),
13965
vec_lvsl(__a, (unsigned char *)__b));
13966
}
13967
13968
/* vec_lvrx */
13969
13970
static __inline__ vector signed char __ATTRS_o_ai
13971
vec_lvrx(int __a, const signed char *__b) {
13972
return vec_perm((vector signed char)(0), vec_ld(__a, __b),
13973
vec_lvsl(__a, __b));
13974
}
13975
13976
static __inline__ vector signed char __ATTRS_o_ai
13977
vec_lvrx(int __a, const vector signed char *__b) {
13978
return vec_perm((vector signed char)(0), vec_ld(__a, __b),
13979
vec_lvsl(__a, (unsigned char *)__b));
13980
}
13981
13982
static __inline__ vector unsigned char __ATTRS_o_ai
13983
vec_lvrx(int __a, const unsigned char *__b) {
13984
return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
13985
vec_lvsl(__a, __b));
13986
}
13987
13988
static __inline__ vector unsigned char __ATTRS_o_ai
13989
vec_lvrx(int __a, const vector unsigned char *__b) {
13990
return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
13991
vec_lvsl(__a, (unsigned char *)__b));
13992
}
13993
13994
static __inline__ vector bool char __ATTRS_o_ai
13995
vec_lvrx(int __a, const vector bool char *__b) {
13996
return vec_perm((vector bool char)(0), vec_ld(__a, __b),
13997
vec_lvsl(__a, (unsigned char *)__b));
13998
}
13999
14000
static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
14001
const short *__b) {
14002
return vec_perm((vector short)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
14003
}
14004
14005
static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
14006
const vector short *__b) {
14007
return vec_perm((vector short)(0), vec_ld(__a, __b),
14008
vec_lvsl(__a, (unsigned char *)__b));
14009
}
14010
14011
static __inline__ vector unsigned short __ATTRS_o_ai
14012
vec_lvrx(int __a, const unsigned short *__b) {
14013
return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
14014
vec_lvsl(__a, __b));
14015
}
14016
14017
static __inline__ vector unsigned short __ATTRS_o_ai
14018
vec_lvrx(int __a, const vector unsigned short *__b) {
14019
return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
14020
vec_lvsl(__a, (unsigned char *)__b));
14021
}
14022
14023
static __inline__ vector bool short __ATTRS_o_ai
14024
vec_lvrx(int __a, const vector bool short *__b) {
14025
return vec_perm((vector bool short)(0), vec_ld(__a, __b),
14026
vec_lvsl(__a, (unsigned char *)__b));
14027
}
14028
14029
static __inline__ vector pixel __ATTRS_o_ai vec_lvrx(int __a,
14030
const vector pixel *__b) {
14031
return vec_perm((vector pixel)(0), vec_ld(__a, __b),
14032
vec_lvsl(__a, (unsigned char *)__b));
14033
}
14034
14035
static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a, const int *__b) {
14036
return vec_perm((vector int)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
14037
}
14038
14039
static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a,
14040
const vector int *__b) {
14041
return vec_perm((vector int)(0), vec_ld(__a, __b),
14042
vec_lvsl(__a, (unsigned char *)__b));
14043
}
14044
14045
static __inline__ vector unsigned int __ATTRS_o_ai
14046
vec_lvrx(int __a, const unsigned int *__b) {
14047
return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
14048
vec_lvsl(__a, __b));
14049
}
14050
14051
static __inline__ vector unsigned int __ATTRS_o_ai
14052
vec_lvrx(int __a, const vector unsigned int *__b) {
14053
return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
14054
vec_lvsl(__a, (unsigned char *)__b));
14055
}
14056
14057
static __inline__ vector bool int __ATTRS_o_ai
14058
vec_lvrx(int __a, const vector bool int *__b) {
14059
return vec_perm((vector bool int)(0), vec_ld(__a, __b),
14060
vec_lvsl(__a, (unsigned char *)__b));
14061
}
14062
14063
static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
14064
const float *__b) {
14065
return vec_perm((vector float)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
14066
}
14067
14068
static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
14069
const vector float *__b) {
14070
return vec_perm((vector float)(0), vec_ld(__a, __b),
14071
vec_lvsl(__a, (unsigned char *)__b));
14072
}
14073
14074
/* vec_lvrxl */
14075
14076
static __inline__ vector signed char __ATTRS_o_ai
14077
vec_lvrxl(int __a, const signed char *__b) {
14078
return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
14079
vec_lvsl(__a, __b));
14080
}
14081
14082
static __inline__ vector signed char __ATTRS_o_ai
14083
vec_lvrxl(int __a, const vector signed char *__b) {
14084
return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
14085
vec_lvsl(__a, (unsigned char *)__b));
14086
}
14087
14088
static __inline__ vector unsigned char __ATTRS_o_ai
14089
vec_lvrxl(int __a, const unsigned char *__b) {
14090
return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
14091
vec_lvsl(__a, __b));
14092
}
14093
14094
static __inline__ vector unsigned char __ATTRS_o_ai
14095
vec_lvrxl(int __a, const vector unsigned char *__b) {
14096
return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
14097
vec_lvsl(__a, (unsigned char *)__b));
14098
}
14099
14100
static __inline__ vector bool char __ATTRS_o_ai
14101
vec_lvrxl(int __a, const vector bool char *__b) {
14102
return vec_perm((vector bool char)(0), vec_ldl(__a, __b),
14103
vec_lvsl(__a, (unsigned char *)__b));
14104
}
14105
14106
static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
14107
const short *__b) {
14108
return vec_perm((vector short)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
14109
}
14110
14111
static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
14112
const vector short *__b) {
14113
return vec_perm((vector short)(0), vec_ldl(__a, __b),
14114
vec_lvsl(__a, (unsigned char *)__b));
14115
}
14116
14117
static __inline__ vector unsigned short __ATTRS_o_ai
14118
vec_lvrxl(int __a, const unsigned short *__b) {
14119
return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
14120
vec_lvsl(__a, __b));
14121
}
14122
14123
static __inline__ vector unsigned short __ATTRS_o_ai
14124
vec_lvrxl(int __a, const vector unsigned short *__b) {
14125
return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
14126
vec_lvsl(__a, (unsigned char *)__b));
14127
}
14128
14129
static __inline__ vector bool short __ATTRS_o_ai
14130
vec_lvrxl(int __a, const vector bool short *__b) {
14131
return vec_perm((vector bool short)(0), vec_ldl(__a, __b),
14132
vec_lvsl(__a, (unsigned char *)__b));
14133
}
14134
14135
static __inline__ vector pixel __ATTRS_o_ai vec_lvrxl(int __a,
14136
const vector pixel *__b) {
14137
return vec_perm((vector pixel)(0), vec_ldl(__a, __b),
14138
vec_lvsl(__a, (unsigned char *)__b));
14139
}
14140
14141
static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a, const int *__b) {
14142
return vec_perm((vector int)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
14143
}
14144
14145
static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a,
14146
const vector int *__b) {
14147
return vec_perm((vector int)(0), vec_ldl(__a, __b),
14148
vec_lvsl(__a, (unsigned char *)__b));
14149
}
14150
14151
static __inline__ vector unsigned int __ATTRS_o_ai
14152
vec_lvrxl(int __a, const unsigned int *__b) {
14153
return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
14154
vec_lvsl(__a, __b));
14155
}
14156
14157
static __inline__ vector unsigned int __ATTRS_o_ai
14158
vec_lvrxl(int __a, const vector unsigned int *__b) {
14159
return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
14160
vec_lvsl(__a, (unsigned char *)__b));
14161
}
14162
14163
static __inline__ vector bool int __ATTRS_o_ai
14164
vec_lvrxl(int __a, const vector bool int *__b) {
14165
return vec_perm((vector bool int)(0), vec_ldl(__a, __b),
14166
vec_lvsl(__a, (unsigned char *)__b));
14167
}
14168
14169
static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
14170
const float *__b) {
14171
return vec_perm((vector float)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
14172
}
14173
14174
static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
14175
const vector float *__b) {
14176
return vec_perm((vector float)(0), vec_ldl(__a, __b),
14177
vec_lvsl(__a, (unsigned char *)__b));
14178
}
14179
14180
/* vec_stvlx */
14181
14182
static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
14183
signed char *__c) {
14184
return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14185
__c);
14186
}
14187
14188
static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
14189
vector signed char *__c) {
14190
return vec_st(
14191
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14192
__b, __c);
14193
}
14194
14195
static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
14196
unsigned char *__c) {
14197
return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14198
__c);
14199
}
14200
14201
static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
14202
vector unsigned char *__c) {
14203
return vec_st(
14204
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14205
__b, __c);
14206
}
14207
14208
static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool char __a, int __b,
14209
vector bool char *__c) {
14210
return vec_st(
14211
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14212
__b, __c);
14213
}
14214
14215
static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
14216
short *__c) {
14217
return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14218
__c);
14219
}
14220
14221
static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
14222
vector short *__c) {
14223
return vec_st(
14224
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14225
__b, __c);
14226
}
14227
14228
static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
14229
int __b, unsigned short *__c) {
14230
return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14231
__c);
14232
}
14233
14234
static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
14235
int __b,
14236
vector unsigned short *__c) {
14237
return vec_st(
14238
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14239
__b, __c);
14240
}
14241
14242
static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool short __a, int __b,
14243
vector bool short *__c) {
14244
return vec_st(
14245
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14246
__b, __c);
14247
}
14248
14249
static __inline__ void __ATTRS_o_ai vec_stvlx(vector pixel __a, int __b,
14250
vector pixel *__c) {
14251
return vec_st(
14252
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14253
__b, __c);
14254
}
14255
14256
static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
14257
int *__c) {
14258
return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14259
__c);
14260
}
14261
14262
static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
14263
vector int *__c) {
14264
return vec_st(
14265
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14266
__b, __c);
14267
}
14268
14269
static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
14270
unsigned int *__c) {
14271
return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14272
__c);
14273
}
14274
14275
static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
14276
vector unsigned int *__c) {
14277
return vec_st(
14278
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14279
__b, __c);
14280
}
14281
14282
static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool int __a, int __b,
14283
vector bool int *__c) {
14284
return vec_st(
14285
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14286
__b, __c);
14287
}
14288
14289
static __inline__ void __ATTRS_o_ai vec_stvlx(vector float __a, int __b,
14290
vector float *__c) {
14291
return vec_st(
14292
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14293
__b, __c);
14294
}
14295
14296
/* vec_stvlxl */
14297
14298
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
14299
signed char *__c) {
14300
return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14301
__c);
14302
}
14303
14304
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
14305
vector signed char *__c) {
14306
return vec_stl(
14307
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14308
__b, __c);
14309
}
14310
14311
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
14312
int __b, unsigned char *__c) {
14313
return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14314
__c);
14315
}
14316
14317
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
14318
int __b,
14319
vector unsigned char *__c) {
14320
return vec_stl(
14321
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14322
__b, __c);
14323
}
14324
14325
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool char __a, int __b,
14326
vector bool char *__c) {
14327
return vec_stl(
14328
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14329
__b, __c);
14330
}
14331
14332
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
14333
short *__c) {
14334
return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14335
__c);
14336
}
14337
14338
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
14339
vector short *__c) {
14340
return vec_stl(
14341
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14342
__b, __c);
14343
}
14344
14345
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
14346
int __b, unsigned short *__c) {
14347
return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14348
__c);
14349
}
14350
14351
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
14352
int __b,
14353
vector unsigned short *__c) {
14354
return vec_stl(
14355
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14356
__b, __c);
14357
}
14358
14359
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool short __a, int __b,
14360
vector bool short *__c) {
14361
return vec_stl(
14362
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14363
__b, __c);
14364
}
14365
14366
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector pixel __a, int __b,
14367
vector pixel *__c) {
14368
return vec_stl(
14369
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14370
__b, __c);
14371
}
14372
14373
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
14374
int *__c) {
14375
return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14376
__c);
14377
}
14378
14379
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
14380
vector int *__c) {
14381
return vec_stl(
14382
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14383
__b, __c);
14384
}
14385
14386
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
14387
unsigned int *__c) {
14388
return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14389
__c);
14390
}
14391
14392
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
14393
vector unsigned int *__c) {
14394
return vec_stl(
14395
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14396
__b, __c);
14397
}
14398
14399
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool int __a, int __b,
14400
vector bool int *__c) {
14401
return vec_stl(
14402
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14403
__b, __c);
14404
}
14405
14406
static __inline__ void __ATTRS_o_ai vec_stvlxl(vector float __a, int __b,
14407
vector float *__c) {
14408
return vec_stl(
14409
vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14410
__b, __c);
14411
}
14412
14413
/* vec_stvrx */
14414
14415
static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
14416
signed char *__c) {
14417
return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14418
__c);
14419
}
14420
14421
static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
14422
vector signed char *__c) {
14423
return vec_st(
14424
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14425
__b, __c);
14426
}
14427
14428
static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
14429
unsigned char *__c) {
14430
return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14431
__c);
14432
}
14433
14434
static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
14435
vector unsigned char *__c) {
14436
return vec_st(
14437
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14438
__b, __c);
14439
}
14440
14441
static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool char __a, int __b,
14442
vector bool char *__c) {
14443
return vec_st(
14444
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14445
__b, __c);
14446
}
14447
14448
static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
14449
short *__c) {
14450
return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14451
__c);
14452
}
14453
14454
static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
14455
vector short *__c) {
14456
return vec_st(
14457
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14458
__b, __c);
14459
}
14460
14461
static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
14462
int __b, unsigned short *__c) {
14463
return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14464
__c);
14465
}
14466
14467
static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
14468
int __b,
14469
vector unsigned short *__c) {
14470
return vec_st(
14471
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14472
__b, __c);
14473
}
14474
14475
static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool short __a, int __b,
14476
vector bool short *__c) {
14477
return vec_st(
14478
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14479
__b, __c);
14480
}
14481
14482
static __inline__ void __ATTRS_o_ai vec_stvrx(vector pixel __a, int __b,
14483
vector pixel *__c) {
14484
return vec_st(
14485
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14486
__b, __c);
14487
}
14488
14489
static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
14490
int *__c) {
14491
return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14492
__c);
14493
}
14494
14495
static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
14496
vector int *__c) {
14497
return vec_st(
14498
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14499
__b, __c);
14500
}
14501
14502
static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
14503
unsigned int *__c) {
14504
return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14505
__c);
14506
}
14507
14508
static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
14509
vector unsigned int *__c) {
14510
return vec_st(
14511
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14512
__b, __c);
14513
}
14514
14515
static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool int __a, int __b,
14516
vector bool int *__c) {
14517
return vec_st(
14518
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14519
__b, __c);
14520
}
14521
14522
static __inline__ void __ATTRS_o_ai vec_stvrx(vector float __a, int __b,
14523
vector float *__c) {
14524
return vec_st(
14525
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14526
__b, __c);
14527
}
14528
14529
/* vec_stvrxl */
14530
14531
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
14532
signed char *__c) {
14533
return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14534
__c);
14535
}
14536
14537
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
14538
vector signed char *__c) {
14539
return vec_stl(
14540
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14541
__b, __c);
14542
}
14543
14544
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
14545
int __b, unsigned char *__c) {
14546
return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14547
__c);
14548
}
14549
14550
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
14551
int __b,
14552
vector unsigned char *__c) {
14553
return vec_stl(
14554
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14555
__b, __c);
14556
}
14557
14558
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool char __a, int __b,
14559
vector bool char *__c) {
14560
return vec_stl(
14561
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14562
__b, __c);
14563
}
14564
14565
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
14566
short *__c) {
14567
return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14568
__c);
14569
}
14570
14571
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
14572
vector short *__c) {
14573
return vec_stl(
14574
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14575
__b, __c);
14576
}
14577
14578
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
14579
int __b, unsigned short *__c) {
14580
return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14581
__c);
14582
}
14583
14584
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
14585
int __b,
14586
vector unsigned short *__c) {
14587
return vec_stl(
14588
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14589
__b, __c);
14590
}
14591
14592
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool short __a, int __b,
14593
vector bool short *__c) {
14594
return vec_stl(
14595
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14596
__b, __c);
14597
}
14598
14599
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector pixel __a, int __b,
14600
vector pixel *__c) {
14601
return vec_stl(
14602
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14603
__b, __c);
14604
}
14605
14606
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
14607
int *__c) {
14608
return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14609
__c);
14610
}
14611
14612
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
14613
vector int *__c) {
14614
return vec_stl(
14615
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14616
__b, __c);
14617
}
14618
14619
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
14620
unsigned int *__c) {
14621
return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14622
__c);
14623
}
14624
14625
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
14626
vector unsigned int *__c) {
14627
return vec_stl(
14628
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14629
__b, __c);
14630
}
14631
14632
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool int __a, int __b,
14633
vector bool int *__c) {
14634
return vec_stl(
14635
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14636
__b, __c);
14637
}
14638
14639
static __inline__ void __ATTRS_o_ai vec_stvrxl(vector float __a, int __b,
14640
vector float *__c) {
14641
return vec_stl(
14642
vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14643
__b, __c);
14644
}
14645
14646
/* vec_promote */
14647
14648
static __inline__ vector signed char __ATTRS_o_ai vec_promote(signed char __a,
14649
int __b) {
14650
const vector signed char __zero = (vector signed char)0;
14651
vector signed char __res =
14652
__builtin_shufflevector(__zero, __zero, -1, -1, -1, -1, -1, -1, -1, -1,
14653
-1, -1, -1, -1, -1, -1, -1, -1);
14654
__res[__b & 0xf] = __a;
14655
return __res;
14656
}
14657
14658
static __inline__ vector unsigned char __ATTRS_o_ai
14659
vec_promote(unsigned char __a, int __b) {
14660
const vector unsigned char __zero = (vector unsigned char)(0);
14661
vector unsigned char __res =
14662
__builtin_shufflevector(__zero, __zero, -1, -1, -1, -1, -1, -1, -1, -1,
14663
-1, -1, -1, -1, -1, -1, -1, -1);
14664
__res[__b & 0xf] = __a;
14665
return __res;
14666
}
14667
14668
static __inline__ vector short __ATTRS_o_ai vec_promote(short __a, int __b) {
14669
const vector short __zero = (vector short)(0);
14670
vector short __res =
14671
__builtin_shufflevector(__zero, __zero, -1, -1, -1, -1, -1, -1, -1, -1);
14672
__res[__b & 0x7] = __a;
14673
return __res;
14674
}
14675
14676
static __inline__ vector unsigned short __ATTRS_o_ai
14677
vec_promote(unsigned short __a, int __b) {
14678
const vector unsigned short __zero = (vector unsigned short)(0);
14679
vector unsigned short __res =
14680
__builtin_shufflevector(__zero, __zero, -1, -1, -1, -1, -1, -1, -1, -1);
14681
__res[__b & 0x7] = __a;
14682
return __res;
14683
}
14684
14685
static __inline__ vector int __ATTRS_o_ai vec_promote(int __a, int __b) {
14686
const vector int __zero = (vector int)(0);
14687
vector int __res = __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1);
14688
__res[__b & 0x3] = __a;
14689
return __res;
14690
}
14691
14692
static __inline__ vector unsigned int __ATTRS_o_ai vec_promote(unsigned int __a,
14693
int __b) {
14694
const vector unsigned int __zero = (vector unsigned int)(0);
14695
vector unsigned int __res =
14696
__builtin_shufflevector(__zero, __zero, -1, -1, -1, -1);
14697
__res[__b & 0x3] = __a;
14698
return __res;
14699
}
14700
14701
static __inline__ vector float __ATTRS_o_ai vec_promote(float __a, int __b) {
14702
const vector float __zero = (vector float)(0);
14703
vector float __res = __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1);
14704
__res[__b & 0x3] = __a;
14705
return __res;
14706
}
14707
14708
#ifdef __VSX__
14709
static __inline__ vector double __ATTRS_o_ai vec_promote(double __a, int __b) {
14710
const vector double __zero = (vector double)(0);
14711
vector double __res = __builtin_shufflevector(__zero, __zero, -1, -1);
14712
__res[__b & 0x1] = __a;
14713
return __res;
14714
}
14715
14716
static __inline__ vector signed long long __ATTRS_o_ai
14717
vec_promote(signed long long __a, int __b) {
14718
const vector signed long long __zero = (vector signed long long)(0);
14719
vector signed long long __res =
14720
__builtin_shufflevector(__zero, __zero, -1, -1);
14721
__res[__b & 0x1] = __a;
14722
return __res;
14723
}
14724
14725
static __inline__ vector unsigned long long __ATTRS_o_ai
14726
vec_promote(unsigned long long __a, int __b) {
14727
const vector unsigned long long __zero = (vector unsigned long long)(0);
14728
vector unsigned long long __res =
14729
__builtin_shufflevector(__zero, __zero, -1, -1);
14730
__res[__b & 0x1] = __a;
14731
return __res;
14732
}
14733
#endif
14734
14735
/* vec_splats */
14736
14737
static __inline__ vector signed char __ATTRS_o_ai vec_splats(signed char __a) {
14738
return (vector signed char)(__a);
14739
}
14740
14741
static __inline__ vector unsigned char __ATTRS_o_ai
14742
vec_splats(unsigned char __a) {
14743
return (vector unsigned char)(__a);
14744
}
14745
14746
static __inline__ vector short __ATTRS_o_ai vec_splats(short __a) {
14747
return (vector short)(__a);
14748
}
14749
14750
static __inline__ vector unsigned short __ATTRS_o_ai
14751
vec_splats(unsigned short __a) {
14752
return (vector unsigned short)(__a);
14753
}
14754
14755
static __inline__ vector int __ATTRS_o_ai vec_splats(int __a) {
14756
return (vector int)(__a);
14757
}
14758
14759
static __inline__ vector unsigned int __ATTRS_o_ai
14760
vec_splats(unsigned int __a) {
14761
return (vector unsigned int)(__a);
14762
}
14763
14764
#ifdef __VSX__
14765
static __inline__ vector signed long long __ATTRS_o_ai
14766
vec_splats(signed long long __a) {
14767
return (vector signed long long)(__a);
14768
}
14769
14770
static __inline__ vector unsigned long long __ATTRS_o_ai
14771
vec_splats(unsigned long long __a) {
14772
return (vector unsigned long long)(__a);
14773
}
14774
14775
#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
14776
defined(__SIZEOF_INT128__)
14777
static __inline__ vector signed __int128 __ATTRS_o_ai
14778
vec_splats(signed __int128 __a) {
14779
return (vector signed __int128)(__a);
14780
}
14781
14782
static __inline__ vector unsigned __int128 __ATTRS_o_ai
14783
vec_splats(unsigned __int128 __a) {
14784
return (vector unsigned __int128)(__a);
14785
}
14786
14787
#endif
14788
14789
static __inline__ vector double __ATTRS_o_ai vec_splats(double __a) {
14790
return (vector double)(__a);
14791
}
14792
#endif
14793
14794
static __inline__ vector float __ATTRS_o_ai vec_splats(float __a) {
14795
return (vector float)(__a);
14796
}
14797
14798
/* ----------------------------- predicates --------------------------------- */
14799
14800
/* vec_all_eq */
14801
14802
static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
14803
vector signed char __b) {
14804
return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14805
(vector char)__b);
14806
}
14807
14808
static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
14809
vector bool char __b) {
14810
return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14811
(vector char)__b);
14812
}
14813
14814
static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
14815
vector unsigned char __b) {
14816
return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14817
(vector char)__b);
14818
}
14819
14820
static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
14821
vector bool char __b) {
14822
return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14823
(vector char)__b);
14824
}
14825
14826
static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
14827
vector signed char __b) {
14828
return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14829
(vector char)__b);
14830
}
14831
14832
static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
14833
vector unsigned char __b) {
14834
return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14835
(vector char)__b);
14836
}
14837
14838
static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
14839
vector bool char __b) {
14840
return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14841
(vector char)__b);
14842
}
14843
14844
static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
14845
vector short __b) {
14846
return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, __b);
14847
}
14848
14849
static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
14850
vector bool short __b) {
14851
return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, (vector short)__b);
14852
}
14853
14854
static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
14855
vector unsigned short __b) {
14856
return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14857
(vector short)__b);
14858
}
14859
14860
static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
14861
vector bool short __b) {
14862
return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14863
(vector short)__b);
14864
}
14865
14866
static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
14867
vector short __b) {
14868
return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14869
(vector short)__b);
14870
}
14871
14872
static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
14873
vector unsigned short __b) {
14874
return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14875
(vector short)__b);
14876
}
14877
14878
static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
14879
vector bool short __b) {
14880
return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14881
(vector short)__b);
14882
}
14883
14884
static __inline__ int __ATTRS_o_ai vec_all_eq(vector pixel __a,
14885
vector pixel __b) {
14886
return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14887
(vector short)__b);
14888
}
14889
14890
static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a, vector int __b) {
14891
return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, __b);
14892
}
14893
14894
static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a,
14895
vector bool int __b) {
14896
return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, (vector int)__b);
14897
}
14898
14899
static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
14900
vector unsigned int __b) {
14901
return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14902
(vector int)__b);
14903
}
14904
14905
static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
14906
vector bool int __b) {
14907
return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14908
(vector int)__b);
14909
}
14910
14911
static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
14912
vector int __b) {
14913
return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14914
(vector int)__b);
14915
}
14916
14917
static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
14918
vector unsigned int __b) {
14919
return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14920
(vector int)__b);
14921
}
14922
14923
static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
14924
vector bool int __b) {
14925
return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14926
(vector int)__b);
14927
}
14928
14929
#ifdef __VSX__
14930
static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed long long __a,
14931
vector signed long long __b) {
14932
#ifdef __POWER8_VECTOR__
14933
return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, __b);
14934
#else
14935
// No vcmpequd on Power7 so we xor the two vectors and compare against zero as
14936
// 32-bit elements.
14937
return vec_all_eq((vector signed int)vec_xor(__a, __b), (vector signed int)0);
14938
#endif
14939
}
14940
14941
static __inline__ int __ATTRS_o_ai vec_all_eq(vector long long __a,
14942
vector bool long long __b) {
14943
return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
14944
}
14945
14946
static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
14947
vector unsigned long long __b) {
14948
return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
14949
}
14950
14951
static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
14952
vector bool long long __b) {
14953
return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
14954
}
14955
14956
static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
14957
vector long long __b) {
14958
return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
14959
}
14960
14961
static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
14962
vector unsigned long long __b) {
14963
return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
14964
}
14965
14966
static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
14967
vector bool long long __b) {
14968
return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
14969
}
14970
#endif
14971
14972
static __inline__ int __ATTRS_o_ai vec_all_eq(vector float __a,
14973
vector float __b) {
14974
#ifdef __VSX__
14975
return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __b);
14976
#else
14977
return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __b);
14978
#endif
14979
}
14980
14981
#ifdef __VSX__
14982
static __inline__ int __ATTRS_o_ai vec_all_eq(vector double __a,
14983
vector double __b) {
14984
return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __b);
14985
}
14986
#endif
14987
14988
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
14989
static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed __int128 __a,
14990
vector signed __int128 __b) {
14991
return __builtin_altivec_vcmpequq_p(__CR6_LT, (vector unsigned __int128)__a,
14992
(vector signed __int128)__b);
14993
}
14994
14995
static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned __int128 __a,
14996
vector unsigned __int128 __b) {
14997
return __builtin_altivec_vcmpequq_p(__CR6_LT, __a,
14998
(vector signed __int128)__b);
14999
}
15000
15001
static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool __int128 __a,
15002
vector bool __int128 __b) {
15003
return __builtin_altivec_vcmpequq_p(__CR6_LT, (vector unsigned __int128)__a,
15004
(vector signed __int128)__b);
15005
}
15006
#endif
15007
15008
/* vec_all_ge */
15009
15010
static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
15011
vector signed char __b) {
15012
return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, __a);
15013
}
15014
15015
static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
15016
vector bool char __b) {
15017
return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__b, __a);
15018
}
15019
15020
static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
15021
vector unsigned char __b) {
15022
return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, __a);
15023
}
15024
15025
static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
15026
vector bool char __b) {
15027
return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, __a);
15028
}
15029
15030
static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
15031
vector signed char __b) {
15032
return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, (vector signed char)__a);
15033
}
15034
15035
static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
15036
vector unsigned char __b) {
15037
return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, (vector unsigned char)__a);
15038
}
15039
15040
static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
15041
vector bool char __b) {
15042
return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b,
15043
(vector unsigned char)__a);
15044
}
15045
15046
static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
15047
vector short __b) {
15048
return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, __a);
15049
}
15050
15051
static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
15052
vector bool short __b) {
15053
return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector short)__b, __a);
15054
}
15055
15056
static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
15057
vector unsigned short __b) {
15058
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, __a);
15059
}
15060
15061
static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
15062
vector bool short __b) {
15063
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
15064
__a);
15065
}
15066
15067
static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
15068
vector short __b) {
15069
return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, (vector signed short)__a);
15070
}
15071
15072
static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
15073
vector unsigned short __b) {
15074
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b,
15075
(vector unsigned short)__a);
15076
}
15077
15078
static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
15079
vector bool short __b) {
15080
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
15081
(vector unsigned short)__a);
15082
}
15083
15084
static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a, vector int __b) {
15085
return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, __a);
15086
}
15087
15088
static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a,
15089
vector bool int __b) {
15090
return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector int)__b, __a);
15091
}
15092
15093
static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
15094
vector unsigned int __b) {
15095
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, __a);
15096
}
15097
15098
static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
15099
vector bool int __b) {
15100
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, __a);
15101
}
15102
15103
static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
15104
vector int __b) {
15105
return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, (vector signed int)__a);
15106
}
15107
15108
static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
15109
vector unsigned int __b) {
15110
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, (vector unsigned int)__a);
15111
}
15112
15113
static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
15114
vector bool int __b) {
15115
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b,
15116
(vector unsigned int)__a);
15117
}
15118
15119
#ifdef __VSX__
15120
static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
15121
vector signed long long __b) {
15122
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b, __a);
15123
}
15124
static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
15125
vector bool long long __b) {
15126
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__b,
15127
__a);
15128
}
15129
15130
static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
15131
vector unsigned long long __b) {
15132
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b, __a);
15133
}
15134
15135
static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
15136
vector bool long long __b) {
15137
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
15138
__a);
15139
}
15140
15141
static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
15142
vector signed long long __b) {
15143
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b,
15144
(vector signed long long)__a);
15145
}
15146
15147
static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
15148
vector unsigned long long __b) {
15149
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b,
15150
(vector unsigned long long)__a);
15151
}
15152
15153
static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
15154
vector bool long long __b) {
15155
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
15156
(vector unsigned long long)__a);
15157
}
15158
#endif
15159
15160
static __inline__ int __ATTRS_o_ai vec_all_ge(vector float __a,
15161
vector float __b) {
15162
#ifdef __VSX__
15163
return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __a, __b);
15164
#else
15165
return __builtin_altivec_vcmpgefp_p(__CR6_LT, __a, __b);
15166
#endif
15167
}
15168
15169
#ifdef __VSX__
15170
static __inline__ int __ATTRS_o_ai vec_all_ge(vector double __a,
15171
vector double __b) {
15172
return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __a, __b);
15173
}
15174
#endif
15175
15176
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15177
static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed __int128 __a,
15178
vector signed __int128 __b) {
15179
return __builtin_altivec_vcmpgtsq_p(__CR6_EQ, __b, __a);
15180
}
15181
15182
static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned __int128 __a,
15183
vector unsigned __int128 __b) {
15184
return __builtin_altivec_vcmpgtuq_p(__CR6_EQ, __b, __a);
15185
}
15186
#endif
15187
15188
/* vec_all_gt */
15189
15190
static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
15191
vector signed char __b) {
15192
return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, __b);
15193
}
15194
15195
static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
15196
vector bool char __b) {
15197
return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, (vector signed char)__b);
15198
}
15199
15200
static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
15201
vector unsigned char __b) {
15202
return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, __b);
15203
}
15204
15205
static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
15206
vector bool char __b) {
15207
return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, (vector unsigned char)__b);
15208
}
15209
15210
static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
15211
vector signed char __b) {
15212
return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__a, __b);
15213
}
15214
15215
static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
15216
vector unsigned char __b) {
15217
return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, __b);
15218
}
15219
15220
static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
15221
vector bool char __b) {
15222
return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a,
15223
(vector unsigned char)__b);
15224
}
15225
15226
static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
15227
vector short __b) {
15228
return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, __b);
15229
}
15230
15231
static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
15232
vector bool short __b) {
15233
return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, (vector short)__b);
15234
}
15235
15236
static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
15237
vector unsigned short __b) {
15238
return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, __b);
15239
}
15240
15241
static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
15242
vector bool short __b) {
15243
return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a,
15244
(vector unsigned short)__b);
15245
}
15246
15247
static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
15248
vector short __b) {
15249
return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector signed short)__a, __b);
15250
}
15251
15252
static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
15253
vector unsigned short __b) {
15254
return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
15255
__b);
15256
}
15257
15258
static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
15259
vector bool short __b) {
15260
return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
15261
(vector unsigned short)__b);
15262
}
15263
15264
static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a, vector int __b) {
15265
return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, __b);
15266
}
15267
15268
static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a,
15269
vector bool int __b) {
15270
return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, (vector int)__b);
15271
}
15272
15273
static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
15274
vector unsigned int __b) {
15275
return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, __b);
15276
}
15277
15278
static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
15279
vector bool int __b) {
15280
return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, (vector unsigned int)__b);
15281
}
15282
15283
static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
15284
vector int __b) {
15285
return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector signed int)__a, __b);
15286
}
15287
15288
static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
15289
vector unsigned int __b) {
15290
return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, __b);
15291
}
15292
15293
static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
15294
vector bool int __b) {
15295
return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a,
15296
(vector unsigned int)__b);
15297
}
15298
15299
#ifdef __VSX__
15300
static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
15301
vector signed long long __b) {
15302
return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a, __b);
15303
}
15304
static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
15305
vector bool long long __b) {
15306
return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a,
15307
(vector signed long long)__b);
15308
}
15309
15310
static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
15311
vector unsigned long long __b) {
15312
return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a, __b);
15313
}
15314
15315
static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
15316
vector bool long long __b) {
15317
return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a,
15318
(vector unsigned long long)__b);
15319
}
15320
15321
static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
15322
vector signed long long __b) {
15323
return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__a,
15324
__b);
15325
}
15326
15327
static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
15328
vector unsigned long long __b) {
15329
return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
15330
__b);
15331
}
15332
15333
static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
15334
vector bool long long __b) {
15335
return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
15336
(vector unsigned long long)__b);
15337
}
15338
#endif
15339
15340
static __inline__ int __ATTRS_o_ai vec_all_gt(vector float __a,
15341
vector float __b) {
15342
#ifdef __VSX__
15343
return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __a, __b);
15344
#else
15345
return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __a, __b);
15346
#endif
15347
}
15348
15349
#ifdef __VSX__
15350
static __inline__ int __ATTRS_o_ai vec_all_gt(vector double __a,
15351
vector double __b) {
15352
return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __a, __b);
15353
}
15354
#endif
15355
15356
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15357
static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed __int128 __a,
15358
vector signed __int128 __b) {
15359
return __builtin_altivec_vcmpgtsq_p(__CR6_LT, __a, __b);
15360
}
15361
15362
static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned __int128 __a,
15363
vector unsigned __int128 __b) {
15364
return __builtin_altivec_vcmpgtuq_p(__CR6_LT, __a, __b);
15365
}
15366
#endif
15367
15368
/* vec_all_in */
15369
15370
static __inline__ int __attribute__((__always_inline__))
15371
vec_all_in(vector float __a, vector float __b) {
15372
return __builtin_altivec_vcmpbfp_p(__CR6_EQ, __a, __b);
15373
}
15374
15375
/* vec_all_le */
15376
15377
static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
15378
vector signed char __b) {
15379
return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, __b);
15380
}
15381
15382
static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
15383
vector bool char __b) {
15384
return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, (vector signed char)__b);
15385
}
15386
15387
static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
15388
vector unsigned char __b) {
15389
return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, __b);
15390
}
15391
15392
static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
15393
vector bool char __b) {
15394
return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, (vector unsigned char)__b);
15395
}
15396
15397
static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
15398
vector signed char __b) {
15399
return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__a, __b);
15400
}
15401
15402
static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
15403
vector unsigned char __b) {
15404
return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, __b);
15405
}
15406
15407
static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
15408
vector bool char __b) {
15409
return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a,
15410
(vector unsigned char)__b);
15411
}
15412
15413
static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
15414
vector short __b) {
15415
return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, __b);
15416
}
15417
15418
static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
15419
vector bool short __b) {
15420
return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, (vector short)__b);
15421
}
15422
15423
static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
15424
vector unsigned short __b) {
15425
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, __b);
15426
}
15427
15428
static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
15429
vector bool short __b) {
15430
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a,
15431
(vector unsigned short)__b);
15432
}
15433
15434
static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
15435
vector short __b) {
15436
return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector signed short)__a, __b);
15437
}
15438
15439
static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
15440
vector unsigned short __b) {
15441
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
15442
__b);
15443
}
15444
15445
static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
15446
vector bool short __b) {
15447
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
15448
(vector unsigned short)__b);
15449
}
15450
15451
static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a, vector int __b) {
15452
return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, __b);
15453
}
15454
15455
static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a,
15456
vector bool int __b) {
15457
return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, (vector int)__b);
15458
}
15459
15460
static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
15461
vector unsigned int __b) {
15462
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, __b);
15463
}
15464
15465
static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
15466
vector bool int __b) {
15467
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, (vector unsigned int)__b);
15468
}
15469
15470
static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
15471
vector int __b) {
15472
return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector signed int)__a, __b);
15473
}
15474
15475
static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
15476
vector unsigned int __b) {
15477
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, __b);
15478
}
15479
15480
static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
15481
vector bool int __b) {
15482
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a,
15483
(vector unsigned int)__b);
15484
}
15485
15486
#ifdef __VSX__
15487
static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
15488
vector signed long long __b) {
15489
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a, __b);
15490
}
15491
15492
static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
15493
vector unsigned long long __b) {
15494
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a, __b);
15495
}
15496
15497
static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
15498
vector bool long long __b) {
15499
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a,
15500
(vector signed long long)__b);
15501
}
15502
15503
static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
15504
vector bool long long __b) {
15505
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a,
15506
(vector unsigned long long)__b);
15507
}
15508
15509
static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
15510
vector signed long long __b) {
15511
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__a,
15512
__b);
15513
}
15514
15515
static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
15516
vector unsigned long long __b) {
15517
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
15518
__b);
15519
}
15520
15521
static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
15522
vector bool long long __b) {
15523
return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
15524
(vector unsigned long long)__b);
15525
}
15526
#endif
15527
15528
static __inline__ int __ATTRS_o_ai vec_all_le(vector float __a,
15529
vector float __b) {
15530
#ifdef __VSX__
15531
return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __b, __a);
15532
#else
15533
return __builtin_altivec_vcmpgefp_p(__CR6_LT, __b, __a);
15534
#endif
15535
}
15536
15537
#ifdef __VSX__
15538
static __inline__ int __ATTRS_o_ai vec_all_le(vector double __a,
15539
vector double __b) {
15540
return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __b, __a);
15541
}
15542
#endif
15543
15544
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15545
static __inline__ int __ATTRS_o_ai vec_all_le(vector signed __int128 __a,
15546
vector signed __int128 __b) {
15547
return __builtin_altivec_vcmpgtsq_p(__CR6_EQ, __a, __b);
15548
}
15549
15550
static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned __int128 __a,
15551
vector unsigned __int128 __b) {
15552
return __builtin_altivec_vcmpgtuq_p(__CR6_EQ, __a, __b);
15553
}
15554
#endif
15555
15556
/* vec_all_lt */
15557
15558
static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
15559
vector signed char __b) {
15560
return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, __a);
15561
}
15562
15563
static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
15564
vector bool char __b) {
15565
return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__b, __a);
15566
}
15567
15568
static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
15569
vector unsigned char __b) {
15570
return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, __a);
15571
}
15572
15573
static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
15574
vector bool char __b) {
15575
return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, __a);
15576
}
15577
15578
static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
15579
vector signed char __b) {
15580
return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, (vector signed char)__a);
15581
}
15582
15583
static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
15584
vector unsigned char __b) {
15585
return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, (vector unsigned char)__a);
15586
}
15587
15588
static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
15589
vector bool char __b) {
15590
return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b,
15591
(vector unsigned char)__a);
15592
}
15593
15594
static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
15595
vector short __b) {
15596
return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, __a);
15597
}
15598
15599
static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
15600
vector bool short __b) {
15601
return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector short)__b, __a);
15602
}
15603
15604
static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
15605
vector unsigned short __b) {
15606
return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, __a);
15607
}
15608
15609
static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
15610
vector bool short __b) {
15611
return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
15612
__a);
15613
}
15614
15615
static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
15616
vector short __b) {
15617
return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, (vector signed short)__a);
15618
}
15619
15620
static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
15621
vector unsigned short __b) {
15622
return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b,
15623
(vector unsigned short)__a);
15624
}
15625
15626
static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
15627
vector bool short __b) {
15628
return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
15629
(vector unsigned short)__a);
15630
}
15631
15632
static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a, vector int __b) {
15633
return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, __a);
15634
}
15635
15636
static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a,
15637
vector bool int __b) {
15638
return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector int)__b, __a);
15639
}
15640
15641
static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
15642
vector unsigned int __b) {
15643
return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, __a);
15644
}
15645
15646
static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
15647
vector bool int __b) {
15648
return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, __a);
15649
}
15650
15651
static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
15652
vector int __b) {
15653
return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, (vector signed int)__a);
15654
}
15655
15656
static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
15657
vector unsigned int __b) {
15658
return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, (vector unsigned int)__a);
15659
}
15660
15661
static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
15662
vector bool int __b) {
15663
return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b,
15664
(vector unsigned int)__a);
15665
}
15666
15667
#ifdef __VSX__
15668
static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
15669
vector signed long long __b) {
15670
return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b, __a);
15671
}
15672
15673
static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
15674
vector unsigned long long __b) {
15675
return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b, __a);
15676
}
15677
15678
static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
15679
vector bool long long __b) {
15680
return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__b,
15681
__a);
15682
}
15683
15684
static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
15685
vector bool long long __b) {
15686
return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
15687
__a);
15688
}
15689
15690
static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
15691
vector signed long long __b) {
15692
return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b,
15693
(vector signed long long)__a);
15694
}
15695
15696
static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
15697
vector unsigned long long __b) {
15698
return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b,
15699
(vector unsigned long long)__a);
15700
}
15701
15702
static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
15703
vector bool long long __b) {
15704
return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
15705
(vector unsigned long long)__a);
15706
}
15707
#endif
15708
15709
static __inline__ int __ATTRS_o_ai vec_all_lt(vector float __a,
15710
vector float __b) {
15711
#ifdef __VSX__
15712
return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __b, __a);
15713
#else
15714
return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __b, __a);
15715
#endif
15716
}
15717
15718
#ifdef __VSX__
15719
static __inline__ int __ATTRS_o_ai vec_all_lt(vector double __a,
15720
vector double __b) {
15721
return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __b, __a);
15722
}
15723
#endif
15724
15725
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15726
static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed __int128 __a,
15727
vector signed __int128 __b) {
15728
return __builtin_altivec_vcmpgtsq_p(__CR6_LT, __b, __a);
15729
}
15730
15731
static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned __int128 __a,
15732
vector unsigned __int128 __b) {
15733
return __builtin_altivec_vcmpgtuq_p(__CR6_LT, __b, __a);
15734
}
15735
#endif
15736
15737
/* vec_all_nan */
15738
15739
static __inline__ int __ATTRS_o_ai vec_all_nan(vector float __a) {
15740
#ifdef __VSX__
15741
return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __a);
15742
#else
15743
return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __a);
15744
#endif
15745
}
15746
15747
#ifdef __VSX__
15748
static __inline__ int __ATTRS_o_ai vec_all_nan(vector double __a) {
15749
return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __a);
15750
}
15751
#endif
15752
15753
/* vec_all_ne */
15754
15755
static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
15756
vector signed char __b) {
15757
return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15758
(vector char)__b);
15759
}
15760
15761
static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
15762
vector bool char __b) {
15763
return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15764
(vector char)__b);
15765
}
15766
15767
static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
15768
vector unsigned char __b) {
15769
return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15770
(vector char)__b);
15771
}
15772
15773
static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
15774
vector bool char __b) {
15775
return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15776
(vector char)__b);
15777
}
15778
15779
static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
15780
vector signed char __b) {
15781
return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15782
(vector char)__b);
15783
}
15784
15785
static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
15786
vector unsigned char __b) {
15787
return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15788
(vector char)__b);
15789
}
15790
15791
static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
15792
vector bool char __b) {
15793
return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15794
(vector char)__b);
15795
}
15796
15797
static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
15798
vector short __b) {
15799
return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, __b);
15800
}
15801
15802
static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
15803
vector bool short __b) {
15804
return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, (vector short)__b);
15805
}
15806
15807
static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
15808
vector unsigned short __b) {
15809
return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15810
(vector short)__b);
15811
}
15812
15813
static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
15814
vector bool short __b) {
15815
return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15816
(vector short)__b);
15817
}
15818
15819
static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
15820
vector short __b) {
15821
return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15822
(vector short)__b);
15823
}
15824
15825
static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
15826
vector unsigned short __b) {
15827
return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15828
(vector short)__b);
15829
}
15830
15831
static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
15832
vector bool short __b) {
15833
return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15834
(vector short)__b);
15835
}
15836
15837
static __inline__ int __ATTRS_o_ai vec_all_ne(vector pixel __a,
15838
vector pixel __b) {
15839
return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15840
(vector short)__b);
15841
}
15842
15843
static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a, vector int __b) {
15844
return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, __b);
15845
}
15846
15847
static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a,
15848
vector bool int __b) {
15849
return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, (vector int)__b);
15850
}
15851
15852
static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
15853
vector unsigned int __b) {
15854
return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15855
(vector int)__b);
15856
}
15857
15858
static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
15859
vector bool int __b) {
15860
return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15861
(vector int)__b);
15862
}
15863
15864
static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
15865
vector int __b) {
15866
return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15867
(vector int)__b);
15868
}
15869
15870
static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
15871
vector unsigned int __b) {
15872
return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15873
(vector int)__b);
15874
}
15875
15876
static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
15877
vector bool int __b) {
15878
return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15879
(vector int)__b);
15880
}
15881
15882
#ifdef __VSX__
15883
static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
15884
vector signed long long __b) {
15885
return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a, __b);
15886
}
15887
15888
static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
15889
vector unsigned long long __b) {
15890
return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector long long)__a,
15891
(vector long long)__b);
15892
}
15893
15894
static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
15895
vector bool long long __b) {
15896
return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a,
15897
(vector signed long long)__b);
15898
}
15899
15900
static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
15901
vector bool long long __b) {
15902
return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
15903
(vector signed long long)__b);
15904
}
15905
15906
static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
15907
vector signed long long __b) {
15908
return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
15909
(vector signed long long)__b);
15910
}
15911
15912
static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
15913
vector unsigned long long __b) {
15914
return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
15915
(vector signed long long)__b);
15916
}
15917
15918
static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
15919
vector bool long long __b) {
15920
return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
15921
(vector signed long long)__b);
15922
}
15923
#endif
15924
15925
static __inline__ int __ATTRS_o_ai vec_all_ne(vector float __a,
15926
vector float __b) {
15927
#ifdef __VSX__
15928
return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __b);
15929
#else
15930
return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __b);
15931
#endif
15932
}
15933
15934
#ifdef __VSX__
15935
static __inline__ int __ATTRS_o_ai vec_all_ne(vector double __a,
15936
vector double __b) {
15937
return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __b);
15938
}
15939
#endif
15940
15941
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15942
static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed __int128 __a,
15943
vector signed __int128 __b) {
15944
return __builtin_altivec_vcmpequq_p(__CR6_EQ, (vector unsigned __int128)__a,
15945
__b);
15946
}
15947
15948
static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned __int128 __a,
15949
vector unsigned __int128 __b) {
15950
return __builtin_altivec_vcmpequq_p(__CR6_EQ, __a,
15951
(vector signed __int128)__b);
15952
}
15953
15954
static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool __int128 __a,
15955
vector bool __int128 __b) {
15956
return __builtin_altivec_vcmpequq_p(__CR6_EQ, (vector unsigned __int128)__a,
15957
(vector signed __int128)__b);
15958
}
15959
#endif
15960
15961
/* vec_all_nge */
15962
15963
static __inline__ int __ATTRS_o_ai vec_all_nge(vector float __a,
15964
vector float __b) {
15965
#ifdef __VSX__
15966
return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __a, __b);
15967
#else
15968
return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __a, __b);
15969
#endif
15970
}
15971
15972
#ifdef __VSX__
15973
static __inline__ int __ATTRS_o_ai vec_all_nge(vector double __a,
15974
vector double __b) {
15975
return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __a, __b);
15976
}
15977
#endif
15978
15979
/* vec_all_ngt */
15980
15981
static __inline__ int __ATTRS_o_ai vec_all_ngt(vector float __a,
15982
vector float __b) {
15983
#ifdef __VSX__
15984
return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __a, __b);
15985
#else
15986
return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __a, __b);
15987
#endif
15988
}
15989
15990
#ifdef __VSX__
15991
static __inline__ int __ATTRS_o_ai vec_all_ngt(vector double __a,
15992
vector double __b) {
15993
return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __a, __b);
15994
}
15995
#endif
15996
15997
/* vec_all_nle */
15998
15999
static __inline__ int __ATTRS_o_ai
16000
vec_all_nle(vector float __a, vector float __b) {
16001
#ifdef __VSX__
16002
return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __b, __a);
16003
#else
16004
return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __b, __a);
16005
#endif
16006
}
16007
16008
#ifdef __VSX__
16009
static __inline__ int __ATTRS_o_ai vec_all_nle(vector double __a,
16010
vector double __b) {
16011
return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __b, __a);
16012
}
16013
#endif
16014
16015
/* vec_all_nlt */
16016
16017
static __inline__ int __ATTRS_o_ai
16018
vec_all_nlt(vector float __a, vector float __b) {
16019
#ifdef __VSX__
16020
return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __b, __a);
16021
#else
16022
return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __b, __a);
16023
#endif
16024
}
16025
16026
#ifdef __VSX__
16027
static __inline__ int __ATTRS_o_ai vec_all_nlt(vector double __a,
16028
vector double __b) {
16029
return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __b, __a);
16030
}
16031
#endif
16032
16033
/* vec_all_numeric */
16034
16035
static __inline__ int __ATTRS_o_ai
16036
vec_all_numeric(vector float __a) {
16037
#ifdef __VSX__
16038
return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __a);
16039
#else
16040
return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __a);
16041
#endif
16042
}
16043
16044
#ifdef __VSX__
16045
static __inline__ int __ATTRS_o_ai vec_all_numeric(vector double __a) {
16046
return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __a);
16047
}
16048
#endif
16049
16050
/* vec_any_eq */
16051
16052
static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
16053
vector signed char __b) {
16054
return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16055
(vector char)__b);
16056
}
16057
16058
static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
16059
vector bool char __b) {
16060
return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16061
(vector char)__b);
16062
}
16063
16064
static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
16065
vector unsigned char __b) {
16066
return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16067
(vector char)__b);
16068
}
16069
16070
static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
16071
vector bool char __b) {
16072
return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16073
(vector char)__b);
16074
}
16075
16076
static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
16077
vector signed char __b) {
16078
return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16079
(vector char)__b);
16080
}
16081
16082
static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
16083
vector unsigned char __b) {
16084
return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16085
(vector char)__b);
16086
}
16087
16088
static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
16089
vector bool char __b) {
16090
return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
16091
(vector char)__b);
16092
}
16093
16094
static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
16095
vector short __b) {
16096
return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, __b);
16097
}
16098
16099
static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
16100
vector bool short __b) {
16101
return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, (vector short)__b);
16102
}
16103
16104
static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
16105
vector unsigned short __b) {
16106
return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
16107
(vector short)__b);
16108
}
16109
16110
static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
16111
vector bool short __b) {
16112
return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
16113
(vector short)__b);
16114
}
16115
16116
static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
16117
vector short __b) {
16118
return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
16119
(vector short)__b);
16120
}
16121
16122
static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
16123
vector unsigned short __b) {
16124
return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
16125
(vector short)__b);
16126
}
16127
16128
static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
16129
vector bool short __b) {
16130
return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
16131
(vector short)__b);
16132
}
16133
16134
static __inline__ int __ATTRS_o_ai vec_any_eq(vector pixel __a,
16135
vector pixel __b) {
16136
return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
16137
(vector short)__b);
16138
}
16139
16140
static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a, vector int __b) {
16141
return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, __b);
16142
}
16143
16144
static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a,
16145
vector bool int __b) {
16146
return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, (vector int)__b);
16147
}
16148
16149
static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
16150
vector unsigned int __b) {
16151
return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16152
(vector int)__b);
16153
}
16154
16155
static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
16156
vector bool int __b) {
16157
return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16158
(vector int)__b);
16159
}
16160
16161
static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
16162
vector int __b) {
16163
return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16164
(vector int)__b);
16165
}
16166
16167
static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
16168
vector unsigned int __b) {
16169
return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16170
(vector int)__b);
16171
}
16172
16173
static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
16174
vector bool int __b) {
16175
return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16176
(vector int)__b);
16177
}
16178
16179
#ifdef __VSX__
16180
static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
16181
vector signed long long __b) {
16182
return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a, __b);
16183
}
16184
16185
static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
16186
vector unsigned long long __b) {
16187
return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector long long)__a,
16188
(vector long long)__b);
16189
}
16190
16191
static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
16192
vector bool long long __b) {
16193
return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a,
16194
(vector signed long long)__b);
16195
}
16196
16197
static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
16198
vector bool long long __b) {
16199
return __builtin_altivec_vcmpequd_p(
16200
__CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
16201
}
16202
16203
static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
16204
vector signed long long __b) {
16205
return __builtin_altivec_vcmpequd_p(
16206
__CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
16207
}
16208
16209
static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
16210
vector unsigned long long __b) {
16211
return __builtin_altivec_vcmpequd_p(
16212
__CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
16213
}
16214
16215
static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
16216
vector bool long long __b) {
16217
return __builtin_altivec_vcmpequd_p(
16218
__CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
16219
}
16220
#endif
16221
16222
static __inline__ int __ATTRS_o_ai vec_any_eq(vector float __a,
16223
vector float __b) {
16224
#ifdef __VSX__
16225
return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __b);
16226
#else
16227
return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __b);
16228
#endif
16229
}
16230
16231
#ifdef __VSX__
16232
static __inline__ int __ATTRS_o_ai vec_any_eq(vector double __a,
16233
vector double __b) {
16234
return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __b);
16235
}
16236
#endif
16237
16238
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16239
static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed __int128 __a,
16240
vector signed __int128 __b) {
16241
return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV,
16242
(vector unsigned __int128)__a, __b);
16243
}
16244
16245
static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned __int128 __a,
16246
vector unsigned __int128 __b) {
16247
return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV, __a,
16248
(vector signed __int128)__b);
16249
}
16250
16251
static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool __int128 __a,
16252
vector bool __int128 __b) {
16253
return __builtin_altivec_vcmpequq_p(
16254
__CR6_EQ_REV, (vector unsigned __int128)__a, (vector signed __int128)__b);
16255
}
16256
#endif
16257
16258
/* vec_any_ge */
16259
16260
static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
16261
vector signed char __b) {
16262
return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b, __a);
16263
}
16264
16265
static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
16266
vector bool char __b) {
16267
return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__b,
16268
__a);
16269
}
16270
16271
static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
16272
vector unsigned char __b) {
16273
return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, __a);
16274
}
16275
16276
static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
16277
vector bool char __b) {
16278
return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
16279
__a);
16280
}
16281
16282
static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
16283
vector signed char __b) {
16284
return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b,
16285
(vector signed char)__a);
16286
}
16287
16288
static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
16289
vector unsigned char __b) {
16290
return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b,
16291
(vector unsigned char)__a);
16292
}
16293
16294
static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
16295
vector bool char __b) {
16296
return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
16297
(vector unsigned char)__a);
16298
}
16299
16300
static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
16301
vector short __b) {
16302
return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b, __a);
16303
}
16304
16305
static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
16306
vector bool short __b) {
16307
return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector short)__b, __a);
16308
}
16309
16310
static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
16311
vector unsigned short __b) {
16312
return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, __a);
16313
}
16314
16315
static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
16316
vector bool short __b) {
16317
return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
16318
__a);
16319
}
16320
16321
static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
16322
vector short __b) {
16323
return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b,
16324
(vector signed short)__a);
16325
}
16326
16327
static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
16328
vector unsigned short __b) {
16329
return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b,
16330
(vector unsigned short)__a);
16331
}
16332
16333
static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
16334
vector bool short __b) {
16335
return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
16336
(vector unsigned short)__a);
16337
}
16338
16339
static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a, vector int __b) {
16340
return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b, __a);
16341
}
16342
16343
static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a,
16344
vector bool int __b) {
16345
return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector int)__b, __a);
16346
}
16347
16348
static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
16349
vector unsigned int __b) {
16350
return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, __a);
16351
}
16352
16353
static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
16354
vector bool int __b) {
16355
return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
16356
__a);
16357
}
16358
16359
static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
16360
vector int __b) {
16361
return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b,
16362
(vector signed int)__a);
16363
}
16364
16365
static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
16366
vector unsigned int __b) {
16367
return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b,
16368
(vector unsigned int)__a);
16369
}
16370
16371
static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
16372
vector bool int __b) {
16373
return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
16374
(vector unsigned int)__a);
16375
}
16376
16377
#ifdef __VSX__
16378
static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
16379
vector signed long long __b) {
16380
return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b, __a);
16381
}
16382
16383
static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
16384
vector unsigned long long __b) {
16385
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b, __a);
16386
}
16387
16388
static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
16389
vector bool long long __b) {
16390
return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,
16391
(vector signed long long)__b, __a);
16392
}
16393
16394
static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
16395
vector bool long long __b) {
16396
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
16397
(vector unsigned long long)__b, __a);
16398
}
16399
16400
static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
16401
vector signed long long __b) {
16402
return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b,
16403
(vector signed long long)__a);
16404
}
16405
16406
static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
16407
vector unsigned long long __b) {
16408
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b,
16409
(vector unsigned long long)__a);
16410
}
16411
16412
static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
16413
vector bool long long __b) {
16414
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
16415
(vector unsigned long long)__b,
16416
(vector unsigned long long)__a);
16417
}
16418
#endif
16419
16420
static __inline__ int __ATTRS_o_ai vec_any_ge(vector float __a,
16421
vector float __b) {
16422
#ifdef __VSX__
16423
return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __a, __b);
16424
#else
16425
return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __a, __b);
16426
#endif
16427
}
16428
16429
#ifdef __VSX__
16430
static __inline__ int __ATTRS_o_ai vec_any_ge(vector double __a,
16431
vector double __b) {
16432
return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __a, __b);
16433
}
16434
#endif
16435
16436
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16437
static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed __int128 __a,
16438
vector signed __int128 __b) {
16439
return __builtin_altivec_vcmpgtsq_p(__CR6_LT_REV, __b, __a);
16440
}
16441
16442
static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned __int128 __a,
16443
vector unsigned __int128 __b) {
16444
return __builtin_altivec_vcmpgtuq_p(__CR6_LT_REV, __b, __a);
16445
}
16446
#endif
16447
16448
/* vec_any_gt */
16449
16450
static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
16451
vector signed char __b) {
16452
return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, __b);
16453
}
16454
16455
static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
16456
vector bool char __b) {
16457
return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a,
16458
(vector signed char)__b);
16459
}
16460
16461
static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
16462
vector unsigned char __b) {
16463
return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, __b);
16464
}
16465
16466
static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
16467
vector bool char __b) {
16468
return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a,
16469
(vector unsigned char)__b);
16470
}
16471
16472
static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
16473
vector signed char __b) {
16474
return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__a,
16475
__b);
16476
}
16477
16478
static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
16479
vector unsigned char __b) {
16480
return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
16481
__b);
16482
}
16483
16484
static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
16485
vector bool char __b) {
16486
return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
16487
(vector unsigned char)__b);
16488
}
16489
16490
static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
16491
vector short __b) {
16492
return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, __b);
16493
}
16494
16495
static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
16496
vector bool short __b) {
16497
return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, (vector short)__b);
16498
}
16499
16500
static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
16501
vector unsigned short __b) {
16502
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, __b);
16503
}
16504
16505
static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
16506
vector bool short __b) {
16507
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a,
16508
(vector unsigned short)__b);
16509
}
16510
16511
static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
16512
vector short __b) {
16513
return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector signed short)__a,
16514
__b);
16515
}
16516
16517
static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
16518
vector unsigned short __b) {
16519
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
16520
__b);
16521
}
16522
16523
static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
16524
vector bool short __b) {
16525
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
16526
(vector unsigned short)__b);
16527
}
16528
16529
static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a, vector int __b) {
16530
return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, __b);
16531
}
16532
16533
static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a,
16534
vector bool int __b) {
16535
return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, (vector int)__b);
16536
}
16537
16538
static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
16539
vector unsigned int __b) {
16540
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, __b);
16541
}
16542
16543
static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
16544
vector bool int __b) {
16545
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a,
16546
(vector unsigned int)__b);
16547
}
16548
16549
static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
16550
vector int __b) {
16551
return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector signed int)__a,
16552
__b);
16553
}
16554
16555
static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
16556
vector unsigned int __b) {
16557
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
16558
__b);
16559
}
16560
16561
static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
16562
vector bool int __b) {
16563
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
16564
(vector unsigned int)__b);
16565
}
16566
16567
#ifdef __VSX__
16568
static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
16569
vector signed long long __b) {
16570
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a, __b);
16571
}
16572
16573
static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
16574
vector unsigned long long __b) {
16575
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a, __b);
16576
}
16577
16578
static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
16579
vector bool long long __b) {
16580
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a,
16581
(vector signed long long)__b);
16582
}
16583
16584
static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
16585
vector bool long long __b) {
16586
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a,
16587
(vector unsigned long long)__b);
16588
}
16589
16590
static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
16591
vector signed long long __b) {
16592
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,
16593
(vector signed long long)__a, __b);
16594
}
16595
16596
static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
16597
vector unsigned long long __b) {
16598
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
16599
(vector unsigned long long)__a, __b);
16600
}
16601
16602
static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
16603
vector bool long long __b) {
16604
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
16605
(vector unsigned long long)__a,
16606
(vector unsigned long long)__b);
16607
}
16608
#endif
16609
16610
static __inline__ int __ATTRS_o_ai vec_any_gt(vector float __a,
16611
vector float __b) {
16612
#ifdef __VSX__
16613
return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __a, __b);
16614
#else
16615
return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __a, __b);
16616
#endif
16617
}
16618
16619
#ifdef __VSX__
16620
static __inline__ int __ATTRS_o_ai vec_any_gt(vector double __a,
16621
vector double __b) {
16622
return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __a, __b);
16623
}
16624
#endif
16625
16626
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16627
static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed __int128 __a,
16628
vector signed __int128 __b) {
16629
return __builtin_altivec_vcmpgtsq_p(__CR6_EQ_REV, __a, __b);
16630
}
16631
16632
static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned __int128 __a,
16633
vector unsigned __int128 __b) {
16634
return __builtin_altivec_vcmpgtuq_p(__CR6_EQ_REV, __a, __b);
16635
}
16636
#endif
16637
16638
/* vec_any_le */
16639
16640
static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
16641
vector signed char __b) {
16642
return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, __b);
16643
}
16644
16645
static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
16646
vector bool char __b) {
16647
return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a,
16648
(vector signed char)__b);
16649
}
16650
16651
static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
16652
vector unsigned char __b) {
16653
return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, __b);
16654
}
16655
16656
static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
16657
vector bool char __b) {
16658
return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a,
16659
(vector unsigned char)__b);
16660
}
16661
16662
static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
16663
vector signed char __b) {
16664
return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__a,
16665
__b);
16666
}
16667
16668
static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
16669
vector unsigned char __b) {
16670
return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
16671
__b);
16672
}
16673
16674
static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
16675
vector bool char __b) {
16676
return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
16677
(vector unsigned char)__b);
16678
}
16679
16680
static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
16681
vector short __b) {
16682
return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, __b);
16683
}
16684
16685
static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
16686
vector bool short __b) {
16687
return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, (vector short)__b);
16688
}
16689
16690
static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
16691
vector unsigned short __b) {
16692
return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, __b);
16693
}
16694
16695
static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
16696
vector bool short __b) {
16697
return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a,
16698
(vector unsigned short)__b);
16699
}
16700
16701
static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
16702
vector short __b) {
16703
return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector signed short)__a,
16704
__b);
16705
}
16706
16707
static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
16708
vector unsigned short __b) {
16709
return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
16710
__b);
16711
}
16712
16713
static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
16714
vector bool short __b) {
16715
return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
16716
(vector unsigned short)__b);
16717
}
16718
16719
static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a, vector int __b) {
16720
return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, __b);
16721
}
16722
16723
static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a,
16724
vector bool int __b) {
16725
return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, (vector int)__b);
16726
}
16727
16728
static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
16729
vector unsigned int __b) {
16730
return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, __b);
16731
}
16732
16733
static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
16734
vector bool int __b) {
16735
return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a,
16736
(vector unsigned int)__b);
16737
}
16738
16739
static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
16740
vector int __b) {
16741
return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector signed int)__a,
16742
__b);
16743
}
16744
16745
static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
16746
vector unsigned int __b) {
16747
return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
16748
__b);
16749
}
16750
16751
static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
16752
vector bool int __b) {
16753
return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
16754
(vector unsigned int)__b);
16755
}
16756
16757
#ifdef __VSX__
16758
static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
16759
vector signed long long __b) {
16760
return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a, __b);
16761
}
16762
16763
static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
16764
vector unsigned long long __b) {
16765
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a, __b);
16766
}
16767
16768
static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
16769
vector bool long long __b) {
16770
return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a,
16771
(vector signed long long)__b);
16772
}
16773
16774
static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
16775
vector bool long long __b) {
16776
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a,
16777
(vector unsigned long long)__b);
16778
}
16779
16780
static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
16781
vector signed long long __b) {
16782
return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,
16783
(vector signed long long)__a, __b);
16784
}
16785
16786
static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
16787
vector unsigned long long __b) {
16788
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
16789
(vector unsigned long long)__a, __b);
16790
}
16791
16792
static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
16793
vector bool long long __b) {
16794
return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
16795
(vector unsigned long long)__a,
16796
(vector unsigned long long)__b);
16797
}
16798
#endif
16799
16800
static __inline__ int __ATTRS_o_ai vec_any_le(vector float __a,
16801
vector float __b) {
16802
#ifdef __VSX__
16803
return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __b, __a);
16804
#else
16805
return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __b, __a);
16806
#endif
16807
}
16808
16809
#ifdef __VSX__
16810
static __inline__ int __ATTRS_o_ai vec_any_le(vector double __a,
16811
vector double __b) {
16812
return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __b, __a);
16813
}
16814
#endif
16815
16816
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16817
static __inline__ int __ATTRS_o_ai vec_any_le(vector signed __int128 __a,
16818
vector signed __int128 __b) {
16819
return __builtin_altivec_vcmpgtsq_p(__CR6_LT_REV, __a, __b);
16820
}
16821
16822
static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned __int128 __a,
16823
vector unsigned __int128 __b) {
16824
return __builtin_altivec_vcmpgtuq_p(__CR6_LT_REV, __a, __b);
16825
}
16826
#endif
16827
16828
/* vec_any_lt */
16829
16830
static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
16831
vector signed char __b) {
16832
return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b, __a);
16833
}
16834
16835
static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
16836
vector bool char __b) {
16837
return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__b,
16838
__a);
16839
}
16840
16841
static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
16842
vector unsigned char __b) {
16843
return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, __a);
16844
}
16845
16846
static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
16847
vector bool char __b) {
16848
return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
16849
__a);
16850
}
16851
16852
static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
16853
vector signed char __b) {
16854
return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b,
16855
(vector signed char)__a);
16856
}
16857
16858
static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
16859
vector unsigned char __b) {
16860
return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b,
16861
(vector unsigned char)__a);
16862
}
16863
16864
static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
16865
vector bool char __b) {
16866
return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
16867
(vector unsigned char)__a);
16868
}
16869
16870
static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
16871
vector short __b) {
16872
return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b, __a);
16873
}
16874
16875
static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
16876
vector bool short __b) {
16877
return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector short)__b, __a);
16878
}
16879
16880
static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
16881
vector unsigned short __b) {
16882
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, __a);
16883
}
16884
16885
static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
16886
vector bool short __b) {
16887
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
16888
__a);
16889
}
16890
16891
static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
16892
vector short __b) {
16893
return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b,
16894
(vector signed short)__a);
16895
}
16896
16897
static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
16898
vector unsigned short __b) {
16899
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b,
16900
(vector unsigned short)__a);
16901
}
16902
16903
static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
16904
vector bool short __b) {
16905
return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
16906
(vector unsigned short)__a);
16907
}
16908
16909
static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a, vector int __b) {
16910
return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b, __a);
16911
}
16912
16913
static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a,
16914
vector bool int __b) {
16915
return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector int)__b, __a);
16916
}
16917
16918
static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
16919
vector unsigned int __b) {
16920
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, __a);
16921
}
16922
16923
static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
16924
vector bool int __b) {
16925
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
16926
__a);
16927
}
16928
16929
static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
16930
vector int __b) {
16931
return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b,
16932
(vector signed int)__a);
16933
}
16934
16935
static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
16936
vector unsigned int __b) {
16937
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b,
16938
(vector unsigned int)__a);
16939
}
16940
16941
static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
16942
vector bool int __b) {
16943
return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
16944
(vector unsigned int)__a);
16945
}
16946
16947
#ifdef __VSX__
16948
static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
16949
vector signed long long __b) {
16950
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b, __a);
16951
}
16952
16953
static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
16954
vector unsigned long long __b) {
16955
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b, __a);
16956
}
16957
16958
static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
16959
vector bool long long __b) {
16960
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,
16961
(vector signed long long)__b, __a);
16962
}
16963
16964
static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
16965
vector bool long long __b) {
16966
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
16967
(vector unsigned long long)__b, __a);
16968
}
16969
16970
static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
16971
vector signed long long __b) {
16972
return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b,
16973
(vector signed long long)__a);
16974
}
16975
16976
static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
16977
vector unsigned long long __b) {
16978
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b,
16979
(vector unsigned long long)__a);
16980
}
16981
16982
static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
16983
vector bool long long __b) {
16984
return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
16985
(vector unsigned long long)__b,
16986
(vector unsigned long long)__a);
16987
}
16988
#endif
16989
16990
static __inline__ int __ATTRS_o_ai vec_any_lt(vector float __a,
16991
vector float __b) {
16992
#ifdef __VSX__
16993
return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __b, __a);
16994
#else
16995
return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __b, __a);
16996
#endif
16997
}
16998
16999
#ifdef __VSX__
17000
static __inline__ int __ATTRS_o_ai vec_any_lt(vector double __a,
17001
vector double __b) {
17002
return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __b, __a);
17003
}
17004
#endif
17005
17006
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
17007
static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed __int128 __a,
17008
vector signed __int128 __b) {
17009
return __builtin_altivec_vcmpgtsq_p(__CR6_EQ_REV, __b, __a);
17010
}
17011
17012
static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned __int128 __a,
17013
vector unsigned __int128 __b) {
17014
return __builtin_altivec_vcmpgtuq_p(__CR6_EQ_REV, __b, __a);
17015
}
17016
#endif
17017
17018
/* vec_any_nan */
17019
17020
static __inline__ int __ATTRS_o_ai vec_any_nan(vector float __a) {
17021
#ifdef __VSX__
17022
return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __a);
17023
#else
17024
return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __a);
17025
#endif
17026
}
17027
#ifdef __VSX__
17028
static __inline__ int __ATTRS_o_ai vec_any_nan(vector double __a) {
17029
return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __a);
17030
}
17031
#endif
17032
17033
/* vec_any_ne */
17034
17035
static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
17036
vector signed char __b) {
17037
return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17038
(vector char)__b);
17039
}
17040
17041
static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
17042
vector bool char __b) {
17043
return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17044
(vector char)__b);
17045
}
17046
17047
static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
17048
vector unsigned char __b) {
17049
return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17050
(vector char)__b);
17051
}
17052
17053
static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
17054
vector bool char __b) {
17055
return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17056
(vector char)__b);
17057
}
17058
17059
static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
17060
vector signed char __b) {
17061
return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17062
(vector char)__b);
17063
}
17064
17065
static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
17066
vector unsigned char __b) {
17067
return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17068
(vector char)__b);
17069
}
17070
17071
static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
17072
vector bool char __b) {
17073
return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
17074
(vector char)__b);
17075
}
17076
17077
static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
17078
vector short __b) {
17079
return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, __b);
17080
}
17081
17082
static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
17083
vector bool short __b) {
17084
return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, (vector short)__b);
17085
}
17086
17087
static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
17088
vector unsigned short __b) {
17089
return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
17090
(vector short)__b);
17091
}
17092
17093
static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
17094
vector bool short __b) {
17095
return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
17096
(vector short)__b);
17097
}
17098
17099
static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
17100
vector short __b) {
17101
return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
17102
(vector short)__b);
17103
}
17104
17105
static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
17106
vector unsigned short __b) {
17107
return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
17108
(vector short)__b);
17109
}
17110
17111
static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
17112
vector bool short __b) {
17113
return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
17114
(vector short)__b);
17115
}
17116
17117
static __inline__ int __ATTRS_o_ai vec_any_ne(vector pixel __a,
17118
vector pixel __b) {
17119
return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
17120
(vector short)__b);
17121
}
17122
17123
static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a, vector int __b) {
17124
return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, __b);
17125
}
17126
17127
static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a,
17128
vector bool int __b) {
17129
return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, (vector int)__b);
17130
}
17131
17132
static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
17133
vector unsigned int __b) {
17134
return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
17135
(vector int)__b);
17136
}
17137
17138
static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
17139
vector bool int __b) {
17140
return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
17141
(vector int)__b);
17142
}
17143
17144
static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
17145
vector int __b) {
17146
return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
17147
(vector int)__b);
17148
}
17149
17150
static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
17151
vector unsigned int __b) {
17152
return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
17153
(vector int)__b);
17154
}
17155
17156
static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
17157
vector bool int __b) {
17158
return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
17159
(vector int)__b);
17160
}
17161
17162
#ifdef __VSX__
17163
static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
17164
vector signed long long __b) {
17165
#ifdef __POWER8_VECTOR__
17166
return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a, __b);
17167
#else
17168
// Take advantage of the optimized sequence for vec_all_eq when vcmpequd is
17169
// not available.
17170
return !vec_all_eq(__a, __b);
17171
#endif
17172
}
17173
17174
static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
17175
vector unsigned long long __b) {
17176
return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
17177
}
17178
17179
static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
17180
vector bool long long __b) {
17181
return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
17182
}
17183
17184
static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
17185
vector bool long long __b) {
17186
return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
17187
}
17188
17189
static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
17190
vector signed long long __b) {
17191
return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
17192
}
17193
17194
static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
17195
vector unsigned long long __b) {
17196
return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
17197
}
17198
17199
static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
17200
vector bool long long __b) {
17201
return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
17202
}
17203
#endif
17204
17205
static __inline__ int __ATTRS_o_ai vec_any_ne(vector float __a,
17206
vector float __b) {
17207
#ifdef __VSX__
17208
return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __b);
17209
#else
17210
return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __b);
17211
#endif
17212
}
17213
17214
#ifdef __VSX__
17215
static __inline__ int __ATTRS_o_ai vec_any_ne(vector double __a,
17216
vector double __b) {
17217
return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __b);
17218
}
17219
#endif
17220
17221
#if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
17222
static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed __int128 __a,
17223
vector signed __int128 __b) {
17224
return __builtin_altivec_vcmpequq_p(__CR6_LT_REV,
17225
(vector unsigned __int128)__a, __b);
17226
}
17227
17228
static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned __int128 __a,
17229
vector unsigned __int128 __b) {
17230
return __builtin_altivec_vcmpequq_p(__CR6_LT_REV, __a,
17231
(vector signed __int128)__b);
17232
}
17233
17234
static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool __int128 __a,
17235
vector bool __int128 __b) {
17236
return __builtin_altivec_vcmpequq_p(
17237
__CR6_LT_REV, (vector unsigned __int128)__a, (vector signed __int128)__b);
17238
}
17239
#endif
17240
17241
/* vec_any_nge */
17242
17243
static __inline__ int __ATTRS_o_ai vec_any_nge(vector float __a,
17244
vector float __b) {
17245
#ifdef __VSX__
17246
return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __a, __b);
17247
#else
17248
return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __a, __b);
17249
#endif
17250
}
17251
17252
#ifdef __VSX__
17253
static __inline__ int __ATTRS_o_ai vec_any_nge(vector double __a,
17254
vector double __b) {
17255
return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __a, __b);
17256
}
17257
#endif
17258
17259
/* vec_any_ngt */
17260
17261
static __inline__ int __ATTRS_o_ai vec_any_ngt(vector float __a,
17262
vector float __b) {
17263
#ifdef __VSX__
17264
return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __a, __b);
17265
#else
17266
return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __a, __b);
17267
#endif
17268
}
17269
17270
#ifdef __VSX__
17271
static __inline__ int __ATTRS_o_ai vec_any_ngt(vector double __a,
17272
vector double __b) {
17273
return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __a, __b);
17274
}
17275
#endif
17276
17277
/* vec_any_nle */
17278
17279
static __inline__ int __ATTRS_o_ai vec_any_nle(vector float __a,
17280
vector float __b) {
17281
#ifdef __VSX__
17282
return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __b, __a);
17283
#else
17284
return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __b, __a);
17285
#endif
17286
}
17287
17288
#ifdef __VSX__
17289
static __inline__ int __ATTRS_o_ai vec_any_nle(vector double __a,
17290
vector double __b) {
17291
return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __b, __a);
17292
}
17293
#endif
17294
17295
/* vec_any_nlt */
17296
17297
static __inline__ int __ATTRS_o_ai vec_any_nlt(vector float __a,
17298
vector float __b) {
17299
#ifdef __VSX__
17300
return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __b, __a);
17301
#else
17302
return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __b, __a);
17303
#endif
17304
}
17305
17306
#ifdef __VSX__
17307
static __inline__ int __ATTRS_o_ai vec_any_nlt(vector double __a,
17308
vector double __b) {
17309
return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __b, __a);
17310
}
17311
#endif
17312
17313
/* vec_any_numeric */
17314
17315
static __inline__ int __ATTRS_o_ai vec_any_numeric(vector float __a) {
17316
#ifdef __VSX__
17317
return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __a);
17318
#else
17319
return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __a);
17320
#endif
17321
}
17322
17323
#ifdef __VSX__
17324
static __inline__ int __ATTRS_o_ai vec_any_numeric(vector double __a) {
17325
return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __a);
17326
}
17327
#endif
17328
17329
/* vec_any_out */
17330
17331
static __inline__ int __attribute__((__always_inline__))
17332
vec_any_out(vector float __a, vector float __b) {
17333
return __builtin_altivec_vcmpbfp_p(__CR6_EQ_REV, __a, __b);
17334
}
17335
17336
/* Power 8 Crypto functions
17337
Note: We diverge from the current GCC implementation with regard
17338
to cryptography and related functions as follows:
17339
- Only the SHA and AES instructions and builtins are disabled by -mno-crypto
17340
- The remaining ones are only available on Power8 and up so
17341
require -mpower8-vector
17342
The justification for this is that export requirements require that
17343
Category:Vector.Crypto is optional (i.e. compliant hardware may not provide
17344
support). As a result, we need to be able to turn off support for those.
17345
The remaining ones (currently controlled by -mcrypto for GCC) still
17346
need to be provided on compliant hardware even if Vector.Crypto is not
17347
provided.
17348
*/
17349
#ifdef __CRYPTO__
17350
#define vec_sbox_be __builtin_altivec_crypto_vsbox
17351
#define vec_cipher_be __builtin_altivec_crypto_vcipher
17352
#define vec_cipherlast_be __builtin_altivec_crypto_vcipherlast
17353
#define vec_ncipher_be __builtin_altivec_crypto_vncipher
17354
#define vec_ncipherlast_be __builtin_altivec_crypto_vncipherlast
17355
17356
#ifdef __VSX__
17357
static __inline__ vector unsigned char __attribute__((__always_inline__))
17358
__builtin_crypto_vsbox(vector unsigned char __a) {
17359
return __builtin_altivec_crypto_vsbox(__a);
17360
}
17361
17362
static __inline__ vector unsigned char __attribute__((__always_inline__))
17363
__builtin_crypto_vcipher(vector unsigned char __a,
17364
vector unsigned char __b) {
17365
return __builtin_altivec_crypto_vcipher(__a, __b);
17366
}
17367
17368
static __inline__ vector unsigned char __attribute__((__always_inline__))
17369
__builtin_crypto_vcipherlast(vector unsigned char __a,
17370
vector unsigned char __b) {
17371
return __builtin_altivec_crypto_vcipherlast(__a, __b);
17372
}
17373
17374
static __inline__ vector unsigned char __attribute__((__always_inline__))
17375
__builtin_crypto_vncipher(vector unsigned char __a,
17376
vector unsigned char __b) {
17377
return __builtin_altivec_crypto_vncipher(__a, __b);
17378
}
17379
17380
static __inline__ vector unsigned char __attribute__((__always_inline__))
17381
__builtin_crypto_vncipherlast(vector unsigned char __a,
17382
vector unsigned char __b) {
17383
return __builtin_altivec_crypto_vncipherlast(__a, __b);
17384
}
17385
#endif /* __VSX__ */
17386
17387
#define __builtin_crypto_vshasigmad __builtin_altivec_crypto_vshasigmad
17388
#define __builtin_crypto_vshasigmaw __builtin_altivec_crypto_vshasigmaw
17389
17390
#define vec_shasigma_be(X, Y, Z) \
17391
_Generic((X), vector unsigned int \
17392
: __builtin_crypto_vshasigmaw, vector unsigned long long \
17393
: __builtin_crypto_vshasigmad)((X), (Y), (Z))
17394
#endif
17395
17396
#ifdef __POWER8_VECTOR__
17397
static __inline__ vector bool char __ATTRS_o_ai
17398
vec_permxor(vector bool char __a, vector bool char __b,
17399
vector bool char __c) {
17400
return (vector bool char)__builtin_altivec_crypto_vpermxor(
17401
(vector unsigned char)__a, (vector unsigned char)__b,
17402
(vector unsigned char)__c);
17403
}
17404
17405
static __inline__ vector signed char __ATTRS_o_ai
17406
vec_permxor(vector signed char __a, vector signed char __b,
17407
vector signed char __c) {
17408
return (vector signed char)__builtin_altivec_crypto_vpermxor(
17409
(vector unsigned char)__a, (vector unsigned char)__b,
17410
(vector unsigned char)__c);
17411
}
17412
17413
static __inline__ vector unsigned char __ATTRS_o_ai
17414
vec_permxor(vector unsigned char __a, vector unsigned char __b,
17415
vector unsigned char __c) {
17416
return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
17417
}
17418
17419
static __inline__ vector unsigned char __ATTRS_o_ai
17420
__builtin_crypto_vpermxor(vector unsigned char __a, vector unsigned char __b,
17421
vector unsigned char __c) {
17422
return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
17423
}
17424
17425
static __inline__ vector unsigned short __ATTRS_o_ai
17426
__builtin_crypto_vpermxor(vector unsigned short __a, vector unsigned short __b,
17427
vector unsigned short __c) {
17428
return (vector unsigned short)__builtin_altivec_crypto_vpermxor(
17429
(vector unsigned char)__a, (vector unsigned char)__b,
17430
(vector unsigned char)__c);
17431
}
17432
17433
static __inline__ vector unsigned int __ATTRS_o_ai __builtin_crypto_vpermxor(
17434
vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
17435
return (vector unsigned int)__builtin_altivec_crypto_vpermxor(
17436
(vector unsigned char)__a, (vector unsigned char)__b,
17437
(vector unsigned char)__c);
17438
}
17439
17440
static __inline__ vector unsigned long long __ATTRS_o_ai
17441
__builtin_crypto_vpermxor(vector unsigned long long __a,
17442
vector unsigned long long __b,
17443
vector unsigned long long __c) {
17444
return (vector unsigned long long)__builtin_altivec_crypto_vpermxor(
17445
(vector unsigned char)__a, (vector unsigned char)__b,
17446
(vector unsigned char)__c);
17447
}
17448
17449
static __inline__ vector unsigned char __ATTRS_o_ai
17450
__builtin_crypto_vpmsumb(vector unsigned char __a, vector unsigned char __b) {
17451
return __builtin_altivec_crypto_vpmsumb(__a, __b);
17452
}
17453
17454
static __inline__ vector unsigned short __ATTRS_o_ai
17455
__builtin_crypto_vpmsumb(vector unsigned short __a, vector unsigned short __b) {
17456
return __builtin_altivec_crypto_vpmsumh(__a, __b);
17457
}
17458
17459
static __inline__ vector unsigned int __ATTRS_o_ai
17460
__builtin_crypto_vpmsumb(vector unsigned int __a, vector unsigned int __b) {
17461
return __builtin_altivec_crypto_vpmsumw(__a, __b);
17462
}
17463
17464
static __inline__ vector unsigned long long __ATTRS_o_ai
17465
__builtin_crypto_vpmsumb(vector unsigned long long __a,
17466
vector unsigned long long __b) {
17467
return __builtin_altivec_crypto_vpmsumd(__a, __b);
17468
}
17469
17470
static __inline__ vector signed char __ATTRS_o_ai
17471
vec_vgbbd(vector signed char __a) {
17472
return (vector signed char)__builtin_altivec_vgbbd((vector unsigned char)__a);
17473
}
17474
17475
#define vec_pmsum_be __builtin_crypto_vpmsumb
17476
#define vec_gb __builtin_altivec_vgbbd
17477
17478
static __inline__ vector unsigned char __ATTRS_o_ai
17479
vec_vgbbd(vector unsigned char __a) {
17480
return __builtin_altivec_vgbbd(__a);
17481
}
17482
17483
static __inline__ vector signed long long __ATTRS_o_ai
17484
vec_gbb(vector signed long long __a) {
17485
return (vector signed long long)__builtin_altivec_vgbbd(
17486
(vector unsigned char)__a);
17487
}
17488
17489
static __inline__ vector unsigned long long __ATTRS_o_ai
17490
vec_gbb(vector unsigned long long __a) {
17491
return (vector unsigned long long)__builtin_altivec_vgbbd(
17492
(vector unsigned char)__a);
17493
}
17494
17495
static __inline__ vector long long __ATTRS_o_ai
17496
vec_vbpermq(vector signed char __a, vector signed char __b) {
17497
return (vector long long)__builtin_altivec_vbpermq((vector unsigned char)__a,
17498
(vector unsigned char)__b);
17499
}
17500
17501
static __inline__ vector long long __ATTRS_o_ai
17502
vec_vbpermq(vector unsigned char __a, vector unsigned char __b) {
17503
return (vector long long)__builtin_altivec_vbpermq(__a, __b);
17504
}
17505
17506
#if defined(__powerpc64__) && defined(__SIZEOF_INT128__)
17507
static __inline__ vector unsigned long long __ATTRS_o_ai
17508
vec_bperm(vector unsigned __int128 __a, vector unsigned char __b) {
17509
return __builtin_altivec_vbpermq((vector unsigned char)__a,
17510
(vector unsigned char)__b);
17511
}
17512
#endif
17513
static __inline__ vector unsigned char __ATTRS_o_ai
17514
vec_bperm(vector unsigned char __a, vector unsigned char __b) {
17515
return (vector unsigned char)__builtin_altivec_vbpermq(__a, __b);
17516
}
17517
#endif // __POWER8_VECTOR__
17518
#ifdef __POWER9_VECTOR__
17519
static __inline__ vector unsigned long long __ATTRS_o_ai
17520
vec_bperm(vector unsigned long long __a, vector unsigned char __b) {
17521
return __builtin_altivec_vbpermd(__a, __b);
17522
}
17523
#endif
17524
17525
17526
/* vec_reve */
17527
17528
static inline __ATTRS_o_ai vector bool char vec_reve(vector bool char __a) {
17529
return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
17530
5, 4, 3, 2, 1, 0);
17531
}
17532
17533
static inline __ATTRS_o_ai vector signed char vec_reve(vector signed char __a) {
17534
return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
17535
5, 4, 3, 2, 1, 0);
17536
}
17537
17538
static inline __ATTRS_o_ai vector unsigned char
17539
vec_reve(vector unsigned char __a) {
17540
return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
17541
5, 4, 3, 2, 1, 0);
17542
}
17543
17544
static inline __ATTRS_o_ai vector bool int vec_reve(vector bool int __a) {
17545
return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
17546
}
17547
17548
static inline __ATTRS_o_ai vector signed int vec_reve(vector signed int __a) {
17549
return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
17550
}
17551
17552
static inline __ATTRS_o_ai vector unsigned int
17553
vec_reve(vector unsigned int __a) {
17554
return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
17555
}
17556
17557
static inline __ATTRS_o_ai vector bool short vec_reve(vector bool short __a) {
17558
return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
17559
}
17560
17561
static inline __ATTRS_o_ai vector signed short
17562
vec_reve(vector signed short __a) {
17563
return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
17564
}
17565
17566
static inline __ATTRS_o_ai vector unsigned short
17567
vec_reve(vector unsigned short __a) {
17568
return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
17569
}
17570
17571
static inline __ATTRS_o_ai vector float vec_reve(vector float __a) {
17572
return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
17573
}
17574
17575
#ifdef __VSX__
17576
static inline __ATTRS_o_ai vector bool long long
17577
vec_reve(vector bool long long __a) {
17578
return __builtin_shufflevector(__a, __a, 1, 0);
17579
}
17580
17581
static inline __ATTRS_o_ai vector signed long long
17582
vec_reve(vector signed long long __a) {
17583
return __builtin_shufflevector(__a, __a, 1, 0);
17584
}
17585
17586
static inline __ATTRS_o_ai vector unsigned long long
17587
vec_reve(vector unsigned long long __a) {
17588
return __builtin_shufflevector(__a, __a, 1, 0);
17589
}
17590
17591
static inline __ATTRS_o_ai vector double vec_reve(vector double __a) {
17592
return __builtin_shufflevector(__a, __a, 1, 0);
17593
}
17594
#endif
17595
17596
/* vec_revb */
17597
static __inline__ vector bool char __ATTRS_o_ai
17598
vec_revb(vector bool char __a) {
17599
return __a;
17600
}
17601
17602
static __inline__ vector signed char __ATTRS_o_ai
17603
vec_revb(vector signed char __a) {
17604
return __a;
17605
}
17606
17607
static __inline__ vector unsigned char __ATTRS_o_ai
17608
vec_revb(vector unsigned char __a) {
17609
return __a;
17610
}
17611
17612
static __inline__ vector bool short __ATTRS_o_ai
17613
vec_revb(vector bool short __a) {
17614
vector unsigned char __indices =
17615
{ 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
17616
return vec_perm(__a, __a, __indices);
17617
}
17618
17619
static __inline__ vector signed short __ATTRS_o_ai
17620
vec_revb(vector signed short __a) {
17621
vector unsigned char __indices =
17622
{ 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
17623
return vec_perm(__a, __a, __indices);
17624
}
17625
17626
static __inline__ vector unsigned short __ATTRS_o_ai
17627
vec_revb(vector unsigned short __a) {
17628
vector unsigned char __indices =
17629
{ 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
17630
return vec_perm(__a, __a, __indices);
17631
}
17632
17633
static __inline__ vector bool int __ATTRS_o_ai
17634
vec_revb(vector bool int __a) {
17635
vector unsigned char __indices =
17636
{ 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
17637
return vec_perm(__a, __a, __indices);
17638
}
17639
17640
static __inline__ vector signed int __ATTRS_o_ai
17641
vec_revb(vector signed int __a) {
17642
vector unsigned char __indices =
17643
{ 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
17644
return vec_perm(__a, __a, __indices);
17645
}
17646
17647
static __inline__ vector unsigned int __ATTRS_o_ai
17648
vec_revb(vector unsigned int __a) {
17649
vector unsigned char __indices =
17650
{ 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
17651
return vec_perm(__a, __a, __indices);
17652
}
17653
17654
static __inline__ vector float __ATTRS_o_ai
17655
vec_revb(vector float __a) {
17656
vector unsigned char __indices =
17657
{ 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
17658
return vec_perm(__a, __a, __indices);
17659
}
17660
17661
#ifdef __VSX__
17662
static __inline__ vector bool long long __ATTRS_o_ai
17663
vec_revb(vector bool long long __a) {
17664
vector unsigned char __indices =
17665
{ 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
17666
return vec_perm(__a, __a, __indices);
17667
}
17668
17669
static __inline__ vector signed long long __ATTRS_o_ai
17670
vec_revb(vector signed long long __a) {
17671
vector unsigned char __indices =
17672
{ 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
17673
return vec_perm(__a, __a, __indices);
17674
}
17675
17676
static __inline__ vector unsigned long long __ATTRS_o_ai
17677
vec_revb(vector unsigned long long __a) {
17678
vector unsigned char __indices =
17679
{ 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
17680
return vec_perm(__a, __a, __indices);
17681
}
17682
17683
static __inline__ vector double __ATTRS_o_ai
17684
vec_revb(vector double __a) {
17685
vector unsigned char __indices =
17686
{ 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
17687
return vec_perm(__a, __a, __indices);
17688
}
17689
#endif /* End __VSX__ */
17690
17691
#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
17692
defined(__SIZEOF_INT128__)
17693
static __inline__ vector signed __int128 __ATTRS_o_ai
17694
vec_revb(vector signed __int128 __a) {
17695
vector unsigned char __indices =
17696
{ 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
17697
return (vector signed __int128)vec_perm((vector signed int)__a,
17698
(vector signed int)__a,
17699
__indices);
17700
}
17701
17702
static __inline__ vector unsigned __int128 __ATTRS_o_ai
17703
vec_revb(vector unsigned __int128 __a) {
17704
vector unsigned char __indices =
17705
{ 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
17706
return (vector unsigned __int128)vec_perm((vector signed int)__a,
17707
(vector signed int)__a,
17708
__indices);
17709
}
17710
#endif /* END __POWER8_VECTOR__ && __powerpc64__ */
17711
17712
/* vec_xl */
17713
17714
#define vec_xld2 vec_xl
17715
#define vec_xlw4 vec_xl
17716
typedef vector signed char unaligned_vec_schar __attribute__((aligned(1)));
17717
typedef vector unsigned char unaligned_vec_uchar __attribute__((aligned(1)));
17718
typedef vector signed short unaligned_vec_sshort __attribute__((aligned(1)));
17719
typedef vector unsigned short unaligned_vec_ushort __attribute__((aligned(1)));
17720
typedef vector signed int unaligned_vec_sint __attribute__((aligned(1)));
17721
typedef vector unsigned int unaligned_vec_uint __attribute__((aligned(1)));
17722
typedef vector float unaligned_vec_float __attribute__((aligned(1)));
17723
17724
static inline __ATTRS_o_ai vector signed char vec_xl(ptrdiff_t __offset,
17725
const signed char *__ptr) {
17726
return *(unaligned_vec_schar *)(__ptr + __offset);
17727
}
17728
17729
static inline __ATTRS_o_ai vector unsigned char
17730
vec_xl(ptrdiff_t __offset, const unsigned char *__ptr) {
17731
return *(unaligned_vec_uchar*)(__ptr + __offset);
17732
}
17733
17734
static inline __ATTRS_o_ai vector signed short
17735
vec_xl(ptrdiff_t __offset, const signed short *__ptr) {
17736
signed char *__addr = (signed char *)__ptr + __offset;
17737
return *(unaligned_vec_sshort *)__addr;
17738
}
17739
17740
static inline __ATTRS_o_ai vector unsigned short
17741
vec_xl(ptrdiff_t __offset, const unsigned short *__ptr) {
17742
signed char *__addr = (signed char *)__ptr + __offset;
17743
return *(unaligned_vec_ushort *)__addr;
17744
}
17745
17746
static inline __ATTRS_o_ai vector signed int vec_xl(ptrdiff_t __offset,
17747
const signed int *__ptr) {
17748
signed char *__addr = (signed char *)__ptr + __offset;
17749
return *(unaligned_vec_sint *)__addr;
17750
}
17751
17752
static inline __ATTRS_o_ai vector unsigned int
17753
vec_xl(ptrdiff_t __offset, const unsigned int *__ptr) {
17754
signed char *__addr = (signed char *)__ptr + __offset;
17755
return *(unaligned_vec_uint *)__addr;
17756
}
17757
17758
static inline __ATTRS_o_ai vector float vec_xl(ptrdiff_t __offset,
17759
const float *__ptr) {
17760
signed char *__addr = (signed char *)__ptr + __offset;
17761
return *(unaligned_vec_float *)__addr;
17762
}
17763
17764
#ifdef __VSX__
17765
typedef vector signed long long unaligned_vec_sll __attribute__((aligned(1)));
17766
typedef vector unsigned long long unaligned_vec_ull __attribute__((aligned(1)));
17767
typedef vector double unaligned_vec_double __attribute__((aligned(1)));
17768
17769
static inline __ATTRS_o_ai vector signed long long
17770
vec_xl(ptrdiff_t __offset, const signed long long *__ptr) {
17771
signed char *__addr = (signed char *)__ptr + __offset;
17772
return *(unaligned_vec_sll *)__addr;
17773
}
17774
17775
static inline __ATTRS_o_ai vector unsigned long long
17776
vec_xl(ptrdiff_t __offset, const unsigned long long *__ptr) {
17777
signed char *__addr = (signed char *)__ptr + __offset;
17778
return *(unaligned_vec_ull *)__addr;
17779
}
17780
17781
static inline __ATTRS_o_ai vector double vec_xl(ptrdiff_t __offset,
17782
const double *__ptr) {
17783
signed char *__addr = (signed char *)__ptr + __offset;
17784
return *(unaligned_vec_double *)__addr;
17785
}
17786
#endif
17787
17788
#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
17789
defined(__SIZEOF_INT128__)
17790
typedef vector signed __int128 unaligned_vec_si128 __attribute__((aligned(1)));
17791
typedef vector unsigned __int128 unaligned_vec_ui128
17792
__attribute__((aligned(1)));
17793
static inline __ATTRS_o_ai vector signed __int128
17794
vec_xl(ptrdiff_t __offset, const signed __int128 *__ptr) {
17795
signed char *__addr = (signed char *)__ptr + __offset;
17796
return *(unaligned_vec_si128 *)__addr;
17797
}
17798
17799
static inline __ATTRS_o_ai vector unsigned __int128
17800
vec_xl(ptrdiff_t __offset, const unsigned __int128 *__ptr) {
17801
signed char *__addr = (signed char *)__ptr + __offset;
17802
return *(unaligned_vec_ui128 *)__addr;
17803
}
17804
#endif
17805
17806
/* vec_xl_be */
17807
17808
#ifdef __LITTLE_ENDIAN__
17809
static __inline__ vector signed char __ATTRS_o_ai
17810
vec_xl_be(ptrdiff_t __offset, const signed char *__ptr) {
17811
vector signed char __vec = (vector signed char)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17812
return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
17813
13, 12, 11, 10, 9, 8);
17814
}
17815
17816
static __inline__ vector unsigned char __ATTRS_o_ai
17817
vec_xl_be(ptrdiff_t __offset, const unsigned char *__ptr) {
17818
vector unsigned char __vec = (vector unsigned char)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17819
return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
17820
13, 12, 11, 10, 9, 8);
17821
}
17822
17823
static __inline__ vector signed short __ATTRS_o_ai
17824
vec_xl_be(ptrdiff_t __offset, const signed short *__ptr) {
17825
vector signed short __vec = (vector signed short)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17826
return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
17827
}
17828
17829
static __inline__ vector unsigned short __ATTRS_o_ai
17830
vec_xl_be(ptrdiff_t __offset, const unsigned short *__ptr) {
17831
vector unsigned short __vec = (vector unsigned short)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17832
return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
17833
}
17834
17835
static __inline__ vector signed int __ATTRS_o_ai
17836
vec_xl_be(signed long long __offset, const signed int *__ptr) {
17837
return (vector signed int)__builtin_vsx_lxvw4x_be(__offset, __ptr);
17838
}
17839
17840
static __inline__ vector unsigned int __ATTRS_o_ai
17841
vec_xl_be(signed long long __offset, const unsigned int *__ptr) {
17842
return (vector unsigned int)__builtin_vsx_lxvw4x_be(__offset, __ptr);
17843
}
17844
17845
static __inline__ vector float __ATTRS_o_ai
17846
vec_xl_be(signed long long __offset, const float *__ptr) {
17847
return (vector float)__builtin_vsx_lxvw4x_be(__offset, __ptr);
17848
}
17849
17850
#ifdef __VSX__
17851
static __inline__ vector signed long long __ATTRS_o_ai
17852
vec_xl_be(signed long long __offset, const signed long long *__ptr) {
17853
return (vector signed long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17854
}
17855
17856
static __inline__ vector unsigned long long __ATTRS_o_ai
17857
vec_xl_be(signed long long __offset, const unsigned long long *__ptr) {
17858
return (vector unsigned long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17859
}
17860
17861
static __inline__ vector double __ATTRS_o_ai
17862
vec_xl_be(signed long long __offset, const double *__ptr) {
17863
return (vector double)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17864
}
17865
#endif
17866
17867
#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
17868
defined(__SIZEOF_INT128__)
17869
static __inline__ vector signed __int128 __ATTRS_o_ai
17870
vec_xl_be(signed long long __offset, const signed __int128 *__ptr) {
17871
return vec_xl(__offset, __ptr);
17872
}
17873
17874
static __inline__ vector unsigned __int128 __ATTRS_o_ai
17875
vec_xl_be(signed long long __offset, const unsigned __int128 *__ptr) {
17876
return vec_xl(__offset, __ptr);
17877
}
17878
#endif
17879
#else
17880
#define vec_xl_be vec_xl
17881
#endif
17882
17883
#if defined(__POWER10_VECTOR__) && defined(__VSX__) && \
17884
defined(__SIZEOF_INT128__)
17885
17886
/* vec_xl_sext */
17887
17888
static __inline__ vector signed __int128 __ATTRS_o_ai
17889
vec_xl_sext(ptrdiff_t __offset, const signed char *__pointer) {
17890
return (vector signed __int128)*(__pointer + __offset);
17891
}
17892
17893
static __inline__ vector signed __int128 __ATTRS_o_ai
17894
vec_xl_sext(ptrdiff_t __offset, const signed short *__pointer) {
17895
return (vector signed __int128)*(__pointer + __offset);
17896
}
17897
17898
static __inline__ vector signed __int128 __ATTRS_o_ai
17899
vec_xl_sext(ptrdiff_t __offset, const signed int *__pointer) {
17900
return (vector signed __int128)*(__pointer + __offset);
17901
}
17902
17903
static __inline__ vector signed __int128 __ATTRS_o_ai
17904
vec_xl_sext(ptrdiff_t __offset, const signed long long *__pointer) {
17905
return (vector signed __int128)*(__pointer + __offset);
17906
}
17907
17908
/* vec_xl_zext */
17909
17910
static __inline__ vector unsigned __int128 __ATTRS_o_ai
17911
vec_xl_zext(ptrdiff_t __offset, const unsigned char *__pointer) {
17912
return (vector unsigned __int128)*(__pointer + __offset);
17913
}
17914
17915
static __inline__ vector unsigned __int128 __ATTRS_o_ai
17916
vec_xl_zext(ptrdiff_t __offset, const unsigned short *__pointer) {
17917
return (vector unsigned __int128)*(__pointer + __offset);
17918
}
17919
17920
static __inline__ vector unsigned __int128 __ATTRS_o_ai
17921
vec_xl_zext(ptrdiff_t __offset, const unsigned int *__pointer) {
17922
return (vector unsigned __int128)*(__pointer + __offset);
17923
}
17924
17925
static __inline__ vector unsigned __int128 __ATTRS_o_ai
17926
vec_xl_zext(ptrdiff_t __offset, const unsigned long long *__pointer) {
17927
return (vector unsigned __int128)*(__pointer + __offset);
17928
}
17929
17930
#endif
17931
17932
/* vec_xlds */
17933
#ifdef __VSX__
17934
static __inline__ vector signed long long __ATTRS_o_ai
17935
vec_xlds(ptrdiff_t __offset, const signed long long *__ptr) {
17936
signed long long *__addr = (signed long long*)((signed char *)__ptr + __offset);
17937
return (vector signed long long) *__addr;
17938
}
17939
17940
static __inline__ vector unsigned long long __ATTRS_o_ai
17941
vec_xlds(ptrdiff_t __offset, const unsigned long long *__ptr) {
17942
unsigned long long *__addr = (unsigned long long *)((signed char *)__ptr + __offset);
17943
return (unaligned_vec_ull) *__addr;
17944
}
17945
17946
static __inline__ vector double __ATTRS_o_ai vec_xlds(ptrdiff_t __offset,
17947
const double *__ptr) {
17948
double *__addr = (double*)((signed char *)__ptr + __offset);
17949
return (unaligned_vec_double) *__addr;
17950
}
17951
17952
/* vec_load_splats */
17953
static __inline__ vector signed int __ATTRS_o_ai
17954
vec_load_splats(signed long long __offset, const signed int *__ptr) {
17955
signed int *__addr = (signed int*)((signed char *)__ptr + __offset);
17956
return (vector signed int)*__addr;
17957
}
17958
17959
static __inline__ vector signed int __ATTRS_o_ai
17960
vec_load_splats(unsigned long long __offset, const signed int *__ptr) {
17961
signed int *__addr = (signed int*)((signed char *)__ptr + __offset);
17962
return (vector signed int)*__addr;
17963
}
17964
17965
static __inline__ vector unsigned int __ATTRS_o_ai
17966
vec_load_splats(signed long long __offset, const unsigned int *__ptr) {
17967
unsigned int *__addr = (unsigned int*)((signed char *)__ptr + __offset);
17968
return (vector unsigned int)*__addr;
17969
}
17970
17971
static __inline__ vector unsigned int __ATTRS_o_ai
17972
vec_load_splats(unsigned long long __offset, const unsigned int *__ptr) {
17973
unsigned int *__addr = (unsigned int*)((signed char *)__ptr + __offset);
17974
return (vector unsigned int)*__addr;
17975
}
17976
17977
static __inline__ vector float __ATTRS_o_ai
17978
vec_load_splats(signed long long __offset, const float *__ptr) {
17979
float *__addr = (float*)((signed char *)__ptr + __offset);
17980
return (vector float)*__addr;
17981
}
17982
17983
static __inline__ vector float __ATTRS_o_ai
17984
vec_load_splats(unsigned long long __offset, const float *__ptr) {
17985
float *__addr = (float*)((signed char *)__ptr + __offset);
17986
return (vector float)*__addr;
17987
}
17988
#endif
17989
17990
/* vec_xst */
17991
17992
#define vec_xstd2 vec_xst
17993
#define vec_xstw4 vec_xst
17994
static inline __ATTRS_o_ai void
17995
vec_xst(vector signed char __vec, ptrdiff_t __offset, signed char *__ptr) {
17996
*(unaligned_vec_schar *)(__ptr + __offset) = __vec;
17997
}
17998
17999
static inline __ATTRS_o_ai void
18000
vec_xst(vector unsigned char __vec, ptrdiff_t __offset, unsigned char *__ptr) {
18001
*(unaligned_vec_uchar *)(__ptr + __offset) = __vec;
18002
}
18003
18004
static inline __ATTRS_o_ai void
18005
vec_xst(vector signed short __vec, ptrdiff_t __offset, signed short *__ptr) {
18006
signed char *__addr = (signed char *)__ptr + __offset;
18007
*(unaligned_vec_sshort *)__addr = __vec;
18008
}
18009
18010
static inline __ATTRS_o_ai void vec_xst(vector unsigned short __vec,
18011
ptrdiff_t __offset,
18012
unsigned short *__ptr) {
18013
signed char *__addr = (signed char *)__ptr + __offset;
18014
*(unaligned_vec_ushort *)__addr = __vec;
18015
}
18016
18017
static inline __ATTRS_o_ai void vec_xst(vector signed int __vec,
18018
ptrdiff_t __offset, signed int *__ptr) {
18019
signed char *__addr = (signed char *)__ptr + __offset;
18020
*(unaligned_vec_sint *)__addr = __vec;
18021
}
18022
18023
static inline __ATTRS_o_ai void
18024
vec_xst(vector unsigned int __vec, ptrdiff_t __offset, unsigned int *__ptr) {
18025
signed char *__addr = (signed char *)__ptr + __offset;
18026
*(unaligned_vec_uint *)__addr = __vec;
18027
}
18028
18029
static inline __ATTRS_o_ai void vec_xst(vector float __vec, ptrdiff_t __offset,
18030
float *__ptr) {
18031
signed char *__addr = (signed char *)__ptr + __offset;
18032
*(unaligned_vec_float *)__addr = __vec;
18033
}
18034
18035
#ifdef __VSX__
18036
static inline __ATTRS_o_ai void vec_xst(vector signed long long __vec,
18037
ptrdiff_t __offset,
18038
signed long long *__ptr) {
18039
signed char *__addr = (signed char *)__ptr + __offset;
18040
*(unaligned_vec_sll *)__addr = __vec;
18041
}
18042
18043
static inline __ATTRS_o_ai void vec_xst(vector unsigned long long __vec,
18044
ptrdiff_t __offset,
18045
unsigned long long *__ptr) {
18046
signed char *__addr = (signed char *)__ptr + __offset;
18047
*(unaligned_vec_ull *)__addr = __vec;
18048
}
18049
18050
static inline __ATTRS_o_ai void vec_xst(vector double __vec, ptrdiff_t __offset,
18051
double *__ptr) {
18052
signed char *__addr = (signed char *)__ptr + __offset;
18053
*(unaligned_vec_double *)__addr = __vec;
18054
}
18055
#endif
18056
18057
#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
18058
defined(__SIZEOF_INT128__)
18059
static inline __ATTRS_o_ai void vec_xst(vector signed __int128 __vec,
18060
ptrdiff_t __offset,
18061
signed __int128 *__ptr) {
18062
signed char *__addr = (signed char *)__ptr + __offset;
18063
*(unaligned_vec_si128 *)__addr = __vec;
18064
}
18065
18066
static inline __ATTRS_o_ai void vec_xst(vector unsigned __int128 __vec,
18067
ptrdiff_t __offset,
18068
unsigned __int128 *__ptr) {
18069
signed char *__addr = (signed char *)__ptr + __offset;
18070
*(unaligned_vec_ui128 *)__addr = __vec;
18071
}
18072
#endif
18073
18074
/* vec_xst_trunc */
18075
18076
#if defined(__POWER10_VECTOR__) && defined(__VSX__) && \
18077
defined(__SIZEOF_INT128__)
18078
static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
18079
ptrdiff_t __offset,
18080
signed char *__ptr) {
18081
*(__ptr + __offset) = (signed char)__vec[0];
18082
}
18083
18084
static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
18085
ptrdiff_t __offset,
18086
unsigned char *__ptr) {
18087
*(__ptr + __offset) = (unsigned char)__vec[0];
18088
}
18089
18090
static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
18091
ptrdiff_t __offset,
18092
signed short *__ptr) {
18093
*(__ptr + __offset) = (signed short)__vec[0];
18094
}
18095
18096
static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
18097
ptrdiff_t __offset,
18098
unsigned short *__ptr) {
18099
*(__ptr + __offset) = (unsigned short)__vec[0];
18100
}
18101
18102
static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
18103
ptrdiff_t __offset,
18104
signed int *__ptr) {
18105
*(__ptr + __offset) = (signed int)__vec[0];
18106
}
18107
18108
static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
18109
ptrdiff_t __offset,
18110
unsigned int *__ptr) {
18111
*(__ptr + __offset) = (unsigned int)__vec[0];
18112
}
18113
18114
static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
18115
ptrdiff_t __offset,
18116
signed long long *__ptr) {
18117
*(__ptr + __offset) = (signed long long)__vec[0];
18118
}
18119
18120
static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
18121
ptrdiff_t __offset,
18122
unsigned long long *__ptr) {
18123
*(__ptr + __offset) = (unsigned long long)__vec[0];
18124
}
18125
#endif
18126
18127
/* vec_xst_be */
18128
18129
#ifdef __LITTLE_ENDIAN__
18130
static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed char __vec,
18131
signed long long __offset,
18132
signed char *__ptr) {
18133
vector signed char __tmp =
18134
__builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
18135
13, 12, 11, 10, 9, 8);
18136
typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
18137
__builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
18138
}
18139
18140
static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned char __vec,
18141
signed long long __offset,
18142
unsigned char *__ptr) {
18143
vector unsigned char __tmp =
18144
__builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
18145
13, 12, 11, 10, 9, 8);
18146
typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
18147
__builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
18148
}
18149
18150
static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed short __vec,
18151
signed long long __offset,
18152
signed short *__ptr) {
18153
vector signed short __tmp =
18154
__builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
18155
typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
18156
__builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
18157
}
18158
18159
static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned short __vec,
18160
signed long long __offset,
18161
unsigned short *__ptr) {
18162
vector unsigned short __tmp =
18163
__builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
18164
typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
18165
__builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
18166
}
18167
18168
static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed int __vec,
18169
signed long long __offset,
18170
signed int *__ptr) {
18171
__builtin_vsx_stxvw4x_be(__vec, __offset, __ptr);
18172
}
18173
18174
static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned int __vec,
18175
signed long long __offset,
18176
unsigned int *__ptr) {
18177
__builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);
18178
}
18179
18180
static __inline__ void __ATTRS_o_ai vec_xst_be(vector float __vec,
18181
signed long long __offset,
18182
float *__ptr) {
18183
__builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);
18184
}
18185
18186
#ifdef __VSX__
18187
static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed long long __vec,
18188
signed long long __offset,
18189
signed long long *__ptr) {
18190
__builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
18191
}
18192
18193
static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned long long __vec,
18194
signed long long __offset,
18195
unsigned long long *__ptr) {
18196
__builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
18197
}
18198
18199
static __inline__ void __ATTRS_o_ai vec_xst_be(vector double __vec,
18200
signed long long __offset,
18201
double *__ptr) {
18202
__builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
18203
}
18204
#endif
18205
18206
#if defined(__POWER8_VECTOR__) && defined(__powerpc64__) && \
18207
defined(__SIZEOF_INT128__)
18208
static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed __int128 __vec,
18209
signed long long __offset,
18210
signed __int128 *__ptr) {
18211
vec_xst(__vec, __offset, __ptr);
18212
}
18213
18214
static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned __int128 __vec,
18215
signed long long __offset,
18216
unsigned __int128 *__ptr) {
18217
vec_xst(__vec, __offset, __ptr);
18218
}
18219
#endif
18220
#else
18221
#define vec_xst_be vec_xst
18222
#endif
18223
18224
#ifdef __POWER9_VECTOR__
18225
#define vec_test_data_class(__a, __b) \
18226
_Generic( \
18227
(__a), vector float \
18228
: (vector bool int)__builtin_vsx_xvtstdcsp((vector float)(__a), (__b)), \
18229
vector double \
18230
: (vector bool long long)__builtin_vsx_xvtstdcdp((vector double)(__a), \
18231
(__b)))
18232
18233
#endif /* #ifdef __POWER9_VECTOR__ */
18234
18235
static vector float __ATTRS_o_ai vec_neg(vector float __a) {
18236
return -__a;
18237
}
18238
18239
#ifdef __VSX__
18240
static vector double __ATTRS_o_ai vec_neg(vector double __a) {
18241
return -__a;
18242
}
18243
18244
#endif
18245
18246
#ifdef __VSX__
18247
static vector long long __ATTRS_o_ai vec_neg(vector long long __a) {
18248
return -__a;
18249
}
18250
#endif
18251
18252
static vector signed int __ATTRS_o_ai vec_neg(vector signed int __a) {
18253
return -__a;
18254
}
18255
18256
static vector signed short __ATTRS_o_ai vec_neg(vector signed short __a) {
18257
return -__a;
18258
}
18259
18260
static vector signed char __ATTRS_o_ai vec_neg(vector signed char __a) {
18261
return -__a;
18262
}
18263
18264
static vector float __ATTRS_o_ai vec_nabs(vector float __a) {
18265
return - vec_abs(__a);
18266
}
18267
18268
#ifdef __VSX__
18269
static vector double __ATTRS_o_ai vec_nabs(vector double __a) {
18270
return - vec_abs(__a);
18271
}
18272
18273
#endif
18274
18275
#ifdef __POWER8_VECTOR__
18276
static vector long long __ATTRS_o_ai vec_nabs(vector long long __a) {
18277
return __builtin_altivec_vminsd(__a, -__a);
18278
}
18279
#endif
18280
18281
static vector signed int __ATTRS_o_ai vec_nabs(vector signed int __a) {
18282
return __builtin_altivec_vminsw(__a, -__a);
18283
}
18284
18285
static vector signed short __ATTRS_o_ai vec_nabs(vector signed short __a) {
18286
return __builtin_altivec_vminsh(__a, -__a);
18287
}
18288
18289
static vector signed char __ATTRS_o_ai vec_nabs(vector signed char __a) {
18290
return __builtin_altivec_vminsb(__a, -__a);
18291
}
18292
18293
static vector float __ATTRS_o_ai vec_recipdiv(vector float __a,
18294
vector float __b) {
18295
return __builtin_ppc_recipdivf(__a, __b);
18296
}
18297
18298
#ifdef __VSX__
18299
static vector double __ATTRS_o_ai vec_recipdiv(vector double __a,
18300
vector double __b) {
18301
return __builtin_ppc_recipdivd(__a, __b);
18302
}
18303
#endif
18304
18305
#ifdef __POWER10_VECTOR__
18306
18307
/* vec_extractm */
18308
18309
static __inline__ unsigned int __ATTRS_o_ai
18310
vec_extractm(vector unsigned char __a) {
18311
return __builtin_altivec_vextractbm(__a);
18312
}
18313
18314
static __inline__ unsigned int __ATTRS_o_ai
18315
vec_extractm(vector unsigned short __a) {
18316
return __builtin_altivec_vextracthm(__a);
18317
}
18318
18319
static __inline__ unsigned int __ATTRS_o_ai
18320
vec_extractm(vector unsigned int __a) {
18321
return __builtin_altivec_vextractwm(__a);
18322
}
18323
18324
static __inline__ unsigned int __ATTRS_o_ai
18325
vec_extractm(vector unsigned long long __a) {
18326
return __builtin_altivec_vextractdm(__a);
18327
}
18328
18329
#ifdef __SIZEOF_INT128__
18330
static __inline__ unsigned int __ATTRS_o_ai
18331
vec_extractm(vector unsigned __int128 __a) {
18332
return __builtin_altivec_vextractqm(__a);
18333
}
18334
#endif
18335
18336
/* vec_expandm */
18337
18338
static __inline__ vector unsigned char __ATTRS_o_ai
18339
vec_expandm(vector unsigned char __a) {
18340
return __builtin_altivec_vexpandbm(__a);
18341
}
18342
18343
static __inline__ vector unsigned short __ATTRS_o_ai
18344
vec_expandm(vector unsigned short __a) {
18345
return __builtin_altivec_vexpandhm(__a);
18346
}
18347
18348
static __inline__ vector unsigned int __ATTRS_o_ai
18349
vec_expandm(vector unsigned int __a) {
18350
return __builtin_altivec_vexpandwm(__a);
18351
}
18352
18353
static __inline__ vector unsigned long long __ATTRS_o_ai
18354
vec_expandm(vector unsigned long long __a) {
18355
return __builtin_altivec_vexpanddm(__a);
18356
}
18357
18358
#ifdef __SIZEOF_INT128__
18359
static __inline__ vector unsigned __int128 __ATTRS_o_ai
18360
vec_expandm(vector unsigned __int128 __a) {
18361
return __builtin_altivec_vexpandqm(__a);
18362
}
18363
#endif
18364
18365
/* vec_cntm */
18366
18367
#define vec_cntm(__a, __mp) \
18368
_Generic((__a), vector unsigned char \
18369
: __builtin_altivec_vcntmbb((vector unsigned char)(__a), \
18370
(unsigned char)(__mp)), \
18371
vector unsigned short \
18372
: __builtin_altivec_vcntmbh((vector unsigned short)(__a), \
18373
(unsigned char)(__mp)), \
18374
vector unsigned int \
18375
: __builtin_altivec_vcntmbw((vector unsigned int)(__a), \
18376
(unsigned char)(__mp)), \
18377
vector unsigned long long \
18378
: __builtin_altivec_vcntmbd((vector unsigned long long)(__a), \
18379
(unsigned char)(__mp)))
18380
18381
/* vec_gen[b|h|w|d|q]m */
18382
18383
static __inline__ vector unsigned char __ATTRS_o_ai
18384
vec_genbm(unsigned long long __bm) {
18385
return __builtin_altivec_mtvsrbm(__bm);
18386
}
18387
18388
static __inline__ vector unsigned short __ATTRS_o_ai
18389
vec_genhm(unsigned long long __bm) {
18390
return __builtin_altivec_mtvsrhm(__bm);
18391
}
18392
18393
static __inline__ vector unsigned int __ATTRS_o_ai
18394
vec_genwm(unsigned long long __bm) {
18395
return __builtin_altivec_mtvsrwm(__bm);
18396
}
18397
18398
static __inline__ vector unsigned long long __ATTRS_o_ai
18399
vec_gendm(unsigned long long __bm) {
18400
return __builtin_altivec_mtvsrdm(__bm);
18401
}
18402
18403
#ifdef __SIZEOF_INT128__
18404
static __inline__ vector unsigned __int128 __ATTRS_o_ai
18405
vec_genqm(unsigned long long __bm) {
18406
return __builtin_altivec_mtvsrqm(__bm);
18407
}
18408
#endif
18409
18410
/* vec_pdep */
18411
18412
static __inline__ vector unsigned long long __ATTRS_o_ai
18413
vec_pdep(vector unsigned long long __a, vector unsigned long long __b) {
18414
return __builtin_altivec_vpdepd(__a, __b);
18415
}
18416
18417
/* vec_pext */
18418
18419
static __inline__ vector unsigned long long __ATTRS_o_ai
18420
vec_pext(vector unsigned long long __a, vector unsigned long long __b) {
18421
return __builtin_altivec_vpextd(__a, __b);
18422
}
18423
18424
/* vec_cfuge */
18425
18426
static __inline__ vector unsigned long long __ATTRS_o_ai
18427
vec_cfuge(vector unsigned long long __a, vector unsigned long long __b) {
18428
return __builtin_altivec_vcfuged(__a, __b);
18429
}
18430
18431
/* vec_gnb */
18432
18433
#define vec_gnb(__a, __b) __builtin_altivec_vgnb(__a, __b)
18434
18435
/* vec_ternarylogic */
18436
#ifdef __VSX__
18437
#ifdef __SIZEOF_INT128__
18438
#define vec_ternarylogic(__a, __b, __c, __imm) \
18439
_Generic((__a), vector unsigned char \
18440
: (vector unsigned char)__builtin_vsx_xxeval( \
18441
(vector unsigned long long)(__a), \
18442
(vector unsigned long long)(__b), \
18443
(vector unsigned long long)(__c), (__imm)), \
18444
vector unsigned short \
18445
: (vector unsigned short)__builtin_vsx_xxeval( \
18446
(vector unsigned long long)(__a), \
18447
(vector unsigned long long)(__b), \
18448
(vector unsigned long long)(__c), (__imm)), \
18449
vector unsigned int \
18450
: (vector unsigned int)__builtin_vsx_xxeval( \
18451
(vector unsigned long long)(__a), \
18452
(vector unsigned long long)(__b), \
18453
(vector unsigned long long)(__c), (__imm)), \
18454
vector unsigned long long \
18455
: (vector unsigned long long)__builtin_vsx_xxeval( \
18456
(vector unsigned long long)(__a), \
18457
(vector unsigned long long)(__b), \
18458
(vector unsigned long long)(__c), (__imm)), \
18459
vector unsigned __int128 \
18460
: (vector unsigned __int128)__builtin_vsx_xxeval( \
18461
(vector unsigned long long)(__a), \
18462
(vector unsigned long long)(__b), \
18463
(vector unsigned long long)(__c), (__imm)))
18464
#else
18465
#define vec_ternarylogic(__a, __b, __c, __imm) \
18466
_Generic((__a), vector unsigned char \
18467
: (vector unsigned char)__builtin_vsx_xxeval( \
18468
(vector unsigned long long)(__a), \
18469
(vector unsigned long long)(__b), \
18470
(vector unsigned long long)(__c), (__imm)), \
18471
vector unsigned short \
18472
: (vector unsigned short)__builtin_vsx_xxeval( \
18473
(vector unsigned long long)(__a), \
18474
(vector unsigned long long)(__b), \
18475
(vector unsigned long long)(__c), (__imm)), \
18476
vector unsigned int \
18477
: (vector unsigned int)__builtin_vsx_xxeval( \
18478
(vector unsigned long long)(__a), \
18479
(vector unsigned long long)(__b), \
18480
(vector unsigned long long)(__c), (__imm)), \
18481
vector unsigned long long \
18482
: (vector unsigned long long)__builtin_vsx_xxeval( \
18483
(vector unsigned long long)(__a), \
18484
(vector unsigned long long)(__b), \
18485
(vector unsigned long long)(__c), (__imm)))
18486
#endif /* __SIZEOF_INT128__ */
18487
#endif /* __VSX__ */
18488
18489
/* vec_genpcvm */
18490
18491
#ifdef __VSX__
18492
#define vec_genpcvm(__a, __imm) \
18493
_Generic( \
18494
(__a), vector unsigned char \
18495
: __builtin_vsx_xxgenpcvbm((vector unsigned char)(__a), (int)(__imm)), \
18496
vector unsigned short \
18497
: __builtin_vsx_xxgenpcvhm((vector unsigned short)(__a), (int)(__imm)), \
18498
vector unsigned int \
18499
: __builtin_vsx_xxgenpcvwm((vector unsigned int)(__a), (int)(__imm)), \
18500
vector unsigned long long \
18501
: __builtin_vsx_xxgenpcvdm((vector unsigned long long)(__a), \
18502
(int)(__imm)))
18503
#endif /* __VSX__ */
18504
18505
/* vec_clr_first */
18506
18507
static __inline__ vector signed char __ATTRS_o_ai
18508
vec_clr_first(vector signed char __a, unsigned int __n) {
18509
#ifdef __LITTLE_ENDIAN__
18510
return (vector signed char)__builtin_altivec_vclrrb((vector unsigned char)__a,
18511
__n);
18512
#else
18513
return (vector signed char)__builtin_altivec_vclrlb((vector unsigned char)__a,
18514
__n);
18515
#endif
18516
}
18517
18518
static __inline__ vector unsigned char __ATTRS_o_ai
18519
vec_clr_first(vector unsigned char __a, unsigned int __n) {
18520
#ifdef __LITTLE_ENDIAN__
18521
return (vector unsigned char)__builtin_altivec_vclrrb(
18522
(vector unsigned char)__a, __n);
18523
#else
18524
return (vector unsigned char)__builtin_altivec_vclrlb(
18525
(vector unsigned char)__a, __n);
18526
#endif
18527
}
18528
18529
/* vec_clr_last */
18530
18531
static __inline__ vector signed char __ATTRS_o_ai
18532
vec_clr_last(vector signed char __a, unsigned int __n) {
18533
#ifdef __LITTLE_ENDIAN__
18534
return (vector signed char)__builtin_altivec_vclrlb((vector unsigned char)__a,
18535
__n);
18536
#else
18537
return (vector signed char)__builtin_altivec_vclrrb((vector unsigned char)__a,
18538
__n);
18539
#endif
18540
}
18541
18542
static __inline__ vector unsigned char __ATTRS_o_ai
18543
vec_clr_last(vector unsigned char __a, unsigned int __n) {
18544
#ifdef __LITTLE_ENDIAN__
18545
return (vector unsigned char)__builtin_altivec_vclrlb(
18546
(vector unsigned char)__a, __n);
18547
#else
18548
return (vector unsigned char)__builtin_altivec_vclrrb(
18549
(vector unsigned char)__a, __n);
18550
#endif
18551
}
18552
18553
/* vec_cntlzm */
18554
18555
static __inline__ vector unsigned long long __ATTRS_o_ai
18556
vec_cntlzm(vector unsigned long long __a, vector unsigned long long __b) {
18557
return __builtin_altivec_vclzdm(__a, __b);
18558
}
18559
18560
/* vec_cnttzm */
18561
18562
static __inline__ vector unsigned long long __ATTRS_o_ai
18563
vec_cnttzm(vector unsigned long long __a, vector unsigned long long __b) {
18564
return __builtin_altivec_vctzdm(__a, __b);
18565
}
18566
18567
/* vec_mod */
18568
18569
static __inline__ vector signed int __ATTRS_o_ai
18570
vec_mod(vector signed int __a, vector signed int __b) {
18571
return __a % __b;
18572
}
18573
18574
static __inline__ vector unsigned int __ATTRS_o_ai
18575
vec_mod(vector unsigned int __a, vector unsigned int __b) {
18576
return __a % __b;
18577
}
18578
18579
static __inline__ vector signed long long __ATTRS_o_ai
18580
vec_mod(vector signed long long __a, vector signed long long __b) {
18581
return __a % __b;
18582
}
18583
18584
static __inline__ vector unsigned long long __ATTRS_o_ai
18585
vec_mod(vector unsigned long long __a, vector unsigned long long __b) {
18586
return __a % __b;
18587
}
18588
18589
#ifdef __SIZEOF_INT128__
18590
static __inline__ vector signed __int128 __ATTRS_o_ai
18591
vec_mod(vector signed __int128 __a, vector signed __int128 __b) {
18592
return __a % __b;
18593
}
18594
18595
static __inline__ vector unsigned __int128 __ATTRS_o_ai
18596
vec_mod(vector unsigned __int128 __a, vector unsigned __int128 __b) {
18597
return __a % __b;
18598
}
18599
#endif
18600
18601
/* vec_sldb */
18602
#define vec_sldb(__a, __b, __c) \
18603
_Generic( \
18604
(__a), vector unsigned char \
18605
: (vector unsigned char)__builtin_altivec_vsldbi( \
18606
(vector unsigned char)__a, (vector unsigned char)__b, \
18607
(__c & 0x7)), \
18608
vector signed char \
18609
: (vector signed char)__builtin_altivec_vsldbi( \
18610
(vector unsigned char)__a, (vector unsigned char)__b, \
18611
(__c & 0x7)), \
18612
vector unsigned short \
18613
: (vector unsigned short)__builtin_altivec_vsldbi( \
18614
(vector unsigned char)__a, (vector unsigned char)__b, \
18615
(__c & 0x7)), \
18616
vector signed short \
18617
: (vector signed short)__builtin_altivec_vsldbi( \
18618
(vector unsigned char)__a, (vector unsigned char)__b, \
18619
(__c & 0x7)), \
18620
vector unsigned int \
18621
: (vector unsigned int)__builtin_altivec_vsldbi( \
18622
(vector unsigned char)__a, (vector unsigned char)__b, \
18623
(__c & 0x7)), \
18624
vector signed int \
18625
: (vector signed int)__builtin_altivec_vsldbi((vector unsigned char)__a, \
18626
(vector unsigned char)__b, \
18627
(__c & 0x7)), \
18628
vector unsigned long long \
18629
: (vector unsigned long long)__builtin_altivec_vsldbi( \
18630
(vector unsigned char)__a, (vector unsigned char)__b, \
18631
(__c & 0x7)), \
18632
vector signed long long \
18633
: (vector signed long long)__builtin_altivec_vsldbi( \
18634
(vector unsigned char)__a, (vector unsigned char)__b, (__c & 0x7)))
18635
18636
/* vec_srdb */
18637
#define vec_srdb(__a, __b, __c) \
18638
_Generic( \
18639
(__a), vector unsigned char \
18640
: (vector unsigned char)__builtin_altivec_vsrdbi( \
18641
(vector unsigned char)__a, (vector unsigned char)__b, \
18642
(__c & 0x7)), \
18643
vector signed char \
18644
: (vector signed char)__builtin_altivec_vsrdbi( \
18645
(vector unsigned char)__a, (vector unsigned char)__b, \
18646
(__c & 0x7)), \
18647
vector unsigned short \
18648
: (vector unsigned short)__builtin_altivec_vsrdbi( \
18649
(vector unsigned char)__a, (vector unsigned char)__b, \
18650
(__c & 0x7)), \
18651
vector signed short \
18652
: (vector signed short)__builtin_altivec_vsrdbi( \
18653
(vector unsigned char)__a, (vector unsigned char)__b, \
18654
(__c & 0x7)), \
18655
vector unsigned int \
18656
: (vector unsigned int)__builtin_altivec_vsrdbi( \
18657
(vector unsigned char)__a, (vector unsigned char)__b, \
18658
(__c & 0x7)), \
18659
vector signed int \
18660
: (vector signed int)__builtin_altivec_vsrdbi((vector unsigned char)__a, \
18661
(vector unsigned char)__b, \
18662
(__c & 0x7)), \
18663
vector unsigned long long \
18664
: (vector unsigned long long)__builtin_altivec_vsrdbi( \
18665
(vector unsigned char)__a, (vector unsigned char)__b, \
18666
(__c & 0x7)), \
18667
vector signed long long \
18668
: (vector signed long long)__builtin_altivec_vsrdbi( \
18669
(vector unsigned char)__a, (vector unsigned char)__b, (__c & 0x7)))
18670
18671
/* vec_insertl */
18672
18673
static __inline__ vector unsigned char __ATTRS_o_ai
18674
vec_insertl(unsigned char __a, vector unsigned char __b, unsigned int __c) {
18675
#ifdef __LITTLE_ENDIAN__
18676
return __builtin_altivec_vinsbrx(__b, __c, __a);
18677
#else
18678
return __builtin_altivec_vinsblx(__b, __c, __a);
18679
#endif
18680
}
18681
18682
static __inline__ vector unsigned short __ATTRS_o_ai
18683
vec_insertl(unsigned short __a, vector unsigned short __b, unsigned int __c) {
18684
#ifdef __LITTLE_ENDIAN__
18685
return __builtin_altivec_vinshrx(__b, __c, __a);
18686
#else
18687
return __builtin_altivec_vinshlx(__b, __c, __a);
18688
#endif
18689
}
18690
18691
static __inline__ vector unsigned int __ATTRS_o_ai
18692
vec_insertl(unsigned int __a, vector unsigned int __b, unsigned int __c) {
18693
#ifdef __LITTLE_ENDIAN__
18694
return __builtin_altivec_vinswrx(__b, __c, __a);
18695
#else
18696
return __builtin_altivec_vinswlx(__b, __c, __a);
18697
#endif
18698
}
18699
18700
static __inline__ vector unsigned long long __ATTRS_o_ai
18701
vec_insertl(unsigned long long __a, vector unsigned long long __b,
18702
unsigned int __c) {
18703
#ifdef __LITTLE_ENDIAN__
18704
return __builtin_altivec_vinsdrx(__b, __c, __a);
18705
#else
18706
return __builtin_altivec_vinsdlx(__b, __c, __a);
18707
#endif
18708
}
18709
18710
static __inline__ vector unsigned char __ATTRS_o_ai
18711
vec_insertl(vector unsigned char __a, vector unsigned char __b,
18712
unsigned int __c) {
18713
#ifdef __LITTLE_ENDIAN__
18714
return __builtin_altivec_vinsbvrx(__b, __c, __a);
18715
#else
18716
return __builtin_altivec_vinsbvlx(__b, __c, __a);
18717
#endif
18718
}
18719
18720
static __inline__ vector unsigned short __ATTRS_o_ai
18721
vec_insertl(vector unsigned short __a, vector unsigned short __b,
18722
unsigned int __c) {
18723
#ifdef __LITTLE_ENDIAN__
18724
return __builtin_altivec_vinshvrx(__b, __c, __a);
18725
#else
18726
return __builtin_altivec_vinshvlx(__b, __c, __a);
18727
#endif
18728
}
18729
18730
static __inline__ vector unsigned int __ATTRS_o_ai
18731
vec_insertl(vector unsigned int __a, vector unsigned int __b,
18732
unsigned int __c) {
18733
#ifdef __LITTLE_ENDIAN__
18734
return __builtin_altivec_vinswvrx(__b, __c, __a);
18735
#else
18736
return __builtin_altivec_vinswvlx(__b, __c, __a);
18737
#endif
18738
}
18739
18740
/* vec_inserth */
18741
18742
static __inline__ vector unsigned char __ATTRS_o_ai
18743
vec_inserth(unsigned char __a, vector unsigned char __b, unsigned int __c) {
18744
#ifdef __LITTLE_ENDIAN__
18745
return __builtin_altivec_vinsblx(__b, __c, __a);
18746
#else
18747
return __builtin_altivec_vinsbrx(__b, __c, __a);
18748
#endif
18749
}
18750
18751
static __inline__ vector unsigned short __ATTRS_o_ai
18752
vec_inserth(unsigned short __a, vector unsigned short __b, unsigned int __c) {
18753
#ifdef __LITTLE_ENDIAN__
18754
return __builtin_altivec_vinshlx(__b, __c, __a);
18755
#else
18756
return __builtin_altivec_vinshrx(__b, __c, __a);
18757
#endif
18758
}
18759
18760
static __inline__ vector unsigned int __ATTRS_o_ai
18761
vec_inserth(unsigned int __a, vector unsigned int __b, unsigned int __c) {
18762
#ifdef __LITTLE_ENDIAN__
18763
return __builtin_altivec_vinswlx(__b, __c, __a);
18764
#else
18765
return __builtin_altivec_vinswrx(__b, __c, __a);
18766
#endif
18767
}
18768
18769
static __inline__ vector unsigned long long __ATTRS_o_ai
18770
vec_inserth(unsigned long long __a, vector unsigned long long __b,
18771
unsigned int __c) {
18772
#ifdef __LITTLE_ENDIAN__
18773
return __builtin_altivec_vinsdlx(__b, __c, __a);
18774
#else
18775
return __builtin_altivec_vinsdrx(__b, __c, __a);
18776
#endif
18777
}
18778
18779
static __inline__ vector unsigned char __ATTRS_o_ai
18780
vec_inserth(vector unsigned char __a, vector unsigned char __b,
18781
unsigned int __c) {
18782
#ifdef __LITTLE_ENDIAN__
18783
return __builtin_altivec_vinsbvlx(__b, __c, __a);
18784
#else
18785
return __builtin_altivec_vinsbvrx(__b, __c, __a);
18786
#endif
18787
}
18788
18789
static __inline__ vector unsigned short __ATTRS_o_ai
18790
vec_inserth(vector unsigned short __a, vector unsigned short __b,
18791
unsigned int __c) {
18792
#ifdef __LITTLE_ENDIAN__
18793
return __builtin_altivec_vinshvlx(__b, __c, __a);
18794
#else
18795
return __builtin_altivec_vinshvrx(__b, __c, __a);
18796
#endif
18797
}
18798
18799
static __inline__ vector unsigned int __ATTRS_o_ai
18800
vec_inserth(vector unsigned int __a, vector unsigned int __b,
18801
unsigned int __c) {
18802
#ifdef __LITTLE_ENDIAN__
18803
return __builtin_altivec_vinswvlx(__b, __c, __a);
18804
#else
18805
return __builtin_altivec_vinswvrx(__b, __c, __a);
18806
#endif
18807
}
18808
18809
/* vec_extractl */
18810
18811
static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
18812
vector unsigned char __a, vector unsigned char __b, unsigned int __c) {
18813
#ifdef __LITTLE_ENDIAN__
18814
return __builtin_altivec_vextdubvrx(__a, __b, __c);
18815
#else
18816
vector unsigned long long __ret = __builtin_altivec_vextdubvlx(__a, __b, __c);
18817
return vec_sld(__ret, __ret, 8);
18818
#endif
18819
}
18820
18821
static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
18822
vector unsigned short __a, vector unsigned short __b, unsigned int __c) {
18823
#ifdef __LITTLE_ENDIAN__
18824
return __builtin_altivec_vextduhvrx(__a, __b, __c);
18825
#else
18826
vector unsigned long long __ret = __builtin_altivec_vextduhvlx(__a, __b, __c);
18827
return vec_sld(__ret, __ret, 8);
18828
#endif
18829
}
18830
18831
static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
18832
vector unsigned int __a, vector unsigned int __b, unsigned int __c) {
18833
#ifdef __LITTLE_ENDIAN__
18834
return __builtin_altivec_vextduwvrx(__a, __b, __c);
18835
#else
18836
vector unsigned long long __ret = __builtin_altivec_vextduwvlx(__a, __b, __c);
18837
return vec_sld(__ret, __ret, 8);
18838
#endif
18839
}
18840
18841
static __inline__ vector unsigned long long __ATTRS_o_ai
18842
vec_extractl(vector unsigned long long __a, vector unsigned long long __b,
18843
unsigned int __c) {
18844
#ifdef __LITTLE_ENDIAN__
18845
return __builtin_altivec_vextddvrx(__a, __b, __c);
18846
#else
18847
vector unsigned long long __ret = __builtin_altivec_vextddvlx(__a, __b, __c);
18848
return vec_sld(__ret, __ret, 8);
18849
#endif
18850
}
18851
18852
/* vec_extracth */
18853
18854
static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
18855
vector unsigned char __a, vector unsigned char __b, unsigned int __c) {
18856
#ifdef __LITTLE_ENDIAN__
18857
return __builtin_altivec_vextdubvlx(__a, __b, __c);
18858
#else
18859
vector unsigned long long __ret = __builtin_altivec_vextdubvrx(__a, __b, __c);
18860
return vec_sld(__ret, __ret, 8);
18861
#endif
18862
}
18863
18864
static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
18865
vector unsigned short __a, vector unsigned short __b, unsigned int __c) {
18866
#ifdef __LITTLE_ENDIAN__
18867
return __builtin_altivec_vextduhvlx(__a, __b, __c);
18868
#else
18869
vector unsigned long long __ret = __builtin_altivec_vextduhvrx(__a, __b, __c);
18870
return vec_sld(__ret, __ret, 8);
18871
#endif
18872
}
18873
18874
static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
18875
vector unsigned int __a, vector unsigned int __b, unsigned int __c) {
18876
#ifdef __LITTLE_ENDIAN__
18877
return __builtin_altivec_vextduwvlx(__a, __b, __c);
18878
#else
18879
vector unsigned long long __ret = __builtin_altivec_vextduwvrx(__a, __b, __c);
18880
return vec_sld(__ret, __ret, 8);
18881
#endif
18882
}
18883
18884
static __inline__ vector unsigned long long __ATTRS_o_ai
18885
vec_extracth(vector unsigned long long __a, vector unsigned long long __b,
18886
unsigned int __c) {
18887
#ifdef __LITTLE_ENDIAN__
18888
return __builtin_altivec_vextddvlx(__a, __b, __c);
18889
#else
18890
vector unsigned long long __ret = __builtin_altivec_vextddvrx(__a, __b, __c);
18891
return vec_sld(__ret, __ret, 8);
18892
#endif
18893
}
18894
18895
#ifdef __VSX__
18896
18897
/* vec_permx */
18898
#define vec_permx(__a, __b, __c, __d) \
18899
_Generic( \
18900
(__a), vector unsigned char \
18901
: (vector unsigned char)__builtin_vsx_xxpermx( \
18902
(vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18903
vector signed char \
18904
: (vector signed char)__builtin_vsx_xxpermx( \
18905
(vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18906
vector unsigned short \
18907
: (vector unsigned short)__builtin_vsx_xxpermx( \
18908
(vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18909
vector signed short \
18910
: (vector signed short)__builtin_vsx_xxpermx( \
18911
(vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18912
vector unsigned int \
18913
: (vector unsigned int)__builtin_vsx_xxpermx( \
18914
(vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18915
vector signed int \
18916
: (vector signed int)__builtin_vsx_xxpermx( \
18917
(vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18918
vector unsigned long long \
18919
: (vector unsigned long long)__builtin_vsx_xxpermx( \
18920
(vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18921
vector signed long long \
18922
: (vector signed long long)__builtin_vsx_xxpermx( \
18923
(vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18924
vector float \
18925
: (vector float)__builtin_vsx_xxpermx( \
18926
(vector unsigned char)__a, (vector unsigned char)__b, __c, __d), \
18927
vector double \
18928
: (vector double)__builtin_vsx_xxpermx( \
18929
(vector unsigned char)__a, (vector unsigned char)__b, __c, __d))
18930
18931
/* vec_blendv */
18932
18933
static __inline__ vector signed char __ATTRS_o_ai
18934
vec_blendv(vector signed char __a, vector signed char __b,
18935
vector unsigned char __c) {
18936
return (vector signed char)__builtin_vsx_xxblendvb(
18937
(vector unsigned char)__a, (vector unsigned char)__b, __c);
18938
}
18939
18940
static __inline__ vector unsigned char __ATTRS_o_ai
18941
vec_blendv(vector unsigned char __a, vector unsigned char __b,
18942
vector unsigned char __c) {
18943
return __builtin_vsx_xxblendvb(__a, __b, __c);
18944
}
18945
18946
static __inline__ vector signed short __ATTRS_o_ai
18947
vec_blendv(vector signed short __a, vector signed short __b,
18948
vector unsigned short __c) {
18949
return (vector signed short)__builtin_vsx_xxblendvh(
18950
(vector unsigned short)__a, (vector unsigned short)__b, __c);
18951
}
18952
18953
static __inline__ vector unsigned short __ATTRS_o_ai
18954
vec_blendv(vector unsigned short __a, vector unsigned short __b,
18955
vector unsigned short __c) {
18956
return __builtin_vsx_xxblendvh(__a, __b, __c);
18957
}
18958
18959
static __inline__ vector signed int __ATTRS_o_ai
18960
vec_blendv(vector signed int __a, vector signed int __b,
18961
vector unsigned int __c) {
18962
return (vector signed int)__builtin_vsx_xxblendvw(
18963
(vector unsigned int)__a, (vector unsigned int)__b, __c);
18964
}
18965
18966
static __inline__ vector unsigned int __ATTRS_o_ai
18967
vec_blendv(vector unsigned int __a, vector unsigned int __b,
18968
vector unsigned int __c) {
18969
return __builtin_vsx_xxblendvw(__a, __b, __c);
18970
}
18971
18972
static __inline__ vector signed long long __ATTRS_o_ai
18973
vec_blendv(vector signed long long __a, vector signed long long __b,
18974
vector unsigned long long __c) {
18975
return (vector signed long long)__builtin_vsx_xxblendvd(
18976
(vector unsigned long long)__a, (vector unsigned long long)__b, __c);
18977
}
18978
18979
static __inline__ vector unsigned long long __ATTRS_o_ai
18980
vec_blendv(vector unsigned long long __a, vector unsigned long long __b,
18981
vector unsigned long long __c) {
18982
return (vector unsigned long long)__builtin_vsx_xxblendvd(__a, __b, __c);
18983
}
18984
18985
static __inline__ vector float __ATTRS_o_ai
18986
vec_blendv(vector float __a, vector float __b, vector unsigned int __c) {
18987
return (vector float)__builtin_vsx_xxblendvw((vector unsigned int)__a,
18988
(vector unsigned int)__b, __c);
18989
}
18990
18991
static __inline__ vector double __ATTRS_o_ai
18992
vec_blendv(vector double __a, vector double __b,
18993
vector unsigned long long __c) {
18994
return (vector double)__builtin_vsx_xxblendvd(
18995
(vector unsigned long long)__a, (vector unsigned long long)__b, __c);
18996
}
18997
18998
#define vec_replace_unaligned(__a, __b, __c) \
18999
_Generic((__a), vector signed int \
19000
: __builtin_altivec_vinsw((vector unsigned char)__a, \
19001
(unsigned int)__b, __c), \
19002
vector unsigned int \
19003
: __builtin_altivec_vinsw((vector unsigned char)__a, \
19004
(unsigned int)__b, __c), \
19005
vector unsigned long long \
19006
: __builtin_altivec_vinsd((vector unsigned char)__a, \
19007
(unsigned long long)__b, __c), \
19008
vector signed long long \
19009
: __builtin_altivec_vinsd((vector unsigned char)__a, \
19010
(unsigned long long)__b, __c), \
19011
vector float \
19012
: __builtin_altivec_vinsw((vector unsigned char)__a, \
19013
(unsigned int)__b, __c), \
19014
vector double \
19015
: __builtin_altivec_vinsd((vector unsigned char)__a, \
19016
(unsigned long long)__b, __c))
19017
19018
#define vec_replace_elt(__a, __b, __c) \
19019
_Generic((__a), vector signed int \
19020
: (vector signed int)__builtin_altivec_vinsw_elt( \
19021
(vector unsigned char)__a, (unsigned int)__b, __c), \
19022
vector unsigned int \
19023
: (vector unsigned int)__builtin_altivec_vinsw_elt( \
19024
(vector unsigned char)__a, (unsigned int)__b, __c), \
19025
vector unsigned long long \
19026
: (vector unsigned long long)__builtin_altivec_vinsd_elt( \
19027
(vector unsigned char)__a, (unsigned long long)__b, __c), \
19028
vector signed long long \
19029
: (vector signed long long)__builtin_altivec_vinsd_elt( \
19030
(vector unsigned char)__a, (unsigned long long)__b, __c), \
19031
vector float \
19032
: (vector float)__builtin_altivec_vinsw_elt( \
19033
(vector unsigned char)__a, (unsigned int)__b, __c), \
19034
vector double \
19035
: (vector double)__builtin_altivec_vinsd_elt( \
19036
(vector unsigned char)__a, (unsigned long long)__b, __c))
19037
19038
/* vec_splati */
19039
19040
#define vec_splati(__a) \
19041
_Generic((__a), signed int \
19042
: ((vector signed int)__a), unsigned int \
19043
: ((vector unsigned int)__a), float \
19044
: ((vector float)__a))
19045
19046
/* vec_spatid */
19047
19048
static __inline__ vector double __ATTRS_o_ai vec_splatid(const float __a) {
19049
return ((vector double)((double)__a));
19050
}
19051
19052
/* vec_splati_ins */
19053
19054
static __inline__ vector signed int __ATTRS_o_ai vec_splati_ins(
19055
vector signed int __a, const unsigned int __b, const signed int __c) {
19056
const unsigned int __d = __b & 0x01;
19057
#ifdef __LITTLE_ENDIAN__
19058
__a[1 - __d] = __c;
19059
__a[3 - __d] = __c;
19060
#else
19061
__a[__d] = __c;
19062
__a[2 + __d] = __c;
19063
#endif
19064
return __a;
19065
}
19066
19067
static __inline__ vector unsigned int __ATTRS_o_ai vec_splati_ins(
19068
vector unsigned int __a, const unsigned int __b, const unsigned int __c) {
19069
const unsigned int __d = __b & 0x01;
19070
#ifdef __LITTLE_ENDIAN__
19071
__a[1 - __d] = __c;
19072
__a[3 - __d] = __c;
19073
#else
19074
__a[__d] = __c;
19075
__a[2 + __d] = __c;
19076
#endif
19077
return __a;
19078
}
19079
19080
static __inline__ vector float __ATTRS_o_ai
19081
vec_splati_ins(vector float __a, const unsigned int __b, const float __c) {
19082
const unsigned int __d = __b & 0x01;
19083
#ifdef __LITTLE_ENDIAN__
19084
__a[1 - __d] = __c;
19085
__a[3 - __d] = __c;
19086
#else
19087
__a[__d] = __c;
19088
__a[2 + __d] = __c;
19089
#endif
19090
return __a;
19091
}
19092
19093
/* vec_test_lsbb_all_ones */
19094
19095
static __inline__ int __ATTRS_o_ai
19096
vec_test_lsbb_all_ones(vector unsigned char __a) {
19097
return __builtin_vsx_xvtlsbb(__a, 1);
19098
}
19099
19100
/* vec_test_lsbb_all_zeros */
19101
19102
static __inline__ int __ATTRS_o_ai
19103
vec_test_lsbb_all_zeros(vector unsigned char __a) {
19104
return __builtin_vsx_xvtlsbb(__a, 0);
19105
}
19106
#endif /* __VSX__ */
19107
19108
/* vec_stril */
19109
19110
static __inline__ vector unsigned char __ATTRS_o_ai
19111
vec_stril(vector unsigned char __a) {
19112
#ifdef __LITTLE_ENDIAN__
19113
return (vector unsigned char)__builtin_altivec_vstribr(
19114
(vector unsigned char)__a);
19115
#else
19116
return (vector unsigned char)__builtin_altivec_vstribl(
19117
(vector unsigned char)__a);
19118
#endif
19119
}
19120
19121
static __inline__ vector signed char __ATTRS_o_ai
19122
vec_stril(vector signed char __a) {
19123
#ifdef __LITTLE_ENDIAN__
19124
return (vector signed char)__builtin_altivec_vstribr(
19125
(vector unsigned char)__a);
19126
#else
19127
return (vector signed char)__builtin_altivec_vstribl(
19128
(vector unsigned char)__a);
19129
#endif
19130
}
19131
19132
static __inline__ vector unsigned short __ATTRS_o_ai
19133
vec_stril(vector unsigned short __a) {
19134
#ifdef __LITTLE_ENDIAN__
19135
return (vector unsigned short)__builtin_altivec_vstrihr(
19136
(vector signed short)__a);
19137
#else
19138
return (vector unsigned short)__builtin_altivec_vstrihl(
19139
(vector signed short)__a);
19140
#endif
19141
}
19142
19143
static __inline__ vector signed short __ATTRS_o_ai
19144
vec_stril(vector signed short __a) {
19145
#ifdef __LITTLE_ENDIAN__
19146
return __builtin_altivec_vstrihr(__a);
19147
#else
19148
return __builtin_altivec_vstrihl(__a);
19149
#endif
19150
}
19151
19152
/* vec_stril_p */
19153
19154
static __inline__ int __ATTRS_o_ai vec_stril_p(vector unsigned char __a) {
19155
#ifdef __LITTLE_ENDIAN__
19156
return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
19157
#else
19158
return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
19159
#endif
19160
}
19161
19162
static __inline__ int __ATTRS_o_ai vec_stril_p(vector signed char __a) {
19163
#ifdef __LITTLE_ENDIAN__
19164
return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
19165
#else
19166
return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
19167
#endif
19168
}
19169
19170
static __inline__ int __ATTRS_o_ai vec_stril_p(vector unsigned short __a) {
19171
#ifdef __LITTLE_ENDIAN__
19172
return __builtin_altivec_vstrihr_p(__CR6_EQ, (vector signed short)__a);
19173
#else
19174
return __builtin_altivec_vstrihl_p(__CR6_EQ, (vector signed short)__a);
19175
#endif
19176
}
19177
19178
static __inline__ int __ATTRS_o_ai vec_stril_p(vector signed short __a) {
19179
#ifdef __LITTLE_ENDIAN__
19180
return __builtin_altivec_vstrihr_p(__CR6_EQ, __a);
19181
#else
19182
return __builtin_altivec_vstrihl_p(__CR6_EQ, __a);
19183
#endif
19184
}
19185
19186
/* vec_strir */
19187
19188
static __inline__ vector unsigned char __ATTRS_o_ai
19189
vec_strir(vector unsigned char __a) {
19190
#ifdef __LITTLE_ENDIAN__
19191
return (vector unsigned char)__builtin_altivec_vstribl(
19192
(vector unsigned char)__a);
19193
#else
19194
return (vector unsigned char)__builtin_altivec_vstribr(
19195
(vector unsigned char)__a);
19196
#endif
19197
}
19198
19199
static __inline__ vector signed char __ATTRS_o_ai
19200
vec_strir(vector signed char __a) {
19201
#ifdef __LITTLE_ENDIAN__
19202
return (vector signed char)__builtin_altivec_vstribl(
19203
(vector unsigned char)__a);
19204
#else
19205
return (vector signed char)__builtin_altivec_vstribr(
19206
(vector unsigned char)__a);
19207
#endif
19208
}
19209
19210
static __inline__ vector unsigned short __ATTRS_o_ai
19211
vec_strir(vector unsigned short __a) {
19212
#ifdef __LITTLE_ENDIAN__
19213
return (vector unsigned short)__builtin_altivec_vstrihl(
19214
(vector signed short)__a);
19215
#else
19216
return (vector unsigned short)__builtin_altivec_vstrihr(
19217
(vector signed short)__a);
19218
#endif
19219
}
19220
19221
static __inline__ vector signed short __ATTRS_o_ai
19222
vec_strir(vector signed short __a) {
19223
#ifdef __LITTLE_ENDIAN__
19224
return __builtin_altivec_vstrihl(__a);
19225
#else
19226
return __builtin_altivec_vstrihr(__a);
19227
#endif
19228
}
19229
19230
/* vec_strir_p */
19231
19232
static __inline__ int __ATTRS_o_ai vec_strir_p(vector unsigned char __a) {
19233
#ifdef __LITTLE_ENDIAN__
19234
return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
19235
#else
19236
return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
19237
#endif
19238
}
19239
19240
static __inline__ int __ATTRS_o_ai vec_strir_p(vector signed char __a) {
19241
#ifdef __LITTLE_ENDIAN__
19242
return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
19243
#else
19244
return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
19245
#endif
19246
}
19247
19248
static __inline__ int __ATTRS_o_ai vec_strir_p(vector unsigned short __a) {
19249
#ifdef __LITTLE_ENDIAN__
19250
return __builtin_altivec_vstrihl_p(__CR6_EQ, (vector signed short)__a);
19251
#else
19252
return __builtin_altivec_vstrihr_p(__CR6_EQ, (vector signed short)__a);
19253
#endif
19254
}
19255
19256
static __inline__ int __ATTRS_o_ai vec_strir_p(vector signed short __a) {
19257
#ifdef __LITTLE_ENDIAN__
19258
return __builtin_altivec_vstrihl_p(__CR6_EQ, __a);
19259
#else
19260
return __builtin_altivec_vstrihr_p(__CR6_EQ, __a);
19261
#endif
19262
}
19263
19264
/* vs[l | r | ra] */
19265
19266
#ifdef __SIZEOF_INT128__
19267
static __inline__ vector unsigned __int128 __ATTRS_o_ai
19268
vec_sl(vector unsigned __int128 __a, vector unsigned __int128 __b) {
19269
return __a << (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
19270
__CHAR_BIT__));
19271
}
19272
19273
static __inline__ vector signed __int128 __ATTRS_o_ai
19274
vec_sl(vector signed __int128 __a, vector unsigned __int128 __b) {
19275
return __a << (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
19276
__CHAR_BIT__));
19277
}
19278
19279
static __inline__ vector unsigned __int128 __ATTRS_o_ai
19280
vec_sr(vector unsigned __int128 __a, vector unsigned __int128 __b) {
19281
return __a >> (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
19282
__CHAR_BIT__));
19283
}
19284
19285
static __inline__ vector signed __int128 __ATTRS_o_ai
19286
vec_sr(vector signed __int128 __a, vector unsigned __int128 __b) {
19287
return (
19288
vector signed __int128)(((vector unsigned __int128)__a) >>
19289
(__b %
19290
(vector unsigned __int128)(sizeof(
19291
unsigned __int128) *
19292
__CHAR_BIT__)));
19293
}
19294
19295
static __inline__ vector unsigned __int128 __ATTRS_o_ai
19296
vec_sra(vector unsigned __int128 __a, vector unsigned __int128 __b) {
19297
return (
19298
vector unsigned __int128)(((vector signed __int128)__a) >>
19299
(__b %
19300
(vector unsigned __int128)(sizeof(
19301
unsigned __int128) *
19302
__CHAR_BIT__)));
19303
}
19304
19305
static __inline__ vector signed __int128 __ATTRS_o_ai
19306
vec_sra(vector signed __int128 __a, vector unsigned __int128 __b) {
19307
return __a >> (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
19308
__CHAR_BIT__));
19309
}
19310
19311
#endif /* __SIZEOF_INT128__ */
19312
#endif /* __POWER10_VECTOR__ */
19313
19314
#ifdef __POWER8_VECTOR__
19315
#define __bcdadd(__a, __b, __ps) __builtin_ppc_bcdadd((__a), (__b), (__ps))
19316
#define __bcdsub(__a, __b, __ps) __builtin_ppc_bcdsub((__a), (__b), (__ps))
19317
19318
static __inline__ long __bcdadd_ofl(vector unsigned char __a,
19319
vector unsigned char __b) {
19320
return __builtin_ppc_bcdadd_p(__CR6_SO, __a, __b);
19321
}
19322
19323
static __inline__ long __bcdsub_ofl(vector unsigned char __a,
19324
vector unsigned char __b) {
19325
return __builtin_ppc_bcdsub_p(__CR6_SO, __a, __b);
19326
}
19327
19328
static __inline__ long __bcd_invalid(vector unsigned char __a) {
19329
return __builtin_ppc_bcdsub_p(__CR6_SO, __a, __a);
19330
}
19331
19332
static __inline__ long __bcdcmpeq(vector unsigned char __a,
19333
vector unsigned char __b) {
19334
return __builtin_ppc_bcdsub_p(__CR6_EQ, __a, __b);
19335
}
19336
19337
static __inline__ long __bcdcmplt(vector unsigned char __a,
19338
vector unsigned char __b) {
19339
return __builtin_ppc_bcdsub_p(__CR6_LT, __a, __b);
19340
}
19341
19342
static __inline__ long __bcdcmpgt(vector unsigned char __a,
19343
vector unsigned char __b) {
19344
return __builtin_ppc_bcdsub_p(__CR6_GT, __a, __b);
19345
}
19346
19347
static __inline__ long __bcdcmple(vector unsigned char __a,
19348
vector unsigned char __b) {
19349
return __builtin_ppc_bcdsub_p(__CR6_GT_REV, __a, __b);
19350
}
19351
19352
static __inline__ long __bcdcmpge(vector unsigned char __a,
19353
vector unsigned char __b) {
19354
return __builtin_ppc_bcdsub_p(__CR6_LT_REV, __a, __b);
19355
}
19356
19357
#endif // __POWER8_VECTOR__
19358
19359
#undef __ATTRS_o_ai
19360
19361
#endif /* __ALTIVEC_H */
19362
19363