]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/clang/lib/Headers/altivec.h
zfs: merge openzfs/zfs@ef83e07db (zfs-2.1-release) into stable/13
[FreeBSD/FreeBSD.git] / contrib / llvm-project / clang / lib / Headers / altivec.h
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
23 /* Constants for vec_test_data_class */
24 #define __VEC_CLASS_FP_SUBNORMAL_N (1 << 0)
25 #define __VEC_CLASS_FP_SUBNORMAL_P (1 << 1)
26 #define __VEC_CLASS_FP_SUBNORMAL (__VEC_CLASS_FP_SUBNORMAL_P | \
27                                   __VEC_CLASS_FP_SUBNORMAL_N)
28 #define __VEC_CLASS_FP_ZERO_N (1<<2)
29 #define __VEC_CLASS_FP_ZERO_P (1<<3)
30 #define __VEC_CLASS_FP_ZERO (__VEC_CLASS_FP_ZERO_P           | \
31                              __VEC_CLASS_FP_ZERO_N)
32 #define __VEC_CLASS_FP_INFINITY_N (1<<4)
33 #define __VEC_CLASS_FP_INFINITY_P (1<<5)
34 #define __VEC_CLASS_FP_INFINITY (__VEC_CLASS_FP_INFINITY_P   | \
35                                  __VEC_CLASS_FP_INFINITY_N)
36 #define __VEC_CLASS_FP_NAN (1<<6)
37 #define __VEC_CLASS_FP_NOT_NORMAL (__VEC_CLASS_FP_NAN        | \
38                                    __VEC_CLASS_FP_SUBNORMAL  | \
39                                    __VEC_CLASS_FP_ZERO       | \
40                                    __VEC_CLASS_FP_INFINITY)
41
42 #define __ATTRS_o_ai __attribute__((__overloadable__, __always_inline__))
43
44 #include <stddef.h>
45
46 static __inline__ vector signed char __ATTRS_o_ai vec_perm(
47     vector signed char __a, vector signed char __b, vector unsigned char __c);
48
49 static __inline__ vector unsigned char __ATTRS_o_ai
50 vec_perm(vector unsigned char __a, vector unsigned char __b,
51          vector unsigned char __c);
52
53 static __inline__ vector bool char __ATTRS_o_ai
54 vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c);
55
56 static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
57                                                      vector signed short __b,
58                                                      vector unsigned char __c);
59
60 static __inline__ vector unsigned short __ATTRS_o_ai
61 vec_perm(vector unsigned short __a, vector unsigned short __b,
62          vector unsigned char __c);
63
64 static __inline__ vector bool short __ATTRS_o_ai vec_perm(
65     vector bool short __a, vector bool short __b, vector unsigned char __c);
66
67 static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
68                                                      vector pixel __b,
69                                                      vector unsigned char __c);
70
71 static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
72                                                    vector signed int __b,
73                                                    vector unsigned char __c);
74
75 static __inline__ vector unsigned int __ATTRS_o_ai vec_perm(
76     vector unsigned int __a, vector unsigned int __b, vector unsigned char __c);
77
78 static __inline__ vector bool int __ATTRS_o_ai
79 vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c);
80
81 static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
82                                                      vector float __b,
83                                                      vector unsigned char __c);
84
85 #ifdef __VSX__
86 static __inline__ vector long long __ATTRS_o_ai
87 vec_perm(vector signed long long __a, vector signed long long __b,
88          vector unsigned char __c);
89
90 static __inline__ vector unsigned long long __ATTRS_o_ai
91 vec_perm(vector unsigned long long __a, vector unsigned long long __b,
92          vector unsigned char __c);
93
94 static __inline__ vector bool long long __ATTRS_o_ai
95 vec_perm(vector bool long long __a, vector bool long long __b,
96          vector unsigned char __c);
97
98 static __inline__ vector double __ATTRS_o_ai vec_perm(vector double __a,
99                                                       vector double __b,
100                                                       vector unsigned char __c);
101 #endif
102
103 static __inline__ vector unsigned char __ATTRS_o_ai
104 vec_xor(vector unsigned char __a, vector unsigned char __b);
105
106 /* vec_abs */
107
108 #define __builtin_altivec_abs_v16qi vec_abs
109 #define __builtin_altivec_abs_v8hi vec_abs
110 #define __builtin_altivec_abs_v4si vec_abs
111
112 static __inline__ vector signed char __ATTRS_o_ai
113 vec_abs(vector signed char __a) {
114   return __builtin_altivec_vmaxsb(__a, -__a);
115 }
116
117 static __inline__ vector signed short __ATTRS_o_ai
118 vec_abs(vector signed short __a) {
119   return __builtin_altivec_vmaxsh(__a, -__a);
120 }
121
122 static __inline__ vector signed int __ATTRS_o_ai
123 vec_abs(vector signed int __a) {
124   return __builtin_altivec_vmaxsw(__a, -__a);
125 }
126
127 #ifdef __POWER8_VECTOR__
128 static __inline__ vector signed long long __ATTRS_o_ai
129 vec_abs(vector signed long long __a) {
130   return __builtin_altivec_vmaxsd(__a, -__a);
131 }
132 #endif
133
134 static __inline__ vector float __ATTRS_o_ai vec_abs(vector float __a) {
135 #ifdef __VSX__
136   return __builtin_vsx_xvabssp(__a);
137 #else
138   vector unsigned int __res =
139       (vector unsigned int)__a & (vector unsigned int)(0x7FFFFFFF);
140   return (vector float)__res;
141 #endif
142 }
143
144 #ifdef __VSX__
145 static __inline__ vector double __ATTRS_o_ai vec_abs(vector double __a) {
146   return __builtin_vsx_xvabsdp(__a);
147 }
148 #endif
149
150 /* vec_abss */
151 #define __builtin_altivec_abss_v16qi vec_abss
152 #define __builtin_altivec_abss_v8hi vec_abss
153 #define __builtin_altivec_abss_v4si vec_abss
154
155 static __inline__ vector signed char __ATTRS_o_ai
156 vec_abss(vector signed char __a) {
157   return __builtin_altivec_vmaxsb(
158       __a, __builtin_altivec_vsubsbs((vector signed char)(0), __a));
159 }
160
161 static __inline__ vector signed short __ATTRS_o_ai
162 vec_abss(vector signed short __a) {
163   return __builtin_altivec_vmaxsh(
164       __a, __builtin_altivec_vsubshs((vector signed short)(0), __a));
165 }
166
167 static __inline__ vector signed int __ATTRS_o_ai
168 vec_abss(vector signed int __a) {
169   return __builtin_altivec_vmaxsw(
170       __a, __builtin_altivec_vsubsws((vector signed int)(0), __a));
171 }
172
173 /* vec_absd */
174 #if defined(__POWER9_VECTOR__)
175
176 static __inline__ vector unsigned char __ATTRS_o_ai
177 vec_absd(vector unsigned char __a, vector unsigned char __b) {
178   return __builtin_altivec_vabsdub(__a, __b);
179 }
180
181 static __inline__ vector unsigned short __ATTRS_o_ai
182 vec_absd(vector unsigned short __a, vector unsigned short __b) {
183   return __builtin_altivec_vabsduh(__a, __b);
184 }
185
186 static __inline__ vector unsigned int __ATTRS_o_ai
187 vec_absd(vector unsigned int __a,  vector unsigned int __b) {
188   return __builtin_altivec_vabsduw(__a, __b);
189 }
190
191 #endif /* End __POWER9_VECTOR__ */
192
193 /* vec_add */
194
195 static __inline__ vector signed char __ATTRS_o_ai
196 vec_add(vector signed char __a, vector signed char __b) {
197   return __a + __b;
198 }
199
200 static __inline__ vector signed char __ATTRS_o_ai
201 vec_add(vector bool char __a, vector signed char __b) {
202   return (vector signed char)__a + __b;
203 }
204
205 static __inline__ vector signed char __ATTRS_o_ai
206 vec_add(vector signed char __a, vector bool char __b) {
207   return __a + (vector signed char)__b;
208 }
209
210 static __inline__ vector unsigned char __ATTRS_o_ai
211 vec_add(vector unsigned char __a, vector unsigned char __b) {
212   return __a + __b;
213 }
214
215 static __inline__ vector unsigned char __ATTRS_o_ai
216 vec_add(vector bool char __a, vector unsigned char __b) {
217   return (vector unsigned char)__a + __b;
218 }
219
220 static __inline__ vector unsigned char __ATTRS_o_ai
221 vec_add(vector unsigned char __a, vector bool char __b) {
222   return __a + (vector unsigned char)__b;
223 }
224
225 static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
226                                                     vector short __b) {
227   return __a + __b;
228 }
229
230 static __inline__ vector short __ATTRS_o_ai vec_add(vector bool short __a,
231                                                     vector short __b) {
232   return (vector short)__a + __b;
233 }
234
235 static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
236                                                     vector bool short __b) {
237   return __a + (vector short)__b;
238 }
239
240 static __inline__ vector unsigned short __ATTRS_o_ai
241 vec_add(vector unsigned short __a, vector unsigned short __b) {
242   return __a + __b;
243 }
244
245 static __inline__ vector unsigned short __ATTRS_o_ai
246 vec_add(vector bool short __a, vector unsigned short __b) {
247   return (vector unsigned short)__a + __b;
248 }
249
250 static __inline__ vector unsigned short __ATTRS_o_ai
251 vec_add(vector unsigned short __a, vector bool short __b) {
252   return __a + (vector unsigned short)__b;
253 }
254
255 static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
256                                                   vector int __b) {
257   return __a + __b;
258 }
259
260 static __inline__ vector int __ATTRS_o_ai vec_add(vector bool int __a,
261                                                   vector int __b) {
262   return (vector int)__a + __b;
263 }
264
265 static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
266                                                   vector bool int __b) {
267   return __a + (vector int)__b;
268 }
269
270 static __inline__ vector unsigned int __ATTRS_o_ai
271 vec_add(vector unsigned int __a, vector unsigned int __b) {
272   return __a + __b;
273 }
274
275 static __inline__ vector unsigned int __ATTRS_o_ai
276 vec_add(vector bool int __a, vector unsigned int __b) {
277   return (vector unsigned int)__a + __b;
278 }
279
280 static __inline__ vector unsigned int __ATTRS_o_ai
281 vec_add(vector unsigned int __a, vector bool int __b) {
282   return __a + (vector unsigned int)__b;
283 }
284
285 #ifdef __POWER8_VECTOR__
286 static __inline__ vector signed long long __ATTRS_o_ai
287 vec_add(vector signed long long __a, vector signed long long __b) {
288   return __a + __b;
289 }
290
291 static __inline__ vector unsigned long long __ATTRS_o_ai
292 vec_add(vector unsigned long long __a, vector unsigned long long __b) {
293   return __a + __b;
294 }
295
296 #ifdef __SIZEOF_INT128__
297 static __inline__ vector signed __int128 __ATTRS_o_ai
298 vec_add(vector signed __int128 __a, vector signed __int128 __b) {
299   return __a + __b;
300 }
301
302 static __inline__ vector unsigned __int128 __ATTRS_o_ai
303 vec_add(vector unsigned __int128 __a, vector unsigned __int128 __b) {
304   return __a + __b;
305 }
306 #endif
307
308 static __inline__ vector unsigned char __attribute__((__always_inline__))
309 vec_add_u128(vector unsigned char __a, vector unsigned char __b) {
310   return __builtin_altivec_vadduqm(__a, __b);
311 }
312 #elif defined(__VSX__)
313 static __inline__ vector signed long long __ATTRS_o_ai
314 vec_add(vector signed long long __a, vector signed long long __b) {
315 #ifdef __LITTLE_ENDIAN__
316   // Little endian systems on CPU's prior to Power8 don't really exist
317   // so scalarizing is fine.
318   return __a + __b;
319 #else
320   vector unsigned int __res =
321       (vector unsigned int)__a + (vector unsigned int)__b;
322   vector unsigned int __carry = __builtin_altivec_vaddcuw(
323       (vector unsigned int)__a, (vector unsigned int)__b);
324   __carry = __builtin_shufflevector((vector unsigned char)__carry,
325                                     (vector unsigned char)__carry, 0, 0, 0, 7,
326                                     0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0);
327   return (vector signed long long)(__res + __carry);
328 #endif
329 }
330
331 static __inline__ vector unsigned long long __ATTRS_o_ai
332 vec_add(vector unsigned long long __a, vector unsigned long long __b) {
333   return (vector unsigned long long)vec_add((vector signed long long)__a,
334                                             (vector signed long long)__b);
335 }
336 #endif // __POWER8_VECTOR__
337
338 static __inline__ vector float __ATTRS_o_ai vec_add(vector float __a,
339                                                     vector float __b) {
340   return __a + __b;
341 }
342
343 #ifdef __VSX__
344 static __inline__ vector double __ATTRS_o_ai vec_add(vector double __a,
345                                                      vector double __b) {
346   return __a + __b;
347 }
348 #endif // __VSX__
349
350 /* vec_adde */
351
352 #ifdef __POWER8_VECTOR__
353 #ifdef __SIZEOF_INT128__
354 static __inline__ vector signed __int128 __ATTRS_o_ai
355 vec_adde(vector signed __int128 __a, vector signed __int128 __b,
356          vector signed __int128 __c) {
357   return __builtin_altivec_vaddeuqm(__a, __b, __c);
358 }
359
360 static __inline__ vector unsigned __int128 __ATTRS_o_ai
361 vec_adde(vector unsigned __int128 __a, vector unsigned __int128 __b,
362          vector unsigned __int128 __c) {
363   return __builtin_altivec_vaddeuqm(__a, __b, __c);
364 }
365 #endif
366
367 static __inline__ vector unsigned char __attribute__((__always_inline__))
368 vec_adde_u128(vector unsigned char __a, vector unsigned char __b,
369               vector unsigned char __c) {
370   return (vector unsigned char)__builtin_altivec_vaddeuqm(__a, __b, __c);
371 }
372 #endif
373
374 static __inline__ vector signed int __ATTRS_o_ai
375 vec_adde(vector signed int __a, vector signed int __b,
376          vector signed int __c) {
377   vector signed int __mask = {1, 1, 1, 1};
378   vector signed int __carry = __c & __mask;
379   return vec_add(vec_add(__a, __b), __carry);
380 }
381
382 static __inline__ vector unsigned int __ATTRS_o_ai
383 vec_adde(vector unsigned int __a, vector unsigned int __b,
384          vector unsigned int __c) {
385   vector unsigned int __mask = {1, 1, 1, 1};
386   vector unsigned int __carry = __c & __mask;
387   return vec_add(vec_add(__a, __b), __carry);
388 }
389
390 /* vec_addec */
391
392 #ifdef __POWER8_VECTOR__
393 #ifdef __SIZEOF_INT128__
394 static __inline__ vector signed __int128 __ATTRS_o_ai
395 vec_addec(vector signed __int128 __a, vector signed __int128 __b,
396           vector signed __int128 __c) {
397   return __builtin_altivec_vaddecuq(__a, __b, __c);
398 }
399
400 static __inline__ vector unsigned __int128 __ATTRS_o_ai
401 vec_addec(vector unsigned __int128 __a, vector unsigned __int128 __b,
402           vector unsigned __int128 __c) {
403   return __builtin_altivec_vaddecuq(__a, __b, __c);
404 }
405 #endif
406
407 static __inline__ vector unsigned char __attribute__((__always_inline__))
408 vec_addec_u128(vector unsigned char __a, vector unsigned char __b,
409                vector unsigned char __c) {
410   return (vector unsigned char)__builtin_altivec_vaddecuq(__a, __b, __c);
411 }
412
413 #ifdef __powerpc64__
414 static __inline__ vector signed int __ATTRS_o_ai
415 vec_addec(vector signed int __a, vector signed int __b,
416           vector signed int __c) {
417
418   signed int __result[4];
419   for (int i = 0; i < 4; i++) {
420     unsigned int __tempa = (unsigned int) __a[i];
421     unsigned int __tempb = (unsigned int) __b[i];
422     unsigned int __tempc = (unsigned int) __c[i];
423     __tempc = __tempc & 0x00000001;
424     unsigned long long __longa = (unsigned long long) __tempa;
425     unsigned long long __longb = (unsigned long long) __tempb;
426     unsigned long long __longc = (unsigned long long) __tempc;
427     unsigned long long __sum = __longa + __longb + __longc;
428     unsigned long long __res = (__sum >> 32) & 0x01;
429     unsigned long long __tempres = (unsigned int) __res;
430     __result[i] = (signed int) __tempres;
431   }
432
433   vector signed int ret = { __result[0], __result[1], __result[2], __result[3] };
434   return ret;
435 }
436
437 static __inline__ vector unsigned int __ATTRS_o_ai
438 vec_addec(vector unsigned int __a, vector unsigned int __b,
439           vector unsigned int __c) {
440
441   unsigned int __result[4];
442   for (int i = 0; i < 4; i++) {
443     unsigned int __tempc = __c[i] & 1;
444     unsigned long long __longa = (unsigned long long) __a[i];
445     unsigned long long __longb = (unsigned long long) __b[i];
446     unsigned long long __longc = (unsigned long long) __tempc;
447     unsigned long long __sum = __longa + __longb + __longc;
448     unsigned long long __res = (__sum >> 32) & 0x01;
449     unsigned long long __tempres = (unsigned int) __res;
450     __result[i] = (signed int) __tempres;
451   }
452
453   vector unsigned int ret = { __result[0], __result[1], __result[2], __result[3] };
454   return ret;
455 }
456 #endif // __powerpc64__
457 #endif // __POWER8_VECTOR__
458
459 /* vec_vaddubm */
460
461 #define __builtin_altivec_vaddubm vec_vaddubm
462
463 static __inline__ vector signed char __ATTRS_o_ai
464 vec_vaddubm(vector signed char __a, vector signed char __b) {
465   return __a + __b;
466 }
467
468 static __inline__ vector signed char __ATTRS_o_ai
469 vec_vaddubm(vector bool char __a, vector signed char __b) {
470   return (vector signed char)__a + __b;
471 }
472
473 static __inline__ vector signed char __ATTRS_o_ai
474 vec_vaddubm(vector signed char __a, vector bool char __b) {
475   return __a + (vector signed char)__b;
476 }
477
478 static __inline__ vector unsigned char __ATTRS_o_ai
479 vec_vaddubm(vector unsigned char __a, vector unsigned char __b) {
480   return __a + __b;
481 }
482
483 static __inline__ vector unsigned char __ATTRS_o_ai
484 vec_vaddubm(vector bool char __a, vector unsigned char __b) {
485   return (vector unsigned char)__a + __b;
486 }
487
488 static __inline__ vector unsigned char __ATTRS_o_ai
489 vec_vaddubm(vector unsigned char __a, vector bool char __b) {
490   return __a + (vector unsigned char)__b;
491 }
492
493 /* vec_vadduhm */
494
495 #define __builtin_altivec_vadduhm vec_vadduhm
496
497 static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
498                                                         vector short __b) {
499   return __a + __b;
500 }
501
502 static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector bool short __a,
503                                                         vector short __b) {
504   return (vector short)__a + __b;
505 }
506
507 static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
508                                                         vector bool short __b) {
509   return __a + (vector short)__b;
510 }
511
512 static __inline__ vector unsigned short __ATTRS_o_ai
513 vec_vadduhm(vector unsigned short __a, vector unsigned short __b) {
514   return __a + __b;
515 }
516
517 static __inline__ vector unsigned short __ATTRS_o_ai
518 vec_vadduhm(vector bool short __a, vector unsigned short __b) {
519   return (vector unsigned short)__a + __b;
520 }
521
522 static __inline__ vector unsigned short __ATTRS_o_ai
523 vec_vadduhm(vector unsigned short __a, vector bool short __b) {
524   return __a + (vector unsigned short)__b;
525 }
526
527 /* vec_vadduwm */
528
529 #define __builtin_altivec_vadduwm vec_vadduwm
530
531 static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
532                                                       vector int __b) {
533   return __a + __b;
534 }
535
536 static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector bool int __a,
537                                                       vector int __b) {
538   return (vector int)__a + __b;
539 }
540
541 static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
542                                                       vector bool int __b) {
543   return __a + (vector int)__b;
544 }
545
546 static __inline__ vector unsigned int __ATTRS_o_ai
547 vec_vadduwm(vector unsigned int __a, vector unsigned int __b) {
548   return __a + __b;
549 }
550
551 static __inline__ vector unsigned int __ATTRS_o_ai
552 vec_vadduwm(vector bool int __a, vector unsigned int __b) {
553   return (vector unsigned int)__a + __b;
554 }
555
556 static __inline__ vector unsigned int __ATTRS_o_ai
557 vec_vadduwm(vector unsigned int __a, vector bool int __b) {
558   return __a + (vector unsigned int)__b;
559 }
560
561 /* vec_vaddfp */
562
563 #define __builtin_altivec_vaddfp vec_vaddfp
564
565 static __inline__ vector float __attribute__((__always_inline__))
566 vec_vaddfp(vector float __a, vector float __b) {
567   return __a + __b;
568 }
569
570 /* vec_addc */
571
572 static __inline__ vector signed int __ATTRS_o_ai
573 vec_addc(vector signed int __a, vector signed int __b) {
574   return (vector signed int)__builtin_altivec_vaddcuw((vector unsigned int)__a,
575                                                       (vector unsigned int)__b);
576 }
577
578 static __inline__ vector unsigned int __ATTRS_o_ai
579 vec_addc(vector unsigned int __a, vector unsigned int __b) {
580   return __builtin_altivec_vaddcuw(__a, __b);
581 }
582
583 #ifdef __POWER8_VECTOR__
584 #ifdef __SIZEOF_INT128__
585 static __inline__ vector signed __int128 __ATTRS_o_ai
586 vec_addc(vector signed __int128 __a, vector signed __int128 __b) {
587   return (vector signed __int128)__builtin_altivec_vaddcuq(
588       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
589 }
590
591 static __inline__ vector unsigned __int128 __ATTRS_o_ai
592 vec_addc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
593   return __builtin_altivec_vaddcuq(__a, __b);
594 }
595 #endif
596
597 static __inline__ vector unsigned char __attribute__((__always_inline__))
598 vec_addc_u128(vector unsigned char __a, vector unsigned char __b) {
599   return (vector unsigned char)__builtin_altivec_vaddcuq(__a, __b);
600 }
601 #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
602
603 /* vec_vaddcuw */
604
605 static __inline__ vector unsigned int __attribute__((__always_inline__))
606 vec_vaddcuw(vector unsigned int __a, vector unsigned int __b) {
607   return __builtin_altivec_vaddcuw(__a, __b);
608 }
609
610 /* vec_adds */
611
612 static __inline__ vector signed char __ATTRS_o_ai
613 vec_adds(vector signed char __a, vector signed char __b) {
614   return __builtin_altivec_vaddsbs(__a, __b);
615 }
616
617 static __inline__ vector signed char __ATTRS_o_ai
618 vec_adds(vector bool char __a, vector signed char __b) {
619   return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
620 }
621
622 static __inline__ vector signed char __ATTRS_o_ai
623 vec_adds(vector signed char __a, vector bool char __b) {
624   return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
625 }
626
627 static __inline__ vector unsigned char __ATTRS_o_ai
628 vec_adds(vector unsigned char __a, vector unsigned char __b) {
629   return __builtin_altivec_vaddubs(__a, __b);
630 }
631
632 static __inline__ vector unsigned char __ATTRS_o_ai
633 vec_adds(vector bool char __a, vector unsigned char __b) {
634   return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
635 }
636
637 static __inline__ vector unsigned char __ATTRS_o_ai
638 vec_adds(vector unsigned char __a, vector bool char __b) {
639   return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
640 }
641
642 static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
643                                                      vector short __b) {
644   return __builtin_altivec_vaddshs(__a, __b);
645 }
646
647 static __inline__ vector short __ATTRS_o_ai vec_adds(vector bool short __a,
648                                                      vector short __b) {
649   return __builtin_altivec_vaddshs((vector short)__a, __b);
650 }
651
652 static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
653                                                      vector bool short __b) {
654   return __builtin_altivec_vaddshs(__a, (vector short)__b);
655 }
656
657 static __inline__ vector unsigned short __ATTRS_o_ai
658 vec_adds(vector unsigned short __a, vector unsigned short __b) {
659   return __builtin_altivec_vadduhs(__a, __b);
660 }
661
662 static __inline__ vector unsigned short __ATTRS_o_ai
663 vec_adds(vector bool short __a, vector unsigned short __b) {
664   return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
665 }
666
667 static __inline__ vector unsigned short __ATTRS_o_ai
668 vec_adds(vector unsigned short __a, vector bool short __b) {
669   return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
670 }
671
672 static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
673                                                    vector int __b) {
674   return __builtin_altivec_vaddsws(__a, __b);
675 }
676
677 static __inline__ vector int __ATTRS_o_ai vec_adds(vector bool int __a,
678                                                    vector int __b) {
679   return __builtin_altivec_vaddsws((vector int)__a, __b);
680 }
681
682 static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
683                                                    vector bool int __b) {
684   return __builtin_altivec_vaddsws(__a, (vector int)__b);
685 }
686
687 static __inline__ vector unsigned int __ATTRS_o_ai
688 vec_adds(vector unsigned int __a, vector unsigned int __b) {
689   return __builtin_altivec_vadduws(__a, __b);
690 }
691
692 static __inline__ vector unsigned int __ATTRS_o_ai
693 vec_adds(vector bool int __a, vector unsigned int __b) {
694   return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
695 }
696
697 static __inline__ vector unsigned int __ATTRS_o_ai
698 vec_adds(vector unsigned int __a, vector bool int __b) {
699   return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
700 }
701
702 /* vec_vaddsbs */
703
704 static __inline__ vector signed char __ATTRS_o_ai
705 vec_vaddsbs(vector signed char __a, vector signed char __b) {
706   return __builtin_altivec_vaddsbs(__a, __b);
707 }
708
709 static __inline__ vector signed char __ATTRS_o_ai
710 vec_vaddsbs(vector bool char __a, vector signed char __b) {
711   return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
712 }
713
714 static __inline__ vector signed char __ATTRS_o_ai
715 vec_vaddsbs(vector signed char __a, vector bool char __b) {
716   return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
717 }
718
719 /* vec_vaddubs */
720
721 static __inline__ vector unsigned char __ATTRS_o_ai
722 vec_vaddubs(vector unsigned char __a, vector unsigned char __b) {
723   return __builtin_altivec_vaddubs(__a, __b);
724 }
725
726 static __inline__ vector unsigned char __ATTRS_o_ai
727 vec_vaddubs(vector bool char __a, vector unsigned char __b) {
728   return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
729 }
730
731 static __inline__ vector unsigned char __ATTRS_o_ai
732 vec_vaddubs(vector unsigned char __a, vector bool char __b) {
733   return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
734 }
735
736 /* vec_vaddshs */
737
738 static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
739                                                         vector short __b) {
740   return __builtin_altivec_vaddshs(__a, __b);
741 }
742
743 static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector bool short __a,
744                                                         vector short __b) {
745   return __builtin_altivec_vaddshs((vector short)__a, __b);
746 }
747
748 static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
749                                                         vector bool short __b) {
750   return __builtin_altivec_vaddshs(__a, (vector short)__b);
751 }
752
753 /* vec_vadduhs */
754
755 static __inline__ vector unsigned short __ATTRS_o_ai
756 vec_vadduhs(vector unsigned short __a, vector unsigned short __b) {
757   return __builtin_altivec_vadduhs(__a, __b);
758 }
759
760 static __inline__ vector unsigned short __ATTRS_o_ai
761 vec_vadduhs(vector bool short __a, vector unsigned short __b) {
762   return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
763 }
764
765 static __inline__ vector unsigned short __ATTRS_o_ai
766 vec_vadduhs(vector unsigned short __a, vector bool short __b) {
767   return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
768 }
769
770 /* vec_vaddsws */
771
772 static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
773                                                       vector int __b) {
774   return __builtin_altivec_vaddsws(__a, __b);
775 }
776
777 static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector bool int __a,
778                                                       vector int __b) {
779   return __builtin_altivec_vaddsws((vector int)__a, __b);
780 }
781
782 static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
783                                                       vector bool int __b) {
784   return __builtin_altivec_vaddsws(__a, (vector int)__b);
785 }
786
787 /* vec_vadduws */
788
789 static __inline__ vector unsigned int __ATTRS_o_ai
790 vec_vadduws(vector unsigned int __a, vector unsigned int __b) {
791   return __builtin_altivec_vadduws(__a, __b);
792 }
793
794 static __inline__ vector unsigned int __ATTRS_o_ai
795 vec_vadduws(vector bool int __a, vector unsigned int __b) {
796   return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
797 }
798
799 static __inline__ vector unsigned int __ATTRS_o_ai
800 vec_vadduws(vector unsigned int __a, vector bool int __b) {
801   return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
802 }
803
804 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
805     defined(__SIZEOF_INT128__)
806 /* vec_vadduqm */
807
808 static __inline__ vector signed __int128 __ATTRS_o_ai
809 vec_vadduqm(vector signed __int128 __a, vector signed __int128 __b) {
810   return __a + __b;
811 }
812
813 static __inline__ vector unsigned __int128 __ATTRS_o_ai
814 vec_vadduqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
815   return __a + __b;
816 }
817
818 /* vec_vaddeuqm */
819
820 static __inline__ vector signed __int128 __ATTRS_o_ai
821 vec_vaddeuqm(vector signed __int128 __a, vector signed __int128 __b,
822              vector signed __int128 __c) {
823   return __builtin_altivec_vaddeuqm(__a, __b, __c);
824 }
825
826 static __inline__ vector unsigned __int128 __ATTRS_o_ai
827 vec_vaddeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
828              vector unsigned __int128 __c) {
829   return __builtin_altivec_vaddeuqm(__a, __b, __c);
830 }
831
832 /* vec_vaddcuq */
833
834 static __inline__ vector signed __int128 __ATTRS_o_ai
835 vec_vaddcuq(vector signed __int128 __a, vector signed __int128 __b) {
836   return __builtin_altivec_vaddcuq(__a, __b);
837 }
838
839 static __inline__ vector unsigned __int128 __ATTRS_o_ai
840 vec_vaddcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
841   return __builtin_altivec_vaddcuq(__a, __b);
842 }
843
844 /* vec_vaddecuq */
845
846 static __inline__ vector signed __int128 __ATTRS_o_ai
847 vec_vaddecuq(vector signed __int128 __a, vector signed __int128 __b,
848              vector signed __int128 __c) {
849   return __builtin_altivec_vaddecuq(__a, __b, __c);
850 }
851
852 static __inline__ vector unsigned __int128 __ATTRS_o_ai
853 vec_vaddecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
854              vector unsigned __int128 __c) {
855   return __builtin_altivec_vaddecuq(__a, __b, __c);
856 }
857 #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
858
859 /* vec_and */
860
861 #define __builtin_altivec_vand vec_and
862
863 static __inline__ vector signed char __ATTRS_o_ai
864 vec_and(vector signed char __a, vector signed char __b) {
865   return __a & __b;
866 }
867
868 static __inline__ vector signed char __ATTRS_o_ai
869 vec_and(vector bool char __a, vector signed char __b) {
870   return (vector signed char)__a & __b;
871 }
872
873 static __inline__ vector signed char __ATTRS_o_ai
874 vec_and(vector signed char __a, vector bool char __b) {
875   return __a & (vector signed char)__b;
876 }
877
878 static __inline__ vector unsigned char __ATTRS_o_ai
879 vec_and(vector unsigned char __a, vector unsigned char __b) {
880   return __a & __b;
881 }
882
883 static __inline__ vector unsigned char __ATTRS_o_ai
884 vec_and(vector bool char __a, vector unsigned char __b) {
885   return (vector unsigned char)__a & __b;
886 }
887
888 static __inline__ vector unsigned char __ATTRS_o_ai
889 vec_and(vector unsigned char __a, vector bool char __b) {
890   return __a & (vector unsigned char)__b;
891 }
892
893 static __inline__ vector bool char __ATTRS_o_ai vec_and(vector bool char __a,
894                                                         vector bool char __b) {
895   return __a & __b;
896 }
897
898 static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
899                                                     vector short __b) {
900   return __a & __b;
901 }
902
903 static __inline__ vector short __ATTRS_o_ai vec_and(vector bool short __a,
904                                                     vector short __b) {
905   return (vector short)__a & __b;
906 }
907
908 static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
909                                                     vector bool short __b) {
910   return __a & (vector short)__b;
911 }
912
913 static __inline__ vector unsigned short __ATTRS_o_ai
914 vec_and(vector unsigned short __a, vector unsigned short __b) {
915   return __a & __b;
916 }
917
918 static __inline__ vector unsigned short __ATTRS_o_ai
919 vec_and(vector bool short __a, vector unsigned short __b) {
920   return (vector unsigned short)__a & __b;
921 }
922
923 static __inline__ vector unsigned short __ATTRS_o_ai
924 vec_and(vector unsigned short __a, vector bool short __b) {
925   return __a & (vector unsigned short)__b;
926 }
927
928 static __inline__ vector bool short __ATTRS_o_ai
929 vec_and(vector bool short __a, vector bool short __b) {
930   return __a & __b;
931 }
932
933 static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
934                                                   vector int __b) {
935   return __a & __b;
936 }
937
938 static __inline__ vector int __ATTRS_o_ai vec_and(vector bool int __a,
939                                                   vector int __b) {
940   return (vector int)__a & __b;
941 }
942
943 static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
944                                                   vector bool int __b) {
945   return __a & (vector int)__b;
946 }
947
948 static __inline__ vector unsigned int __ATTRS_o_ai
949 vec_and(vector unsigned int __a, vector unsigned int __b) {
950   return __a & __b;
951 }
952
953 static __inline__ vector unsigned int __ATTRS_o_ai
954 vec_and(vector bool int __a, vector unsigned int __b) {
955   return (vector unsigned int)__a & __b;
956 }
957
958 static __inline__ vector unsigned int __ATTRS_o_ai
959 vec_and(vector unsigned int __a, vector bool int __b) {
960   return __a & (vector unsigned int)__b;
961 }
962
963 static __inline__ vector bool int __ATTRS_o_ai vec_and(vector bool int __a,
964                                                        vector bool int __b) {
965   return __a & __b;
966 }
967
968 static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
969                                                     vector float __b) {
970   vector unsigned int __res =
971       (vector unsigned int)__a & (vector unsigned int)__b;
972   return (vector float)__res;
973 }
974
975 static __inline__ vector float __ATTRS_o_ai vec_and(vector bool int __a,
976                                                     vector float __b) {
977   vector unsigned int __res =
978       (vector unsigned int)__a & (vector unsigned int)__b;
979   return (vector float)__res;
980 }
981
982 static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
983                                                     vector bool int __b) {
984   vector unsigned int __res =
985       (vector unsigned int)__a & (vector unsigned int)__b;
986   return (vector float)__res;
987 }
988
989 #ifdef __VSX__
990 static __inline__ vector double __ATTRS_o_ai vec_and(vector bool long long __a,
991                                                      vector double __b) {
992   vector unsigned long long __res =
993       (vector unsigned long long)__a & (vector unsigned long long)__b;
994   return (vector double)__res;
995 }
996
997 static __inline__ vector double __ATTRS_o_ai
998 vec_and(vector double __a, vector bool long long __b) {
999   vector unsigned long long __res =
1000       (vector unsigned long long)__a & (vector unsigned long long)__b;
1001   return (vector double)__res;
1002 }
1003
1004 static __inline__ vector double __ATTRS_o_ai vec_and(vector double __a,
1005                                                      vector double __b) {
1006   vector unsigned long long __res =
1007       (vector unsigned long long)__a & (vector unsigned long long)__b;
1008   return (vector double)__res;
1009 }
1010
1011 static __inline__ vector signed long long __ATTRS_o_ai
1012 vec_and(vector signed long long __a, vector signed long long __b) {
1013   return __a & __b;
1014 }
1015
1016 static __inline__ vector signed long long __ATTRS_o_ai
1017 vec_and(vector bool long long __a, vector signed long long __b) {
1018   return (vector signed long long)__a & __b;
1019 }
1020
1021 static __inline__ vector signed long long __ATTRS_o_ai
1022 vec_and(vector signed long long __a, vector bool long long __b) {
1023   return __a & (vector signed long long)__b;
1024 }
1025
1026 static __inline__ vector unsigned long long __ATTRS_o_ai
1027 vec_and(vector unsigned long long __a, vector unsigned long long __b) {
1028   return __a & __b;
1029 }
1030
1031 static __inline__ vector unsigned long long __ATTRS_o_ai
1032 vec_and(vector bool long long __a, vector unsigned long long __b) {
1033   return (vector unsigned long long)__a & __b;
1034 }
1035
1036 static __inline__ vector unsigned long long __ATTRS_o_ai
1037 vec_and(vector unsigned long long __a, vector bool long long __b) {
1038   return __a & (vector unsigned long long)__b;
1039 }
1040
1041 static __inline__ vector bool long long __ATTRS_o_ai
1042 vec_and(vector bool long long __a, vector bool long long __b) {
1043   return __a & __b;
1044 }
1045 #endif
1046
1047 /* vec_vand */
1048
1049 static __inline__ vector signed char __ATTRS_o_ai
1050 vec_vand(vector signed char __a, vector signed char __b) {
1051   return __a & __b;
1052 }
1053
1054 static __inline__ vector signed char __ATTRS_o_ai
1055 vec_vand(vector bool char __a, vector signed char __b) {
1056   return (vector signed char)__a & __b;
1057 }
1058
1059 static __inline__ vector signed char __ATTRS_o_ai
1060 vec_vand(vector signed char __a, vector bool char __b) {
1061   return __a & (vector signed char)__b;
1062 }
1063
1064 static __inline__ vector unsigned char __ATTRS_o_ai
1065 vec_vand(vector unsigned char __a, vector unsigned char __b) {
1066   return __a & __b;
1067 }
1068
1069 static __inline__ vector unsigned char __ATTRS_o_ai
1070 vec_vand(vector bool char __a, vector unsigned char __b) {
1071   return (vector unsigned char)__a & __b;
1072 }
1073
1074 static __inline__ vector unsigned char __ATTRS_o_ai
1075 vec_vand(vector unsigned char __a, vector bool char __b) {
1076   return __a & (vector unsigned char)__b;
1077 }
1078
1079 static __inline__ vector bool char __ATTRS_o_ai vec_vand(vector bool char __a,
1080                                                          vector bool char __b) {
1081   return __a & __b;
1082 }
1083
1084 static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
1085                                                      vector short __b) {
1086   return __a & __b;
1087 }
1088
1089 static __inline__ vector short __ATTRS_o_ai vec_vand(vector bool short __a,
1090                                                      vector short __b) {
1091   return (vector short)__a & __b;
1092 }
1093
1094 static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
1095                                                      vector bool short __b) {
1096   return __a & (vector short)__b;
1097 }
1098
1099 static __inline__ vector unsigned short __ATTRS_o_ai
1100 vec_vand(vector unsigned short __a, vector unsigned short __b) {
1101   return __a & __b;
1102 }
1103
1104 static __inline__ vector unsigned short __ATTRS_o_ai
1105 vec_vand(vector bool short __a, vector unsigned short __b) {
1106   return (vector unsigned short)__a & __b;
1107 }
1108
1109 static __inline__ vector unsigned short __ATTRS_o_ai
1110 vec_vand(vector unsigned short __a, vector bool short __b) {
1111   return __a & (vector unsigned short)__b;
1112 }
1113
1114 static __inline__ vector bool short __ATTRS_o_ai
1115 vec_vand(vector bool short __a, vector bool short __b) {
1116   return __a & __b;
1117 }
1118
1119 static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
1120                                                    vector int __b) {
1121   return __a & __b;
1122 }
1123
1124 static __inline__ vector int __ATTRS_o_ai vec_vand(vector bool int __a,
1125                                                    vector int __b) {
1126   return (vector int)__a & __b;
1127 }
1128
1129 static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
1130                                                    vector bool int __b) {
1131   return __a & (vector int)__b;
1132 }
1133
1134 static __inline__ vector unsigned int __ATTRS_o_ai
1135 vec_vand(vector unsigned int __a, vector unsigned int __b) {
1136   return __a & __b;
1137 }
1138
1139 static __inline__ vector unsigned int __ATTRS_o_ai
1140 vec_vand(vector bool int __a, vector unsigned int __b) {
1141   return (vector unsigned int)__a & __b;
1142 }
1143
1144 static __inline__ vector unsigned int __ATTRS_o_ai
1145 vec_vand(vector unsigned int __a, vector bool int __b) {
1146   return __a & (vector unsigned int)__b;
1147 }
1148
1149 static __inline__ vector bool int __ATTRS_o_ai vec_vand(vector bool int __a,
1150                                                         vector bool int __b) {
1151   return __a & __b;
1152 }
1153
1154 static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
1155                                                      vector float __b) {
1156   vector unsigned int __res =
1157       (vector unsigned int)__a & (vector unsigned int)__b;
1158   return (vector float)__res;
1159 }
1160
1161 static __inline__ vector float __ATTRS_o_ai vec_vand(vector bool int __a,
1162                                                      vector float __b) {
1163   vector unsigned int __res =
1164       (vector unsigned int)__a & (vector unsigned int)__b;
1165   return (vector float)__res;
1166 }
1167
1168 static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
1169                                                      vector bool int __b) {
1170   vector unsigned int __res =
1171       (vector unsigned int)__a & (vector unsigned int)__b;
1172   return (vector float)__res;
1173 }
1174
1175 #ifdef __VSX__
1176 static __inline__ vector signed long long __ATTRS_o_ai
1177 vec_vand(vector signed long long __a, vector signed long long __b) {
1178   return __a & __b;
1179 }
1180
1181 static __inline__ vector signed long long __ATTRS_o_ai
1182 vec_vand(vector bool long long __a, vector signed long long __b) {
1183   return (vector signed long long)__a & __b;
1184 }
1185
1186 static __inline__ vector signed long long __ATTRS_o_ai
1187 vec_vand(vector signed long long __a, vector bool long long __b) {
1188   return __a & (vector signed long long)__b;
1189 }
1190
1191 static __inline__ vector unsigned long long __ATTRS_o_ai
1192 vec_vand(vector unsigned long long __a, vector unsigned long long __b) {
1193   return __a & __b;
1194 }
1195
1196 static __inline__ vector unsigned long long __ATTRS_o_ai
1197 vec_vand(vector bool long long __a, vector unsigned long long __b) {
1198   return (vector unsigned long long)__a & __b;
1199 }
1200
1201 static __inline__ vector unsigned long long __ATTRS_o_ai
1202 vec_vand(vector unsigned long long __a, vector bool long long __b) {
1203   return __a & (vector unsigned long long)__b;
1204 }
1205
1206 static __inline__ vector bool long long __ATTRS_o_ai
1207 vec_vand(vector bool long long __a, vector bool long long __b) {
1208   return __a & __b;
1209 }
1210 #endif
1211
1212 /* vec_andc */
1213
1214 #define __builtin_altivec_vandc vec_andc
1215
1216 static __inline__ vector signed char __ATTRS_o_ai
1217 vec_andc(vector signed char __a, vector signed char __b) {
1218   return __a & ~__b;
1219 }
1220
1221 static __inline__ vector signed char __ATTRS_o_ai
1222 vec_andc(vector bool char __a, vector signed char __b) {
1223   return (vector signed char)__a & ~__b;
1224 }
1225
1226 static __inline__ vector signed char __ATTRS_o_ai
1227 vec_andc(vector signed char __a, vector bool char __b) {
1228   return __a & ~(vector signed char)__b;
1229 }
1230
1231 static __inline__ vector unsigned char __ATTRS_o_ai
1232 vec_andc(vector unsigned char __a, vector unsigned char __b) {
1233   return __a & ~__b;
1234 }
1235
1236 static __inline__ vector unsigned char __ATTRS_o_ai
1237 vec_andc(vector bool char __a, vector unsigned char __b) {
1238   return (vector unsigned char)__a & ~__b;
1239 }
1240
1241 static __inline__ vector unsigned char __ATTRS_o_ai
1242 vec_andc(vector unsigned char __a, vector bool char __b) {
1243   return __a & ~(vector unsigned char)__b;
1244 }
1245
1246 static __inline__ vector bool char __ATTRS_o_ai vec_andc(vector bool char __a,
1247                                                          vector bool char __b) {
1248   return __a & ~__b;
1249 }
1250
1251 static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
1252                                                      vector short __b) {
1253   return __a & ~__b;
1254 }
1255
1256 static __inline__ vector short __ATTRS_o_ai vec_andc(vector bool short __a,
1257                                                      vector short __b) {
1258   return (vector short)__a & ~__b;
1259 }
1260
1261 static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
1262                                                      vector bool short __b) {
1263   return __a & ~(vector short)__b;
1264 }
1265
1266 static __inline__ vector unsigned short __ATTRS_o_ai
1267 vec_andc(vector unsigned short __a, vector unsigned short __b) {
1268   return __a & ~__b;
1269 }
1270
1271 static __inline__ vector unsigned short __ATTRS_o_ai
1272 vec_andc(vector bool short __a, vector unsigned short __b) {
1273   return (vector unsigned short)__a & ~__b;
1274 }
1275
1276 static __inline__ vector unsigned short __ATTRS_o_ai
1277 vec_andc(vector unsigned short __a, vector bool short __b) {
1278   return __a & ~(vector unsigned short)__b;
1279 }
1280
1281 static __inline__ vector bool short __ATTRS_o_ai
1282 vec_andc(vector bool short __a, vector bool short __b) {
1283   return __a & ~__b;
1284 }
1285
1286 static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
1287                                                    vector int __b) {
1288   return __a & ~__b;
1289 }
1290
1291 static __inline__ vector int __ATTRS_o_ai vec_andc(vector bool int __a,
1292                                                    vector int __b) {
1293   return (vector int)__a & ~__b;
1294 }
1295
1296 static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
1297                                                    vector bool int __b) {
1298   return __a & ~(vector int)__b;
1299 }
1300
1301 static __inline__ vector unsigned int __ATTRS_o_ai
1302 vec_andc(vector unsigned int __a, vector unsigned int __b) {
1303   return __a & ~__b;
1304 }
1305
1306 static __inline__ vector unsigned int __ATTRS_o_ai
1307 vec_andc(vector bool int __a, vector unsigned int __b) {
1308   return (vector unsigned int)__a & ~__b;
1309 }
1310
1311 static __inline__ vector unsigned int __ATTRS_o_ai
1312 vec_andc(vector unsigned int __a, vector bool int __b) {
1313   return __a & ~(vector unsigned int)__b;
1314 }
1315
1316 static __inline__ vector bool int __ATTRS_o_ai vec_andc(vector bool int __a,
1317                                                         vector bool int __b) {
1318   return __a & ~__b;
1319 }
1320
1321 static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
1322                                                      vector float __b) {
1323   vector unsigned int __res =
1324       (vector unsigned int)__a & ~(vector unsigned int)__b;
1325   return (vector float)__res;
1326 }
1327
1328 static __inline__ vector float __ATTRS_o_ai vec_andc(vector bool int __a,
1329                                                      vector float __b) {
1330   vector unsigned int __res =
1331       (vector unsigned int)__a & ~(vector unsigned int)__b;
1332   return (vector float)__res;
1333 }
1334
1335 static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
1336                                                      vector bool int __b) {
1337   vector unsigned int __res =
1338       (vector unsigned int)__a & ~(vector unsigned int)__b;
1339   return (vector float)__res;
1340 }
1341
1342 #ifdef __VSX__
1343 static __inline__ vector double __ATTRS_o_ai vec_andc(vector bool long long __a,
1344                                                       vector double __b) {
1345   vector unsigned long long __res =
1346       (vector unsigned long long)__a & ~(vector unsigned long long)__b;
1347   return (vector double)__res;
1348 }
1349
1350 static __inline__ vector double __ATTRS_o_ai
1351 vec_andc(vector double __a, vector bool long long __b) {
1352   vector unsigned long long __res =
1353       (vector unsigned long long)__a & ~(vector unsigned long long)__b;
1354   return (vector double)__res;
1355 }
1356
1357 static __inline__ vector double __ATTRS_o_ai vec_andc(vector double __a,
1358                                                       vector double __b) {
1359   vector unsigned long long __res =
1360       (vector unsigned long long)__a & ~(vector unsigned long long)__b;
1361   return (vector double)__res;
1362 }
1363
1364 static __inline__ vector signed long long __ATTRS_o_ai
1365 vec_andc(vector signed long long __a, vector signed long long __b) {
1366   return __a & ~__b;
1367 }
1368
1369 static __inline__ vector signed long long __ATTRS_o_ai
1370 vec_andc(vector bool long long __a, vector signed long long __b) {
1371   return (vector signed long long)__a & ~__b;
1372 }
1373
1374 static __inline__ vector signed long long __ATTRS_o_ai
1375 vec_andc(vector signed long long __a, vector bool long long __b) {
1376   return __a & ~(vector signed long long)__b;
1377 }
1378
1379 static __inline__ vector unsigned long long __ATTRS_o_ai
1380 vec_andc(vector unsigned long long __a, vector unsigned long long __b) {
1381   return __a & ~__b;
1382 }
1383
1384 static __inline__ vector unsigned long long __ATTRS_o_ai
1385 vec_andc(vector bool long long __a, vector unsigned long long __b) {
1386   return (vector unsigned long long)__a & ~__b;
1387 }
1388
1389 static __inline__ vector unsigned long long __ATTRS_o_ai
1390 vec_andc(vector unsigned long long __a, vector bool long long __b) {
1391   return __a & ~(vector unsigned long long)__b;
1392 }
1393
1394 static __inline__ vector bool long long __ATTRS_o_ai
1395 vec_andc(vector bool long long __a, vector bool long long __b) {
1396   return __a & ~__b;
1397 }
1398 #endif
1399
1400 /* vec_vandc */
1401
1402 static __inline__ vector signed char __ATTRS_o_ai
1403 vec_vandc(vector signed char __a, vector signed char __b) {
1404   return __a & ~__b;
1405 }
1406
1407 static __inline__ vector signed char __ATTRS_o_ai
1408 vec_vandc(vector bool char __a, vector signed char __b) {
1409   return (vector signed char)__a & ~__b;
1410 }
1411
1412 static __inline__ vector signed char __ATTRS_o_ai
1413 vec_vandc(vector signed char __a, vector bool char __b) {
1414   return __a & ~(vector signed char)__b;
1415 }
1416
1417 static __inline__ vector unsigned char __ATTRS_o_ai
1418 vec_vandc(vector unsigned char __a, vector unsigned char __b) {
1419   return __a & ~__b;
1420 }
1421
1422 static __inline__ vector unsigned char __ATTRS_o_ai
1423 vec_vandc(vector bool char __a, vector unsigned char __b) {
1424   return (vector unsigned char)__a & ~__b;
1425 }
1426
1427 static __inline__ vector unsigned char __ATTRS_o_ai
1428 vec_vandc(vector unsigned char __a, vector bool char __b) {
1429   return __a & ~(vector unsigned char)__b;
1430 }
1431
1432 static __inline__ vector bool char __ATTRS_o_ai
1433 vec_vandc(vector bool char __a, vector bool char __b) {
1434   return __a & ~__b;
1435 }
1436
1437 static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
1438                                                       vector short __b) {
1439   return __a & ~__b;
1440 }
1441
1442 static __inline__ vector short __ATTRS_o_ai vec_vandc(vector bool short __a,
1443                                                       vector short __b) {
1444   return (vector short)__a & ~__b;
1445 }
1446
1447 static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
1448                                                       vector bool short __b) {
1449   return __a & ~(vector short)__b;
1450 }
1451
1452 static __inline__ vector unsigned short __ATTRS_o_ai
1453 vec_vandc(vector unsigned short __a, vector unsigned short __b) {
1454   return __a & ~__b;
1455 }
1456
1457 static __inline__ vector unsigned short __ATTRS_o_ai
1458 vec_vandc(vector bool short __a, vector unsigned short __b) {
1459   return (vector unsigned short)__a & ~__b;
1460 }
1461
1462 static __inline__ vector unsigned short __ATTRS_o_ai
1463 vec_vandc(vector unsigned short __a, vector bool short __b) {
1464   return __a & ~(vector unsigned short)__b;
1465 }
1466
1467 static __inline__ vector bool short __ATTRS_o_ai
1468 vec_vandc(vector bool short __a, vector bool short __b) {
1469   return __a & ~__b;
1470 }
1471
1472 static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
1473                                                     vector int __b) {
1474   return __a & ~__b;
1475 }
1476
1477 static __inline__ vector int __ATTRS_o_ai vec_vandc(vector bool int __a,
1478                                                     vector int __b) {
1479   return (vector int)__a & ~__b;
1480 }
1481
1482 static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
1483                                                     vector bool int __b) {
1484   return __a & ~(vector int)__b;
1485 }
1486
1487 static __inline__ vector unsigned int __ATTRS_o_ai
1488 vec_vandc(vector unsigned int __a, vector unsigned int __b) {
1489   return __a & ~__b;
1490 }
1491
1492 static __inline__ vector unsigned int __ATTRS_o_ai
1493 vec_vandc(vector bool int __a, vector unsigned int __b) {
1494   return (vector unsigned int)__a & ~__b;
1495 }
1496
1497 static __inline__ vector unsigned int __ATTRS_o_ai
1498 vec_vandc(vector unsigned int __a, vector bool int __b) {
1499   return __a & ~(vector unsigned int)__b;
1500 }
1501
1502 static __inline__ vector bool int __ATTRS_o_ai vec_vandc(vector bool int __a,
1503                                                          vector bool int __b) {
1504   return __a & ~__b;
1505 }
1506
1507 static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
1508                                                       vector float __b) {
1509   vector unsigned int __res =
1510       (vector unsigned int)__a & ~(vector unsigned int)__b;
1511   return (vector float)__res;
1512 }
1513
1514 static __inline__ vector float __ATTRS_o_ai vec_vandc(vector bool int __a,
1515                                                       vector float __b) {
1516   vector unsigned int __res =
1517       (vector unsigned int)__a & ~(vector unsigned int)__b;
1518   return (vector float)__res;
1519 }
1520
1521 static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
1522                                                       vector bool int __b) {
1523   vector unsigned int __res =
1524       (vector unsigned int)__a & ~(vector unsigned int)__b;
1525   return (vector float)__res;
1526 }
1527
1528 #ifdef __VSX__
1529 static __inline__ vector signed long long __ATTRS_o_ai
1530 vec_vandc(vector signed long long __a, vector signed long long __b) {
1531   return __a & ~__b;
1532 }
1533
1534 static __inline__ vector signed long long __ATTRS_o_ai
1535 vec_vandc(vector bool long long __a, vector signed long long __b) {
1536   return (vector signed long long)__a & ~__b;
1537 }
1538
1539 static __inline__ vector signed long long __ATTRS_o_ai
1540 vec_vandc(vector signed long long __a, vector bool long long __b) {
1541   return __a & ~(vector signed long long)__b;
1542 }
1543
1544 static __inline__ vector unsigned long long __ATTRS_o_ai
1545 vec_vandc(vector unsigned long long __a, vector unsigned long long __b) {
1546   return __a & ~__b;
1547 }
1548
1549 static __inline__ vector unsigned long long __ATTRS_o_ai
1550 vec_vandc(vector bool long long __a, vector unsigned long long __b) {
1551   return (vector unsigned long long)__a & ~__b;
1552 }
1553
1554 static __inline__ vector unsigned long long __ATTRS_o_ai
1555 vec_vandc(vector unsigned long long __a, vector bool long long __b) {
1556   return __a & ~(vector unsigned long long)__b;
1557 }
1558
1559 static __inline__ vector bool long long __ATTRS_o_ai
1560 vec_vandc(vector bool long long __a, vector bool long long __b) {
1561   return __a & ~__b;
1562 }
1563 #endif
1564
1565 /* vec_avg */
1566
1567 static __inline__ vector signed char __ATTRS_o_ai
1568 vec_avg(vector signed char __a, vector signed char __b) {
1569   return __builtin_altivec_vavgsb(__a, __b);
1570 }
1571
1572 static __inline__ vector unsigned char __ATTRS_o_ai
1573 vec_avg(vector unsigned char __a, vector unsigned char __b) {
1574   return __builtin_altivec_vavgub(__a, __b);
1575 }
1576
1577 static __inline__ vector short __ATTRS_o_ai vec_avg(vector short __a,
1578                                                     vector short __b) {
1579   return __builtin_altivec_vavgsh(__a, __b);
1580 }
1581
1582 static __inline__ vector unsigned short __ATTRS_o_ai
1583 vec_avg(vector unsigned short __a, vector unsigned short __b) {
1584   return __builtin_altivec_vavguh(__a, __b);
1585 }
1586
1587 static __inline__ vector int __ATTRS_o_ai vec_avg(vector int __a,
1588                                                   vector int __b) {
1589   return __builtin_altivec_vavgsw(__a, __b);
1590 }
1591
1592 static __inline__ vector unsigned int __ATTRS_o_ai
1593 vec_avg(vector unsigned int __a, vector unsigned int __b) {
1594   return __builtin_altivec_vavguw(__a, __b);
1595 }
1596
1597 /* vec_vavgsb */
1598
1599 static __inline__ vector signed char __attribute__((__always_inline__))
1600 vec_vavgsb(vector signed char __a, vector signed char __b) {
1601   return __builtin_altivec_vavgsb(__a, __b);
1602 }
1603
1604 /* vec_vavgub */
1605
1606 static __inline__ vector unsigned char __attribute__((__always_inline__))
1607 vec_vavgub(vector unsigned char __a, vector unsigned char __b) {
1608   return __builtin_altivec_vavgub(__a, __b);
1609 }
1610
1611 /* vec_vavgsh */
1612
1613 static __inline__ vector short __attribute__((__always_inline__))
1614 vec_vavgsh(vector short __a, vector short __b) {
1615   return __builtin_altivec_vavgsh(__a, __b);
1616 }
1617
1618 /* vec_vavguh */
1619
1620 static __inline__ vector unsigned short __attribute__((__always_inline__))
1621 vec_vavguh(vector unsigned short __a, vector unsigned short __b) {
1622   return __builtin_altivec_vavguh(__a, __b);
1623 }
1624
1625 /* vec_vavgsw */
1626
1627 static __inline__ vector int __attribute__((__always_inline__))
1628 vec_vavgsw(vector int __a, vector int __b) {
1629   return __builtin_altivec_vavgsw(__a, __b);
1630 }
1631
1632 /* vec_vavguw */
1633
1634 static __inline__ vector unsigned int __attribute__((__always_inline__))
1635 vec_vavguw(vector unsigned int __a, vector unsigned int __b) {
1636   return __builtin_altivec_vavguw(__a, __b);
1637 }
1638
1639 /* vec_ceil */
1640
1641 static __inline__ vector float __ATTRS_o_ai vec_ceil(vector float __a) {
1642 #ifdef __VSX__
1643   return __builtin_vsx_xvrspip(__a);
1644 #else
1645   return __builtin_altivec_vrfip(__a);
1646 #endif
1647 }
1648
1649 #ifdef __VSX__
1650 static __inline__ vector double __ATTRS_o_ai vec_ceil(vector double __a) {
1651   return __builtin_vsx_xvrdpip(__a);
1652 }
1653 #endif
1654
1655 /* vec_roundp */
1656 static __inline__ vector float __ATTRS_o_ai vec_roundp(vector float __a) {
1657   return vec_ceil(__a);
1658 }
1659
1660 #ifdef __VSX__
1661 static __inline__ vector double __ATTRS_o_ai vec_roundp(vector double __a) {
1662   return vec_ceil(__a);
1663 }
1664 #endif
1665
1666 /* vec_vrfip */
1667
1668 static __inline__ vector float __attribute__((__always_inline__))
1669 vec_vrfip(vector float __a) {
1670   return __builtin_altivec_vrfip(__a);
1671 }
1672
1673 /* vec_cmpb */
1674
1675 static __inline__ vector int __attribute__((__always_inline__))
1676 vec_cmpb(vector float __a, vector float __b) {
1677   return __builtin_altivec_vcmpbfp(__a, __b);
1678 }
1679
1680 /* vec_vcmpbfp */
1681
1682 static __inline__ vector int __attribute__((__always_inline__))
1683 vec_vcmpbfp(vector float __a, vector float __b) {
1684   return __builtin_altivec_vcmpbfp(__a, __b);
1685 }
1686
1687 /* vec_cmpeq */
1688
1689 static __inline__ vector bool char __ATTRS_o_ai
1690 vec_cmpeq(vector signed char __a, vector signed char __b) {
1691   return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1692                                                       (vector char)__b);
1693 }
1694
1695 static __inline__ vector bool char __ATTRS_o_ai
1696 vec_cmpeq(vector unsigned char __a, vector unsigned char __b) {
1697   return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1698                                                       (vector char)__b);
1699 }
1700
1701 static __inline__ vector bool char __ATTRS_o_ai
1702 vec_cmpeq(vector bool char __a, vector bool char __b) {
1703   return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1704                                                       (vector char)__b);
1705 }
1706
1707 static __inline__ vector bool short __ATTRS_o_ai vec_cmpeq(vector short __a,
1708                                                            vector short __b) {
1709   return (vector bool short)__builtin_altivec_vcmpequh(__a, __b);
1710 }
1711
1712 static __inline__ vector bool short __ATTRS_o_ai
1713 vec_cmpeq(vector unsigned short __a, vector unsigned short __b) {
1714   return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,
1715                                                        (vector short)__b);
1716 }
1717
1718 static __inline__ vector bool short __ATTRS_o_ai
1719 vec_cmpeq(vector bool short __a, vector bool short __b) {
1720   return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,
1721                                                        (vector short)__b);
1722 }
1723
1724 static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector int __a,
1725                                                          vector int __b) {
1726   return (vector bool int)__builtin_altivec_vcmpequw(__a, __b);
1727 }
1728
1729 static __inline__ vector bool int __ATTRS_o_ai
1730 vec_cmpeq(vector unsigned int __a, vector unsigned int __b) {
1731   return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,
1732                                                      (vector int)__b);
1733 }
1734
1735 static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector bool int __a,
1736                                                          vector bool int __b) {
1737   return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,
1738                                                      (vector int)__b);
1739 }
1740
1741 #ifdef __POWER8_VECTOR__
1742 static __inline__ vector bool long long __ATTRS_o_ai
1743 vec_cmpeq(vector signed long long __a, vector signed long long __b) {
1744   return (vector bool long long)__builtin_altivec_vcmpequd(__a, __b);
1745 }
1746
1747 static __inline__ vector bool long long __ATTRS_o_ai
1748 vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {
1749   return (vector bool long long)__builtin_altivec_vcmpequd(
1750       (vector long long)__a, (vector long long)__b);
1751 }
1752
1753 static __inline__ vector bool long long __ATTRS_o_ai
1754 vec_cmpeq(vector bool long long __a, vector bool long long __b) {
1755   return (vector bool long long)__builtin_altivec_vcmpequd(
1756       (vector long long)__a, (vector long long)__b);
1757 }
1758 #elif defined(__VSX__)
1759 static __inline__ vector bool long long __ATTRS_o_ai
1760 vec_cmpeq(vector signed long long __a, vector signed long long __b) {
1761   vector bool int __wordcmp =
1762       vec_cmpeq((vector signed int)__a, (vector signed int)__b);
1763 #ifdef __LITTLE_ENDIAN__
1764   __wordcmp &= __builtin_shufflevector(__wordcmp, __wordcmp, 3, 0, 1, 2);
1765   return (vector bool long long)__builtin_shufflevector(__wordcmp, __wordcmp, 1,
1766                                                         1, 3, 3);
1767 #else
1768   __wordcmp &= __builtin_shufflevector(__wordcmp, __wordcmp, 1, 2, 3, 0);
1769   return (vector bool long long)__builtin_shufflevector(__wordcmp, __wordcmp, 0,
1770                                                         0, 2, 2);
1771 #endif
1772 }
1773
1774 static __inline__ vector bool long long __ATTRS_o_ai
1775 vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {
1776   return vec_cmpeq((vector signed long long)__a, (vector signed long long)__b);
1777 }
1778
1779 static __inline__ vector bool long long __ATTRS_o_ai
1780 vec_cmpeq(vector bool long long __a, vector bool long long __b) {
1781   return vec_cmpeq((vector signed long long)__a, (vector signed long long)__b);
1782 }
1783 #endif
1784
1785 static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector float __a,
1786                                                          vector float __b) {
1787 #ifdef __VSX__
1788   return (vector bool int)__builtin_vsx_xvcmpeqsp(__a, __b);
1789 #else
1790   return (vector bool int)__builtin_altivec_vcmpeqfp(__a, __b);
1791 #endif
1792 }
1793
1794 #ifdef __VSX__
1795 static __inline__ vector bool long long __ATTRS_o_ai
1796 vec_cmpeq(vector double __a, vector double __b) {
1797   return (vector bool long long)__builtin_vsx_xvcmpeqdp(__a, __b);
1798 }
1799 #endif
1800
1801 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
1802 static __inline__ vector bool __int128 __ATTRS_o_ai
1803 vec_cmpeq(vector signed __int128 __a, vector signed __int128 __b) {
1804   return (vector bool __int128)__builtin_altivec_vcmpequq(
1805       (vector bool __int128)__a, (vector bool __int128)__b);
1806 }
1807
1808 static __inline__ vector bool __int128 __ATTRS_o_ai
1809 vec_cmpeq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
1810   return (vector bool __int128)__builtin_altivec_vcmpequq(
1811       (vector bool __int128)__a, (vector bool __int128)__b);
1812 }
1813 #endif
1814
1815 #ifdef __POWER9_VECTOR__
1816 /* vec_cmpne */
1817
1818 static __inline__ vector bool char __ATTRS_o_ai
1819 vec_cmpne(vector bool char __a, vector bool char __b) {
1820   return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
1821                                                      (vector char)__b);
1822 }
1823
1824 static __inline__ vector bool char __ATTRS_o_ai
1825 vec_cmpne(vector signed char __a, vector signed char __b) {
1826   return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
1827                                                      (vector char)__b);
1828 }
1829
1830 static __inline__ vector bool char __ATTRS_o_ai
1831 vec_cmpne(vector unsigned char __a, vector unsigned char __b) {
1832   return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
1833                                                      (vector char)__b);
1834 }
1835
1836 static __inline__ vector bool short __ATTRS_o_ai
1837 vec_cmpne(vector bool short __a, vector bool short __b) {
1838   return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
1839                                                       (vector short)__b);
1840 }
1841
1842 static __inline__ vector bool short __ATTRS_o_ai
1843 vec_cmpne(vector signed short __a, vector signed short __b) {
1844   return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
1845                                                       (vector short)__b);
1846 }
1847
1848 static __inline__ vector bool short __ATTRS_o_ai
1849 vec_cmpne(vector unsigned short __a, vector unsigned short __b) {
1850   return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
1851                                                       (vector short)__b);
1852 }
1853
1854 static __inline__ vector bool int __ATTRS_o_ai
1855 vec_cmpne(vector bool int __a, vector bool int __b) {
1856   return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1857                                                     (vector int)__b);
1858 }
1859
1860 static __inline__ vector bool int __ATTRS_o_ai
1861 vec_cmpne(vector signed int __a, vector signed int __b) {
1862   return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1863                                                     (vector int)__b);
1864 }
1865
1866 static __inline__ vector bool int __ATTRS_o_ai
1867 vec_cmpne(vector unsigned int __a, vector unsigned int __b) {
1868   return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1869                                                     (vector int)__b);
1870 }
1871
1872 static __inline__ vector bool int __ATTRS_o_ai
1873 vec_cmpne(vector float __a, vector float __b) {
1874   return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1875                                                     (vector int)__b);
1876 }
1877
1878 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
1879 static __inline__ vector bool __int128 __ATTRS_o_ai
1880 vec_cmpne(vector unsigned __int128 __a, vector unsigned __int128 __b) {
1881   return (vector bool __int128) ~(__builtin_altivec_vcmpequq(
1882       (vector bool __int128)__a, (vector bool __int128)__b));
1883 }
1884
1885 static __inline__ vector bool __int128 __ATTRS_o_ai
1886 vec_cmpne(vector signed __int128 __a, vector signed __int128 __b) {
1887   return (vector bool __int128) ~(__builtin_altivec_vcmpequq(
1888       (vector bool __int128)__a, (vector bool __int128)__b));
1889 }
1890 #endif
1891
1892 /* vec_cmpnez */
1893
1894 static __inline__ vector bool char __ATTRS_o_ai
1895 vec_cmpnez(vector signed char __a, vector signed char __b) {
1896   return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,
1897                                                       (vector char)__b);
1898 }
1899
1900 static __inline__ vector bool char __ATTRS_o_ai
1901 vec_cmpnez(vector unsigned char __a, vector unsigned char __b) {
1902   return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,
1903                                                       (vector char)__b);
1904 }
1905
1906 static __inline__ vector bool short __ATTRS_o_ai
1907 vec_cmpnez(vector signed short __a, vector signed short __b) {
1908   return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,
1909                                                        (vector short)__b);
1910 }
1911
1912 static __inline__ vector bool short __ATTRS_o_ai
1913 vec_cmpnez(vector unsigned short __a, vector unsigned short __b) {
1914   return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,
1915                                                        (vector short)__b);
1916 }
1917
1918 static __inline__ vector bool int __ATTRS_o_ai
1919 vec_cmpnez(vector signed int __a, vector signed int __b) {
1920   return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,
1921                                                      (vector int)__b);
1922 }
1923
1924 static __inline__ vector bool int __ATTRS_o_ai
1925 vec_cmpnez(vector unsigned int __a, vector unsigned int __b) {
1926   return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,
1927                                                      (vector int)__b);
1928 }
1929
1930 static __inline__ signed int __ATTRS_o_ai
1931 vec_cntlz_lsbb(vector signed char __a) {
1932 #ifdef __LITTLE_ENDIAN__
1933   return __builtin_altivec_vctzlsbb(__a);
1934 #else
1935   return __builtin_altivec_vclzlsbb(__a);
1936 #endif
1937 }
1938
1939 static __inline__ signed int __ATTRS_o_ai
1940 vec_cntlz_lsbb(vector unsigned char __a) {
1941 #ifdef __LITTLE_ENDIAN__
1942   return __builtin_altivec_vctzlsbb(__a);
1943 #else
1944   return __builtin_altivec_vclzlsbb(__a);
1945 #endif
1946 }
1947
1948 static __inline__ signed int __ATTRS_o_ai
1949 vec_cnttz_lsbb(vector signed char __a) {
1950 #ifdef __LITTLE_ENDIAN__
1951   return __builtin_altivec_vclzlsbb(__a);
1952 #else
1953   return __builtin_altivec_vctzlsbb(__a);
1954 #endif
1955 }
1956
1957 static __inline__ signed int __ATTRS_o_ai
1958 vec_cnttz_lsbb(vector unsigned char __a) {
1959 #ifdef __LITTLE_ENDIAN__
1960   return __builtin_altivec_vclzlsbb(__a);
1961 #else
1962   return __builtin_altivec_vctzlsbb(__a);
1963 #endif
1964 }
1965
1966 static __inline__ vector unsigned int __ATTRS_o_ai
1967 vec_parity_lsbb(vector unsigned int __a) {
1968   return __builtin_altivec_vprtybw(__a);
1969 }
1970
1971 static __inline__ vector unsigned int __ATTRS_o_ai
1972 vec_parity_lsbb(vector signed int __a) {
1973   return __builtin_altivec_vprtybw(__a);
1974 }
1975
1976 #ifdef __SIZEOF_INT128__
1977 static __inline__ vector unsigned __int128 __ATTRS_o_ai
1978 vec_parity_lsbb(vector unsigned __int128 __a) {
1979   return __builtin_altivec_vprtybq(__a);
1980 }
1981
1982 static __inline__ vector unsigned __int128 __ATTRS_o_ai
1983 vec_parity_lsbb(vector signed __int128 __a) {
1984   return __builtin_altivec_vprtybq(__a);
1985 }
1986 #endif
1987
1988 static __inline__ vector unsigned long long __ATTRS_o_ai
1989 vec_parity_lsbb(vector unsigned long long __a) {
1990   return __builtin_altivec_vprtybd(__a);
1991 }
1992
1993 static __inline__ vector unsigned long long __ATTRS_o_ai
1994 vec_parity_lsbb(vector signed long long __a) {
1995   return __builtin_altivec_vprtybd(__a);
1996 }
1997
1998 #else
1999 /* vec_cmpne */
2000
2001 static __inline__ vector bool char __ATTRS_o_ai
2002 vec_cmpne(vector bool char __a, vector bool char __b) {
2003   return ~(vec_cmpeq(__a, __b));
2004 }
2005
2006 static __inline__ vector bool char __ATTRS_o_ai
2007 vec_cmpne(vector signed char __a, vector signed char __b) {
2008   return ~(vec_cmpeq(__a, __b));
2009 }
2010
2011 static __inline__ vector bool char __ATTRS_o_ai
2012 vec_cmpne(vector unsigned char __a, vector unsigned char __b) {
2013   return ~(vec_cmpeq(__a, __b));
2014 }
2015
2016 static __inline__ vector bool short __ATTRS_o_ai
2017 vec_cmpne(vector bool short __a, vector bool short __b) {
2018   return ~(vec_cmpeq(__a, __b));
2019 }
2020
2021 static __inline__ vector bool short __ATTRS_o_ai
2022 vec_cmpne(vector signed short __a, vector signed short __b) {
2023   return ~(vec_cmpeq(__a, __b));
2024 }
2025
2026 static __inline__ vector bool short __ATTRS_o_ai
2027 vec_cmpne(vector unsigned short __a, vector unsigned short __b) {
2028   return ~(vec_cmpeq(__a, __b));
2029 }
2030
2031 static __inline__ vector bool int __ATTRS_o_ai
2032 vec_cmpne(vector bool int __a, vector bool int __b) {
2033   return ~(vec_cmpeq(__a, __b));
2034 }
2035
2036 static __inline__ vector bool int __ATTRS_o_ai
2037 vec_cmpne(vector signed int __a, vector signed int __b) {
2038   return ~(vec_cmpeq(__a, __b));
2039 }
2040
2041 static __inline__ vector bool int __ATTRS_o_ai
2042 vec_cmpne(vector unsigned int __a, vector unsigned int __b) {
2043   return ~(vec_cmpeq(__a, __b));
2044 }
2045
2046 static __inline__ vector bool int __ATTRS_o_ai
2047 vec_cmpne(vector float __a, vector float __b) {
2048   return ~(vec_cmpeq(__a, __b));
2049 }
2050 #endif
2051
2052 #ifdef __POWER8_VECTOR__
2053 static __inline__ vector bool long long __ATTRS_o_ai
2054 vec_cmpne(vector bool long long __a, vector bool long long __b) {
2055   return (vector bool long long)
2056     ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
2057 }
2058
2059 static __inline__ vector bool long long __ATTRS_o_ai
2060 vec_cmpne(vector signed long long __a, vector signed long long __b) {
2061   return (vector bool long long)
2062     ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
2063 }
2064
2065 static __inline__ vector bool long long __ATTRS_o_ai
2066 vec_cmpne(vector unsigned long long __a, vector unsigned long long __b) {
2067   return (vector bool long long)
2068     ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
2069 }
2070 #elif defined(__VSX__)
2071 static __inline__ vector bool long long __ATTRS_o_ai
2072 vec_cmpne(vector bool long long __a, vector bool long long __b) {
2073   return (vector bool long long)~(
2074       vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
2075 }
2076
2077 static __inline__ vector bool long long __ATTRS_o_ai
2078 vec_cmpne(vector signed long long __a, vector signed long long __b) {
2079   return (vector bool long long)~(
2080       vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
2081 }
2082
2083 static __inline__ vector bool long long __ATTRS_o_ai
2084 vec_cmpne(vector unsigned long long __a, vector unsigned long long __b) {
2085   return (vector bool long long)~(
2086       vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
2087 }
2088 #endif
2089
2090 #ifdef __VSX__
2091 static __inline__ vector bool long long __ATTRS_o_ai
2092 vec_cmpne(vector double __a, vector double __b) {
2093   return (vector bool long long)
2094     ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
2095 }
2096 #endif
2097
2098 /* vec_cmpgt */
2099
2100 static __inline__ vector bool char __ATTRS_o_ai
2101 vec_cmpgt(vector signed char __a, vector signed char __b) {
2102   return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
2103 }
2104
2105 static __inline__ vector bool char __ATTRS_o_ai
2106 vec_cmpgt(vector unsigned char __a, vector unsigned char __b) {
2107   return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
2108 }
2109
2110 static __inline__ vector bool short __ATTRS_o_ai vec_cmpgt(vector short __a,
2111                                                            vector short __b) {
2112   return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
2113 }
2114
2115 static __inline__ vector bool short __ATTRS_o_ai
2116 vec_cmpgt(vector unsigned short __a, vector unsigned short __b) {
2117   return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
2118 }
2119
2120 static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector int __a,
2121                                                          vector int __b) {
2122   return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
2123 }
2124
2125 static __inline__ vector bool int __ATTRS_o_ai
2126 vec_cmpgt(vector unsigned int __a, vector unsigned int __b) {
2127   return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
2128 }
2129
2130 #ifdef __POWER8_VECTOR__
2131 static __inline__ vector bool long long __ATTRS_o_ai
2132 vec_cmpgt(vector signed long long __a, vector signed long long __b) {
2133   return (vector bool long long)__builtin_altivec_vcmpgtsd(__a, __b);
2134 }
2135
2136 static __inline__ vector bool long long __ATTRS_o_ai
2137 vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {
2138   return (vector bool long long)__builtin_altivec_vcmpgtud(__a, __b);
2139 }
2140 #elif defined(__VSX__)
2141 static __inline__ vector bool long long __ATTRS_o_ai
2142 vec_cmpgt(vector signed long long __a, vector signed long long __b) {
2143   vector signed int __sgtw = (vector signed int)vec_cmpgt(
2144       (vector signed int)__a, (vector signed int)__b);
2145   vector unsigned int __ugtw = (vector unsigned int)vec_cmpgt(
2146       (vector unsigned int)__a, (vector unsigned int)__b);
2147   vector unsigned int __eqw = (vector unsigned int)vec_cmpeq(
2148       (vector signed int)__a, (vector signed int)__b);
2149 #ifdef __LITTLE_ENDIAN__
2150   __ugtw = __builtin_shufflevector(__ugtw, __ugtw, 3, 0, 1, 2) & __eqw;
2151   __sgtw |= (vector signed int)__ugtw;
2152   return (vector bool long long)__builtin_shufflevector(__sgtw, __sgtw, 1, 1, 3,
2153                                                         3);
2154 #else
2155   __ugtw = __builtin_shufflevector(__ugtw, __ugtw, 1, 2, 3, 0) & __eqw;
2156   __sgtw |= (vector signed int)__ugtw;
2157   return (vector bool long long)__builtin_shufflevector(__sgtw, __sgtw, 0, 0, 2,
2158                                                         2);
2159 #endif
2160 }
2161
2162 static __inline__ vector bool long long __ATTRS_o_ai
2163 vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {
2164   vector unsigned int __ugtw = (vector unsigned int)vec_cmpgt(
2165       (vector unsigned int)__a, (vector unsigned int)__b);
2166   vector unsigned int __eqw = (vector unsigned int)vec_cmpeq(
2167       (vector signed int)__a, (vector signed int)__b);
2168 #ifdef __LITTLE_ENDIAN__
2169   __eqw = __builtin_shufflevector(__ugtw, __ugtw, 3, 0, 1, 2) & __eqw;
2170   __ugtw |= __eqw;
2171   return (vector bool long long)__builtin_shufflevector(__ugtw, __ugtw, 1, 1, 3,
2172                                                         3);
2173 #else
2174   __eqw = __builtin_shufflevector(__ugtw, __ugtw, 1, 2, 3, 0) & __eqw;
2175   __ugtw |= __eqw;
2176   return (vector bool long long)__builtin_shufflevector(__ugtw, __ugtw, 0, 0, 2,
2177                                                         2);
2178 #endif
2179 }
2180 #endif
2181
2182 static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector float __a,
2183                                                          vector float __b) {
2184 #ifdef __VSX__
2185   return (vector bool int)__builtin_vsx_xvcmpgtsp(__a, __b);
2186 #else
2187   return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
2188 #endif
2189 }
2190
2191 #ifdef __VSX__
2192 static __inline__ vector bool long long __ATTRS_o_ai
2193 vec_cmpgt(vector double __a, vector double __b) {
2194   return (vector bool long long)__builtin_vsx_xvcmpgtdp(__a, __b);
2195 }
2196 #endif
2197
2198 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
2199 static __inline__ vector bool __int128 __ATTRS_o_ai
2200 vec_cmpgt(vector signed __int128 __a, vector signed __int128 __b) {
2201   return (vector bool __int128)__builtin_altivec_vcmpgtsq(
2202       (vector bool __int128)__a, (vector bool __int128)__b);
2203 }
2204
2205 static __inline__ vector bool __int128 __ATTRS_o_ai
2206 vec_cmpgt(vector unsigned __int128 __a, vector unsigned __int128 __b) {
2207   return (vector bool __int128)__builtin_altivec_vcmpgtuq(
2208       (vector bool __int128)__a, (vector bool __int128)__b);
2209 }
2210 #endif
2211
2212 /* vec_cmpge */
2213
2214 static __inline__ vector bool char __ATTRS_o_ai
2215 vec_cmpge(vector signed char __a, vector signed char __b) {
2216   return ~(vec_cmpgt(__b, __a));
2217 }
2218
2219 static __inline__ vector bool char __ATTRS_o_ai
2220 vec_cmpge(vector unsigned char __a, vector unsigned char __b) {
2221   return ~(vec_cmpgt(__b, __a));
2222 }
2223
2224 static __inline__ vector bool short __ATTRS_o_ai
2225 vec_cmpge(vector signed short __a, vector signed short __b) {
2226   return ~(vec_cmpgt(__b, __a));
2227 }
2228
2229 static __inline__ vector bool short __ATTRS_o_ai
2230 vec_cmpge(vector unsigned short __a, vector unsigned short __b) {
2231   return ~(vec_cmpgt(__b, __a));
2232 }
2233
2234 static __inline__ vector bool int __ATTRS_o_ai
2235 vec_cmpge(vector signed int __a, vector signed int __b) {
2236   return ~(vec_cmpgt(__b, __a));
2237 }
2238
2239 static __inline__ vector bool int __ATTRS_o_ai
2240 vec_cmpge(vector unsigned int __a, vector unsigned int __b) {
2241   return ~(vec_cmpgt(__b, __a));
2242 }
2243
2244 static __inline__ vector bool int __ATTRS_o_ai vec_cmpge(vector float __a,
2245                                                          vector float __b) {
2246 #ifdef __VSX__
2247   return (vector bool int)__builtin_vsx_xvcmpgesp(__a, __b);
2248 #else
2249   return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
2250 #endif
2251 }
2252
2253 #ifdef __VSX__
2254 static __inline__ vector bool long long __ATTRS_o_ai
2255 vec_cmpge(vector double __a, vector double __b) {
2256   return (vector bool long long)__builtin_vsx_xvcmpgedp(__a, __b);
2257 }
2258
2259 static __inline__ vector bool long long __ATTRS_o_ai
2260 vec_cmpge(vector signed long long __a, vector signed long long __b) {
2261   return ~(vec_cmpgt(__b, __a));
2262 }
2263
2264 static __inline__ vector bool long long __ATTRS_o_ai
2265 vec_cmpge(vector unsigned long long __a, vector unsigned long long __b) {
2266   return ~(vec_cmpgt(__b, __a));
2267 }
2268 #endif
2269
2270 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
2271 static __inline__ vector bool __int128 __ATTRS_o_ai
2272 vec_cmpge(vector signed __int128 __a, vector signed __int128 __b) {
2273   return ~(vec_cmpgt(__b, __a));
2274 }
2275
2276 static __inline__ vector bool __int128 __ATTRS_o_ai
2277 vec_cmpge(vector unsigned __int128 __a, vector unsigned __int128 __b) {
2278   return ~(vec_cmpgt(__b, __a));
2279 }
2280 #endif
2281
2282 /* vec_vcmpgefp */
2283
2284 static __inline__ vector bool int __attribute__((__always_inline__))
2285 vec_vcmpgefp(vector float __a, vector float __b) {
2286   return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
2287 }
2288
2289 /* vec_vcmpgtsb */
2290
2291 static __inline__ vector bool char __attribute__((__always_inline__))
2292 vec_vcmpgtsb(vector signed char __a, vector signed char __b) {
2293   return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
2294 }
2295
2296 /* vec_vcmpgtub */
2297
2298 static __inline__ vector bool char __attribute__((__always_inline__))
2299 vec_vcmpgtub(vector unsigned char __a, vector unsigned char __b) {
2300   return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
2301 }
2302
2303 /* vec_vcmpgtsh */
2304
2305 static __inline__ vector bool short __attribute__((__always_inline__))
2306 vec_vcmpgtsh(vector short __a, vector short __b) {
2307   return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
2308 }
2309
2310 /* vec_vcmpgtuh */
2311
2312 static __inline__ vector bool short __attribute__((__always_inline__))
2313 vec_vcmpgtuh(vector unsigned short __a, vector unsigned short __b) {
2314   return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
2315 }
2316
2317 /* vec_vcmpgtsw */
2318
2319 static __inline__ vector bool int __attribute__((__always_inline__))
2320 vec_vcmpgtsw(vector int __a, vector int __b) {
2321   return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
2322 }
2323
2324 /* vec_vcmpgtuw */
2325
2326 static __inline__ vector bool int __attribute__((__always_inline__))
2327 vec_vcmpgtuw(vector unsigned int __a, vector unsigned int __b) {
2328   return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
2329 }
2330
2331 /* vec_vcmpgtfp */
2332
2333 static __inline__ vector bool int __attribute__((__always_inline__))
2334 vec_vcmpgtfp(vector float __a, vector float __b) {
2335   return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
2336 }
2337
2338 /* vec_cmple */
2339
2340 static __inline__ vector bool char __ATTRS_o_ai
2341 vec_cmple(vector signed char __a, vector signed char __b) {
2342   return vec_cmpge(__b, __a);
2343 }
2344
2345 static __inline__ vector bool char __ATTRS_o_ai
2346 vec_cmple(vector unsigned char __a, vector unsigned char __b) {
2347   return vec_cmpge(__b, __a);
2348 }
2349
2350 static __inline__ vector bool short __ATTRS_o_ai
2351 vec_cmple(vector signed short __a, vector signed short __b) {
2352   return vec_cmpge(__b, __a);
2353 }
2354
2355 static __inline__ vector bool short __ATTRS_o_ai
2356 vec_cmple(vector unsigned short __a, vector unsigned short __b) {
2357   return vec_cmpge(__b, __a);
2358 }
2359
2360 static __inline__ vector bool int __ATTRS_o_ai
2361 vec_cmple(vector signed int __a, vector signed int __b) {
2362   return vec_cmpge(__b, __a);
2363 }
2364
2365 static __inline__ vector bool int __ATTRS_o_ai
2366 vec_cmple(vector unsigned int __a, vector unsigned int __b) {
2367   return vec_cmpge(__b, __a);
2368 }
2369
2370 static __inline__ vector bool int __ATTRS_o_ai vec_cmple(vector float __a,
2371                                                          vector float __b) {
2372   return vec_cmpge(__b, __a);
2373 }
2374
2375 #ifdef __VSX__
2376 static __inline__ vector bool long long __ATTRS_o_ai
2377 vec_cmple(vector double __a, vector double __b) {
2378   return vec_cmpge(__b, __a);
2379 }
2380
2381 static __inline__ vector bool long long __ATTRS_o_ai
2382 vec_cmple(vector signed long long __a, vector signed long long __b) {
2383   return vec_cmpge(__b, __a);
2384 }
2385
2386 static __inline__ vector bool long long __ATTRS_o_ai
2387 vec_cmple(vector unsigned long long __a, vector unsigned long long __b) {
2388   return vec_cmpge(__b, __a);
2389 }
2390 #endif
2391
2392 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
2393 static __inline__ vector bool __int128 __ATTRS_o_ai
2394 vec_cmple(vector signed __int128 __a, vector signed __int128 __b) {
2395   return vec_cmpge(__b, __a);
2396 }
2397
2398 static __inline__ vector bool __int128 __ATTRS_o_ai
2399 vec_cmple(vector unsigned __int128 __a, vector unsigned __int128 __b) {
2400   return vec_cmpge(__b, __a);
2401 }
2402 #endif
2403
2404 /* vec_cmplt */
2405
2406 static __inline__ vector bool char __ATTRS_o_ai
2407 vec_cmplt(vector signed char __a, vector signed char __b) {
2408   return vec_cmpgt(__b, __a);
2409 }
2410
2411 static __inline__ vector bool char __ATTRS_o_ai
2412 vec_cmplt(vector unsigned char __a, vector unsigned char __b) {
2413   return vec_cmpgt(__b, __a);
2414 }
2415
2416 static __inline__ vector bool short __ATTRS_o_ai vec_cmplt(vector short __a,
2417                                                            vector short __b) {
2418   return vec_cmpgt(__b, __a);
2419 }
2420
2421 static __inline__ vector bool short __ATTRS_o_ai
2422 vec_cmplt(vector unsigned short __a, vector unsigned short __b) {
2423   return vec_cmpgt(__b, __a);
2424 }
2425
2426 static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector int __a,
2427                                                          vector int __b) {
2428   return vec_cmpgt(__b, __a);
2429 }
2430
2431 static __inline__ vector bool int __ATTRS_o_ai
2432 vec_cmplt(vector unsigned int __a, vector unsigned int __b) {
2433   return vec_cmpgt(__b, __a);
2434 }
2435
2436 static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector float __a,
2437                                                          vector float __b) {
2438   return vec_cmpgt(__b, __a);
2439 }
2440
2441 #ifdef __VSX__
2442 static __inline__ vector bool long long __ATTRS_o_ai
2443 vec_cmplt(vector double __a, vector double __b) {
2444   return vec_cmpgt(__b, __a);
2445 }
2446 #endif
2447
2448 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
2449 static __inline__ vector bool __int128 __ATTRS_o_ai
2450 vec_cmplt(vector signed __int128 __a, vector signed __int128 __b) {
2451   return vec_cmpgt(__b, __a);
2452 }
2453
2454 static __inline__ vector bool __int128 __ATTRS_o_ai
2455 vec_cmplt(vector unsigned __int128 __a, vector unsigned __int128 __b) {
2456   return vec_cmpgt(__b, __a);
2457 }
2458 #endif
2459
2460 #ifdef __VSX__
2461 static __inline__ vector bool long long __ATTRS_o_ai
2462 vec_cmplt(vector signed long long __a, vector signed long long __b) {
2463   return vec_cmpgt(__b, __a);
2464 }
2465
2466 static __inline__ vector bool long long __ATTRS_o_ai
2467 vec_cmplt(vector unsigned long long __a, vector unsigned long long __b) {
2468   return vec_cmpgt(__b, __a);
2469 }
2470 #endif
2471
2472 #ifdef __POWER8_VECTOR__
2473 /* vec_popcnt */
2474
2475 static __inline__ vector signed char __ATTRS_o_ai
2476 vec_popcnt(vector signed char __a) {
2477   return __builtin_altivec_vpopcntb(__a);
2478 }
2479 static __inline__ vector unsigned char __ATTRS_o_ai
2480 vec_popcnt(vector unsigned char __a) {
2481   return __builtin_altivec_vpopcntb(__a);
2482 }
2483 static __inline__ vector signed short __ATTRS_o_ai
2484 vec_popcnt(vector signed short __a) {
2485   return __builtin_altivec_vpopcnth(__a);
2486 }
2487 static __inline__ vector unsigned short __ATTRS_o_ai
2488 vec_popcnt(vector unsigned short __a) {
2489   return __builtin_altivec_vpopcnth(__a);
2490 }
2491 static __inline__ vector signed int __ATTRS_o_ai
2492 vec_popcnt(vector signed int __a) {
2493   return __builtin_altivec_vpopcntw(__a);
2494 }
2495 static __inline__ vector unsigned int __ATTRS_o_ai
2496 vec_popcnt(vector unsigned int __a) {
2497   return __builtin_altivec_vpopcntw(__a);
2498 }
2499 static __inline__ vector signed long long __ATTRS_o_ai
2500 vec_popcnt(vector signed long long __a) {
2501   return __builtin_altivec_vpopcntd(__a);
2502 }
2503 static __inline__ vector unsigned long long __ATTRS_o_ai
2504 vec_popcnt(vector unsigned long long __a) {
2505   return __builtin_altivec_vpopcntd(__a);
2506 }
2507
2508 #define vec_vclz vec_cntlz
2509 /* vec_cntlz */
2510
2511 static __inline__ vector signed char __ATTRS_o_ai
2512 vec_cntlz(vector signed char __a) {
2513   return __builtin_altivec_vclzb(__a);
2514 }
2515 static __inline__ vector unsigned char __ATTRS_o_ai
2516 vec_cntlz(vector unsigned char __a) {
2517   return __builtin_altivec_vclzb(__a);
2518 }
2519 static __inline__ vector signed short __ATTRS_o_ai
2520 vec_cntlz(vector signed short __a) {
2521   return __builtin_altivec_vclzh(__a);
2522 }
2523 static __inline__ vector unsigned short __ATTRS_o_ai
2524 vec_cntlz(vector unsigned short __a) {
2525   return __builtin_altivec_vclzh(__a);
2526 }
2527 static __inline__ vector signed int __ATTRS_o_ai
2528 vec_cntlz(vector signed int __a) {
2529   return __builtin_altivec_vclzw(__a);
2530 }
2531 static __inline__ vector unsigned int __ATTRS_o_ai
2532 vec_cntlz(vector unsigned int __a) {
2533   return __builtin_altivec_vclzw(__a);
2534 }
2535 static __inline__ vector signed long long __ATTRS_o_ai
2536 vec_cntlz(vector signed long long __a) {
2537   return __builtin_altivec_vclzd(__a);
2538 }
2539 static __inline__ vector unsigned long long __ATTRS_o_ai
2540 vec_cntlz(vector unsigned long long __a) {
2541   return __builtin_altivec_vclzd(__a);
2542 }
2543 #endif
2544
2545 #ifdef __POWER9_VECTOR__
2546
2547 /* vec_cnttz */
2548
2549 static __inline__ vector signed char __ATTRS_o_ai
2550 vec_cnttz(vector signed char __a) {
2551   return __builtin_altivec_vctzb(__a);
2552 }
2553 static __inline__ vector unsigned char __ATTRS_o_ai
2554 vec_cnttz(vector unsigned char __a) {
2555   return __builtin_altivec_vctzb(__a);
2556 }
2557 static __inline__ vector signed short __ATTRS_o_ai
2558 vec_cnttz(vector signed short __a) {
2559   return __builtin_altivec_vctzh(__a);
2560 }
2561 static __inline__ vector unsigned short __ATTRS_o_ai
2562 vec_cnttz(vector unsigned short __a) {
2563   return __builtin_altivec_vctzh(__a);
2564 }
2565 static __inline__ vector signed int __ATTRS_o_ai
2566 vec_cnttz(vector signed int __a) {
2567   return __builtin_altivec_vctzw(__a);
2568 }
2569 static __inline__ vector unsigned int __ATTRS_o_ai
2570 vec_cnttz(vector unsigned int __a) {
2571   return __builtin_altivec_vctzw(__a);
2572 }
2573 static __inline__ vector signed long long __ATTRS_o_ai
2574 vec_cnttz(vector signed long long __a) {
2575   return __builtin_altivec_vctzd(__a);
2576 }
2577 static __inline__ vector unsigned long long __ATTRS_o_ai
2578 vec_cnttz(vector unsigned long long __a) {
2579   return __builtin_altivec_vctzd(__a);
2580 }
2581
2582 /* vec_first_match_index */
2583
2584 static __inline__ unsigned __ATTRS_o_ai
2585 vec_first_match_index(vector signed char __a, vector signed char __b) {
2586   vector unsigned long long __res =
2587 #ifdef __LITTLE_ENDIAN__
2588     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2589 #else
2590     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2591 #endif
2592   if (__res[0] == 64) {
2593     return (__res[1] + 64) >> 3;
2594   }
2595   return __res[0] >> 3;
2596 }
2597
2598 static __inline__ unsigned __ATTRS_o_ai
2599 vec_first_match_index(vector unsigned char __a, vector unsigned char __b) {
2600   vector unsigned long long __res =
2601 #ifdef __LITTLE_ENDIAN__
2602     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2603 #else
2604     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2605 #endif
2606   if (__res[0] == 64) {
2607     return (__res[1] + 64) >> 3;
2608   }
2609   return __res[0] >> 3;
2610 }
2611
2612 static __inline__ unsigned __ATTRS_o_ai
2613 vec_first_match_index(vector signed short __a, vector signed short __b) {
2614   vector unsigned long long __res =
2615 #ifdef __LITTLE_ENDIAN__
2616     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2617 #else
2618     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2619 #endif
2620   if (__res[0] == 64) {
2621     return (__res[1] + 64) >> 4;
2622   }
2623   return __res[0] >> 4;
2624 }
2625
2626 static __inline__ unsigned __ATTRS_o_ai
2627 vec_first_match_index(vector unsigned short __a, vector unsigned short __b) {
2628   vector unsigned long long __res =
2629 #ifdef __LITTLE_ENDIAN__
2630     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2631 #else
2632     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2633 #endif
2634   if (__res[0] == 64) {
2635     return (__res[1] + 64) >> 4;
2636   }
2637   return __res[0] >> 4;
2638 }
2639
2640 static __inline__ unsigned __ATTRS_o_ai
2641 vec_first_match_index(vector signed int __a, vector signed int __b) {
2642   vector unsigned long long __res =
2643 #ifdef __LITTLE_ENDIAN__
2644     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2645 #else
2646     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2647 #endif
2648   if (__res[0] == 64) {
2649     return (__res[1] + 64) >> 5;
2650   }
2651   return __res[0] >> 5;
2652 }
2653
2654 static __inline__ unsigned __ATTRS_o_ai
2655 vec_first_match_index(vector unsigned int __a, vector unsigned int __b) {
2656   vector unsigned long long __res =
2657 #ifdef __LITTLE_ENDIAN__
2658     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2659 #else
2660     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2661 #endif
2662   if (__res[0] == 64) {
2663     return (__res[1] + 64) >> 5;
2664   }
2665   return __res[0] >> 5;
2666 }
2667
2668 /* vec_first_match_or_eos_index */
2669
2670 static __inline__ unsigned __ATTRS_o_ai
2671 vec_first_match_or_eos_index(vector signed char __a, vector signed char __b) {
2672   /* Compare the result of the comparison of two vectors with either and OR the
2673      result. Either the elements are equal or one will equal the comparison
2674      result if either is zero.
2675   */
2676   vector bool char __tmp1 = vec_cmpeq(__a, __b);
2677   vector bool char __tmp2 = __tmp1 |
2678                             vec_cmpeq((vector signed char)__tmp1, __a) |
2679                             vec_cmpeq((vector signed char)__tmp1, __b);
2680
2681   vector unsigned long long __res =
2682 #ifdef __LITTLE_ENDIAN__
2683       vec_cnttz((vector unsigned long long)__tmp2);
2684 #else
2685       vec_cntlz((vector unsigned long long)__tmp2);
2686 #endif
2687   if (__res[0] == 64) {
2688     return (__res[1] + 64) >> 3;
2689   }
2690   return __res[0] >> 3;
2691 }
2692
2693 static __inline__ unsigned __ATTRS_o_ai
2694 vec_first_match_or_eos_index(vector unsigned char __a,
2695                              vector unsigned char __b) {
2696   vector bool char __tmp1 = vec_cmpeq(__a, __b);
2697   vector bool char __tmp2 = __tmp1 |
2698                             vec_cmpeq((vector unsigned char)__tmp1, __a) |
2699                             vec_cmpeq((vector unsigned char)__tmp1, __b);
2700
2701   vector unsigned long long __res =
2702 #ifdef __LITTLE_ENDIAN__
2703       vec_cnttz((vector unsigned long long)__tmp2);
2704 #else
2705       vec_cntlz((vector unsigned long long)__tmp2);
2706 #endif
2707   if (__res[0] == 64) {
2708     return (__res[1] + 64) >> 3;
2709   }
2710   return __res[0] >> 3;
2711 }
2712
2713 static __inline__ unsigned __ATTRS_o_ai
2714 vec_first_match_or_eos_index(vector signed short __a, vector signed short __b) {
2715   vector bool short __tmp1 = vec_cmpeq(__a, __b);
2716   vector bool short __tmp2 = __tmp1 |
2717                              vec_cmpeq((vector signed short)__tmp1, __a) |
2718                              vec_cmpeq((vector signed short)__tmp1, __b);
2719
2720   vector unsigned long long __res =
2721 #ifdef __LITTLE_ENDIAN__
2722       vec_cnttz((vector unsigned long long)__tmp2);
2723 #else
2724       vec_cntlz((vector unsigned long long)__tmp2);
2725 #endif
2726   if (__res[0] == 64) {
2727     return (__res[1] + 64) >> 4;
2728   }
2729   return __res[0] >> 4;
2730 }
2731
2732 static __inline__ unsigned __ATTRS_o_ai
2733 vec_first_match_or_eos_index(vector unsigned short __a,
2734                              vector unsigned short __b) {
2735   vector bool short __tmp1 = vec_cmpeq(__a, __b);
2736   vector bool short __tmp2 = __tmp1 |
2737                              vec_cmpeq((vector unsigned short)__tmp1, __a) |
2738                              vec_cmpeq((vector unsigned short)__tmp1, __b);
2739
2740   vector unsigned long long __res =
2741 #ifdef __LITTLE_ENDIAN__
2742       vec_cnttz((vector unsigned long long)__tmp2);
2743 #else
2744       vec_cntlz((vector unsigned long long)__tmp2);
2745 #endif
2746   if (__res[0] == 64) {
2747     return (__res[1] + 64) >> 4;
2748   }
2749   return __res[0] >> 4;
2750 }
2751
2752 static __inline__ unsigned __ATTRS_o_ai
2753 vec_first_match_or_eos_index(vector signed int __a, vector signed int __b) {
2754   vector bool int __tmp1 = vec_cmpeq(__a, __b);
2755   vector bool int __tmp2 = __tmp1 | vec_cmpeq((vector signed int)__tmp1, __a) |
2756                            vec_cmpeq((vector signed int)__tmp1, __b);
2757
2758   vector unsigned long long __res =
2759 #ifdef __LITTLE_ENDIAN__
2760       vec_cnttz((vector unsigned long long)__tmp2);
2761 #else
2762       vec_cntlz((vector unsigned long long)__tmp2);
2763 #endif
2764   if (__res[0] == 64) {
2765     return (__res[1] + 64) >> 5;
2766   }
2767   return __res[0] >> 5;
2768 }
2769
2770 static __inline__ unsigned __ATTRS_o_ai
2771 vec_first_match_or_eos_index(vector unsigned int __a, vector unsigned int __b) {
2772   vector bool int __tmp1 = vec_cmpeq(__a, __b);
2773   vector bool int __tmp2 = __tmp1 |
2774                            vec_cmpeq((vector unsigned int)__tmp1, __a) |
2775                            vec_cmpeq((vector unsigned int)__tmp1, __b);
2776
2777   vector unsigned long long __res =
2778 #ifdef __LITTLE_ENDIAN__
2779     vec_cnttz((vector unsigned long long)__tmp2);
2780 #else
2781     vec_cntlz((vector unsigned long long)__tmp2);
2782 #endif
2783   if (__res[0] == 64) {
2784     return (__res[1] + 64) >> 5;
2785   }
2786   return __res[0] >> 5;
2787 }
2788
2789 /* vec_first_mismatch_index */
2790
2791 static __inline__ unsigned __ATTRS_o_ai
2792 vec_first_mismatch_index(vector signed char __a, vector signed char __b) {
2793   vector unsigned long long __res =
2794 #ifdef __LITTLE_ENDIAN__
2795     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2796 #else
2797     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2798 #endif
2799   if (__res[0] == 64) {
2800     return (__res[1] + 64) >> 3;
2801   }
2802   return __res[0] >> 3;
2803 }
2804
2805 static __inline__ unsigned __ATTRS_o_ai
2806 vec_first_mismatch_index(vector unsigned char __a, vector unsigned char __b) {
2807   vector unsigned long long __res =
2808 #ifdef __LITTLE_ENDIAN__
2809     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2810 #else
2811     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2812 #endif
2813   if (__res[0] == 64) {
2814     return (__res[1] + 64) >> 3;
2815   }
2816   return __res[0] >> 3;
2817 }
2818
2819 static __inline__ unsigned __ATTRS_o_ai
2820 vec_first_mismatch_index(vector signed short __a, vector signed short __b) {
2821   vector unsigned long long __res =
2822 #ifdef __LITTLE_ENDIAN__
2823     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2824 #else
2825     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2826 #endif
2827   if (__res[0] == 64) {
2828     return (__res[1] + 64) >> 4;
2829   }
2830   return __res[0] >> 4;
2831 }
2832
2833 static __inline__ unsigned __ATTRS_o_ai
2834 vec_first_mismatch_index(vector unsigned short __a, vector unsigned short __b) {
2835   vector unsigned long long __res =
2836 #ifdef __LITTLE_ENDIAN__
2837     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2838 #else
2839     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2840 #endif
2841   if (__res[0] == 64) {
2842     return (__res[1] + 64) >> 4;
2843   }
2844   return __res[0] >> 4;
2845 }
2846
2847 static __inline__ unsigned __ATTRS_o_ai
2848 vec_first_mismatch_index(vector signed int __a, vector signed int __b) {
2849   vector unsigned long long __res =
2850 #ifdef __LITTLE_ENDIAN__
2851     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2852 #else
2853     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2854 #endif
2855   if (__res[0] == 64) {
2856     return (__res[1] + 64) >> 5;
2857   }
2858   return __res[0] >> 5;
2859 }
2860
2861 static __inline__ unsigned __ATTRS_o_ai
2862 vec_first_mismatch_index(vector unsigned int __a, vector unsigned int __b) {
2863   vector unsigned long long __res =
2864 #ifdef __LITTLE_ENDIAN__
2865     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2866 #else
2867     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2868 #endif
2869   if (__res[0] == 64) {
2870     return (__res[1] + 64) >> 5;
2871   }
2872   return __res[0] >> 5;
2873 }
2874
2875 /* vec_first_mismatch_or_eos_index */
2876
2877 static __inline__ unsigned __ATTRS_o_ai
2878 vec_first_mismatch_or_eos_index(vector signed char __a,
2879                                 vector signed char __b) {
2880   vector unsigned long long __res =
2881 #ifdef __LITTLE_ENDIAN__
2882     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2883 #else
2884     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2885 #endif
2886   if (__res[0] == 64) {
2887     return (__res[1] + 64) >> 3;
2888   }
2889   return __res[0] >> 3;
2890 }
2891
2892 static __inline__ unsigned __ATTRS_o_ai
2893 vec_first_mismatch_or_eos_index(vector unsigned char __a,
2894                                 vector unsigned char __b) {
2895   vector unsigned long long __res =
2896 #ifdef __LITTLE_ENDIAN__
2897     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2898 #else
2899     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2900 #endif
2901   if (__res[0] == 64) {
2902     return (__res[1] + 64) >> 3;
2903   }
2904   return __res[0] >> 3;
2905 }
2906
2907 static __inline__ unsigned __ATTRS_o_ai
2908 vec_first_mismatch_or_eos_index(vector signed short __a,
2909                                 vector signed short __b) {
2910   vector unsigned long long __res =
2911 #ifdef __LITTLE_ENDIAN__
2912     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2913 #else
2914     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2915 #endif
2916   if (__res[0] == 64) {
2917     return (__res[1] + 64) >> 4;
2918   }
2919   return __res[0] >> 4;
2920 }
2921
2922 static __inline__ unsigned __ATTRS_o_ai
2923 vec_first_mismatch_or_eos_index(vector unsigned short __a,
2924                                 vector unsigned short __b) {
2925   vector unsigned long long __res =
2926 #ifdef __LITTLE_ENDIAN__
2927     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2928 #else
2929     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2930 #endif
2931   if (__res[0] == 64) {
2932     return (__res[1] + 64) >> 4;
2933   }
2934   return __res[0] >> 4;
2935 }
2936
2937 static __inline__ unsigned __ATTRS_o_ai
2938 vec_first_mismatch_or_eos_index(vector signed int __a, vector signed int __b) {
2939   vector unsigned long long __res =
2940 #ifdef __LITTLE_ENDIAN__
2941     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2942 #else
2943     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2944 #endif
2945   if (__res[0] == 64) {
2946     return (__res[1] + 64) >> 5;
2947   }
2948   return __res[0] >> 5;
2949 }
2950
2951 static __inline__ unsigned __ATTRS_o_ai
2952 vec_first_mismatch_or_eos_index(vector unsigned int __a,
2953                                 vector unsigned int __b) {
2954   vector unsigned long long __res =
2955 #ifdef __LITTLE_ENDIAN__
2956     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2957 #else
2958     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2959 #endif
2960   if (__res[0] == 64) {
2961     return (__res[1] + 64) >> 5;
2962   }
2963   return __res[0] >> 5;
2964 }
2965
2966 static __inline__ vector double  __ATTRS_o_ai
2967 vec_insert_exp(vector double __a, vector unsigned long long __b) {
2968   return __builtin_vsx_xviexpdp((vector unsigned long long)__a,__b);
2969 }
2970
2971 static __inline__ vector double  __ATTRS_o_ai
2972 vec_insert_exp(vector unsigned long long __a, vector unsigned long long __b) {
2973   return __builtin_vsx_xviexpdp(__a,__b);
2974 }
2975
2976 static __inline__ vector float  __ATTRS_o_ai
2977 vec_insert_exp(vector float __a, vector unsigned int __b) {
2978   return __builtin_vsx_xviexpsp((vector unsigned int)__a,__b);
2979 }
2980
2981 static __inline__ vector float  __ATTRS_o_ai
2982 vec_insert_exp(vector unsigned int __a, vector unsigned int __b) {
2983   return __builtin_vsx_xviexpsp(__a,__b);
2984 }
2985
2986 #if defined(__powerpc64__)
2987 static __inline__ vector signed char __ATTRS_o_ai vec_xl_len(const signed char *__a,
2988                                                              size_t __b) {
2989   return (vector signed char)__builtin_vsx_lxvl(__a, (__b << 56));
2990 }
2991
2992 static __inline__ vector unsigned char __ATTRS_o_ai
2993 vec_xl_len(const unsigned char *__a, size_t __b) {
2994   return (vector unsigned char)__builtin_vsx_lxvl(__a, (__b << 56));
2995 }
2996
2997 static __inline__ vector signed short __ATTRS_o_ai vec_xl_len(const signed short *__a,
2998                                                               size_t __b) {
2999   return (vector signed short)__builtin_vsx_lxvl(__a, (__b << 56));
3000 }
3001
3002 static __inline__ vector unsigned short __ATTRS_o_ai
3003 vec_xl_len(const unsigned short *__a, size_t __b) {
3004   return (vector unsigned short)__builtin_vsx_lxvl(__a, (__b << 56));
3005 }
3006
3007 static __inline__ vector signed int __ATTRS_o_ai vec_xl_len(const signed int *__a,
3008                                                             size_t __b) {
3009   return (vector signed int)__builtin_vsx_lxvl(__a, (__b << 56));
3010 }
3011
3012 static __inline__ vector unsigned int __ATTRS_o_ai vec_xl_len(const unsigned int *__a,
3013                                                               size_t __b) {
3014   return (vector unsigned int)__builtin_vsx_lxvl(__a, (__b << 56));
3015 }
3016
3017 static __inline__ vector float __ATTRS_o_ai vec_xl_len(const float *__a, size_t __b) {
3018   return (vector float)__builtin_vsx_lxvl(__a, (__b << 56));
3019 }
3020
3021 #ifdef __SIZEOF_INT128__
3022 static __inline__ vector signed __int128 __ATTRS_o_ai
3023 vec_xl_len(const signed __int128 *__a, size_t __b) {
3024   return (vector signed __int128)__builtin_vsx_lxvl(__a, (__b << 56));
3025 }
3026
3027 static __inline__ vector unsigned __int128 __ATTRS_o_ai
3028 vec_xl_len(const unsigned __int128 *__a, size_t __b) {
3029   return (vector unsigned __int128)__builtin_vsx_lxvl(__a, (__b << 56));
3030 }
3031 #endif
3032
3033 static __inline__ vector signed long long __ATTRS_o_ai
3034 vec_xl_len(const signed long long *__a, size_t __b) {
3035   return (vector signed long long)__builtin_vsx_lxvl(__a, (__b << 56));
3036 }
3037
3038 static __inline__ vector unsigned long long __ATTRS_o_ai
3039 vec_xl_len(const unsigned long long *__a, size_t __b) {
3040   return (vector unsigned long long)__builtin_vsx_lxvl(__a, (__b << 56));
3041 }
3042
3043 static __inline__ vector double __ATTRS_o_ai vec_xl_len(const double *__a,
3044                                                         size_t __b) {
3045   return (vector double)__builtin_vsx_lxvl(__a, (__b << 56));
3046 }
3047
3048 static __inline__ vector unsigned char __ATTRS_o_ai
3049 vec_xl_len_r(const unsigned char *__a, size_t __b) {
3050   vector unsigned char __res =
3051       (vector unsigned char)__builtin_vsx_lxvll(__a, (__b << 56));
3052 #ifdef __LITTLE_ENDIAN__
3053   vector unsigned char __mask =
3054       (vector unsigned char)__builtin_altivec_lvsr(16 - __b, (int *)NULL);
3055   __res = (vector unsigned char)__builtin_altivec_vperm_4si(
3056       (vector int)__res, (vector int)__res, __mask);
3057 #endif
3058   return __res;
3059 }
3060
3061 // vec_xst_len
3062 static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned char __a,
3063                                                 unsigned char *__b,
3064                                                 size_t __c) {
3065   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3066 }
3067
3068 static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed char __a,
3069                                                 signed char *__b, size_t __c) {
3070   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3071 }
3072
3073 static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed short __a,
3074                                                 signed short *__b, size_t __c) {
3075   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3076 }
3077
3078 static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned short __a,
3079                                                 unsigned short *__b,
3080                                                 size_t __c) {
3081   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3082 }
3083
3084 static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed int __a,
3085                                                 signed int *__b, size_t __c) {
3086   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3087 }
3088
3089 static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned int __a,
3090                                                 unsigned int *__b, size_t __c) {
3091   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3092 }
3093
3094 static __inline__ void __ATTRS_o_ai vec_xst_len(vector float __a, float *__b,
3095                                                 size_t __c) {
3096   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3097 }
3098
3099 #ifdef __SIZEOF_INT128__
3100 static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed __int128 __a,
3101                                                 signed __int128 *__b,
3102                                                 size_t __c) {
3103   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3104 }
3105
3106 static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned __int128 __a,
3107                                                 unsigned __int128 *__b,
3108                                                 size_t __c) {
3109   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3110 }
3111 #endif
3112
3113 static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed long long __a,
3114                                                 signed long long *__b,
3115                                                 size_t __c) {
3116   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3117 }
3118
3119 static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned long long __a,
3120                                                 unsigned long long *__b,
3121                                                 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 double __a, double *__b,
3126                                                 size_t __c) {
3127   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
3128 }
3129
3130 static __inline__ void __ATTRS_o_ai vec_xst_len_r(vector unsigned char __a,
3131                                                   unsigned char *__b,
3132                                                   size_t __c) {
3133 #ifdef __LITTLE_ENDIAN__
3134   vector unsigned char __mask =
3135       (vector unsigned char)__builtin_altivec_lvsl(16 - __c, (int *)NULL);
3136   vector unsigned char __res =
3137       __builtin_altivec_vperm_4si((vector int)__a, (vector int)__a, __mask);
3138   return __builtin_vsx_stxvll((vector int)__res, __b, (__c << 56));
3139 #else
3140   return __builtin_vsx_stxvll((vector int)__a, __b, (__c << 56));
3141 #endif
3142 }
3143 #endif
3144 #endif
3145
3146 #if defined(__POWER9_VECTOR__) && defined(__powerpc64__)
3147 #define __vec_ldrmb(PTR, CNT) vec_xl_len_r((const unsigned char *)(PTR), (CNT))
3148 #define __vec_strmb(PTR, CNT, VAL)                                             \
3149   vec_xst_len_r((VAL), (unsigned char *)(PTR), (CNT))
3150 #else
3151 #define __vec_ldrmb __builtin_vsx_ldrmb
3152 #define __vec_strmb __builtin_vsx_strmb
3153 #endif
3154
3155 /* vec_cpsgn */
3156
3157 #ifdef __VSX__
3158 static __inline__ vector float __ATTRS_o_ai vec_cpsgn(vector float __a,
3159                                                       vector float __b) {
3160   return __builtin_vsx_xvcpsgnsp(__b, __a);
3161 }
3162
3163 static __inline__ vector double __ATTRS_o_ai vec_cpsgn(vector double __a,
3164                                                        vector double __b) {
3165   return __builtin_vsx_xvcpsgndp(__b, __a);
3166 }
3167 #endif
3168
3169 /* vec_ctf */
3170
3171 #ifdef __VSX__
3172 // There are some functions that have different signatures with the XL compiler
3173 // from those in Clang/GCC and documented in the PVIPR. This macro ensures that
3174 // the XL-compatible signatures are used for those functions.
3175 #ifdef __XL_COMPAT_ALTIVEC__
3176 #define vec_ctf(__a, __b)                                                      \
3177   _Generic((__a), vector int                                                   \
3178            : (vector float)__builtin_altivec_vcfsx((vector int)(__a), (__b)),  \
3179              vector unsigned int                                               \
3180            : (vector float)__builtin_altivec_vcfux((vector unsigned int)(__a), \
3181                                                    (__b)),                     \
3182              vector unsigned long long                                         \
3183            : (__builtin_vsx_xvcvuxdsp((vector unsigned long long)(__a)) *      \
3184               (vector float)(vector unsigned)((0x7f - (__b)) << 23)),          \
3185              vector signed long long                                           \
3186            : (__builtin_vsx_xvcvsxdsp((vector signed long long)(__a)) *        \
3187               (vector float)(vector unsigned)((0x7f - (__b)) << 23)))
3188 #else // __XL_COMPAT_ALTIVEC__
3189 #define vec_ctf(__a, __b)                                                      \
3190   _Generic((__a), vector int                                                   \
3191            : (vector float)__builtin_altivec_vcfsx((vector int)(__a), (__b)),  \
3192              vector unsigned int                                               \
3193            : (vector float)__builtin_altivec_vcfux((vector unsigned int)(__a), \
3194                                                    (__b)),                     \
3195              vector unsigned long long                                         \
3196            : (__builtin_convertvector((vector unsigned long long)(__a),        \
3197                                       vector double) *                         \
3198               (vector double)(vector unsigned long long)((0x3ffULL - (__b))    \
3199                                                          << 52)),              \
3200              vector signed long long                                           \
3201            : (__builtin_convertvector((vector signed long long)(__a),          \
3202                                       vector double) *                         \
3203               (vector double)(vector unsigned long long)((0x3ffULL - (__b))    \
3204                                                          << 52)))
3205 #endif // __XL_COMPAT_ALTIVEC__
3206 #else
3207 #define vec_ctf(__a, __b)                                                      \
3208   _Generic((__a), vector int                                                   \
3209            : (vector float)__builtin_altivec_vcfsx((vector int)(__a), (__b)),  \
3210              vector unsigned int                                               \
3211            : (vector float)__builtin_altivec_vcfux((vector unsigned int)(__a), \
3212                                                    (__b)))
3213 #endif
3214
3215 /* vec_ctd */
3216 #ifdef __VSX__
3217 #define vec_ctd(__a, __b)                                                      \
3218   _Generic((__a), vector signed int                                            \
3219            : (vec_doublee((vector signed int)(__a)) *                          \
3220               (vector double)(vector unsigned long long)((0x3ffULL - (__b))    \
3221                                                          << 52)),              \
3222              vector unsigned int                                               \
3223            : (vec_doublee((vector unsigned int)(__a)) *                        \
3224               (vector double)(vector unsigned long long)((0x3ffULL - (__b))    \
3225                                                          << 52)),              \
3226              vector unsigned long long                                         \
3227            : (__builtin_convertvector((vector unsigned long long)(__a),        \
3228                                       vector double) *                         \
3229               (vector double)(vector unsigned long long)((0x3ffULL - (__b))    \
3230                                                          << 52)),              \
3231              vector signed long long                                           \
3232            : (__builtin_convertvector((vector signed long long)(__a),          \
3233                                       vector double) *                         \
3234               (vector double)(vector unsigned long long)((0x3ffULL - (__b))    \
3235                                                          << 52)))
3236 #endif // __VSX__
3237
3238 /* vec_vcfsx */
3239
3240 #define vec_vcfux __builtin_altivec_vcfux
3241 /* vec_vcfux */
3242
3243 #define vec_vcfsx(__a, __b) __builtin_altivec_vcfsx((vector int)(__a), (__b))
3244
3245 /* vec_cts */
3246
3247 #ifdef __VSX__
3248 #ifdef __XL_COMPAT_ALTIVEC__
3249 #define vec_cts(__a, __b)                                                      \
3250   _Generic((__a), vector float                                                 \
3251            : __builtin_altivec_vctsxs((vector float)(__a), (__b)),             \
3252              vector double                                                     \
3253            : __extension__({                                                   \
3254              vector double __ret =                                             \
3255                  (vector double)(__a) *                                        \
3256                  (vector double)(vector unsigned long long)((0x3ffULL + (__b)) \
3257                                                             << 52);            \
3258              __builtin_vsx_xvcvdpsxws(__ret);                                  \
3259            }))
3260 #else // __XL_COMPAT_ALTIVEC__
3261 #define vec_cts(__a, __b)                                                      \
3262   _Generic((__a), vector float                                                 \
3263            : __builtin_altivec_vctsxs((vector float)(__a), (__b)),             \
3264              vector double                                                     \
3265            : __extension__({                                                   \
3266              vector double __ret =                                             \
3267                  (vector double)(__a) *                                        \
3268                  (vector double)(vector unsigned long long)((0x3ffULL + (__b)) \
3269                                                             << 52);            \
3270              __builtin_convertvector(__ret, vector signed long long);          \
3271            }))
3272 #endif // __XL_COMPAT_ALTIVEC__
3273 #else
3274 #define vec_cts __builtin_altivec_vctsxs
3275 #endif
3276
3277 /* vec_vctsxs */
3278
3279 #define vec_vctsxs __builtin_altivec_vctsxs
3280
3281 /* vec_ctu */
3282
3283 #ifdef __VSX__
3284 #ifdef __XL_COMPAT_ALTIVEC__
3285 #define vec_ctu(__a, __b)                                                      \
3286   _Generic((__a), vector float                                                 \
3287            : __builtin_altivec_vctuxs((vector float)(__a), (__b)),             \
3288              vector double                                                     \
3289            : __extension__({                                                   \
3290              vector double __ret =                                             \
3291                  (vector double)(__a) *                                        \
3292                  (vector double)(vector unsigned long long)((0x3ffULL + __b)   \
3293                                                             << 52);            \
3294              __builtin_vsx_xvcvdpuxws(__ret);                                  \
3295            }))
3296 #else // __XL_COMPAT_ALTIVEC__
3297 #define vec_ctu(__a, __b)                                                      \
3298   _Generic((__a), vector float                                                 \
3299            : __builtin_altivec_vctuxs((vector float)(__a), (__b)),             \
3300              vector double                                                     \
3301            : __extension__({                                                   \
3302              vector double __ret =                                             \
3303                  (vector double)(__a) *                                        \
3304                  (vector double)(vector unsigned long long)((0x3ffULL + __b)   \
3305                                                             << 52);            \
3306              __builtin_convertvector(__ret, vector unsigned long long);        \
3307            }))
3308 #endif // __XL_COMPAT_ALTIVEC__
3309 #else
3310 #define vec_ctu __builtin_altivec_vctuxs
3311 #endif
3312
3313 #ifdef __LITTLE_ENDIAN__
3314 /* vec_ctsl */
3315
3316 #ifdef __VSX__
3317 #define vec_ctsl(__a, __b)                                                     \
3318   _Generic((__a), vector float                                                 \
3319            : __extension__({                                                   \
3320                vector float __ret =                                            \
3321                    (vector float)(__a) *                                       \
3322                    (vector float)(vector unsigned)((0x7f + (__b)) << 23);      \
3323                __builtin_vsx_xvcvspsxds(                                       \
3324                    __builtin_vsx_xxsldwi(__ret, __ret, 1));                    \
3325              }),                                                               \
3326              vector double                                                     \
3327            : __extension__({                                                   \
3328              vector double __ret =                                             \
3329                  (vector double)(__a) *                                        \
3330                  (vector double)(vector unsigned long long)((0x3ffULL + __b)   \
3331                                                             << 52);            \
3332              __builtin_convertvector(__ret, vector signed long long);          \
3333            }))
3334
3335 /* vec_ctul */
3336
3337 #define vec_ctul(__a, __b)                                                     \
3338   _Generic((__a), vector float                                                 \
3339            : __extension__({                                                   \
3340                vector float __ret =                                            \
3341                    (vector float)(__a) *                                       \
3342                    (vector float)(vector unsigned)((0x7f + (__b)) << 23);      \
3343                __builtin_vsx_xvcvspuxds(                                       \
3344                    __builtin_vsx_xxsldwi(__ret, __ret, 1));                    \
3345              }),                                                               \
3346              vector double                                                     \
3347            : __extension__({                                                   \
3348              vector double __ret =                                             \
3349                  (vector double)(__a) *                                        \
3350                  (vector double)(vector unsigned long long)((0x3ffULL + __b)   \
3351                                                             << 52);            \
3352              __builtin_convertvector(__ret, vector unsigned long long);        \
3353            }))
3354 #endif
3355 #else // __LITTLE_ENDIAN__
3356 /* vec_ctsl */
3357
3358 #ifdef __VSX__
3359 #define vec_ctsl(__a, __b)                                                     \
3360   _Generic((__a), vector float                                                 \
3361            : __extension__({                                                   \
3362                vector float __ret =                                            \
3363                    (vector float)(__a) *                                       \
3364                    (vector float)(vector unsigned)((0x7f + (__b)) << 23);      \
3365                __builtin_vsx_xvcvspsxds(__ret);                                \
3366              }),                                                               \
3367              vector double                                                     \
3368            : __extension__({                                                   \
3369              vector double __ret =                                             \
3370                  (vector double)(__a) *                                        \
3371                  (vector double)(vector unsigned long long)((0x3ffULL + __b)   \
3372                                                             << 52);            \
3373              __builtin_convertvector(__ret, vector signed long long);          \
3374            }))
3375
3376 /* vec_ctul */
3377
3378 #define vec_ctul(__a, __b)                                                     \
3379   _Generic((__a), vector float                                                 \
3380            : __extension__({                                                   \
3381                vector float __ret =                                            \
3382                    (vector float)(__a) *                                       \
3383                    (vector float)(vector unsigned)((0x7f + (__b)) << 23);      \
3384                __builtin_vsx_xvcvspuxds(__ret);                                \
3385              }),                                                               \
3386              vector double                                                     \
3387            : __extension__({                                                   \
3388              vector double __ret =                                             \
3389                  (vector double)(__a) *                                        \
3390                  (vector double)(vector unsigned long long)((0x3ffULL + __b)   \
3391                                                             << 52);            \
3392              __builtin_convertvector(__ret, vector unsigned long long);        \
3393            }))
3394 #endif
3395 #endif // __LITTLE_ENDIAN__
3396
3397 /* vec_vctuxs */
3398
3399 #define vec_vctuxs __builtin_altivec_vctuxs
3400
3401 /* vec_signext */
3402
3403 #ifdef __POWER9_VECTOR__
3404 static __inline__ vector signed int __ATTRS_o_ai
3405 vec_signexti(vector signed char __a) {
3406   return __builtin_altivec_vextsb2w(__a);
3407 }
3408
3409 static __inline__ vector signed int __ATTRS_o_ai
3410 vec_signexti(vector signed short __a) {
3411   return __builtin_altivec_vextsh2w(__a);
3412 }
3413
3414 static __inline__ vector signed long long __ATTRS_o_ai
3415 vec_signextll(vector signed char __a) {
3416   return __builtin_altivec_vextsb2d(__a);
3417 }
3418
3419 static __inline__ vector signed long long __ATTRS_o_ai
3420 vec_signextll(vector signed short __a) {
3421   return __builtin_altivec_vextsh2d(__a);
3422 }
3423
3424 static __inline__ vector signed long long __ATTRS_o_ai
3425 vec_signextll(vector signed int __a) {
3426   return __builtin_altivec_vextsw2d(__a);
3427 }
3428 #endif
3429
3430 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
3431 static __inline__ vector signed __int128 __ATTRS_o_ai
3432 vec_signextq(vector signed long long __a) {
3433   return __builtin_altivec_vextsd2q(__a);
3434 }
3435 #endif
3436
3437 /* vec_signed */
3438
3439 static __inline__ vector signed int __ATTRS_o_ai
3440 vec_sld(vector signed int, vector signed int, unsigned const int __c);
3441
3442 static __inline__ vector signed int __ATTRS_o_ai
3443 vec_signed(vector float __a) {
3444   return __builtin_convertvector(__a, vector signed int);
3445 }
3446
3447 #ifdef __VSX__
3448 static __inline__ vector signed long long __ATTRS_o_ai
3449 vec_signed(vector double __a) {
3450   return __builtin_convertvector(__a, vector signed long long);
3451 }
3452
3453 static __inline__ vector signed int __attribute__((__always_inline__))
3454 vec_signed2(vector double __a, vector double __b) {
3455   return (vector signed int) { __a[0], __a[1], __b[0], __b[1] };
3456 }
3457
3458 static __inline__ vector signed int __ATTRS_o_ai
3459 vec_signede(vector double __a) {
3460 #ifdef __LITTLE_ENDIAN__
3461   vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);
3462   return vec_sld(__ret, __ret, 12);
3463 #else
3464   return __builtin_vsx_xvcvdpsxws(__a);
3465 #endif
3466 }
3467
3468 static __inline__ vector signed int __ATTRS_o_ai
3469 vec_signedo(vector double __a) {
3470 #ifdef __LITTLE_ENDIAN__
3471   return __builtin_vsx_xvcvdpsxws(__a);
3472 #else
3473   vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);
3474   return vec_sld(__ret, __ret, 12);
3475 #endif
3476 }
3477 #endif
3478
3479 /* vec_unsigned */
3480
3481 static __inline__ vector unsigned int __ATTRS_o_ai
3482 vec_sld(vector unsigned int, vector unsigned int, unsigned const int __c);
3483
3484 static __inline__ vector unsigned int __ATTRS_o_ai
3485 vec_unsigned(vector float __a) {
3486   return __builtin_convertvector(__a, vector unsigned int);
3487 }
3488
3489 #ifdef __VSX__
3490 static __inline__ vector unsigned long long __ATTRS_o_ai
3491 vec_unsigned(vector double __a) {
3492   return __builtin_convertvector(__a, vector unsigned long long);
3493 }
3494
3495 static __inline__ vector unsigned int __attribute__((__always_inline__))
3496 vec_unsigned2(vector double __a, vector double __b) {
3497   return (vector unsigned int) { __a[0], __a[1], __b[0], __b[1] };
3498 }
3499
3500 static __inline__ vector unsigned int __ATTRS_o_ai
3501 vec_unsignede(vector double __a) {
3502 #ifdef __LITTLE_ENDIAN__
3503   vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);
3504   return vec_sld(__ret, __ret, 12);
3505 #else
3506   return __builtin_vsx_xvcvdpuxws(__a);
3507 #endif
3508 }
3509
3510 static __inline__ vector unsigned int __ATTRS_o_ai
3511 vec_unsignedo(vector double __a) {
3512 #ifdef __LITTLE_ENDIAN__
3513   return __builtin_vsx_xvcvdpuxws(__a);
3514 #else
3515   vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);
3516   return vec_sld(__ret, __ret, 12);
3517 #endif
3518 }
3519 #endif
3520
3521 /* vec_float */
3522
3523 static __inline__ vector float __ATTRS_o_ai
3524 vec_sld(vector float, vector float, unsigned const int __c);
3525
3526 static __inline__ vector float __ATTRS_o_ai
3527 vec_float(vector signed int __a) {
3528   return __builtin_convertvector(__a, vector float);
3529 }
3530
3531 static __inline__ vector float __ATTRS_o_ai
3532 vec_float(vector unsigned int __a) {
3533   return __builtin_convertvector(__a, vector float);
3534 }
3535
3536 #ifdef __VSX__
3537 static __inline__ vector float __ATTRS_o_ai
3538 vec_float2(vector signed long long __a, vector signed long long __b) {
3539   return (vector float) { __a[0], __a[1], __b[0], __b[1] };
3540 }
3541
3542 static __inline__ vector float __ATTRS_o_ai
3543 vec_float2(vector unsigned long long __a, vector unsigned long long __b) {
3544   return (vector float) { __a[0], __a[1], __b[0], __b[1] };
3545 }
3546
3547 static __inline__ vector float __ATTRS_o_ai
3548 vec_float2(vector double __a, vector double __b) {
3549   return (vector float) { __a[0], __a[1], __b[0], __b[1] };
3550 }
3551
3552 static __inline__ vector float __ATTRS_o_ai
3553 vec_floate(vector signed long long __a) {
3554 #ifdef __LITTLE_ENDIAN__
3555   vector float __ret = __builtin_vsx_xvcvsxdsp(__a);
3556   return vec_sld(__ret, __ret, 12);
3557 #else
3558   return __builtin_vsx_xvcvsxdsp(__a);
3559 #endif
3560 }
3561
3562 static __inline__ vector float __ATTRS_o_ai
3563 vec_floate(vector unsigned long long __a) {
3564 #ifdef __LITTLE_ENDIAN__
3565   vector float __ret = __builtin_vsx_xvcvuxdsp(__a);
3566   return vec_sld(__ret, __ret, 12);
3567 #else
3568   return __builtin_vsx_xvcvuxdsp(__a);
3569 #endif
3570 }
3571
3572 static __inline__ vector float __ATTRS_o_ai
3573 vec_floate(vector double __a) {
3574 #ifdef __LITTLE_ENDIAN__
3575   vector float __ret = __builtin_vsx_xvcvdpsp(__a);
3576   return vec_sld(__ret, __ret, 12);
3577 #else
3578   return __builtin_vsx_xvcvdpsp(__a);
3579 #endif
3580 }
3581
3582 static __inline__ vector float __ATTRS_o_ai
3583 vec_floato(vector signed long long __a) {
3584 #ifdef __LITTLE_ENDIAN__
3585   return __builtin_vsx_xvcvsxdsp(__a);
3586 #else
3587   vector float __ret = __builtin_vsx_xvcvsxdsp(__a);
3588   return vec_sld(__ret, __ret, 12);
3589 #endif
3590 }
3591
3592 static __inline__ vector float __ATTRS_o_ai
3593 vec_floato(vector unsigned long long __a) {
3594 #ifdef __LITTLE_ENDIAN__
3595   return __builtin_vsx_xvcvuxdsp(__a);
3596 #else
3597   vector float __ret = __builtin_vsx_xvcvuxdsp(__a);
3598   return vec_sld(__ret, __ret, 12);
3599 #endif
3600 }
3601
3602 static __inline__ vector float __ATTRS_o_ai
3603 vec_floato(vector double __a) {
3604 #ifdef __LITTLE_ENDIAN__
3605   return __builtin_vsx_xvcvdpsp(__a);
3606 #else
3607   vector float __ret = __builtin_vsx_xvcvdpsp(__a);
3608   return vec_sld(__ret, __ret, 12);
3609 #endif
3610 }
3611 #endif
3612
3613 /* vec_double */
3614
3615 #ifdef __VSX__
3616 static __inline__ vector double __ATTRS_o_ai
3617 vec_double(vector signed long long __a) {
3618   return __builtin_convertvector(__a, vector double);
3619 }
3620
3621 static __inline__ vector double __ATTRS_o_ai
3622 vec_double(vector unsigned long long __a) {
3623   return __builtin_convertvector(__a, vector double);
3624 }
3625
3626 static __inline__ vector double __ATTRS_o_ai
3627 vec_doublee(vector signed int __a) {
3628 #ifdef __LITTLE_ENDIAN__
3629   return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));
3630 #else
3631   return __builtin_vsx_xvcvsxwdp(__a);
3632 #endif
3633 }
3634
3635 static __inline__ vector double __ATTRS_o_ai
3636 vec_doublee(vector unsigned int __a) {
3637 #ifdef __LITTLE_ENDIAN__
3638   return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));
3639 #else
3640   return __builtin_vsx_xvcvuxwdp(__a);
3641 #endif
3642 }
3643
3644 static __inline__ vector double __ATTRS_o_ai
3645 vec_doublee(vector float __a) {
3646 #ifdef __LITTLE_ENDIAN__
3647   return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));
3648 #else
3649   return __builtin_vsx_xvcvspdp(__a);
3650 #endif
3651 }
3652
3653 static __inline__ vector double __ATTRS_o_ai
3654 vec_doubleh(vector signed int __a) {
3655   vector double __ret = {__a[0], __a[1]};
3656   return __ret;
3657 }
3658
3659 static __inline__ vector double __ATTRS_o_ai
3660 vec_doubleh(vector unsigned int __a) {
3661   vector double __ret = {__a[0], __a[1]};
3662   return __ret;
3663 }
3664
3665 static __inline__ vector double __ATTRS_o_ai
3666 vec_doubleh(vector float __a) {
3667   vector double __ret = {__a[0], __a[1]};
3668   return __ret;
3669 }
3670
3671 static __inline__ vector double __ATTRS_o_ai
3672 vec_doublel(vector signed int __a) {
3673   vector double __ret = {__a[2], __a[3]};
3674   return __ret;
3675 }
3676
3677 static __inline__ vector double __ATTRS_o_ai
3678 vec_doublel(vector unsigned int __a) {
3679   vector double __ret = {__a[2], __a[3]};
3680   return __ret;
3681 }
3682
3683 static __inline__ vector double __ATTRS_o_ai
3684 vec_doublel(vector float __a) {
3685   vector double __ret = {__a[2], __a[3]};
3686   return __ret;
3687 }
3688
3689 static __inline__ vector double __ATTRS_o_ai
3690 vec_doubleo(vector signed int __a) {
3691 #ifdef __LITTLE_ENDIAN__
3692   return __builtin_vsx_xvcvsxwdp(__a);
3693 #else
3694   return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));
3695 #endif
3696 }
3697
3698 static __inline__ vector double __ATTRS_o_ai
3699 vec_doubleo(vector unsigned int __a) {
3700 #ifdef __LITTLE_ENDIAN__
3701   return __builtin_vsx_xvcvuxwdp(__a);
3702 #else
3703   return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));
3704 #endif
3705 }
3706
3707 static __inline__ vector double __ATTRS_o_ai
3708 vec_doubleo(vector float __a) {
3709 #ifdef __LITTLE_ENDIAN__
3710   return __builtin_vsx_xvcvspdp(__a);
3711 #else
3712   return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));
3713 #endif
3714 }
3715
3716 /* vec_cvf */
3717 static __inline__ vector double __ATTRS_o_ai vec_cvf(vector float __a) {
3718   return vec_doublee(__a);
3719 }
3720
3721 static __inline__ vector float __ATTRS_o_ai vec_cvf(vector double __a) {
3722   return vec_floate(__a);
3723 }
3724 #endif
3725
3726 /* vec_div */
3727
3728 /* Integer vector divides (vectors are scalarized, elements divided
3729    and the vectors reassembled).
3730 */
3731 static __inline__ vector signed char __ATTRS_o_ai
3732 vec_div(vector signed char __a, vector signed char __b) {
3733   return __a / __b;
3734 }
3735
3736 static __inline__ vector unsigned char __ATTRS_o_ai
3737 vec_div(vector unsigned char __a, vector unsigned char __b) {
3738   return __a / __b;
3739 }
3740
3741 static __inline__ vector signed short __ATTRS_o_ai
3742 vec_div(vector signed short __a, vector signed short __b) {
3743   return __a / __b;
3744 }
3745
3746 static __inline__ vector unsigned short __ATTRS_o_ai
3747 vec_div(vector unsigned short __a, vector unsigned short __b) {
3748   return __a / __b;
3749 }
3750
3751 static __inline__ vector signed int __ATTRS_o_ai
3752 vec_div(vector signed int __a, vector signed int __b) {
3753   return __a / __b;
3754 }
3755
3756 static __inline__ vector unsigned int __ATTRS_o_ai
3757 vec_div(vector unsigned int __a, vector unsigned int __b) {
3758   return __a / __b;
3759 }
3760
3761 #ifdef __VSX__
3762 static __inline__ vector signed long long __ATTRS_o_ai
3763 vec_div(vector signed long long __a, vector signed long long __b) {
3764   return __a / __b;
3765 }
3766
3767 static __inline__ vector unsigned long long __ATTRS_o_ai
3768 vec_div(vector unsigned long long __a, vector unsigned long long __b) {
3769   return __a / __b;
3770 }
3771
3772 static __inline__ vector float __ATTRS_o_ai vec_div(vector float __a,
3773                                                     vector float __b) {
3774   return __a / __b;
3775 }
3776
3777 static __inline__ vector double __ATTRS_o_ai vec_div(vector double __a,
3778                                                      vector double __b) {
3779   return __a / __b;
3780 }
3781 #endif
3782
3783 /* vec_dive */
3784
3785 #ifdef __POWER10_VECTOR__
3786 static __inline__ vector signed int __ATTRS_o_ai
3787 vec_dive(vector signed int __a, vector signed int __b) {
3788   return __builtin_altivec_vdivesw(__a, __b);
3789 }
3790
3791 static __inline__ vector unsigned int __ATTRS_o_ai
3792 vec_dive(vector unsigned int __a, vector unsigned int __b) {
3793   return __builtin_altivec_vdiveuw(__a, __b);
3794 }
3795
3796 static __inline__ vector signed long long __ATTRS_o_ai
3797 vec_dive(vector signed long long __a, vector signed long long __b) {
3798   return __builtin_altivec_vdivesd(__a, __b);
3799 }
3800
3801 static __inline__ vector unsigned long long __ATTRS_o_ai
3802 vec_dive(vector unsigned long long __a, vector unsigned long long __b) {
3803   return __builtin_altivec_vdiveud(__a, __b);
3804 }
3805
3806 #ifdef __SIZEOF_INT128__
3807 static __inline__ vector unsigned __int128 __ATTRS_o_ai
3808 vec_dive(vector unsigned __int128 __a, vector unsigned __int128 __b) {
3809   return __builtin_altivec_vdiveuq(__a, __b);
3810 }
3811
3812 static __inline__ vector signed __int128 __ATTRS_o_ai
3813 vec_dive(vector signed __int128 __a, vector signed __int128 __b) {
3814   return __builtin_altivec_vdivesq(__a, __b);
3815 }
3816 #endif
3817 #endif
3818
3819 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
3820 static __inline__ vector unsigned __int128 __ATTRS_o_ai
3821 vec_div(vector unsigned __int128 __a, vector unsigned __int128 __b) {
3822   return __a / __b;
3823 }
3824
3825 static __inline__ vector signed __int128 __ATTRS_o_ai
3826 vec_div(vector signed __int128 __a, vector signed __int128 __b) {
3827   return __a / __b;
3828 }
3829 #endif /* __POWER10_VECTOR__ */
3830
3831 /* vec_xvtdiv */
3832
3833 #ifdef __VSX__
3834 static __inline__ int __ATTRS_o_ai vec_test_swdiv(vector double __a,
3835                                                   vector double __b) {
3836   return __builtin_vsx_xvtdivdp(__a, __b);
3837 }
3838
3839 static __inline__ int __ATTRS_o_ai vec_test_swdivs(vector float __a,
3840                                                    vector float __b) {
3841   return __builtin_vsx_xvtdivsp(__a, __b);
3842 }
3843 #endif
3844
3845 /* vec_dss */
3846
3847 #define vec_dss __builtin_altivec_dss
3848
3849 /* vec_dssall */
3850
3851 static __inline__ void __attribute__((__always_inline__)) vec_dssall(void) {
3852   __builtin_altivec_dssall();
3853 }
3854
3855 /* vec_dst */
3856 #define vec_dst(__PTR, __CW, __STR) \
3857   __builtin_altivec_dst((const void *)(__PTR), (__CW), (__STR))
3858
3859 /* vec_dstst */
3860 #define vec_dstst(__PTR, __CW, __STR) \
3861   __builtin_altivec_dstst((const void *)(__PTR), (__CW), (__STR))
3862
3863 /* vec_dststt */
3864 #define vec_dststt(__PTR, __CW, __STR) \
3865   __builtin_altivec_dststt((const void *)(__PTR), (__CW), (__STR))
3866
3867 /* vec_dstt */
3868 #define vec_dstt(__PTR, __CW, __STR) \
3869   __builtin_altivec_dstt((const void *)(__PTR), (__CW), (__STR))
3870
3871 /* vec_eqv */
3872
3873 #ifdef __POWER8_VECTOR__
3874 static __inline__ vector signed char __ATTRS_o_ai
3875 vec_eqv(vector signed char __a, vector signed char __b) {
3876   return (vector signed char)__builtin_vsx_xxleqv((vector unsigned int)__a,
3877                                                   (vector unsigned int)__b);
3878 }
3879
3880 static __inline__ vector unsigned char __ATTRS_o_ai
3881 vec_eqv(vector unsigned char __a, vector unsigned char __b) {
3882   return (vector unsigned char)__builtin_vsx_xxleqv((vector unsigned int)__a,
3883                                                     (vector unsigned int)__b);
3884 }
3885
3886 static __inline__ vector bool char __ATTRS_o_ai vec_eqv(vector bool char __a,
3887                                                         vector bool char __b) {
3888   return (vector bool char)__builtin_vsx_xxleqv((vector unsigned int)__a,
3889                                                 (vector unsigned int)__b);
3890 }
3891
3892 static __inline__ vector signed short __ATTRS_o_ai
3893 vec_eqv(vector signed short __a, vector signed short __b) {
3894   return (vector signed short)__builtin_vsx_xxleqv((vector unsigned int)__a,
3895                                                    (vector unsigned int)__b);
3896 }
3897
3898 static __inline__ vector unsigned short __ATTRS_o_ai
3899 vec_eqv(vector unsigned short __a, vector unsigned short __b) {
3900   return (vector unsigned short)__builtin_vsx_xxleqv((vector unsigned int)__a,
3901                                                      (vector unsigned int)__b);
3902 }
3903
3904 static __inline__ vector bool short __ATTRS_o_ai
3905 vec_eqv(vector bool short __a, vector bool short __b) {
3906   return (vector bool short)__builtin_vsx_xxleqv((vector unsigned int)__a,
3907                                                  (vector unsigned int)__b);
3908 }
3909
3910 static __inline__ vector signed int __ATTRS_o_ai
3911 vec_eqv(vector signed int __a, vector signed int __b) {
3912   return (vector signed int)__builtin_vsx_xxleqv((vector unsigned int)__a,
3913                                                  (vector unsigned int)__b);
3914 }
3915
3916 static __inline__ vector unsigned int __ATTRS_o_ai
3917 vec_eqv(vector unsigned int __a, vector unsigned int __b) {
3918   return __builtin_vsx_xxleqv(__a, __b);
3919 }
3920
3921 static __inline__ vector bool int __ATTRS_o_ai vec_eqv(vector bool int __a,
3922                                                        vector bool int __b) {
3923   return (vector bool int)__builtin_vsx_xxleqv((vector unsigned int)__a,
3924                                                (vector unsigned int)__b);
3925 }
3926
3927 static __inline__ vector signed long long __ATTRS_o_ai
3928 vec_eqv(vector signed long long __a, vector signed long long __b) {
3929   return (vector signed long long)__builtin_vsx_xxleqv(
3930       (vector unsigned int)__a, (vector unsigned int)__b);
3931 }
3932
3933 static __inline__ vector unsigned long long __ATTRS_o_ai
3934 vec_eqv(vector unsigned long long __a, vector unsigned long long __b) {
3935   return (vector unsigned long long)__builtin_vsx_xxleqv(
3936       (vector unsigned int)__a, (vector unsigned int)__b);
3937 }
3938
3939 static __inline__ vector bool long long __ATTRS_o_ai
3940 vec_eqv(vector bool long long __a, vector bool long long __b) {
3941   return (vector bool long long)__builtin_vsx_xxleqv((vector unsigned int)__a,
3942                                                      (vector unsigned int)__b);
3943 }
3944
3945 static __inline__ vector float __ATTRS_o_ai vec_eqv(vector float __a,
3946                                                     vector float __b) {
3947   return (vector float)__builtin_vsx_xxleqv((vector unsigned int)__a,
3948                                             (vector unsigned int)__b);
3949 }
3950
3951 static __inline__ vector double __ATTRS_o_ai vec_eqv(vector double __a,
3952                                                      vector double __b) {
3953   return (vector double)__builtin_vsx_xxleqv((vector unsigned int)__a,
3954                                              (vector unsigned int)__b);
3955 }
3956 #endif
3957
3958 /* vec_expte */
3959
3960 static __inline__ vector float __attribute__((__always_inline__))
3961 vec_expte(vector float __a) {
3962   return __builtin_altivec_vexptefp(__a);
3963 }
3964
3965 /* vec_vexptefp */
3966
3967 static __inline__ vector float __attribute__((__always_inline__))
3968 vec_vexptefp(vector float __a) {
3969   return __builtin_altivec_vexptefp(__a);
3970 }
3971
3972 /* vec_floor */
3973
3974 static __inline__ vector float __ATTRS_o_ai vec_floor(vector float __a) {
3975 #ifdef __VSX__
3976   return __builtin_vsx_xvrspim(__a);
3977 #else
3978   return __builtin_altivec_vrfim(__a);
3979 #endif
3980 }
3981
3982 #ifdef __VSX__
3983 static __inline__ vector double __ATTRS_o_ai vec_floor(vector double __a) {
3984   return __builtin_vsx_xvrdpim(__a);
3985 }
3986 #endif
3987
3988 /* vec_roundm */
3989 static __inline__ vector float __ATTRS_o_ai vec_roundm(vector float __a) {
3990   return vec_floor(__a);
3991 }
3992
3993 #ifdef __VSX__
3994 static __inline__ vector double __ATTRS_o_ai vec_roundm(vector double __a) {
3995   return vec_floor(__a);
3996 }
3997 #endif
3998
3999 /* vec_vrfim */
4000
4001 static __inline__ vector float __attribute__((__always_inline__))
4002 vec_vrfim(vector float __a) {
4003   return __builtin_altivec_vrfim(__a);
4004 }
4005
4006 /* vec_ld */
4007
4008 static __inline__ vector signed char __ATTRS_o_ai
4009 vec_ld(long __a, const vector signed char *__b) {
4010   return (vector signed char)__builtin_altivec_lvx(__a, __b);
4011 }
4012
4013 static __inline__ vector signed char __ATTRS_o_ai
4014 vec_ld(long __a, const signed char *__b) {
4015   return (vector signed char)__builtin_altivec_lvx(__a, __b);
4016 }
4017
4018 static __inline__ vector unsigned char __ATTRS_o_ai
4019 vec_ld(long __a, const vector unsigned char *__b) {
4020   return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
4021 }
4022
4023 static __inline__ vector unsigned char __ATTRS_o_ai
4024 vec_ld(long __a, const unsigned char *__b) {
4025   return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
4026 }
4027
4028 static __inline__ vector bool char __ATTRS_o_ai
4029 vec_ld(long __a, const vector bool char *__b) {
4030   return (vector bool char)__builtin_altivec_lvx(__a, __b);
4031 }
4032
4033 static __inline__ vector short __ATTRS_o_ai vec_ld(long __a,
4034                                                    const vector short *__b) {
4035   return (vector short)__builtin_altivec_lvx(__a, __b);
4036 }
4037
4038 static __inline__ vector short __ATTRS_o_ai vec_ld(long __a, const short *__b) {
4039   return (vector short)__builtin_altivec_lvx(__a, __b);
4040 }
4041
4042 static __inline__ vector unsigned short __ATTRS_o_ai
4043 vec_ld(long __a, const vector unsigned short *__b) {
4044   return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
4045 }
4046
4047 static __inline__ vector unsigned short __ATTRS_o_ai
4048 vec_ld(long __a, const unsigned short *__b) {
4049   return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
4050 }
4051
4052 static __inline__ vector bool short __ATTRS_o_ai
4053 vec_ld(long __a, const vector bool short *__b) {
4054   return (vector bool short)__builtin_altivec_lvx(__a, __b);
4055 }
4056
4057 static __inline__ vector pixel __ATTRS_o_ai vec_ld(long __a,
4058                                                    const vector pixel *__b) {
4059   return (vector pixel)__builtin_altivec_lvx(__a, __b);
4060 }
4061
4062 static __inline__ vector int __ATTRS_o_ai vec_ld(long __a,
4063                                                  const vector int *__b) {
4064   return (vector int)__builtin_altivec_lvx(__a, __b);
4065 }
4066
4067 static __inline__ vector int __ATTRS_o_ai vec_ld(long __a, const int *__b) {
4068   return (vector int)__builtin_altivec_lvx(__a, __b);
4069 }
4070
4071 static __inline__ vector unsigned int __ATTRS_o_ai
4072 vec_ld(long __a, const vector unsigned int *__b) {
4073   return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
4074 }
4075
4076 static __inline__ vector unsigned int __ATTRS_o_ai
4077 vec_ld(long __a, const unsigned int *__b) {
4078   return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
4079 }
4080
4081 static __inline__ vector bool int __ATTRS_o_ai
4082 vec_ld(long __a, const vector bool int *__b) {
4083   return (vector bool int)__builtin_altivec_lvx(__a, __b);
4084 }
4085
4086 static __inline__ vector float __ATTRS_o_ai vec_ld(long __a,
4087                                                    const vector float *__b) {
4088   return (vector float)__builtin_altivec_lvx(__a, __b);
4089 }
4090
4091 static __inline__ vector float __ATTRS_o_ai vec_ld(long __a, const float *__b) {
4092   return (vector float)__builtin_altivec_lvx(__a, __b);
4093 }
4094
4095 /* vec_lvx */
4096
4097 static __inline__ vector signed char __ATTRS_o_ai
4098 vec_lvx(long __a, const vector signed char *__b) {
4099   return (vector signed char)__builtin_altivec_lvx(__a, __b);
4100 }
4101
4102 static __inline__ vector signed char __ATTRS_o_ai
4103 vec_lvx(long __a, const signed char *__b) {
4104   return (vector signed char)__builtin_altivec_lvx(__a, __b);
4105 }
4106
4107 static __inline__ vector unsigned char __ATTRS_o_ai
4108 vec_lvx(long __a, const vector unsigned char *__b) {
4109   return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
4110 }
4111
4112 static __inline__ vector unsigned char __ATTRS_o_ai
4113 vec_lvx(long __a, const unsigned char *__b) {
4114   return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
4115 }
4116
4117 static __inline__ vector bool char __ATTRS_o_ai
4118 vec_lvx(long __a, const vector bool char *__b) {
4119   return (vector bool char)__builtin_altivec_lvx(__a, __b);
4120 }
4121
4122 static __inline__ vector short __ATTRS_o_ai vec_lvx(long __a,
4123                                                     const vector short *__b) {
4124   return (vector short)__builtin_altivec_lvx(__a, __b);
4125 }
4126
4127 static __inline__ vector short __ATTRS_o_ai vec_lvx(long __a, const short *__b) {
4128   return (vector short)__builtin_altivec_lvx(__a, __b);
4129 }
4130
4131 static __inline__ vector unsigned short __ATTRS_o_ai
4132 vec_lvx(long __a, const vector unsigned short *__b) {
4133   return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
4134 }
4135
4136 static __inline__ vector unsigned short __ATTRS_o_ai
4137 vec_lvx(long __a, const unsigned short *__b) {
4138   return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
4139 }
4140
4141 static __inline__ vector bool short __ATTRS_o_ai
4142 vec_lvx(long __a, const vector bool short *__b) {
4143   return (vector bool short)__builtin_altivec_lvx(__a, __b);
4144 }
4145
4146 static __inline__ vector pixel __ATTRS_o_ai vec_lvx(long __a,
4147                                                     const vector pixel *__b) {
4148   return (vector pixel)__builtin_altivec_lvx(__a, __b);
4149 }
4150
4151 static __inline__ vector int __ATTRS_o_ai vec_lvx(long __a,
4152                                                   const vector int *__b) {
4153   return (vector int)__builtin_altivec_lvx(__a, __b);
4154 }
4155
4156 static __inline__ vector int __ATTRS_o_ai vec_lvx(long __a, const int *__b) {
4157   return (vector int)__builtin_altivec_lvx(__a, __b);
4158 }
4159
4160 static __inline__ vector unsigned int __ATTRS_o_ai
4161 vec_lvx(long __a, const vector unsigned int *__b) {
4162   return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
4163 }
4164
4165 static __inline__ vector unsigned int __ATTRS_o_ai
4166 vec_lvx(long __a, const unsigned int *__b) {
4167   return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
4168 }
4169
4170 static __inline__ vector bool int __ATTRS_o_ai
4171 vec_lvx(long __a, const vector bool int *__b) {
4172   return (vector bool int)__builtin_altivec_lvx(__a, __b);
4173 }
4174
4175 static __inline__ vector float __ATTRS_o_ai vec_lvx(long __a,
4176                                                     const vector float *__b) {
4177   return (vector float)__builtin_altivec_lvx(__a, __b);
4178 }
4179
4180 static __inline__ vector float __ATTRS_o_ai vec_lvx(long __a, const float *__b) {
4181   return (vector float)__builtin_altivec_lvx(__a, __b);
4182 }
4183
4184 /* vec_lde */
4185
4186 static __inline__ vector signed char __ATTRS_o_ai
4187 vec_lde(long __a, const signed char *__b) {
4188   return (vector signed char)__builtin_altivec_lvebx(__a, __b);
4189 }
4190
4191 static __inline__ vector unsigned char __ATTRS_o_ai
4192 vec_lde(long __a, const unsigned char *__b) {
4193   return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
4194 }
4195
4196 static __inline__ vector short __ATTRS_o_ai vec_lde(long __a, const short *__b) {
4197   return (vector short)__builtin_altivec_lvehx(__a, __b);
4198 }
4199
4200 static __inline__ vector unsigned short __ATTRS_o_ai
4201 vec_lde(long __a, const unsigned short *__b) {
4202   return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
4203 }
4204
4205 static __inline__ vector int __ATTRS_o_ai vec_lde(long __a, const int *__b) {
4206   return (vector int)__builtin_altivec_lvewx(__a, __b);
4207 }
4208
4209 static __inline__ vector unsigned int __ATTRS_o_ai
4210 vec_lde(long __a, const unsigned int *__b) {
4211   return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
4212 }
4213
4214 static __inline__ vector float __ATTRS_o_ai vec_lde(long __a, const float *__b) {
4215   return (vector float)__builtin_altivec_lvewx(__a, __b);
4216 }
4217
4218 /* vec_lvebx */
4219
4220 static __inline__ vector signed char __ATTRS_o_ai
4221 vec_lvebx(long __a, const signed char *__b) {
4222   return (vector signed char)__builtin_altivec_lvebx(__a, __b);
4223 }
4224
4225 static __inline__ vector unsigned char __ATTRS_o_ai
4226 vec_lvebx(long __a, const unsigned char *__b) {
4227   return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
4228 }
4229
4230 /* vec_lvehx */
4231
4232 static __inline__ vector short __ATTRS_o_ai vec_lvehx(long __a,
4233                                                       const short *__b) {
4234   return (vector short)__builtin_altivec_lvehx(__a, __b);
4235 }
4236
4237 static __inline__ vector unsigned short __ATTRS_o_ai
4238 vec_lvehx(long __a, const unsigned short *__b) {
4239   return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
4240 }
4241
4242 /* vec_lvewx */
4243
4244 static __inline__ vector int __ATTRS_o_ai vec_lvewx(long __a, const int *__b) {
4245   return (vector int)__builtin_altivec_lvewx(__a, __b);
4246 }
4247
4248 static __inline__ vector unsigned int __ATTRS_o_ai
4249 vec_lvewx(long __a, const unsigned int *__b) {
4250   return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
4251 }
4252
4253 static __inline__ vector float __ATTRS_o_ai vec_lvewx(long __a,
4254                                                       const float *__b) {
4255   return (vector float)__builtin_altivec_lvewx(__a, __b);
4256 }
4257
4258 /* vec_ldl */
4259
4260 static __inline__ vector signed char __ATTRS_o_ai
4261 vec_ldl(long __a, const vector signed char *__b) {
4262   return (vector signed char)__builtin_altivec_lvxl(__a, __b);
4263 }
4264
4265 static __inline__ vector signed char __ATTRS_o_ai
4266 vec_ldl(long __a, const signed char *__b) {
4267   return (vector signed char)__builtin_altivec_lvxl(__a, __b);
4268 }
4269
4270 static __inline__ vector unsigned char __ATTRS_o_ai
4271 vec_ldl(long __a, const vector unsigned char *__b) {
4272   return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
4273 }
4274
4275 static __inline__ vector unsigned char __ATTRS_o_ai
4276 vec_ldl(long __a, const unsigned char *__b) {
4277   return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
4278 }
4279
4280 static __inline__ vector bool char __ATTRS_o_ai
4281 vec_ldl(long __a, const vector bool char *__b) {
4282   return (vector bool char)__builtin_altivec_lvxl(__a, __b);
4283 }
4284
4285 static __inline__ vector short __ATTRS_o_ai vec_ldl(long __a,
4286                                                     const vector short *__b) {
4287   return (vector short)__builtin_altivec_lvxl(__a, __b);
4288 }
4289
4290 static __inline__ vector short __ATTRS_o_ai vec_ldl(long __a, const short *__b) {
4291   return (vector short)__builtin_altivec_lvxl(__a, __b);
4292 }
4293
4294 static __inline__ vector unsigned short __ATTRS_o_ai
4295 vec_ldl(long __a, const vector unsigned short *__b) {
4296   return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
4297 }
4298
4299 static __inline__ vector unsigned short __ATTRS_o_ai
4300 vec_ldl(long __a, const unsigned short *__b) {
4301   return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
4302 }
4303
4304 static __inline__ vector bool short __ATTRS_o_ai
4305 vec_ldl(long __a, const vector bool short *__b) {
4306   return (vector bool short)__builtin_altivec_lvxl(__a, __b);
4307 }
4308
4309 static __inline__ vector pixel __ATTRS_o_ai vec_ldl(long __a,
4310                                                     const vector pixel *__b) {
4311   return (vector pixel short)__builtin_altivec_lvxl(__a, __b);
4312 }
4313
4314 static __inline__ vector int __ATTRS_o_ai vec_ldl(long __a,
4315                                                   const vector int *__b) {
4316   return (vector int)__builtin_altivec_lvxl(__a, __b);
4317 }
4318
4319 static __inline__ vector int __ATTRS_o_ai vec_ldl(long __a, const int *__b) {
4320   return (vector int)__builtin_altivec_lvxl(__a, __b);
4321 }
4322
4323 static __inline__ vector unsigned int __ATTRS_o_ai
4324 vec_ldl(long __a, const vector unsigned int *__b) {
4325   return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
4326 }
4327
4328 static __inline__ vector unsigned int __ATTRS_o_ai
4329 vec_ldl(long __a, const unsigned int *__b) {
4330   return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
4331 }
4332
4333 static __inline__ vector bool int __ATTRS_o_ai
4334 vec_ldl(long __a, const vector bool int *__b) {
4335   return (vector bool int)__builtin_altivec_lvxl(__a, __b);
4336 }
4337
4338 static __inline__ vector float __ATTRS_o_ai vec_ldl(long __a,
4339                                                     const vector float *__b) {
4340   return (vector float)__builtin_altivec_lvxl(__a, __b);
4341 }
4342
4343 static __inline__ vector float __ATTRS_o_ai vec_ldl(long __a, const float *__b) {
4344   return (vector float)__builtin_altivec_lvxl(__a, __b);
4345 }
4346
4347 /* vec_lvxl */
4348
4349 static __inline__ vector signed char __ATTRS_o_ai
4350 vec_lvxl(long __a, const vector signed char *__b) {
4351   return (vector signed char)__builtin_altivec_lvxl(__a, __b);
4352 }
4353
4354 static __inline__ vector signed char __ATTRS_o_ai
4355 vec_lvxl(long __a, const signed char *__b) {
4356   return (vector signed char)__builtin_altivec_lvxl(__a, __b);
4357 }
4358
4359 static __inline__ vector unsigned char __ATTRS_o_ai
4360 vec_lvxl(long __a, const vector unsigned char *__b) {
4361   return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
4362 }
4363
4364 static __inline__ vector unsigned char __ATTRS_o_ai
4365 vec_lvxl(long __a, const unsigned char *__b) {
4366   return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
4367 }
4368
4369 static __inline__ vector bool char __ATTRS_o_ai
4370 vec_lvxl(long __a, const vector bool char *__b) {
4371   return (vector bool char)__builtin_altivec_lvxl(__a, __b);
4372 }
4373
4374 static __inline__ vector short __ATTRS_o_ai vec_lvxl(long __a,
4375                                                      const vector short *__b) {
4376   return (vector short)__builtin_altivec_lvxl(__a, __b);
4377 }
4378
4379 static __inline__ vector short __ATTRS_o_ai vec_lvxl(long __a,
4380                                                      const short *__b) {
4381   return (vector short)__builtin_altivec_lvxl(__a, __b);
4382 }
4383
4384 static __inline__ vector unsigned short __ATTRS_o_ai
4385 vec_lvxl(long __a, const vector unsigned short *__b) {
4386   return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
4387 }
4388
4389 static __inline__ vector unsigned short __ATTRS_o_ai
4390 vec_lvxl(long __a, const unsigned short *__b) {
4391   return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
4392 }
4393
4394 static __inline__ vector bool short __ATTRS_o_ai
4395 vec_lvxl(long __a, const vector bool short *__b) {
4396   return (vector bool short)__builtin_altivec_lvxl(__a, __b);
4397 }
4398
4399 static __inline__ vector pixel __ATTRS_o_ai vec_lvxl(long __a,
4400                                                      const vector pixel *__b) {
4401   return (vector pixel)__builtin_altivec_lvxl(__a, __b);
4402 }
4403
4404 static __inline__ vector int __ATTRS_o_ai vec_lvxl(long __a,
4405                                                    const vector int *__b) {
4406   return (vector int)__builtin_altivec_lvxl(__a, __b);
4407 }
4408
4409 static __inline__ vector int __ATTRS_o_ai vec_lvxl(long __a, const int *__b) {
4410   return (vector int)__builtin_altivec_lvxl(__a, __b);
4411 }
4412
4413 static __inline__ vector unsigned int __ATTRS_o_ai
4414 vec_lvxl(long __a, const vector unsigned int *__b) {
4415   return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
4416 }
4417
4418 static __inline__ vector unsigned int __ATTRS_o_ai
4419 vec_lvxl(long __a, const unsigned int *__b) {
4420   return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
4421 }
4422
4423 static __inline__ vector bool int __ATTRS_o_ai
4424 vec_lvxl(long __a, const vector bool int *__b) {
4425   return (vector bool int)__builtin_altivec_lvxl(__a, __b);
4426 }
4427
4428 static __inline__ vector float __ATTRS_o_ai vec_lvxl(long __a,
4429                                                      const vector float *__b) {
4430   return (vector float)__builtin_altivec_lvxl(__a, __b);
4431 }
4432
4433 static __inline__ vector float __ATTRS_o_ai vec_lvxl(long __a,
4434                                                      const float *__b) {
4435   return (vector float)__builtin_altivec_lvxl(__a, __b);
4436 }
4437
4438 /* vec_loge */
4439
4440 static __inline__ vector float __attribute__((__always_inline__))
4441 vec_loge(vector float __a) {
4442   return __builtin_altivec_vlogefp(__a);
4443 }
4444
4445 /* vec_vlogefp */
4446
4447 static __inline__ vector float __attribute__((__always_inline__))
4448 vec_vlogefp(vector float __a) {
4449   return __builtin_altivec_vlogefp(__a);
4450 }
4451
4452 /* vec_lvsl */
4453
4454 #ifdef __LITTLE_ENDIAN__
4455 static __inline__ vector unsigned char __ATTRS_o_ai
4456     __attribute__((__deprecated__("use assignment for unaligned little endian \
4457 loads/stores"))) vec_lvsl(int __a, const signed char *__b) {
4458   vector unsigned char mask =
4459       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4460   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4461                                   7,  6,  5,  4,  3,  2,  1, 0};
4462   return vec_perm(mask, mask, reverse);
4463 }
4464 #else
4465 static __inline__ vector unsigned char __ATTRS_o_ai
4466 vec_lvsl(int __a, const signed char *__b) {
4467   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4468 }
4469 #endif
4470
4471 #ifdef __LITTLE_ENDIAN__
4472 static __inline__ vector unsigned char __ATTRS_o_ai
4473     __attribute__((__deprecated__("use assignment for unaligned little endian \
4474 loads/stores"))) vec_lvsl(int __a, const unsigned char *__b) {
4475   vector unsigned char mask =
4476       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4477   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4478                                   7,  6,  5,  4,  3,  2,  1, 0};
4479   return vec_perm(mask, mask, reverse);
4480 }
4481 #else
4482 static __inline__ vector unsigned char __ATTRS_o_ai
4483 vec_lvsl(int __a, const unsigned char *__b) {
4484   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4485 }
4486 #endif
4487
4488 #ifdef __LITTLE_ENDIAN__
4489 static __inline__ vector unsigned char __ATTRS_o_ai
4490     __attribute__((__deprecated__("use assignment for unaligned little endian \
4491 loads/stores"))) vec_lvsl(int __a, const short *__b) {
4492   vector unsigned char mask =
4493       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4494   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4495                                   7,  6,  5,  4,  3,  2,  1, 0};
4496   return vec_perm(mask, mask, reverse);
4497 }
4498 #else
4499 static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
4500                                                              const short *__b) {
4501   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4502 }
4503 #endif
4504
4505 #ifdef __LITTLE_ENDIAN__
4506 static __inline__ vector unsigned char __ATTRS_o_ai
4507     __attribute__((__deprecated__("use assignment for unaligned little endian \
4508 loads/stores"))) vec_lvsl(int __a, const unsigned short *__b) {
4509   vector unsigned char mask =
4510       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4511   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4512                                   7,  6,  5,  4,  3,  2,  1, 0};
4513   return vec_perm(mask, mask, reverse);
4514 }
4515 #else
4516 static __inline__ vector unsigned char __ATTRS_o_ai
4517 vec_lvsl(int __a, const unsigned short *__b) {
4518   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4519 }
4520 #endif
4521
4522 #ifdef __LITTLE_ENDIAN__
4523 static __inline__ vector unsigned char __ATTRS_o_ai
4524     __attribute__((__deprecated__("use assignment for unaligned little endian \
4525 loads/stores"))) vec_lvsl(int __a, const int *__b) {
4526   vector unsigned char mask =
4527       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4528   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4529                                   7,  6,  5,  4,  3,  2,  1, 0};
4530   return vec_perm(mask, mask, reverse);
4531 }
4532 #else
4533 static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
4534                                                              const int *__b) {
4535   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4536 }
4537 #endif
4538
4539 #ifdef __LITTLE_ENDIAN__
4540 static __inline__ vector unsigned char __ATTRS_o_ai
4541     __attribute__((__deprecated__("use assignment for unaligned little endian \
4542 loads/stores"))) vec_lvsl(int __a, const unsigned int *__b) {
4543   vector unsigned char mask =
4544       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4545   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4546                                   7,  6,  5,  4,  3,  2,  1, 0};
4547   return vec_perm(mask, mask, reverse);
4548 }
4549 #else
4550 static __inline__ vector unsigned char __ATTRS_o_ai
4551 vec_lvsl(int __a, const unsigned int *__b) {
4552   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4553 }
4554 #endif
4555
4556 #ifdef __LITTLE_ENDIAN__
4557 static __inline__ vector unsigned char __ATTRS_o_ai
4558     __attribute__((__deprecated__("use assignment for unaligned little endian \
4559 loads/stores"))) vec_lvsl(int __a, const float *__b) {
4560   vector unsigned char mask =
4561       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4562   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4563                                   7,  6,  5,  4,  3,  2,  1, 0};
4564   return vec_perm(mask, mask, reverse);
4565 }
4566 #else
4567 static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
4568                                                              const float *__b) {
4569   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4570 }
4571 #endif
4572
4573 /* vec_lvsr */
4574
4575 #ifdef __LITTLE_ENDIAN__
4576 static __inline__ vector unsigned char __ATTRS_o_ai
4577     __attribute__((__deprecated__("use assignment for unaligned little endian \
4578 loads/stores"))) vec_lvsr(int __a, const signed char *__b) {
4579   vector unsigned char mask =
4580       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4581   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4582                                   7,  6,  5,  4,  3,  2,  1, 0};
4583   return vec_perm(mask, mask, reverse);
4584 }
4585 #else
4586 static __inline__ vector unsigned char __ATTRS_o_ai
4587 vec_lvsr(int __a, const signed char *__b) {
4588   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4589 }
4590 #endif
4591
4592 #ifdef __LITTLE_ENDIAN__
4593 static __inline__ vector unsigned char __ATTRS_o_ai
4594     __attribute__((__deprecated__("use assignment for unaligned little endian \
4595 loads/stores"))) vec_lvsr(int __a, const unsigned char *__b) {
4596   vector unsigned char mask =
4597       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4598   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4599                                   7,  6,  5,  4,  3,  2,  1, 0};
4600   return vec_perm(mask, mask, reverse);
4601 }
4602 #else
4603 static __inline__ vector unsigned char __ATTRS_o_ai
4604 vec_lvsr(int __a, const unsigned char *__b) {
4605   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4606 }
4607 #endif
4608
4609 #ifdef __LITTLE_ENDIAN__
4610 static __inline__ vector unsigned char __ATTRS_o_ai
4611     __attribute__((__deprecated__("use assignment for unaligned little endian \
4612 loads/stores"))) vec_lvsr(int __a, const short *__b) {
4613   vector unsigned char mask =
4614       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4615   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4616                                   7,  6,  5,  4,  3,  2,  1, 0};
4617   return vec_perm(mask, mask, reverse);
4618 }
4619 #else
4620 static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
4621                                                              const short *__b) {
4622   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4623 }
4624 #endif
4625
4626 #ifdef __LITTLE_ENDIAN__
4627 static __inline__ vector unsigned char __ATTRS_o_ai
4628     __attribute__((__deprecated__("use assignment for unaligned little endian \
4629 loads/stores"))) vec_lvsr(int __a, const unsigned short *__b) {
4630   vector unsigned char mask =
4631       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4632   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4633                                   7,  6,  5,  4,  3,  2,  1, 0};
4634   return vec_perm(mask, mask, reverse);
4635 }
4636 #else
4637 static __inline__ vector unsigned char __ATTRS_o_ai
4638 vec_lvsr(int __a, const unsigned short *__b) {
4639   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4640 }
4641 #endif
4642
4643 #ifdef __LITTLE_ENDIAN__
4644 static __inline__ vector unsigned char __ATTRS_o_ai
4645     __attribute__((__deprecated__("use assignment for unaligned little endian \
4646 loads/stores"))) vec_lvsr(int __a, const int *__b) {
4647   vector unsigned char mask =
4648       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4649   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4650                                   7,  6,  5,  4,  3,  2,  1, 0};
4651   return vec_perm(mask, mask, reverse);
4652 }
4653 #else
4654 static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
4655                                                              const int *__b) {
4656   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4657 }
4658 #endif
4659
4660 #ifdef __LITTLE_ENDIAN__
4661 static __inline__ vector unsigned char __ATTRS_o_ai
4662     __attribute__((__deprecated__("use assignment for unaligned little endian \
4663 loads/stores"))) vec_lvsr(int __a, const unsigned int *__b) {
4664   vector unsigned char mask =
4665       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4666   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4667                                   7,  6,  5,  4,  3,  2,  1, 0};
4668   return vec_perm(mask, mask, reverse);
4669 }
4670 #else
4671 static __inline__ vector unsigned char __ATTRS_o_ai
4672 vec_lvsr(int __a, const unsigned int *__b) {
4673   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4674 }
4675 #endif
4676
4677 #ifdef __LITTLE_ENDIAN__
4678 static __inline__ vector unsigned char __ATTRS_o_ai
4679     __attribute__((__deprecated__("use assignment for unaligned little endian \
4680 loads/stores"))) vec_lvsr(int __a, const float *__b) {
4681   vector unsigned char mask =
4682       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4683   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4684                                   7,  6,  5,  4,  3,  2,  1, 0};
4685   return vec_perm(mask, mask, reverse);
4686 }
4687 #else
4688 static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
4689                                                              const float *__b) {
4690   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4691 }
4692 #endif
4693
4694 /* vec_madd */
4695 static __inline__ vector signed short __ATTRS_o_ai
4696 vec_mladd(vector signed short, vector signed short, vector signed short);
4697 static __inline__ vector signed short __ATTRS_o_ai
4698 vec_mladd(vector signed short, vector unsigned short, vector unsigned short);
4699 static __inline__ vector signed short __ATTRS_o_ai
4700 vec_mladd(vector unsigned short, vector signed short, vector signed short);
4701 static __inline__ vector unsigned short __ATTRS_o_ai
4702 vec_mladd(vector unsigned short, vector unsigned short, vector unsigned short);
4703
4704 static __inline__ vector signed short __ATTRS_o_ai vec_madd(
4705     vector signed short __a, vector signed short __b, vector signed short __c) {
4706   return vec_mladd(__a, __b, __c);
4707 }
4708
4709 static __inline__ vector signed short __ATTRS_o_ai
4710 vec_madd(vector signed short __a, vector unsigned short __b,
4711          vector unsigned short __c) {
4712   return vec_mladd(__a, __b, __c);
4713 }
4714
4715 static __inline__ vector signed short __ATTRS_o_ai
4716 vec_madd(vector unsigned short __a, vector signed short __b,
4717          vector signed short __c) {
4718   return vec_mladd(__a, __b, __c);
4719 }
4720
4721 static __inline__ vector unsigned short __ATTRS_o_ai
4722 vec_madd(vector unsigned short __a, vector unsigned short __b,
4723          vector unsigned short __c) {
4724   return vec_mladd(__a, __b, __c);
4725 }
4726
4727 static __inline__ vector float __ATTRS_o_ai vec_madd(vector float __a,
4728                                                      vector float __b,
4729                                                      vector float __c) {
4730 #ifdef __VSX__
4731   return __builtin_vsx_xvmaddasp(__a, __b, __c);
4732 #else
4733   return __builtin_altivec_vmaddfp(__a, __b, __c);
4734 #endif
4735 }
4736
4737 #ifdef __VSX__
4738 static __inline__ vector double __ATTRS_o_ai vec_madd(vector double __a,
4739                                                       vector double __b,
4740                                                       vector double __c) {
4741   return __builtin_vsx_xvmaddadp(__a, __b, __c);
4742 }
4743 #endif
4744
4745 /* vec_vmaddfp */
4746
4747 static __inline__ vector float __attribute__((__always_inline__))
4748 vec_vmaddfp(vector float __a, vector float __b, vector float __c) {
4749   return __builtin_altivec_vmaddfp(__a, __b, __c);
4750 }
4751
4752 /* vec_madds */
4753
4754 static __inline__ vector signed short __attribute__((__always_inline__))
4755 vec_madds(vector signed short __a, vector signed short __b,
4756           vector signed short __c) {
4757   return __builtin_altivec_vmhaddshs(__a, __b, __c);
4758 }
4759
4760 /* vec_vmhaddshs */
4761 static __inline__ vector signed short __attribute__((__always_inline__))
4762 vec_vmhaddshs(vector signed short __a, vector signed short __b,
4763               vector signed short __c) {
4764   return __builtin_altivec_vmhaddshs(__a, __b, __c);
4765 }
4766
4767 /* vec_msub */
4768
4769 #ifdef __VSX__
4770 static __inline__ vector float __ATTRS_o_ai vec_msub(vector float __a,
4771                                                      vector float __b,
4772                                                      vector float __c) {
4773   return __builtin_vsx_xvmsubasp(__a, __b, __c);
4774 }
4775
4776 static __inline__ vector double __ATTRS_o_ai vec_msub(vector double __a,
4777                                                       vector double __b,
4778                                                       vector double __c) {
4779   return __builtin_vsx_xvmsubadp(__a, __b, __c);
4780 }
4781 #endif
4782
4783 /* vec_max */
4784
4785 static __inline__ vector signed char __ATTRS_o_ai
4786 vec_max(vector signed char __a, vector signed char __b) {
4787   return __builtin_altivec_vmaxsb(__a, __b);
4788 }
4789
4790 static __inline__ vector signed char __ATTRS_o_ai
4791 vec_max(vector bool char __a, vector signed char __b) {
4792   return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
4793 }
4794
4795 static __inline__ vector signed char __ATTRS_o_ai
4796 vec_max(vector signed char __a, vector bool char __b) {
4797   return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
4798 }
4799
4800 static __inline__ vector unsigned char __ATTRS_o_ai
4801 vec_max(vector unsigned char __a, vector unsigned char __b) {
4802   return __builtin_altivec_vmaxub(__a, __b);
4803 }
4804
4805 static __inline__ vector unsigned char __ATTRS_o_ai
4806 vec_max(vector bool char __a, vector unsigned char __b) {
4807   return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
4808 }
4809
4810 static __inline__ vector unsigned char __ATTRS_o_ai
4811 vec_max(vector unsigned char __a, vector bool char __b) {
4812   return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
4813 }
4814
4815 static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
4816                                                     vector short __b) {
4817   return __builtin_altivec_vmaxsh(__a, __b);
4818 }
4819
4820 static __inline__ vector short __ATTRS_o_ai vec_max(vector bool short __a,
4821                                                     vector short __b) {
4822   return __builtin_altivec_vmaxsh((vector short)__a, __b);
4823 }
4824
4825 static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
4826                                                     vector bool short __b) {
4827   return __builtin_altivec_vmaxsh(__a, (vector short)__b);
4828 }
4829
4830 static __inline__ vector unsigned short __ATTRS_o_ai
4831 vec_max(vector unsigned short __a, vector unsigned short __b) {
4832   return __builtin_altivec_vmaxuh(__a, __b);
4833 }
4834
4835 static __inline__ vector unsigned short __ATTRS_o_ai
4836 vec_max(vector bool short __a, vector unsigned short __b) {
4837   return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
4838 }
4839
4840 static __inline__ vector unsigned short __ATTRS_o_ai
4841 vec_max(vector unsigned short __a, vector bool short __b) {
4842   return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
4843 }
4844
4845 static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
4846                                                   vector int __b) {
4847   return __builtin_altivec_vmaxsw(__a, __b);
4848 }
4849
4850 static __inline__ vector int __ATTRS_o_ai vec_max(vector bool int __a,
4851                                                   vector int __b) {
4852   return __builtin_altivec_vmaxsw((vector int)__a, __b);
4853 }
4854
4855 static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
4856                                                   vector bool int __b) {
4857   return __builtin_altivec_vmaxsw(__a, (vector int)__b);
4858 }
4859
4860 static __inline__ vector unsigned int __ATTRS_o_ai
4861 vec_max(vector unsigned int __a, vector unsigned int __b) {
4862   return __builtin_altivec_vmaxuw(__a, __b);
4863 }
4864
4865 static __inline__ vector unsigned int __ATTRS_o_ai
4866 vec_max(vector bool int __a, vector unsigned int __b) {
4867   return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
4868 }
4869
4870 static __inline__ vector unsigned int __ATTRS_o_ai
4871 vec_max(vector unsigned int __a, vector bool int __b) {
4872   return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
4873 }
4874
4875 #ifdef __POWER8_VECTOR__
4876 static __inline__ vector signed long long __ATTRS_o_ai
4877 vec_max(vector signed long long __a, vector signed long long __b) {
4878   return __builtin_altivec_vmaxsd(__a, __b);
4879 }
4880
4881 static __inline__ vector signed long long __ATTRS_o_ai
4882 vec_max(vector bool long long __a, vector signed long long __b) {
4883   return __builtin_altivec_vmaxsd((vector signed long long)__a, __b);
4884 }
4885
4886 static __inline__ vector signed long long __ATTRS_o_ai
4887 vec_max(vector signed long long __a, vector bool long long __b) {
4888   return __builtin_altivec_vmaxsd(__a, (vector signed long long)__b);
4889 }
4890
4891 static __inline__ vector unsigned long long __ATTRS_o_ai
4892 vec_max(vector unsigned long long __a, vector unsigned long long __b) {
4893   return __builtin_altivec_vmaxud(__a, __b);
4894 }
4895
4896 static __inline__ vector unsigned long long __ATTRS_o_ai
4897 vec_max(vector bool long long __a, vector unsigned long long __b) {
4898   return __builtin_altivec_vmaxud((vector unsigned long long)__a, __b);
4899 }
4900
4901 static __inline__ vector unsigned long long __ATTRS_o_ai
4902 vec_max(vector unsigned long long __a, vector bool long long __b) {
4903   return __builtin_altivec_vmaxud(__a, (vector unsigned long long)__b);
4904 }
4905 #endif
4906
4907 static __inline__ vector float __ATTRS_o_ai vec_max(vector float __a,
4908                                                     vector float __b) {
4909 #ifdef __VSX__
4910   return __builtin_vsx_xvmaxsp(__a, __b);
4911 #else
4912   return __builtin_altivec_vmaxfp(__a, __b);
4913 #endif
4914 }
4915
4916 #ifdef __VSX__
4917 static __inline__ vector double __ATTRS_o_ai vec_max(vector double __a,
4918                                                      vector double __b) {
4919   return __builtin_vsx_xvmaxdp(__a, __b);
4920 }
4921 #endif
4922
4923 /* vec_vmaxsb */
4924
4925 static __inline__ vector signed char __ATTRS_o_ai
4926 vec_vmaxsb(vector signed char __a, vector signed char __b) {
4927   return __builtin_altivec_vmaxsb(__a, __b);
4928 }
4929
4930 static __inline__ vector signed char __ATTRS_o_ai
4931 vec_vmaxsb(vector bool char __a, vector signed char __b) {
4932   return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
4933 }
4934
4935 static __inline__ vector signed char __ATTRS_o_ai
4936 vec_vmaxsb(vector signed char __a, vector bool char __b) {
4937   return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
4938 }
4939
4940 /* vec_vmaxub */
4941
4942 static __inline__ vector unsigned char __ATTRS_o_ai
4943 vec_vmaxub(vector unsigned char __a, vector unsigned char __b) {
4944   return __builtin_altivec_vmaxub(__a, __b);
4945 }
4946
4947 static __inline__ vector unsigned char __ATTRS_o_ai
4948 vec_vmaxub(vector bool char __a, vector unsigned char __b) {
4949   return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
4950 }
4951
4952 static __inline__ vector unsigned char __ATTRS_o_ai
4953 vec_vmaxub(vector unsigned char __a, vector bool char __b) {
4954   return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
4955 }
4956
4957 /* vec_vmaxsh */
4958
4959 static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
4960                                                        vector short __b) {
4961   return __builtin_altivec_vmaxsh(__a, __b);
4962 }
4963
4964 static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector bool short __a,
4965                                                        vector short __b) {
4966   return __builtin_altivec_vmaxsh((vector short)__a, __b);
4967 }
4968
4969 static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
4970                                                        vector bool short __b) {
4971   return __builtin_altivec_vmaxsh(__a, (vector short)__b);
4972 }
4973
4974 /* vec_vmaxuh */
4975
4976 static __inline__ vector unsigned short __ATTRS_o_ai
4977 vec_vmaxuh(vector unsigned short __a, vector unsigned short __b) {
4978   return __builtin_altivec_vmaxuh(__a, __b);
4979 }
4980
4981 static __inline__ vector unsigned short __ATTRS_o_ai
4982 vec_vmaxuh(vector bool short __a, vector unsigned short __b) {
4983   return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
4984 }
4985
4986 static __inline__ vector unsigned short __ATTRS_o_ai
4987 vec_vmaxuh(vector unsigned short __a, vector bool short __b) {
4988   return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
4989 }
4990
4991 /* vec_vmaxsw */
4992
4993 static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
4994                                                      vector int __b) {
4995   return __builtin_altivec_vmaxsw(__a, __b);
4996 }
4997
4998 static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector bool int __a,
4999                                                      vector int __b) {
5000   return __builtin_altivec_vmaxsw((vector int)__a, __b);
5001 }
5002
5003 static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
5004                                                      vector bool int __b) {
5005   return __builtin_altivec_vmaxsw(__a, (vector int)__b);
5006 }
5007
5008 /* vec_vmaxuw */
5009
5010 static __inline__ vector unsigned int __ATTRS_o_ai
5011 vec_vmaxuw(vector unsigned int __a, vector unsigned int __b) {
5012   return __builtin_altivec_vmaxuw(__a, __b);
5013 }
5014
5015 static __inline__ vector unsigned int __ATTRS_o_ai
5016 vec_vmaxuw(vector bool int __a, vector unsigned int __b) {
5017   return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
5018 }
5019
5020 static __inline__ vector unsigned int __ATTRS_o_ai
5021 vec_vmaxuw(vector unsigned int __a, vector bool int __b) {
5022   return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
5023 }
5024
5025 /* vec_vmaxfp */
5026
5027 static __inline__ vector float __attribute__((__always_inline__))
5028 vec_vmaxfp(vector float __a, vector float __b) {
5029 #ifdef __VSX__
5030   return __builtin_vsx_xvmaxsp(__a, __b);
5031 #else
5032   return __builtin_altivec_vmaxfp(__a, __b);
5033 #endif
5034 }
5035
5036 /* vec_mergeh */
5037
5038 static __inline__ vector signed char __ATTRS_o_ai
5039 vec_mergeh(vector signed char __a, vector signed char __b) {
5040   return vec_perm(__a, __b,
5041                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5042                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5043                                          0x06, 0x16, 0x07, 0x17));
5044 }
5045
5046 static __inline__ vector unsigned char __ATTRS_o_ai
5047 vec_mergeh(vector unsigned char __a, vector unsigned char __b) {
5048   return vec_perm(__a, __b,
5049                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5050                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5051                                          0x06, 0x16, 0x07, 0x17));
5052 }
5053
5054 static __inline__ vector bool char __ATTRS_o_ai
5055 vec_mergeh(vector bool char __a, vector bool char __b) {
5056   return vec_perm(__a, __b,
5057                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5058                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5059                                          0x06, 0x16, 0x07, 0x17));
5060 }
5061
5062 static __inline__ vector short __ATTRS_o_ai vec_mergeh(vector short __a,
5063                                                        vector short __b) {
5064   return vec_perm(__a, __b,
5065                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5066                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5067                                          0x06, 0x07, 0x16, 0x17));
5068 }
5069
5070 static __inline__ vector unsigned short __ATTRS_o_ai
5071 vec_mergeh(vector unsigned short __a, vector unsigned short __b) {
5072   return vec_perm(__a, __b,
5073                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5074                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5075                                          0x06, 0x07, 0x16, 0x17));
5076 }
5077
5078 static __inline__ vector bool short __ATTRS_o_ai
5079 vec_mergeh(vector bool short __a, vector bool short __b) {
5080   return vec_perm(__a, __b,
5081                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5082                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5083                                          0x06, 0x07, 0x16, 0x17));
5084 }
5085
5086 static __inline__ vector pixel __ATTRS_o_ai vec_mergeh(vector pixel __a,
5087                                                        vector pixel __b) {
5088   return vec_perm(__a, __b,
5089                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5090                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5091                                          0x06, 0x07, 0x16, 0x17));
5092 }
5093
5094 static __inline__ vector int __ATTRS_o_ai vec_mergeh(vector int __a,
5095                                                      vector int __b) {
5096   return vec_perm(__a, __b,
5097                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5098                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5099                                          0x14, 0x15, 0x16, 0x17));
5100 }
5101
5102 static __inline__ vector unsigned int __ATTRS_o_ai
5103 vec_mergeh(vector unsigned int __a, vector unsigned int __b) {
5104   return vec_perm(__a, __b,
5105                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5106                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5107                                          0x14, 0x15, 0x16, 0x17));
5108 }
5109
5110 static __inline__ vector bool int __ATTRS_o_ai vec_mergeh(vector bool int __a,
5111                                                           vector bool int __b) {
5112   return vec_perm(__a, __b,
5113                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5114                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5115                                          0x14, 0x15, 0x16, 0x17));
5116 }
5117
5118 static __inline__ vector float __ATTRS_o_ai vec_mergeh(vector float __a,
5119                                                        vector float __b) {
5120   return vec_perm(__a, __b,
5121                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5122                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5123                                          0x14, 0x15, 0x16, 0x17));
5124 }
5125
5126 #ifdef __VSX__
5127 static __inline__ vector signed long long __ATTRS_o_ai
5128 vec_mergeh(vector signed long long __a, vector signed long long __b) {
5129   return vec_perm(__a, __b,
5130                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5131                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5132                                          0x14, 0x15, 0x16, 0x17));
5133 }
5134
5135 static __inline__ vector signed long long __ATTRS_o_ai
5136 vec_mergeh(vector signed long long __a, vector bool long long __b) {
5137   return vec_perm(__a, (vector signed long long)__b,
5138                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5139                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5140                                          0x14, 0x15, 0x16, 0x17));
5141 }
5142
5143 static __inline__ vector signed long long __ATTRS_o_ai
5144 vec_mergeh(vector bool long long __a, vector signed long long __b) {
5145   return vec_perm((vector signed long long)__a, __b,
5146                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5147                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5148                                          0x14, 0x15, 0x16, 0x17));
5149 }
5150
5151 static __inline__ vector unsigned long long __ATTRS_o_ai
5152 vec_mergeh(vector unsigned long long __a, vector unsigned long long __b) {
5153   return vec_perm(__a, __b,
5154                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5155                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5156                                          0x14, 0x15, 0x16, 0x17));
5157 }
5158
5159 static __inline__ vector unsigned long long __ATTRS_o_ai
5160 vec_mergeh(vector unsigned long long __a, vector bool long long __b) {
5161   return vec_perm(__a, (vector unsigned long long)__b,
5162                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5163                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5164                                          0x14, 0x15, 0x16, 0x17));
5165 }
5166
5167 static __inline__ vector unsigned long long __ATTRS_o_ai
5168 vec_mergeh(vector bool long long __a, vector unsigned long long __b) {
5169   return vec_perm((vector unsigned long long)__a, __b,
5170                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5171                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5172                                          0x14, 0x15, 0x16, 0x17));
5173 }
5174
5175 static __inline__ vector bool long long __ATTRS_o_ai
5176 vec_mergeh(vector bool long long __a, vector bool long long __b) {
5177   return vec_perm(__a, __b,
5178                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5179                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5180                                          0x14, 0x15, 0x16, 0x17));
5181 }
5182
5183 static __inline__ vector double __ATTRS_o_ai vec_mergeh(vector double __a,
5184                                                         vector double __b) {
5185   return vec_perm(__a, __b,
5186                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5187                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5188                                          0x14, 0x15, 0x16, 0x17));
5189 }
5190 static __inline__ vector double __ATTRS_o_ai
5191 vec_mergeh(vector double __a, vector bool long long __b) {
5192   return vec_perm(__a, (vector double)__b,
5193                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5194                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5195                                          0x14, 0x15, 0x16, 0x17));
5196 }
5197 static __inline__ vector double __ATTRS_o_ai
5198 vec_mergeh(vector bool long long __a, vector double __b) {
5199   return vec_perm((vector double)__a, __b,
5200                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
5201                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
5202                                          0x14, 0x15, 0x16, 0x17));
5203 }
5204 #endif
5205
5206 /* vec_vmrghb */
5207
5208 #define __builtin_altivec_vmrghb vec_vmrghb
5209
5210 static __inline__ vector signed char __ATTRS_o_ai
5211 vec_vmrghb(vector signed char __a, vector signed char __b) {
5212   return vec_perm(__a, __b,
5213                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5214                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5215                                          0x06, 0x16, 0x07, 0x17));
5216 }
5217
5218 static __inline__ vector unsigned char __ATTRS_o_ai
5219 vec_vmrghb(vector unsigned char __a, vector unsigned char __b) {
5220   return vec_perm(__a, __b,
5221                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5222                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5223                                          0x06, 0x16, 0x07, 0x17));
5224 }
5225
5226 static __inline__ vector bool char __ATTRS_o_ai
5227 vec_vmrghb(vector bool char __a, vector bool char __b) {
5228   return vec_perm(__a, __b,
5229                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
5230                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
5231                                          0x06, 0x16, 0x07, 0x17));
5232 }
5233
5234 /* vec_vmrghh */
5235
5236 #define __builtin_altivec_vmrghh vec_vmrghh
5237
5238 static __inline__ vector short __ATTRS_o_ai vec_vmrghh(vector short __a,
5239                                                        vector short __b) {
5240   return vec_perm(__a, __b,
5241                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5242                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5243                                          0x06, 0x07, 0x16, 0x17));
5244 }
5245
5246 static __inline__ vector unsigned short __ATTRS_o_ai
5247 vec_vmrghh(vector unsigned short __a, vector unsigned short __b) {
5248   return vec_perm(__a, __b,
5249                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5250                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5251                                          0x06, 0x07, 0x16, 0x17));
5252 }
5253
5254 static __inline__ vector bool short __ATTRS_o_ai
5255 vec_vmrghh(vector bool short __a, vector bool short __b) {
5256   return vec_perm(__a, __b,
5257                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5258                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5259                                          0x06, 0x07, 0x16, 0x17));
5260 }
5261
5262 static __inline__ vector pixel __ATTRS_o_ai vec_vmrghh(vector pixel __a,
5263                                                        vector pixel __b) {
5264   return vec_perm(__a, __b,
5265                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
5266                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
5267                                          0x06, 0x07, 0x16, 0x17));
5268 }
5269
5270 /* vec_vmrghw */
5271
5272 #define __builtin_altivec_vmrghw vec_vmrghw
5273
5274 static __inline__ vector int __ATTRS_o_ai vec_vmrghw(vector int __a,
5275                                                      vector int __b) {
5276   return vec_perm(__a, __b,
5277                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5278                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5279                                          0x14, 0x15, 0x16, 0x17));
5280 }
5281
5282 static __inline__ vector unsigned int __ATTRS_o_ai
5283 vec_vmrghw(vector unsigned int __a, vector unsigned int __b) {
5284   return vec_perm(__a, __b,
5285                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5286                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5287                                          0x14, 0x15, 0x16, 0x17));
5288 }
5289
5290 static __inline__ vector bool int __ATTRS_o_ai vec_vmrghw(vector bool int __a,
5291                                                           vector bool int __b) {
5292   return vec_perm(__a, __b,
5293                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5294                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5295                                          0x14, 0x15, 0x16, 0x17));
5296 }
5297
5298 static __inline__ vector float __ATTRS_o_ai vec_vmrghw(vector float __a,
5299                                                        vector float __b) {
5300   return vec_perm(__a, __b,
5301                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5302                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
5303                                          0x14, 0x15, 0x16, 0x17));
5304 }
5305
5306 /* vec_mergel */
5307
5308 static __inline__ vector signed char __ATTRS_o_ai
5309 vec_mergel(vector signed char __a, vector signed char __b) {
5310   return vec_perm(__a, __b,
5311                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5312                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5313                                          0x0E, 0x1E, 0x0F, 0x1F));
5314 }
5315
5316 static __inline__ vector unsigned char __ATTRS_o_ai
5317 vec_mergel(vector unsigned char __a, vector unsigned char __b) {
5318   return vec_perm(__a, __b,
5319                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5320                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5321                                          0x0E, 0x1E, 0x0F, 0x1F));
5322 }
5323
5324 static __inline__ vector bool char __ATTRS_o_ai
5325 vec_mergel(vector bool char __a, vector bool char __b) {
5326   return vec_perm(__a, __b,
5327                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5328                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5329                                          0x0E, 0x1E, 0x0F, 0x1F));
5330 }
5331
5332 static __inline__ vector short __ATTRS_o_ai vec_mergel(vector short __a,
5333                                                        vector short __b) {
5334   return vec_perm(__a, __b,
5335                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5336                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5337                                          0x0E, 0x0F, 0x1E, 0x1F));
5338 }
5339
5340 static __inline__ vector unsigned short __ATTRS_o_ai
5341 vec_mergel(vector unsigned short __a, vector unsigned short __b) {
5342   return vec_perm(__a, __b,
5343                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5344                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5345                                          0x0E, 0x0F, 0x1E, 0x1F));
5346 }
5347
5348 static __inline__ vector bool short __ATTRS_o_ai
5349 vec_mergel(vector bool short __a, vector bool short __b) {
5350   return vec_perm(__a, __b,
5351                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5352                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5353                                          0x0E, 0x0F, 0x1E, 0x1F));
5354 }
5355
5356 static __inline__ vector pixel __ATTRS_o_ai vec_mergel(vector pixel __a,
5357                                                        vector pixel __b) {
5358   return vec_perm(__a, __b,
5359                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5360                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5361                                          0x0E, 0x0F, 0x1E, 0x1F));
5362 }
5363
5364 static __inline__ vector int __ATTRS_o_ai vec_mergel(vector int __a,
5365                                                      vector int __b) {
5366   return vec_perm(__a, __b,
5367                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5368                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5369                                          0x1C, 0x1D, 0x1E, 0x1F));
5370 }
5371
5372 static __inline__ vector unsigned int __ATTRS_o_ai
5373 vec_mergel(vector unsigned int __a, vector unsigned int __b) {
5374   return vec_perm(__a, __b,
5375                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5376                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5377                                          0x1C, 0x1D, 0x1E, 0x1F));
5378 }
5379
5380 static __inline__ vector bool int __ATTRS_o_ai vec_mergel(vector bool int __a,
5381                                                           vector bool int __b) {
5382   return vec_perm(__a, __b,
5383                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5384                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5385                                          0x1C, 0x1D, 0x1E, 0x1F));
5386 }
5387
5388 static __inline__ vector float __ATTRS_o_ai vec_mergel(vector float __a,
5389                                                        vector float __b) {
5390   return vec_perm(__a, __b,
5391                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5392                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5393                                          0x1C, 0x1D, 0x1E, 0x1F));
5394 }
5395
5396 #ifdef __VSX__
5397 static __inline__ vector signed long long __ATTRS_o_ai
5398 vec_mergel(vector signed long long __a, vector signed long long __b) {
5399   return vec_perm(__a, __b,
5400                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5401                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5402                                          0x1C, 0x1D, 0x1E, 0x1F));
5403 }
5404 static __inline__ vector signed long long __ATTRS_o_ai
5405 vec_mergel(vector signed long long __a, vector bool long long __b) {
5406   return vec_perm(__a, (vector signed long long)__b,
5407                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5408                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5409                                          0x1C, 0x1D, 0x1E, 0x1F));
5410 }
5411 static __inline__ vector signed long long __ATTRS_o_ai
5412 vec_mergel(vector bool long long __a, vector signed long long __b) {
5413   return vec_perm((vector signed long long)__a, __b,
5414                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5415                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5416                                          0x1C, 0x1D, 0x1E, 0x1F));
5417 }
5418 static __inline__ vector unsigned long long __ATTRS_o_ai
5419 vec_mergel(vector unsigned long long __a, vector unsigned long long __b) {
5420   return vec_perm(__a, __b,
5421                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5422                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5423                                          0x1C, 0x1D, 0x1E, 0x1F));
5424 }
5425 static __inline__ vector unsigned long long __ATTRS_o_ai
5426 vec_mergel(vector unsigned long long __a, vector bool long long __b) {
5427   return vec_perm(__a, (vector unsigned long long)__b,
5428                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5429                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5430                                          0x1C, 0x1D, 0x1E, 0x1F));
5431 }
5432 static __inline__ vector unsigned long long __ATTRS_o_ai
5433 vec_mergel(vector bool long long __a, vector unsigned long long __b) {
5434   return vec_perm((vector unsigned long long)__a, __b,
5435                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5436                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5437                                          0x1C, 0x1D, 0x1E, 0x1F));
5438 }
5439 static __inline__ vector bool long long __ATTRS_o_ai
5440 vec_mergel(vector bool long long __a, vector bool long long __b) {
5441   return vec_perm(__a, __b,
5442                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5443                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5444                                          0x1C, 0x1D, 0x1E, 0x1F));
5445 }
5446 static __inline__ vector double __ATTRS_o_ai vec_mergel(vector double __a,
5447                                                         vector double __b) {
5448   return vec_perm(__a, __b,
5449                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5450                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5451                                          0x1C, 0x1D, 0x1E, 0x1F));
5452 }
5453 static __inline__ vector double __ATTRS_o_ai
5454 vec_mergel(vector double __a, vector bool long long __b) {
5455   return vec_perm(__a, (vector double)__b,
5456                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5457                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5458                                          0x1C, 0x1D, 0x1E, 0x1F));
5459 }
5460 static __inline__ vector double __ATTRS_o_ai
5461 vec_mergel(vector bool long long __a, vector double __b) {
5462   return vec_perm((vector double)__a, __b,
5463                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
5464                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
5465                                          0x1C, 0x1D, 0x1E, 0x1F));
5466 }
5467 #endif
5468
5469 /* vec_vmrglb */
5470
5471 #define __builtin_altivec_vmrglb vec_vmrglb
5472
5473 static __inline__ vector signed char __ATTRS_o_ai
5474 vec_vmrglb(vector signed char __a, vector signed char __b) {
5475   return vec_perm(__a, __b,
5476                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5477                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5478                                          0x0E, 0x1E, 0x0F, 0x1F));
5479 }
5480
5481 static __inline__ vector unsigned char __ATTRS_o_ai
5482 vec_vmrglb(vector unsigned char __a, vector unsigned char __b) {
5483   return vec_perm(__a, __b,
5484                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5485                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5486                                          0x0E, 0x1E, 0x0F, 0x1F));
5487 }
5488
5489 static __inline__ vector bool char __ATTRS_o_ai
5490 vec_vmrglb(vector bool char __a, vector bool char __b) {
5491   return vec_perm(__a, __b,
5492                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
5493                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
5494                                          0x0E, 0x1E, 0x0F, 0x1F));
5495 }
5496
5497 /* vec_vmrglh */
5498
5499 #define __builtin_altivec_vmrglh vec_vmrglh
5500
5501 static __inline__ vector short __ATTRS_o_ai vec_vmrglh(vector short __a,
5502                                                        vector short __b) {
5503   return vec_perm(__a, __b,
5504                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5505                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5506                                          0x0E, 0x0F, 0x1E, 0x1F));
5507 }
5508
5509 static __inline__ vector unsigned short __ATTRS_o_ai
5510 vec_vmrglh(vector unsigned short __a, vector unsigned short __b) {
5511   return vec_perm(__a, __b,
5512                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5513                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5514                                          0x0E, 0x0F, 0x1E, 0x1F));
5515 }
5516
5517 static __inline__ vector bool short __ATTRS_o_ai
5518 vec_vmrglh(vector bool short __a, vector bool short __b) {
5519   return vec_perm(__a, __b,
5520                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5521                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5522                                          0x0E, 0x0F, 0x1E, 0x1F));
5523 }
5524
5525 static __inline__ vector pixel __ATTRS_o_ai vec_vmrglh(vector pixel __a,
5526                                                        vector pixel __b) {
5527   return vec_perm(__a, __b,
5528                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
5529                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
5530                                          0x0E, 0x0F, 0x1E, 0x1F));
5531 }
5532
5533 /* vec_vmrglw */
5534
5535 #define __builtin_altivec_vmrglw vec_vmrglw
5536
5537 static __inline__ vector int __ATTRS_o_ai vec_vmrglw(vector int __a,
5538                                                      vector int __b) {
5539   return vec_perm(__a, __b,
5540                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5541                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5542                                          0x1C, 0x1D, 0x1E, 0x1F));
5543 }
5544
5545 static __inline__ vector unsigned int __ATTRS_o_ai
5546 vec_vmrglw(vector unsigned int __a, vector unsigned int __b) {
5547   return vec_perm(__a, __b,
5548                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5549                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5550                                          0x1C, 0x1D, 0x1E, 0x1F));
5551 }
5552
5553 static __inline__ vector bool int __ATTRS_o_ai vec_vmrglw(vector bool int __a,
5554                                                           vector bool int __b) {
5555   return vec_perm(__a, __b,
5556                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5557                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5558                                          0x1C, 0x1D, 0x1E, 0x1F));
5559 }
5560
5561 static __inline__ vector float __ATTRS_o_ai vec_vmrglw(vector float __a,
5562                                                        vector float __b) {
5563   return vec_perm(__a, __b,
5564                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5565                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5566                                          0x1C, 0x1D, 0x1E, 0x1F));
5567 }
5568
5569 #ifdef __POWER8_VECTOR__
5570 /* vec_mergee */
5571
5572 static __inline__ vector bool int __ATTRS_o_ai vec_mergee(vector bool int __a,
5573                                                           vector bool int __b) {
5574   return vec_perm(__a, __b,
5575                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5576                                          0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5577                                          0x18, 0x19, 0x1A, 0x1B));
5578 }
5579
5580 static __inline__ vector signed int __ATTRS_o_ai
5581 vec_mergee(vector signed int __a, vector signed int __b) {
5582   return vec_perm(__a, __b,
5583                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5584                                          0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5585                                          0x18, 0x19, 0x1A, 0x1B));
5586 }
5587
5588 static __inline__ vector unsigned int __ATTRS_o_ai
5589 vec_mergee(vector unsigned int __a, vector unsigned int __b) {
5590   return vec_perm(__a, __b,
5591                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5592                                          0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5593                                          0x18, 0x19, 0x1A, 0x1B));
5594 }
5595
5596 static __inline__ vector bool long long __ATTRS_o_ai
5597 vec_mergee(vector bool long long __a, vector bool long long __b) {
5598   return vec_mergeh(__a, __b);
5599 }
5600
5601 static __inline__ vector signed long long __ATTRS_o_ai
5602 vec_mergee(vector signed long long __a, vector signed long long __b) {
5603   return vec_mergeh(__a, __b);
5604 }
5605
5606 static __inline__ vector unsigned long long __ATTRS_o_ai
5607 vec_mergee(vector unsigned long long __a, vector unsigned long long __b) {
5608   return vec_mergeh(__a, __b);
5609 }
5610
5611 static __inline__ vector float __ATTRS_o_ai
5612 vec_mergee(vector float __a, vector float __b) {
5613   return vec_perm(__a, __b,
5614                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5615                                          0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5616                                          0x18, 0x19, 0x1A, 0x1B));
5617 }
5618
5619 static __inline__ vector double __ATTRS_o_ai
5620 vec_mergee(vector double __a, vector double __b) {
5621   return vec_mergeh(__a, __b);
5622 }
5623
5624 /* vec_mergeo */
5625
5626 static __inline__ vector bool int __ATTRS_o_ai vec_mergeo(vector bool int __a,
5627                                                           vector bool int __b) {
5628   return vec_perm(__a, __b,
5629                   (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5630                                          0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5631                                          0x1C, 0x1D, 0x1E, 0x1F));
5632 }
5633
5634 static __inline__ vector signed int __ATTRS_o_ai
5635 vec_mergeo(vector signed int __a, vector signed int __b) {
5636   return vec_perm(__a, __b,
5637                   (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5638                                          0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5639                                          0x1C, 0x1D, 0x1E, 0x1F));
5640 }
5641
5642 static __inline__ vector unsigned int __ATTRS_o_ai
5643 vec_mergeo(vector unsigned int __a, vector unsigned int __b) {
5644   return vec_perm(__a, __b,
5645                   (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5646                                          0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5647                                          0x1C, 0x1D, 0x1E, 0x1F));
5648 }
5649
5650 static __inline__ vector bool long long __ATTRS_o_ai
5651 vec_mergeo(vector bool long long __a, vector bool long long __b) {
5652   return vec_mergel(__a, __b);
5653 }
5654
5655 static __inline__ vector signed long long __ATTRS_o_ai
5656 vec_mergeo(vector signed long long __a, vector signed long long __b) {
5657   return vec_mergel(__a, __b);
5658 }
5659
5660 static __inline__ vector unsigned long long __ATTRS_o_ai
5661 vec_mergeo(vector unsigned long long __a, vector unsigned long long __b) {
5662   return vec_mergel(__a, __b);
5663 }
5664
5665 static __inline__ vector float __ATTRS_o_ai
5666 vec_mergeo(vector float __a, vector float __b) {
5667   return vec_perm(__a, __b,
5668                   (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5669                                          0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5670                                          0x1C, 0x1D, 0x1E, 0x1F));
5671 }
5672
5673 static __inline__ vector double __ATTRS_o_ai
5674 vec_mergeo(vector double __a, vector double __b) {
5675   return vec_mergel(__a, __b);
5676 }
5677
5678 #endif
5679
5680 /* vec_mfvscr */
5681
5682 static __inline__ vector unsigned short __attribute__((__always_inline__))
5683 vec_mfvscr(void) {
5684   return __builtin_altivec_mfvscr();
5685 }
5686
5687 /* vec_min */
5688
5689 static __inline__ vector signed char __ATTRS_o_ai
5690 vec_min(vector signed char __a, vector signed char __b) {
5691   return __builtin_altivec_vminsb(__a, __b);
5692 }
5693
5694 static __inline__ vector signed char __ATTRS_o_ai
5695 vec_min(vector bool char __a, vector signed char __b) {
5696   return __builtin_altivec_vminsb((vector signed char)__a, __b);
5697 }
5698
5699 static __inline__ vector signed char __ATTRS_o_ai
5700 vec_min(vector signed char __a, vector bool char __b) {
5701   return __builtin_altivec_vminsb(__a, (vector signed char)__b);
5702 }
5703
5704 static __inline__ vector unsigned char __ATTRS_o_ai
5705 vec_min(vector unsigned char __a, vector unsigned char __b) {
5706   return __builtin_altivec_vminub(__a, __b);
5707 }
5708
5709 static __inline__ vector unsigned char __ATTRS_o_ai
5710 vec_min(vector bool char __a, vector unsigned char __b) {
5711   return __builtin_altivec_vminub((vector unsigned char)__a, __b);
5712 }
5713
5714 static __inline__ vector unsigned char __ATTRS_o_ai
5715 vec_min(vector unsigned char __a, vector bool char __b) {
5716   return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
5717 }
5718
5719 static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
5720                                                     vector short __b) {
5721   return __builtin_altivec_vminsh(__a, __b);
5722 }
5723
5724 static __inline__ vector short __ATTRS_o_ai vec_min(vector bool short __a,
5725                                                     vector short __b) {
5726   return __builtin_altivec_vminsh((vector short)__a, __b);
5727 }
5728
5729 static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
5730                                                     vector bool short __b) {
5731   return __builtin_altivec_vminsh(__a, (vector short)__b);
5732 }
5733
5734 static __inline__ vector unsigned short __ATTRS_o_ai
5735 vec_min(vector unsigned short __a, vector unsigned short __b) {
5736   return __builtin_altivec_vminuh(__a, __b);
5737 }
5738
5739 static __inline__ vector unsigned short __ATTRS_o_ai
5740 vec_min(vector bool short __a, vector unsigned short __b) {
5741   return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
5742 }
5743
5744 static __inline__ vector unsigned short __ATTRS_o_ai
5745 vec_min(vector unsigned short __a, vector bool short __b) {
5746   return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
5747 }
5748
5749 static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
5750                                                   vector int __b) {
5751   return __builtin_altivec_vminsw(__a, __b);
5752 }
5753
5754 static __inline__ vector int __ATTRS_o_ai vec_min(vector bool int __a,
5755                                                   vector int __b) {
5756   return __builtin_altivec_vminsw((vector int)__a, __b);
5757 }
5758
5759 static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
5760                                                   vector bool int __b) {
5761   return __builtin_altivec_vminsw(__a, (vector int)__b);
5762 }
5763
5764 static __inline__ vector unsigned int __ATTRS_o_ai
5765 vec_min(vector unsigned int __a, vector unsigned int __b) {
5766   return __builtin_altivec_vminuw(__a, __b);
5767 }
5768
5769 static __inline__ vector unsigned int __ATTRS_o_ai
5770 vec_min(vector bool int __a, vector unsigned int __b) {
5771   return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
5772 }
5773
5774 static __inline__ vector unsigned int __ATTRS_o_ai
5775 vec_min(vector unsigned int __a, vector bool int __b) {
5776   return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
5777 }
5778
5779 #ifdef __POWER8_VECTOR__
5780 static __inline__ vector signed long long __ATTRS_o_ai
5781 vec_min(vector signed long long __a, vector signed long long __b) {
5782   return __builtin_altivec_vminsd(__a, __b);
5783 }
5784
5785 static __inline__ vector signed long long __ATTRS_o_ai
5786 vec_min(vector bool long long __a, vector signed long long __b) {
5787   return __builtin_altivec_vminsd((vector signed long long)__a, __b);
5788 }
5789
5790 static __inline__ vector signed long long __ATTRS_o_ai
5791 vec_min(vector signed long long __a, vector bool long long __b) {
5792   return __builtin_altivec_vminsd(__a, (vector signed long long)__b);
5793 }
5794
5795 static __inline__ vector unsigned long long __ATTRS_o_ai
5796 vec_min(vector unsigned long long __a, vector unsigned long long __b) {
5797   return __builtin_altivec_vminud(__a, __b);
5798 }
5799
5800 static __inline__ vector unsigned long long __ATTRS_o_ai
5801 vec_min(vector bool long long __a, vector unsigned long long __b) {
5802   return __builtin_altivec_vminud((vector unsigned long long)__a, __b);
5803 }
5804
5805 static __inline__ vector unsigned long long __ATTRS_o_ai
5806 vec_min(vector unsigned long long __a, vector bool long long __b) {
5807   return __builtin_altivec_vminud(__a, (vector unsigned long long)__b);
5808 }
5809 #endif
5810
5811 static __inline__ vector float __ATTRS_o_ai vec_min(vector float __a,
5812                                                     vector float __b) {
5813 #ifdef __VSX__
5814   return __builtin_vsx_xvminsp(__a, __b);
5815 #else
5816   return __builtin_altivec_vminfp(__a, __b);
5817 #endif
5818 }
5819
5820 #ifdef __VSX__
5821 static __inline__ vector double __ATTRS_o_ai vec_min(vector double __a,
5822                                                      vector double __b) {
5823   return __builtin_vsx_xvmindp(__a, __b);
5824 }
5825 #endif
5826
5827 /* vec_vminsb */
5828
5829 static __inline__ vector signed char __ATTRS_o_ai
5830 vec_vminsb(vector signed char __a, vector signed char __b) {
5831   return __builtin_altivec_vminsb(__a, __b);
5832 }
5833
5834 static __inline__ vector signed char __ATTRS_o_ai
5835 vec_vminsb(vector bool char __a, vector signed char __b) {
5836   return __builtin_altivec_vminsb((vector signed char)__a, __b);
5837 }
5838
5839 static __inline__ vector signed char __ATTRS_o_ai
5840 vec_vminsb(vector signed char __a, vector bool char __b) {
5841   return __builtin_altivec_vminsb(__a, (vector signed char)__b);
5842 }
5843
5844 /* vec_vminub */
5845
5846 static __inline__ vector unsigned char __ATTRS_o_ai
5847 vec_vminub(vector unsigned char __a, vector unsigned char __b) {
5848   return __builtin_altivec_vminub(__a, __b);
5849 }
5850
5851 static __inline__ vector unsigned char __ATTRS_o_ai
5852 vec_vminub(vector bool char __a, vector unsigned char __b) {
5853   return __builtin_altivec_vminub((vector unsigned char)__a, __b);
5854 }
5855
5856 static __inline__ vector unsigned char __ATTRS_o_ai
5857 vec_vminub(vector unsigned char __a, vector bool char __b) {
5858   return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
5859 }
5860
5861 /* vec_vminsh */
5862
5863 static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
5864                                                        vector short __b) {
5865   return __builtin_altivec_vminsh(__a, __b);
5866 }
5867
5868 static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector bool short __a,
5869                                                        vector short __b) {
5870   return __builtin_altivec_vminsh((vector short)__a, __b);
5871 }
5872
5873 static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
5874                                                        vector bool short __b) {
5875   return __builtin_altivec_vminsh(__a, (vector short)__b);
5876 }
5877
5878 /* vec_vminuh */
5879
5880 static __inline__ vector unsigned short __ATTRS_o_ai
5881 vec_vminuh(vector unsigned short __a, vector unsigned short __b) {
5882   return __builtin_altivec_vminuh(__a, __b);
5883 }
5884
5885 static __inline__ vector unsigned short __ATTRS_o_ai
5886 vec_vminuh(vector bool short __a, vector unsigned short __b) {
5887   return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
5888 }
5889
5890 static __inline__ vector unsigned short __ATTRS_o_ai
5891 vec_vminuh(vector unsigned short __a, vector bool short __b) {
5892   return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
5893 }
5894
5895 /* vec_vminsw */
5896
5897 static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
5898                                                      vector int __b) {
5899   return __builtin_altivec_vminsw(__a, __b);
5900 }
5901
5902 static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector bool int __a,
5903                                                      vector int __b) {
5904   return __builtin_altivec_vminsw((vector int)__a, __b);
5905 }
5906
5907 static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
5908                                                      vector bool int __b) {
5909   return __builtin_altivec_vminsw(__a, (vector int)__b);
5910 }
5911
5912 /* vec_vminuw */
5913
5914 static __inline__ vector unsigned int __ATTRS_o_ai
5915 vec_vminuw(vector unsigned int __a, vector unsigned int __b) {
5916   return __builtin_altivec_vminuw(__a, __b);
5917 }
5918
5919 static __inline__ vector unsigned int __ATTRS_o_ai
5920 vec_vminuw(vector bool int __a, vector unsigned int __b) {
5921   return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
5922 }
5923
5924 static __inline__ vector unsigned int __ATTRS_o_ai
5925 vec_vminuw(vector unsigned int __a, vector bool int __b) {
5926   return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
5927 }
5928
5929 /* vec_vminfp */
5930
5931 static __inline__ vector float __attribute__((__always_inline__))
5932 vec_vminfp(vector float __a, vector float __b) {
5933 #ifdef __VSX__
5934   return __builtin_vsx_xvminsp(__a, __b);
5935 #else
5936   return __builtin_altivec_vminfp(__a, __b);
5937 #endif
5938 }
5939
5940 /* vec_mladd */
5941
5942 #define __builtin_altivec_vmladduhm vec_mladd
5943
5944 static __inline__ vector short __ATTRS_o_ai vec_mladd(vector short __a,
5945                                                       vector short __b,
5946                                                       vector short __c) {
5947   return __a * __b + __c;
5948 }
5949
5950 static __inline__ vector short __ATTRS_o_ai vec_mladd(
5951     vector short __a, vector unsigned short __b, vector unsigned short __c) {
5952   return __a * (vector short)__b + (vector short)__c;
5953 }
5954
5955 static __inline__ vector short __ATTRS_o_ai vec_mladd(vector unsigned short __a,
5956                                                       vector short __b,
5957                                                       vector short __c) {
5958   return (vector short)__a * __b + __c;
5959 }
5960
5961 static __inline__ vector unsigned short __ATTRS_o_ai
5962 vec_mladd(vector unsigned short __a, vector unsigned short __b,
5963           vector unsigned short __c) {
5964   return __a * __b + __c;
5965 }
5966
5967 /* vec_vmladduhm */
5968
5969 static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(vector short __a,
5970                                                           vector short __b,
5971                                                           vector short __c) {
5972   return __a * __b + __c;
5973 }
5974
5975 static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(
5976     vector short __a, vector unsigned short __b, vector unsigned short __c) {
5977   return __a * (vector short)__b + (vector short)__c;
5978 }
5979
5980 static __inline__ vector short __ATTRS_o_ai
5981 vec_vmladduhm(vector unsigned short __a, vector short __b, vector short __c) {
5982   return (vector short)__a * __b + __c;
5983 }
5984
5985 static __inline__ vector unsigned short __ATTRS_o_ai
5986 vec_vmladduhm(vector unsigned short __a, vector unsigned short __b,
5987               vector unsigned short __c) {
5988   return __a * __b + __c;
5989 }
5990
5991 /* vec_mradds */
5992
5993 static __inline__ vector short __attribute__((__always_inline__))
5994 vec_mradds(vector short __a, vector short __b, vector short __c) {
5995   return __builtin_altivec_vmhraddshs(__a, __b, __c);
5996 }
5997
5998 /* vec_vmhraddshs */
5999
6000 static __inline__ vector short __attribute__((__always_inline__))
6001 vec_vmhraddshs(vector short __a, vector short __b, vector short __c) {
6002   return __builtin_altivec_vmhraddshs(__a, __b, __c);
6003 }
6004
6005 /* vec_msum */
6006
6007 static __inline__ vector int __ATTRS_o_ai vec_msum(vector signed char __a,
6008                                                    vector unsigned char __b,
6009                                                    vector int __c) {
6010   return __builtin_altivec_vmsummbm(__a, __b, __c);
6011 }
6012
6013 static __inline__ vector unsigned int __ATTRS_o_ai
6014 vec_msum(vector unsigned char __a, vector unsigned char __b,
6015          vector unsigned int __c) {
6016   return __builtin_altivec_vmsumubm(__a, __b, __c);
6017 }
6018
6019 static __inline__ vector int __ATTRS_o_ai vec_msum(vector short __a,
6020                                                    vector short __b,
6021                                                    vector int __c) {
6022   return __builtin_altivec_vmsumshm(__a, __b, __c);
6023 }
6024
6025 static __inline__ vector unsigned int __ATTRS_o_ai
6026 vec_msum(vector unsigned short __a, vector unsigned short __b,
6027          vector unsigned int __c) {
6028   return __builtin_altivec_vmsumuhm(__a, __b, __c);
6029 }
6030
6031 /* vec_msumc */
6032
6033 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
6034 static __inline__ vector unsigned __int128 __ATTRS_o_ai
6035 vec_msumc(vector unsigned long long __a, vector unsigned long long __b,
6036           vector unsigned __int128 __c) {
6037   return __builtin_altivec_vmsumcud(__a, __b, __c);
6038 }
6039 #endif
6040
6041 /* vec_vmsummbm */
6042
6043 static __inline__ vector int __attribute__((__always_inline__))
6044 vec_vmsummbm(vector signed char __a, vector unsigned char __b, vector int __c) {
6045   return __builtin_altivec_vmsummbm(__a, __b, __c);
6046 }
6047
6048 /* vec_vmsumubm */
6049
6050 static __inline__ vector unsigned int __attribute__((__always_inline__))
6051 vec_vmsumubm(vector unsigned char __a, vector unsigned char __b,
6052              vector unsigned int __c) {
6053   return __builtin_altivec_vmsumubm(__a, __b, __c);
6054 }
6055
6056 /* vec_vmsumshm */
6057
6058 static __inline__ vector int __attribute__((__always_inline__))
6059 vec_vmsumshm(vector short __a, vector short __b, vector int __c) {
6060   return __builtin_altivec_vmsumshm(__a, __b, __c);
6061 }
6062
6063 /* vec_vmsumuhm */
6064
6065 static __inline__ vector unsigned int __attribute__((__always_inline__))
6066 vec_vmsumuhm(vector unsigned short __a, vector unsigned short __b,
6067              vector unsigned int __c) {
6068   return __builtin_altivec_vmsumuhm(__a, __b, __c);
6069 }
6070
6071 /* vec_msums */
6072
6073 static __inline__ vector int __ATTRS_o_ai vec_msums(vector short __a,
6074                                                     vector short __b,
6075                                                     vector int __c) {
6076   return __builtin_altivec_vmsumshs(__a, __b, __c);
6077 }
6078
6079 static __inline__ vector unsigned int __ATTRS_o_ai
6080 vec_msums(vector unsigned short __a, vector unsigned short __b,
6081           vector unsigned int __c) {
6082   return __builtin_altivec_vmsumuhs(__a, __b, __c);
6083 }
6084
6085 /* vec_vmsumshs */
6086
6087 static __inline__ vector int __attribute__((__always_inline__))
6088 vec_vmsumshs(vector short __a, vector short __b, vector int __c) {
6089   return __builtin_altivec_vmsumshs(__a, __b, __c);
6090 }
6091
6092 /* vec_vmsumuhs */
6093
6094 static __inline__ vector unsigned int __attribute__((__always_inline__))
6095 vec_vmsumuhs(vector unsigned short __a, vector unsigned short __b,
6096              vector unsigned int __c) {
6097   return __builtin_altivec_vmsumuhs(__a, __b, __c);
6098 }
6099
6100 /* vec_mtvscr */
6101
6102 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector signed char __a) {
6103   __builtin_altivec_mtvscr((vector int)__a);
6104 }
6105
6106 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned char __a) {
6107   __builtin_altivec_mtvscr((vector int)__a);
6108 }
6109
6110 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool char __a) {
6111   __builtin_altivec_mtvscr((vector int)__a);
6112 }
6113
6114 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector short __a) {
6115   __builtin_altivec_mtvscr((vector int)__a);
6116 }
6117
6118 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned short __a) {
6119   __builtin_altivec_mtvscr((vector int)__a);
6120 }
6121
6122 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool short __a) {
6123   __builtin_altivec_mtvscr((vector int)__a);
6124 }
6125
6126 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector pixel __a) {
6127   __builtin_altivec_mtvscr((vector int)__a);
6128 }
6129
6130 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector int __a) {
6131   __builtin_altivec_mtvscr((vector int)__a);
6132 }
6133
6134 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned int __a) {
6135   __builtin_altivec_mtvscr((vector int)__a);
6136 }
6137
6138 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool int __a) {
6139   __builtin_altivec_mtvscr((vector int)__a);
6140 }
6141
6142 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector float __a) {
6143   __builtin_altivec_mtvscr((vector int)__a);
6144 }
6145
6146 /* vec_mul */
6147
6148 /* Integer vector multiplication will involve multiplication of the odd/even
6149    elements separately, then truncating the results and moving to the
6150    result vector.
6151 */
6152 static __inline__ vector signed char __ATTRS_o_ai
6153 vec_mul(vector signed char __a, vector signed char __b) {
6154   return __a * __b;
6155 }
6156
6157 static __inline__ vector unsigned char __ATTRS_o_ai
6158 vec_mul(vector unsigned char __a, vector unsigned char __b) {
6159   return __a * __b;
6160 }
6161
6162 static __inline__ vector signed short __ATTRS_o_ai
6163 vec_mul(vector signed short __a, vector signed short __b) {
6164   return __a * __b;
6165 }
6166
6167 static __inline__ vector unsigned short __ATTRS_o_ai
6168 vec_mul(vector unsigned short __a, vector unsigned short __b) {
6169   return __a * __b;
6170 }
6171
6172 static __inline__ vector signed int __ATTRS_o_ai
6173 vec_mul(vector signed int __a, vector signed int __b) {
6174   return __a * __b;
6175 }
6176
6177 static __inline__ vector unsigned int __ATTRS_o_ai
6178 vec_mul(vector unsigned int __a, vector unsigned int __b) {
6179   return __a * __b;
6180 }
6181
6182 #ifdef __VSX__
6183 static __inline__ vector signed long long __ATTRS_o_ai
6184 vec_mul(vector signed long long __a, vector signed long long __b) {
6185   return __a * __b;
6186 }
6187
6188 static __inline__ vector unsigned long long __ATTRS_o_ai
6189 vec_mul(vector unsigned long long __a, vector unsigned long long __b) {
6190   return __a * __b;
6191 }
6192 #endif
6193
6194 static __inline__ vector float __ATTRS_o_ai vec_mul(vector float __a,
6195                                                     vector float __b) {
6196   return __a * __b;
6197 }
6198
6199 #ifdef __VSX__
6200 static __inline__ vector double __ATTRS_o_ai vec_mul(vector double __a,
6201                                                      vector double __b) {
6202   return __a * __b;
6203 }
6204 #endif
6205
6206 /* The vmulos* and vmules* instructions have a big endian bias, so
6207    we must reverse the meaning of "even" and "odd" for little endian.  */
6208
6209 /* vec_mule */
6210
6211 static __inline__ vector short __ATTRS_o_ai vec_mule(vector signed char __a,
6212                                                      vector signed char __b) {
6213 #ifdef __LITTLE_ENDIAN__
6214   return __builtin_altivec_vmulosb(__a, __b);
6215 #else
6216   return __builtin_altivec_vmulesb(__a, __b);
6217 #endif
6218 }
6219
6220 static __inline__ vector unsigned short __ATTRS_o_ai
6221 vec_mule(vector unsigned char __a, vector unsigned char __b) {
6222 #ifdef __LITTLE_ENDIAN__
6223   return __builtin_altivec_vmuloub(__a, __b);
6224 #else
6225   return __builtin_altivec_vmuleub(__a, __b);
6226 #endif
6227 }
6228
6229 static __inline__ vector int __ATTRS_o_ai vec_mule(vector short __a,
6230                                                    vector short __b) {
6231 #ifdef __LITTLE_ENDIAN__
6232   return __builtin_altivec_vmulosh(__a, __b);
6233 #else
6234   return __builtin_altivec_vmulesh(__a, __b);
6235 #endif
6236 }
6237
6238 static __inline__ vector unsigned int __ATTRS_o_ai
6239 vec_mule(vector unsigned short __a, vector unsigned short __b) {
6240 #ifdef __LITTLE_ENDIAN__
6241   return __builtin_altivec_vmulouh(__a, __b);
6242 #else
6243   return __builtin_altivec_vmuleuh(__a, __b);
6244 #endif
6245 }
6246
6247 #ifdef __POWER8_VECTOR__
6248 static __inline__ vector signed long long __ATTRS_o_ai
6249 vec_mule(vector signed int __a, vector signed int __b) {
6250 #ifdef __LITTLE_ENDIAN__
6251   return __builtin_altivec_vmulosw(__a, __b);
6252 #else
6253   return __builtin_altivec_vmulesw(__a, __b);
6254 #endif
6255 }
6256
6257 static __inline__ vector unsigned long long __ATTRS_o_ai
6258 vec_mule(vector unsigned int __a, vector unsigned int __b) {
6259 #ifdef __LITTLE_ENDIAN__
6260   return __builtin_altivec_vmulouw(__a, __b);
6261 #else
6262   return __builtin_altivec_vmuleuw(__a, __b);
6263 #endif
6264 }
6265 #endif
6266
6267 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
6268 static __inline__ vector signed __int128 __ATTRS_o_ai
6269 vec_mule(vector signed long long __a, vector signed long long __b) {
6270 #ifdef __LITTLE_ENDIAN__
6271   return __builtin_altivec_vmulosd(__a, __b);
6272 #else
6273   return __builtin_altivec_vmulesd(__a, __b);
6274 #endif
6275 }
6276
6277 static __inline__ vector unsigned __int128 __ATTRS_o_ai
6278 vec_mule(vector unsigned long long __a, vector unsigned long long __b) {
6279 #ifdef __LITTLE_ENDIAN__
6280   return __builtin_altivec_vmuloud(__a, __b);
6281 #else
6282   return __builtin_altivec_vmuleud(__a, __b);
6283 #endif
6284 }
6285 #endif
6286
6287 /* vec_vmulesb */
6288
6289 static __inline__ vector short __attribute__((__always_inline__))
6290 vec_vmulesb(vector signed char __a, vector signed char __b) {
6291 #ifdef __LITTLE_ENDIAN__
6292   return __builtin_altivec_vmulosb(__a, __b);
6293 #else
6294   return __builtin_altivec_vmulesb(__a, __b);
6295 #endif
6296 }
6297
6298 /* vec_vmuleub */
6299
6300 static __inline__ vector unsigned short __attribute__((__always_inline__))
6301 vec_vmuleub(vector unsigned char __a, vector unsigned char __b) {
6302 #ifdef __LITTLE_ENDIAN__
6303   return __builtin_altivec_vmuloub(__a, __b);
6304 #else
6305   return __builtin_altivec_vmuleub(__a, __b);
6306 #endif
6307 }
6308
6309 /* vec_vmulesh */
6310
6311 static __inline__ vector int __attribute__((__always_inline__))
6312 vec_vmulesh(vector short __a, vector short __b) {
6313 #ifdef __LITTLE_ENDIAN__
6314   return __builtin_altivec_vmulosh(__a, __b);
6315 #else
6316   return __builtin_altivec_vmulesh(__a, __b);
6317 #endif
6318 }
6319
6320 /* vec_vmuleuh */
6321
6322 static __inline__ vector unsigned int __attribute__((__always_inline__))
6323 vec_vmuleuh(vector unsigned short __a, vector unsigned short __b) {
6324 #ifdef __LITTLE_ENDIAN__
6325   return __builtin_altivec_vmulouh(__a, __b);
6326 #else
6327   return __builtin_altivec_vmuleuh(__a, __b);
6328 #endif
6329 }
6330
6331 /* vec_mulh */
6332
6333 #ifdef __POWER10_VECTOR__
6334 static __inline__ vector signed int __ATTRS_o_ai
6335 vec_mulh(vector signed int __a, vector signed int __b) {
6336   return __builtin_altivec_vmulhsw(__a, __b);
6337 }
6338
6339 static __inline__ vector unsigned int __ATTRS_o_ai
6340 vec_mulh(vector unsigned int __a, vector unsigned int __b) {
6341   return __builtin_altivec_vmulhuw(__a, __b);
6342 }
6343
6344 static __inline__ vector signed long long __ATTRS_o_ai
6345 vec_mulh(vector signed long long __a, vector signed long long __b) {
6346   return __builtin_altivec_vmulhsd(__a, __b);
6347 }
6348
6349 static __inline__ vector unsigned long long __ATTRS_o_ai
6350 vec_mulh(vector unsigned long long __a, vector unsigned long long __b) {
6351   return __builtin_altivec_vmulhud(__a, __b);
6352 }
6353 #endif
6354
6355 /* vec_mulo */
6356
6357 static __inline__ vector short __ATTRS_o_ai vec_mulo(vector signed char __a,
6358                                                      vector signed char __b) {
6359 #ifdef __LITTLE_ENDIAN__
6360   return __builtin_altivec_vmulesb(__a, __b);
6361 #else
6362   return __builtin_altivec_vmulosb(__a, __b);
6363 #endif
6364 }
6365
6366 static __inline__ vector unsigned short __ATTRS_o_ai
6367 vec_mulo(vector unsigned char __a, vector unsigned char __b) {
6368 #ifdef __LITTLE_ENDIAN__
6369   return __builtin_altivec_vmuleub(__a, __b);
6370 #else
6371   return __builtin_altivec_vmuloub(__a, __b);
6372 #endif
6373 }
6374
6375 static __inline__ vector int __ATTRS_o_ai vec_mulo(vector short __a,
6376                                                    vector short __b) {
6377 #ifdef __LITTLE_ENDIAN__
6378   return __builtin_altivec_vmulesh(__a, __b);
6379 #else
6380   return __builtin_altivec_vmulosh(__a, __b);
6381 #endif
6382 }
6383
6384 static __inline__ vector unsigned int __ATTRS_o_ai
6385 vec_mulo(vector unsigned short __a, vector unsigned short __b) {
6386 #ifdef __LITTLE_ENDIAN__
6387   return __builtin_altivec_vmuleuh(__a, __b);
6388 #else
6389   return __builtin_altivec_vmulouh(__a, __b);
6390 #endif
6391 }
6392
6393 #ifdef __POWER8_VECTOR__
6394 static __inline__ vector signed long long __ATTRS_o_ai
6395 vec_mulo(vector signed int __a, vector signed int __b) {
6396 #ifdef __LITTLE_ENDIAN__
6397   return __builtin_altivec_vmulesw(__a, __b);
6398 #else
6399   return __builtin_altivec_vmulosw(__a, __b);
6400 #endif
6401 }
6402
6403 static __inline__ vector unsigned long long __ATTRS_o_ai
6404 vec_mulo(vector unsigned int __a, vector unsigned int __b) {
6405 #ifdef __LITTLE_ENDIAN__
6406   return __builtin_altivec_vmuleuw(__a, __b);
6407 #else
6408   return __builtin_altivec_vmulouw(__a, __b);
6409 #endif
6410 }
6411 #endif
6412
6413 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
6414 static __inline__ vector signed __int128 __ATTRS_o_ai
6415 vec_mulo(vector signed long long __a, vector signed long long __b) {
6416 #ifdef __LITTLE_ENDIAN__
6417   return __builtin_altivec_vmulesd(__a, __b);
6418 #else
6419   return __builtin_altivec_vmulosd(__a, __b);
6420 #endif
6421 }
6422
6423 static __inline__ vector unsigned __int128 __ATTRS_o_ai
6424 vec_mulo(vector unsigned long long __a, vector unsigned long long __b) {
6425 #ifdef __LITTLE_ENDIAN__
6426   return __builtin_altivec_vmuleud(__a, __b);
6427 #else
6428   return __builtin_altivec_vmuloud(__a, __b);
6429 #endif
6430 }
6431 #endif
6432
6433 /* vec_vmulosb */
6434
6435 static __inline__ vector short __attribute__((__always_inline__))
6436 vec_vmulosb(vector signed char __a, vector signed char __b) {
6437 #ifdef __LITTLE_ENDIAN__
6438   return __builtin_altivec_vmulesb(__a, __b);
6439 #else
6440   return __builtin_altivec_vmulosb(__a, __b);
6441 #endif
6442 }
6443
6444 /* vec_vmuloub */
6445
6446 static __inline__ vector unsigned short __attribute__((__always_inline__))
6447 vec_vmuloub(vector unsigned char __a, vector unsigned char __b) {
6448 #ifdef __LITTLE_ENDIAN__
6449   return __builtin_altivec_vmuleub(__a, __b);
6450 #else
6451   return __builtin_altivec_vmuloub(__a, __b);
6452 #endif
6453 }
6454
6455 /* vec_vmulosh */
6456
6457 static __inline__ vector int __attribute__((__always_inline__))
6458 vec_vmulosh(vector short __a, vector short __b) {
6459 #ifdef __LITTLE_ENDIAN__
6460   return __builtin_altivec_vmulesh(__a, __b);
6461 #else
6462   return __builtin_altivec_vmulosh(__a, __b);
6463 #endif
6464 }
6465
6466 /* vec_vmulouh */
6467
6468 static __inline__ vector unsigned int __attribute__((__always_inline__))
6469 vec_vmulouh(vector unsigned short __a, vector unsigned short __b) {
6470 #ifdef __LITTLE_ENDIAN__
6471   return __builtin_altivec_vmuleuh(__a, __b);
6472 #else
6473   return __builtin_altivec_vmulouh(__a, __b);
6474 #endif
6475 }
6476
6477 /*  vec_nand */
6478
6479 #ifdef __POWER8_VECTOR__
6480 static __inline__ vector signed char __ATTRS_o_ai
6481 vec_nand(vector signed char __a, vector signed char __b) {
6482   return ~(__a & __b);
6483 }
6484
6485 static __inline__ vector signed char __ATTRS_o_ai
6486 vec_nand(vector signed char __a, vector bool char __b) {
6487   return ~(__a & __b);
6488 }
6489
6490 static __inline__ vector signed char __ATTRS_o_ai
6491 vec_nand(vector bool char __a, vector signed char __b) {
6492   return ~(__a & __b);
6493 }
6494
6495 static __inline__ vector unsigned char __ATTRS_o_ai
6496 vec_nand(vector unsigned char __a, vector unsigned char __b) {
6497   return ~(__a & __b);
6498 }
6499
6500 static __inline__ vector unsigned char __ATTRS_o_ai
6501 vec_nand(vector unsigned char __a, vector bool char __b) {
6502   return ~(__a & __b);
6503 }
6504
6505 static __inline__ vector unsigned char __ATTRS_o_ai
6506 vec_nand(vector bool char __a, vector unsigned char __b) {
6507   return ~(__a & __b);
6508 }
6509
6510 static __inline__ vector bool char __ATTRS_o_ai vec_nand(vector bool char __a,
6511                                                          vector bool char __b) {
6512   return ~(__a & __b);
6513 }
6514
6515 static __inline__ vector signed short __ATTRS_o_ai
6516 vec_nand(vector signed short __a, vector signed short __b) {
6517   return ~(__a & __b);
6518 }
6519
6520 static __inline__ vector signed short __ATTRS_o_ai
6521 vec_nand(vector signed short __a, vector bool short __b) {
6522   return ~(__a & __b);
6523 }
6524
6525 static __inline__ vector signed short __ATTRS_o_ai
6526 vec_nand(vector bool short __a, vector signed short __b) {
6527   return ~(__a & __b);
6528 }
6529
6530 static __inline__ vector unsigned short __ATTRS_o_ai
6531 vec_nand(vector unsigned short __a, vector unsigned short __b) {
6532   return ~(__a & __b);
6533 }
6534
6535 static __inline__ vector unsigned short __ATTRS_o_ai
6536 vec_nand(vector unsigned short __a, vector bool short __b) {
6537   return ~(__a & __b);
6538 }
6539
6540 static __inline__ vector bool short __ATTRS_o_ai
6541 vec_nand(vector bool short __a, vector bool short __b) {
6542   return ~(__a & __b);
6543 }
6544
6545 static __inline__ vector signed int __ATTRS_o_ai
6546 vec_nand(vector signed int __a, vector signed int __b) {
6547   return ~(__a & __b);
6548 }
6549
6550 static __inline__ vector signed int __ATTRS_o_ai vec_nand(vector signed int __a,
6551                                                           vector bool int __b) {
6552   return ~(__a & __b);
6553 }
6554
6555 static __inline__ vector signed int __ATTRS_o_ai
6556 vec_nand(vector bool int __a, vector signed int __b) {
6557   return ~(__a & __b);
6558 }
6559
6560 static __inline__ vector unsigned int __ATTRS_o_ai
6561 vec_nand(vector unsigned int __a, vector unsigned int __b) {
6562   return ~(__a & __b);
6563 }
6564
6565 static __inline__ vector unsigned int __ATTRS_o_ai
6566 vec_nand(vector unsigned int __a, vector bool int __b) {
6567   return ~(__a & __b);
6568 }
6569
6570 static __inline__ vector unsigned int __ATTRS_o_ai
6571 vec_nand(vector bool int __a, vector unsigned int __b) {
6572   return ~(__a & __b);
6573 }
6574
6575 static __inline__ vector bool int __ATTRS_o_ai vec_nand(vector bool int __a,
6576                                                         vector bool int __b) {
6577   return ~(__a & __b);
6578 }
6579
6580 static __inline__ vector float __ATTRS_o_ai
6581 vec_nand(vector float __a, vector float __b) {
6582   return (vector float)(~((vector unsigned int)__a &
6583                           (vector unsigned int)__b));
6584 }
6585
6586 static __inline__ vector signed long long __ATTRS_o_ai
6587 vec_nand(vector signed long long __a, vector signed long long __b) {
6588   return ~(__a & __b);
6589 }
6590
6591 static __inline__ vector signed long long __ATTRS_o_ai
6592 vec_nand(vector signed long long __a, vector bool long long __b) {
6593   return ~(__a & __b);
6594 }
6595
6596 static __inline__ vector signed long long __ATTRS_o_ai
6597 vec_nand(vector bool long long __a, vector signed long long __b) {
6598   return ~(__a & __b);
6599 }
6600
6601 static __inline__ vector unsigned long long __ATTRS_o_ai
6602 vec_nand(vector unsigned long long __a, vector unsigned long long __b) {
6603   return ~(__a & __b);
6604 }
6605
6606 static __inline__ vector unsigned long long __ATTRS_o_ai
6607 vec_nand(vector unsigned long long __a, vector bool long long __b) {
6608   return ~(__a & __b);
6609 }
6610
6611 static __inline__ vector unsigned long long __ATTRS_o_ai
6612 vec_nand(vector bool long long __a, vector unsigned long long __b) {
6613   return ~(__a & __b);
6614 }
6615
6616 static __inline__ vector bool long long __ATTRS_o_ai
6617 vec_nand(vector bool long long __a, vector bool long long __b) {
6618   return ~(__a & __b);
6619 }
6620
6621 static __inline__ vector double __ATTRS_o_ai
6622 vec_nand(vector double __a, vector double __b) {
6623   return (vector double)(~((vector unsigned long long)__a &
6624                            (vector unsigned long long)__b));
6625 }
6626
6627 #endif
6628
6629 /* vec_nmadd */
6630
6631 #ifdef __VSX__
6632 static __inline__ vector float __ATTRS_o_ai vec_nmadd(vector float __a,
6633                                                       vector float __b,
6634                                                       vector float __c) {
6635   return __builtin_vsx_xvnmaddasp(__a, __b, __c);
6636 }
6637
6638 static __inline__ vector double __ATTRS_o_ai vec_nmadd(vector double __a,
6639                                                        vector double __b,
6640                                                        vector double __c) {
6641   return __builtin_vsx_xvnmaddadp(__a, __b, __c);
6642 }
6643 #endif
6644
6645 /* vec_nmsub */
6646
6647 static __inline__ vector float __ATTRS_o_ai vec_nmsub(vector float __a,
6648                                                       vector float __b,
6649                                                       vector float __c) {
6650 #ifdef __VSX__
6651   return __builtin_vsx_xvnmsubasp(__a, __b, __c);
6652 #else
6653   return __builtin_altivec_vnmsubfp(__a, __b, __c);
6654 #endif
6655 }
6656
6657 #ifdef __VSX__
6658 static __inline__ vector double __ATTRS_o_ai vec_nmsub(vector double __a,
6659                                                        vector double __b,
6660                                                        vector double __c) {
6661   return __builtin_vsx_xvnmsubadp(__a, __b, __c);
6662 }
6663 #endif
6664
6665 /* vec_vnmsubfp */
6666
6667 static __inline__ vector float __attribute__((__always_inline__))
6668 vec_vnmsubfp(vector float __a, vector float __b, vector float __c) {
6669   return __builtin_altivec_vnmsubfp(__a, __b, __c);
6670 }
6671
6672 /* vec_nor */
6673
6674 #define __builtin_altivec_vnor vec_nor
6675
6676 static __inline__ vector signed char __ATTRS_o_ai
6677 vec_nor(vector signed char __a, vector signed char __b) {
6678   return ~(__a | __b);
6679 }
6680
6681 static __inline__ vector unsigned char __ATTRS_o_ai
6682 vec_nor(vector unsigned char __a, vector unsigned char __b) {
6683   return ~(__a | __b);
6684 }
6685
6686 static __inline__ vector bool char __ATTRS_o_ai vec_nor(vector bool char __a,
6687                                                         vector bool char __b) {
6688   return ~(__a | __b);
6689 }
6690
6691 static __inline__ vector short __ATTRS_o_ai vec_nor(vector short __a,
6692                                                     vector short __b) {
6693   return ~(__a | __b);
6694 }
6695
6696 static __inline__ vector unsigned short __ATTRS_o_ai
6697 vec_nor(vector unsigned short __a, vector unsigned short __b) {
6698   return ~(__a | __b);
6699 }
6700
6701 static __inline__ vector bool short __ATTRS_o_ai
6702 vec_nor(vector bool short __a, vector bool short __b) {
6703   return ~(__a | __b);
6704 }
6705
6706 static __inline__ vector int __ATTRS_o_ai vec_nor(vector int __a,
6707                                                   vector int __b) {
6708   return ~(__a | __b);
6709 }
6710
6711 static __inline__ vector unsigned int __ATTRS_o_ai
6712 vec_nor(vector unsigned int __a, vector unsigned int __b) {
6713   return ~(__a | __b);
6714 }
6715
6716 static __inline__ vector bool int __ATTRS_o_ai vec_nor(vector bool int __a,
6717                                                        vector bool int __b) {
6718   return ~(__a | __b);
6719 }
6720
6721 static __inline__ vector float __ATTRS_o_ai vec_nor(vector float __a,
6722                                                     vector float __b) {
6723   vector unsigned int __res =
6724       ~((vector unsigned int)__a | (vector unsigned int)__b);
6725   return (vector float)__res;
6726 }
6727
6728 #ifdef __VSX__
6729 static __inline__ vector double __ATTRS_o_ai vec_nor(vector double __a,
6730                                                      vector double __b) {
6731   vector unsigned long long __res =
6732       ~((vector unsigned long long)__a | (vector unsigned long long)__b);
6733   return (vector double)__res;
6734 }
6735 #endif
6736
6737 /* vec_vnor */
6738
6739 static __inline__ vector signed char __ATTRS_o_ai
6740 vec_vnor(vector signed char __a, vector signed char __b) {
6741   return ~(__a | __b);
6742 }
6743
6744 static __inline__ vector unsigned char __ATTRS_o_ai
6745 vec_vnor(vector unsigned char __a, vector unsigned char __b) {
6746   return ~(__a | __b);
6747 }
6748
6749 static __inline__ vector bool char __ATTRS_o_ai vec_vnor(vector bool char __a,
6750                                                          vector bool char __b) {
6751   return ~(__a | __b);
6752 }
6753
6754 static __inline__ vector short __ATTRS_o_ai vec_vnor(vector short __a,
6755                                                      vector short __b) {
6756   return ~(__a | __b);
6757 }
6758
6759 static __inline__ vector unsigned short __ATTRS_o_ai
6760 vec_vnor(vector unsigned short __a, vector unsigned short __b) {
6761   return ~(__a | __b);
6762 }
6763
6764 static __inline__ vector bool short __ATTRS_o_ai
6765 vec_vnor(vector bool short __a, vector bool short __b) {
6766   return ~(__a | __b);
6767 }
6768
6769 static __inline__ vector int __ATTRS_o_ai vec_vnor(vector int __a,
6770                                                    vector int __b) {
6771   return ~(__a | __b);
6772 }
6773
6774 static __inline__ vector unsigned int __ATTRS_o_ai
6775 vec_vnor(vector unsigned int __a, vector unsigned int __b) {
6776   return ~(__a | __b);
6777 }
6778
6779 static __inline__ vector bool int __ATTRS_o_ai vec_vnor(vector bool int __a,
6780                                                         vector bool int __b) {
6781   return ~(__a | __b);
6782 }
6783
6784 static __inline__ vector float __ATTRS_o_ai vec_vnor(vector float __a,
6785                                                      vector float __b) {
6786   vector unsigned int __res =
6787       ~((vector unsigned int)__a | (vector unsigned int)__b);
6788   return (vector float)__res;
6789 }
6790
6791 #ifdef __VSX__
6792 static __inline__ vector signed long long __ATTRS_o_ai
6793 vec_nor(vector signed long long __a, vector signed long long __b) {
6794   return ~(__a | __b);
6795 }
6796
6797 static __inline__ vector unsigned long long __ATTRS_o_ai
6798 vec_nor(vector unsigned long long __a, vector unsigned long long __b) {
6799   return ~(__a | __b);
6800 }
6801
6802 static __inline__ vector bool long long __ATTRS_o_ai
6803 vec_nor(vector bool long long __a, vector bool long long __b) {
6804   return ~(__a | __b);
6805 }
6806 #endif
6807
6808 /* vec_or */
6809
6810 #define __builtin_altivec_vor vec_or
6811
6812 static __inline__ vector signed char __ATTRS_o_ai
6813 vec_or(vector signed char __a, vector signed char __b) {
6814   return __a | __b;
6815 }
6816
6817 static __inline__ vector signed char __ATTRS_o_ai
6818 vec_or(vector bool char __a, vector signed char __b) {
6819   return (vector signed char)__a | __b;
6820 }
6821
6822 static __inline__ vector signed char __ATTRS_o_ai vec_or(vector signed char __a,
6823                                                          vector bool char __b) {
6824   return __a | (vector signed char)__b;
6825 }
6826
6827 static __inline__ vector unsigned char __ATTRS_o_ai
6828 vec_or(vector unsigned char __a, vector unsigned char __b) {
6829   return __a | __b;
6830 }
6831
6832 static __inline__ vector unsigned char __ATTRS_o_ai
6833 vec_or(vector bool char __a, vector unsigned char __b) {
6834   return (vector unsigned char)__a | __b;
6835 }
6836
6837 static __inline__ vector unsigned char __ATTRS_o_ai
6838 vec_or(vector unsigned char __a, vector bool char __b) {
6839   return __a | (vector unsigned char)__b;
6840 }
6841
6842 static __inline__ vector bool char __ATTRS_o_ai vec_or(vector bool char __a,
6843                                                        vector bool char __b) {
6844   return __a | __b;
6845 }
6846
6847 static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
6848                                                    vector short __b) {
6849   return __a | __b;
6850 }
6851
6852 static __inline__ vector short __ATTRS_o_ai vec_or(vector bool short __a,
6853                                                    vector short __b) {
6854   return (vector short)__a | __b;
6855 }
6856
6857 static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
6858                                                    vector bool short __b) {
6859   return __a | (vector short)__b;
6860 }
6861
6862 static __inline__ vector unsigned short __ATTRS_o_ai
6863 vec_or(vector unsigned short __a, vector unsigned short __b) {
6864   return __a | __b;
6865 }
6866
6867 static __inline__ vector unsigned short __ATTRS_o_ai
6868 vec_or(vector bool short __a, vector unsigned short __b) {
6869   return (vector unsigned short)__a | __b;
6870 }
6871
6872 static __inline__ vector unsigned short __ATTRS_o_ai
6873 vec_or(vector unsigned short __a, vector bool short __b) {
6874   return __a | (vector unsigned short)__b;
6875 }
6876
6877 static __inline__ vector bool short __ATTRS_o_ai vec_or(vector bool short __a,
6878                                                         vector bool short __b) {
6879   return __a | __b;
6880 }
6881
6882 static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
6883                                                  vector int __b) {
6884   return __a | __b;
6885 }
6886
6887 static __inline__ vector int __ATTRS_o_ai vec_or(vector bool int __a,
6888                                                  vector int __b) {
6889   return (vector int)__a | __b;
6890 }
6891
6892 static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
6893                                                  vector bool int __b) {
6894   return __a | (vector int)__b;
6895 }
6896
6897 static __inline__ vector unsigned int __ATTRS_o_ai
6898 vec_or(vector unsigned int __a, vector unsigned int __b) {
6899   return __a | __b;
6900 }
6901
6902 static __inline__ vector unsigned int __ATTRS_o_ai
6903 vec_or(vector bool int __a, vector unsigned int __b) {
6904   return (vector unsigned int)__a | __b;
6905 }
6906
6907 static __inline__ vector unsigned int __ATTRS_o_ai
6908 vec_or(vector unsigned int __a, vector bool int __b) {
6909   return __a | (vector unsigned int)__b;
6910 }
6911
6912 static __inline__ vector bool int __ATTRS_o_ai vec_or(vector bool int __a,
6913                                                       vector bool int __b) {
6914   return __a | __b;
6915 }
6916
6917 static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
6918                                                    vector float __b) {
6919   vector unsigned int __res =
6920       (vector unsigned int)__a | (vector unsigned int)__b;
6921   return (vector float)__res;
6922 }
6923
6924 static __inline__ vector float __ATTRS_o_ai vec_or(vector bool int __a,
6925                                                    vector float __b) {
6926   vector unsigned int __res =
6927       (vector unsigned int)__a | (vector unsigned int)__b;
6928   return (vector float)__res;
6929 }
6930
6931 static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
6932                                                    vector bool int __b) {
6933   vector unsigned int __res =
6934       (vector unsigned int)__a | (vector unsigned int)__b;
6935   return (vector float)__res;
6936 }
6937
6938 #ifdef __VSX__
6939 static __inline__ vector double __ATTRS_o_ai vec_or(vector bool long long __a,
6940                                                     vector double __b) {
6941   return (vector double)((vector unsigned long long)__a |
6942                          (vector unsigned long long)__b);
6943 }
6944
6945 static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,
6946                                                     vector bool long long __b) {
6947   return (vector double)((vector unsigned long long)__a |
6948                          (vector unsigned long long)__b);
6949 }
6950
6951 static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,
6952                                                     vector double __b) {
6953   return (vector double)((vector unsigned long long)__a |
6954                          (vector unsigned long long)__b);
6955 }
6956
6957 static __inline__ vector signed long long __ATTRS_o_ai
6958 vec_or(vector signed long long __a, vector signed long long __b) {
6959   return __a | __b;
6960 }
6961
6962 static __inline__ vector signed long long __ATTRS_o_ai
6963 vec_or(vector bool long long __a, vector signed long long __b) {
6964   return (vector signed long long)__a | __b;
6965 }
6966
6967 static __inline__ vector signed long long __ATTRS_o_ai
6968 vec_or(vector signed long long __a, vector bool long long __b) {
6969   return __a | (vector signed long long)__b;
6970 }
6971
6972 static __inline__ vector unsigned long long __ATTRS_o_ai
6973 vec_or(vector unsigned long long __a, vector unsigned long long __b) {
6974   return __a | __b;
6975 }
6976
6977 static __inline__ vector unsigned long long __ATTRS_o_ai
6978 vec_or(vector bool long long __a, vector unsigned long long __b) {
6979   return (vector unsigned long long)__a | __b;
6980 }
6981
6982 static __inline__ vector unsigned long long __ATTRS_o_ai
6983 vec_or(vector unsigned long long __a, vector bool long long __b) {
6984   return __a | (vector unsigned long long)__b;
6985 }
6986
6987 static __inline__ vector bool long long __ATTRS_o_ai
6988 vec_or(vector bool long long __a, vector bool long long __b) {
6989   return __a | __b;
6990 }
6991 #endif
6992
6993 #ifdef __POWER8_VECTOR__
6994 static __inline__ vector signed char __ATTRS_o_ai
6995 vec_orc(vector signed char __a, vector signed char __b) {
6996   return __a | ~__b;
6997 }
6998
6999 static __inline__ vector signed char __ATTRS_o_ai
7000 vec_orc(vector signed char __a, vector bool char __b) {
7001   return __a | ~__b;
7002 }
7003
7004 static __inline__ vector signed char __ATTRS_o_ai
7005 vec_orc(vector bool char __a, vector signed char __b) {
7006   return __a | ~__b;
7007 }
7008
7009 static __inline__ vector unsigned char __ATTRS_o_ai
7010 vec_orc(vector unsigned char __a, vector unsigned char __b) {
7011   return __a | ~__b;
7012 }
7013
7014 static __inline__ vector unsigned char __ATTRS_o_ai
7015 vec_orc(vector unsigned char __a, vector bool char __b) {
7016   return __a | ~__b;
7017 }
7018
7019 static __inline__ vector unsigned char __ATTRS_o_ai
7020 vec_orc(vector bool char __a, vector unsigned char __b) {
7021   return __a | ~__b;
7022 }
7023
7024 static __inline__ vector bool char __ATTRS_o_ai vec_orc(vector bool char __a,
7025                                                         vector bool char __b) {
7026   return __a | ~__b;
7027 }
7028
7029 static __inline__ vector signed short __ATTRS_o_ai
7030 vec_orc(vector signed short __a, vector signed short __b) {
7031   return __a | ~__b;
7032 }
7033
7034 static __inline__ vector signed short __ATTRS_o_ai
7035 vec_orc(vector signed short __a, vector bool short __b) {
7036   return __a | ~__b;
7037 }
7038
7039 static __inline__ vector signed short __ATTRS_o_ai
7040 vec_orc(vector bool short __a, vector signed short __b) {
7041   return __a | ~__b;
7042 }
7043
7044 static __inline__ vector unsigned short __ATTRS_o_ai
7045 vec_orc(vector unsigned short __a, vector unsigned short __b) {
7046   return __a | ~__b;
7047 }
7048
7049 static __inline__ vector unsigned short __ATTRS_o_ai
7050 vec_orc(vector unsigned short __a, vector bool short __b) {
7051   return __a | ~__b;
7052 }
7053
7054 static __inline__ vector unsigned short __ATTRS_o_ai
7055 vec_orc(vector bool short __a, vector unsigned short __b) {
7056   return __a | ~__b;
7057 }
7058
7059 static __inline__ vector bool short __ATTRS_o_ai
7060 vec_orc(vector bool short __a, vector bool short __b) {
7061   return __a | ~__b;
7062 }
7063
7064 static __inline__ vector signed int __ATTRS_o_ai
7065 vec_orc(vector signed int __a, vector signed int __b) {
7066   return __a | ~__b;
7067 }
7068
7069 static __inline__ vector signed int __ATTRS_o_ai vec_orc(vector signed int __a,
7070                                                          vector bool int __b) {
7071   return __a | ~__b;
7072 }
7073
7074 static __inline__ vector signed int __ATTRS_o_ai
7075 vec_orc(vector bool int __a, vector signed int __b) {
7076   return __a | ~__b;
7077 }
7078
7079 static __inline__ vector unsigned int __ATTRS_o_ai
7080 vec_orc(vector unsigned int __a, vector unsigned int __b) {
7081   return __a | ~__b;
7082 }
7083
7084 static __inline__ vector unsigned int __ATTRS_o_ai
7085 vec_orc(vector unsigned int __a, vector bool int __b) {
7086   return __a | ~__b;
7087 }
7088
7089 static __inline__ vector unsigned int __ATTRS_o_ai
7090 vec_orc(vector bool int __a, vector unsigned int __b) {
7091   return __a | ~__b;
7092 }
7093
7094 static __inline__ vector bool int __ATTRS_o_ai vec_orc(vector bool int __a,
7095                                                        vector bool int __b) {
7096   return __a | ~__b;
7097 }
7098
7099 static __inline__ vector float __ATTRS_o_ai
7100 vec_orc(vector bool int __a, vector float __b) {
7101  return (vector float)(__a | ~(vector unsigned int)__b);
7102 }
7103
7104 static __inline__ vector float __ATTRS_o_ai
7105 vec_orc(vector float __a, vector bool int __b) {
7106   return (vector float)((vector unsigned int)__a | ~__b);
7107 }
7108
7109 static __inline__ vector signed long long __ATTRS_o_ai
7110 vec_orc(vector signed long long __a, vector signed long long __b) {
7111   return __a | ~__b;
7112 }
7113
7114 static __inline__ vector signed long long __ATTRS_o_ai
7115 vec_orc(vector signed long long __a, vector bool long long __b) {
7116   return __a | ~__b;
7117 }
7118
7119 static __inline__ vector signed long long __ATTRS_o_ai
7120 vec_orc(vector bool long long __a, vector signed long long __b) {
7121   return __a | ~__b;
7122 }
7123
7124 static __inline__ vector unsigned long long __ATTRS_o_ai
7125 vec_orc(vector unsigned long long __a, vector unsigned long long __b) {
7126   return __a | ~__b;
7127 }
7128
7129 static __inline__ vector unsigned long long __ATTRS_o_ai
7130 vec_orc(vector unsigned long long __a, vector bool long long __b) {
7131   return __a | ~__b;
7132 }
7133
7134 static __inline__ vector unsigned long long __ATTRS_o_ai
7135 vec_orc(vector bool long long __a, vector unsigned long long __b) {
7136   return __a | ~__b;
7137 }
7138
7139 static __inline__ vector bool long long __ATTRS_o_ai
7140 vec_orc(vector bool long long __a, vector bool long long __b) {
7141   return __a | ~__b;
7142 }
7143
7144 static __inline__ vector double __ATTRS_o_ai
7145 vec_orc(vector double __a, vector bool long long __b) {
7146   return (vector double)((vector unsigned long long)__a | ~__b);
7147 }
7148
7149 static __inline__ vector double __ATTRS_o_ai
7150 vec_orc(vector bool long long __a, vector double __b) {
7151   return (vector double)(__a | ~(vector unsigned long long)__b);
7152 }
7153 #endif
7154
7155 /* vec_vor */
7156
7157 static __inline__ vector signed char __ATTRS_o_ai
7158 vec_vor(vector signed char __a, vector signed char __b) {
7159   return __a | __b;
7160 }
7161
7162 static __inline__ vector signed char __ATTRS_o_ai
7163 vec_vor(vector bool char __a, vector signed char __b) {
7164   return (vector signed char)__a | __b;
7165 }
7166
7167 static __inline__ vector signed char __ATTRS_o_ai
7168 vec_vor(vector signed char __a, vector bool char __b) {
7169   return __a | (vector signed char)__b;
7170 }
7171
7172 static __inline__ vector unsigned char __ATTRS_o_ai
7173 vec_vor(vector unsigned char __a, vector unsigned char __b) {
7174   return __a | __b;
7175 }
7176
7177 static __inline__ vector unsigned char __ATTRS_o_ai
7178 vec_vor(vector bool char __a, vector unsigned char __b) {
7179   return (vector unsigned char)__a | __b;
7180 }
7181
7182 static __inline__ vector unsigned char __ATTRS_o_ai
7183 vec_vor(vector unsigned char __a, vector bool char __b) {
7184   return __a | (vector unsigned char)__b;
7185 }
7186
7187 static __inline__ vector bool char __ATTRS_o_ai vec_vor(vector bool char __a,
7188                                                         vector bool char __b) {
7189   return __a | __b;
7190 }
7191
7192 static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
7193                                                     vector short __b) {
7194   return __a | __b;
7195 }
7196
7197 static __inline__ vector short __ATTRS_o_ai vec_vor(vector bool short __a,
7198                                                     vector short __b) {
7199   return (vector short)__a | __b;
7200 }
7201
7202 static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
7203                                                     vector bool short __b) {
7204   return __a | (vector short)__b;
7205 }
7206
7207 static __inline__ vector unsigned short __ATTRS_o_ai
7208 vec_vor(vector unsigned short __a, vector unsigned short __b) {
7209   return __a | __b;
7210 }
7211
7212 static __inline__ vector unsigned short __ATTRS_o_ai
7213 vec_vor(vector bool short __a, vector unsigned short __b) {
7214   return (vector unsigned short)__a | __b;
7215 }
7216
7217 static __inline__ vector unsigned short __ATTRS_o_ai
7218 vec_vor(vector unsigned short __a, vector bool short __b) {
7219   return __a | (vector unsigned short)__b;
7220 }
7221
7222 static __inline__ vector bool short __ATTRS_o_ai
7223 vec_vor(vector bool short __a, vector bool short __b) {
7224   return __a | __b;
7225 }
7226
7227 static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
7228                                                   vector int __b) {
7229   return __a | __b;
7230 }
7231
7232 static __inline__ vector int __ATTRS_o_ai vec_vor(vector bool int __a,
7233                                                   vector int __b) {
7234   return (vector int)__a | __b;
7235 }
7236
7237 static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
7238                                                   vector bool int __b) {
7239   return __a | (vector int)__b;
7240 }
7241
7242 static __inline__ vector unsigned int __ATTRS_o_ai
7243 vec_vor(vector unsigned int __a, vector unsigned int __b) {
7244   return __a | __b;
7245 }
7246
7247 static __inline__ vector unsigned int __ATTRS_o_ai
7248 vec_vor(vector bool int __a, vector unsigned int __b) {
7249   return (vector unsigned int)__a | __b;
7250 }
7251
7252 static __inline__ vector unsigned int __ATTRS_o_ai
7253 vec_vor(vector unsigned int __a, vector bool int __b) {
7254   return __a | (vector unsigned int)__b;
7255 }
7256
7257 static __inline__ vector bool int __ATTRS_o_ai vec_vor(vector bool int __a,
7258                                                        vector bool int __b) {
7259   return __a | __b;
7260 }
7261
7262 static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
7263                                                     vector float __b) {
7264   vector unsigned int __res =
7265       (vector unsigned int)__a | (vector unsigned int)__b;
7266   return (vector float)__res;
7267 }
7268
7269 static __inline__ vector float __ATTRS_o_ai vec_vor(vector bool int __a,
7270                                                     vector float __b) {
7271   vector unsigned int __res =
7272       (vector unsigned int)__a | (vector unsigned int)__b;
7273   return (vector float)__res;
7274 }
7275
7276 static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
7277                                                     vector bool int __b) {
7278   vector unsigned int __res =
7279       (vector unsigned int)__a | (vector unsigned int)__b;
7280   return (vector float)__res;
7281 }
7282
7283 #ifdef __VSX__
7284 static __inline__ vector signed long long __ATTRS_o_ai
7285 vec_vor(vector signed long long __a, vector signed long long __b) {
7286   return __a | __b;
7287 }
7288
7289 static __inline__ vector signed long long __ATTRS_o_ai
7290 vec_vor(vector bool long long __a, vector signed long long __b) {
7291   return (vector signed long long)__a | __b;
7292 }
7293
7294 static __inline__ vector signed long long __ATTRS_o_ai
7295 vec_vor(vector signed long long __a, vector bool long long __b) {
7296   return __a | (vector signed long long)__b;
7297 }
7298
7299 static __inline__ vector unsigned long long __ATTRS_o_ai
7300 vec_vor(vector unsigned long long __a, vector unsigned long long __b) {
7301   return __a | __b;
7302 }
7303
7304 static __inline__ vector unsigned long long __ATTRS_o_ai
7305 vec_vor(vector bool long long __a, vector unsigned long long __b) {
7306   return (vector unsigned long long)__a | __b;
7307 }
7308
7309 static __inline__ vector unsigned long long __ATTRS_o_ai
7310 vec_vor(vector unsigned long long __a, vector bool long long __b) {
7311   return __a | (vector unsigned long long)__b;
7312 }
7313
7314 static __inline__ vector bool long long __ATTRS_o_ai
7315 vec_vor(vector bool long long __a, vector bool long long __b) {
7316   return __a | __b;
7317 }
7318 #endif
7319
7320 /* vec_pack */
7321
7322 /* The various vector pack instructions have a big-endian bias, so for
7323    little endian we must handle reversed element numbering.  */
7324
7325 static __inline__ vector signed char __ATTRS_o_ai
7326 vec_pack(vector signed short __a, vector signed short __b) {
7327 #ifdef __LITTLE_ENDIAN__
7328   return (vector signed char)vec_perm(
7329       __a, __b,
7330       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7331                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7332 #else
7333   return (vector signed char)vec_perm(
7334       __a, __b,
7335       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7336                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7337 #endif
7338 }
7339
7340 static __inline__ vector unsigned char __ATTRS_o_ai
7341 vec_pack(vector unsigned short __a, vector unsigned short __b) {
7342 #ifdef __LITTLE_ENDIAN__
7343   return (vector unsigned char)vec_perm(
7344       __a, __b,
7345       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7346                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7347 #else
7348   return (vector unsigned char)vec_perm(
7349       __a, __b,
7350       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7351                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7352 #endif
7353 }
7354
7355 static __inline__ vector bool char __ATTRS_o_ai
7356 vec_pack(vector bool short __a, vector bool short __b) {
7357 #ifdef __LITTLE_ENDIAN__
7358   return (vector bool char)vec_perm(
7359       __a, __b,
7360       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7361                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7362 #else
7363   return (vector bool char)vec_perm(
7364       __a, __b,
7365       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7366                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7367 #endif
7368 }
7369
7370 static __inline__ vector short __ATTRS_o_ai vec_pack(vector int __a,
7371                                                      vector int __b) {
7372 #ifdef __LITTLE_ENDIAN__
7373   return (vector short)vec_perm(
7374       __a, __b,
7375       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7376                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7377 #else
7378   return (vector short)vec_perm(
7379       __a, __b,
7380       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7381                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7382 #endif
7383 }
7384
7385 static __inline__ vector unsigned short __ATTRS_o_ai
7386 vec_pack(vector unsigned int __a, vector unsigned int __b) {
7387 #ifdef __LITTLE_ENDIAN__
7388   return (vector unsigned short)vec_perm(
7389       __a, __b,
7390       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7391                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7392 #else
7393   return (vector unsigned short)vec_perm(
7394       __a, __b,
7395       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7396                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7397 #endif
7398 }
7399
7400 static __inline__ vector bool short __ATTRS_o_ai vec_pack(vector bool int __a,
7401                                                           vector bool int __b) {
7402 #ifdef __LITTLE_ENDIAN__
7403   return (vector bool short)vec_perm(
7404       __a, __b,
7405       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7406                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7407 #else
7408   return (vector bool short)vec_perm(
7409       __a, __b,
7410       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7411                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7412 #endif
7413 }
7414
7415 #ifdef __VSX__
7416 static __inline__ vector signed int __ATTRS_o_ai
7417 vec_pack(vector signed long long __a, vector signed long long __b) {
7418 #ifdef __LITTLE_ENDIAN__
7419   return (vector signed int)vec_perm(
7420       __a, __b,
7421       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7422                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7423 #else
7424   return (vector signed int)vec_perm(
7425       __a, __b,
7426       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7427                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7428 #endif
7429 }
7430 static __inline__ vector unsigned int __ATTRS_o_ai
7431 vec_pack(vector unsigned long long __a, vector unsigned long long __b) {
7432 #ifdef __LITTLE_ENDIAN__
7433   return (vector unsigned int)vec_perm(
7434       __a, __b,
7435       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7436                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7437 #else
7438   return (vector unsigned int)vec_perm(
7439       __a, __b,
7440       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7441                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7442 #endif
7443 }
7444
7445 static __inline__ vector bool int __ATTRS_o_ai
7446 vec_pack(vector bool long long __a, vector bool long long __b) {
7447 #ifdef __LITTLE_ENDIAN__
7448   return (vector bool int)vec_perm(
7449       __a, __b,
7450       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7451                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7452 #else
7453   return (vector bool int)vec_perm(
7454       __a, __b,
7455       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7456                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7457 #endif
7458 }
7459
7460 static __inline__ vector float __ATTRS_o_ai
7461 vec_pack(vector double __a, vector double __b) {
7462   return (vector float) (__a[0], __a[1], __b[0], __b[1]);
7463 }
7464 #endif
7465
7466 #ifdef __POWER9_VECTOR__
7467 static __inline__ vector unsigned short __ATTRS_o_ai
7468 vec_pack_to_short_fp32(vector float __a, vector float __b) {
7469   vector float __resa = __builtin_vsx_xvcvsphp(__a);
7470   vector float __resb = __builtin_vsx_xvcvsphp(__b);
7471 #ifdef __LITTLE_ENDIAN__
7472   return (vector unsigned short)vec_mergee(__resa, __resb);
7473 #else
7474   return (vector unsigned short)vec_mergeo(__resa, __resb);
7475 #endif
7476 }
7477
7478 #endif
7479 /* vec_vpkuhum */
7480
7481 #define __builtin_altivec_vpkuhum vec_vpkuhum
7482
7483 static __inline__ vector signed char __ATTRS_o_ai
7484 vec_vpkuhum(vector signed short __a, vector signed short __b) {
7485 #ifdef __LITTLE_ENDIAN__
7486   return (vector signed char)vec_perm(
7487       __a, __b,
7488       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7489                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7490 #else
7491   return (vector signed char)vec_perm(
7492       __a, __b,
7493       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7494                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7495 #endif
7496 }
7497
7498 static __inline__ vector unsigned char __ATTRS_o_ai
7499 vec_vpkuhum(vector unsigned short __a, vector unsigned short __b) {
7500 #ifdef __LITTLE_ENDIAN__
7501   return (vector unsigned char)vec_perm(
7502       __a, __b,
7503       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7504                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7505 #else
7506   return (vector unsigned char)vec_perm(
7507       __a, __b,
7508       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7509                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7510 #endif
7511 }
7512
7513 static __inline__ vector bool char __ATTRS_o_ai
7514 vec_vpkuhum(vector bool short __a, vector bool short __b) {
7515 #ifdef __LITTLE_ENDIAN__
7516   return (vector bool char)vec_perm(
7517       __a, __b,
7518       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
7519                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
7520 #else
7521   return (vector bool char)vec_perm(
7522       __a, __b,
7523       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
7524                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
7525 #endif
7526 }
7527
7528 /* vec_vpkuwum */
7529
7530 #define __builtin_altivec_vpkuwum vec_vpkuwum
7531
7532 static __inline__ vector short __ATTRS_o_ai vec_vpkuwum(vector int __a,
7533                                                         vector int __b) {
7534 #ifdef __LITTLE_ENDIAN__
7535   return (vector short)vec_perm(
7536       __a, __b,
7537       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7538                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7539 #else
7540   return (vector short)vec_perm(
7541       __a, __b,
7542       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7543                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7544 #endif
7545 }
7546
7547 static __inline__ vector unsigned short __ATTRS_o_ai
7548 vec_vpkuwum(vector unsigned int __a, vector unsigned int __b) {
7549 #ifdef __LITTLE_ENDIAN__
7550   return (vector unsigned short)vec_perm(
7551       __a, __b,
7552       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7553                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7554 #else
7555   return (vector unsigned short)vec_perm(
7556       __a, __b,
7557       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7558                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7559 #endif
7560 }
7561
7562 static __inline__ vector bool short __ATTRS_o_ai
7563 vec_vpkuwum(vector bool int __a, vector bool int __b) {
7564 #ifdef __LITTLE_ENDIAN__
7565   return (vector bool short)vec_perm(
7566       __a, __b,
7567       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
7568                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
7569 #else
7570   return (vector bool short)vec_perm(
7571       __a, __b,
7572       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
7573                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
7574 #endif
7575 }
7576
7577 /* vec_vpkudum */
7578
7579 #ifdef __POWER8_VECTOR__
7580 #define __builtin_altivec_vpkudum vec_vpkudum
7581
7582 static __inline__ vector int __ATTRS_o_ai vec_vpkudum(vector long long __a,
7583                                                       vector long long __b) {
7584 #ifdef __LITTLE_ENDIAN__
7585   return (vector int)vec_perm(
7586       __a, __b,
7587       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7588                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7589 #else
7590   return (vector int)vec_perm(
7591       __a, __b,
7592       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7593                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7594 #endif
7595 }
7596
7597 static __inline__ vector unsigned int __ATTRS_o_ai
7598 vec_vpkudum(vector unsigned long long __a, vector unsigned long long __b) {
7599 #ifdef __LITTLE_ENDIAN__
7600   return (vector unsigned int)vec_perm(
7601       __a, __b,
7602       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7603                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7604 #else
7605   return (vector unsigned int)vec_perm(
7606       __a, __b,
7607       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7608                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7609 #endif
7610 }
7611
7612 static __inline__ vector bool int __ATTRS_o_ai
7613 vec_vpkudum(vector bool long long __a, vector bool long long __b) {
7614 #ifdef __LITTLE_ENDIAN__
7615   return (vector bool int)vec_perm(
7616       (vector long long)__a, (vector long long)__b,
7617       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
7618                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
7619 #else
7620   return (vector bool int)vec_perm(
7621       (vector long long)__a, (vector long long)__b,
7622       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
7623                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
7624 #endif
7625 }
7626 #endif
7627
7628 /* vec_packpx */
7629
7630 static __inline__ vector pixel __attribute__((__always_inline__))
7631 vec_packpx(vector unsigned int __a, vector unsigned int __b) {
7632 #ifdef __LITTLE_ENDIAN__
7633   return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
7634 #else
7635   return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
7636 #endif
7637 }
7638
7639 /* vec_vpkpx */
7640
7641 static __inline__ vector pixel __attribute__((__always_inline__))
7642 vec_vpkpx(vector unsigned int __a, vector unsigned int __b) {
7643 #ifdef __LITTLE_ENDIAN__
7644   return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
7645 #else
7646   return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
7647 #endif
7648 }
7649
7650 /* vec_packs */
7651
7652 static __inline__ vector signed char __ATTRS_o_ai vec_packs(vector short __a,
7653                                                             vector short __b) {
7654 #ifdef __LITTLE_ENDIAN__
7655   return __builtin_altivec_vpkshss(__b, __a);
7656 #else
7657   return __builtin_altivec_vpkshss(__a, __b);
7658 #endif
7659 }
7660
7661 static __inline__ vector unsigned char __ATTRS_o_ai
7662 vec_packs(vector unsigned short __a, vector unsigned short __b) {
7663 #ifdef __LITTLE_ENDIAN__
7664   return __builtin_altivec_vpkuhus(__b, __a);
7665 #else
7666   return __builtin_altivec_vpkuhus(__a, __b);
7667 #endif
7668 }
7669
7670 static __inline__ vector signed short __ATTRS_o_ai vec_packs(vector int __a,
7671                                                              vector int __b) {
7672 #ifdef __LITTLE_ENDIAN__
7673   return __builtin_altivec_vpkswss(__b, __a);
7674 #else
7675   return __builtin_altivec_vpkswss(__a, __b);
7676 #endif
7677 }
7678
7679 static __inline__ vector unsigned short __ATTRS_o_ai
7680 vec_packs(vector unsigned int __a, vector unsigned int __b) {
7681 #ifdef __LITTLE_ENDIAN__
7682   return __builtin_altivec_vpkuwus(__b, __a);
7683 #else
7684   return __builtin_altivec_vpkuwus(__a, __b);
7685 #endif
7686 }
7687
7688 #ifdef __POWER8_VECTOR__
7689 static __inline__ vector int __ATTRS_o_ai vec_packs(vector long long __a,
7690                                                     vector long long __b) {
7691 #ifdef __LITTLE_ENDIAN__
7692   return __builtin_altivec_vpksdss(__b, __a);
7693 #else
7694   return __builtin_altivec_vpksdss(__a, __b);
7695 #endif
7696 }
7697
7698 static __inline__ vector unsigned int __ATTRS_o_ai
7699 vec_packs(vector unsigned long long __a, vector unsigned long long __b) {
7700 #ifdef __LITTLE_ENDIAN__
7701   return __builtin_altivec_vpkudus(__b, __a);
7702 #else
7703   return __builtin_altivec_vpkudus(__a, __b);
7704 #endif
7705 }
7706 #endif
7707
7708 /* vec_vpkshss */
7709
7710 static __inline__ vector signed char __attribute__((__always_inline__))
7711 vec_vpkshss(vector short __a, vector short __b) {
7712 #ifdef __LITTLE_ENDIAN__
7713   return __builtin_altivec_vpkshss(__b, __a);
7714 #else
7715   return __builtin_altivec_vpkshss(__a, __b);
7716 #endif
7717 }
7718
7719 /* vec_vpksdss */
7720
7721 #ifdef __POWER8_VECTOR__
7722 static __inline__ vector int __ATTRS_o_ai vec_vpksdss(vector long long __a,
7723                                                       vector long long __b) {
7724 #ifdef __LITTLE_ENDIAN__
7725   return __builtin_altivec_vpksdss(__b, __a);
7726 #else
7727   return __builtin_altivec_vpksdss(__a, __b);
7728 #endif
7729 }
7730 #endif
7731
7732 /* vec_vpkuhus */
7733
7734 static __inline__ vector unsigned char __attribute__((__always_inline__))
7735 vec_vpkuhus(vector unsigned short __a, vector unsigned short __b) {
7736 #ifdef __LITTLE_ENDIAN__
7737   return __builtin_altivec_vpkuhus(__b, __a);
7738 #else
7739   return __builtin_altivec_vpkuhus(__a, __b);
7740 #endif
7741 }
7742
7743 /* vec_vpkudus */
7744
7745 #ifdef __POWER8_VECTOR__
7746 static __inline__ vector unsigned int __attribute__((__always_inline__))
7747 vec_vpkudus(vector unsigned long long __a, vector unsigned long long __b) {
7748 #ifdef __LITTLE_ENDIAN__
7749   return __builtin_altivec_vpkudus(__b, __a);
7750 #else
7751   return __builtin_altivec_vpkudus(__a, __b);
7752 #endif
7753 }
7754 #endif
7755
7756 /* vec_vpkswss */
7757
7758 static __inline__ vector signed short __attribute__((__always_inline__))
7759 vec_vpkswss(vector int __a, vector int __b) {
7760 #ifdef __LITTLE_ENDIAN__
7761   return __builtin_altivec_vpkswss(__b, __a);
7762 #else
7763   return __builtin_altivec_vpkswss(__a, __b);
7764 #endif
7765 }
7766
7767 /* vec_vpkuwus */
7768
7769 static __inline__ vector unsigned short __attribute__((__always_inline__))
7770 vec_vpkuwus(vector unsigned int __a, vector unsigned int __b) {
7771 #ifdef __LITTLE_ENDIAN__
7772   return __builtin_altivec_vpkuwus(__b, __a);
7773 #else
7774   return __builtin_altivec_vpkuwus(__a, __b);
7775 #endif
7776 }
7777
7778 /* vec_packsu */
7779
7780 static __inline__ vector unsigned char __ATTRS_o_ai
7781 vec_packsu(vector short __a, vector short __b) {
7782 #ifdef __LITTLE_ENDIAN__
7783   return __builtin_altivec_vpkshus(__b, __a);
7784 #else
7785   return __builtin_altivec_vpkshus(__a, __b);
7786 #endif
7787 }
7788
7789 static __inline__ vector unsigned char __ATTRS_o_ai
7790 vec_packsu(vector unsigned short __a, vector unsigned short __b) {
7791 #ifdef __LITTLE_ENDIAN__
7792   return __builtin_altivec_vpkuhus(__b, __a);
7793 #else
7794   return __builtin_altivec_vpkuhus(__a, __b);
7795 #endif
7796 }
7797
7798 static __inline__ vector unsigned short __ATTRS_o_ai
7799 vec_packsu(vector int __a, vector int __b) {
7800 #ifdef __LITTLE_ENDIAN__
7801   return __builtin_altivec_vpkswus(__b, __a);
7802 #else
7803   return __builtin_altivec_vpkswus(__a, __b);
7804 #endif
7805 }
7806
7807 static __inline__ vector unsigned short __ATTRS_o_ai
7808 vec_packsu(vector unsigned int __a, vector unsigned int __b) {
7809 #ifdef __LITTLE_ENDIAN__
7810   return __builtin_altivec_vpkuwus(__b, __a);
7811 #else
7812   return __builtin_altivec_vpkuwus(__a, __b);
7813 #endif
7814 }
7815
7816 #ifdef __POWER8_VECTOR__
7817 static __inline__ vector unsigned int __ATTRS_o_ai
7818 vec_packsu(vector long long __a, vector long long __b) {
7819 #ifdef __LITTLE_ENDIAN__
7820   return __builtin_altivec_vpksdus(__b, __a);
7821 #else
7822   return __builtin_altivec_vpksdus(__a, __b);
7823 #endif
7824 }
7825
7826 static __inline__ vector unsigned int __ATTRS_o_ai
7827 vec_packsu(vector unsigned long long __a, vector unsigned long long __b) {
7828 #ifdef __LITTLE_ENDIAN__
7829   return __builtin_altivec_vpkudus(__b, __a);
7830 #else
7831   return __builtin_altivec_vpkudus(__a, __b);
7832 #endif
7833 }
7834 #endif
7835
7836 /* vec_vpkshus */
7837
7838 static __inline__ vector unsigned char __ATTRS_o_ai
7839 vec_vpkshus(vector short __a, vector short __b) {
7840 #ifdef __LITTLE_ENDIAN__
7841   return __builtin_altivec_vpkshus(__b, __a);
7842 #else
7843   return __builtin_altivec_vpkshus(__a, __b);
7844 #endif
7845 }
7846
7847 static __inline__ vector unsigned char __ATTRS_o_ai
7848 vec_vpkshus(vector unsigned short __a, vector unsigned short __b) {
7849 #ifdef __LITTLE_ENDIAN__
7850   return __builtin_altivec_vpkuhus(__b, __a);
7851 #else
7852   return __builtin_altivec_vpkuhus(__a, __b);
7853 #endif
7854 }
7855
7856 /* vec_vpkswus */
7857
7858 static __inline__ vector unsigned short __ATTRS_o_ai
7859 vec_vpkswus(vector int __a, vector int __b) {
7860 #ifdef __LITTLE_ENDIAN__
7861   return __builtin_altivec_vpkswus(__b, __a);
7862 #else
7863   return __builtin_altivec_vpkswus(__a, __b);
7864 #endif
7865 }
7866
7867 static __inline__ vector unsigned short __ATTRS_o_ai
7868 vec_vpkswus(vector unsigned int __a, vector unsigned int __b) {
7869 #ifdef __LITTLE_ENDIAN__
7870   return __builtin_altivec_vpkuwus(__b, __a);
7871 #else
7872   return __builtin_altivec_vpkuwus(__a, __b);
7873 #endif
7874 }
7875
7876 /* vec_vpksdus */
7877
7878 #ifdef __POWER8_VECTOR__
7879 static __inline__ vector unsigned int __ATTRS_o_ai
7880 vec_vpksdus(vector long long __a, vector long long __b) {
7881 #ifdef __LITTLE_ENDIAN__
7882   return __builtin_altivec_vpksdus(__b, __a);
7883 #else
7884   return __builtin_altivec_vpksdus(__a, __b);
7885 #endif
7886 }
7887 #endif
7888
7889 /* vec_perm */
7890
7891 // The vperm instruction is defined architecturally with a big-endian bias.
7892 // For little endian, we swap the input operands and invert the permute
7893 // control vector.  Only the rightmost 5 bits matter, so we could use
7894 // a vector of all 31s instead of all 255s to perform the inversion.
7895 // However, when the PCV is not a constant, using 255 has an advantage
7896 // in that the vec_xor can be recognized as a vec_nor (and for P8 and
7897 // later, possibly a vec_nand).
7898
7899 static __inline__ vector signed char __ATTRS_o_ai vec_perm(
7900     vector signed char __a, vector signed char __b, vector unsigned char __c) {
7901 #ifdef __LITTLE_ENDIAN__
7902   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7903                               255, 255, 255, 255, 255, 255, 255, 255};
7904   __d = vec_xor(__c, __d);
7905   return (vector signed char)__builtin_altivec_vperm_4si((vector int)__b,
7906                                                          (vector int)__a, __d);
7907 #else
7908   return (vector signed char)__builtin_altivec_vperm_4si((vector int)__a,
7909                                                          (vector int)__b, __c);
7910 #endif
7911 }
7912
7913 static __inline__ vector unsigned char __ATTRS_o_ai
7914 vec_perm(vector unsigned char __a, vector unsigned char __b,
7915          vector unsigned char __c) {
7916 #ifdef __LITTLE_ENDIAN__
7917   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7918                               255, 255, 255, 255, 255, 255, 255, 255};
7919   __d = vec_xor(__c, __d);
7920   return (vector unsigned char)__builtin_altivec_vperm_4si(
7921       (vector int)__b, (vector int)__a, __d);
7922 #else
7923   return (vector unsigned char)__builtin_altivec_vperm_4si(
7924       (vector int)__a, (vector int)__b, __c);
7925 #endif
7926 }
7927
7928 static __inline__ vector bool char __ATTRS_o_ai
7929 vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c) {
7930 #ifdef __LITTLE_ENDIAN__
7931   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7932                               255, 255, 255, 255, 255, 255, 255, 255};
7933   __d = vec_xor(__c, __d);
7934   return (vector bool char)__builtin_altivec_vperm_4si((vector int)__b,
7935                                                        (vector int)__a, __d);
7936 #else
7937   return (vector bool char)__builtin_altivec_vperm_4si((vector int)__a,
7938                                                        (vector int)__b, __c);
7939 #endif
7940 }
7941
7942 static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
7943                                                      vector signed short __b,
7944                                                      vector unsigned char __c) {
7945 #ifdef __LITTLE_ENDIAN__
7946   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7947                               255, 255, 255, 255, 255, 255, 255, 255};
7948   __d = vec_xor(__c, __d);
7949   return (vector signed short)__builtin_altivec_vperm_4si((vector int)__b,
7950                                                           (vector int)__a, __d);
7951 #else
7952   return (vector signed short)__builtin_altivec_vperm_4si((vector int)__a,
7953                                                           (vector int)__b, __c);
7954 #endif
7955 }
7956
7957 static __inline__ vector unsigned short __ATTRS_o_ai
7958 vec_perm(vector unsigned short __a, vector unsigned short __b,
7959          vector unsigned char __c) {
7960 #ifdef __LITTLE_ENDIAN__
7961   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7962                               255, 255, 255, 255, 255, 255, 255, 255};
7963   __d = vec_xor(__c, __d);
7964   return (vector unsigned short)__builtin_altivec_vperm_4si(
7965       (vector int)__b, (vector int)__a, __d);
7966 #else
7967   return (vector unsigned short)__builtin_altivec_vperm_4si(
7968       (vector int)__a, (vector int)__b, __c);
7969 #endif
7970 }
7971
7972 static __inline__ vector bool short __ATTRS_o_ai vec_perm(
7973     vector bool short __a, vector bool short __b, vector unsigned char __c) {
7974 #ifdef __LITTLE_ENDIAN__
7975   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7976                               255, 255, 255, 255, 255, 255, 255, 255};
7977   __d = vec_xor(__c, __d);
7978   return (vector bool short)__builtin_altivec_vperm_4si((vector int)__b,
7979                                                         (vector int)__a, __d);
7980 #else
7981   return (vector bool short)__builtin_altivec_vperm_4si((vector int)__a,
7982                                                         (vector int)__b, __c);
7983 #endif
7984 }
7985
7986 static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
7987                                                      vector pixel __b,
7988                                                      vector unsigned char __c) {
7989 #ifdef __LITTLE_ENDIAN__
7990   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7991                               255, 255, 255, 255, 255, 255, 255, 255};
7992   __d = vec_xor(__c, __d);
7993   return (vector pixel)__builtin_altivec_vperm_4si((vector int)__b,
7994                                                    (vector int)__a, __d);
7995 #else
7996   return (vector pixel)__builtin_altivec_vperm_4si((vector int)__a,
7997                                                    (vector int)__b, __c);
7998 #endif
7999 }
8000
8001 static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
8002                                                    vector signed int __b,
8003                                                    vector unsigned char __c) {
8004 #ifdef __LITTLE_ENDIAN__
8005   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8006                               255, 255, 255, 255, 255, 255, 255, 255};
8007   __d = vec_xor(__c, __d);
8008   return (vector signed int)__builtin_altivec_vperm_4si(__b, __a, __d);
8009 #else
8010   return (vector signed int)__builtin_altivec_vperm_4si(__a, __b, __c);
8011 #endif
8012 }
8013
8014 static __inline__ vector unsigned int __ATTRS_o_ai
8015 vec_perm(vector unsigned int __a, vector unsigned int __b,
8016          vector unsigned char __c) {
8017 #ifdef __LITTLE_ENDIAN__
8018   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8019                               255, 255, 255, 255, 255, 255, 255, 255};
8020   __d = vec_xor(__c, __d);
8021   return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__b,
8022                                                           (vector int)__a, __d);
8023 #else
8024   return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__a,
8025                                                           (vector int)__b, __c);
8026 #endif
8027 }
8028
8029 static __inline__ vector bool int __ATTRS_o_ai
8030 vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
8031 #ifdef __LITTLE_ENDIAN__
8032   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8033                               255, 255, 255, 255, 255, 255, 255, 255};
8034   __d = vec_xor(__c, __d);
8035   return (vector bool int)__builtin_altivec_vperm_4si((vector int)__b,
8036                                                       (vector int)__a, __d);
8037 #else
8038   return (vector bool int)__builtin_altivec_vperm_4si((vector int)__a,
8039                                                       (vector int)__b, __c);
8040 #endif
8041 }
8042
8043 static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
8044                                                      vector float __b,
8045                                                      vector unsigned char __c) {
8046 #ifdef __LITTLE_ENDIAN__
8047   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8048                               255, 255, 255, 255, 255, 255, 255, 255};
8049   __d = vec_xor(__c, __d);
8050   return (vector float)__builtin_altivec_vperm_4si((vector int)__b,
8051                                                    (vector int)__a, __d);
8052 #else
8053   return (vector float)__builtin_altivec_vperm_4si((vector int)__a,
8054                                                    (vector int)__b, __c);
8055 #endif
8056 }
8057
8058 #ifdef __VSX__
8059 static __inline__ vector long long __ATTRS_o_ai
8060 vec_perm(vector signed long long __a, vector signed long long __b,
8061          vector unsigned char __c) {
8062 #ifdef __LITTLE_ENDIAN__
8063   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8064                               255, 255, 255, 255, 255, 255, 255, 255};
8065   __d = vec_xor(__c, __d);
8066   return (vector signed long long)__builtin_altivec_vperm_4si(
8067       (vector int)__b, (vector int)__a, __d);
8068 #else
8069   return (vector signed long long)__builtin_altivec_vperm_4si(
8070       (vector int)__a, (vector int)__b, __c);
8071 #endif
8072 }
8073
8074 static __inline__ vector unsigned long long __ATTRS_o_ai
8075 vec_perm(vector unsigned long long __a, vector unsigned long long __b,
8076          vector unsigned char __c) {
8077 #ifdef __LITTLE_ENDIAN__
8078   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8079                               255, 255, 255, 255, 255, 255, 255, 255};
8080   __d = vec_xor(__c, __d);
8081   return (vector unsigned long long)__builtin_altivec_vperm_4si(
8082       (vector int)__b, (vector int)__a, __d);
8083 #else
8084   return (vector unsigned long long)__builtin_altivec_vperm_4si(
8085       (vector int)__a, (vector int)__b, __c);
8086 #endif
8087 }
8088
8089 static __inline__ vector bool long long __ATTRS_o_ai
8090 vec_perm(vector bool long long __a, vector bool long long __b,
8091          vector unsigned char __c) {
8092 #ifdef __LITTLE_ENDIAN__
8093   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8094                               255, 255, 255, 255, 255, 255, 255, 255};
8095   __d = vec_xor(__c, __d);
8096   return (vector bool long long)__builtin_altivec_vperm_4si(
8097       (vector int)__b, (vector int)__a, __d);
8098 #else
8099   return (vector bool long long)__builtin_altivec_vperm_4si(
8100       (vector int)__a, (vector int)__b, __c);
8101 #endif
8102 }
8103
8104 static __inline__ vector double __ATTRS_o_ai
8105 vec_perm(vector double __a, vector double __b, vector unsigned char __c) {
8106 #ifdef __LITTLE_ENDIAN__
8107   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
8108                               255, 255, 255, 255, 255, 255, 255, 255};
8109   __d = vec_xor(__c, __d);
8110   return (vector double)__builtin_altivec_vperm_4si((vector int)__b,
8111                                                     (vector int)__a, __d);
8112 #else
8113   return (vector double)__builtin_altivec_vperm_4si((vector int)__a,
8114                                                     (vector int)__b, __c);
8115 #endif
8116 }
8117 #endif
8118
8119 /* vec_vperm */
8120
8121 static __inline__ vector signed char __ATTRS_o_ai vec_vperm(
8122     vector signed char __a, vector signed char __b, vector unsigned char __c) {
8123   return vec_perm(__a, __b, __c);
8124 }
8125
8126 static __inline__ vector unsigned char __ATTRS_o_ai
8127 vec_vperm(vector unsigned char __a, vector unsigned char __b,
8128           vector unsigned char __c) {
8129   return vec_perm(__a, __b, __c);
8130 }
8131
8132 static __inline__ vector bool char __ATTRS_o_ai vec_vperm(
8133     vector bool char __a, vector bool char __b, vector unsigned char __c) {
8134   return vec_perm(__a, __b, __c);
8135 }
8136
8137 static __inline__ vector short __ATTRS_o_ai
8138 vec_vperm(vector short __a, vector short __b, vector unsigned char __c) {
8139   return vec_perm(__a, __b, __c);
8140 }
8141
8142 static __inline__ vector unsigned short __ATTRS_o_ai
8143 vec_vperm(vector unsigned short __a, vector unsigned short __b,
8144           vector unsigned char __c) {
8145   return vec_perm(__a, __b, __c);
8146 }
8147
8148 static __inline__ vector bool short __ATTRS_o_ai vec_vperm(
8149     vector bool short __a, vector bool short __b, vector unsigned char __c) {
8150   return vec_perm(__a, __b, __c);
8151 }
8152
8153 static __inline__ vector pixel __ATTRS_o_ai
8154 vec_vperm(vector pixel __a, vector pixel __b, vector unsigned char __c) {
8155   return vec_perm(__a, __b, __c);
8156 }
8157
8158 static __inline__ vector int __ATTRS_o_ai vec_vperm(vector int __a,
8159                                                     vector int __b,
8160                                                     vector unsigned char __c) {
8161   return vec_perm(__a, __b, __c);
8162 }
8163
8164 static __inline__ vector unsigned int __ATTRS_o_ai
8165 vec_vperm(vector unsigned int __a, vector unsigned int __b,
8166           vector unsigned char __c) {
8167   return vec_perm(__a, __b, __c);
8168 }
8169
8170 static __inline__ vector bool int __ATTRS_o_ai
8171 vec_vperm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
8172   return vec_perm(__a, __b, __c);
8173 }
8174
8175 static __inline__ vector float __ATTRS_o_ai
8176 vec_vperm(vector float __a, vector float __b, vector unsigned char __c) {
8177   return vec_perm(__a, __b, __c);
8178 }
8179
8180 #ifdef __VSX__
8181 static __inline__ vector long long __ATTRS_o_ai vec_vperm(
8182     vector long long __a, vector long long __b, vector unsigned char __c) {
8183   return vec_perm(__a, __b, __c);
8184 }
8185
8186 static __inline__ vector unsigned long long __ATTRS_o_ai
8187 vec_vperm(vector unsigned long long __a, vector unsigned long long __b,
8188           vector unsigned char __c) {
8189   return vec_perm(__a, __b, __c);
8190 }
8191
8192 static __inline__ vector double __ATTRS_o_ai
8193 vec_vperm(vector double __a, vector double __b, vector unsigned char __c) {
8194   return vec_perm(__a, __b, __c);
8195 }
8196 #endif
8197
8198 /* vec_re */
8199
8200 static __inline__ vector float __ATTRS_o_ai vec_re(vector float __a) {
8201 #ifdef __VSX__
8202   return __builtin_vsx_xvresp(__a);
8203 #else
8204   return __builtin_altivec_vrefp(__a);
8205 #endif
8206 }
8207
8208 #ifdef __VSX__
8209 static __inline__ vector double __ATTRS_o_ai vec_re(vector double __a) {
8210   return __builtin_vsx_xvredp(__a);
8211 }
8212 #endif
8213
8214 /* vec_vrefp */
8215
8216 static __inline__ vector float __attribute__((__always_inline__))
8217 vec_vrefp(vector float __a) {
8218   return __builtin_altivec_vrefp(__a);
8219 }
8220
8221 /* vec_rl */
8222
8223 static __inline__ vector signed char __ATTRS_o_ai
8224 vec_rl(vector signed char __a, vector unsigned char __b) {
8225   return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
8226 }
8227
8228 static __inline__ vector unsigned char __ATTRS_o_ai
8229 vec_rl(vector unsigned char __a, vector unsigned char __b) {
8230   return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
8231 }
8232
8233 static __inline__ vector short __ATTRS_o_ai vec_rl(vector short __a,
8234                                                    vector unsigned short __b) {
8235   return __builtin_altivec_vrlh(__a, __b);
8236 }
8237
8238 static __inline__ vector unsigned short __ATTRS_o_ai
8239 vec_rl(vector unsigned short __a, vector unsigned short __b) {
8240   return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
8241 }
8242
8243 static __inline__ vector int __ATTRS_o_ai vec_rl(vector int __a,
8244                                                  vector unsigned int __b) {
8245   return __builtin_altivec_vrlw(__a, __b);
8246 }
8247
8248 static __inline__ vector unsigned int __ATTRS_o_ai
8249 vec_rl(vector unsigned int __a, vector unsigned int __b) {
8250   return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
8251 }
8252
8253 #ifdef __POWER8_VECTOR__
8254 static __inline__ vector signed long long __ATTRS_o_ai
8255 vec_rl(vector signed long long __a, vector unsigned long long __b) {
8256   return __builtin_altivec_vrld(__a, __b);
8257 }
8258
8259 static __inline__ vector unsigned long long __ATTRS_o_ai
8260 vec_rl(vector unsigned long long __a, vector unsigned long long __b) {
8261   return __builtin_altivec_vrld(__a, __b);
8262 }
8263 #endif
8264
8265 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
8266 static __inline__ vector signed __int128 __ATTRS_o_ai
8267 vec_rl(vector signed __int128 __a, vector unsigned __int128 __b) {
8268   return (__b << __a)|(__b >> ((__CHAR_BIT__ * sizeof(vector signed __int128)) - __a));
8269 }
8270
8271 static __inline__ vector unsigned __int128 __ATTRS_o_ai
8272 vec_rl(vector unsigned __int128 __a, vector unsigned __int128 __b) {
8273   return (__b << __a)|(__b >> ((__CHAR_BIT__ * sizeof(vector unsigned __int128)) - __a));
8274 }
8275 #endif
8276
8277 /* vec_rlmi */
8278 #ifdef __POWER9_VECTOR__
8279 static __inline__ vector unsigned int __ATTRS_o_ai
8280 vec_rlmi(vector unsigned int __a, vector unsigned int __b,
8281          vector unsigned int __c) {
8282   return __builtin_altivec_vrlwmi(__a, __c, __b);
8283 }
8284
8285 static __inline__ vector unsigned long long __ATTRS_o_ai
8286 vec_rlmi(vector unsigned long long __a, vector unsigned long long __b,
8287          vector unsigned long long __c) {
8288   return __builtin_altivec_vrldmi(__a, __c, __b);
8289 }
8290 #endif
8291
8292 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
8293 static __inline__ vector unsigned __int128 __ATTRS_o_ai
8294 vec_rlmi(vector unsigned __int128 __a, vector unsigned __int128 __b,
8295          vector unsigned __int128 __c) {
8296   return __builtin_altivec_vrlqmi(__a, __c, __b);
8297 }
8298
8299 static __inline__ vector signed __int128 __ATTRS_o_ai
8300 vec_rlmi(vector signed __int128 __a, vector signed __int128 __b,
8301          vector signed __int128 __c) {
8302   return __builtin_altivec_vrlqmi(__a, __c, __b);
8303 }
8304 #endif
8305
8306 /* vec_rlnm */
8307 #ifdef __POWER9_VECTOR__
8308 static __inline__ vector unsigned int __ATTRS_o_ai
8309 vec_rlnm(vector unsigned int __a, vector unsigned int __b,
8310          vector unsigned int __c) {
8311   vector unsigned int OneByte = { 0x8, 0x8, 0x8, 0x8 };
8312   return __builtin_altivec_vrlwnm(__a, ((__c << OneByte) | __b));
8313 }
8314
8315 static __inline__ vector unsigned long long __ATTRS_o_ai
8316 vec_rlnm(vector unsigned long long __a, vector unsigned long long __b,
8317          vector unsigned long long __c) {
8318   vector unsigned long long OneByte = { 0x8, 0x8 };
8319   return __builtin_altivec_vrldnm(__a, ((__c << OneByte) | __b));
8320 }
8321 #endif
8322
8323 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
8324 static __inline__ vector unsigned __int128 __ATTRS_o_ai
8325 vec_rlnm(vector unsigned __int128 __a, vector unsigned __int128 __b,
8326          vector unsigned __int128 __c) {
8327   // Merge __b and __c using an appropriate shuffle.
8328   vector unsigned char TmpB = (vector unsigned char)__b;
8329   vector unsigned char TmpC = (vector unsigned char)__c;
8330   vector unsigned char MaskAndShift =
8331 #ifdef __LITTLE_ENDIAN__
8332       __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, -1, -1, -1, 16, 0,
8333                               1, -1, -1, -1, -1, -1);
8334 #else
8335       __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, 31, 30, 15, -1,
8336                               -1, -1, -1, -1, -1, -1, -1);
8337 #endif
8338    return __builtin_altivec_vrlqnm(__a, (vector unsigned __int128) MaskAndShift);
8339 }
8340
8341 static __inline__ vector signed __int128 __ATTRS_o_ai
8342 vec_rlnm(vector signed __int128 __a, vector signed __int128 __b,
8343          vector signed __int128 __c) {
8344   // Merge __b and __c using an appropriate shuffle.
8345   vector unsigned char TmpB = (vector unsigned char)__b;
8346   vector unsigned char TmpC = (vector unsigned char)__c;
8347   vector unsigned char MaskAndShift =
8348 #ifdef __LITTLE_ENDIAN__
8349       __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, -1, -1, -1, 16, 0,
8350                               1, -1, -1, -1, -1, -1);
8351 #else
8352       __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, 31, 30, 15, -1,
8353                               -1, -1, -1, -1, -1, -1, -1);
8354 #endif
8355   return __builtin_altivec_vrlqnm(__a, (vector unsigned __int128) MaskAndShift);
8356 }
8357 #endif
8358
8359 /* vec_vrlb */
8360
8361 static __inline__ vector signed char __ATTRS_o_ai
8362 vec_vrlb(vector signed char __a, vector unsigned char __b) {
8363   return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
8364 }
8365
8366 static __inline__ vector unsigned char __ATTRS_o_ai
8367 vec_vrlb(vector unsigned char __a, vector unsigned char __b) {
8368   return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
8369 }
8370
8371 /* vec_vrlh */
8372
8373 static __inline__ vector short __ATTRS_o_ai
8374 vec_vrlh(vector short __a, vector unsigned short __b) {
8375   return __builtin_altivec_vrlh(__a, __b);
8376 }
8377
8378 static __inline__ vector unsigned short __ATTRS_o_ai
8379 vec_vrlh(vector unsigned short __a, vector unsigned short __b) {
8380   return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
8381 }
8382
8383 /* vec_vrlw */
8384
8385 static __inline__ vector int __ATTRS_o_ai vec_vrlw(vector int __a,
8386                                                    vector unsigned int __b) {
8387   return __builtin_altivec_vrlw(__a, __b);
8388 }
8389
8390 static __inline__ vector unsigned int __ATTRS_o_ai
8391 vec_vrlw(vector unsigned int __a, vector unsigned int __b) {
8392   return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
8393 }
8394
8395 /* vec_round */
8396
8397 static __inline__ vector float __ATTRS_o_ai vec_round(vector float __a) {
8398   return __builtin_altivec_vrfin(__a);
8399 }
8400
8401 #ifdef __VSX__
8402 static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) {
8403   return __builtin_vsx_xvrdpi(__a);
8404 }
8405
8406 /* vec_rint */
8407
8408 static __inline__ vector float __ATTRS_o_ai vec_rint(vector float __a) {
8409   return __builtin_vsx_xvrspic(__a);
8410 }
8411
8412 static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a) {
8413   return __builtin_vsx_xvrdpic(__a);
8414 }
8415
8416 /* vec_roundc */
8417
8418 static __inline__ vector float __ATTRS_o_ai vec_roundc(vector float __a) {
8419   return __builtin_vsx_xvrspic(__a);
8420 }
8421
8422 static __inline__ vector double __ATTRS_o_ai vec_roundc(vector double __a) {
8423   return __builtin_vsx_xvrdpic(__a);
8424 }
8425
8426 /* vec_nearbyint */
8427
8428 static __inline__ vector float __ATTRS_o_ai vec_nearbyint(vector float __a) {
8429   return __builtin_vsx_xvrspi(__a);
8430 }
8431
8432 static __inline__ vector double __ATTRS_o_ai vec_nearbyint(vector double __a) {
8433   return __builtin_vsx_xvrdpi(__a);
8434 }
8435 #endif
8436
8437 /* vec_vrfin */
8438
8439 static __inline__ vector float __attribute__((__always_inline__))
8440 vec_vrfin(vector float __a) {
8441   return __builtin_altivec_vrfin(__a);
8442 }
8443
8444 /* vec_sqrt */
8445
8446 #ifdef __VSX__
8447 static __inline__ vector float __ATTRS_o_ai vec_sqrt(vector float __a) {
8448   return __builtin_vsx_xvsqrtsp(__a);
8449 }
8450
8451 static __inline__ vector double __ATTRS_o_ai vec_sqrt(vector double __a) {
8452   return __builtin_vsx_xvsqrtdp(__a);
8453 }
8454 #endif
8455
8456 /* vec_rsqrte */
8457
8458 static __inline__ vector float __ATTRS_o_ai vec_rsqrte(vector float __a) {
8459 #ifdef __VSX__
8460   return __builtin_vsx_xvrsqrtesp(__a);
8461 #else
8462   return __builtin_altivec_vrsqrtefp(__a);
8463 #endif
8464 }
8465
8466 #ifdef __VSX__
8467 static __inline__ vector double __ATTRS_o_ai vec_rsqrte(vector double __a) {
8468   return __builtin_vsx_xvrsqrtedp(__a);
8469 }
8470 #endif
8471
8472 static vector float __ATTRS_o_ai vec_rsqrt(vector float __a) {
8473   return __builtin_ppc_rsqrtf(__a);
8474 }
8475
8476 #ifdef __VSX__
8477 static vector double __ATTRS_o_ai vec_rsqrt(vector double __a) {
8478   return __builtin_ppc_rsqrtd(__a);
8479 }
8480 #endif
8481
8482 /* vec_vrsqrtefp */
8483
8484 static __inline__ __vector float __attribute__((__always_inline__))
8485 vec_vrsqrtefp(vector float __a) {
8486   return __builtin_altivec_vrsqrtefp(__a);
8487 }
8488
8489 /* vec_xvtsqrt */
8490
8491 #ifdef __VSX__
8492 static __inline__ int __ATTRS_o_ai vec_test_swsqrt(vector double __a) {
8493   return __builtin_vsx_xvtsqrtdp(__a);
8494 }
8495
8496 static __inline__ int __ATTRS_o_ai vec_test_swsqrts(vector float __a) {
8497   return __builtin_vsx_xvtsqrtsp(__a);
8498 }
8499 #endif
8500
8501 /* vec_sel */
8502
8503 #define __builtin_altivec_vsel_4si vec_sel
8504
8505 static __inline__ vector signed char __ATTRS_o_ai vec_sel(
8506     vector signed char __a, vector signed char __b, vector unsigned char __c) {
8507   return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
8508 }
8509
8510 static __inline__ vector signed char __ATTRS_o_ai
8511 vec_sel(vector signed char __a, vector signed char __b, vector bool char __c) {
8512   return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
8513 }
8514
8515 static __inline__ vector unsigned char __ATTRS_o_ai
8516 vec_sel(vector unsigned char __a, vector unsigned char __b,
8517         vector unsigned char __c) {
8518   return (__a & ~__c) | (__b & __c);
8519 }
8520
8521 static __inline__ vector unsigned char __ATTRS_o_ai vec_sel(
8522     vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
8523   return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
8524 }
8525
8526 static __inline__ vector bool char __ATTRS_o_ai
8527 vec_sel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
8528   return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
8529 }
8530
8531 static __inline__ vector bool char __ATTRS_o_ai vec_sel(vector bool char __a,
8532                                                         vector bool char __b,
8533                                                         vector bool char __c) {
8534   return (__a & ~__c) | (__b & __c);
8535 }
8536
8537 static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
8538                                                     vector short __b,
8539                                                     vector unsigned short __c) {
8540   return (__a & ~(vector short)__c) | (__b & (vector short)__c);
8541 }
8542
8543 static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
8544                                                     vector short __b,
8545                                                     vector bool short __c) {
8546   return (__a & ~(vector short)__c) | (__b & (vector short)__c);
8547 }
8548
8549 static __inline__ vector unsigned short __ATTRS_o_ai
8550 vec_sel(vector unsigned short __a, vector unsigned short __b,
8551         vector unsigned short __c) {
8552   return (__a & ~__c) | (__b & __c);
8553 }
8554
8555 static __inline__ vector unsigned short __ATTRS_o_ai
8556 vec_sel(vector unsigned short __a, vector unsigned short __b,
8557         vector bool short __c) {
8558   return (__a & ~(vector unsigned short)__c) |
8559          (__b & (vector unsigned short)__c);
8560 }
8561
8562 static __inline__ vector bool short __ATTRS_o_ai vec_sel(
8563     vector bool short __a, vector bool short __b, vector unsigned short __c) {
8564   return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
8565 }
8566
8567 static __inline__ vector bool short __ATTRS_o_ai
8568 vec_sel(vector bool short __a, vector bool short __b, vector bool short __c) {
8569   return (__a & ~__c) | (__b & __c);
8570 }
8571
8572 static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
8573                                                   vector int __b,
8574                                                   vector unsigned int __c) {
8575   return (__a & ~(vector int)__c) | (__b & (vector int)__c);
8576 }
8577
8578 static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
8579                                                   vector int __b,
8580                                                   vector bool int __c) {
8581   return (__a & ~(vector int)__c) | (__b & (vector int)__c);
8582 }
8583
8584 static __inline__ vector unsigned int __ATTRS_o_ai vec_sel(
8585     vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
8586   return (__a & ~__c) | (__b & __c);
8587 }
8588
8589 static __inline__ vector unsigned int __ATTRS_o_ai
8590 vec_sel(vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
8591   return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
8592 }
8593
8594 static __inline__ vector bool int __ATTRS_o_ai
8595 vec_sel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
8596   return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
8597 }
8598
8599 static __inline__ vector bool int __ATTRS_o_ai vec_sel(vector bool int __a,
8600                                                        vector bool int __b,
8601                                                        vector bool int __c) {
8602   return (__a & ~__c) | (__b & __c);
8603 }
8604
8605 static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
8606                                                     vector float __b,
8607                                                     vector unsigned int __c) {
8608   vector int __res = ((vector int)__a & ~(vector int)__c) |
8609                      ((vector int)__b & (vector int)__c);
8610   return (vector float)__res;
8611 }
8612
8613 static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
8614                                                     vector float __b,
8615                                                     vector bool int __c) {
8616   vector int __res = ((vector int)__a & ~(vector int)__c) |
8617                      ((vector int)__b & (vector int)__c);
8618   return (vector float)__res;
8619 }
8620
8621 #ifdef __VSX__
8622 static __inline__ vector double __ATTRS_o_ai
8623 vec_sel(vector double __a, vector double __b, vector bool long long __c) {
8624   vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
8625                            ((vector long long)__b & (vector long long)__c);
8626   return (vector double)__res;
8627 }
8628
8629 static __inline__ vector double __ATTRS_o_ai
8630 vec_sel(vector double __a, vector double __b, vector unsigned long long __c) {
8631   vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
8632                            ((vector long long)__b & (vector long long)__c);
8633   return (vector double)__res;
8634 }
8635
8636 static __inline__ vector bool long long __ATTRS_o_ai
8637 vec_sel(vector bool long long __a, vector bool long long __b,
8638         vector bool long long __c) {
8639   return (__a & ~__c) | (__b & __c);
8640 }
8641
8642 static __inline__ vector bool long long __ATTRS_o_ai
8643 vec_sel(vector bool long long __a, vector bool long long __b,
8644         vector unsigned long long __c) {
8645   return (__a & ~(vector bool long long)__c) |
8646          (__b & (vector bool long long)__c);
8647 }
8648
8649 static __inline__ vector signed long long __ATTRS_o_ai
8650 vec_sel(vector signed long long __a, vector signed long long __b,
8651         vector bool long long __c) {
8652   return (__a & ~(vector signed long long)__c) |
8653          (__b & (vector signed long long)__c);
8654 }
8655
8656 static __inline__ vector signed long long __ATTRS_o_ai
8657 vec_sel(vector signed long long __a, vector signed long long __b,
8658         vector unsigned long long __c) {
8659   return (__a & ~(vector signed long long)__c) |
8660          (__b & (vector signed long long)__c);
8661 }
8662
8663 static __inline__ vector unsigned long long __ATTRS_o_ai
8664 vec_sel(vector unsigned long long __a, vector unsigned long long __b,
8665         vector bool long long __c) {
8666   return (__a & ~(vector unsigned long long)__c) |
8667          (__b & (vector unsigned long long)__c);
8668 }
8669
8670 static __inline__ vector unsigned long long __ATTRS_o_ai
8671 vec_sel(vector unsigned long long __a, vector unsigned long long __b,
8672         vector unsigned long long __c) {
8673   return (__a & ~__c) | (__b & __c);
8674 }
8675 #endif
8676
8677 /* vec_vsel */
8678
8679 static __inline__ vector signed char __ATTRS_o_ai vec_vsel(
8680     vector signed char __a, vector signed char __b, vector unsigned char __c) {
8681   return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
8682 }
8683
8684 static __inline__ vector signed char __ATTRS_o_ai
8685 vec_vsel(vector signed char __a, vector signed char __b, vector bool char __c) {
8686   return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
8687 }
8688
8689 static __inline__ vector unsigned char __ATTRS_o_ai
8690 vec_vsel(vector unsigned char __a, vector unsigned char __b,
8691          vector unsigned char __c) {
8692   return (__a & ~__c) | (__b & __c);
8693 }
8694
8695 static __inline__ vector unsigned char __ATTRS_o_ai vec_vsel(
8696     vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
8697   return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
8698 }
8699
8700 static __inline__ vector bool char __ATTRS_o_ai
8701 vec_vsel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
8702   return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
8703 }
8704
8705 static __inline__ vector bool char __ATTRS_o_ai vec_vsel(vector bool char __a,
8706                                                          vector bool char __b,
8707                                                          vector bool char __c) {
8708   return (__a & ~__c) | (__b & __c);
8709 }
8710
8711 static __inline__ vector short __ATTRS_o_ai
8712 vec_vsel(vector short __a, vector short __b, vector unsigned short __c) {
8713   return (__a & ~(vector short)__c) | (__b & (vector short)__c);
8714 }
8715
8716 static __inline__ vector short __ATTRS_o_ai vec_vsel(vector short __a,
8717                                                      vector short __b,
8718                                                      vector bool short __c) {
8719   return (__a & ~(vector short)__c) | (__b & (vector short)__c);
8720 }
8721
8722 static __inline__ vector unsigned short __ATTRS_o_ai
8723 vec_vsel(vector unsigned short __a, vector unsigned short __b,
8724          vector unsigned short __c) {
8725   return (__a & ~__c) | (__b & __c);
8726 }
8727
8728 static __inline__ vector unsigned short __ATTRS_o_ai
8729 vec_vsel(vector unsigned short __a, vector unsigned short __b,
8730          vector bool short __c) {
8731   return (__a & ~(vector unsigned short)__c) |
8732          (__b & (vector unsigned short)__c);
8733 }
8734
8735 static __inline__ vector bool short __ATTRS_o_ai vec_vsel(
8736     vector bool short __a, vector bool short __b, vector unsigned short __c) {
8737   return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
8738 }
8739
8740 static __inline__ vector bool short __ATTRS_o_ai
8741 vec_vsel(vector bool short __a, vector bool short __b, vector bool short __c) {
8742   return (__a & ~__c) | (__b & __c);
8743 }
8744
8745 static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
8746                                                    vector int __b,
8747                                                    vector unsigned int __c) {
8748   return (__a & ~(vector int)__c) | (__b & (vector int)__c);
8749 }
8750
8751 static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
8752                                                    vector int __b,
8753                                                    vector bool int __c) {
8754   return (__a & ~(vector int)__c) | (__b & (vector int)__c);
8755 }
8756
8757 static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
8758     vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
8759   return (__a & ~__c) | (__b & __c);
8760 }
8761
8762 static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
8763     vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
8764   return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
8765 }
8766
8767 static __inline__ vector bool int __ATTRS_o_ai
8768 vec_vsel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
8769   return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
8770 }
8771
8772 static __inline__ vector bool int __ATTRS_o_ai vec_vsel(vector bool int __a,
8773                                                         vector bool int __b,
8774                                                         vector bool int __c) {
8775   return (__a & ~__c) | (__b & __c);
8776 }
8777
8778 static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
8779                                                      vector float __b,
8780                                                      vector unsigned int __c) {
8781   vector int __res = ((vector int)__a & ~(vector int)__c) |
8782                      ((vector int)__b & (vector int)__c);
8783   return (vector float)__res;
8784 }
8785
8786 static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
8787                                                      vector float __b,
8788                                                      vector bool int __c) {
8789   vector int __res = ((vector int)__a & ~(vector int)__c) |
8790                      ((vector int)__b & (vector int)__c);
8791   return (vector float)__res;
8792 }
8793
8794 /* vec_sl */
8795
8796 // vec_sl does modulo arithmetic on __b first, so __b is allowed to be more
8797 // than the length of __a.
8798 static __inline__ vector unsigned char __ATTRS_o_ai
8799 vec_sl(vector unsigned char __a, vector unsigned char __b) {
8800   return __a << (__b %
8801                  (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));
8802 }
8803
8804 static __inline__ vector signed char __ATTRS_o_ai
8805 vec_sl(vector signed char __a, vector unsigned char __b) {
8806   return (vector signed char)vec_sl((vector unsigned char)__a, __b);
8807 }
8808
8809 static __inline__ vector unsigned short __ATTRS_o_ai
8810 vec_sl(vector unsigned short __a, vector unsigned short __b) {
8811   return __a << (__b % (vector unsigned short)(sizeof(unsigned short) *
8812                                                __CHAR_BIT__));
8813 }
8814
8815 static __inline__ vector short __ATTRS_o_ai vec_sl(vector short __a,
8816                                                    vector unsigned short __b) {
8817   return (vector short)vec_sl((vector unsigned short)__a, __b);
8818 }
8819
8820 static __inline__ vector unsigned int __ATTRS_o_ai
8821 vec_sl(vector unsigned int __a, vector unsigned int __b) {
8822   return __a << (__b %
8823                  (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));
8824 }
8825
8826 static __inline__ vector int __ATTRS_o_ai vec_sl(vector int __a,
8827                                                  vector unsigned int __b) {
8828   return (vector int)vec_sl((vector unsigned int)__a, __b);
8829 }
8830
8831 #ifdef __POWER8_VECTOR__
8832 static __inline__ vector unsigned long long __ATTRS_o_ai
8833 vec_sl(vector unsigned long long __a, vector unsigned long long __b) {
8834   return __a << (__b % (vector unsigned long long)(sizeof(unsigned long long) *
8835                                                    __CHAR_BIT__));
8836 }
8837
8838 static __inline__ vector long long __ATTRS_o_ai
8839 vec_sl(vector long long __a, vector unsigned long long __b) {
8840   return (vector long long)vec_sl((vector unsigned long long)__a, __b);
8841 }
8842 #else
8843 static __inline__ vector unsigned char __ATTRS_o_ai
8844 vec_vspltb(vector unsigned char __a, unsigned char __b);
8845 static __inline__ vector unsigned long long __ATTRS_o_ai
8846 vec_sl(vector unsigned long long __a, vector unsigned long long __b) {
8847   __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
8848
8849   // Big endian element one (the right doubleword) can be left shifted as-is.
8850   // The other element needs to be swapped into the right doubleword and
8851   // shifted. Then the right doublewords of the two result vectors are merged.
8852   vector signed long long __rightelt =
8853       (vector signed long long)__builtin_altivec_vslo((vector signed int)__a,
8854                                                       (vector signed int)__b);
8855 #ifdef __LITTLE_ENDIAN__
8856   __rightelt = (vector signed long long)__builtin_altivec_vsl(
8857       (vector signed int)__rightelt,
8858       (vector signed int)vec_vspltb((vector unsigned char)__b, 0));
8859 #else
8860   __rightelt = (vector signed long long)__builtin_altivec_vsl(
8861       (vector signed int)__rightelt,
8862       (vector signed int)vec_vspltb((vector unsigned char)__b, 15));
8863 #endif
8864   __a = __builtin_shufflevector(__a, __a, 1, 0);
8865   __b = __builtin_shufflevector(__b, __b, 1, 0);
8866   vector signed long long __leftelt =
8867       (vector signed long long)__builtin_altivec_vslo((vector signed int)__a,
8868                                                       (vector signed int)__b);
8869 #ifdef __LITTLE_ENDIAN__
8870   __leftelt = (vector signed long long)__builtin_altivec_vsl(
8871       (vector signed int)__leftelt,
8872       (vector signed int)vec_vspltb((vector unsigned char)__b, 0));
8873   return (vector unsigned long long)__builtin_shufflevector(__rightelt,
8874                                                             __leftelt, 0, 2);
8875 #else
8876   __leftelt = (vector signed long long)__builtin_altivec_vsl(
8877       (vector signed int)__leftelt,
8878       (vector signed int)vec_vspltb((vector unsigned char)__b, 15));
8879   return (vector unsigned long long)__builtin_shufflevector(__leftelt,
8880                                                             __rightelt, 1, 3);
8881 #endif
8882 }
8883
8884 static __inline__ vector long long __ATTRS_o_ai
8885 vec_sl(vector long long __a, vector unsigned long long __b) {
8886   return (vector long long)vec_sl((vector unsigned long long)__a, __b);
8887 }
8888 #endif
8889
8890 /* vec_vslb */
8891
8892 #define __builtin_altivec_vslb vec_vslb
8893
8894 static __inline__ vector signed char __ATTRS_o_ai
8895 vec_vslb(vector signed char __a, vector unsigned char __b) {
8896   return vec_sl(__a, __b);
8897 }
8898
8899 static __inline__ vector unsigned char __ATTRS_o_ai
8900 vec_vslb(vector unsigned char __a, vector unsigned char __b) {
8901   return vec_sl(__a, __b);
8902 }
8903
8904 /* vec_vslh */
8905
8906 #define __builtin_altivec_vslh vec_vslh
8907
8908 static __inline__ vector short __ATTRS_o_ai
8909 vec_vslh(vector short __a, vector unsigned short __b) {
8910   return vec_sl(__a, __b);
8911 }
8912
8913 static __inline__ vector unsigned short __ATTRS_o_ai
8914 vec_vslh(vector unsigned short __a, vector unsigned short __b) {
8915   return vec_sl(__a, __b);
8916 }
8917
8918 /* vec_vslw */
8919
8920 #define __builtin_altivec_vslw vec_vslw
8921
8922 static __inline__ vector int __ATTRS_o_ai vec_vslw(vector int __a,
8923                                                    vector unsigned int __b) {
8924   return vec_sl(__a, __b);
8925 }
8926
8927 static __inline__ vector unsigned int __ATTRS_o_ai
8928 vec_vslw(vector unsigned int __a, vector unsigned int __b) {
8929   return vec_sl(__a, __b);
8930 }
8931
8932 /* vec_sld */
8933
8934 #define __builtin_altivec_vsldoi_4si vec_sld
8935
8936 static __inline__ vector signed char __ATTRS_o_ai vec_sld(
8937     vector signed char __a, vector signed char __b, unsigned const int __c) {
8938   unsigned char __d = __c & 0x0F;
8939 #ifdef __LITTLE_ENDIAN__
8940   return vec_perm(
8941       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8942                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
8943                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
8944                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
8945 #else
8946   return vec_perm(
8947       __a, __b,
8948       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8949                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8950                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8951 #endif
8952 }
8953
8954 static __inline__ vector unsigned char __ATTRS_o_ai
8955 vec_sld(vector unsigned char __a, vector unsigned char __b,
8956         unsigned const int __c) {
8957   unsigned char __d = __c & 0x0F;
8958 #ifdef __LITTLE_ENDIAN__
8959   return vec_perm(
8960       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8961                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
8962                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
8963                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
8964 #else
8965   return vec_perm(
8966       __a, __b,
8967       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8968                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8969                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8970 #endif
8971 }
8972
8973 static __inline__ vector bool char __ATTRS_o_ai
8974 vec_sld(vector bool char __a, vector bool char __b, unsigned const int __c) {
8975   unsigned char __d = __c & 0x0F;
8976 #ifdef __LITTLE_ENDIAN__
8977   return vec_perm(
8978       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8979                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
8980                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
8981                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
8982 #else
8983   return vec_perm(
8984       __a, __b,
8985       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8986                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8987                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8988 #endif
8989 }
8990
8991 static __inline__ vector signed short __ATTRS_o_ai vec_sld(
8992     vector signed short __a, vector signed short __b, unsigned const int __c) {
8993   unsigned char __d = __c & 0x0F;
8994 #ifdef __LITTLE_ENDIAN__
8995   return vec_perm(
8996       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8997                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
8998                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
8999                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9000 #else
9001   return vec_perm(
9002       __a, __b,
9003       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9004                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9005                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9006 #endif
9007 }
9008
9009 static __inline__ vector unsigned short __ATTRS_o_ai
9010 vec_sld(vector unsigned short __a, vector unsigned short __b,
9011         unsigned const int __c) {
9012   unsigned char __d = __c & 0x0F;
9013 #ifdef __LITTLE_ENDIAN__
9014   return vec_perm(
9015       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9016                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9017                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9018                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9019 #else
9020   return vec_perm(
9021       __a, __b,
9022       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9023                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9024                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9025 #endif
9026 }
9027
9028 static __inline__ vector bool short __ATTRS_o_ai
9029 vec_sld(vector bool short __a, vector bool short __b, unsigned const int __c) {
9030   unsigned char __d = __c & 0x0F;
9031 #ifdef __LITTLE_ENDIAN__
9032   return vec_perm(
9033       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9034                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9035                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9036                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9037 #else
9038   return vec_perm(
9039       __a, __b,
9040       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9041                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9042                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9043 #endif
9044 }
9045
9046 static __inline__ vector pixel __ATTRS_o_ai vec_sld(vector pixel __a,
9047                                                     vector pixel __b,
9048                                                     unsigned const int __c) {
9049   unsigned char __d = __c & 0x0F;
9050 #ifdef __LITTLE_ENDIAN__
9051   return vec_perm(
9052       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9053                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9054                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9055                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9056 #else
9057   return vec_perm(
9058       __a, __b,
9059       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9060                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9061                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9062 #endif
9063 }
9064
9065 static __inline__ vector signed int __ATTRS_o_ai
9066 vec_sld(vector signed int __a, vector signed int __b, unsigned const int __c) {
9067   unsigned char __d = __c & 0x0F;
9068 #ifdef __LITTLE_ENDIAN__
9069   return vec_perm(
9070       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9071                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9072                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9073                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9074 #else
9075   return vec_perm(
9076       __a, __b,
9077       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9078                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9079                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9080 #endif
9081 }
9082
9083 static __inline__ vector unsigned int __ATTRS_o_ai vec_sld(
9084     vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {
9085   unsigned char __d = __c & 0x0F;
9086 #ifdef __LITTLE_ENDIAN__
9087   return vec_perm(
9088       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9089                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9090                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9091                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9092 #else
9093   return vec_perm(
9094       __a, __b,
9095       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9096                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9097                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9098 #endif
9099 }
9100
9101 static __inline__ vector bool int __ATTRS_o_ai vec_sld(vector bool int __a,
9102                                                        vector bool int __b,
9103                                                        unsigned const int __c) {
9104   unsigned char __d = __c & 0x0F;
9105 #ifdef __LITTLE_ENDIAN__
9106   return vec_perm(
9107       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9108                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9109                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9110                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9111 #else
9112   return vec_perm(
9113       __a, __b,
9114       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9115                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9116                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9117 #endif
9118 }
9119
9120 static __inline__ vector float __ATTRS_o_ai vec_sld(vector float __a,
9121                                                     vector float __b,
9122                                                     unsigned const int __c) {
9123   unsigned char __d = __c & 0x0F;
9124 #ifdef __LITTLE_ENDIAN__
9125   return vec_perm(
9126       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9127                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9128                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9129                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9130 #else
9131   return vec_perm(
9132       __a, __b,
9133       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9134                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9135                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9136 #endif
9137 }
9138
9139 #ifdef __VSX__
9140 static __inline__ vector bool long long __ATTRS_o_ai
9141 vec_sld(vector bool long long __a, vector bool long long __b,
9142         unsigned const int __c) {
9143   unsigned char __d = __c & 0x0F;
9144 #ifdef __LITTLE_ENDIAN__
9145   return vec_perm(
9146       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9147                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9148                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9149                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9150 #else
9151   return vec_perm(
9152       __a, __b,
9153       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9154                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9155                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9156 #endif
9157 }
9158
9159 static __inline__ vector signed long long __ATTRS_o_ai
9160 vec_sld(vector signed long long __a, vector signed long long __b,
9161         unsigned const int __c) {
9162   unsigned char __d = __c & 0x0F;
9163 #ifdef __LITTLE_ENDIAN__
9164   return vec_perm(
9165       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9166                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9167                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9168                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9169 #else
9170   return vec_perm(
9171       __a, __b,
9172       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9173                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9174                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9175 #endif
9176 }
9177
9178 static __inline__ vector unsigned long long __ATTRS_o_ai
9179 vec_sld(vector unsigned long long __a, vector unsigned long long __b,
9180         unsigned const int __c) {
9181   unsigned char __d = __c & 0x0F;
9182 #ifdef __LITTLE_ENDIAN__
9183   return vec_perm(
9184       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9185                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9186                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9187                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9188 #else
9189   return vec_perm(
9190       __a, __b,
9191       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9192                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9193                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9194 #endif
9195 }
9196
9197 static __inline__ vector double __ATTRS_o_ai vec_sld(vector double __a,
9198                                                      vector double __b,
9199                                                      unsigned const int __c) {
9200   unsigned char __d = __c & 0x0F;
9201 #ifdef __LITTLE_ENDIAN__
9202   return vec_perm(
9203       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9204                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9205                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9206                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9207 #else
9208   return vec_perm(
9209       __a, __b,
9210       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9211                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9212                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9213 #endif
9214 }
9215 #endif
9216
9217 /* vec_sldw */
9218 static __inline__ vector signed char __ATTRS_o_ai vec_sldw(
9219     vector signed char __a, vector signed char __b, unsigned const int __c) {
9220   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9221 }
9222
9223 static __inline__ vector unsigned char __ATTRS_o_ai
9224 vec_sldw(vector unsigned char __a, vector unsigned char __b,
9225          unsigned const int __c) {
9226   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9227 }
9228
9229 static __inline__ vector signed short __ATTRS_o_ai vec_sldw(
9230     vector signed short __a, vector signed short __b, unsigned const int __c) {
9231   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9232 }
9233
9234 static __inline__ vector unsigned short __ATTRS_o_ai
9235 vec_sldw(vector unsigned short __a, vector unsigned short __b,
9236          unsigned const int __c) {
9237   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9238 }
9239
9240 static __inline__ vector signed int __ATTRS_o_ai
9241 vec_sldw(vector signed int __a, vector signed int __b, unsigned const int __c) {
9242   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9243 }
9244
9245 static __inline__ vector unsigned int __ATTRS_o_ai vec_sldw(
9246     vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {
9247   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9248 }
9249
9250 static __inline__ vector float __ATTRS_o_ai vec_sldw(
9251     vector float __a, vector float __b, unsigned const int __c) {
9252   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9253 }
9254
9255 #ifdef __VSX__
9256 static __inline__ vector signed long long __ATTRS_o_ai
9257 vec_sldw(vector signed long long __a, vector signed long long __b,
9258          unsigned const int __c) {
9259   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9260 }
9261
9262 static __inline__ vector unsigned long long __ATTRS_o_ai
9263 vec_sldw(vector unsigned long long __a, vector unsigned long long __b,
9264          unsigned const int __c) {
9265   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9266 }
9267
9268 static __inline__ vector double __ATTRS_o_ai vec_sldw(
9269     vector double __a, vector double __b, unsigned const int __c) {
9270   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
9271 }
9272 #endif
9273
9274 #ifdef __POWER9_VECTOR__
9275 /* vec_slv */
9276 static __inline__ vector unsigned char __ATTRS_o_ai
9277 vec_slv(vector unsigned char __a, vector unsigned char __b) {
9278   return __builtin_altivec_vslv(__a, __b);
9279 }
9280
9281 /* vec_srv */
9282 static __inline__ vector unsigned char __ATTRS_o_ai
9283 vec_srv(vector unsigned char __a, vector unsigned char __b) {
9284   return __builtin_altivec_vsrv(__a, __b);
9285 }
9286 #endif
9287
9288 /* vec_vsldoi */
9289
9290 static __inline__ vector signed char __ATTRS_o_ai
9291 vec_vsldoi(vector signed char __a, vector signed char __b, unsigned char __c) {
9292   unsigned char __d = __c & 0x0F;
9293 #ifdef __LITTLE_ENDIAN__
9294   return vec_perm(
9295       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9296                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9297                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9298                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9299 #else
9300   return vec_perm(
9301       __a, __b,
9302       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9303                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9304                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9305 #endif
9306 }
9307
9308 static __inline__ vector unsigned char __ATTRS_o_ai vec_vsldoi(
9309     vector unsigned char __a, vector unsigned char __b, unsigned char __c) {
9310   unsigned char __d = __c & 0x0F;
9311 #ifdef __LITTLE_ENDIAN__
9312   return vec_perm(
9313       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9314                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9315                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9316                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9317 #else
9318   return vec_perm(
9319       __a, __b,
9320       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9321                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9322                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9323 #endif
9324 }
9325
9326 static __inline__ vector short __ATTRS_o_ai vec_vsldoi(vector short __a,
9327                                                        vector short __b,
9328                                                        unsigned char __c) {
9329   unsigned char __d = __c & 0x0F;
9330 #ifdef __LITTLE_ENDIAN__
9331   return vec_perm(
9332       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9333                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9334                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9335                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9336 #else
9337   return vec_perm(
9338       __a, __b,
9339       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9340                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9341                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9342 #endif
9343 }
9344
9345 static __inline__ vector unsigned short __ATTRS_o_ai vec_vsldoi(
9346     vector unsigned short __a, vector unsigned short __b, unsigned char __c) {
9347   unsigned char __d = __c & 0x0F;
9348 #ifdef __LITTLE_ENDIAN__
9349   return vec_perm(
9350       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9351                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9352                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9353                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9354 #else
9355   return vec_perm(
9356       __a, __b,
9357       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9358                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9359                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9360 #endif
9361 }
9362
9363 static __inline__ vector pixel __ATTRS_o_ai vec_vsldoi(vector pixel __a,
9364                                                        vector pixel __b,
9365                                                        unsigned char __c) {
9366   unsigned char __d = __c & 0x0F;
9367 #ifdef __LITTLE_ENDIAN__
9368   return vec_perm(
9369       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9370                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9371                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9372                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9373 #else
9374   return vec_perm(
9375       __a, __b,
9376       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9377                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9378                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9379 #endif
9380 }
9381
9382 static __inline__ vector int __ATTRS_o_ai vec_vsldoi(vector int __a,
9383                                                      vector int __b,
9384                                                      unsigned char __c) {
9385   unsigned char __d = __c & 0x0F;
9386 #ifdef __LITTLE_ENDIAN__
9387   return vec_perm(
9388       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9389                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9390                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9391                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9392 #else
9393   return vec_perm(
9394       __a, __b,
9395       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9396                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9397                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9398 #endif
9399 }
9400
9401 static __inline__ vector unsigned int __ATTRS_o_ai vec_vsldoi(
9402     vector unsigned int __a, vector unsigned int __b, unsigned char __c) {
9403   unsigned char __d = __c & 0x0F;
9404 #ifdef __LITTLE_ENDIAN__
9405   return vec_perm(
9406       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9407                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9408                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9409                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9410 #else
9411   return vec_perm(
9412       __a, __b,
9413       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9414                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9415                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9416 #endif
9417 }
9418
9419 static __inline__ vector float __ATTRS_o_ai vec_vsldoi(vector float __a,
9420                                                        vector float __b,
9421                                                        unsigned char __c) {
9422   unsigned char __d = __c & 0x0F;
9423 #ifdef __LITTLE_ENDIAN__
9424   return vec_perm(
9425       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
9426                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
9427                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
9428                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
9429 #else
9430   return vec_perm(
9431       __a, __b,
9432       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
9433                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
9434                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
9435 #endif
9436 }
9437
9438 /* vec_sll */
9439
9440 static __inline__ vector signed char __ATTRS_o_ai
9441 vec_sll(vector signed char __a, vector unsigned char __b) {
9442   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9443                                                    (vector int)__b);
9444 }
9445
9446 static __inline__ vector signed char __ATTRS_o_ai
9447 vec_sll(vector signed char __a, vector unsigned short __b) {
9448   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9449                                                    (vector int)__b);
9450 }
9451
9452 static __inline__ vector signed char __ATTRS_o_ai
9453 vec_sll(vector signed char __a, vector unsigned int __b) {
9454   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9455                                                    (vector int)__b);
9456 }
9457
9458 static __inline__ vector unsigned char __ATTRS_o_ai
9459 vec_sll(vector unsigned char __a, vector unsigned char __b) {
9460   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9461                                                      (vector int)__b);
9462 }
9463
9464 static __inline__ vector unsigned char __ATTRS_o_ai
9465 vec_sll(vector unsigned char __a, vector unsigned short __b) {
9466   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9467                                                      (vector int)__b);
9468 }
9469
9470 static __inline__ vector unsigned char __ATTRS_o_ai
9471 vec_sll(vector unsigned char __a, vector unsigned int __b) {
9472   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9473                                                      (vector int)__b);
9474 }
9475
9476 static __inline__ vector bool char __ATTRS_o_ai
9477 vec_sll(vector bool char __a, vector unsigned char __b) {
9478   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9479                                                  (vector int)__b);
9480 }
9481
9482 static __inline__ vector bool char __ATTRS_o_ai
9483 vec_sll(vector bool char __a, vector unsigned short __b) {
9484   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9485                                                  (vector int)__b);
9486 }
9487
9488 static __inline__ vector bool char __ATTRS_o_ai
9489 vec_sll(vector bool char __a, vector unsigned int __b) {
9490   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9491                                                  (vector int)__b);
9492 }
9493
9494 static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
9495                                                     vector unsigned char __b) {
9496   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9497 }
9498
9499 static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
9500                                                     vector unsigned short __b) {
9501   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9502 }
9503
9504 static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
9505                                                     vector unsigned int __b) {
9506   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9507 }
9508
9509 static __inline__ vector unsigned short __ATTRS_o_ai
9510 vec_sll(vector unsigned short __a, vector unsigned char __b) {
9511   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9512                                                       (vector int)__b);
9513 }
9514
9515 static __inline__ vector unsigned short __ATTRS_o_ai
9516 vec_sll(vector unsigned short __a, vector unsigned short __b) {
9517   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9518                                                       (vector int)__b);
9519 }
9520
9521 static __inline__ vector unsigned short __ATTRS_o_ai
9522 vec_sll(vector unsigned short __a, vector unsigned int __b) {
9523   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9524                                                       (vector int)__b);
9525 }
9526
9527 static __inline__ vector bool short __ATTRS_o_ai
9528 vec_sll(vector bool short __a, vector unsigned char __b) {
9529   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9530                                                   (vector int)__b);
9531 }
9532
9533 static __inline__ vector bool short __ATTRS_o_ai
9534 vec_sll(vector bool short __a, vector unsigned short __b) {
9535   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9536                                                   (vector int)__b);
9537 }
9538
9539 static __inline__ vector bool short __ATTRS_o_ai
9540 vec_sll(vector bool short __a, vector unsigned int __b) {
9541   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9542                                                   (vector int)__b);
9543 }
9544
9545 static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
9546                                                     vector unsigned char __b) {
9547   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9548 }
9549
9550 static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
9551                                                     vector unsigned short __b) {
9552   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9553 }
9554
9555 static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
9556                                                     vector unsigned int __b) {
9557   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9558 }
9559
9560 static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
9561                                                   vector unsigned char __b) {
9562   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9563 }
9564
9565 static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
9566                                                   vector unsigned short __b) {
9567   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9568 }
9569
9570 static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
9571                                                   vector unsigned int __b) {
9572   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9573 }
9574
9575 static __inline__ vector unsigned int __ATTRS_o_ai
9576 vec_sll(vector unsigned int __a, vector unsigned char __b) {
9577   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9578                                                     (vector int)__b);
9579 }
9580
9581 static __inline__ vector unsigned int __ATTRS_o_ai
9582 vec_sll(vector unsigned int __a, vector unsigned short __b) {
9583   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9584                                                     (vector int)__b);
9585 }
9586
9587 static __inline__ vector unsigned int __ATTRS_o_ai
9588 vec_sll(vector unsigned int __a, vector unsigned int __b) {
9589   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9590                                                     (vector int)__b);
9591 }
9592
9593 static __inline__ vector bool int __ATTRS_o_ai
9594 vec_sll(vector bool int __a, vector unsigned char __b) {
9595   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9596                                                 (vector int)__b);
9597 }
9598
9599 static __inline__ vector bool int __ATTRS_o_ai
9600 vec_sll(vector bool int __a, vector unsigned short __b) {
9601   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9602                                                 (vector int)__b);
9603 }
9604
9605 static __inline__ vector bool int __ATTRS_o_ai
9606 vec_sll(vector bool int __a, vector unsigned int __b) {
9607   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9608                                                 (vector int)__b);
9609 }
9610
9611 #ifdef __VSX__
9612 static __inline__ vector signed long long __ATTRS_o_ai
9613 vec_sll(vector signed long long __a, vector unsigned char __b) {
9614   return (vector signed long long)__builtin_altivec_vsl((vector int)__a,
9615                                                         (vector int)__b);
9616 }
9617
9618 static __inline__ vector unsigned long long __ATTRS_o_ai
9619 vec_sll(vector unsigned long long __a, vector unsigned char __b) {
9620   return (vector unsigned long long)__builtin_altivec_vsl((vector int)__a,
9621                                                           (vector int)__b);
9622 }
9623 #endif
9624
9625 /* vec_vsl */
9626
9627 static __inline__ vector signed char __ATTRS_o_ai
9628 vec_vsl(vector signed char __a, vector unsigned char __b) {
9629   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9630                                                    (vector int)__b);
9631 }
9632
9633 static __inline__ vector signed char __ATTRS_o_ai
9634 vec_vsl(vector signed char __a, vector unsigned short __b) {
9635   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9636                                                    (vector int)__b);
9637 }
9638
9639 static __inline__ vector signed char __ATTRS_o_ai
9640 vec_vsl(vector signed char __a, vector unsigned int __b) {
9641   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
9642                                                    (vector int)__b);
9643 }
9644
9645 static __inline__ vector unsigned char __ATTRS_o_ai
9646 vec_vsl(vector unsigned char __a, vector unsigned char __b) {
9647   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9648                                                      (vector int)__b);
9649 }
9650
9651 static __inline__ vector unsigned char __ATTRS_o_ai
9652 vec_vsl(vector unsigned char __a, vector unsigned short __b) {
9653   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9654                                                      (vector int)__b);
9655 }
9656
9657 static __inline__ vector unsigned char __ATTRS_o_ai
9658 vec_vsl(vector unsigned char __a, vector unsigned int __b) {
9659   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
9660                                                      (vector int)__b);
9661 }
9662
9663 static __inline__ vector bool char __ATTRS_o_ai
9664 vec_vsl(vector bool char __a, vector unsigned char __b) {
9665   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9666                                                  (vector int)__b);
9667 }
9668
9669 static __inline__ vector bool char __ATTRS_o_ai
9670 vec_vsl(vector bool char __a, vector unsigned short __b) {
9671   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9672                                                  (vector int)__b);
9673 }
9674
9675 static __inline__ vector bool char __ATTRS_o_ai
9676 vec_vsl(vector bool char __a, vector unsigned int __b) {
9677   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
9678                                                  (vector int)__b);
9679 }
9680
9681 static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
9682                                                     vector unsigned char __b) {
9683   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9684 }
9685
9686 static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
9687                                                     vector unsigned short __b) {
9688   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9689 }
9690
9691 static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
9692                                                     vector unsigned int __b) {
9693   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9694 }
9695
9696 static __inline__ vector unsigned short __ATTRS_o_ai
9697 vec_vsl(vector unsigned short __a, vector unsigned char __b) {
9698   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9699                                                       (vector int)__b);
9700 }
9701
9702 static __inline__ vector unsigned short __ATTRS_o_ai
9703 vec_vsl(vector unsigned short __a, vector unsigned short __b) {
9704   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9705                                                       (vector int)__b);
9706 }
9707
9708 static __inline__ vector unsigned short __ATTRS_o_ai
9709 vec_vsl(vector unsigned short __a, vector unsigned int __b) {
9710   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
9711                                                       (vector int)__b);
9712 }
9713
9714 static __inline__ vector bool short __ATTRS_o_ai
9715 vec_vsl(vector bool short __a, vector unsigned char __b) {
9716   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9717                                                   (vector int)__b);
9718 }
9719
9720 static __inline__ vector bool short __ATTRS_o_ai
9721 vec_vsl(vector bool short __a, vector unsigned short __b) {
9722   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9723                                                   (vector int)__b);
9724 }
9725
9726 static __inline__ vector bool short __ATTRS_o_ai
9727 vec_vsl(vector bool short __a, vector unsigned int __b) {
9728   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
9729                                                   (vector int)__b);
9730 }
9731
9732 static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
9733                                                     vector unsigned char __b) {
9734   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9735 }
9736
9737 static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
9738                                                     vector unsigned short __b) {
9739   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9740 }
9741
9742 static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
9743                                                     vector unsigned int __b) {
9744   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
9745 }
9746
9747 static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
9748                                                   vector unsigned char __b) {
9749   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9750 }
9751
9752 static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
9753                                                   vector unsigned short __b) {
9754   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9755 }
9756
9757 static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
9758                                                   vector unsigned int __b) {
9759   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
9760 }
9761
9762 static __inline__ vector unsigned int __ATTRS_o_ai
9763 vec_vsl(vector unsigned int __a, vector unsigned char __b) {
9764   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9765                                                     (vector int)__b);
9766 }
9767
9768 static __inline__ vector unsigned int __ATTRS_o_ai
9769 vec_vsl(vector unsigned int __a, vector unsigned short __b) {
9770   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9771                                                     (vector int)__b);
9772 }
9773
9774 static __inline__ vector unsigned int __ATTRS_o_ai
9775 vec_vsl(vector unsigned int __a, vector unsigned int __b) {
9776   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
9777                                                     (vector int)__b);
9778 }
9779
9780 static __inline__ vector bool int __ATTRS_o_ai
9781 vec_vsl(vector bool int __a, vector unsigned char __b) {
9782   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9783                                                 (vector int)__b);
9784 }
9785
9786 static __inline__ vector bool int __ATTRS_o_ai
9787 vec_vsl(vector bool int __a, vector unsigned short __b) {
9788   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9789                                                 (vector int)__b);
9790 }
9791
9792 static __inline__ vector bool int __ATTRS_o_ai
9793 vec_vsl(vector bool int __a, vector unsigned int __b) {
9794   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
9795                                                 (vector int)__b);
9796 }
9797
9798 /* vec_slo */
9799
9800 static __inline__ vector signed char __ATTRS_o_ai
9801 vec_slo(vector signed char __a, vector signed char __b) {
9802   return (vector signed char)__builtin_altivec_vslo((vector int)__a,
9803                                                     (vector int)__b);
9804 }
9805
9806 static __inline__ vector signed char __ATTRS_o_ai
9807 vec_slo(vector signed char __a, vector unsigned char __b) {
9808   return (vector signed char)__builtin_altivec_vslo((vector int)__a,
9809                                                     (vector int)__b);
9810 }
9811
9812 static __inline__ vector unsigned char __ATTRS_o_ai
9813 vec_slo(vector unsigned char __a, vector signed char __b) {
9814   return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
9815                                                       (vector int)__b);
9816 }
9817
9818 static __inline__ vector unsigned char __ATTRS_o_ai
9819 vec_slo(vector unsigned char __a, vector unsigned char __b) {
9820   return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
9821                                                       (vector int)__b);
9822 }
9823
9824 static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
9825                                                     vector signed char __b) {
9826   return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9827 }
9828
9829 static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
9830                                                     vector unsigned char __b) {
9831   return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9832 }
9833
9834 static __inline__ vector unsigned short __ATTRS_o_ai
9835 vec_slo(vector unsigned short __a, vector signed char __b) {
9836   return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
9837                                                        (vector int)__b);
9838 }
9839
9840 static __inline__ vector unsigned short __ATTRS_o_ai
9841 vec_slo(vector unsigned short __a, vector unsigned char __b) {
9842   return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
9843                                                        (vector int)__b);
9844 }
9845
9846 static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
9847                                                     vector signed char __b) {
9848   return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9849 }
9850
9851 static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
9852                                                     vector unsigned char __b) {
9853   return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9854 }
9855
9856 static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
9857                                                   vector signed char __b) {
9858   return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
9859 }
9860
9861 static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
9862                                                   vector unsigned char __b) {
9863   return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
9864 }
9865
9866 static __inline__ vector unsigned int __ATTRS_o_ai
9867 vec_slo(vector unsigned int __a, vector signed char __b) {
9868   return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
9869                                                      (vector int)__b);
9870 }
9871
9872 static __inline__ vector unsigned int __ATTRS_o_ai
9873 vec_slo(vector unsigned int __a, vector unsigned char __b) {
9874   return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
9875                                                      (vector int)__b);
9876 }
9877
9878 static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
9879                                                     vector signed char __b) {
9880   return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9881 }
9882
9883 static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
9884                                                     vector unsigned char __b) {
9885   return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9886 }
9887
9888 #ifdef __VSX__
9889 static __inline__ vector signed long long __ATTRS_o_ai
9890 vec_slo(vector signed long long __a, vector signed char __b) {
9891   return (vector signed long long)__builtin_altivec_vslo((vector int)__a,
9892                                                          (vector int)__b);
9893 }
9894
9895 static __inline__ vector signed long long __ATTRS_o_ai
9896 vec_slo(vector signed long long __a, vector unsigned char __b) {
9897   return (vector signed long long)__builtin_altivec_vslo((vector int)__a,
9898                                                          (vector int)__b);
9899 }
9900
9901 static __inline__ vector unsigned long long __ATTRS_o_ai
9902 vec_slo(vector unsigned long long __a, vector signed char __b) {
9903   return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,
9904                                                            (vector int)__b);
9905 }
9906
9907 static __inline__ vector unsigned long long __ATTRS_o_ai
9908 vec_slo(vector unsigned long long __a, vector unsigned char __b) {
9909   return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,
9910                                                            (vector int)__b);
9911 }
9912 #endif
9913
9914 /* vec_vslo */
9915
9916 static __inline__ vector signed char __ATTRS_o_ai
9917 vec_vslo(vector signed char __a, vector signed char __b) {
9918   return (vector signed char)__builtin_altivec_vslo((vector int)__a,
9919                                                     (vector int)__b);
9920 }
9921
9922 static __inline__ vector signed char __ATTRS_o_ai
9923 vec_vslo(vector signed char __a, vector unsigned char __b) {
9924   return (vector signed char)__builtin_altivec_vslo((vector int)__a,
9925                                                     (vector int)__b);
9926 }
9927
9928 static __inline__ vector unsigned char __ATTRS_o_ai
9929 vec_vslo(vector unsigned char __a, vector signed char __b) {
9930   return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
9931                                                       (vector int)__b);
9932 }
9933
9934 static __inline__ vector unsigned char __ATTRS_o_ai
9935 vec_vslo(vector unsigned char __a, vector unsigned char __b) {
9936   return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
9937                                                       (vector int)__b);
9938 }
9939
9940 static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
9941                                                      vector signed char __b) {
9942   return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9943 }
9944
9945 static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
9946                                                      vector unsigned char __b) {
9947   return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9948 }
9949
9950 static __inline__ vector unsigned short __ATTRS_o_ai
9951 vec_vslo(vector unsigned short __a, vector signed char __b) {
9952   return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
9953                                                        (vector int)__b);
9954 }
9955
9956 static __inline__ vector unsigned short __ATTRS_o_ai
9957 vec_vslo(vector unsigned short __a, vector unsigned char __b) {
9958   return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
9959                                                        (vector int)__b);
9960 }
9961
9962 static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
9963                                                      vector signed char __b) {
9964   return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9965 }
9966
9967 static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
9968                                                      vector unsigned char __b) {
9969   return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9970 }
9971
9972 static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
9973                                                    vector signed char __b) {
9974   return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
9975 }
9976
9977 static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
9978                                                    vector unsigned char __b) {
9979   return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
9980 }
9981
9982 static __inline__ vector unsigned int __ATTRS_o_ai
9983 vec_vslo(vector unsigned int __a, vector signed char __b) {
9984   return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
9985                                                      (vector int)__b);
9986 }
9987
9988 static __inline__ vector unsigned int __ATTRS_o_ai
9989 vec_vslo(vector unsigned int __a, vector unsigned char __b) {
9990   return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
9991                                                      (vector int)__b);
9992 }
9993
9994 static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
9995                                                      vector signed char __b) {
9996   return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9997 }
9998
9999 static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
10000                                                      vector unsigned char __b) {
10001   return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
10002 }
10003
10004 /* vec_splat */
10005
10006 static __inline__ vector signed char __ATTRS_o_ai
10007 vec_splat(vector signed char __a, unsigned const int __b) {
10008   return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
10009 }
10010
10011 static __inline__ vector unsigned char __ATTRS_o_ai
10012 vec_splat(vector unsigned char __a, unsigned const int __b) {
10013   return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
10014 }
10015
10016 static __inline__ vector bool char __ATTRS_o_ai
10017 vec_splat(vector bool char __a, unsigned const int __b) {
10018   return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
10019 }
10020
10021 static __inline__ vector signed short __ATTRS_o_ai
10022 vec_splat(vector signed short __a, unsigned const int __b) {
10023   unsigned char b0 = (__b & 0x07) * 2;
10024   unsigned char b1 = b0 + 1;
10025   return vec_perm(__a, __a,
10026                   (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
10027                                          b0, b1, b0, b1, b0, b1));
10028 }
10029
10030 static __inline__ vector unsigned short __ATTRS_o_ai
10031 vec_splat(vector unsigned short __a, unsigned const int __b) {
10032   unsigned char b0 = (__b & 0x07) * 2;
10033   unsigned char b1 = b0 + 1;
10034   return vec_perm(__a, __a,
10035                   (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
10036                                          b0, b1, b0, b1, b0, b1));
10037 }
10038
10039 static __inline__ vector bool short __ATTRS_o_ai
10040 vec_splat(vector bool short __a, unsigned const int __b) {
10041   unsigned char b0 = (__b & 0x07) * 2;
10042   unsigned char b1 = b0 + 1;
10043   return vec_perm(__a, __a,
10044                   (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
10045                                          b0, b1, b0, b1, b0, b1));
10046 }
10047
10048 static __inline__ vector pixel __ATTRS_o_ai vec_splat(vector pixel __a,
10049                                                       unsigned const int __b) {
10050   unsigned char b0 = (__b & 0x07) * 2;
10051   unsigned char b1 = b0 + 1;
10052   return vec_perm(__a, __a,
10053                   (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
10054                                          b0, b1, b0, b1, b0, b1));
10055 }
10056
10057 static __inline__ vector signed int __ATTRS_o_ai
10058 vec_splat(vector signed int __a, unsigned const int __b) {
10059   unsigned char b0 = (__b & 0x03) * 4;
10060   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
10061   return vec_perm(__a, __a,
10062                   (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
10063                                          b2, b3, b0, b1, b2, b3));
10064 }
10065
10066 static __inline__ vector unsigned int __ATTRS_o_ai
10067 vec_splat(vector unsigned int __a, unsigned const int __b) {
10068   unsigned char b0 = (__b & 0x03) * 4;
10069   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
10070   return vec_perm(__a, __a,
10071                   (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
10072                                          b2, b3, b0, b1, b2, b3));
10073 }
10074
10075 static __inline__ vector bool int __ATTRS_o_ai
10076 vec_splat(vector bool int __a, unsigned const int __b) {
10077   unsigned char b0 = (__b & 0x03) * 4;
10078   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
10079   return vec_perm(__a, __a,
10080                   (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
10081                                          b2, b3, b0, b1, b2, b3));
10082 }
10083
10084 static __inline__ vector float __ATTRS_o_ai vec_splat(vector float __a,
10085                                                       unsigned const int __b) {
10086   unsigned char b0 = (__b & 0x03) * 4;
10087   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
10088   return vec_perm(__a, __a,
10089                   (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
10090                                          b2, b3, b0, b1, b2, b3));
10091 }
10092
10093 #ifdef __VSX__
10094 static __inline__ vector double __ATTRS_o_ai vec_splat(vector double __a,
10095                                                        unsigned const int __b) {
10096   unsigned char b0 = (__b & 0x01) * 8;
10097   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
10098                 b6 = b0 + 6, b7 = b0 + 7;
10099   return vec_perm(__a, __a,
10100                   (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
10101                                          b2, b3, b4, b5, b6, b7));
10102 }
10103 static __inline__ vector bool long long __ATTRS_o_ai
10104 vec_splat(vector bool long long __a, unsigned const int __b) {
10105   unsigned char b0 = (__b & 0x01) * 8;
10106   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
10107                 b6 = b0 + 6, b7 = b0 + 7;
10108   return vec_perm(__a, __a,
10109                   (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
10110                                          b2, b3, b4, b5, b6, b7));
10111 }
10112 static __inline__ vector signed long long __ATTRS_o_ai
10113 vec_splat(vector signed long long __a, unsigned const int __b) {
10114   unsigned char b0 = (__b & 0x01) * 8;
10115   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
10116                 b6 = b0 + 6, b7 = b0 + 7;
10117   return vec_perm(__a, __a,
10118                   (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
10119                                          b2, b3, b4, b5, b6, b7));
10120 }
10121 static __inline__ vector unsigned long long __ATTRS_o_ai
10122 vec_splat(vector unsigned long long __a, unsigned const int __b) {
10123   unsigned char b0 = (__b & 0x01) * 8;
10124   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
10125                 b6 = b0 + 6, b7 = b0 + 7;
10126   return vec_perm(__a, __a,
10127                   (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
10128                                          b2, b3, b4, b5, b6, b7));
10129 }
10130 #endif
10131
10132 /* vec_vspltb */
10133
10134 #define __builtin_altivec_vspltb vec_vspltb
10135
10136 static __inline__ vector signed char __ATTRS_o_ai
10137 vec_vspltb(vector signed char __a, unsigned char __b) {
10138   return vec_perm(__a, __a, (vector unsigned char)(__b));
10139 }
10140
10141 static __inline__ vector unsigned char __ATTRS_o_ai
10142 vec_vspltb(vector unsigned char __a, unsigned char __b) {
10143   return vec_perm(__a, __a, (vector unsigned char)(__b));
10144 }
10145
10146 static __inline__ vector bool char __ATTRS_o_ai vec_vspltb(vector bool char __a,
10147                                                            unsigned char __b) {
10148   return vec_perm(__a, __a, (vector unsigned char)(__b));
10149 }
10150
10151 /* vec_vsplth */
10152
10153 #define __builtin_altivec_vsplth vec_vsplth
10154
10155 static __inline__ vector short __ATTRS_o_ai vec_vsplth(vector short __a,
10156                                                        unsigned char __b) {
10157   __b *= 2;
10158   unsigned char b1 = __b + 1;
10159   return vec_perm(__a, __a,
10160                   (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
10161                                          __b, b1, __b, b1, __b, b1, __b, b1));
10162 }
10163
10164 static __inline__ vector unsigned short __ATTRS_o_ai
10165 vec_vsplth(vector unsigned short __a, unsigned char __b) {
10166   __b *= 2;
10167   unsigned char b1 = __b + 1;
10168   return vec_perm(__a, __a,
10169                   (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
10170                                          __b, b1, __b, b1, __b, b1, __b, b1));
10171 }
10172
10173 static __inline__ vector bool short __ATTRS_o_ai
10174 vec_vsplth(vector bool short __a, unsigned char __b) {
10175   __b *= 2;
10176   unsigned char b1 = __b + 1;
10177   return vec_perm(__a, __a,
10178                   (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
10179                                          __b, b1, __b, b1, __b, b1, __b, b1));
10180 }
10181
10182 static __inline__ vector pixel __ATTRS_o_ai vec_vsplth(vector pixel __a,
10183                                                        unsigned char __b) {
10184   __b *= 2;
10185   unsigned char b1 = __b + 1;
10186   return vec_perm(__a, __a,
10187                   (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
10188                                          __b, b1, __b, b1, __b, b1, __b, b1));
10189 }
10190
10191 /* vec_vspltw */
10192
10193 #define __builtin_altivec_vspltw vec_vspltw
10194
10195 static __inline__ vector int __ATTRS_o_ai vec_vspltw(vector int __a,
10196                                                      unsigned char __b) {
10197   __b *= 4;
10198   unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
10199   return vec_perm(__a, __a,
10200                   (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
10201                                          b1, b2, b3, __b, b1, b2, b3));
10202 }
10203
10204 static __inline__ vector unsigned int __ATTRS_o_ai
10205 vec_vspltw(vector unsigned int __a, unsigned char __b) {
10206   __b *= 4;
10207   unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
10208   return vec_perm(__a, __a,
10209                   (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
10210                                          b1, b2, b3, __b, b1, b2, b3));
10211 }
10212
10213 static __inline__ vector bool int __ATTRS_o_ai vec_vspltw(vector bool int __a,
10214                                                           unsigned char __b) {
10215   __b *= 4;
10216   unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
10217   return vec_perm(__a, __a,
10218                   (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
10219                                          b1, b2, b3, __b, b1, b2, b3));
10220 }
10221
10222 static __inline__ vector float __ATTRS_o_ai vec_vspltw(vector float __a,
10223                                                        unsigned char __b) {
10224   __b *= 4;
10225   unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
10226   return vec_perm(__a, __a,
10227                   (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
10228                                          b1, b2, b3, __b, b1, b2, b3));
10229 }
10230
10231 /* vec_splat_s8 */
10232
10233 #define __builtin_altivec_vspltisb vec_splat_s8
10234
10235 // FIXME: parameter should be treated as 5-bit signed literal
10236 static __inline__ vector signed char __ATTRS_o_ai
10237 vec_splat_s8(signed char __a) {
10238   return (vector signed char)(__a);
10239 }
10240
10241 /* vec_vspltisb */
10242
10243 // FIXME: parameter should be treated as 5-bit signed literal
10244 static __inline__ vector signed char __ATTRS_o_ai
10245 vec_vspltisb(signed char __a) {
10246   return (vector signed char)(__a);
10247 }
10248
10249 /* vec_splat_s16 */
10250
10251 #define __builtin_altivec_vspltish vec_splat_s16
10252
10253 // FIXME: parameter should be treated as 5-bit signed literal
10254 static __inline__ vector short __ATTRS_o_ai vec_splat_s16(signed char __a) {
10255   return (vector short)(__a);
10256 }
10257
10258 /* vec_vspltish */
10259
10260 // FIXME: parameter should be treated as 5-bit signed literal
10261 static __inline__ vector short __ATTRS_o_ai vec_vspltish(signed char __a) {
10262   return (vector short)(__a);
10263 }
10264
10265 /* vec_splat_s32 */
10266
10267 #define __builtin_altivec_vspltisw vec_splat_s32
10268
10269 // FIXME: parameter should be treated as 5-bit signed literal
10270 static __inline__ vector int __ATTRS_o_ai vec_splat_s32(signed char __a) {
10271   return (vector int)(__a);
10272 }
10273
10274 /* vec_vspltisw */
10275
10276 // FIXME: parameter should be treated as 5-bit signed literal
10277 static __inline__ vector int __ATTRS_o_ai vec_vspltisw(signed char __a) {
10278   return (vector int)(__a);
10279 }
10280
10281 /* vec_splat_u8 */
10282
10283 // FIXME: parameter should be treated as 5-bit signed literal
10284 static __inline__ vector unsigned char __ATTRS_o_ai
10285 vec_splat_u8(unsigned char __a) {
10286   return (vector unsigned char)(__a);
10287 }
10288
10289 /* vec_splat_u16 */
10290
10291 // FIXME: parameter should be treated as 5-bit signed literal
10292 static __inline__ vector unsigned short __ATTRS_o_ai
10293 vec_splat_u16(signed char __a) {
10294   return (vector unsigned short)(__a);
10295 }
10296
10297 /* vec_splat_u32 */
10298
10299 // FIXME: parameter should be treated as 5-bit signed literal
10300 static __inline__ vector unsigned int __ATTRS_o_ai
10301 vec_splat_u32(signed char __a) {
10302   return (vector unsigned int)(__a);
10303 }
10304
10305 /* vec_sr */
10306
10307 // vec_sr does modulo arithmetic on __b first, so __b is allowed to be more
10308 // than the length of __a.
10309 static __inline__ vector unsigned char __ATTRS_o_ai
10310 vec_sr(vector unsigned char __a, vector unsigned char __b) {
10311   return __a >>
10312          (__b % (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));
10313 }
10314
10315 static __inline__ vector signed char __ATTRS_o_ai
10316 vec_sr(vector signed char __a, vector unsigned char __b) {
10317   return (vector signed char)vec_sr((vector unsigned char)__a, __b);
10318 }
10319
10320 static __inline__ vector unsigned short __ATTRS_o_ai
10321 vec_sr(vector unsigned short __a, vector unsigned short __b) {
10322   return __a >>
10323          (__b % (vector unsigned short)(sizeof(unsigned short) * __CHAR_BIT__));
10324 }
10325
10326 static __inline__ vector short __ATTRS_o_ai vec_sr(vector short __a,
10327                                                    vector unsigned short __b) {
10328   return (vector short)vec_sr((vector unsigned short)__a, __b);
10329 }
10330
10331 static __inline__ vector unsigned int __ATTRS_o_ai
10332 vec_sr(vector unsigned int __a, vector unsigned int __b) {
10333   return __a >>
10334          (__b % (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));
10335 }
10336
10337 static __inline__ vector int __ATTRS_o_ai vec_sr(vector int __a,
10338                                                  vector unsigned int __b) {
10339   return (vector int)vec_sr((vector unsigned int)__a, __b);
10340 }
10341
10342 #ifdef __POWER8_VECTOR__
10343 static __inline__ vector unsigned long long __ATTRS_o_ai
10344 vec_sr(vector unsigned long long __a, vector unsigned long long __b) {
10345   return __a >> (__b % (vector unsigned long long)(sizeof(unsigned long long) *
10346                                                    __CHAR_BIT__));
10347 }
10348
10349 static __inline__ vector long long __ATTRS_o_ai
10350 vec_sr(vector long long __a, vector unsigned long long __b) {
10351   return (vector long long)vec_sr((vector unsigned long long)__a, __b);
10352 }
10353 #else
10354 static __inline__ vector unsigned long long __ATTRS_o_ai
10355 vec_sr(vector unsigned long long __a, vector unsigned long long __b) {
10356   __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
10357
10358   // Big endian element zero (the left doubleword) can be right shifted as-is.
10359   // However the shift amount must be in the right doubleword.
10360   // The other element needs to be swapped into the left doubleword and
10361   // shifted. Then the left doublewords of the two result vectors are merged.
10362   vector unsigned long long __swapshift =
10363       __builtin_shufflevector(__b, __b, 1, 0);
10364   vector unsigned long long __leftelt =
10365       (vector unsigned long long)__builtin_altivec_vsro(
10366           (vector signed int)__a, (vector signed int)__swapshift);
10367 #ifdef __LITTLE_ENDIAN__
10368   __leftelt = (vector unsigned long long)__builtin_altivec_vsr(
10369       (vector signed int)__leftelt,
10370       (vector signed int)vec_vspltb((vector unsigned char)__swapshift, 0));
10371 #else
10372   __leftelt = (vector unsigned long long)__builtin_altivec_vsr(
10373       (vector signed int)__leftelt,
10374       (vector signed int)vec_vspltb((vector unsigned char)__swapshift, 15));
10375 #endif
10376   __a = __builtin_shufflevector(__a, __a, 1, 0);
10377   vector unsigned long long __rightelt =
10378       (vector unsigned long long)__builtin_altivec_vsro((vector signed int)__a,
10379                                                         (vector signed int)__b);
10380 #ifdef __LITTLE_ENDIAN__
10381   __rightelt = (vector unsigned long long)__builtin_altivec_vsr(
10382       (vector signed int)__rightelt,
10383       (vector signed int)vec_vspltb((vector unsigned char)__b, 0));
10384   return __builtin_shufflevector(__rightelt, __leftelt, 1, 3);
10385 #else
10386   __rightelt = (vector unsigned long long)__builtin_altivec_vsr(
10387       (vector signed int)__rightelt,
10388       (vector signed int)vec_vspltb((vector unsigned char)__b, 15));
10389   return __builtin_shufflevector(__leftelt, __rightelt, 0, 2);
10390 #endif
10391 }
10392
10393 static __inline__ vector long long __ATTRS_o_ai
10394 vec_sr(vector long long __a, vector unsigned long long __b) {
10395   return (vector long long)vec_sr((vector unsigned long long)__a, __b);
10396 }
10397 #endif
10398
10399 /* vec_vsrb */
10400
10401 #define __builtin_altivec_vsrb vec_vsrb
10402
10403 static __inline__ vector signed char __ATTRS_o_ai
10404 vec_vsrb(vector signed char __a, vector unsigned char __b) {
10405   return vec_sr(__a, __b);
10406 }
10407
10408 static __inline__ vector unsigned char __ATTRS_o_ai
10409 vec_vsrb(vector unsigned char __a, vector unsigned char __b) {
10410   return vec_sr(__a, __b);
10411 }
10412
10413 /* vec_vsrh */
10414
10415 #define __builtin_altivec_vsrh vec_vsrh
10416
10417 static __inline__ vector short __ATTRS_o_ai
10418 vec_vsrh(vector short __a, vector unsigned short __b) {
10419   return vec_sr(__a, __b);
10420 }
10421
10422 static __inline__ vector unsigned short __ATTRS_o_ai
10423 vec_vsrh(vector unsigned short __a, vector unsigned short __b) {
10424   return vec_sr(__a, __b);
10425 }
10426
10427 /* vec_vsrw */
10428
10429 #define __builtin_altivec_vsrw vec_vsrw
10430
10431 static __inline__ vector int __ATTRS_o_ai vec_vsrw(vector int __a,
10432                                                    vector unsigned int __b) {
10433   return vec_sr(__a, __b);
10434 }
10435
10436 static __inline__ vector unsigned int __ATTRS_o_ai
10437 vec_vsrw(vector unsigned int __a, vector unsigned int __b) {
10438   return vec_sr(__a, __b);
10439 }
10440
10441 /* vec_sra */
10442
10443 static __inline__ vector signed char __ATTRS_o_ai
10444 vec_sra(vector signed char __a, vector unsigned char __b) {
10445   return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
10446 }
10447
10448 static __inline__ vector unsigned char __ATTRS_o_ai
10449 vec_sra(vector unsigned char __a, vector unsigned char __b) {
10450   return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
10451 }
10452
10453 static __inline__ vector short __ATTRS_o_ai vec_sra(vector short __a,
10454                                                     vector unsigned short __b) {
10455   return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
10456 }
10457
10458 static __inline__ vector unsigned short __ATTRS_o_ai
10459 vec_sra(vector unsigned short __a, vector unsigned short __b) {
10460   return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
10461 }
10462
10463 static __inline__ vector int __ATTRS_o_ai vec_sra(vector int __a,
10464                                                   vector unsigned int __b) {
10465   return __builtin_altivec_vsraw(__a, __b);
10466 }
10467
10468 static __inline__ vector unsigned int __ATTRS_o_ai
10469 vec_sra(vector unsigned int __a, vector unsigned int __b) {
10470   return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
10471 }
10472
10473 #ifdef __POWER8_VECTOR__
10474 static __inline__ vector signed long long __ATTRS_o_ai
10475 vec_sra(vector signed long long __a, vector unsigned long long __b) {
10476   return __a >> __b;
10477 }
10478
10479 static __inline__ vector unsigned long long __ATTRS_o_ai
10480 vec_sra(vector unsigned long long __a, vector unsigned long long __b) {
10481   return (vector unsigned long long)((vector signed long long)__a >> __b);
10482 }
10483 #else
10484 static __inline__ vector signed long long __ATTRS_o_ai
10485 vec_sra(vector signed long long __a, vector unsigned long long __b) {
10486   __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
10487   return __a >> __b;
10488 }
10489
10490 static __inline__ vector unsigned long long __ATTRS_o_ai
10491 vec_sra(vector unsigned long long __a, vector unsigned long long __b) {
10492   __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
10493   return (vector unsigned long long)((vector signed long long)__a >> __b);
10494 }
10495 #endif
10496
10497 /* vec_vsrab */
10498
10499 static __inline__ vector signed char __ATTRS_o_ai
10500 vec_vsrab(vector signed char __a, vector unsigned char __b) {
10501   return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
10502 }
10503
10504 static __inline__ vector unsigned char __ATTRS_o_ai
10505 vec_vsrab(vector unsigned char __a, vector unsigned char __b) {
10506   return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
10507 }
10508
10509 /* vec_vsrah */
10510
10511 static __inline__ vector short __ATTRS_o_ai
10512 vec_vsrah(vector short __a, vector unsigned short __b) {
10513   return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
10514 }
10515
10516 static __inline__ vector unsigned short __ATTRS_o_ai
10517 vec_vsrah(vector unsigned short __a, vector unsigned short __b) {
10518   return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
10519 }
10520
10521 /* vec_vsraw */
10522
10523 static __inline__ vector int __ATTRS_o_ai vec_vsraw(vector int __a,
10524                                                     vector unsigned int __b) {
10525   return __builtin_altivec_vsraw(__a, __b);
10526 }
10527
10528 static __inline__ vector unsigned int __ATTRS_o_ai
10529 vec_vsraw(vector unsigned int __a, vector unsigned int __b) {
10530   return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
10531 }
10532
10533 /* vec_srl */
10534
10535 static __inline__ vector signed char __ATTRS_o_ai
10536 vec_srl(vector signed char __a, vector unsigned char __b) {
10537   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10538                                                    (vector int)__b);
10539 }
10540
10541 static __inline__ vector signed char __ATTRS_o_ai
10542 vec_srl(vector signed char __a, vector unsigned short __b) {
10543   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10544                                                    (vector int)__b);
10545 }
10546
10547 static __inline__ vector signed char __ATTRS_o_ai
10548 vec_srl(vector signed char __a, vector unsigned int __b) {
10549   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10550                                                    (vector int)__b);
10551 }
10552
10553 static __inline__ vector unsigned char __ATTRS_o_ai
10554 vec_srl(vector unsigned char __a, vector unsigned char __b) {
10555   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10556                                                      (vector int)__b);
10557 }
10558
10559 static __inline__ vector unsigned char __ATTRS_o_ai
10560 vec_srl(vector unsigned char __a, vector unsigned short __b) {
10561   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10562                                                      (vector int)__b);
10563 }
10564
10565 static __inline__ vector unsigned char __ATTRS_o_ai
10566 vec_srl(vector unsigned char __a, vector unsigned int __b) {
10567   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10568                                                      (vector int)__b);
10569 }
10570
10571 static __inline__ vector bool char __ATTRS_o_ai
10572 vec_srl(vector bool char __a, vector unsigned char __b) {
10573   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10574                                                  (vector int)__b);
10575 }
10576
10577 static __inline__ vector bool char __ATTRS_o_ai
10578 vec_srl(vector bool char __a, vector unsigned short __b) {
10579   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10580                                                  (vector int)__b);
10581 }
10582
10583 static __inline__ vector bool char __ATTRS_o_ai
10584 vec_srl(vector bool char __a, vector unsigned int __b) {
10585   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10586                                                  (vector int)__b);
10587 }
10588
10589 static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
10590                                                     vector unsigned char __b) {
10591   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10592 }
10593
10594 static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
10595                                                     vector unsigned short __b) {
10596   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10597 }
10598
10599 static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
10600                                                     vector unsigned int __b) {
10601   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10602 }
10603
10604 static __inline__ vector unsigned short __ATTRS_o_ai
10605 vec_srl(vector unsigned short __a, vector unsigned char __b) {
10606   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10607                                                       (vector int)__b);
10608 }
10609
10610 static __inline__ vector unsigned short __ATTRS_o_ai
10611 vec_srl(vector unsigned short __a, vector unsigned short __b) {
10612   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10613                                                       (vector int)__b);
10614 }
10615
10616 static __inline__ vector unsigned short __ATTRS_o_ai
10617 vec_srl(vector unsigned short __a, vector unsigned int __b) {
10618   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10619                                                       (vector int)__b);
10620 }
10621
10622 static __inline__ vector bool short __ATTRS_o_ai
10623 vec_srl(vector bool short __a, vector unsigned char __b) {
10624   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10625                                                   (vector int)__b);
10626 }
10627
10628 static __inline__ vector bool short __ATTRS_o_ai
10629 vec_srl(vector bool short __a, vector unsigned short __b) {
10630   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10631                                                   (vector int)__b);
10632 }
10633
10634 static __inline__ vector bool short __ATTRS_o_ai
10635 vec_srl(vector bool short __a, vector unsigned int __b) {
10636   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10637                                                   (vector int)__b);
10638 }
10639
10640 static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
10641                                                     vector unsigned char __b) {
10642   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10643 }
10644
10645 static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
10646                                                     vector unsigned short __b) {
10647   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10648 }
10649
10650 static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
10651                                                     vector unsigned int __b) {
10652   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10653 }
10654
10655 static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
10656                                                   vector unsigned char __b) {
10657   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10658 }
10659
10660 static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
10661                                                   vector unsigned short __b) {
10662   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10663 }
10664
10665 static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
10666                                                   vector unsigned int __b) {
10667   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10668 }
10669
10670 static __inline__ vector unsigned int __ATTRS_o_ai
10671 vec_srl(vector unsigned int __a, vector unsigned char __b) {
10672   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10673                                                     (vector int)__b);
10674 }
10675
10676 static __inline__ vector unsigned int __ATTRS_o_ai
10677 vec_srl(vector unsigned int __a, vector unsigned short __b) {
10678   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10679                                                     (vector int)__b);
10680 }
10681
10682 static __inline__ vector unsigned int __ATTRS_o_ai
10683 vec_srl(vector unsigned int __a, vector unsigned int __b) {
10684   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10685                                                     (vector int)__b);
10686 }
10687
10688 static __inline__ vector bool int __ATTRS_o_ai
10689 vec_srl(vector bool int __a, vector unsigned char __b) {
10690   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10691                                                 (vector int)__b);
10692 }
10693
10694 static __inline__ vector bool int __ATTRS_o_ai
10695 vec_srl(vector bool int __a, vector unsigned short __b) {
10696   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10697                                                 (vector int)__b);
10698 }
10699
10700 static __inline__ vector bool int __ATTRS_o_ai
10701 vec_srl(vector bool int __a, vector unsigned int __b) {
10702   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10703                                                 (vector int)__b);
10704 }
10705
10706 #ifdef __VSX__
10707 static __inline__ vector signed long long __ATTRS_o_ai
10708 vec_srl(vector signed long long __a, vector unsigned char __b) {
10709   return (vector signed long long)__builtin_altivec_vsr((vector int)__a,
10710                                                         (vector int)__b);
10711 }
10712
10713 static __inline__ vector unsigned long long __ATTRS_o_ai
10714 vec_srl(vector unsigned long long __a, vector unsigned char __b) {
10715   return (vector unsigned long long)__builtin_altivec_vsr((vector int)__a,
10716                                                           (vector int)__b);
10717 }
10718 #endif
10719
10720 /* vec_vsr */
10721
10722 static __inline__ vector signed char __ATTRS_o_ai
10723 vec_vsr(vector signed char __a, vector unsigned char __b) {
10724   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10725                                                    (vector int)__b);
10726 }
10727
10728 static __inline__ vector signed char __ATTRS_o_ai
10729 vec_vsr(vector signed char __a, vector unsigned short __b) {
10730   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10731                                                    (vector int)__b);
10732 }
10733
10734 static __inline__ vector signed char __ATTRS_o_ai
10735 vec_vsr(vector signed char __a, vector unsigned int __b) {
10736   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
10737                                                    (vector int)__b);
10738 }
10739
10740 static __inline__ vector unsigned char __ATTRS_o_ai
10741 vec_vsr(vector unsigned char __a, vector unsigned char __b) {
10742   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10743                                                      (vector int)__b);
10744 }
10745
10746 static __inline__ vector unsigned char __ATTRS_o_ai
10747 vec_vsr(vector unsigned char __a, vector unsigned short __b) {
10748   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10749                                                      (vector int)__b);
10750 }
10751
10752 static __inline__ vector unsigned char __ATTRS_o_ai
10753 vec_vsr(vector unsigned char __a, vector unsigned int __b) {
10754   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
10755                                                      (vector int)__b);
10756 }
10757
10758 static __inline__ vector bool char __ATTRS_o_ai
10759 vec_vsr(vector bool char __a, vector unsigned char __b) {
10760   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10761                                                  (vector int)__b);
10762 }
10763
10764 static __inline__ vector bool char __ATTRS_o_ai
10765 vec_vsr(vector bool char __a, vector unsigned short __b) {
10766   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10767                                                  (vector int)__b);
10768 }
10769
10770 static __inline__ vector bool char __ATTRS_o_ai
10771 vec_vsr(vector bool char __a, vector unsigned int __b) {
10772   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
10773                                                  (vector int)__b);
10774 }
10775
10776 static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
10777                                                     vector unsigned char __b) {
10778   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10779 }
10780
10781 static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
10782                                                     vector unsigned short __b) {
10783   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10784 }
10785
10786 static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
10787                                                     vector unsigned int __b) {
10788   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10789 }
10790
10791 static __inline__ vector unsigned short __ATTRS_o_ai
10792 vec_vsr(vector unsigned short __a, vector unsigned char __b) {
10793   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10794                                                       (vector int)__b);
10795 }
10796
10797 static __inline__ vector unsigned short __ATTRS_o_ai
10798 vec_vsr(vector unsigned short __a, vector unsigned short __b) {
10799   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10800                                                       (vector int)__b);
10801 }
10802
10803 static __inline__ vector unsigned short __ATTRS_o_ai
10804 vec_vsr(vector unsigned short __a, vector unsigned int __b) {
10805   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
10806                                                       (vector int)__b);
10807 }
10808
10809 static __inline__ vector bool short __ATTRS_o_ai
10810 vec_vsr(vector bool short __a, vector unsigned char __b) {
10811   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10812                                                   (vector int)__b);
10813 }
10814
10815 static __inline__ vector bool short __ATTRS_o_ai
10816 vec_vsr(vector bool short __a, vector unsigned short __b) {
10817   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10818                                                   (vector int)__b);
10819 }
10820
10821 static __inline__ vector bool short __ATTRS_o_ai
10822 vec_vsr(vector bool short __a, vector unsigned int __b) {
10823   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
10824                                                   (vector int)__b);
10825 }
10826
10827 static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
10828                                                     vector unsigned char __b) {
10829   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10830 }
10831
10832 static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
10833                                                     vector unsigned short __b) {
10834   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10835 }
10836
10837 static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
10838                                                     vector unsigned int __b) {
10839   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
10840 }
10841
10842 static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
10843                                                   vector unsigned char __b) {
10844   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10845 }
10846
10847 static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
10848                                                   vector unsigned short __b) {
10849   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10850 }
10851
10852 static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
10853                                                   vector unsigned int __b) {
10854   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
10855 }
10856
10857 static __inline__ vector unsigned int __ATTRS_o_ai
10858 vec_vsr(vector unsigned int __a, vector unsigned char __b) {
10859   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10860                                                     (vector int)__b);
10861 }
10862
10863 static __inline__ vector unsigned int __ATTRS_o_ai
10864 vec_vsr(vector unsigned int __a, vector unsigned short __b) {
10865   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10866                                                     (vector int)__b);
10867 }
10868
10869 static __inline__ vector unsigned int __ATTRS_o_ai
10870 vec_vsr(vector unsigned int __a, vector unsigned int __b) {
10871   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
10872                                                     (vector int)__b);
10873 }
10874
10875 static __inline__ vector bool int __ATTRS_o_ai
10876 vec_vsr(vector bool int __a, vector unsigned char __b) {
10877   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10878                                                 (vector int)__b);
10879 }
10880
10881 static __inline__ vector bool int __ATTRS_o_ai
10882 vec_vsr(vector bool int __a, vector unsigned short __b) {
10883   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10884                                                 (vector int)__b);
10885 }
10886
10887 static __inline__ vector bool int __ATTRS_o_ai
10888 vec_vsr(vector bool int __a, vector unsigned int __b) {
10889   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10890                                                 (vector int)__b);
10891 }
10892
10893 /* vec_sro */
10894
10895 static __inline__ vector signed char __ATTRS_o_ai
10896 vec_sro(vector signed char __a, vector signed char __b) {
10897   return (vector signed char)__builtin_altivec_vsro((vector int)__a,
10898                                                     (vector int)__b);
10899 }
10900
10901 static __inline__ vector signed char __ATTRS_o_ai
10902 vec_sro(vector signed char __a, vector unsigned char __b) {
10903   return (vector signed char)__builtin_altivec_vsro((vector int)__a,
10904                                                     (vector int)__b);
10905 }
10906
10907 static __inline__ vector unsigned char __ATTRS_o_ai
10908 vec_sro(vector unsigned char __a, vector signed char __b) {
10909   return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
10910                                                       (vector int)__b);
10911 }
10912
10913 static __inline__ vector unsigned char __ATTRS_o_ai
10914 vec_sro(vector unsigned char __a, vector unsigned char __b) {
10915   return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
10916                                                       (vector int)__b);
10917 }
10918
10919 static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
10920                                                     vector signed char __b) {
10921   return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10922 }
10923
10924 static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
10925                                                     vector unsigned char __b) {
10926   return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10927 }
10928
10929 static __inline__ vector unsigned short __ATTRS_o_ai
10930 vec_sro(vector unsigned short __a, vector signed char __b) {
10931   return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
10932                                                        (vector int)__b);
10933 }
10934
10935 static __inline__ vector unsigned short __ATTRS_o_ai
10936 vec_sro(vector unsigned short __a, vector unsigned char __b) {
10937   return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
10938                                                        (vector int)__b);
10939 }
10940
10941 static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
10942                                                     vector signed char __b) {
10943   return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10944 }
10945
10946 static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
10947                                                     vector unsigned char __b) {
10948   return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10949 }
10950
10951 static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
10952                                                   vector signed char __b) {
10953   return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
10954 }
10955
10956 static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
10957                                                   vector unsigned char __b) {
10958   return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
10959 }
10960
10961 static __inline__ vector unsigned int __ATTRS_o_ai
10962 vec_sro(vector unsigned int __a, vector signed char __b) {
10963   return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
10964                                                      (vector int)__b);
10965 }
10966
10967 static __inline__ vector unsigned int __ATTRS_o_ai
10968 vec_sro(vector unsigned int __a, vector unsigned char __b) {
10969   return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
10970                                                      (vector int)__b);
10971 }
10972
10973 static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
10974                                                     vector signed char __b) {
10975   return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10976 }
10977
10978 static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
10979                                                     vector unsigned char __b) {
10980   return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10981 }
10982
10983 #ifdef __VSX__
10984 static __inline__ vector signed long long __ATTRS_o_ai
10985 vec_sro(vector signed long long __a, vector signed char __b) {
10986   return (vector signed long long)__builtin_altivec_vsro((vector int)__a,
10987                                                          (vector int)__b);
10988 }
10989
10990 static __inline__ vector signed long long __ATTRS_o_ai
10991 vec_sro(vector signed long long __a, vector unsigned char __b) {
10992   return (vector signed long long)__builtin_altivec_vsro((vector int)__a,
10993                                                          (vector int)__b);
10994 }
10995
10996 static __inline__ vector unsigned long long __ATTRS_o_ai
10997 vec_sro(vector unsigned long long __a, vector signed char __b) {
10998   return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,
10999                                                            (vector int)__b);
11000 }
11001
11002 static __inline__ vector unsigned long long __ATTRS_o_ai
11003 vec_sro(vector unsigned long long __a, vector unsigned char __b) {
11004   return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,
11005                                                            (vector int)__b);
11006 }
11007 #endif
11008
11009 /* vec_vsro */
11010
11011 static __inline__ vector signed char __ATTRS_o_ai
11012 vec_vsro(vector signed char __a, vector signed char __b) {
11013   return (vector signed char)__builtin_altivec_vsro((vector int)__a,
11014                                                     (vector int)__b);
11015 }
11016
11017 static __inline__ vector signed char __ATTRS_o_ai
11018 vec_vsro(vector signed char __a, vector unsigned char __b) {
11019   return (vector signed char)__builtin_altivec_vsro((vector int)__a,
11020                                                     (vector int)__b);
11021 }
11022
11023 static __inline__ vector unsigned char __ATTRS_o_ai
11024 vec_vsro(vector unsigned char __a, vector signed char __b) {
11025   return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
11026                                                       (vector int)__b);
11027 }
11028
11029 static __inline__ vector unsigned char __ATTRS_o_ai
11030 vec_vsro(vector unsigned char __a, vector unsigned char __b) {
11031   return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
11032                                                       (vector int)__b);
11033 }
11034
11035 static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
11036                                                      vector signed char __b) {
11037   return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11038 }
11039
11040 static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
11041                                                      vector unsigned char __b) {
11042   return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11043 }
11044
11045 static __inline__ vector unsigned short __ATTRS_o_ai
11046 vec_vsro(vector unsigned short __a, vector signed char __b) {
11047   return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
11048                                                        (vector int)__b);
11049 }
11050
11051 static __inline__ vector unsigned short __ATTRS_o_ai
11052 vec_vsro(vector unsigned short __a, vector unsigned char __b) {
11053   return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
11054                                                        (vector int)__b);
11055 }
11056
11057 static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
11058                                                      vector signed char __b) {
11059   return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11060 }
11061
11062 static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
11063                                                      vector unsigned char __b) {
11064   return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11065 }
11066
11067 static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
11068                                                    vector signed char __b) {
11069   return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
11070 }
11071
11072 static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
11073                                                    vector unsigned char __b) {
11074   return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
11075 }
11076
11077 static __inline__ vector unsigned int __ATTRS_o_ai
11078 vec_vsro(vector unsigned int __a, vector signed char __b) {
11079   return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
11080                                                      (vector int)__b);
11081 }
11082
11083 static __inline__ vector unsigned int __ATTRS_o_ai
11084 vec_vsro(vector unsigned int __a, vector unsigned char __b) {
11085   return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
11086                                                      (vector int)__b);
11087 }
11088
11089 static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
11090                                                      vector signed char __b) {
11091   return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11092 }
11093
11094 static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
11095                                                      vector unsigned char __b) {
11096   return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
11097 }
11098
11099 /* vec_st */
11100
11101 static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, long __b,
11102                                            vector signed char *__c) {
11103   __builtin_altivec_stvx((vector int)__a, __b, __c);
11104 }
11105
11106 static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, long __b,
11107                                            signed char *__c) {
11108   __builtin_altivec_stvx((vector int)__a, __b, __c);
11109 }
11110
11111 static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, long __b,
11112                                            vector unsigned char *__c) {
11113   __builtin_altivec_stvx((vector int)__a, __b, __c);
11114 }
11115
11116 static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, long __b,
11117                                            unsigned char *__c) {
11118   __builtin_altivec_stvx((vector int)__a, __b, __c);
11119 }
11120
11121 static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
11122                                            signed char *__c) {
11123   __builtin_altivec_stvx((vector int)__a, __b, __c);
11124 }
11125
11126 static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
11127                                            unsigned char *__c) {
11128   __builtin_altivec_stvx((vector int)__a, __b, __c);
11129 }
11130
11131 static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
11132                                            vector bool char *__c) {
11133   __builtin_altivec_stvx((vector int)__a, __b, __c);
11134 }
11135
11136 static __inline__ void __ATTRS_o_ai vec_st(vector short __a, long __b,
11137                                            vector short *__c) {
11138   __builtin_altivec_stvx((vector int)__a, __b, __c);
11139 }
11140
11141 static __inline__ void __ATTRS_o_ai vec_st(vector short __a, long __b,
11142                                            short *__c) {
11143   __builtin_altivec_stvx((vector int)__a, __b, __c);
11144 }
11145
11146 static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, long __b,
11147                                            vector unsigned short *__c) {
11148   __builtin_altivec_stvx((vector int)__a, __b, __c);
11149 }
11150
11151 static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, long __b,
11152                                            unsigned short *__c) {
11153   __builtin_altivec_stvx((vector int)__a, __b, __c);
11154 }
11155
11156 static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
11157                                            short *__c) {
11158   __builtin_altivec_stvx((vector int)__a, __b, __c);
11159 }
11160
11161 static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
11162                                            unsigned short *__c) {
11163   __builtin_altivec_stvx((vector int)__a, __b, __c);
11164 }
11165
11166 static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
11167                                            vector bool short *__c) {
11168   __builtin_altivec_stvx((vector int)__a, __b, __c);
11169 }
11170
11171 static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
11172                                            short *__c) {
11173   __builtin_altivec_stvx((vector int)__a, __b, __c);
11174 }
11175
11176 static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
11177                                            unsigned short *__c) {
11178   __builtin_altivec_stvx((vector int)__a, __b, __c);
11179 }
11180
11181 static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
11182                                            vector pixel *__c) {
11183   __builtin_altivec_stvx((vector int)__a, __b, __c);
11184 }
11185
11186 static __inline__ void __ATTRS_o_ai vec_st(vector int __a, long __b,
11187                                            vector int *__c) {
11188   __builtin_altivec_stvx(__a, __b, __c);
11189 }
11190
11191 static __inline__ void __ATTRS_o_ai vec_st(vector int __a, long __b, int *__c) {
11192   __builtin_altivec_stvx(__a, __b, __c);
11193 }
11194
11195 static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, long __b,
11196                                            vector unsigned int *__c) {
11197   __builtin_altivec_stvx((vector int)__a, __b, __c);
11198 }
11199
11200 static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, long __b,
11201                                            unsigned int *__c) {
11202   __builtin_altivec_stvx((vector int)__a, __b, __c);
11203 }
11204
11205 static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
11206                                            int *__c) {
11207   __builtin_altivec_stvx((vector int)__a, __b, __c);
11208 }
11209
11210 static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
11211                                            unsigned int *__c) {
11212   __builtin_altivec_stvx((vector int)__a, __b, __c);
11213 }
11214
11215 static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
11216                                            vector bool int *__c) {
11217   __builtin_altivec_stvx((vector int)__a, __b, __c);
11218 }
11219
11220 static __inline__ void __ATTRS_o_ai vec_st(vector float __a, long __b,
11221                                            vector float *__c) {
11222   __builtin_altivec_stvx((vector int)__a, __b, __c);
11223 }
11224
11225 static __inline__ void __ATTRS_o_ai vec_st(vector float __a, long __b,
11226                                            float *__c) {
11227   __builtin_altivec_stvx((vector int)__a, __b, __c);
11228 }
11229
11230 /* vec_stvx */
11231
11232 static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, long __b,
11233                                              vector signed char *__c) {
11234   __builtin_altivec_stvx((vector int)__a, __b, __c);
11235 }
11236
11237 static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, long __b,
11238                                              signed char *__c) {
11239   __builtin_altivec_stvx((vector int)__a, __b, __c);
11240 }
11241
11242 static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, long __b,
11243                                              vector unsigned char *__c) {
11244   __builtin_altivec_stvx((vector int)__a, __b, __c);
11245 }
11246
11247 static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, long __b,
11248                                              unsigned char *__c) {
11249   __builtin_altivec_stvx((vector int)__a, __b, __c);
11250 }
11251
11252 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
11253                                              signed char *__c) {
11254   __builtin_altivec_stvx((vector int)__a, __b, __c);
11255 }
11256
11257 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
11258                                              unsigned char *__c) {
11259   __builtin_altivec_stvx((vector int)__a, __b, __c);
11260 }
11261
11262 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
11263                                              vector bool char *__c) {
11264   __builtin_altivec_stvx((vector int)__a, __b, __c);
11265 }
11266
11267 static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, long __b,
11268                                              vector short *__c) {
11269   __builtin_altivec_stvx((vector int)__a, __b, __c);
11270 }
11271
11272 static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, long __b,
11273                                              short *__c) {
11274   __builtin_altivec_stvx((vector int)__a, __b, __c);
11275 }
11276
11277 static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, long __b,
11278                                              vector unsigned short *__c) {
11279   __builtin_altivec_stvx((vector int)__a, __b, __c);
11280 }
11281
11282 static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, long __b,
11283                                              unsigned short *__c) {
11284   __builtin_altivec_stvx((vector int)__a, __b, __c);
11285 }
11286
11287 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
11288                                              short *__c) {
11289   __builtin_altivec_stvx((vector int)__a, __b, __c);
11290 }
11291
11292 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
11293                                              unsigned short *__c) {
11294   __builtin_altivec_stvx((vector int)__a, __b, __c);
11295 }
11296
11297 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
11298                                              vector bool short *__c) {
11299   __builtin_altivec_stvx((vector int)__a, __b, __c);
11300 }
11301
11302 static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
11303                                              short *__c) {
11304   __builtin_altivec_stvx((vector int)__a, __b, __c);
11305 }
11306
11307 static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
11308                                              unsigned short *__c) {
11309   __builtin_altivec_stvx((vector int)__a, __b, __c);
11310 }
11311
11312 static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
11313                                              vector pixel *__c) {
11314   __builtin_altivec_stvx((vector int)__a, __b, __c);
11315 }
11316
11317 static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, long __b,
11318                                              vector int *__c) {
11319   __builtin_altivec_stvx(__a, __b, __c);
11320 }
11321
11322 static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, long __b,
11323                                              int *__c) {
11324   __builtin_altivec_stvx(__a, __b, __c);
11325 }
11326
11327 static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, long __b,
11328                                              vector unsigned int *__c) {
11329   __builtin_altivec_stvx((vector int)__a, __b, __c);
11330 }
11331
11332 static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, long __b,
11333                                              unsigned int *__c) {
11334   __builtin_altivec_stvx((vector int)__a, __b, __c);
11335 }
11336
11337 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
11338                                              int *__c) {
11339   __builtin_altivec_stvx((vector int)__a, __b, __c);
11340 }
11341
11342 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
11343                                              unsigned int *__c) {
11344   __builtin_altivec_stvx((vector int)__a, __b, __c);
11345 }
11346
11347 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
11348                                              vector bool int *__c) {
11349   __builtin_altivec_stvx((vector int)__a, __b, __c);
11350 }
11351
11352 static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, long __b,
11353                                              vector float *__c) {
11354   __builtin_altivec_stvx((vector int)__a, __b, __c);
11355 }
11356
11357 static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, long __b,
11358                                              float *__c) {
11359   __builtin_altivec_stvx((vector int)__a, __b, __c);
11360 }
11361
11362 /* vec_ste */
11363
11364 static __inline__ void __ATTRS_o_ai vec_ste(vector signed char __a, long __b,
11365                                             signed char *__c) {
11366   __builtin_altivec_stvebx((vector char)__a, __b, __c);
11367 }
11368
11369 static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned char __a, long __b,
11370                                             unsigned char *__c) {
11371   __builtin_altivec_stvebx((vector char)__a, __b, __c);
11372 }
11373
11374 static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, long __b,
11375                                             signed char *__c) {
11376   __builtin_altivec_stvebx((vector char)__a, __b, __c);
11377 }
11378
11379 static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, long __b,
11380                                             unsigned char *__c) {
11381   __builtin_altivec_stvebx((vector char)__a, __b, __c);
11382 }
11383
11384 static __inline__ void __ATTRS_o_ai vec_ste(vector short __a, long __b,
11385                                             short *__c) {
11386   __builtin_altivec_stvehx(__a, __b, __c);
11387 }
11388
11389 static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned short __a, long __b,
11390                                             unsigned short *__c) {
11391   __builtin_altivec_stvehx((vector short)__a, __b, __c);
11392 }
11393
11394 static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, long __b,
11395                                             short *__c) {
11396   __builtin_altivec_stvehx((vector short)__a, __b, __c);
11397 }
11398
11399 static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, long __b,
11400                                             unsigned short *__c) {
11401   __builtin_altivec_stvehx((vector short)__a, __b, __c);
11402 }
11403
11404 static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, long __b,
11405                                             short *__c) {
11406   __builtin_altivec_stvehx((vector short)__a, __b, __c);
11407 }
11408
11409 static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, long __b,
11410                                             unsigned short *__c) {
11411   __builtin_altivec_stvehx((vector short)__a, __b, __c);
11412 }
11413
11414 static __inline__ void __ATTRS_o_ai vec_ste(vector int __a, long __b, int *__c) {
11415   __builtin_altivec_stvewx(__a, __b, __c);
11416 }
11417
11418 static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned int __a, long __b,
11419                                             unsigned int *__c) {
11420   __builtin_altivec_stvewx((vector int)__a, __b, __c);
11421 }
11422
11423 static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, long __b,
11424                                             int *__c) {
11425   __builtin_altivec_stvewx((vector int)__a, __b, __c);
11426 }
11427
11428 static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, long __b,
11429                                             unsigned int *__c) {
11430   __builtin_altivec_stvewx((vector int)__a, __b, __c);
11431 }
11432
11433 static __inline__ void __ATTRS_o_ai vec_ste(vector float __a, long __b,
11434                                             float *__c) {
11435   __builtin_altivec_stvewx((vector int)__a, __b, __c);
11436 }
11437
11438 /* vec_stvebx */
11439
11440 static __inline__ void __ATTRS_o_ai vec_stvebx(vector signed char __a, long __b,
11441                                                signed char *__c) {
11442   __builtin_altivec_stvebx((vector char)__a, __b, __c);
11443 }
11444
11445 static __inline__ void __ATTRS_o_ai vec_stvebx(vector unsigned char __a,
11446                                                long __b, unsigned char *__c) {
11447   __builtin_altivec_stvebx((vector char)__a, __b, __c);
11448 }
11449
11450 static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, long __b,
11451                                                signed char *__c) {
11452   __builtin_altivec_stvebx((vector char)__a, __b, __c);
11453 }
11454
11455 static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, long __b,
11456                                                unsigned char *__c) {
11457   __builtin_altivec_stvebx((vector char)__a, __b, __c);
11458 }
11459
11460 /* vec_stvehx */
11461
11462 static __inline__ void __ATTRS_o_ai vec_stvehx(vector short __a, long __b,
11463                                                short *__c) {
11464   __builtin_altivec_stvehx(__a, __b, __c);
11465 }
11466
11467 static __inline__ void __ATTRS_o_ai vec_stvehx(vector unsigned short __a,
11468                                                long __b, unsigned short *__c) {
11469   __builtin_altivec_stvehx((vector short)__a, __b, __c);
11470 }
11471
11472 static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, long __b,
11473                                                short *__c) {
11474   __builtin_altivec_stvehx((vector short)__a, __b, __c);
11475 }
11476
11477 static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, long __b,
11478                                                unsigned short *__c) {
11479   __builtin_altivec_stvehx((vector short)__a, __b, __c);
11480 }
11481
11482 static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, long __b,
11483                                                short *__c) {
11484   __builtin_altivec_stvehx((vector short)__a, __b, __c);
11485 }
11486
11487 static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, long __b,
11488                                                unsigned short *__c) {
11489   __builtin_altivec_stvehx((vector short)__a, __b, __c);
11490 }
11491
11492 /* vec_stvewx */
11493
11494 static __inline__ void __ATTRS_o_ai vec_stvewx(vector int __a, long __b,
11495                                                int *__c) {
11496   __builtin_altivec_stvewx(__a, __b, __c);
11497 }
11498
11499 static __inline__ void __ATTRS_o_ai vec_stvewx(vector unsigned int __a, long __b,
11500                                                unsigned int *__c) {
11501   __builtin_altivec_stvewx((vector int)__a, __b, __c);
11502 }
11503
11504 static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, long __b,
11505                                                int *__c) {
11506   __builtin_altivec_stvewx((vector int)__a, __b, __c);
11507 }
11508
11509 static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, long __b,
11510                                                unsigned int *__c) {
11511   __builtin_altivec_stvewx((vector int)__a, __b, __c);
11512 }
11513
11514 static __inline__ void __ATTRS_o_ai vec_stvewx(vector float __a, long __b,
11515                                                float *__c) {
11516   __builtin_altivec_stvewx((vector int)__a, __b, __c);
11517 }
11518
11519 /* vec_stl */
11520
11521 static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
11522                                             vector signed char *__c) {
11523   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11524 }
11525
11526 static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
11527                                             signed char *__c) {
11528   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11529 }
11530
11531 static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
11532                                             vector unsigned char *__c) {
11533   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11534 }
11535
11536 static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
11537                                             unsigned char *__c) {
11538   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11539 }
11540
11541 static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
11542                                             signed char *__c) {
11543   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11544 }
11545
11546 static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
11547                                             unsigned char *__c) {
11548   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11549 }
11550
11551 static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
11552                                             vector bool char *__c) {
11553   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11554 }
11555
11556 static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
11557                                             vector short *__c) {
11558   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11559 }
11560
11561 static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
11562                                             short *__c) {
11563   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11564 }
11565
11566 static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
11567                                             vector unsigned short *__c) {
11568   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11569 }
11570
11571 static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
11572                                             unsigned short *__c) {
11573   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11574 }
11575
11576 static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
11577                                             short *__c) {
11578   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11579 }
11580
11581 static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
11582                                             unsigned short *__c) {
11583   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11584 }
11585
11586 static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
11587                                             vector bool short *__c) {
11588   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11589 }
11590
11591 static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
11592                                             short *__c) {
11593   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11594 }
11595
11596 static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
11597                                             unsigned short *__c) {
11598   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11599 }
11600
11601 static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
11602                                             vector pixel *__c) {
11603   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11604 }
11605
11606 static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b,
11607                                             vector int *__c) {
11608   __builtin_altivec_stvxl(__a, __b, __c);
11609 }
11610
11611 static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b, int *__c) {
11612   __builtin_altivec_stvxl(__a, __b, __c);
11613 }
11614
11615 static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
11616                                             vector unsigned int *__c) {
11617   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11618 }
11619
11620 static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
11621                                             unsigned int *__c) {
11622   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11623 }
11624
11625 static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
11626                                             int *__c) {
11627   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11628 }
11629
11630 static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
11631                                             unsigned int *__c) {
11632   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11633 }
11634
11635 static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
11636                                             vector bool int *__c) {
11637   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11638 }
11639
11640 static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
11641                                             vector float *__c) {
11642   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11643 }
11644
11645 static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
11646                                             float *__c) {
11647   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11648 }
11649
11650 /* vec_stvxl */
11651
11652 static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
11653                                               vector signed char *__c) {
11654   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11655 }
11656
11657 static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
11658                                               signed char *__c) {
11659   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11660 }
11661
11662 static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
11663                                               vector unsigned char *__c) {
11664   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11665 }
11666
11667 static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
11668                                               unsigned char *__c) {
11669   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11670 }
11671
11672 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
11673                                               signed char *__c) {
11674   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11675 }
11676
11677 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
11678                                               unsigned char *__c) {
11679   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11680 }
11681
11682 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
11683                                               vector bool char *__c) {
11684   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11685 }
11686
11687 static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
11688                                               vector short *__c) {
11689   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11690 }
11691
11692 static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
11693                                               short *__c) {
11694   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11695 }
11696
11697 static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
11698                                               int __b,
11699                                               vector unsigned short *__c) {
11700   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11701 }
11702
11703 static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
11704                                               int __b, unsigned short *__c) {
11705   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11706 }
11707
11708 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
11709                                               short *__c) {
11710   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11711 }
11712
11713 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
11714                                               unsigned short *__c) {
11715   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11716 }
11717
11718 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
11719                                               vector bool short *__c) {
11720   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11721 }
11722
11723 static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
11724                                               short *__c) {
11725   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11726 }
11727
11728 static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
11729                                               unsigned short *__c) {
11730   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11731 }
11732
11733 static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
11734                                               vector pixel *__c) {
11735   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11736 }
11737
11738 static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
11739                                               vector int *__c) {
11740   __builtin_altivec_stvxl(__a, __b, __c);
11741 }
11742
11743 static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
11744                                               int *__c) {
11745   __builtin_altivec_stvxl(__a, __b, __c);
11746 }
11747
11748 static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
11749                                               vector unsigned int *__c) {
11750   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11751 }
11752
11753 static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
11754                                               unsigned int *__c) {
11755   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11756 }
11757
11758 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
11759                                               int *__c) {
11760   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11761 }
11762
11763 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
11764                                               unsigned int *__c) {
11765   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11766 }
11767
11768 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
11769                                               vector bool int *__c) {
11770   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11771 }
11772
11773 static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
11774                                               vector float *__c) {
11775   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11776 }
11777
11778 static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
11779                                               float *__c) {
11780   __builtin_altivec_stvxl((vector int)__a, __b, __c);
11781 }
11782
11783 /* vec_sub */
11784
11785 static __inline__ vector signed char __ATTRS_o_ai
11786 vec_sub(vector signed char __a, vector signed char __b) {
11787   return __a - __b;
11788 }
11789
11790 static __inline__ vector signed char __ATTRS_o_ai
11791 vec_sub(vector bool char __a, vector signed char __b) {
11792   return (vector signed char)__a - __b;
11793 }
11794
11795 static __inline__ vector signed char __ATTRS_o_ai
11796 vec_sub(vector signed char __a, vector bool char __b) {
11797   return __a - (vector signed char)__b;
11798 }
11799
11800 static __inline__ vector unsigned char __ATTRS_o_ai
11801 vec_sub(vector unsigned char __a, vector unsigned char __b) {
11802   return __a - __b;
11803 }
11804
11805 static __inline__ vector unsigned char __ATTRS_o_ai
11806 vec_sub(vector bool char __a, vector unsigned char __b) {
11807   return (vector unsigned char)__a - __b;
11808 }
11809
11810 static __inline__ vector unsigned char __ATTRS_o_ai
11811 vec_sub(vector unsigned char __a, vector bool char __b) {
11812   return __a - (vector unsigned char)__b;
11813 }
11814
11815 static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
11816                                                     vector short __b) {
11817   return __a - __b;
11818 }
11819
11820 static __inline__ vector short __ATTRS_o_ai vec_sub(vector bool short __a,
11821                                                     vector short __b) {
11822   return (vector short)__a - __b;
11823 }
11824
11825 static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
11826                                                     vector bool short __b) {
11827   return __a - (vector short)__b;
11828 }
11829
11830 static __inline__ vector unsigned short __ATTRS_o_ai
11831 vec_sub(vector unsigned short __a, vector unsigned short __b) {
11832   return __a - __b;
11833 }
11834
11835 static __inline__ vector unsigned short __ATTRS_o_ai
11836 vec_sub(vector bool short __a, vector unsigned short __b) {
11837   return (vector unsigned short)__a - __b;
11838 }
11839
11840 static __inline__ vector unsigned short __ATTRS_o_ai
11841 vec_sub(vector unsigned short __a, vector bool short __b) {
11842   return __a - (vector unsigned short)__b;
11843 }
11844
11845 static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
11846                                                   vector int __b) {
11847   return __a - __b;
11848 }
11849
11850 static __inline__ vector int __ATTRS_o_ai vec_sub(vector bool int __a,
11851                                                   vector int __b) {
11852   return (vector int)__a - __b;
11853 }
11854
11855 static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
11856                                                   vector bool int __b) {
11857   return __a - (vector int)__b;
11858 }
11859
11860 static __inline__ vector unsigned int __ATTRS_o_ai
11861 vec_sub(vector unsigned int __a, vector unsigned int __b) {
11862   return __a - __b;
11863 }
11864
11865 static __inline__ vector unsigned int __ATTRS_o_ai
11866 vec_sub(vector bool int __a, vector unsigned int __b) {
11867   return (vector unsigned int)__a - __b;
11868 }
11869
11870 static __inline__ vector unsigned int __ATTRS_o_ai
11871 vec_sub(vector unsigned int __a, vector bool int __b) {
11872   return __a - (vector unsigned int)__b;
11873 }
11874
11875 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
11876     defined(__SIZEOF_INT128__)
11877 static __inline__ vector signed __int128 __ATTRS_o_ai
11878 vec_sub(vector signed __int128 __a, vector signed __int128 __b) {
11879   return __a - __b;
11880 }
11881
11882 static __inline__ vector unsigned __int128 __ATTRS_o_ai
11883 vec_sub(vector unsigned __int128 __a, vector unsigned __int128 __b) {
11884   return __a - __b;
11885 }
11886 #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&
11887        // defined(__SIZEOF_INT128__)
11888
11889 #ifdef __VSX__
11890 static __inline__ vector signed long long __ATTRS_o_ai
11891 vec_sub(vector signed long long __a, vector signed long long __b) {
11892   return __a - __b;
11893 }
11894
11895 static __inline__ vector unsigned long long __ATTRS_o_ai
11896 vec_sub(vector unsigned long long __a, vector unsigned long long __b) {
11897   return __a - __b;
11898 }
11899
11900 static __inline__ vector double __ATTRS_o_ai vec_sub(vector double __a,
11901                                                      vector double __b) {
11902   return __a - __b;
11903 }
11904 #endif
11905
11906 static __inline__ vector float __ATTRS_o_ai vec_sub(vector float __a,
11907                                                     vector float __b) {
11908   return __a - __b;
11909 }
11910
11911 /* vec_vsububm */
11912
11913 #define __builtin_altivec_vsububm vec_vsububm
11914
11915 static __inline__ vector signed char __ATTRS_o_ai
11916 vec_vsububm(vector signed char __a, vector signed char __b) {
11917   return __a - __b;
11918 }
11919
11920 static __inline__ vector signed char __ATTRS_o_ai
11921 vec_vsububm(vector bool char __a, vector signed char __b) {
11922   return (vector signed char)__a - __b;
11923 }
11924
11925 static __inline__ vector signed char __ATTRS_o_ai
11926 vec_vsububm(vector signed char __a, vector bool char __b) {
11927   return __a - (vector signed char)__b;
11928 }
11929
11930 static __inline__ vector unsigned char __ATTRS_o_ai
11931 vec_vsububm(vector unsigned char __a, vector unsigned char __b) {
11932   return __a - __b;
11933 }
11934
11935 static __inline__ vector unsigned char __ATTRS_o_ai
11936 vec_vsububm(vector bool char __a, vector unsigned char __b) {
11937   return (vector unsigned char)__a - __b;
11938 }
11939
11940 static __inline__ vector unsigned char __ATTRS_o_ai
11941 vec_vsububm(vector unsigned char __a, vector bool char __b) {
11942   return __a - (vector unsigned char)__b;
11943 }
11944
11945 /* vec_vsubuhm */
11946
11947 #define __builtin_altivec_vsubuhm vec_vsubuhm
11948
11949 static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
11950                                                         vector short __b) {
11951   return __a - __b;
11952 }
11953
11954 static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector bool short __a,
11955                                                         vector short __b) {
11956   return (vector short)__a - __b;
11957 }
11958
11959 static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
11960                                                         vector bool short __b) {
11961   return __a - (vector short)__b;
11962 }
11963
11964 static __inline__ vector unsigned short __ATTRS_o_ai
11965 vec_vsubuhm(vector unsigned short __a, vector unsigned short __b) {
11966   return __a - __b;
11967 }
11968
11969 static __inline__ vector unsigned short __ATTRS_o_ai
11970 vec_vsubuhm(vector bool short __a, vector unsigned short __b) {
11971   return (vector unsigned short)__a - __b;
11972 }
11973
11974 static __inline__ vector unsigned short __ATTRS_o_ai
11975 vec_vsubuhm(vector unsigned short __a, vector bool short __b) {
11976   return __a - (vector unsigned short)__b;
11977 }
11978
11979 /* vec_vsubuwm */
11980
11981 #define __builtin_altivec_vsubuwm vec_vsubuwm
11982
11983 static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
11984                                                       vector int __b) {
11985   return __a - __b;
11986 }
11987
11988 static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector bool int __a,
11989                                                       vector int __b) {
11990   return (vector int)__a - __b;
11991 }
11992
11993 static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
11994                                                       vector bool int __b) {
11995   return __a - (vector int)__b;
11996 }
11997
11998 static __inline__ vector unsigned int __ATTRS_o_ai
11999 vec_vsubuwm(vector unsigned int __a, vector unsigned int __b) {
12000   return __a - __b;
12001 }
12002
12003 static __inline__ vector unsigned int __ATTRS_o_ai
12004 vec_vsubuwm(vector bool int __a, vector unsigned int __b) {
12005   return (vector unsigned int)__a - __b;
12006 }
12007
12008 static __inline__ vector unsigned int __ATTRS_o_ai
12009 vec_vsubuwm(vector unsigned int __a, vector bool int __b) {
12010   return __a - (vector unsigned int)__b;
12011 }
12012
12013 /* vec_vsubfp */
12014
12015 #define __builtin_altivec_vsubfp vec_vsubfp
12016
12017 static __inline__ vector float __attribute__((__always_inline__))
12018 vec_vsubfp(vector float __a, vector float __b) {
12019   return __a - __b;
12020 }
12021
12022 /* vec_subc */
12023
12024 static __inline__ vector signed int __ATTRS_o_ai
12025 vec_subc(vector signed int __a, vector signed int __b) {
12026   return (vector signed int)__builtin_altivec_vsubcuw((vector unsigned int)__a,
12027                                                       (vector unsigned int) __b);
12028 }
12029
12030 static __inline__ vector unsigned int __ATTRS_o_ai
12031 vec_subc(vector unsigned int __a, vector unsigned int __b) {
12032   return __builtin_altivec_vsubcuw(__a, __b);
12033 }
12034
12035 #ifdef __POWER8_VECTOR__
12036 #ifdef __SIZEOF_INT128__
12037 static __inline__ vector unsigned __int128 __ATTRS_o_ai
12038 vec_subc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
12039   return __builtin_altivec_vsubcuq(__a, __b);
12040 }
12041
12042 static __inline__ vector signed __int128 __ATTRS_o_ai
12043 vec_subc(vector signed __int128 __a, vector signed __int128 __b) {
12044   return __builtin_altivec_vsubcuq(__a, __b);
12045 }
12046 #endif
12047
12048 static __inline__ vector unsigned char __attribute__((__always_inline__))
12049 vec_subc_u128(vector unsigned char __a, vector unsigned char __b) {
12050   return (vector unsigned char)__builtin_altivec_vsubcuq(__a, __b);
12051 }
12052 #endif // __POWER8_VECTOR__
12053
12054 /* vec_vsubcuw */
12055
12056 static __inline__ vector unsigned int __attribute__((__always_inline__))
12057 vec_vsubcuw(vector unsigned int __a, vector unsigned int __b) {
12058   return __builtin_altivec_vsubcuw(__a, __b);
12059 }
12060
12061 /* vec_subs */
12062
12063 static __inline__ vector signed char __ATTRS_o_ai
12064 vec_subs(vector signed char __a, vector signed char __b) {
12065   return __builtin_altivec_vsubsbs(__a, __b);
12066 }
12067
12068 static __inline__ vector signed char __ATTRS_o_ai
12069 vec_subs(vector bool char __a, vector signed char __b) {
12070   return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
12071 }
12072
12073 static __inline__ vector signed char __ATTRS_o_ai
12074 vec_subs(vector signed char __a, vector bool char __b) {
12075   return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
12076 }
12077
12078 static __inline__ vector unsigned char __ATTRS_o_ai
12079 vec_subs(vector unsigned char __a, vector unsigned char __b) {
12080   return __builtin_altivec_vsububs(__a, __b);
12081 }
12082
12083 static __inline__ vector unsigned char __ATTRS_o_ai
12084 vec_subs(vector bool char __a, vector unsigned char __b) {
12085   return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
12086 }
12087
12088 static __inline__ vector unsigned char __ATTRS_o_ai
12089 vec_subs(vector unsigned char __a, vector bool char __b) {
12090   return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
12091 }
12092
12093 static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
12094                                                      vector short __b) {
12095   return __builtin_altivec_vsubshs(__a, __b);
12096 }
12097
12098 static __inline__ vector short __ATTRS_o_ai vec_subs(vector bool short __a,
12099                                                      vector short __b) {
12100   return __builtin_altivec_vsubshs((vector short)__a, __b);
12101 }
12102
12103 static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
12104                                                      vector bool short __b) {
12105   return __builtin_altivec_vsubshs(__a, (vector short)__b);
12106 }
12107
12108 static __inline__ vector unsigned short __ATTRS_o_ai
12109 vec_subs(vector unsigned short __a, vector unsigned short __b) {
12110   return __builtin_altivec_vsubuhs(__a, __b);
12111 }
12112
12113 static __inline__ vector unsigned short __ATTRS_o_ai
12114 vec_subs(vector bool short __a, vector unsigned short __b) {
12115   return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
12116 }
12117
12118 static __inline__ vector unsigned short __ATTRS_o_ai
12119 vec_subs(vector unsigned short __a, vector bool short __b) {
12120   return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
12121 }
12122
12123 static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
12124                                                    vector int __b) {
12125   return __builtin_altivec_vsubsws(__a, __b);
12126 }
12127
12128 static __inline__ vector int __ATTRS_o_ai vec_subs(vector bool int __a,
12129                                                    vector int __b) {
12130   return __builtin_altivec_vsubsws((vector int)__a, __b);
12131 }
12132
12133 static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
12134                                                    vector bool int __b) {
12135   return __builtin_altivec_vsubsws(__a, (vector int)__b);
12136 }
12137
12138 static __inline__ vector unsigned int __ATTRS_o_ai
12139 vec_subs(vector unsigned int __a, vector unsigned int __b) {
12140   return __builtin_altivec_vsubuws(__a, __b);
12141 }
12142
12143 static __inline__ vector unsigned int __ATTRS_o_ai
12144 vec_subs(vector bool int __a, vector unsigned int __b) {
12145   return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
12146 }
12147
12148 static __inline__ vector unsigned int __ATTRS_o_ai
12149 vec_subs(vector unsigned int __a, vector bool int __b) {
12150   return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
12151 }
12152
12153 /* vec_vsubsbs */
12154
12155 static __inline__ vector signed char __ATTRS_o_ai
12156 vec_vsubsbs(vector signed char __a, vector signed char __b) {
12157   return __builtin_altivec_vsubsbs(__a, __b);
12158 }
12159
12160 static __inline__ vector signed char __ATTRS_o_ai
12161 vec_vsubsbs(vector bool char __a, vector signed char __b) {
12162   return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
12163 }
12164
12165 static __inline__ vector signed char __ATTRS_o_ai
12166 vec_vsubsbs(vector signed char __a, vector bool char __b) {
12167   return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
12168 }
12169
12170 /* vec_vsububs */
12171
12172 static __inline__ vector unsigned char __ATTRS_o_ai
12173 vec_vsububs(vector unsigned char __a, vector unsigned char __b) {
12174   return __builtin_altivec_vsububs(__a, __b);
12175 }
12176
12177 static __inline__ vector unsigned char __ATTRS_o_ai
12178 vec_vsububs(vector bool char __a, vector unsigned char __b) {
12179   return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
12180 }
12181
12182 static __inline__ vector unsigned char __ATTRS_o_ai
12183 vec_vsububs(vector unsigned char __a, vector bool char __b) {
12184   return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
12185 }
12186
12187 /* vec_vsubshs */
12188
12189 static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
12190                                                         vector short __b) {
12191   return __builtin_altivec_vsubshs(__a, __b);
12192 }
12193
12194 static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector bool short __a,
12195                                                         vector short __b) {
12196   return __builtin_altivec_vsubshs((vector short)__a, __b);
12197 }
12198
12199 static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
12200                                                         vector bool short __b) {
12201   return __builtin_altivec_vsubshs(__a, (vector short)__b);
12202 }
12203
12204 /* vec_vsubuhs */
12205
12206 static __inline__ vector unsigned short __ATTRS_o_ai
12207 vec_vsubuhs(vector unsigned short __a, vector unsigned short __b) {
12208   return __builtin_altivec_vsubuhs(__a, __b);
12209 }
12210
12211 static __inline__ vector unsigned short __ATTRS_o_ai
12212 vec_vsubuhs(vector bool short __a, vector unsigned short __b) {
12213   return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
12214 }
12215
12216 static __inline__ vector unsigned short __ATTRS_o_ai
12217 vec_vsubuhs(vector unsigned short __a, vector bool short __b) {
12218   return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
12219 }
12220
12221 /* vec_vsubsws */
12222
12223 static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
12224                                                       vector int __b) {
12225   return __builtin_altivec_vsubsws(__a, __b);
12226 }
12227
12228 static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector bool int __a,
12229                                                       vector int __b) {
12230   return __builtin_altivec_vsubsws((vector int)__a, __b);
12231 }
12232
12233 static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
12234                                                       vector bool int __b) {
12235   return __builtin_altivec_vsubsws(__a, (vector int)__b);
12236 }
12237
12238 /* vec_vsubuws */
12239
12240 static __inline__ vector unsigned int __ATTRS_o_ai
12241 vec_vsubuws(vector unsigned int __a, vector unsigned int __b) {
12242   return __builtin_altivec_vsubuws(__a, __b);
12243 }
12244
12245 static __inline__ vector unsigned int __ATTRS_o_ai
12246 vec_vsubuws(vector bool int __a, vector unsigned int __b) {
12247   return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
12248 }
12249
12250 static __inline__ vector unsigned int __ATTRS_o_ai
12251 vec_vsubuws(vector unsigned int __a, vector bool int __b) {
12252   return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
12253 }
12254
12255 #ifdef __POWER8_VECTOR__
12256 /* vec_vsubuqm */
12257
12258 #ifdef __SIZEOF_INT128__
12259 static __inline__ vector signed __int128 __ATTRS_o_ai
12260 vec_vsubuqm(vector signed __int128 __a, vector signed __int128 __b) {
12261   return __a - __b;
12262 }
12263
12264 static __inline__ vector unsigned __int128 __ATTRS_o_ai
12265 vec_vsubuqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
12266   return __a - __b;
12267 }
12268 #endif
12269
12270 static __inline__ vector unsigned char __attribute__((__always_inline__))
12271 vec_sub_u128(vector unsigned char __a, vector unsigned char __b) {
12272   return __builtin_altivec_vsubuqm(__a, __b);
12273 }
12274
12275 /* vec_vsubeuqm */
12276
12277 #ifdef __SIZEOF_INT128__
12278 static __inline__ vector signed __int128 __ATTRS_o_ai
12279 vec_vsubeuqm(vector signed __int128 __a, vector signed __int128 __b,
12280              vector signed __int128 __c) {
12281   return __builtin_altivec_vsubeuqm(__a, __b, __c);
12282 }
12283
12284 static __inline__ vector unsigned __int128 __ATTRS_o_ai
12285 vec_vsubeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
12286              vector unsigned __int128 __c) {
12287   return __builtin_altivec_vsubeuqm(__a, __b, __c);
12288 }
12289
12290 static __inline__ vector signed __int128 __ATTRS_o_ai
12291 vec_sube(vector signed __int128 __a, vector signed __int128 __b,
12292              vector signed __int128 __c) {
12293   return __builtin_altivec_vsubeuqm(__a, __b, __c);
12294 }
12295
12296 static __inline__ vector unsigned __int128 __ATTRS_o_ai
12297 vec_sube(vector unsigned __int128 __a, vector unsigned __int128 __b,
12298              vector unsigned __int128 __c) {
12299   return __builtin_altivec_vsubeuqm(__a, __b, __c);
12300 }
12301 #endif
12302
12303 static __inline__ vector unsigned char __attribute__((__always_inline__))
12304 vec_sube_u128(vector unsigned char __a, vector unsigned char __b,
12305               vector unsigned char __c) {
12306   return (vector unsigned char)__builtin_altivec_vsubeuqm(__a, __b, __c);
12307 }
12308
12309 /* vec_vsubcuq */
12310
12311 #ifdef __SIZEOF_INT128__
12312 static __inline__ vector signed __int128 __ATTRS_o_ai
12313 vec_vsubcuq(vector signed __int128 __a, vector signed __int128 __b) {
12314   return __builtin_altivec_vsubcuq(__a, __b);
12315 }
12316
12317 static __inline__ vector unsigned __int128 __ATTRS_o_ai
12318 vec_vsubcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
12319   return __builtin_altivec_vsubcuq(__a, __b);
12320 }
12321
12322 /* vec_vsubecuq */
12323
12324 static __inline__ vector signed __int128 __ATTRS_o_ai
12325 vec_vsubecuq(vector signed __int128 __a, vector signed __int128 __b,
12326              vector signed __int128 __c) {
12327   return __builtin_altivec_vsubecuq(__a, __b, __c);
12328 }
12329
12330 static __inline__ vector unsigned __int128 __ATTRS_o_ai
12331 vec_vsubecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
12332              vector unsigned __int128 __c) {
12333   return __builtin_altivec_vsubecuq(__a, __b, __c);
12334 }
12335 #endif
12336
12337 #ifdef __powerpc64__
12338 static __inline__ vector signed int __ATTRS_o_ai
12339 vec_subec(vector signed int __a, vector signed int __b,
12340              vector signed int __c) {
12341   return vec_addec(__a, ~__b, __c);
12342 }
12343
12344 static __inline__ vector unsigned int __ATTRS_o_ai
12345 vec_subec(vector unsigned int __a, vector unsigned int __b,
12346              vector unsigned int __c) {
12347   return vec_addec(__a, ~__b, __c);
12348 }
12349 #endif
12350
12351 #ifdef __SIZEOF_INT128__
12352 static __inline__ vector signed __int128 __ATTRS_o_ai
12353 vec_subec(vector signed __int128 __a, vector signed __int128 __b,
12354              vector signed __int128 __c) {
12355   return __builtin_altivec_vsubecuq(__a, __b, __c);
12356 }
12357
12358 static __inline__ vector unsigned __int128 __ATTRS_o_ai
12359 vec_subec(vector unsigned __int128 __a, vector unsigned __int128 __b,
12360              vector unsigned __int128 __c) {
12361   return __builtin_altivec_vsubecuq(__a, __b, __c);
12362 }
12363 #endif
12364
12365 static __inline__ vector unsigned char __attribute__((__always_inline__))
12366 vec_subec_u128(vector unsigned char __a, vector unsigned char __b,
12367                vector unsigned char __c) {
12368   return (vector unsigned char)__builtin_altivec_vsubecuq(__a, __b, __c);
12369 }
12370 #endif // __POWER8_VECTOR__
12371
12372 static __inline__ vector signed int __ATTRS_o_ai
12373 vec_sube(vector signed int __a, vector signed int __b,
12374          vector signed int __c) {
12375   vector signed int __mask = {1, 1, 1, 1};
12376   vector signed int __carry = __c & __mask;
12377   return vec_adde(__a, ~__b, __carry);
12378 }
12379
12380 static __inline__ vector unsigned int __ATTRS_o_ai
12381 vec_sube(vector unsigned int __a, vector unsigned int __b,
12382          vector unsigned int __c) {
12383   vector unsigned int __mask = {1, 1, 1, 1};
12384   vector unsigned int __carry = __c & __mask;
12385   return vec_adde(__a, ~__b, __carry);
12386 }
12387 /* vec_sum4s */
12388
12389 static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed char __a,
12390                                                     vector int __b) {
12391   return __builtin_altivec_vsum4sbs(__a, __b);
12392 }
12393
12394 static __inline__ vector unsigned int __ATTRS_o_ai
12395 vec_sum4s(vector unsigned char __a, vector unsigned int __b) {
12396   return __builtin_altivec_vsum4ubs(__a, __b);
12397 }
12398
12399 static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed short __a,
12400                                                     vector int __b) {
12401   return __builtin_altivec_vsum4shs(__a, __b);
12402 }
12403
12404 /* vec_vsum4sbs */
12405
12406 static __inline__ vector int __attribute__((__always_inline__))
12407 vec_vsum4sbs(vector signed char __a, vector int __b) {
12408   return __builtin_altivec_vsum4sbs(__a, __b);
12409 }
12410
12411 /* vec_vsum4ubs */
12412
12413 static __inline__ vector unsigned int __attribute__((__always_inline__))
12414 vec_vsum4ubs(vector unsigned char __a, vector unsigned int __b) {
12415   return __builtin_altivec_vsum4ubs(__a, __b);
12416 }
12417
12418 /* vec_vsum4shs */
12419
12420 static __inline__ vector int __attribute__((__always_inline__))
12421 vec_vsum4shs(vector signed short __a, vector int __b) {
12422   return __builtin_altivec_vsum4shs(__a, __b);
12423 }
12424
12425 /* vec_sum2s */
12426
12427 /* The vsum2sws instruction has a big-endian bias, so that the second
12428    input vector and the result always reference big-endian elements
12429    1 and 3 (little-endian element 0 and 2).  For ease of porting the
12430    programmer wants elements 1 and 3 in both cases, so for little
12431    endian we must perform some permutes.  */
12432
12433 static __inline__ vector signed int __attribute__((__always_inline__))
12434 vec_sum2s(vector int __a, vector int __b) {
12435 #ifdef __LITTLE_ENDIAN__
12436   vector int __c = (vector signed int)vec_perm(
12437       __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
12438                                        8, 9, 10, 11));
12439   __c = __builtin_altivec_vsum2sws(__a, __c);
12440   return (vector signed int)vec_perm(
12441       __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
12442                                        8, 9, 10, 11));
12443 #else
12444   return __builtin_altivec_vsum2sws(__a, __b);
12445 #endif
12446 }
12447
12448 /* vec_vsum2sws */
12449
12450 static __inline__ vector signed int __attribute__((__always_inline__))
12451 vec_vsum2sws(vector int __a, vector int __b) {
12452 #ifdef __LITTLE_ENDIAN__
12453   vector int __c = (vector signed int)vec_perm(
12454       __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
12455                                        8, 9, 10, 11));
12456   __c = __builtin_altivec_vsum2sws(__a, __c);
12457   return (vector signed int)vec_perm(
12458       __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
12459                                        8, 9, 10, 11));
12460 #else
12461   return __builtin_altivec_vsum2sws(__a, __b);
12462 #endif
12463 }
12464
12465 /* vec_sums */
12466
12467 /* The vsumsws instruction has a big-endian bias, so that the second
12468    input vector and the result always reference big-endian element 3
12469    (little-endian element 0).  For ease of porting the programmer
12470    wants element 3 in both cases, so for little endian we must perform
12471    some permutes.  */
12472
12473 static __inline__ vector signed int __attribute__((__always_inline__))
12474 vec_sums(vector signed int __a, vector signed int __b) {
12475 #ifdef __LITTLE_ENDIAN__
12476   __b = (vector signed int)vec_splat(__b, 3);
12477   __b = __builtin_altivec_vsumsws(__a, __b);
12478   return (vector signed int)(0, 0, 0, __b[0]);
12479 #else
12480   return __builtin_altivec_vsumsws(__a, __b);
12481 #endif
12482 }
12483
12484 /* vec_vsumsws */
12485
12486 static __inline__ vector signed int __attribute__((__always_inline__))
12487 vec_vsumsws(vector signed int __a, vector signed int __b) {
12488 #ifdef __LITTLE_ENDIAN__
12489   __b = (vector signed int)vec_splat(__b, 3);
12490   __b = __builtin_altivec_vsumsws(__a, __b);
12491   return (vector signed int)(0, 0, 0, __b[0]);
12492 #else
12493   return __builtin_altivec_vsumsws(__a, __b);
12494 #endif
12495 }
12496
12497 /* vec_trunc */
12498
12499 static __inline__ vector float __ATTRS_o_ai vec_trunc(vector float __a) {
12500 #ifdef __VSX__
12501   return __builtin_vsx_xvrspiz(__a);
12502 #else
12503   return __builtin_altivec_vrfiz(__a);
12504 #endif
12505 }
12506
12507 #ifdef __VSX__
12508 static __inline__ vector double __ATTRS_o_ai vec_trunc(vector double __a) {
12509   return __builtin_vsx_xvrdpiz(__a);
12510 }
12511 #endif
12512
12513 /* vec_roundz */
12514 static __inline__ vector float __ATTRS_o_ai vec_roundz(vector float __a) {
12515   return vec_trunc(__a);
12516 }
12517
12518 #ifdef __VSX__
12519 static __inline__ vector double __ATTRS_o_ai vec_roundz(vector double __a) {
12520   return vec_trunc(__a);
12521 }
12522 #endif
12523
12524 /* vec_vrfiz */
12525
12526 static __inline__ vector float __attribute__((__always_inline__))
12527 vec_vrfiz(vector float __a) {
12528   return __builtin_altivec_vrfiz(__a);
12529 }
12530
12531 /* vec_unpackh */
12532
12533 /* The vector unpack instructions all have a big-endian bias, so for
12534    little endian we must reverse the meanings of "high" and "low."  */
12535 #ifdef __LITTLE_ENDIAN__
12536 #define vec_vupkhpx(__a) __builtin_altivec_vupklpx((vector short)(__a))
12537 #define vec_vupklpx(__a) __builtin_altivec_vupkhpx((vector short)(__a))
12538 #else
12539 #define vec_vupkhpx(__a) __builtin_altivec_vupkhpx((vector short)(__a))
12540 #define vec_vupklpx(__a) __builtin_altivec_vupklpx((vector short)(__a))
12541 #endif
12542
12543 static __inline__ vector short __ATTRS_o_ai
12544 vec_unpackh(vector signed char __a) {
12545 #ifdef __LITTLE_ENDIAN__
12546   return __builtin_altivec_vupklsb((vector char)__a);
12547 #else
12548   return __builtin_altivec_vupkhsb((vector char)__a);
12549 #endif
12550 }
12551
12552 static __inline__ vector bool short __ATTRS_o_ai
12553 vec_unpackh(vector bool char __a) {
12554 #ifdef __LITTLE_ENDIAN__
12555   return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
12556 #else
12557   return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
12558 #endif
12559 }
12560
12561 static __inline__ vector int __ATTRS_o_ai vec_unpackh(vector short __a) {
12562 #ifdef __LITTLE_ENDIAN__
12563   return __builtin_altivec_vupklsh(__a);
12564 #else
12565   return __builtin_altivec_vupkhsh(__a);
12566 #endif
12567 }
12568
12569 static __inline__ vector bool int __ATTRS_o_ai
12570 vec_unpackh(vector bool short __a) {
12571 #ifdef __LITTLE_ENDIAN__
12572   return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
12573 #else
12574   return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
12575 #endif
12576 }
12577
12578 static __inline__ vector unsigned int __ATTRS_o_ai
12579 vec_unpackh(vector pixel __a) {
12580 #ifdef __LITTLE_ENDIAN__
12581   return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
12582 #else
12583   return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
12584 #endif
12585 }
12586
12587 #ifdef __POWER8_VECTOR__
12588 static __inline__ vector long long __ATTRS_o_ai vec_unpackh(vector int __a) {
12589 #ifdef __LITTLE_ENDIAN__
12590   return __builtin_altivec_vupklsw(__a);
12591 #else
12592   return __builtin_altivec_vupkhsw(__a);
12593 #endif
12594 }
12595
12596 static __inline__ vector bool long long __ATTRS_o_ai
12597 vec_unpackh(vector bool int __a) {
12598 #ifdef __LITTLE_ENDIAN__
12599   return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
12600 #else
12601   return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
12602 #endif
12603 }
12604
12605 static __inline__ vector double __ATTRS_o_ai
12606 vec_unpackh(vector float __a) {
12607   return (vector double)(__a[0], __a[1]);
12608 }
12609 #endif
12610
12611 /* vec_vupkhsb */
12612
12613 static __inline__ vector short __ATTRS_o_ai
12614 vec_vupkhsb(vector signed char __a) {
12615 #ifdef __LITTLE_ENDIAN__
12616   return __builtin_altivec_vupklsb((vector char)__a);
12617 #else
12618   return __builtin_altivec_vupkhsb((vector char)__a);
12619 #endif
12620 }
12621
12622 static __inline__ vector bool short __ATTRS_o_ai
12623 vec_vupkhsb(vector bool char __a) {
12624 #ifdef __LITTLE_ENDIAN__
12625   return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
12626 #else
12627   return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
12628 #endif
12629 }
12630
12631 /* vec_vupkhsh */
12632
12633 static __inline__ vector int __ATTRS_o_ai vec_vupkhsh(vector short __a) {
12634 #ifdef __LITTLE_ENDIAN__
12635   return __builtin_altivec_vupklsh(__a);
12636 #else
12637   return __builtin_altivec_vupkhsh(__a);
12638 #endif
12639 }
12640
12641 static __inline__ vector bool int __ATTRS_o_ai
12642 vec_vupkhsh(vector bool short __a) {
12643 #ifdef __LITTLE_ENDIAN__
12644   return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
12645 #else
12646   return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
12647 #endif
12648 }
12649
12650 static __inline__ vector unsigned int __ATTRS_o_ai
12651 vec_vupkhsh(vector pixel __a) {
12652 #ifdef __LITTLE_ENDIAN__
12653   return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
12654 #else
12655   return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
12656 #endif
12657 }
12658
12659 /* vec_vupkhsw */
12660
12661 #ifdef __POWER8_VECTOR__
12662 static __inline__ vector long long __ATTRS_o_ai vec_vupkhsw(vector int __a) {
12663 #ifdef __LITTLE_ENDIAN__
12664   return __builtin_altivec_vupklsw(__a);
12665 #else
12666   return __builtin_altivec_vupkhsw(__a);
12667 #endif
12668 }
12669
12670 static __inline__ vector bool long long __ATTRS_o_ai
12671 vec_vupkhsw(vector bool int __a) {
12672 #ifdef __LITTLE_ENDIAN__
12673   return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
12674 #else
12675   return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
12676 #endif
12677 }
12678 #endif
12679
12680 /* vec_unpackl */
12681
12682 static __inline__ vector short __ATTRS_o_ai
12683 vec_unpackl(vector signed char __a) {
12684 #ifdef __LITTLE_ENDIAN__
12685   return __builtin_altivec_vupkhsb((vector char)__a);
12686 #else
12687   return __builtin_altivec_vupklsb((vector char)__a);
12688 #endif
12689 }
12690
12691 static __inline__ vector bool short __ATTRS_o_ai
12692 vec_unpackl(vector bool char __a) {
12693 #ifdef __LITTLE_ENDIAN__
12694   return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
12695 #else
12696   return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
12697 #endif
12698 }
12699
12700 static __inline__ vector int __ATTRS_o_ai vec_unpackl(vector short __a) {
12701 #ifdef __LITTLE_ENDIAN__
12702   return __builtin_altivec_vupkhsh(__a);
12703 #else
12704   return __builtin_altivec_vupklsh(__a);
12705 #endif
12706 }
12707
12708 static __inline__ vector bool int __ATTRS_o_ai
12709 vec_unpackl(vector bool short __a) {
12710 #ifdef __LITTLE_ENDIAN__
12711   return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
12712 #else
12713   return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
12714 #endif
12715 }
12716
12717 static __inline__ vector unsigned int __ATTRS_o_ai
12718 vec_unpackl(vector pixel __a) {
12719 #ifdef __LITTLE_ENDIAN__
12720   return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
12721 #else
12722   return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
12723 #endif
12724 }
12725
12726 #ifdef __POWER8_VECTOR__
12727 static __inline__ vector long long __ATTRS_o_ai vec_unpackl(vector int __a) {
12728 #ifdef __LITTLE_ENDIAN__
12729   return __builtin_altivec_vupkhsw(__a);
12730 #else
12731   return __builtin_altivec_vupklsw(__a);
12732 #endif
12733 }
12734
12735 static __inline__ vector bool long long __ATTRS_o_ai
12736 vec_unpackl(vector bool int __a) {
12737 #ifdef __LITTLE_ENDIAN__
12738   return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
12739 #else
12740   return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
12741 #endif
12742 }
12743
12744 static __inline__ vector double __ATTRS_o_ai
12745 vec_unpackl(vector float __a) {
12746   return (vector double)(__a[2], __a[3]);
12747 }
12748 #endif
12749
12750 /* vec_vupklsb */
12751
12752 static __inline__ vector short __ATTRS_o_ai
12753 vec_vupklsb(vector signed char __a) {
12754 #ifdef __LITTLE_ENDIAN__
12755   return __builtin_altivec_vupkhsb((vector char)__a);
12756 #else
12757   return __builtin_altivec_vupklsb((vector char)__a);
12758 #endif
12759 }
12760
12761 static __inline__ vector bool short __ATTRS_o_ai
12762 vec_vupklsb(vector bool char __a) {
12763 #ifdef __LITTLE_ENDIAN__
12764   return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
12765 #else
12766   return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
12767 #endif
12768 }
12769
12770 /* vec_vupklsh */
12771
12772 static __inline__ vector int __ATTRS_o_ai vec_vupklsh(vector short __a) {
12773 #ifdef __LITTLE_ENDIAN__
12774   return __builtin_altivec_vupkhsh(__a);
12775 #else
12776   return __builtin_altivec_vupklsh(__a);
12777 #endif
12778 }
12779
12780 static __inline__ vector bool int __ATTRS_o_ai
12781 vec_vupklsh(vector bool short __a) {
12782 #ifdef __LITTLE_ENDIAN__
12783   return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
12784 #else
12785   return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
12786 #endif
12787 }
12788
12789 static __inline__ vector unsigned int __ATTRS_o_ai
12790 vec_vupklsh(vector pixel __a) {
12791 #ifdef __LITTLE_ENDIAN__
12792   return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
12793 #else
12794   return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
12795 #endif
12796 }
12797
12798 /* vec_vupklsw */
12799
12800 #ifdef __POWER8_VECTOR__
12801 static __inline__ vector long long __ATTRS_o_ai vec_vupklsw(vector int __a) {
12802 #ifdef __LITTLE_ENDIAN__
12803   return __builtin_altivec_vupkhsw(__a);
12804 #else
12805   return __builtin_altivec_vupklsw(__a);
12806 #endif
12807 }
12808
12809 static __inline__ vector bool long long __ATTRS_o_ai
12810 vec_vupklsw(vector bool int __a) {
12811 #ifdef __LITTLE_ENDIAN__
12812   return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
12813 #else
12814   return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
12815 #endif
12816 }
12817 #endif
12818
12819 /* vec_vsx_ld */
12820
12821 #ifdef __VSX__
12822
12823 static __inline__ vector bool int __ATTRS_o_ai
12824 vec_vsx_ld(int __a, const vector bool int *__b) {
12825   return (vector bool int)__builtin_vsx_lxvw4x(__a, __b);
12826 }
12827
12828 static __inline__ vector signed int __ATTRS_o_ai
12829 vec_vsx_ld(int __a, const vector signed int *__b) {
12830   return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
12831 }
12832
12833 static __inline__ vector signed int __ATTRS_o_ai
12834 vec_vsx_ld(int __a, const signed int *__b) {
12835   return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
12836 }
12837
12838 static __inline__ vector unsigned int __ATTRS_o_ai
12839 vec_vsx_ld(int __a, const vector unsigned int *__b) {
12840   return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
12841 }
12842
12843 static __inline__ vector unsigned int __ATTRS_o_ai
12844 vec_vsx_ld(int __a, const unsigned int *__b) {
12845   return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
12846 }
12847
12848 static __inline__ vector float __ATTRS_o_ai
12849 vec_vsx_ld(int __a, const vector float *__b) {
12850   return (vector float)__builtin_vsx_lxvw4x(__a, __b);
12851 }
12852
12853 static __inline__ vector float __ATTRS_o_ai vec_vsx_ld(int __a,
12854                                                        const float *__b) {
12855   return (vector float)__builtin_vsx_lxvw4x(__a, __b);
12856 }
12857
12858 static __inline__ vector signed long long __ATTRS_o_ai
12859 vec_vsx_ld(int __a, const vector signed long long *__b) {
12860   return (vector signed long long)__builtin_vsx_lxvd2x(__a, __b);
12861 }
12862
12863 static __inline__ vector unsigned long long __ATTRS_o_ai
12864 vec_vsx_ld(int __a, const vector unsigned long long *__b) {
12865   return (vector unsigned long long)__builtin_vsx_lxvd2x(__a, __b);
12866 }
12867
12868 static __inline__ vector double __ATTRS_o_ai
12869 vec_vsx_ld(int __a, const vector double *__b) {
12870   return (vector double)__builtin_vsx_lxvd2x(__a, __b);
12871 }
12872
12873 static __inline__ vector double __ATTRS_o_ai
12874 vec_vsx_ld(int __a, const double *__b) {
12875   return (vector double)__builtin_vsx_lxvd2x(__a, __b);
12876 }
12877
12878 static __inline__ vector bool short __ATTRS_o_ai
12879 vec_vsx_ld(int __a, const vector bool short *__b) {
12880   return (vector bool short)__builtin_vsx_lxvw4x(__a, __b);
12881 }
12882
12883 static __inline__ vector signed short __ATTRS_o_ai
12884 vec_vsx_ld(int __a, const vector signed short *__b) {
12885   return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
12886 }
12887
12888 static __inline__ vector signed short __ATTRS_o_ai
12889 vec_vsx_ld(int __a, const signed short *__b) {
12890   return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
12891 }
12892
12893 static __inline__ vector unsigned short __ATTRS_o_ai
12894 vec_vsx_ld(int __a, const vector unsigned short *__b) {
12895   return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
12896 }
12897
12898 static __inline__ vector unsigned short __ATTRS_o_ai
12899 vec_vsx_ld(int __a, const unsigned short *__b) {
12900   return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
12901 }
12902
12903 static __inline__ vector bool char __ATTRS_o_ai
12904 vec_vsx_ld(int __a, const vector bool char *__b) {
12905   return (vector bool char)__builtin_vsx_lxvw4x(__a, __b);
12906 }
12907
12908 static __inline__ vector signed char __ATTRS_o_ai
12909 vec_vsx_ld(int __a, const vector signed char *__b) {
12910   return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
12911 }
12912
12913 static __inline__ vector signed char __ATTRS_o_ai
12914 vec_vsx_ld(int __a, const signed char *__b) {
12915   return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
12916 }
12917
12918 static __inline__ vector unsigned char __ATTRS_o_ai
12919 vec_vsx_ld(int __a, const vector unsigned char *__b) {
12920   return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
12921 }
12922
12923 static __inline__ vector unsigned char __ATTRS_o_ai
12924 vec_vsx_ld(int __a, const unsigned char *__b) {
12925   return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
12926 }
12927
12928 #endif
12929
12930 /* vec_vsx_st */
12931
12932 #ifdef __VSX__
12933
12934 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
12935                                                vector bool int *__c) {
12936   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12937 }
12938
12939 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
12940                                                signed int *__c) {
12941   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12942 }
12943
12944 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
12945                                                unsigned int *__c) {
12946   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12947 }
12948
12949 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
12950                                                vector signed int *__c) {
12951   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12952 }
12953
12954 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
12955                                                signed int *__c) {
12956   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12957 }
12958
12959 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
12960                                                vector unsigned int *__c) {
12961   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12962 }
12963
12964 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
12965                                                unsigned int *__c) {
12966   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12967 }
12968
12969 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
12970                                                vector float *__c) {
12971   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12972 }
12973
12974 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
12975                                                float *__c) {
12976   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12977 }
12978
12979 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed long long __a,
12980                                                int __b,
12981                                                vector signed long long *__c) {
12982   __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
12983 }
12984
12985 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned long long __a,
12986                                                int __b,
12987                                                vector unsigned long long *__c) {
12988   __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
12989 }
12990
12991 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
12992                                                vector double *__c) {
12993   __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
12994 }
12995
12996 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
12997                                                double *__c) {
12998   __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
12999 }
13000
13001 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
13002                                                vector bool short *__c) {
13003   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13004 }
13005
13006 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
13007                                                signed short *__c) {
13008   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13009 }
13010
13011 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
13012                                                unsigned short *__c) {
13013   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13014 }
13015 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
13016                                                vector signed short *__c) {
13017   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13018 }
13019
13020 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
13021                                                signed short *__c) {
13022   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13023 }
13024
13025 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
13026                                                int __b,
13027                                                vector unsigned short *__c) {
13028   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13029 }
13030
13031 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
13032                                                int __b, unsigned short *__c) {
13033   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13034 }
13035
13036 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
13037                                                vector bool char *__c) {
13038   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13039 }
13040
13041 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
13042                                                signed char *__c) {
13043   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13044 }
13045
13046 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
13047                                                unsigned char *__c) {
13048   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13049 }
13050
13051 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
13052                                                vector signed char *__c) {
13053   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13054 }
13055
13056 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
13057                                                signed char *__c) {
13058   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13059 }
13060
13061 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
13062                                                int __b,
13063                                                vector unsigned char *__c) {
13064   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13065 }
13066
13067 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
13068                                                int __b, unsigned char *__c) {
13069   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
13070 }
13071
13072 #endif
13073
13074 #ifdef __VSX__
13075 #define vec_xxpermdi __builtin_vsx_xxpermdi
13076 #define vec_xxsldwi __builtin_vsx_xxsldwi
13077 #define vec_permi(__a, __b, __c)                                               \
13078   _Generic((__a), vector signed long long                                      \
13079            : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1),       \
13080                                      (((__c)&0x1) + 2)),                       \
13081              vector unsigned long long                                         \
13082            : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1),       \
13083                                      (((__c)&0x1) + 2)),                       \
13084              vector double                                                     \
13085            : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1),       \
13086                                      (((__c)&0x1) + 2)))
13087 #endif
13088
13089 /* vec_xor */
13090
13091 #define __builtin_altivec_vxor vec_xor
13092
13093 static __inline__ vector signed char __ATTRS_o_ai
13094 vec_xor(vector signed char __a, vector signed char __b) {
13095   return __a ^ __b;
13096 }
13097
13098 static __inline__ vector signed char __ATTRS_o_ai
13099 vec_xor(vector bool char __a, vector signed char __b) {
13100   return (vector signed char)__a ^ __b;
13101 }
13102
13103 static __inline__ vector signed char __ATTRS_o_ai
13104 vec_xor(vector signed char __a, vector bool char __b) {
13105   return __a ^ (vector signed char)__b;
13106 }
13107
13108 static __inline__ vector unsigned char __ATTRS_o_ai
13109 vec_xor(vector unsigned char __a, vector unsigned char __b) {
13110   return __a ^ __b;
13111 }
13112
13113 static __inline__ vector unsigned char __ATTRS_o_ai
13114 vec_xor(vector bool char __a, vector unsigned char __b) {
13115   return (vector unsigned char)__a ^ __b;
13116 }
13117
13118 static __inline__ vector unsigned char __ATTRS_o_ai
13119 vec_xor(vector unsigned char __a, vector bool char __b) {
13120   return __a ^ (vector unsigned char)__b;
13121 }
13122
13123 static __inline__ vector bool char __ATTRS_o_ai vec_xor(vector bool char __a,
13124                                                         vector bool char __b) {
13125   return __a ^ __b;
13126 }
13127
13128 static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
13129                                                     vector short __b) {
13130   return __a ^ __b;
13131 }
13132
13133 static __inline__ vector short __ATTRS_o_ai vec_xor(vector bool short __a,
13134                                                     vector short __b) {
13135   return (vector short)__a ^ __b;
13136 }
13137
13138 static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
13139                                                     vector bool short __b) {
13140   return __a ^ (vector short)__b;
13141 }
13142
13143 static __inline__ vector unsigned short __ATTRS_o_ai
13144 vec_xor(vector unsigned short __a, vector unsigned short __b) {
13145   return __a ^ __b;
13146 }
13147
13148 static __inline__ vector unsigned short __ATTRS_o_ai
13149 vec_xor(vector bool short __a, vector unsigned short __b) {
13150   return (vector unsigned short)__a ^ __b;
13151 }
13152
13153 static __inline__ vector unsigned short __ATTRS_o_ai
13154 vec_xor(vector unsigned short __a, vector bool short __b) {
13155   return __a ^ (vector unsigned short)__b;
13156 }
13157
13158 static __inline__ vector bool short __ATTRS_o_ai
13159 vec_xor(vector bool short __a, vector bool short __b) {
13160   return __a ^ __b;
13161 }
13162
13163 static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
13164                                                   vector int __b) {
13165   return __a ^ __b;
13166 }
13167
13168 static __inline__ vector int __ATTRS_o_ai vec_xor(vector bool int __a,
13169                                                   vector int __b) {
13170   return (vector int)__a ^ __b;
13171 }
13172
13173 static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
13174                                                   vector bool int __b) {
13175   return __a ^ (vector int)__b;
13176 }
13177
13178 static __inline__ vector unsigned int __ATTRS_o_ai
13179 vec_xor(vector unsigned int __a, vector unsigned int __b) {
13180   return __a ^ __b;
13181 }
13182
13183 static __inline__ vector unsigned int __ATTRS_o_ai
13184 vec_xor(vector bool int __a, vector unsigned int __b) {
13185   return (vector unsigned int)__a ^ __b;
13186 }
13187
13188 static __inline__ vector unsigned int __ATTRS_o_ai
13189 vec_xor(vector unsigned int __a, vector bool int __b) {
13190   return __a ^ (vector unsigned int)__b;
13191 }
13192
13193 static __inline__ vector bool int __ATTRS_o_ai vec_xor(vector bool int __a,
13194                                                        vector bool int __b) {
13195   return __a ^ __b;
13196 }
13197
13198 static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
13199                                                     vector float __b) {
13200   vector unsigned int __res =
13201       (vector unsigned int)__a ^ (vector unsigned int)__b;
13202   return (vector float)__res;
13203 }
13204
13205 static __inline__ vector float __ATTRS_o_ai vec_xor(vector bool int __a,
13206                                                     vector float __b) {
13207   vector unsigned int __res =
13208       (vector unsigned int)__a ^ (vector unsigned int)__b;
13209   return (vector float)__res;
13210 }
13211
13212 static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
13213                                                     vector bool int __b) {
13214   vector unsigned int __res =
13215       (vector unsigned int)__a ^ (vector unsigned int)__b;
13216   return (vector float)__res;
13217 }
13218
13219 #ifdef __VSX__
13220 static __inline__ vector signed long long __ATTRS_o_ai
13221 vec_xor(vector signed long long __a, vector signed long long __b) {
13222   return __a ^ __b;
13223 }
13224
13225 static __inline__ vector signed long long __ATTRS_o_ai
13226 vec_xor(vector bool long long __a, vector signed long long __b) {
13227   return (vector signed long long)__a ^ __b;
13228 }
13229
13230 static __inline__ vector signed long long __ATTRS_o_ai
13231 vec_xor(vector signed long long __a, vector bool long long __b) {
13232   return __a ^ (vector signed long long)__b;
13233 }
13234
13235 static __inline__ vector unsigned long long __ATTRS_o_ai
13236 vec_xor(vector unsigned long long __a, vector unsigned long long __b) {
13237   return __a ^ __b;
13238 }
13239
13240 static __inline__ vector unsigned long long __ATTRS_o_ai
13241 vec_xor(vector bool long long __a, vector unsigned long long __b) {
13242   return (vector unsigned long long)__a ^ __b;
13243 }
13244
13245 static __inline__ vector unsigned long long __ATTRS_o_ai
13246 vec_xor(vector unsigned long long __a, vector bool long long __b) {
13247   return __a ^ (vector unsigned long long)__b;
13248 }
13249
13250 static __inline__ vector bool long long __ATTRS_o_ai
13251 vec_xor(vector bool long long __a, vector bool long long __b) {
13252   return __a ^ __b;
13253 }
13254
13255 static __inline__ vector double __ATTRS_o_ai vec_xor(vector double __a,
13256                                                      vector double __b) {
13257   return (vector double)((vector unsigned long long)__a ^
13258                          (vector unsigned long long)__b);
13259 }
13260
13261 static __inline__ vector double __ATTRS_o_ai
13262 vec_xor(vector double __a, vector bool long long __b) {
13263   return (vector double)((vector unsigned long long)__a ^
13264                          (vector unsigned long long)__b);
13265 }
13266
13267 static __inline__ vector double __ATTRS_o_ai vec_xor(vector bool long long __a,
13268                                                      vector double __b) {
13269   return (vector double)((vector unsigned long long)__a ^
13270                          (vector unsigned long long)__b);
13271 }
13272 #endif
13273
13274 /* vec_vxor */
13275
13276 static __inline__ vector signed char __ATTRS_o_ai
13277 vec_vxor(vector signed char __a, vector signed char __b) {
13278   return __a ^ __b;
13279 }
13280
13281 static __inline__ vector signed char __ATTRS_o_ai
13282 vec_vxor(vector bool char __a, vector signed char __b) {
13283   return (vector signed char)__a ^ __b;
13284 }
13285
13286 static __inline__ vector signed char __ATTRS_o_ai
13287 vec_vxor(vector signed char __a, vector bool char __b) {
13288   return __a ^ (vector signed char)__b;
13289 }
13290
13291 static __inline__ vector unsigned char __ATTRS_o_ai
13292 vec_vxor(vector unsigned char __a, vector unsigned char __b) {
13293   return __a ^ __b;
13294 }
13295
13296 static __inline__ vector unsigned char __ATTRS_o_ai
13297 vec_vxor(vector bool char __a, vector unsigned char __b) {
13298   return (vector unsigned char)__a ^ __b;
13299 }
13300
13301 static __inline__ vector unsigned char __ATTRS_o_ai
13302 vec_vxor(vector unsigned char __a, vector bool char __b) {
13303   return __a ^ (vector unsigned char)__b;
13304 }
13305
13306 static __inline__ vector bool char __ATTRS_o_ai vec_vxor(vector bool char __a,
13307                                                          vector bool char __b) {
13308   return __a ^ __b;
13309 }
13310
13311 static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
13312                                                      vector short __b) {
13313   return __a ^ __b;
13314 }
13315
13316 static __inline__ vector short __ATTRS_o_ai vec_vxor(vector bool short __a,
13317                                                      vector short __b) {
13318   return (vector short)__a ^ __b;
13319 }
13320
13321 static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
13322                                                      vector bool short __b) {
13323   return __a ^ (vector short)__b;
13324 }
13325
13326 static __inline__ vector unsigned short __ATTRS_o_ai
13327 vec_vxor(vector unsigned short __a, vector unsigned short __b) {
13328   return __a ^ __b;
13329 }
13330
13331 static __inline__ vector unsigned short __ATTRS_o_ai
13332 vec_vxor(vector bool short __a, vector unsigned short __b) {
13333   return (vector unsigned short)__a ^ __b;
13334 }
13335
13336 static __inline__ vector unsigned short __ATTRS_o_ai
13337 vec_vxor(vector unsigned short __a, vector bool short __b) {
13338   return __a ^ (vector unsigned short)__b;
13339 }
13340
13341 static __inline__ vector bool short __ATTRS_o_ai
13342 vec_vxor(vector bool short __a, vector bool short __b) {
13343   return __a ^ __b;
13344 }
13345
13346 static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
13347                                                    vector int __b) {
13348   return __a ^ __b;
13349 }
13350
13351 static __inline__ vector int __ATTRS_o_ai vec_vxor(vector bool int __a,
13352                                                    vector int __b) {
13353   return (vector int)__a ^ __b;
13354 }
13355
13356 static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
13357                                                    vector bool int __b) {
13358   return __a ^ (vector int)__b;
13359 }
13360
13361 static __inline__ vector unsigned int __ATTRS_o_ai
13362 vec_vxor(vector unsigned int __a, vector unsigned int __b) {
13363   return __a ^ __b;
13364 }
13365
13366 static __inline__ vector unsigned int __ATTRS_o_ai
13367 vec_vxor(vector bool int __a, vector unsigned int __b) {
13368   return (vector unsigned int)__a ^ __b;
13369 }
13370
13371 static __inline__ vector unsigned int __ATTRS_o_ai
13372 vec_vxor(vector unsigned int __a, vector bool int __b) {
13373   return __a ^ (vector unsigned int)__b;
13374 }
13375
13376 static __inline__ vector bool int __ATTRS_o_ai vec_vxor(vector bool int __a,
13377                                                         vector bool int __b) {
13378   return __a ^ __b;
13379 }
13380
13381 static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
13382                                                      vector float __b) {
13383   vector unsigned int __res =
13384       (vector unsigned int)__a ^ (vector unsigned int)__b;
13385   return (vector float)__res;
13386 }
13387
13388 static __inline__ vector float __ATTRS_o_ai vec_vxor(vector bool int __a,
13389                                                      vector float __b) {
13390   vector unsigned int __res =
13391       (vector unsigned int)__a ^ (vector unsigned int)__b;
13392   return (vector float)__res;
13393 }
13394
13395 static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
13396                                                      vector bool int __b) {
13397   vector unsigned int __res =
13398       (vector unsigned int)__a ^ (vector unsigned int)__b;
13399   return (vector float)__res;
13400 }
13401
13402 #ifdef __VSX__
13403 static __inline__ vector signed long long __ATTRS_o_ai
13404 vec_vxor(vector signed long long __a, vector signed long long __b) {
13405   return __a ^ __b;
13406 }
13407
13408 static __inline__ vector signed long long __ATTRS_o_ai
13409 vec_vxor(vector bool long long __a, vector signed long long __b) {
13410   return (vector signed long long)__a ^ __b;
13411 }
13412
13413 static __inline__ vector signed long long __ATTRS_o_ai
13414 vec_vxor(vector signed long long __a, vector bool long long __b) {
13415   return __a ^ (vector signed long long)__b;
13416 }
13417
13418 static __inline__ vector unsigned long long __ATTRS_o_ai
13419 vec_vxor(vector unsigned long long __a, vector unsigned long long __b) {
13420   return __a ^ __b;
13421 }
13422
13423 static __inline__ vector unsigned long long __ATTRS_o_ai
13424 vec_vxor(vector bool long long __a, vector unsigned long long __b) {
13425   return (vector unsigned long long)__a ^ __b;
13426 }
13427
13428 static __inline__ vector unsigned long long __ATTRS_o_ai
13429 vec_vxor(vector unsigned long long __a, vector bool long long __b) {
13430   return __a ^ (vector unsigned long long)__b;
13431 }
13432
13433 static __inline__ vector bool long long __ATTRS_o_ai
13434 vec_vxor(vector bool long long __a, vector bool long long __b) {
13435   return __a ^ __b;
13436 }
13437 #endif
13438
13439 /* ------------------------ extensions for CBEA ----------------------------- */
13440
13441 /* vec_extract */
13442
13443 static __inline__ signed char __ATTRS_o_ai vec_extract(vector signed char __a,
13444                                                        unsigned int __b) {
13445   return __a[__b & 0xf];
13446 }
13447
13448 static __inline__ unsigned char __ATTRS_o_ai
13449 vec_extract(vector unsigned char __a, unsigned int __b) {
13450   return __a[__b & 0xf];
13451 }
13452
13453 static __inline__ unsigned char __ATTRS_o_ai vec_extract(vector bool char __a,
13454                                                          unsigned int __b) {
13455   return __a[__b & 0xf];
13456 }
13457
13458 static __inline__ signed short __ATTRS_o_ai vec_extract(vector signed short __a,
13459                                                         unsigned int __b) {
13460   return __a[__b & 0x7];
13461 }
13462
13463 static __inline__ unsigned short __ATTRS_o_ai
13464 vec_extract(vector unsigned short __a, unsigned int __b) {
13465   return __a[__b & 0x7];
13466 }
13467
13468 static __inline__ unsigned short __ATTRS_o_ai vec_extract(vector bool short __a,
13469                                                           unsigned int __b) {
13470   return __a[__b & 0x7];
13471 }
13472
13473 static __inline__ signed int __ATTRS_o_ai vec_extract(vector signed int __a,
13474                                                       unsigned int __b) {
13475   return __a[__b & 0x3];
13476 }
13477
13478 static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector unsigned int __a,
13479                                                         unsigned int __b) {
13480   return __a[__b & 0x3];
13481 }
13482
13483 static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector bool int __a,
13484                                                         unsigned int __b) {
13485   return __a[__b & 0x3];
13486 }
13487
13488 #ifdef __VSX__
13489 static __inline__ signed long long __ATTRS_o_ai
13490 vec_extract(vector signed long long __a, unsigned int __b) {
13491   return __a[__b & 0x1];
13492 }
13493
13494 static __inline__ unsigned long long __ATTRS_o_ai
13495 vec_extract(vector unsigned long long __a, unsigned int __b) {
13496   return __a[__b & 0x1];
13497 }
13498
13499 static __inline__ unsigned long long __ATTRS_o_ai
13500 vec_extract(vector bool long long __a, unsigned int __b) {
13501   return __a[__b & 0x1];
13502 }
13503
13504 static __inline__ double __ATTRS_o_ai vec_extract(vector double __a,
13505                                                   unsigned int __b) {
13506   return __a[__b & 0x1];
13507 }
13508 #endif
13509
13510 static __inline__ float __ATTRS_o_ai vec_extract(vector float __a,
13511                                                  unsigned int __b) {
13512   return __a[__b & 0x3];
13513 }
13514
13515 #ifdef __POWER9_VECTOR__
13516
13517 #define vec_insert4b __builtin_vsx_insertword
13518 #define vec_extract4b __builtin_vsx_extractuword
13519
13520 /* vec_extract_exp */
13521
13522 static __inline__ vector unsigned int __ATTRS_o_ai
13523 vec_extract_exp(vector float __a) {
13524   return __builtin_vsx_xvxexpsp(__a);
13525 }
13526
13527 static __inline__ vector unsigned long long __ATTRS_o_ai
13528 vec_extract_exp(vector double __a) {
13529   return __builtin_vsx_xvxexpdp(__a);
13530 }
13531
13532 /* vec_extract_sig */
13533
13534 static __inline__ vector unsigned int __ATTRS_o_ai
13535 vec_extract_sig(vector float __a) {
13536   return __builtin_vsx_xvxsigsp(__a);
13537 }
13538
13539 static __inline__ vector unsigned long long __ATTRS_o_ai
13540 vec_extract_sig (vector double __a) {
13541   return __builtin_vsx_xvxsigdp(__a);
13542 }
13543
13544 static __inline__ vector float __ATTRS_o_ai
13545 vec_extract_fp32_from_shorth(vector unsigned short __a) {
13546   vector unsigned short __b =
13547 #ifdef __LITTLE_ENDIAN__
13548             __builtin_shufflevector(__a, __a, 0, -1, 1, -1, 2, -1, 3, -1);
13549 #else
13550             __builtin_shufflevector(__a, __a, -1, 0, -1, 1, -1, 2, -1, 3);
13551 #endif
13552   return __builtin_vsx_xvcvhpsp(__b);
13553 }
13554
13555 static __inline__ vector float __ATTRS_o_ai
13556 vec_extract_fp32_from_shortl(vector unsigned short __a) {
13557   vector unsigned short __b =
13558 #ifdef __LITTLE_ENDIAN__
13559             __builtin_shufflevector(__a, __a, 4, -1, 5, -1, 6, -1, 7, -1);
13560 #else
13561             __builtin_shufflevector(__a, __a, -1, 4, -1, 5, -1, 6, -1, 7);
13562 #endif
13563   return __builtin_vsx_xvcvhpsp(__b);
13564 }
13565 #endif /* __POWER9_VECTOR__ */
13566
13567 /* vec_insert */
13568
13569 static __inline__ vector signed char __ATTRS_o_ai
13570 vec_insert(signed char __a, vector signed char __b, int __c) {
13571   __b[__c] = __a;
13572   return __b;
13573 }
13574
13575 static __inline__ vector unsigned char __ATTRS_o_ai
13576 vec_insert(unsigned char __a, vector unsigned char __b, int __c) {
13577   __b[__c] = __a;
13578   return __b;
13579 }
13580
13581 static __inline__ vector bool char __ATTRS_o_ai vec_insert(unsigned char __a,
13582                                                            vector bool char __b,
13583                                                            int __c) {
13584   __b[__c] = __a;
13585   return __b;
13586 }
13587
13588 static __inline__ vector signed short __ATTRS_o_ai
13589 vec_insert(signed short __a, vector signed short __b, int __c) {
13590   __b[__c] = __a;
13591   return __b;
13592 }
13593
13594 static __inline__ vector unsigned short __ATTRS_o_ai
13595 vec_insert(unsigned short __a, vector unsigned short __b, int __c) {
13596   __b[__c] = __a;
13597   return __b;
13598 }
13599
13600 static __inline__ vector bool short __ATTRS_o_ai
13601 vec_insert(unsigned short __a, vector bool short __b, int __c) {
13602   __b[__c] = __a;
13603   return __b;
13604 }
13605
13606 static __inline__ vector signed int __ATTRS_o_ai
13607 vec_insert(signed int __a, vector signed int __b, int __c) {
13608   __b[__c] = __a;
13609   return __b;
13610 }
13611
13612 static __inline__ vector unsigned int __ATTRS_o_ai
13613 vec_insert(unsigned int __a, vector unsigned int __b, int __c) {
13614   __b[__c] = __a;
13615   return __b;
13616 }
13617
13618 static __inline__ vector bool int __ATTRS_o_ai vec_insert(unsigned int __a,
13619                                                           vector bool int __b,
13620                                                           int __c) {
13621   __b[__c] = __a;
13622   return __b;
13623 }
13624
13625 #ifdef __VSX__
13626 static __inline__ vector signed long long __ATTRS_o_ai
13627 vec_insert(signed long long __a, vector signed long long __b, int __c) {
13628   __b[__c] = __a;
13629   return __b;
13630 }
13631
13632 static __inline__ vector unsigned long long __ATTRS_o_ai
13633 vec_insert(unsigned long long __a, vector unsigned long long __b, int __c) {
13634   __b[__c] = __a;
13635   return __b;
13636 }
13637
13638 static __inline__ vector bool long long __ATTRS_o_ai
13639 vec_insert(unsigned long long __a, vector bool long long __b, int __c) {
13640   __b[__c] = __a;
13641   return __b;
13642 }
13643 static __inline__ vector double __ATTRS_o_ai vec_insert(double __a,
13644                                                         vector double __b,
13645                                                         int __c) {
13646   __b[__c] = __a;
13647   return __b;
13648 }
13649 #endif
13650
13651 static __inline__ vector float __ATTRS_o_ai vec_insert(float __a,
13652                                                        vector float __b,
13653                                                        int __c) {
13654   __b[__c] = __a;
13655   return __b;
13656 }
13657
13658 /* vec_lvlx */
13659
13660 static __inline__ vector signed char __ATTRS_o_ai
13661 vec_lvlx(int __a, const signed char *__b) {
13662   return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
13663                   vec_lvsl(__a, __b));
13664 }
13665
13666 static __inline__ vector signed char __ATTRS_o_ai
13667 vec_lvlx(int __a, const vector signed char *__b) {
13668   return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
13669                   vec_lvsl(__a, (unsigned char *)__b));
13670 }
13671
13672 static __inline__ vector unsigned char __ATTRS_o_ai
13673 vec_lvlx(int __a, const unsigned char *__b) {
13674   return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
13675                   vec_lvsl(__a, __b));
13676 }
13677
13678 static __inline__ vector unsigned char __ATTRS_o_ai
13679 vec_lvlx(int __a, const vector unsigned char *__b) {
13680   return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
13681                   vec_lvsl(__a, (unsigned char *)__b));
13682 }
13683
13684 static __inline__ vector bool char __ATTRS_o_ai
13685 vec_lvlx(int __a, const vector bool char *__b) {
13686   return vec_perm(vec_ld(__a, __b), (vector bool char)(0),
13687                   vec_lvsl(__a, (unsigned char *)__b));
13688 }
13689
13690 static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
13691                                                      const short *__b) {
13692   return vec_perm(vec_ld(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
13693 }
13694
13695 static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
13696                                                      const vector short *__b) {
13697   return vec_perm(vec_ld(__a, __b), (vector short)(0),
13698                   vec_lvsl(__a, (unsigned char *)__b));
13699 }
13700
13701 static __inline__ vector unsigned short __ATTRS_o_ai
13702 vec_lvlx(int __a, const unsigned short *__b) {
13703   return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
13704                   vec_lvsl(__a, __b));
13705 }
13706
13707 static __inline__ vector unsigned short __ATTRS_o_ai
13708 vec_lvlx(int __a, const vector unsigned short *__b) {
13709   return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
13710                   vec_lvsl(__a, (unsigned char *)__b));
13711 }
13712
13713 static __inline__ vector bool short __ATTRS_o_ai
13714 vec_lvlx(int __a, const vector bool short *__b) {
13715   return vec_perm(vec_ld(__a, __b), (vector bool short)(0),
13716                   vec_lvsl(__a, (unsigned char *)__b));
13717 }
13718
13719 static __inline__ vector pixel __ATTRS_o_ai vec_lvlx(int __a,
13720                                                      const vector pixel *__b) {
13721   return vec_perm(vec_ld(__a, __b), (vector pixel)(0),
13722                   vec_lvsl(__a, (unsigned char *)__b));
13723 }
13724
13725 static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a, const int *__b) {
13726   return vec_perm(vec_ld(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
13727 }
13728
13729 static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a,
13730                                                    const vector int *__b) {
13731   return vec_perm(vec_ld(__a, __b), (vector int)(0),
13732                   vec_lvsl(__a, (unsigned char *)__b));
13733 }
13734
13735 static __inline__ vector unsigned int __ATTRS_o_ai
13736 vec_lvlx(int __a, const unsigned int *__b) {
13737   return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
13738                   vec_lvsl(__a, __b));
13739 }
13740
13741 static __inline__ vector unsigned int __ATTRS_o_ai
13742 vec_lvlx(int __a, const vector unsigned int *__b) {
13743   return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
13744                   vec_lvsl(__a, (unsigned char *)__b));
13745 }
13746
13747 static __inline__ vector bool int __ATTRS_o_ai
13748 vec_lvlx(int __a, const vector bool int *__b) {
13749   return vec_perm(vec_ld(__a, __b), (vector bool int)(0),
13750                   vec_lvsl(__a, (unsigned char *)__b));
13751 }
13752
13753 static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
13754                                                      const float *__b) {
13755   return vec_perm(vec_ld(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
13756 }
13757
13758 static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
13759                                                      const vector float *__b) {
13760   return vec_perm(vec_ld(__a, __b), (vector float)(0),
13761                   vec_lvsl(__a, (unsigned char *)__b));
13762 }
13763
13764 /* vec_lvlxl */
13765
13766 static __inline__ vector signed char __ATTRS_o_ai
13767 vec_lvlxl(int __a, const signed char *__b) {
13768   return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
13769                   vec_lvsl(__a, __b));
13770 }
13771
13772 static __inline__ vector signed char __ATTRS_o_ai
13773 vec_lvlxl(int __a, const vector signed char *__b) {
13774   return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
13775                   vec_lvsl(__a, (unsigned char *)__b));
13776 }
13777
13778 static __inline__ vector unsigned char __ATTRS_o_ai
13779 vec_lvlxl(int __a, const unsigned char *__b) {
13780   return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
13781                   vec_lvsl(__a, __b));
13782 }
13783
13784 static __inline__ vector unsigned char __ATTRS_o_ai
13785 vec_lvlxl(int __a, const vector unsigned char *__b) {
13786   return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
13787                   vec_lvsl(__a, (unsigned char *)__b));
13788 }
13789
13790 static __inline__ vector bool char __ATTRS_o_ai
13791 vec_lvlxl(int __a, const vector bool char *__b) {
13792   return vec_perm(vec_ldl(__a, __b), (vector bool char)(0),
13793                   vec_lvsl(__a, (unsigned char *)__b));
13794 }
13795
13796 static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
13797                                                       const short *__b) {
13798   return vec_perm(vec_ldl(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
13799 }
13800
13801 static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
13802                                                       const vector short *__b) {
13803   return vec_perm(vec_ldl(__a, __b), (vector short)(0),
13804                   vec_lvsl(__a, (unsigned char *)__b));
13805 }
13806
13807 static __inline__ vector unsigned short __ATTRS_o_ai
13808 vec_lvlxl(int __a, const unsigned short *__b) {
13809   return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
13810                   vec_lvsl(__a, __b));
13811 }
13812
13813 static __inline__ vector unsigned short __ATTRS_o_ai
13814 vec_lvlxl(int __a, const vector unsigned short *__b) {
13815   return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
13816                   vec_lvsl(__a, (unsigned char *)__b));
13817 }
13818
13819 static __inline__ vector bool short __ATTRS_o_ai
13820 vec_lvlxl(int __a, const vector bool short *__b) {
13821   return vec_perm(vec_ldl(__a, __b), (vector bool short)(0),
13822                   vec_lvsl(__a, (unsigned char *)__b));
13823 }
13824
13825 static __inline__ vector pixel __ATTRS_o_ai vec_lvlxl(int __a,
13826                                                       const vector pixel *__b) {
13827   return vec_perm(vec_ldl(__a, __b), (vector pixel)(0),
13828                   vec_lvsl(__a, (unsigned char *)__b));
13829 }
13830
13831 static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a, const int *__b) {
13832   return vec_perm(vec_ldl(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
13833 }
13834
13835 static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a,
13836                                                     const vector int *__b) {
13837   return vec_perm(vec_ldl(__a, __b), (vector int)(0),
13838                   vec_lvsl(__a, (unsigned char *)__b));
13839 }
13840
13841 static __inline__ vector unsigned int __ATTRS_o_ai
13842 vec_lvlxl(int __a, const unsigned int *__b) {
13843   return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
13844                   vec_lvsl(__a, __b));
13845 }
13846
13847 static __inline__ vector unsigned int __ATTRS_o_ai
13848 vec_lvlxl(int __a, const vector unsigned int *__b) {
13849   return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
13850                   vec_lvsl(__a, (unsigned char *)__b));
13851 }
13852
13853 static __inline__ vector bool int __ATTRS_o_ai
13854 vec_lvlxl(int __a, const vector bool int *__b) {
13855   return vec_perm(vec_ldl(__a, __b), (vector bool int)(0),
13856                   vec_lvsl(__a, (unsigned char *)__b));
13857 }
13858
13859 static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
13860                                                       const float *__b) {
13861   return vec_perm(vec_ldl(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
13862 }
13863
13864 static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
13865                                                       vector float *__b) {
13866   return vec_perm(vec_ldl(__a, __b), (vector float)(0),
13867                   vec_lvsl(__a, (unsigned char *)__b));
13868 }
13869
13870 /* vec_lvrx */
13871
13872 static __inline__ vector signed char __ATTRS_o_ai
13873 vec_lvrx(int __a, const signed char *__b) {
13874   return vec_perm((vector signed char)(0), vec_ld(__a, __b),
13875                   vec_lvsl(__a, __b));
13876 }
13877
13878 static __inline__ vector signed char __ATTRS_o_ai
13879 vec_lvrx(int __a, const vector signed char *__b) {
13880   return vec_perm((vector signed char)(0), vec_ld(__a, __b),
13881                   vec_lvsl(__a, (unsigned char *)__b));
13882 }
13883
13884 static __inline__ vector unsigned char __ATTRS_o_ai
13885 vec_lvrx(int __a, const unsigned char *__b) {
13886   return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
13887                   vec_lvsl(__a, __b));
13888 }
13889
13890 static __inline__ vector unsigned char __ATTRS_o_ai
13891 vec_lvrx(int __a, const vector unsigned char *__b) {
13892   return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
13893                   vec_lvsl(__a, (unsigned char *)__b));
13894 }
13895
13896 static __inline__ vector bool char __ATTRS_o_ai
13897 vec_lvrx(int __a, const vector bool char *__b) {
13898   return vec_perm((vector bool char)(0), vec_ld(__a, __b),
13899                   vec_lvsl(__a, (unsigned char *)__b));
13900 }
13901
13902 static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
13903                                                      const short *__b) {
13904   return vec_perm((vector short)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
13905 }
13906
13907 static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
13908                                                      const vector short *__b) {
13909   return vec_perm((vector short)(0), vec_ld(__a, __b),
13910                   vec_lvsl(__a, (unsigned char *)__b));
13911 }
13912
13913 static __inline__ vector unsigned short __ATTRS_o_ai
13914 vec_lvrx(int __a, const unsigned short *__b) {
13915   return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
13916                   vec_lvsl(__a, __b));
13917 }
13918
13919 static __inline__ vector unsigned short __ATTRS_o_ai
13920 vec_lvrx(int __a, const vector unsigned short *__b) {
13921   return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
13922                   vec_lvsl(__a, (unsigned char *)__b));
13923 }
13924
13925 static __inline__ vector bool short __ATTRS_o_ai
13926 vec_lvrx(int __a, const vector bool short *__b) {
13927   return vec_perm((vector bool short)(0), vec_ld(__a, __b),
13928                   vec_lvsl(__a, (unsigned char *)__b));
13929 }
13930
13931 static __inline__ vector pixel __ATTRS_o_ai vec_lvrx(int __a,
13932                                                      const vector pixel *__b) {
13933   return vec_perm((vector pixel)(0), vec_ld(__a, __b),
13934                   vec_lvsl(__a, (unsigned char *)__b));
13935 }
13936
13937 static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a, const int *__b) {
13938   return vec_perm((vector int)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
13939 }
13940
13941 static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a,
13942                                                    const vector int *__b) {
13943   return vec_perm((vector int)(0), vec_ld(__a, __b),
13944                   vec_lvsl(__a, (unsigned char *)__b));
13945 }
13946
13947 static __inline__ vector unsigned int __ATTRS_o_ai
13948 vec_lvrx(int __a, const unsigned int *__b) {
13949   return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
13950                   vec_lvsl(__a, __b));
13951 }
13952
13953 static __inline__ vector unsigned int __ATTRS_o_ai
13954 vec_lvrx(int __a, const vector unsigned int *__b) {
13955   return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
13956                   vec_lvsl(__a, (unsigned char *)__b));
13957 }
13958
13959 static __inline__ vector bool int __ATTRS_o_ai
13960 vec_lvrx(int __a, const vector bool int *__b) {
13961   return vec_perm((vector bool int)(0), vec_ld(__a, __b),
13962                   vec_lvsl(__a, (unsigned char *)__b));
13963 }
13964
13965 static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
13966                                                      const float *__b) {
13967   return vec_perm((vector float)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
13968 }
13969
13970 static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
13971                                                      const vector float *__b) {
13972   return vec_perm((vector float)(0), vec_ld(__a, __b),
13973                   vec_lvsl(__a, (unsigned char *)__b));
13974 }
13975
13976 /* vec_lvrxl */
13977
13978 static __inline__ vector signed char __ATTRS_o_ai
13979 vec_lvrxl(int __a, const signed char *__b) {
13980   return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
13981                   vec_lvsl(__a, __b));
13982 }
13983
13984 static __inline__ vector signed char __ATTRS_o_ai
13985 vec_lvrxl(int __a, const vector signed char *__b) {
13986   return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
13987                   vec_lvsl(__a, (unsigned char *)__b));
13988 }
13989
13990 static __inline__ vector unsigned char __ATTRS_o_ai
13991 vec_lvrxl(int __a, const unsigned char *__b) {
13992   return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
13993                   vec_lvsl(__a, __b));
13994 }
13995
13996 static __inline__ vector unsigned char __ATTRS_o_ai
13997 vec_lvrxl(int __a, const vector unsigned char *__b) {
13998   return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
13999                   vec_lvsl(__a, (unsigned char *)__b));
14000 }
14001
14002 static __inline__ vector bool char __ATTRS_o_ai
14003 vec_lvrxl(int __a, const vector bool char *__b) {
14004   return vec_perm((vector bool char)(0), vec_ldl(__a, __b),
14005                   vec_lvsl(__a, (unsigned char *)__b));
14006 }
14007
14008 static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
14009                                                       const short *__b) {
14010   return vec_perm((vector short)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
14011 }
14012
14013 static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
14014                                                       const vector short *__b) {
14015   return vec_perm((vector short)(0), vec_ldl(__a, __b),
14016                   vec_lvsl(__a, (unsigned char *)__b));
14017 }
14018
14019 static __inline__ vector unsigned short __ATTRS_o_ai
14020 vec_lvrxl(int __a, const unsigned short *__b) {
14021   return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
14022                   vec_lvsl(__a, __b));
14023 }
14024
14025 static __inline__ vector unsigned short __ATTRS_o_ai
14026 vec_lvrxl(int __a, const vector unsigned short *__b) {
14027   return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
14028                   vec_lvsl(__a, (unsigned char *)__b));
14029 }
14030
14031 static __inline__ vector bool short __ATTRS_o_ai
14032 vec_lvrxl(int __a, const vector bool short *__b) {
14033   return vec_perm((vector bool short)(0), vec_ldl(__a, __b),
14034                   vec_lvsl(__a, (unsigned char *)__b));
14035 }
14036
14037 static __inline__ vector pixel __ATTRS_o_ai vec_lvrxl(int __a,
14038                                                       const vector pixel *__b) {
14039   return vec_perm((vector pixel)(0), vec_ldl(__a, __b),
14040                   vec_lvsl(__a, (unsigned char *)__b));
14041 }
14042
14043 static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a, const int *__b) {
14044   return vec_perm((vector int)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
14045 }
14046
14047 static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a,
14048                                                     const vector int *__b) {
14049   return vec_perm((vector int)(0), vec_ldl(__a, __b),
14050                   vec_lvsl(__a, (unsigned char *)__b));
14051 }
14052
14053 static __inline__ vector unsigned int __ATTRS_o_ai
14054 vec_lvrxl(int __a, const unsigned int *__b) {
14055   return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
14056                   vec_lvsl(__a, __b));
14057 }
14058
14059 static __inline__ vector unsigned int __ATTRS_o_ai
14060 vec_lvrxl(int __a, const vector unsigned int *__b) {
14061   return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
14062                   vec_lvsl(__a, (unsigned char *)__b));
14063 }
14064
14065 static __inline__ vector bool int __ATTRS_o_ai
14066 vec_lvrxl(int __a, const vector bool int *__b) {
14067   return vec_perm((vector bool int)(0), vec_ldl(__a, __b),
14068                   vec_lvsl(__a, (unsigned char *)__b));
14069 }
14070
14071 static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
14072                                                       const float *__b) {
14073   return vec_perm((vector float)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
14074 }
14075
14076 static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
14077                                                       const vector float *__b) {
14078   return vec_perm((vector float)(0), vec_ldl(__a, __b),
14079                   vec_lvsl(__a, (unsigned char *)__b));
14080 }
14081
14082 /* vec_stvlx */
14083
14084 static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
14085                                               signed char *__c) {
14086   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14087                 __c);
14088 }
14089
14090 static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
14091                                               vector signed char *__c) {
14092   return vec_st(
14093       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14094       __b, __c);
14095 }
14096
14097 static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
14098                                               unsigned char *__c) {
14099   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14100                 __c);
14101 }
14102
14103 static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
14104                                               vector unsigned char *__c) {
14105   return vec_st(
14106       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14107       __b, __c);
14108 }
14109
14110 static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool char __a, int __b,
14111                                               vector bool char *__c) {
14112   return vec_st(
14113       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14114       __b, __c);
14115 }
14116
14117 static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
14118                                               short *__c) {
14119   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14120                 __c);
14121 }
14122
14123 static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
14124                                               vector short *__c) {
14125   return vec_st(
14126       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14127       __b, __c);
14128 }
14129
14130 static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
14131                                               int __b, unsigned short *__c) {
14132   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14133                 __c);
14134 }
14135
14136 static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
14137                                               int __b,
14138                                               vector unsigned short *__c) {
14139   return vec_st(
14140       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14141       __b, __c);
14142 }
14143
14144 static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool short __a, int __b,
14145                                               vector bool short *__c) {
14146   return vec_st(
14147       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14148       __b, __c);
14149 }
14150
14151 static __inline__ void __ATTRS_o_ai vec_stvlx(vector pixel __a, int __b,
14152                                               vector pixel *__c) {
14153   return vec_st(
14154       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14155       __b, __c);
14156 }
14157
14158 static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
14159                                               int *__c) {
14160   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14161                 __c);
14162 }
14163
14164 static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
14165                                               vector int *__c) {
14166   return vec_st(
14167       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14168       __b, __c);
14169 }
14170
14171 static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
14172                                               unsigned int *__c) {
14173   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14174                 __c);
14175 }
14176
14177 static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
14178                                               vector unsigned int *__c) {
14179   return vec_st(
14180       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14181       __b, __c);
14182 }
14183
14184 static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool int __a, int __b,
14185                                               vector bool int *__c) {
14186   return vec_st(
14187       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14188       __b, __c);
14189 }
14190
14191 static __inline__ void __ATTRS_o_ai vec_stvlx(vector float __a, int __b,
14192                                               vector float *__c) {
14193   return vec_st(
14194       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14195       __b, __c);
14196 }
14197
14198 /* vec_stvlxl */
14199
14200 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
14201                                                signed char *__c) {
14202   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14203                  __c);
14204 }
14205
14206 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
14207                                                vector signed char *__c) {
14208   return vec_stl(
14209       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14210       __b, __c);
14211 }
14212
14213 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
14214                                                int __b, unsigned char *__c) {
14215   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14216                  __c);
14217 }
14218
14219 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
14220                                                int __b,
14221                                                vector unsigned char *__c) {
14222   return vec_stl(
14223       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14224       __b, __c);
14225 }
14226
14227 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool char __a, int __b,
14228                                                vector bool char *__c) {
14229   return vec_stl(
14230       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14231       __b, __c);
14232 }
14233
14234 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
14235                                                short *__c) {
14236   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14237                  __c);
14238 }
14239
14240 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
14241                                                vector short *__c) {
14242   return vec_stl(
14243       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14244       __b, __c);
14245 }
14246
14247 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
14248                                                int __b, unsigned short *__c) {
14249   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14250                  __c);
14251 }
14252
14253 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
14254                                                int __b,
14255                                                vector unsigned short *__c) {
14256   return vec_stl(
14257       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14258       __b, __c);
14259 }
14260
14261 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool short __a, int __b,
14262                                                vector bool short *__c) {
14263   return vec_stl(
14264       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14265       __b, __c);
14266 }
14267
14268 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector pixel __a, int __b,
14269                                                vector pixel *__c) {
14270   return vec_stl(
14271       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14272       __b, __c);
14273 }
14274
14275 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
14276                                                int *__c) {
14277   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14278                  __c);
14279 }
14280
14281 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
14282                                                vector int *__c) {
14283   return vec_stl(
14284       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14285       __b, __c);
14286 }
14287
14288 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
14289                                                unsigned int *__c) {
14290   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
14291                  __c);
14292 }
14293
14294 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
14295                                                vector unsigned int *__c) {
14296   return vec_stl(
14297       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14298       __b, __c);
14299 }
14300
14301 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool int __a, int __b,
14302                                                vector bool int *__c) {
14303   return vec_stl(
14304       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14305       __b, __c);
14306 }
14307
14308 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector float __a, int __b,
14309                                                vector float *__c) {
14310   return vec_stl(
14311       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
14312       __b, __c);
14313 }
14314
14315 /* vec_stvrx */
14316
14317 static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
14318                                               signed char *__c) {
14319   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14320                 __c);
14321 }
14322
14323 static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
14324                                               vector signed char *__c) {
14325   return vec_st(
14326       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14327       __b, __c);
14328 }
14329
14330 static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
14331                                               unsigned char *__c) {
14332   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14333                 __c);
14334 }
14335
14336 static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
14337                                               vector unsigned char *__c) {
14338   return vec_st(
14339       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14340       __b, __c);
14341 }
14342
14343 static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool char __a, int __b,
14344                                               vector bool char *__c) {
14345   return vec_st(
14346       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14347       __b, __c);
14348 }
14349
14350 static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
14351                                               short *__c) {
14352   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14353                 __c);
14354 }
14355
14356 static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
14357                                               vector short *__c) {
14358   return vec_st(
14359       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14360       __b, __c);
14361 }
14362
14363 static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
14364                                               int __b, unsigned short *__c) {
14365   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14366                 __c);
14367 }
14368
14369 static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
14370                                               int __b,
14371                                               vector unsigned short *__c) {
14372   return vec_st(
14373       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14374       __b, __c);
14375 }
14376
14377 static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool short __a, int __b,
14378                                               vector bool short *__c) {
14379   return vec_st(
14380       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14381       __b, __c);
14382 }
14383
14384 static __inline__ void __ATTRS_o_ai vec_stvrx(vector pixel __a, int __b,
14385                                               vector pixel *__c) {
14386   return vec_st(
14387       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14388       __b, __c);
14389 }
14390
14391 static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
14392                                               int *__c) {
14393   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14394                 __c);
14395 }
14396
14397 static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
14398                                               vector int *__c) {
14399   return vec_st(
14400       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14401       __b, __c);
14402 }
14403
14404 static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
14405                                               unsigned int *__c) {
14406   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14407                 __c);
14408 }
14409
14410 static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
14411                                               vector unsigned int *__c) {
14412   return vec_st(
14413       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14414       __b, __c);
14415 }
14416
14417 static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool int __a, int __b,
14418                                               vector bool int *__c) {
14419   return vec_st(
14420       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14421       __b, __c);
14422 }
14423
14424 static __inline__ void __ATTRS_o_ai vec_stvrx(vector float __a, int __b,
14425                                               vector float *__c) {
14426   return vec_st(
14427       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14428       __b, __c);
14429 }
14430
14431 /* vec_stvrxl */
14432
14433 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
14434                                                signed char *__c) {
14435   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14436                  __c);
14437 }
14438
14439 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
14440                                                vector signed char *__c) {
14441   return vec_stl(
14442       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14443       __b, __c);
14444 }
14445
14446 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
14447                                                int __b, unsigned char *__c) {
14448   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14449                  __c);
14450 }
14451
14452 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
14453                                                int __b,
14454                                                vector unsigned char *__c) {
14455   return vec_stl(
14456       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14457       __b, __c);
14458 }
14459
14460 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool char __a, int __b,
14461                                                vector bool char *__c) {
14462   return vec_stl(
14463       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14464       __b, __c);
14465 }
14466
14467 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
14468                                                short *__c) {
14469   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14470                  __c);
14471 }
14472
14473 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
14474                                                vector short *__c) {
14475   return vec_stl(
14476       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14477       __b, __c);
14478 }
14479
14480 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
14481                                                int __b, unsigned short *__c) {
14482   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14483                  __c);
14484 }
14485
14486 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
14487                                                int __b,
14488                                                vector unsigned short *__c) {
14489   return vec_stl(
14490       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14491       __b, __c);
14492 }
14493
14494 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool short __a, int __b,
14495                                                vector bool short *__c) {
14496   return vec_stl(
14497       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14498       __b, __c);
14499 }
14500
14501 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector pixel __a, int __b,
14502                                                vector pixel *__c) {
14503   return vec_stl(
14504       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14505       __b, __c);
14506 }
14507
14508 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
14509                                                int *__c) {
14510   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14511                  __c);
14512 }
14513
14514 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
14515                                                vector int *__c) {
14516   return vec_stl(
14517       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14518       __b, __c);
14519 }
14520
14521 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
14522                                                unsigned int *__c) {
14523   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
14524                  __c);
14525 }
14526
14527 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
14528                                                vector unsigned int *__c) {
14529   return vec_stl(
14530       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14531       __b, __c);
14532 }
14533
14534 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool int __a, int __b,
14535                                                vector bool int *__c) {
14536   return vec_stl(
14537       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14538       __b, __c);
14539 }
14540
14541 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector float __a, int __b,
14542                                                vector float *__c) {
14543   return vec_stl(
14544       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
14545       __b, __c);
14546 }
14547
14548 /* vec_promote */
14549
14550 static __inline__ vector signed char __ATTRS_o_ai vec_promote(signed char __a,
14551                                                               int __b) {
14552   vector signed char __res = (vector signed char)(0);
14553   __res[__b & 0x7] = __a;
14554   return __res;
14555 }
14556
14557 static __inline__ vector unsigned char __ATTRS_o_ai
14558 vec_promote(unsigned char __a, int __b) {
14559   vector unsigned char __res = (vector unsigned char)(0);
14560   __res[__b & 0x7] = __a;
14561   return __res;
14562 }
14563
14564 static __inline__ vector short __ATTRS_o_ai vec_promote(short __a, int __b) {
14565   vector short __res = (vector short)(0);
14566   __res[__b & 0x7] = __a;
14567   return __res;
14568 }
14569
14570 static __inline__ vector unsigned short __ATTRS_o_ai
14571 vec_promote(unsigned short __a, int __b) {
14572   vector unsigned short __res = (vector unsigned short)(0);
14573   __res[__b & 0x7] = __a;
14574   return __res;
14575 }
14576
14577 static __inline__ vector int __ATTRS_o_ai vec_promote(int __a, int __b) {
14578   vector int __res = (vector int)(0);
14579   __res[__b & 0x3] = __a;
14580   return __res;
14581 }
14582
14583 static __inline__ vector unsigned int __ATTRS_o_ai vec_promote(unsigned int __a,
14584                                                                int __b) {
14585   vector unsigned int __res = (vector unsigned int)(0);
14586   __res[__b & 0x3] = __a;
14587   return __res;
14588 }
14589
14590 static __inline__ vector float __ATTRS_o_ai vec_promote(float __a, int __b) {
14591   vector float __res = (vector float)(0);
14592   __res[__b & 0x3] = __a;
14593   return __res;
14594 }
14595
14596 #ifdef __VSX__
14597 static __inline__ vector double __ATTRS_o_ai vec_promote(double __a, int __b) {
14598   vector double __res = (vector double)(0);
14599   __res[__b & 0x1] = __a;
14600   return __res;
14601 }
14602
14603 static __inline__ vector signed long long __ATTRS_o_ai
14604 vec_promote(signed long long __a, int __b) {
14605   vector signed long long __res = (vector signed long long)(0);
14606   __res[__b & 0x1] = __a;
14607   return __res;
14608 }
14609
14610 static __inline__ vector unsigned long long __ATTRS_o_ai
14611 vec_promote(unsigned long long __a, int __b) {
14612   vector unsigned long long __res = (vector unsigned long long)(0);
14613   __res[__b & 0x1] = __a;
14614   return __res;
14615 }
14616 #endif
14617
14618 /* vec_splats */
14619
14620 static __inline__ vector signed char __ATTRS_o_ai vec_splats(signed char __a) {
14621   return (vector signed char)(__a);
14622 }
14623
14624 static __inline__ vector unsigned char __ATTRS_o_ai
14625 vec_splats(unsigned char __a) {
14626   return (vector unsigned char)(__a);
14627 }
14628
14629 static __inline__ vector short __ATTRS_o_ai vec_splats(short __a) {
14630   return (vector short)(__a);
14631 }
14632
14633 static __inline__ vector unsigned short __ATTRS_o_ai
14634 vec_splats(unsigned short __a) {
14635   return (vector unsigned short)(__a);
14636 }
14637
14638 static __inline__ vector int __ATTRS_o_ai vec_splats(int __a) {
14639   return (vector int)(__a);
14640 }
14641
14642 static __inline__ vector unsigned int __ATTRS_o_ai
14643 vec_splats(unsigned int __a) {
14644   return (vector unsigned int)(__a);
14645 }
14646
14647 #ifdef __VSX__
14648 static __inline__ vector signed long long __ATTRS_o_ai
14649 vec_splats(signed long long __a) {
14650   return (vector signed long long)(__a);
14651 }
14652
14653 static __inline__ vector unsigned long long __ATTRS_o_ai
14654 vec_splats(unsigned long long __a) {
14655   return (vector unsigned long long)(__a);
14656 }
14657
14658 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
14659     defined(__SIZEOF_INT128__)
14660 static __inline__ vector signed __int128 __ATTRS_o_ai
14661 vec_splats(signed __int128 __a) {
14662   return (vector signed __int128)(__a);
14663 }
14664
14665 static __inline__ vector unsigned __int128 __ATTRS_o_ai
14666 vec_splats(unsigned __int128 __a) {
14667   return (vector unsigned __int128)(__a);
14668 }
14669
14670 #endif
14671
14672 static __inline__ vector double __ATTRS_o_ai vec_splats(double __a) {
14673   return (vector double)(__a);
14674 }
14675 #endif
14676
14677 static __inline__ vector float __ATTRS_o_ai vec_splats(float __a) {
14678   return (vector float)(__a);
14679 }
14680
14681 /* ----------------------------- predicates --------------------------------- */
14682
14683 /* vec_all_eq */
14684
14685 static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
14686                                               vector signed char __b) {
14687   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14688                                       (vector char)__b);
14689 }
14690
14691 static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
14692                                               vector bool char __b) {
14693   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14694                                       (vector char)__b);
14695 }
14696
14697 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
14698                                               vector unsigned char __b) {
14699   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14700                                       (vector char)__b);
14701 }
14702
14703 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
14704                                               vector bool char __b) {
14705   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14706                                       (vector char)__b);
14707 }
14708
14709 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
14710                                               vector signed char __b) {
14711   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14712                                       (vector char)__b);
14713 }
14714
14715 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
14716                                               vector unsigned char __b) {
14717   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14718                                       (vector char)__b);
14719 }
14720
14721 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
14722                                               vector bool char __b) {
14723   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
14724                                       (vector char)__b);
14725 }
14726
14727 static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
14728                                               vector short __b) {
14729   return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, __b);
14730 }
14731
14732 static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
14733                                               vector bool short __b) {
14734   return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, (vector short)__b);
14735 }
14736
14737 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
14738                                               vector unsigned short __b) {
14739   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14740                                       (vector short)__b);
14741 }
14742
14743 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
14744                                               vector bool short __b) {
14745   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14746                                       (vector short)__b);
14747 }
14748
14749 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
14750                                               vector short __b) {
14751   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14752                                       (vector short)__b);
14753 }
14754
14755 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
14756                                               vector unsigned short __b) {
14757   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14758                                       (vector short)__b);
14759 }
14760
14761 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
14762                                               vector bool short __b) {
14763   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14764                                       (vector short)__b);
14765 }
14766
14767 static __inline__ int __ATTRS_o_ai vec_all_eq(vector pixel __a,
14768                                               vector pixel __b) {
14769   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
14770                                       (vector short)__b);
14771 }
14772
14773 static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a, vector int __b) {
14774   return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, __b);
14775 }
14776
14777 static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a,
14778                                               vector bool int __b) {
14779   return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, (vector int)__b);
14780 }
14781
14782 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
14783                                               vector unsigned int __b) {
14784   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14785                                       (vector int)__b);
14786 }
14787
14788 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
14789                                               vector bool int __b) {
14790   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14791                                       (vector int)__b);
14792 }
14793
14794 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
14795                                               vector int __b) {
14796   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14797                                       (vector int)__b);
14798 }
14799
14800 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
14801                                               vector unsigned int __b) {
14802   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14803                                       (vector int)__b);
14804 }
14805
14806 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
14807                                               vector bool int __b) {
14808   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
14809                                       (vector int)__b);
14810 }
14811
14812 #ifdef __VSX__
14813 static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed long long __a,
14814                                               vector signed long long __b) {
14815   return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, __b);
14816 }
14817
14818 static __inline__ int __ATTRS_o_ai vec_all_eq(vector long long __a,
14819                                               vector bool long long __b) {
14820   return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, (vector long long)__b);
14821 }
14822
14823 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
14824                                               vector unsigned long long __b) {
14825   return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
14826                                       (vector long long)__b);
14827 }
14828
14829 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
14830                                               vector bool long long __b) {
14831   return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
14832                                       (vector long long)__b);
14833 }
14834
14835 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
14836                                               vector long long __b) {
14837   return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
14838                                       (vector long long)__b);
14839 }
14840
14841 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
14842                                               vector unsigned long long __b) {
14843   return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
14844                                       (vector long long)__b);
14845 }
14846
14847 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
14848                                               vector bool long long __b) {
14849   return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
14850                                       (vector long long)__b);
14851 }
14852 #endif
14853
14854 static __inline__ int __ATTRS_o_ai vec_all_eq(vector float __a,
14855                                               vector float __b) {
14856 #ifdef __VSX__
14857   return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __b);
14858 #else
14859   return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __b);
14860 #endif
14861 }
14862
14863 #ifdef __VSX__
14864 static __inline__ int __ATTRS_o_ai vec_all_eq(vector double __a,
14865                                               vector double __b) {
14866   return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __b);
14867 }
14868 #endif
14869
14870 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
14871 static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed __int128 __a,
14872                                               vector signed __int128 __b) {
14873   return __builtin_altivec_vcmpequq_p(__CR6_LT, __a, __b);
14874 }
14875
14876 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned __int128 __a,
14877                                               vector unsigned __int128 __b) {
14878   return __builtin_altivec_vcmpequq_p(__CR6_LT, __a, __b);
14879 }
14880 #endif
14881
14882 /* vec_all_ge */
14883
14884 static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
14885                                               vector signed char __b) {
14886   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, __a);
14887 }
14888
14889 static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
14890                                               vector bool char __b) {
14891   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__b, __a);
14892 }
14893
14894 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
14895                                               vector unsigned char __b) {
14896   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, __a);
14897 }
14898
14899 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
14900                                               vector bool char __b) {
14901   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, __a);
14902 }
14903
14904 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
14905                                               vector signed char __b) {
14906   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, (vector signed char)__a);
14907 }
14908
14909 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
14910                                               vector unsigned char __b) {
14911   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, (vector unsigned char)__a);
14912 }
14913
14914 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
14915                                               vector bool char __b) {
14916   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b,
14917                                       (vector unsigned char)__a);
14918 }
14919
14920 static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
14921                                               vector short __b) {
14922   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, __a);
14923 }
14924
14925 static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
14926                                               vector bool short __b) {
14927   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector short)__b, __a);
14928 }
14929
14930 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
14931                                               vector unsigned short __b) {
14932   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, __a);
14933 }
14934
14935 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
14936                                               vector bool short __b) {
14937   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
14938                                       __a);
14939 }
14940
14941 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
14942                                               vector short __b) {
14943   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, (vector signed short)__a);
14944 }
14945
14946 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
14947                                               vector unsigned short __b) {
14948   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b,
14949                                       (vector unsigned short)__a);
14950 }
14951
14952 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
14953                                               vector bool short __b) {
14954   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
14955                                       (vector unsigned short)__a);
14956 }
14957
14958 static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a, vector int __b) {
14959   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, __a);
14960 }
14961
14962 static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a,
14963                                               vector bool int __b) {
14964   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector int)__b, __a);
14965 }
14966
14967 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
14968                                               vector unsigned int __b) {
14969   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, __a);
14970 }
14971
14972 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
14973                                               vector bool int __b) {
14974   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, __a);
14975 }
14976
14977 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
14978                                               vector int __b) {
14979   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, (vector signed int)__a);
14980 }
14981
14982 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
14983                                               vector unsigned int __b) {
14984   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, (vector unsigned int)__a);
14985 }
14986
14987 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
14988                                               vector bool int __b) {
14989   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b,
14990                                       (vector unsigned int)__a);
14991 }
14992
14993 #ifdef __VSX__
14994 static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
14995                                               vector signed long long __b) {
14996   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b, __a);
14997 }
14998 static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
14999                                               vector bool long long __b) {
15000   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__b,
15001                                       __a);
15002 }
15003
15004 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
15005                                               vector unsigned long long __b) {
15006   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b, __a);
15007 }
15008
15009 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
15010                                               vector bool long long __b) {
15011   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
15012                                       __a);
15013 }
15014
15015 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
15016                                               vector signed long long __b) {
15017   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b,
15018                                       (vector signed long long)__a);
15019 }
15020
15021 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
15022                                               vector unsigned long long __b) {
15023   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b,
15024                                       (vector unsigned long long)__a);
15025 }
15026
15027 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
15028                                               vector bool long long __b) {
15029   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
15030                                       (vector unsigned long long)__a);
15031 }
15032 #endif
15033
15034 static __inline__ int __ATTRS_o_ai vec_all_ge(vector float __a,
15035                                               vector float __b) {
15036 #ifdef __VSX__
15037   return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __a, __b);
15038 #else
15039   return __builtin_altivec_vcmpgefp_p(__CR6_LT, __a, __b);
15040 #endif
15041 }
15042
15043 #ifdef __VSX__
15044 static __inline__ int __ATTRS_o_ai vec_all_ge(vector double __a,
15045                                               vector double __b) {
15046   return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __a, __b);
15047 }
15048 #endif
15049
15050 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15051 static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed __int128 __a,
15052                                               vector signed __int128 __b) {
15053   return __builtin_altivec_vcmpgtsq_p(__CR6_EQ, __b, __a);
15054 }
15055
15056 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned __int128 __a,
15057                                               vector unsigned __int128 __b) {
15058   return __builtin_altivec_vcmpgtuq_p(__CR6_EQ, __b, __a);
15059 }
15060 #endif
15061
15062 /* vec_all_gt */
15063
15064 static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
15065                                               vector signed char __b) {
15066   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, __b);
15067 }
15068
15069 static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
15070                                               vector bool char __b) {
15071   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, (vector signed char)__b);
15072 }
15073
15074 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
15075                                               vector unsigned char __b) {
15076   return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, __b);
15077 }
15078
15079 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
15080                                               vector bool char __b) {
15081   return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, (vector unsigned char)__b);
15082 }
15083
15084 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
15085                                               vector signed char __b) {
15086   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__a, __b);
15087 }
15088
15089 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
15090                                               vector unsigned char __b) {
15091   return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, __b);
15092 }
15093
15094 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
15095                                               vector bool char __b) {
15096   return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a,
15097                                       (vector unsigned char)__b);
15098 }
15099
15100 static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
15101                                               vector short __b) {
15102   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, __b);
15103 }
15104
15105 static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
15106                                               vector bool short __b) {
15107   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, (vector short)__b);
15108 }
15109
15110 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
15111                                               vector unsigned short __b) {
15112   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, __b);
15113 }
15114
15115 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
15116                                               vector bool short __b) {
15117   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a,
15118                                       (vector unsigned short)__b);
15119 }
15120
15121 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
15122                                               vector short __b) {
15123   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector signed short)__a, __b);
15124 }
15125
15126 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
15127                                               vector unsigned short __b) {
15128   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
15129                                       __b);
15130 }
15131
15132 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
15133                                               vector bool short __b) {
15134   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
15135                                       (vector unsigned short)__b);
15136 }
15137
15138 static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a, vector int __b) {
15139   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, __b);
15140 }
15141
15142 static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a,
15143                                               vector bool int __b) {
15144   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, (vector int)__b);
15145 }
15146
15147 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
15148                                               vector unsigned int __b) {
15149   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, __b);
15150 }
15151
15152 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
15153                                               vector bool int __b) {
15154   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, (vector unsigned int)__b);
15155 }
15156
15157 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
15158                                               vector int __b) {
15159   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector signed int)__a, __b);
15160 }
15161
15162 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
15163                                               vector unsigned int __b) {
15164   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, __b);
15165 }
15166
15167 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
15168                                               vector bool int __b) {
15169   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a,
15170                                       (vector unsigned int)__b);
15171 }
15172
15173 #ifdef __VSX__
15174 static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
15175                                               vector signed long long __b) {
15176   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a, __b);
15177 }
15178 static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
15179                                               vector bool long long __b) {
15180   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a,
15181                                       (vector signed long long)__b);
15182 }
15183
15184 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
15185                                               vector unsigned long long __b) {
15186   return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a, __b);
15187 }
15188
15189 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
15190                                               vector bool long long __b) {
15191   return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a,
15192                                       (vector unsigned long long)__b);
15193 }
15194
15195 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
15196                                               vector signed long long __b) {
15197   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__a,
15198                                       __b);
15199 }
15200
15201 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
15202                                               vector unsigned long long __b) {
15203   return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
15204                                       __b);
15205 }
15206
15207 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
15208                                               vector bool long long __b) {
15209   return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
15210                                       (vector unsigned long long)__b);
15211 }
15212 #endif
15213
15214 static __inline__ int __ATTRS_o_ai vec_all_gt(vector float __a,
15215                                               vector float __b) {
15216 #ifdef __VSX__
15217   return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __a, __b);
15218 #else
15219   return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __a, __b);
15220 #endif
15221 }
15222
15223 #ifdef __VSX__
15224 static __inline__ int __ATTRS_o_ai vec_all_gt(vector double __a,
15225                                               vector double __b) {
15226   return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __a, __b);
15227 }
15228 #endif
15229
15230 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15231 static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed __int128 __a,
15232                                               vector signed __int128 __b) {
15233   return __builtin_altivec_vcmpgtsq_p(__CR6_LT, __a, __b);
15234 }
15235
15236 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned __int128 __a,
15237                                               vector unsigned __int128 __b) {
15238   return __builtin_altivec_vcmpgtuq_p(__CR6_LT, __a, __b);
15239 }
15240 #endif
15241
15242 /* vec_all_in */
15243
15244 static __inline__ int __attribute__((__always_inline__))
15245 vec_all_in(vector float __a, vector float __b) {
15246   return __builtin_altivec_vcmpbfp_p(__CR6_EQ, __a, __b);
15247 }
15248
15249 /* vec_all_le */
15250
15251 static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
15252                                               vector signed char __b) {
15253   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, __b);
15254 }
15255
15256 static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
15257                                               vector bool char __b) {
15258   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, (vector signed char)__b);
15259 }
15260
15261 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
15262                                               vector unsigned char __b) {
15263   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, __b);
15264 }
15265
15266 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
15267                                               vector bool char __b) {
15268   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, (vector unsigned char)__b);
15269 }
15270
15271 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
15272                                               vector signed char __b) {
15273   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__a, __b);
15274 }
15275
15276 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
15277                                               vector unsigned char __b) {
15278   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, __b);
15279 }
15280
15281 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
15282                                               vector bool char __b) {
15283   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a,
15284                                       (vector unsigned char)__b);
15285 }
15286
15287 static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
15288                                               vector short __b) {
15289   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, __b);
15290 }
15291
15292 static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
15293                                               vector bool short __b) {
15294   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, (vector short)__b);
15295 }
15296
15297 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
15298                                               vector unsigned short __b) {
15299   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, __b);
15300 }
15301
15302 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
15303                                               vector bool short __b) {
15304   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a,
15305                                       (vector unsigned short)__b);
15306 }
15307
15308 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
15309                                               vector short __b) {
15310   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector signed short)__a, __b);
15311 }
15312
15313 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
15314                                               vector unsigned short __b) {
15315   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
15316                                       __b);
15317 }
15318
15319 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
15320                                               vector bool short __b) {
15321   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
15322                                       (vector unsigned short)__b);
15323 }
15324
15325 static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a, vector int __b) {
15326   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, __b);
15327 }
15328
15329 static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a,
15330                                               vector bool int __b) {
15331   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, (vector int)__b);
15332 }
15333
15334 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
15335                                               vector unsigned int __b) {
15336   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, __b);
15337 }
15338
15339 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
15340                                               vector bool int __b) {
15341   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, (vector unsigned int)__b);
15342 }
15343
15344 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
15345                                               vector int __b) {
15346   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector signed int)__a, __b);
15347 }
15348
15349 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
15350                                               vector unsigned int __b) {
15351   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, __b);
15352 }
15353
15354 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
15355                                               vector bool int __b) {
15356   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a,
15357                                       (vector unsigned int)__b);
15358 }
15359
15360 #ifdef __VSX__
15361 static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
15362                                               vector signed long long __b) {
15363   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a, __b);
15364 }
15365
15366 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
15367                                               vector unsigned long long __b) {
15368   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a, __b);
15369 }
15370
15371 static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
15372                                               vector bool long long __b) {
15373   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a,
15374                                       (vector signed long long)__b);
15375 }
15376
15377 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
15378                                               vector bool long long __b) {
15379   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a,
15380                                       (vector unsigned long long)__b);
15381 }
15382
15383 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
15384                                               vector signed long long __b) {
15385   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__a,
15386                                       __b);
15387 }
15388
15389 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
15390                                               vector unsigned long long __b) {
15391   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
15392                                       __b);
15393 }
15394
15395 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
15396                                               vector bool long long __b) {
15397   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
15398                                       (vector unsigned long long)__b);
15399 }
15400 #endif
15401
15402 static __inline__ int __ATTRS_o_ai vec_all_le(vector float __a,
15403                                               vector float __b) {
15404 #ifdef __VSX__
15405   return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __b, __a);
15406 #else
15407   return __builtin_altivec_vcmpgefp_p(__CR6_LT, __b, __a);
15408 #endif
15409 }
15410
15411 #ifdef __VSX__
15412 static __inline__ int __ATTRS_o_ai vec_all_le(vector double __a,
15413                                               vector double __b) {
15414   return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __b, __a);
15415 }
15416 #endif
15417
15418 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15419 static __inline__ int __ATTRS_o_ai vec_all_le(vector signed __int128 __a,
15420                                               vector signed __int128 __b) {
15421   return __builtin_altivec_vcmpgtsq_p(__CR6_EQ, __a, __b);
15422 }
15423
15424 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned __int128 __a,
15425                                               vector unsigned __int128 __b) {
15426   return __builtin_altivec_vcmpgtuq_p(__CR6_EQ, __a, __b);
15427 }
15428 #endif
15429
15430 /* vec_all_lt */
15431
15432 static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
15433                                               vector signed char __b) {
15434   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, __a);
15435 }
15436
15437 static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
15438                                               vector bool char __b) {
15439   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__b, __a);
15440 }
15441
15442 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
15443                                               vector unsigned char __b) {
15444   return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, __a);
15445 }
15446
15447 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
15448                                               vector bool char __b) {
15449   return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, __a);
15450 }
15451
15452 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
15453                                               vector signed char __b) {
15454   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, (vector signed char)__a);
15455 }
15456
15457 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
15458                                               vector unsigned char __b) {
15459   return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, (vector unsigned char)__a);
15460 }
15461
15462 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
15463                                               vector bool char __b) {
15464   return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b,
15465                                       (vector unsigned char)__a);
15466 }
15467
15468 static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
15469                                               vector short __b) {
15470   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, __a);
15471 }
15472
15473 static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
15474                                               vector bool short __b) {
15475   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector short)__b, __a);
15476 }
15477
15478 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
15479                                               vector unsigned short __b) {
15480   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, __a);
15481 }
15482
15483 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
15484                                               vector bool short __b) {
15485   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
15486                                       __a);
15487 }
15488
15489 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
15490                                               vector short __b) {
15491   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, (vector signed short)__a);
15492 }
15493
15494 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
15495                                               vector unsigned short __b) {
15496   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b,
15497                                       (vector unsigned short)__a);
15498 }
15499
15500 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
15501                                               vector bool short __b) {
15502   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
15503                                       (vector unsigned short)__a);
15504 }
15505
15506 static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a, vector int __b) {
15507   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, __a);
15508 }
15509
15510 static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a,
15511                                               vector bool int __b) {
15512   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector int)__b, __a);
15513 }
15514
15515 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
15516                                               vector unsigned int __b) {
15517   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, __a);
15518 }
15519
15520 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
15521                                               vector bool int __b) {
15522   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, __a);
15523 }
15524
15525 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
15526                                               vector int __b) {
15527   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, (vector signed int)__a);
15528 }
15529
15530 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
15531                                               vector unsigned int __b) {
15532   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, (vector unsigned int)__a);
15533 }
15534
15535 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
15536                                               vector bool int __b) {
15537   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b,
15538                                       (vector unsigned int)__a);
15539 }
15540
15541 #ifdef __VSX__
15542 static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
15543                                               vector signed long long __b) {
15544   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b, __a);
15545 }
15546
15547 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
15548                                               vector unsigned long long __b) {
15549   return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b, __a);
15550 }
15551
15552 static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
15553                                               vector bool long long __b) {
15554   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__b,
15555                                       __a);
15556 }
15557
15558 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
15559                                               vector bool long long __b) {
15560   return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
15561                                       __a);
15562 }
15563
15564 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
15565                                               vector signed long long __b) {
15566   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b,
15567                                       (vector signed long long)__a);
15568 }
15569
15570 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
15571                                               vector unsigned long long __b) {
15572   return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b,
15573                                       (vector unsigned long long)__a);
15574 }
15575
15576 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
15577                                               vector bool long long __b) {
15578   return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
15579                                       (vector unsigned long long)__a);
15580 }
15581 #endif
15582
15583 static __inline__ int __ATTRS_o_ai vec_all_lt(vector float __a,
15584                                               vector float __b) {
15585 #ifdef __VSX__
15586   return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __b, __a);
15587 #else
15588   return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __b, __a);
15589 #endif
15590 }
15591
15592 #ifdef __VSX__
15593 static __inline__ int __ATTRS_o_ai vec_all_lt(vector double __a,
15594                                               vector double __b) {
15595   return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __b, __a);
15596 }
15597 #endif
15598
15599 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15600 static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed __int128 __a,
15601                                               vector signed __int128 __b) {
15602   return __builtin_altivec_vcmpgtsq_p(__CR6_LT, __b, __a);
15603 }
15604
15605 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned __int128 __a,
15606                                               vector unsigned __int128 __b) {
15607   return __builtin_altivec_vcmpgtuq_p(__CR6_LT, __b, __a);
15608 }
15609 #endif
15610
15611 /* vec_all_nan */
15612
15613 static __inline__ int __ATTRS_o_ai vec_all_nan(vector float __a) {
15614 #ifdef __VSX__
15615   return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __a);
15616 #else
15617   return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __a);
15618 #endif
15619 }
15620
15621 #ifdef __VSX__
15622 static __inline__ int __ATTRS_o_ai vec_all_nan(vector double __a) {
15623   return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __a);
15624 }
15625 #endif
15626
15627 /* vec_all_ne */
15628
15629 static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
15630                                               vector signed char __b) {
15631   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15632                                       (vector char)__b);
15633 }
15634
15635 static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
15636                                               vector bool char __b) {
15637   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15638                                       (vector char)__b);
15639 }
15640
15641 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
15642                                               vector unsigned char __b) {
15643   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15644                                       (vector char)__b);
15645 }
15646
15647 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
15648                                               vector bool char __b) {
15649   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15650                                       (vector char)__b);
15651 }
15652
15653 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
15654                                               vector signed char __b) {
15655   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15656                                       (vector char)__b);
15657 }
15658
15659 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
15660                                               vector unsigned char __b) {
15661   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15662                                       (vector char)__b);
15663 }
15664
15665 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
15666                                               vector bool char __b) {
15667   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
15668                                       (vector char)__b);
15669 }
15670
15671 static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
15672                                               vector short __b) {
15673   return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, __b);
15674 }
15675
15676 static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
15677                                               vector bool short __b) {
15678   return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, (vector short)__b);
15679 }
15680
15681 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
15682                                               vector unsigned short __b) {
15683   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15684                                       (vector short)__b);
15685 }
15686
15687 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
15688                                               vector bool short __b) {
15689   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15690                                       (vector short)__b);
15691 }
15692
15693 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
15694                                               vector short __b) {
15695   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15696                                       (vector short)__b);
15697 }
15698
15699 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
15700                                               vector unsigned short __b) {
15701   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15702                                       (vector short)__b);
15703 }
15704
15705 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
15706                                               vector bool short __b) {
15707   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15708                                       (vector short)__b);
15709 }
15710
15711 static __inline__ int __ATTRS_o_ai vec_all_ne(vector pixel __a,
15712                                               vector pixel __b) {
15713   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
15714                                       (vector short)__b);
15715 }
15716
15717 static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a, vector int __b) {
15718   return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, __b);
15719 }
15720
15721 static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a,
15722                                               vector bool int __b) {
15723   return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, (vector int)__b);
15724 }
15725
15726 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
15727                                               vector unsigned int __b) {
15728   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15729                                       (vector int)__b);
15730 }
15731
15732 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
15733                                               vector bool int __b) {
15734   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15735                                       (vector int)__b);
15736 }
15737
15738 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
15739                                               vector int __b) {
15740   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15741                                       (vector int)__b);
15742 }
15743
15744 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
15745                                               vector unsigned int __b) {
15746   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15747                                       (vector int)__b);
15748 }
15749
15750 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
15751                                               vector bool int __b) {
15752   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
15753                                       (vector int)__b);
15754 }
15755
15756 #ifdef __VSX__
15757 static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
15758                                               vector signed long long __b) {
15759   return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a, __b);
15760 }
15761
15762 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
15763                                               vector unsigned long long __b) {
15764   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector long long)__a,
15765                                       (vector long long)__b);
15766 }
15767
15768 static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
15769                                               vector bool long long __b) {
15770   return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a,
15771                                       (vector signed long long)__b);
15772 }
15773
15774 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
15775                                               vector bool long long __b) {
15776   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
15777                                       (vector signed long long)__b);
15778 }
15779
15780 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
15781                                               vector signed long long __b) {
15782   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
15783                                       (vector signed long long)__b);
15784 }
15785
15786 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
15787                                               vector unsigned long long __b) {
15788   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
15789                                       (vector signed long long)__b);
15790 }
15791
15792 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
15793                                               vector bool long long __b) {
15794   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
15795                                       (vector signed long long)__b);
15796 }
15797 #endif
15798
15799 static __inline__ int __ATTRS_o_ai vec_all_ne(vector float __a,
15800                                               vector float __b) {
15801 #ifdef __VSX__
15802   return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __b);
15803 #else
15804   return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __b);
15805 #endif
15806 }
15807
15808 #ifdef __VSX__
15809 static __inline__ int __ATTRS_o_ai vec_all_ne(vector double __a,
15810                                               vector double __b) {
15811   return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __b);
15812 }
15813 #endif
15814
15815 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
15816 static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed __int128 __a,
15817                                               vector signed __int128 __b) {
15818   return __builtin_altivec_vcmpequq_p(__CR6_EQ, __a, __b);
15819 }
15820
15821 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned __int128 __a,
15822                                               vector unsigned __int128 __b) {
15823   return __builtin_altivec_vcmpequq_p(__CR6_EQ, __a, __b);
15824 }
15825 #endif
15826
15827 /* vec_all_nge */
15828
15829 static __inline__ int __ATTRS_o_ai vec_all_nge(vector float __a,
15830                                                vector float __b) {
15831 #ifdef __VSX__
15832   return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __a, __b);
15833 #else
15834   return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __a, __b);
15835 #endif
15836 }
15837
15838 #ifdef __VSX__
15839 static __inline__ int __ATTRS_o_ai vec_all_nge(vector double __a,
15840                                                vector double __b) {
15841   return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __a, __b);
15842 }
15843 #endif
15844
15845 /* vec_all_ngt */
15846
15847 static __inline__ int __ATTRS_o_ai vec_all_ngt(vector float __a,
15848                                                vector float __b) {
15849 #ifdef __VSX__
15850   return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __a, __b);
15851 #else
15852   return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __a, __b);
15853 #endif
15854 }
15855
15856 #ifdef __VSX__
15857 static __inline__ int __ATTRS_o_ai vec_all_ngt(vector double __a,
15858                                                vector double __b) {
15859   return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __a, __b);
15860 }
15861 #endif
15862
15863 /* vec_all_nle */
15864
15865 static __inline__ int __ATTRS_o_ai
15866 vec_all_nle(vector float __a, vector float __b) {
15867 #ifdef __VSX__
15868   return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __b, __a);
15869 #else
15870   return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __b, __a);
15871 #endif
15872 }
15873
15874 #ifdef __VSX__
15875 static __inline__ int __ATTRS_o_ai vec_all_nle(vector double __a,
15876                                                vector double __b) {
15877   return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __b, __a);
15878 }
15879 #endif
15880
15881 /* vec_all_nlt */
15882
15883 static __inline__ int __ATTRS_o_ai
15884 vec_all_nlt(vector float __a, vector float __b) {
15885 #ifdef __VSX__
15886   return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __b, __a);
15887 #else
15888   return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __b, __a);
15889 #endif
15890 }
15891
15892 #ifdef __VSX__
15893 static __inline__ int __ATTRS_o_ai vec_all_nlt(vector double __a,
15894                                                vector double __b) {
15895   return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __b, __a);
15896 }
15897 #endif
15898
15899 /* vec_all_numeric */
15900
15901 static __inline__ int __ATTRS_o_ai
15902 vec_all_numeric(vector float __a) {
15903 #ifdef __VSX__
15904   return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __a);
15905 #else
15906   return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __a);
15907 #endif
15908 }
15909
15910 #ifdef __VSX__
15911 static __inline__ int __ATTRS_o_ai vec_all_numeric(vector double __a) {
15912   return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __a);
15913 }
15914 #endif
15915
15916 /* vec_any_eq */
15917
15918 static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
15919                                               vector signed char __b) {
15920   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
15921                                       (vector char)__b);
15922 }
15923
15924 static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
15925                                               vector bool char __b) {
15926   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
15927                                       (vector char)__b);
15928 }
15929
15930 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
15931                                               vector unsigned char __b) {
15932   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
15933                                       (vector char)__b);
15934 }
15935
15936 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
15937                                               vector bool char __b) {
15938   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
15939                                       (vector char)__b);
15940 }
15941
15942 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
15943                                               vector signed char __b) {
15944   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
15945                                       (vector char)__b);
15946 }
15947
15948 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
15949                                               vector unsigned char __b) {
15950   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
15951                                       (vector char)__b);
15952 }
15953
15954 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
15955                                               vector bool char __b) {
15956   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
15957                                       (vector char)__b);
15958 }
15959
15960 static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
15961                                               vector short __b) {
15962   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, __b);
15963 }
15964
15965 static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
15966                                               vector bool short __b) {
15967   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, (vector short)__b);
15968 }
15969
15970 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
15971                                               vector unsigned short __b) {
15972   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
15973                                       (vector short)__b);
15974 }
15975
15976 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
15977                                               vector bool short __b) {
15978   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
15979                                       (vector short)__b);
15980 }
15981
15982 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
15983                                               vector short __b) {
15984   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
15985                                       (vector short)__b);
15986 }
15987
15988 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
15989                                               vector unsigned short __b) {
15990   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
15991                                       (vector short)__b);
15992 }
15993
15994 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
15995                                               vector bool short __b) {
15996   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
15997                                       (vector short)__b);
15998 }
15999
16000 static __inline__ int __ATTRS_o_ai vec_any_eq(vector pixel __a,
16001                                               vector pixel __b) {
16002   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
16003                                       (vector short)__b);
16004 }
16005
16006 static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a, vector int __b) {
16007   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, __b);
16008 }
16009
16010 static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a,
16011                                               vector bool int __b) {
16012   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, (vector int)__b);
16013 }
16014
16015 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
16016                                               vector unsigned int __b) {
16017   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16018                                       (vector int)__b);
16019 }
16020
16021 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
16022                                               vector bool int __b) {
16023   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16024                                       (vector int)__b);
16025 }
16026
16027 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
16028                                               vector int __b) {
16029   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16030                                       (vector int)__b);
16031 }
16032
16033 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
16034                                               vector unsigned int __b) {
16035   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16036                                       (vector int)__b);
16037 }
16038
16039 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
16040                                               vector bool int __b) {
16041   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
16042                                       (vector int)__b);
16043 }
16044
16045 #ifdef __VSX__
16046 static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
16047                                               vector signed long long __b) {
16048   return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a, __b);
16049 }
16050
16051 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
16052                                               vector unsigned long long __b) {
16053   return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector long long)__a,
16054                                       (vector long long)__b);
16055 }
16056
16057 static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
16058                                               vector bool long long __b) {
16059   return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a,
16060                                       (vector signed long long)__b);
16061 }
16062
16063 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
16064                                               vector bool long long __b) {
16065   return __builtin_altivec_vcmpequd_p(
16066       __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
16067 }
16068
16069 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
16070                                               vector signed long long __b) {
16071   return __builtin_altivec_vcmpequd_p(
16072       __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
16073 }
16074
16075 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
16076                                               vector unsigned long long __b) {
16077   return __builtin_altivec_vcmpequd_p(
16078       __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
16079 }
16080
16081 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
16082                                               vector bool long long __b) {
16083   return __builtin_altivec_vcmpequd_p(
16084       __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
16085 }
16086 #endif
16087
16088 static __inline__ int __ATTRS_o_ai vec_any_eq(vector float __a,
16089                                               vector float __b) {
16090 #ifdef __VSX__
16091   return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __b);
16092 #else
16093   return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __b);
16094 #endif
16095 }
16096
16097 #ifdef __VSX__
16098 static __inline__ int __ATTRS_o_ai vec_any_eq(vector double __a,
16099                                               vector double __b) {
16100   return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __b);
16101 }
16102 #endif
16103
16104 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16105 static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed __int128 __a,
16106                                               vector signed __int128 __b) {
16107   return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV, __a, __b);
16108 }
16109
16110 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned __int128 __a,
16111                                               vector unsigned __int128 __b) {
16112   return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV, __a, __b);
16113 }
16114 #endif
16115
16116 /* vec_any_ge */
16117
16118 static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
16119                                               vector signed char __b) {
16120   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b, __a);
16121 }
16122
16123 static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
16124                                               vector bool char __b) {
16125   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__b,
16126                                       __a);
16127 }
16128
16129 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
16130                                               vector unsigned char __b) {
16131   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, __a);
16132 }
16133
16134 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
16135                                               vector bool char __b) {
16136   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
16137                                       __a);
16138 }
16139
16140 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
16141                                               vector signed char __b) {
16142   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b,
16143                                       (vector signed char)__a);
16144 }
16145
16146 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
16147                                               vector unsigned char __b) {
16148   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b,
16149                                       (vector unsigned char)__a);
16150 }
16151
16152 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
16153                                               vector bool char __b) {
16154   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
16155                                       (vector unsigned char)__a);
16156 }
16157
16158 static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
16159                                               vector short __b) {
16160   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b, __a);
16161 }
16162
16163 static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
16164                                               vector bool short __b) {
16165   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector short)__b, __a);
16166 }
16167
16168 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
16169                                               vector unsigned short __b) {
16170   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, __a);
16171 }
16172
16173 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
16174                                               vector bool short __b) {
16175   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
16176                                       __a);
16177 }
16178
16179 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
16180                                               vector short __b) {
16181   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b,
16182                                       (vector signed short)__a);
16183 }
16184
16185 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
16186                                               vector unsigned short __b) {
16187   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b,
16188                                       (vector unsigned short)__a);
16189 }
16190
16191 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
16192                                               vector bool short __b) {
16193   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
16194                                       (vector unsigned short)__a);
16195 }
16196
16197 static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a, vector int __b) {
16198   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b, __a);
16199 }
16200
16201 static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a,
16202                                               vector bool int __b) {
16203   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector int)__b, __a);
16204 }
16205
16206 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
16207                                               vector unsigned int __b) {
16208   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, __a);
16209 }
16210
16211 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
16212                                               vector bool int __b) {
16213   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
16214                                       __a);
16215 }
16216
16217 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
16218                                               vector int __b) {
16219   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b,
16220                                       (vector signed int)__a);
16221 }
16222
16223 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
16224                                               vector unsigned int __b) {
16225   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b,
16226                                       (vector unsigned int)__a);
16227 }
16228
16229 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
16230                                               vector bool int __b) {
16231   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
16232                                       (vector unsigned int)__a);
16233 }
16234
16235 #ifdef __VSX__
16236 static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
16237                                               vector signed long long __b) {
16238   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b, __a);
16239 }
16240
16241 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
16242                                               vector unsigned long long __b) {
16243   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b, __a);
16244 }
16245
16246 static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
16247                                               vector bool long long __b) {
16248   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,
16249                                       (vector signed long long)__b, __a);
16250 }
16251
16252 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
16253                                               vector bool long long __b) {
16254   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
16255                                       (vector unsigned long long)__b, __a);
16256 }
16257
16258 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
16259                                               vector signed long long __b) {
16260   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b,
16261                                       (vector signed long long)__a);
16262 }
16263
16264 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
16265                                               vector unsigned long long __b) {
16266   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b,
16267                                       (vector unsigned long long)__a);
16268 }
16269
16270 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
16271                                               vector bool long long __b) {
16272   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
16273                                       (vector unsigned long long)__b,
16274                                       (vector unsigned long long)__a);
16275 }
16276 #endif
16277
16278 static __inline__ int __ATTRS_o_ai vec_any_ge(vector float __a,
16279                                               vector float __b) {
16280 #ifdef __VSX__
16281   return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __a, __b);
16282 #else
16283   return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __a, __b);
16284 #endif
16285 }
16286
16287 #ifdef __VSX__
16288 static __inline__ int __ATTRS_o_ai vec_any_ge(vector double __a,
16289                                               vector double __b) {
16290   return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __a, __b);
16291 }
16292 #endif
16293
16294 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16295 static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed __int128 __a,
16296                                               vector signed __int128 __b) {
16297   return __builtin_altivec_vcmpgtsq_p(__CR6_LT_REV, __b, __a);
16298 }
16299
16300 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned __int128 __a,
16301                                               vector unsigned __int128 __b) {
16302   return __builtin_altivec_vcmpgtuq_p(__CR6_LT_REV, __b, __a);
16303 }
16304 #endif
16305
16306 /* vec_any_gt */
16307
16308 static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
16309                                               vector signed char __b) {
16310   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, __b);
16311 }
16312
16313 static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
16314                                               vector bool char __b) {
16315   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a,
16316                                       (vector signed char)__b);
16317 }
16318
16319 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
16320                                               vector unsigned char __b) {
16321   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, __b);
16322 }
16323
16324 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
16325                                               vector bool char __b) {
16326   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a,
16327                                       (vector unsigned char)__b);
16328 }
16329
16330 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
16331                                               vector signed char __b) {
16332   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__a,
16333                                       __b);
16334 }
16335
16336 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
16337                                               vector unsigned char __b) {
16338   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
16339                                       __b);
16340 }
16341
16342 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
16343                                               vector bool char __b) {
16344   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
16345                                       (vector unsigned char)__b);
16346 }
16347
16348 static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
16349                                               vector short __b) {
16350   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, __b);
16351 }
16352
16353 static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
16354                                               vector bool short __b) {
16355   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, (vector short)__b);
16356 }
16357
16358 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
16359                                               vector unsigned short __b) {
16360   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, __b);
16361 }
16362
16363 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
16364                                               vector bool short __b) {
16365   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a,
16366                                       (vector unsigned short)__b);
16367 }
16368
16369 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
16370                                               vector short __b) {
16371   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector signed short)__a,
16372                                       __b);
16373 }
16374
16375 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
16376                                               vector unsigned short __b) {
16377   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
16378                                       __b);
16379 }
16380
16381 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
16382                                               vector bool short __b) {
16383   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
16384                                       (vector unsigned short)__b);
16385 }
16386
16387 static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a, vector int __b) {
16388   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, __b);
16389 }
16390
16391 static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a,
16392                                               vector bool int __b) {
16393   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, (vector int)__b);
16394 }
16395
16396 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
16397                                               vector unsigned int __b) {
16398   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, __b);
16399 }
16400
16401 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
16402                                               vector bool int __b) {
16403   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a,
16404                                       (vector unsigned int)__b);
16405 }
16406
16407 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
16408                                               vector int __b) {
16409   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector signed int)__a,
16410                                       __b);
16411 }
16412
16413 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
16414                                               vector unsigned int __b) {
16415   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
16416                                       __b);
16417 }
16418
16419 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
16420                                               vector bool int __b) {
16421   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
16422                                       (vector unsigned int)__b);
16423 }
16424
16425 #ifdef __VSX__
16426 static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
16427                                               vector signed long long __b) {
16428   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a, __b);
16429 }
16430
16431 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
16432                                               vector unsigned long long __b) {
16433   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a, __b);
16434 }
16435
16436 static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
16437                                               vector bool long long __b) {
16438   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a,
16439                                       (vector signed long long)__b);
16440 }
16441
16442 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
16443                                               vector bool long long __b) {
16444   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a,
16445                                       (vector unsigned long long)__b);
16446 }
16447
16448 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
16449                                               vector signed long long __b) {
16450   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,
16451                                       (vector signed long long)__a, __b);
16452 }
16453
16454 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
16455                                               vector unsigned long long __b) {
16456   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
16457                                       (vector unsigned long long)__a, __b);
16458 }
16459
16460 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
16461                                               vector bool long long __b) {
16462   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
16463                                       (vector unsigned long long)__a,
16464                                       (vector unsigned long long)__b);
16465 }
16466 #endif
16467
16468 static __inline__ int __ATTRS_o_ai vec_any_gt(vector float __a,
16469                                               vector float __b) {
16470 #ifdef __VSX__
16471   return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __a, __b);
16472 #else
16473   return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __a, __b);
16474 #endif
16475 }
16476
16477 #ifdef __VSX__
16478 static __inline__ int __ATTRS_o_ai vec_any_gt(vector double __a,
16479                                               vector double __b) {
16480   return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __a, __b);
16481 }
16482 #endif
16483
16484 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16485 static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed __int128 __a,
16486                                               vector signed __int128 __b) {
16487   return __builtin_altivec_vcmpgtsq_p(__CR6_EQ_REV, __a, __b);
16488 }
16489
16490 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned __int128 __a,
16491                                               vector unsigned __int128 __b) {
16492   return __builtin_altivec_vcmpgtuq_p(__CR6_EQ_REV, __a, __b);
16493 }
16494 #endif
16495
16496 /* vec_any_le */
16497
16498 static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
16499                                               vector signed char __b) {
16500   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, __b);
16501 }
16502
16503 static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
16504                                               vector bool char __b) {
16505   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a,
16506                                       (vector signed char)__b);
16507 }
16508
16509 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
16510                                               vector unsigned char __b) {
16511   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, __b);
16512 }
16513
16514 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
16515                                               vector bool char __b) {
16516   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a,
16517                                       (vector unsigned char)__b);
16518 }
16519
16520 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
16521                                               vector signed char __b) {
16522   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__a,
16523                                       __b);
16524 }
16525
16526 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
16527                                               vector unsigned char __b) {
16528   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
16529                                       __b);
16530 }
16531
16532 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
16533                                               vector bool char __b) {
16534   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
16535                                       (vector unsigned char)__b);
16536 }
16537
16538 static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
16539                                               vector short __b) {
16540   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, __b);
16541 }
16542
16543 static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
16544                                               vector bool short __b) {
16545   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, (vector short)__b);
16546 }
16547
16548 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
16549                                               vector unsigned short __b) {
16550   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, __b);
16551 }
16552
16553 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
16554                                               vector bool short __b) {
16555   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a,
16556                                       (vector unsigned short)__b);
16557 }
16558
16559 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
16560                                               vector short __b) {
16561   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector signed short)__a,
16562                                       __b);
16563 }
16564
16565 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
16566                                               vector unsigned short __b) {
16567   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
16568                                       __b);
16569 }
16570
16571 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
16572                                               vector bool short __b) {
16573   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
16574                                       (vector unsigned short)__b);
16575 }
16576
16577 static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a, vector int __b) {
16578   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, __b);
16579 }
16580
16581 static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a,
16582                                               vector bool int __b) {
16583   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, (vector int)__b);
16584 }
16585
16586 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
16587                                               vector unsigned int __b) {
16588   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, __b);
16589 }
16590
16591 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
16592                                               vector bool int __b) {
16593   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a,
16594                                       (vector unsigned int)__b);
16595 }
16596
16597 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
16598                                               vector int __b) {
16599   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector signed int)__a,
16600                                       __b);
16601 }
16602
16603 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
16604                                               vector unsigned int __b) {
16605   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
16606                                       __b);
16607 }
16608
16609 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
16610                                               vector bool int __b) {
16611   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
16612                                       (vector unsigned int)__b);
16613 }
16614
16615 #ifdef __VSX__
16616 static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
16617                                               vector signed long long __b) {
16618   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a, __b);
16619 }
16620
16621 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
16622                                               vector unsigned long long __b) {
16623   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a, __b);
16624 }
16625
16626 static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
16627                                               vector bool long long __b) {
16628   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a,
16629                                       (vector signed long long)__b);
16630 }
16631
16632 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
16633                                               vector bool long long __b) {
16634   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a,
16635                                       (vector unsigned long long)__b);
16636 }
16637
16638 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
16639                                               vector signed long long __b) {
16640   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,
16641                                       (vector signed long long)__a, __b);
16642 }
16643
16644 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
16645                                               vector unsigned long long __b) {
16646   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
16647                                       (vector unsigned long long)__a, __b);
16648 }
16649
16650 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
16651                                               vector bool long long __b) {
16652   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
16653                                       (vector unsigned long long)__a,
16654                                       (vector unsigned long long)__b);
16655 }
16656 #endif
16657
16658 static __inline__ int __ATTRS_o_ai vec_any_le(vector float __a,
16659                                               vector float __b) {
16660 #ifdef __VSX__
16661   return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __b, __a);
16662 #else
16663   return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __b, __a);
16664 #endif
16665 }
16666
16667 #ifdef __VSX__
16668 static __inline__ int __ATTRS_o_ai vec_any_le(vector double __a,
16669                                               vector double __b) {
16670   return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __b, __a);
16671 }
16672 #endif
16673
16674 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16675 static __inline__ int __ATTRS_o_ai vec_any_le(vector signed __int128 __a,
16676                                               vector signed __int128 __b) {
16677   return __builtin_altivec_vcmpgtsq_p(__CR6_LT_REV, __a, __b);
16678 }
16679
16680 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned __int128 __a,
16681                                               vector unsigned __int128 __b) {
16682   return __builtin_altivec_vcmpgtuq_p(__CR6_LT_REV, __a, __b);
16683 }
16684 #endif
16685
16686 /* vec_any_lt */
16687
16688 static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
16689                                               vector signed char __b) {
16690   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b, __a);
16691 }
16692
16693 static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
16694                                               vector bool char __b) {
16695   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__b,
16696                                       __a);
16697 }
16698
16699 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
16700                                               vector unsigned char __b) {
16701   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, __a);
16702 }
16703
16704 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
16705                                               vector bool char __b) {
16706   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
16707                                       __a);
16708 }
16709
16710 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
16711                                               vector signed char __b) {
16712   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b,
16713                                       (vector signed char)__a);
16714 }
16715
16716 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
16717                                               vector unsigned char __b) {
16718   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b,
16719                                       (vector unsigned char)__a);
16720 }
16721
16722 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
16723                                               vector bool char __b) {
16724   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
16725                                       (vector unsigned char)__a);
16726 }
16727
16728 static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
16729                                               vector short __b) {
16730   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b, __a);
16731 }
16732
16733 static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
16734                                               vector bool short __b) {
16735   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector short)__b, __a);
16736 }
16737
16738 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
16739                                               vector unsigned short __b) {
16740   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, __a);
16741 }
16742
16743 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
16744                                               vector bool short __b) {
16745   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
16746                                       __a);
16747 }
16748
16749 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
16750                                               vector short __b) {
16751   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b,
16752                                       (vector signed short)__a);
16753 }
16754
16755 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
16756                                               vector unsigned short __b) {
16757   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b,
16758                                       (vector unsigned short)__a);
16759 }
16760
16761 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
16762                                               vector bool short __b) {
16763   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
16764                                       (vector unsigned short)__a);
16765 }
16766
16767 static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a, vector int __b) {
16768   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b, __a);
16769 }
16770
16771 static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a,
16772                                               vector bool int __b) {
16773   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector int)__b, __a);
16774 }
16775
16776 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
16777                                               vector unsigned int __b) {
16778   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, __a);
16779 }
16780
16781 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
16782                                               vector bool int __b) {
16783   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
16784                                       __a);
16785 }
16786
16787 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
16788                                               vector int __b) {
16789   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b,
16790                                       (vector signed int)__a);
16791 }
16792
16793 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
16794                                               vector unsigned int __b) {
16795   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b,
16796                                       (vector unsigned int)__a);
16797 }
16798
16799 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
16800                                               vector bool int __b) {
16801   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
16802                                       (vector unsigned int)__a);
16803 }
16804
16805 #ifdef __VSX__
16806 static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
16807                                               vector signed long long __b) {
16808   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b, __a);
16809 }
16810
16811 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
16812                                               vector unsigned long long __b) {
16813   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b, __a);
16814 }
16815
16816 static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
16817                                               vector bool long long __b) {
16818   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,
16819                                       (vector signed long long)__b, __a);
16820 }
16821
16822 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
16823                                               vector bool long long __b) {
16824   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
16825                                       (vector unsigned long long)__b, __a);
16826 }
16827
16828 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
16829                                               vector signed long long __b) {
16830   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b,
16831                                       (vector signed long long)__a);
16832 }
16833
16834 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
16835                                               vector unsigned long long __b) {
16836   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b,
16837                                       (vector unsigned long long)__a);
16838 }
16839
16840 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
16841                                               vector bool long long __b) {
16842   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
16843                                       (vector unsigned long long)__b,
16844                                       (vector unsigned long long)__a);
16845 }
16846 #endif
16847
16848 static __inline__ int __ATTRS_o_ai vec_any_lt(vector float __a,
16849                                               vector float __b) {
16850 #ifdef __VSX__
16851   return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __b, __a);
16852 #else
16853   return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __b, __a);
16854 #endif
16855 }
16856
16857 #ifdef __VSX__
16858 static __inline__ int __ATTRS_o_ai vec_any_lt(vector double __a,
16859                                               vector double __b) {
16860   return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __b, __a);
16861 }
16862 #endif
16863
16864 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
16865 static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed __int128 __a,
16866                                               vector signed __int128 __b) {
16867   return __builtin_altivec_vcmpgtsq_p(__CR6_EQ_REV, __b, __a);
16868 }
16869
16870 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned __int128 __a,
16871                                               vector unsigned __int128 __b) {
16872   return __builtin_altivec_vcmpgtuq_p(__CR6_EQ_REV, __b, __a);
16873 }
16874 #endif
16875
16876 /* vec_any_nan */
16877
16878 static __inline__ int __ATTRS_o_ai vec_any_nan(vector float __a) {
16879 #ifdef __VSX__
16880   return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __a);
16881 #else
16882   return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __a);
16883 #endif
16884 }
16885 #ifdef __VSX__
16886 static __inline__ int __ATTRS_o_ai vec_any_nan(vector double __a) {
16887   return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __a);
16888 }
16889 #endif
16890
16891 /* vec_any_ne */
16892
16893 static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
16894                                               vector signed char __b) {
16895   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
16896                                       (vector char)__b);
16897 }
16898
16899 static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
16900                                               vector bool char __b) {
16901   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
16902                                       (vector char)__b);
16903 }
16904
16905 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
16906                                               vector unsigned char __b) {
16907   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
16908                                       (vector char)__b);
16909 }
16910
16911 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
16912                                               vector bool char __b) {
16913   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
16914                                       (vector char)__b);
16915 }
16916
16917 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
16918                                               vector signed char __b) {
16919   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
16920                                       (vector char)__b);
16921 }
16922
16923 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
16924                                               vector unsigned char __b) {
16925   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
16926                                       (vector char)__b);
16927 }
16928
16929 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
16930                                               vector bool char __b) {
16931   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
16932                                       (vector char)__b);
16933 }
16934
16935 static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
16936                                               vector short __b) {
16937   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, __b);
16938 }
16939
16940 static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
16941                                               vector bool short __b) {
16942   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, (vector short)__b);
16943 }
16944
16945 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
16946                                               vector unsigned short __b) {
16947   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
16948                                       (vector short)__b);
16949 }
16950
16951 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
16952                                               vector bool short __b) {
16953   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
16954                                       (vector short)__b);
16955 }
16956
16957 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
16958                                               vector short __b) {
16959   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
16960                                       (vector short)__b);
16961 }
16962
16963 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
16964                                               vector unsigned short __b) {
16965   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
16966                                       (vector short)__b);
16967 }
16968
16969 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
16970                                               vector bool short __b) {
16971   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
16972                                       (vector short)__b);
16973 }
16974
16975 static __inline__ int __ATTRS_o_ai vec_any_ne(vector pixel __a,
16976                                               vector pixel __b) {
16977   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
16978                                       (vector short)__b);
16979 }
16980
16981 static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a, vector int __b) {
16982   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, __b);
16983 }
16984
16985 static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a,
16986                                               vector bool int __b) {
16987   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, (vector int)__b);
16988 }
16989
16990 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
16991                                               vector unsigned int __b) {
16992   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
16993                                       (vector int)__b);
16994 }
16995
16996 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
16997                                               vector bool int __b) {
16998   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
16999                                       (vector int)__b);
17000 }
17001
17002 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
17003                                               vector int __b) {
17004   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
17005                                       (vector int)__b);
17006 }
17007
17008 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
17009                                               vector unsigned int __b) {
17010   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
17011                                       (vector int)__b);
17012 }
17013
17014 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
17015                                               vector bool int __b) {
17016   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
17017                                       (vector int)__b);
17018 }
17019
17020 #ifdef __VSX__
17021 static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
17022                                               vector signed long long __b) {
17023   return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a, __b);
17024 }
17025
17026 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
17027                                               vector unsigned long long __b) {
17028   return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, (vector long long)__a,
17029                                       (vector long long)__b);
17030 }
17031
17032 static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
17033                                               vector bool long long __b) {
17034   return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a,
17035                                       (vector signed long long)__b);
17036 }
17037
17038 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
17039                                               vector bool long long __b) {
17040   return __builtin_altivec_vcmpequd_p(
17041       __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b);
17042 }
17043
17044 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
17045                                               vector signed long long __b) {
17046   return __builtin_altivec_vcmpequd_p(
17047       __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b);
17048 }
17049
17050 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
17051                                               vector unsigned long long __b) {
17052   return __builtin_altivec_vcmpequd_p(
17053       __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b);
17054 }
17055
17056 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
17057                                               vector bool long long __b) {
17058   return __builtin_altivec_vcmpequd_p(
17059       __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b);
17060 }
17061 #endif
17062
17063 static __inline__ int __ATTRS_o_ai vec_any_ne(vector float __a,
17064                                               vector float __b) {
17065 #ifdef __VSX__
17066   return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __b);
17067 #else
17068   return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __b);
17069 #endif
17070 }
17071
17072 #ifdef __VSX__
17073 static __inline__ int __ATTRS_o_ai vec_any_ne(vector double __a,
17074                                               vector double __b) {
17075   return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __b);
17076 }
17077 #endif
17078
17079 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
17080 static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed __int128 __a,
17081                                               vector signed __int128 __b) {
17082   return __builtin_altivec_vcmpequq_p(__CR6_LT_REV, __a, __b);
17083 }
17084
17085 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned __int128 __a,
17086                                               vector unsigned __int128 __b) {
17087   return __builtin_altivec_vcmpequq_p(__CR6_LT_REV, __a, __b);
17088 }
17089 #endif
17090
17091 /* vec_any_nge */
17092
17093 static __inline__ int __ATTRS_o_ai vec_any_nge(vector float __a,
17094                                                vector float __b) {
17095 #ifdef __VSX__
17096   return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __a, __b);
17097 #else
17098   return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __a, __b);
17099 #endif
17100 }
17101
17102 #ifdef __VSX__
17103 static __inline__ int __ATTRS_o_ai vec_any_nge(vector double __a,
17104                                                vector double __b) {
17105   return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __a, __b);
17106 }
17107 #endif
17108
17109 /* vec_any_ngt */
17110
17111 static __inline__ int __ATTRS_o_ai vec_any_ngt(vector float __a,
17112                                                vector float __b) {
17113 #ifdef __VSX__
17114   return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __a, __b);
17115 #else
17116   return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __a, __b);
17117 #endif
17118 }
17119
17120 #ifdef __VSX__
17121 static __inline__ int __ATTRS_o_ai vec_any_ngt(vector double __a,
17122                                                vector double __b) {
17123   return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __a, __b);
17124 }
17125 #endif
17126
17127 /* vec_any_nle */
17128
17129 static __inline__ int __ATTRS_o_ai vec_any_nle(vector float __a,
17130                                                vector float __b) {
17131 #ifdef __VSX__
17132   return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __b, __a);
17133 #else
17134   return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __b, __a);
17135 #endif
17136 }
17137
17138 #ifdef __VSX__
17139 static __inline__ int __ATTRS_o_ai vec_any_nle(vector double __a,
17140                                                vector double __b) {
17141   return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __b, __a);
17142 }
17143 #endif
17144
17145 /* vec_any_nlt */
17146
17147 static __inline__ int __ATTRS_o_ai vec_any_nlt(vector float __a,
17148                                                vector float __b) {
17149 #ifdef __VSX__
17150   return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __b, __a);
17151 #else
17152   return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __b, __a);
17153 #endif
17154 }
17155
17156 #ifdef __VSX__
17157 static __inline__ int __ATTRS_o_ai vec_any_nlt(vector double __a,
17158                                                vector double __b) {
17159   return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __b, __a);
17160 }
17161 #endif
17162
17163 /* vec_any_numeric */
17164
17165 static __inline__ int __ATTRS_o_ai vec_any_numeric(vector float __a) {
17166 #ifdef __VSX__
17167   return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __a);
17168 #else
17169   return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __a);
17170 #endif
17171 }
17172
17173 #ifdef __VSX__
17174 static __inline__ int __ATTRS_o_ai vec_any_numeric(vector double __a) {
17175   return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __a);
17176 }
17177 #endif
17178
17179 /* vec_any_out */
17180
17181 static __inline__ int __attribute__((__always_inline__))
17182 vec_any_out(vector float __a, vector float __b) {
17183   return __builtin_altivec_vcmpbfp_p(__CR6_EQ_REV, __a, __b);
17184 }
17185
17186 /* Power 8 Crypto functions
17187 Note: We diverge from the current GCC implementation with regard
17188 to cryptography and related functions as follows:
17189 - Only the SHA and AES instructions and builtins are disabled by -mno-crypto
17190 - The remaining ones are only available on Power8 and up so
17191   require -mpower8-vector
17192 The justification for this is that export requirements require that
17193 Category:Vector.Crypto is optional (i.e. compliant hardware may not provide
17194 support). As a result, we need to be able to turn off support for those.
17195 The remaining ones (currently controlled by -mcrypto for GCC) still
17196 need to be provided on compliant hardware even if Vector.Crypto is not
17197 provided.
17198 */
17199 #ifdef __CRYPTO__
17200 #define vec_sbox_be __builtin_altivec_crypto_vsbox
17201 #define vec_cipher_be __builtin_altivec_crypto_vcipher
17202 #define vec_cipherlast_be __builtin_altivec_crypto_vcipherlast
17203 #define vec_ncipher_be __builtin_altivec_crypto_vncipher
17204 #define vec_ncipherlast_be __builtin_altivec_crypto_vncipherlast
17205
17206 static __inline__ vector unsigned long long __attribute__((__always_inline__))
17207 __builtin_crypto_vsbox(vector unsigned long long __a) {
17208   return __builtin_altivec_crypto_vsbox(__a);
17209 }
17210
17211 static __inline__ vector unsigned long long __attribute__((__always_inline__))
17212 __builtin_crypto_vcipher(vector unsigned long long __a,
17213                          vector unsigned long long __b) {
17214   return __builtin_altivec_crypto_vcipher(__a, __b);
17215 }
17216
17217 static __inline__ vector unsigned long long __attribute__((__always_inline__))
17218 __builtin_crypto_vcipherlast(vector unsigned long long __a,
17219                              vector unsigned long long __b) {
17220   return __builtin_altivec_crypto_vcipherlast(__a, __b);
17221 }
17222
17223 static __inline__ vector unsigned long long __attribute__((__always_inline__))
17224 __builtin_crypto_vncipher(vector unsigned long long __a,
17225                           vector unsigned long long __b) {
17226   return __builtin_altivec_crypto_vncipher(__a, __b);
17227 }
17228
17229 static __inline__ vector unsigned long long __attribute__((__always_inline__))
17230 __builtin_crypto_vncipherlast(vector unsigned long long __a,
17231                               vector unsigned long long __b) {
17232   return __builtin_altivec_crypto_vncipherlast(__a, __b);
17233 }
17234
17235 #define __builtin_crypto_vshasigmad __builtin_altivec_crypto_vshasigmad
17236 #define __builtin_crypto_vshasigmaw __builtin_altivec_crypto_vshasigmaw
17237
17238 #define vec_shasigma_be(X, Y, Z)                                               \
17239   _Generic((X), vector unsigned int                                            \
17240            : __builtin_crypto_vshasigmaw, vector unsigned long long            \
17241            : __builtin_crypto_vshasigmad)((X), (Y), (Z))
17242 #endif
17243
17244 #ifdef __POWER8_VECTOR__
17245 static __inline__ vector bool char __ATTRS_o_ai
17246 vec_permxor(vector bool char __a, vector bool char __b,
17247             vector bool char __c) {
17248   return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
17249 }
17250
17251 static __inline__ vector signed char __ATTRS_o_ai
17252 vec_permxor(vector signed char __a, vector signed char __b,
17253             vector signed char __c) {
17254   return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
17255 }
17256
17257 static __inline__ vector unsigned char __ATTRS_o_ai
17258 vec_permxor(vector unsigned char __a, vector unsigned char __b,
17259             vector unsigned char __c) {
17260   return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
17261 }
17262
17263 static __inline__ vector unsigned char __ATTRS_o_ai
17264 __builtin_crypto_vpermxor(vector unsigned char __a, vector unsigned char __b,
17265                           vector unsigned char __c) {
17266   return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
17267 }
17268
17269 static __inline__ vector unsigned short __ATTRS_o_ai
17270 __builtin_crypto_vpermxor(vector unsigned short __a, vector unsigned short __b,
17271                           vector unsigned short __c) {
17272   return (vector unsigned short)__builtin_altivec_crypto_vpermxor(
17273       (vector unsigned char)__a, (vector unsigned char)__b,
17274       (vector unsigned char)__c);
17275 }
17276
17277 static __inline__ vector unsigned int __ATTRS_o_ai __builtin_crypto_vpermxor(
17278     vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
17279   return (vector unsigned int)__builtin_altivec_crypto_vpermxor(
17280       (vector unsigned char)__a, (vector unsigned char)__b,
17281       (vector unsigned char)__c);
17282 }
17283
17284 static __inline__ vector unsigned long long __ATTRS_o_ai
17285 __builtin_crypto_vpermxor(vector unsigned long long __a,
17286                           vector unsigned long long __b,
17287                           vector unsigned long long __c) {
17288   return (vector unsigned long long)__builtin_altivec_crypto_vpermxor(
17289       (vector unsigned char)__a, (vector unsigned char)__b,
17290       (vector unsigned char)__c);
17291 }
17292
17293 static __inline__ vector unsigned char __ATTRS_o_ai
17294 __builtin_crypto_vpmsumb(vector unsigned char __a, vector unsigned char __b) {
17295   return __builtin_altivec_crypto_vpmsumb(__a, __b);
17296 }
17297
17298 static __inline__ vector unsigned short __ATTRS_o_ai
17299 __builtin_crypto_vpmsumb(vector unsigned short __a, vector unsigned short __b) {
17300   return __builtin_altivec_crypto_vpmsumh(__a, __b);
17301 }
17302
17303 static __inline__ vector unsigned int __ATTRS_o_ai
17304 __builtin_crypto_vpmsumb(vector unsigned int __a, vector unsigned int __b) {
17305   return __builtin_altivec_crypto_vpmsumw(__a, __b);
17306 }
17307
17308 static __inline__ vector unsigned long long __ATTRS_o_ai
17309 __builtin_crypto_vpmsumb(vector unsigned long long __a,
17310                          vector unsigned long long __b) {
17311   return __builtin_altivec_crypto_vpmsumd(__a, __b);
17312 }
17313
17314 static __inline__ vector signed char __ATTRS_o_ai
17315 vec_vgbbd(vector signed char __a) {
17316   return __builtin_altivec_vgbbd((vector unsigned char)__a);
17317 }
17318
17319 #define vec_pmsum_be __builtin_crypto_vpmsumb
17320 #define vec_gb __builtin_altivec_vgbbd
17321
17322 static __inline__ vector unsigned char __ATTRS_o_ai
17323 vec_vgbbd(vector unsigned char __a) {
17324   return __builtin_altivec_vgbbd(__a);
17325 }
17326
17327 static __inline__ vector signed long long __ATTRS_o_ai
17328 vec_gbb(vector signed long long __a) {
17329   return __builtin_altivec_vgbbd((vector unsigned char)__a);
17330 }
17331
17332 static __inline__ vector unsigned long long __ATTRS_o_ai
17333 vec_gbb(vector unsigned long long __a) {
17334   return __builtin_altivec_vgbbd((vector unsigned char)__a);
17335 }
17336
17337 static __inline__ vector long long __ATTRS_o_ai
17338 vec_vbpermq(vector signed char __a, vector signed char __b) {
17339   return __builtin_altivec_vbpermq((vector unsigned char)__a,
17340                                    (vector unsigned char)__b);
17341 }
17342
17343 static __inline__ vector long long __ATTRS_o_ai
17344 vec_vbpermq(vector unsigned char __a, vector unsigned char __b) {
17345   return __builtin_altivec_vbpermq(__a, __b);
17346 }
17347
17348 #if defined(__powerpc64__) && defined(__SIZEOF_INT128__)
17349 static __inline__ vector unsigned long long __attribute__((__always_inline__))
17350 vec_bperm(vector unsigned __int128 __a, vector unsigned char __b) {
17351   return __builtin_altivec_vbpermq((vector unsigned char)__a,
17352                                    (vector unsigned char)__b);
17353 }
17354 #endif
17355 #endif
17356
17357
17358 /* vec_reve */
17359
17360 static inline __ATTRS_o_ai vector bool char vec_reve(vector bool char __a) {
17361   return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
17362                                  5, 4, 3, 2, 1, 0);
17363 }
17364
17365 static inline __ATTRS_o_ai vector signed char vec_reve(vector signed char __a) {
17366   return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
17367                                  5, 4, 3, 2, 1, 0);
17368 }
17369
17370 static inline __ATTRS_o_ai vector unsigned char
17371 vec_reve(vector unsigned char __a) {
17372   return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
17373                                  5, 4, 3, 2, 1, 0);
17374 }
17375
17376 static inline __ATTRS_o_ai vector bool int vec_reve(vector bool int __a) {
17377   return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
17378 }
17379
17380 static inline __ATTRS_o_ai vector signed int vec_reve(vector signed int __a) {
17381   return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
17382 }
17383
17384 static inline __ATTRS_o_ai vector unsigned int
17385 vec_reve(vector unsigned int __a) {
17386   return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
17387 }
17388
17389 static inline __ATTRS_o_ai vector bool short vec_reve(vector bool short __a) {
17390   return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
17391 }
17392
17393 static inline __ATTRS_o_ai vector signed short
17394 vec_reve(vector signed short __a) {
17395   return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
17396 }
17397
17398 static inline __ATTRS_o_ai vector unsigned short
17399 vec_reve(vector unsigned short __a) {
17400   return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
17401 }
17402
17403 static inline __ATTRS_o_ai vector float vec_reve(vector float __a) {
17404   return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
17405 }
17406
17407 #ifdef __VSX__
17408 static inline __ATTRS_o_ai vector bool long long
17409 vec_reve(vector bool long long __a) {
17410   return __builtin_shufflevector(__a, __a, 1, 0);
17411 }
17412
17413 static inline __ATTRS_o_ai vector signed long long
17414 vec_reve(vector signed long long __a) {
17415   return __builtin_shufflevector(__a, __a, 1, 0);
17416 }
17417
17418 static inline __ATTRS_o_ai vector unsigned long long
17419 vec_reve(vector unsigned long long __a) {
17420   return __builtin_shufflevector(__a, __a, 1, 0);
17421 }
17422
17423 static inline __ATTRS_o_ai vector double vec_reve(vector double __a) {
17424   return __builtin_shufflevector(__a, __a, 1, 0);
17425 }
17426 #endif
17427
17428 /* vec_revb */
17429 static __inline__ vector bool char __ATTRS_o_ai
17430 vec_revb(vector bool char __a) {
17431   return __a;
17432 }
17433
17434 static __inline__ vector signed char __ATTRS_o_ai
17435 vec_revb(vector signed char __a) {
17436   return __a;
17437 }
17438
17439 static __inline__ vector unsigned char __ATTRS_o_ai
17440 vec_revb(vector unsigned char __a) {
17441   return __a;
17442 }
17443
17444 static __inline__ vector bool short __ATTRS_o_ai
17445 vec_revb(vector bool short __a) {
17446   vector unsigned char __indices =
17447       { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
17448   return vec_perm(__a, __a, __indices);
17449 }
17450
17451 static __inline__ vector signed short __ATTRS_o_ai
17452 vec_revb(vector signed short __a) {
17453   vector unsigned char __indices =
17454       { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
17455   return vec_perm(__a, __a, __indices);
17456 }
17457
17458 static __inline__ vector unsigned short __ATTRS_o_ai
17459 vec_revb(vector unsigned short __a) {
17460   vector unsigned char __indices =
17461      { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
17462   return vec_perm(__a, __a, __indices);
17463 }
17464
17465 static __inline__ vector bool int __ATTRS_o_ai
17466 vec_revb(vector bool int __a) {
17467   vector unsigned char __indices =
17468       { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
17469   return vec_perm(__a, __a, __indices);
17470 }
17471
17472 static __inline__ vector signed int __ATTRS_o_ai
17473 vec_revb(vector signed int __a) {
17474   vector unsigned char __indices =
17475       { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
17476   return vec_perm(__a, __a, __indices);
17477 }
17478
17479 static __inline__ vector unsigned int __ATTRS_o_ai
17480 vec_revb(vector unsigned int __a) {
17481   vector unsigned char __indices =
17482       { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
17483   return vec_perm(__a, __a, __indices);
17484 }
17485
17486 static __inline__ vector float __ATTRS_o_ai
17487 vec_revb(vector float __a) {
17488  vector unsigned char __indices =
17489       { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
17490  return vec_perm(__a, __a, __indices);
17491 }
17492
17493 #ifdef __VSX__
17494 static __inline__ vector bool long long __ATTRS_o_ai
17495 vec_revb(vector bool long long __a) {
17496   vector unsigned char __indices =
17497       { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
17498   return vec_perm(__a, __a, __indices);
17499 }
17500
17501 static __inline__ vector signed long long __ATTRS_o_ai
17502 vec_revb(vector signed long long __a) {
17503   vector unsigned char __indices =
17504       { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
17505   return vec_perm(__a, __a, __indices);
17506 }
17507
17508 static __inline__ vector unsigned long long __ATTRS_o_ai
17509 vec_revb(vector unsigned long long __a) {
17510   vector unsigned char __indices =
17511       { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
17512   return vec_perm(__a, __a, __indices);
17513 }
17514
17515 static __inline__ vector double __ATTRS_o_ai
17516 vec_revb(vector double __a) {
17517   vector unsigned char __indices =
17518       { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
17519   return vec_perm(__a, __a, __indices);
17520 }
17521 #endif /* End __VSX__ */
17522
17523 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
17524     defined(__SIZEOF_INT128__)
17525 static __inline__ vector signed __int128 __ATTRS_o_ai
17526 vec_revb(vector signed __int128 __a) {
17527   vector unsigned char __indices =
17528       { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
17529   return (vector signed __int128)vec_perm((vector signed int)__a,
17530                                           (vector signed int)__a,
17531                                            __indices);
17532 }
17533
17534 static __inline__ vector unsigned __int128 __ATTRS_o_ai
17535 vec_revb(vector unsigned __int128 __a) {
17536   vector unsigned char __indices =
17537       { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
17538   return (vector unsigned __int128)vec_perm((vector signed int)__a,
17539                                             (vector signed int)__a,
17540                                              __indices);
17541 }
17542 #endif /* END __POWER8_VECTOR__ && __powerpc64__ */
17543
17544 /* vec_xl */
17545
17546 #define vec_xld2 vec_xl
17547 #define vec_xlw4 vec_xl
17548 typedef vector signed char unaligned_vec_schar __attribute__((aligned(1)));
17549 typedef vector unsigned char unaligned_vec_uchar __attribute__((aligned(1)));
17550 typedef vector signed short unaligned_vec_sshort __attribute__((aligned(1)));
17551 typedef vector unsigned short unaligned_vec_ushort __attribute__((aligned(1)));
17552 typedef vector signed int unaligned_vec_sint __attribute__((aligned(1)));
17553 typedef vector unsigned int unaligned_vec_uint __attribute__((aligned(1)));
17554 typedef vector float unaligned_vec_float __attribute__((aligned(1)));
17555
17556 static inline __ATTRS_o_ai vector signed char vec_xl(ptrdiff_t __offset,
17557                                                      const signed char *__ptr) {
17558   return *(unaligned_vec_schar *)(__ptr + __offset);
17559 }
17560
17561 static inline __ATTRS_o_ai vector unsigned char
17562 vec_xl(ptrdiff_t __offset, const unsigned char *__ptr) {
17563   return *(unaligned_vec_uchar*)(__ptr + __offset);
17564 }
17565
17566 static inline __ATTRS_o_ai vector signed short
17567 vec_xl(ptrdiff_t __offset, const signed short *__ptr) {
17568   signed char *__addr = (signed char *)__ptr + __offset;
17569   return *(unaligned_vec_sshort *)__addr;
17570 }
17571
17572 static inline __ATTRS_o_ai vector unsigned short
17573 vec_xl(ptrdiff_t __offset, const unsigned short *__ptr) {
17574   signed char *__addr = (signed char *)__ptr + __offset;
17575   return *(unaligned_vec_ushort *)__addr;
17576 }
17577
17578 static inline __ATTRS_o_ai vector signed int vec_xl(ptrdiff_t __offset,
17579                                                     const signed int *__ptr) {
17580   signed char *__addr = (signed char *)__ptr + __offset;
17581   return *(unaligned_vec_sint *)__addr;
17582 }
17583
17584 static inline __ATTRS_o_ai vector unsigned int
17585 vec_xl(ptrdiff_t __offset, const unsigned int *__ptr) {
17586   signed char *__addr = (signed char *)__ptr + __offset;
17587   return *(unaligned_vec_uint *)__addr;
17588 }
17589
17590 static inline __ATTRS_o_ai vector float vec_xl(ptrdiff_t __offset,
17591                                                const float *__ptr) {
17592   signed char *__addr = (signed char *)__ptr + __offset;
17593   return *(unaligned_vec_float *)__addr;
17594 }
17595
17596 #ifdef __VSX__
17597 typedef vector signed long long unaligned_vec_sll __attribute__((aligned(1)));
17598 typedef vector unsigned long long unaligned_vec_ull __attribute__((aligned(1)));
17599 typedef vector double unaligned_vec_double __attribute__((aligned(1)));
17600
17601 static inline __ATTRS_o_ai vector signed long long
17602 vec_xl(ptrdiff_t __offset, const signed long long *__ptr) {
17603   signed char *__addr = (signed char *)__ptr + __offset;
17604   return *(unaligned_vec_sll *)__addr;
17605 }
17606
17607 static inline __ATTRS_o_ai vector unsigned long long
17608 vec_xl(ptrdiff_t __offset, const unsigned long long *__ptr) {
17609   signed char *__addr = (signed char *)__ptr + __offset;
17610   return *(unaligned_vec_ull *)__addr;
17611 }
17612
17613 static inline __ATTRS_o_ai vector double vec_xl(ptrdiff_t __offset,
17614                                                 const double *__ptr) {
17615   signed char *__addr = (signed char *)__ptr + __offset;
17616   return *(unaligned_vec_double *)__addr;
17617 }
17618 #endif
17619
17620 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
17621     defined(__SIZEOF_INT128__)
17622 typedef vector signed __int128 unaligned_vec_si128 __attribute__((aligned(1)));
17623 typedef vector unsigned __int128 unaligned_vec_ui128
17624     __attribute__((aligned(1)));
17625 static inline __ATTRS_o_ai vector signed __int128
17626 vec_xl(ptrdiff_t __offset, const signed __int128 *__ptr) {
17627   signed char *__addr = (signed char *)__ptr + __offset;
17628   return *(unaligned_vec_si128 *)__addr;
17629 }
17630
17631 static inline __ATTRS_o_ai vector unsigned __int128
17632 vec_xl(ptrdiff_t __offset, const unsigned __int128 *__ptr) {
17633   signed char *__addr = (signed char *)__ptr + __offset;
17634   return *(unaligned_vec_ui128 *)__addr;
17635 }
17636 #endif
17637
17638 /* vec_xl_be */
17639
17640 #ifdef __LITTLE_ENDIAN__
17641 static __inline__ vector signed char __ATTRS_o_ai
17642 vec_xl_be(ptrdiff_t __offset, const signed char *__ptr) {
17643   vector signed char __vec = (vector signed char)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17644   return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
17645                                  13, 12, 11, 10, 9, 8);
17646 }
17647
17648 static __inline__ vector unsigned char __ATTRS_o_ai
17649 vec_xl_be(ptrdiff_t __offset, const unsigned char *__ptr) {
17650   vector unsigned char __vec = (vector unsigned char)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17651   return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
17652                                  13, 12, 11, 10, 9, 8);
17653 }
17654
17655 static __inline__ vector signed short __ATTRS_o_ai
17656 vec_xl_be(ptrdiff_t __offset, const signed short *__ptr) {
17657   vector signed short __vec = (vector signed short)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17658   return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
17659 }
17660
17661 static __inline__ vector unsigned short __ATTRS_o_ai
17662 vec_xl_be(ptrdiff_t __offset, const unsigned short *__ptr) {
17663   vector unsigned short __vec = (vector unsigned short)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17664   return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
17665 }
17666
17667 static __inline__ vector signed int __ATTRS_o_ai
17668 vec_xl_be(signed long long  __offset, const signed int *__ptr) {
17669   return (vector signed int)__builtin_vsx_lxvw4x_be(__offset, __ptr);
17670 }
17671
17672 static __inline__ vector unsigned int __ATTRS_o_ai
17673 vec_xl_be(signed long long  __offset, const unsigned int *__ptr) {
17674   return (vector unsigned int)__builtin_vsx_lxvw4x_be(__offset, __ptr);
17675 }
17676
17677 static __inline__ vector float __ATTRS_o_ai
17678 vec_xl_be(signed long long  __offset, const float *__ptr) {
17679   return (vector float)__builtin_vsx_lxvw4x_be(__offset, __ptr);
17680 }
17681
17682 #ifdef __VSX__
17683 static __inline__ vector signed long long __ATTRS_o_ai
17684 vec_xl_be(signed long long  __offset, const signed long long *__ptr) {
17685   return (vector signed long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17686 }
17687
17688 static __inline__ vector unsigned long long __ATTRS_o_ai
17689 vec_xl_be(signed long long  __offset, const unsigned long long *__ptr) {
17690   return (vector unsigned long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17691 }
17692
17693 static __inline__ vector double __ATTRS_o_ai
17694 vec_xl_be(signed long long  __offset, const double *__ptr) {
17695   return (vector double)__builtin_vsx_lxvd2x_be(__offset, __ptr);
17696 }
17697 #endif
17698
17699 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
17700     defined(__SIZEOF_INT128__)
17701 static __inline__ vector signed __int128 __ATTRS_o_ai
17702 vec_xl_be(signed long long  __offset, const signed __int128 *__ptr) {
17703   return vec_xl(__offset, __ptr);
17704 }
17705
17706 static __inline__ vector unsigned __int128 __ATTRS_o_ai
17707 vec_xl_be(signed long long  __offset, const unsigned __int128 *__ptr) {
17708   return vec_xl(__offset, __ptr);
17709 }
17710 #endif
17711 #else
17712   #define vec_xl_be vec_xl
17713 #endif
17714
17715 #if defined(__POWER10_VECTOR__) && defined(__VSX__) &&                         \
17716     defined(__SIZEOF_INT128__)
17717
17718 /* vect_xl_sext */
17719
17720 static __inline__ vector unsigned __int128 __ATTRS_o_ai
17721 vec_xl_sext(ptrdiff_t __offset, const signed char *__pointer) {
17722   return (vector unsigned __int128)*(__pointer + __offset);
17723 }
17724
17725 static __inline__ vector unsigned __int128 __ATTRS_o_ai
17726 vec_xl_sext(ptrdiff_t __offset, const signed short *__pointer) {
17727   return (vector unsigned __int128)*(__pointer + __offset);
17728 }
17729
17730 static __inline__ vector unsigned __int128 __ATTRS_o_ai
17731 vec_xl_sext(ptrdiff_t __offset, const signed int *__pointer) {
17732   return (vector unsigned __int128)*(__pointer + __offset);
17733 }
17734
17735 static __inline__ vector unsigned __int128 __ATTRS_o_ai
17736 vec_xl_sext(ptrdiff_t __offset, const signed long long *__pointer) {
17737   return (vector unsigned __int128)*(__pointer + __offset);
17738 }
17739
17740 /* vec_xl_zext */
17741
17742 static __inline__ vector unsigned __int128 __ATTRS_o_ai
17743 vec_xl_zext(ptrdiff_t __offset, const unsigned char *__pointer) {
17744   return (vector unsigned __int128)*(__pointer + __offset);
17745 }
17746
17747 static __inline__ vector unsigned __int128 __ATTRS_o_ai
17748 vec_xl_zext(ptrdiff_t __offset, const unsigned short *__pointer) {
17749   return (vector unsigned __int128)*(__pointer + __offset);
17750 }
17751
17752 static __inline__ vector unsigned __int128 __ATTRS_o_ai
17753 vec_xl_zext(ptrdiff_t __offset, const unsigned int *__pointer) {
17754   return (vector unsigned __int128)*(__pointer + __offset);
17755 }
17756
17757 static __inline__ vector unsigned __int128 __ATTRS_o_ai
17758 vec_xl_zext(ptrdiff_t __offset, const unsigned long long *__pointer) {
17759   return (vector unsigned __int128)*(__pointer + __offset);
17760 }
17761
17762 #endif
17763
17764 /* vec_xlds */
17765 #ifdef __VSX__
17766 static __inline__ vector signed long long __ATTRS_o_ai
17767 vec_xlds(ptrdiff_t __offset, const signed long long *__ptr) {
17768   signed long long *__addr = (signed long long*)((signed char *)__ptr + __offset);
17769   return (vector signed long long) *__addr;
17770 }
17771
17772 static __inline__ vector unsigned long long __ATTRS_o_ai
17773 vec_xlds(ptrdiff_t __offset, const unsigned long long *__ptr) {
17774   unsigned long long *__addr = (unsigned long long *)((signed char *)__ptr + __offset);
17775   return (unaligned_vec_ull) *__addr;
17776 }
17777
17778 static __inline__ vector double __ATTRS_o_ai vec_xlds(ptrdiff_t __offset,
17779                                                       const double *__ptr) {
17780   double *__addr = (double*)((signed char *)__ptr + __offset);
17781   return (unaligned_vec_double) *__addr;
17782 }
17783
17784 /* vec_load_splats */
17785 static __inline__ vector signed int __ATTRS_o_ai
17786 vec_load_splats(signed long long __offset, const signed int *__ptr) {
17787   signed int *__addr = (signed int*)((signed char *)__ptr + __offset);
17788   return (vector signed int)*__addr;
17789 }
17790
17791 static __inline__ vector signed int __ATTRS_o_ai
17792 vec_load_splats(unsigned long long __offset, const signed int *__ptr) {
17793   signed int *__addr = (signed int*)((signed char *)__ptr + __offset);
17794   return (vector signed int)*__addr;
17795 }
17796
17797 static __inline__ vector unsigned int __ATTRS_o_ai
17798 vec_load_splats(signed long long __offset, const unsigned int *__ptr) {
17799   unsigned int *__addr = (unsigned int*)((signed char *)__ptr + __offset);
17800   return (vector unsigned int)*__addr;
17801 }
17802
17803 static __inline__ vector unsigned int __ATTRS_o_ai
17804 vec_load_splats(unsigned long long __offset, const unsigned int *__ptr) {
17805   unsigned int *__addr = (unsigned int*)((signed char *)__ptr + __offset);
17806   return (vector unsigned int)*__addr;
17807 }
17808
17809 static __inline__ vector float __ATTRS_o_ai
17810 vec_load_splats(signed long long __offset, const float *__ptr) {
17811   float *__addr = (float*)((signed char *)__ptr + __offset);
17812   return (vector float)*__addr;
17813 }
17814
17815 static __inline__ vector float __ATTRS_o_ai
17816 vec_load_splats(unsigned long long __offset, const float *__ptr) {
17817   float *__addr = (float*)((signed char *)__ptr + __offset);
17818   return (vector float)*__addr;
17819 }
17820 #endif
17821
17822 /* vec_xst */
17823
17824 #define vec_xstd2 vec_xst
17825 #define vec_xstw4 vec_xst
17826 static inline __ATTRS_o_ai void
17827 vec_xst(vector signed char __vec, ptrdiff_t __offset, signed char *__ptr) {
17828   *(unaligned_vec_schar *)(__ptr + __offset) = __vec;
17829 }
17830
17831 static inline __ATTRS_o_ai void
17832 vec_xst(vector unsigned char __vec, ptrdiff_t __offset, unsigned char *__ptr) {
17833   *(unaligned_vec_uchar *)(__ptr + __offset) = __vec;
17834 }
17835
17836 static inline __ATTRS_o_ai void
17837 vec_xst(vector signed short __vec, ptrdiff_t __offset, signed short *__ptr) {
17838   signed char *__addr = (signed char *)__ptr + __offset;
17839   *(unaligned_vec_sshort *)__addr = __vec;
17840 }
17841
17842 static inline __ATTRS_o_ai void vec_xst(vector unsigned short __vec,
17843                                         ptrdiff_t __offset,
17844                                         unsigned short *__ptr) {
17845   signed char *__addr = (signed char *)__ptr + __offset;
17846   *(unaligned_vec_ushort *)__addr = __vec;
17847 }
17848
17849 static inline __ATTRS_o_ai void vec_xst(vector signed int __vec,
17850                                         ptrdiff_t __offset, signed int *__ptr) {
17851   signed char *__addr = (signed char *)__ptr + __offset;
17852   *(unaligned_vec_sint *)__addr = __vec;
17853 }
17854
17855 static inline __ATTRS_o_ai void
17856 vec_xst(vector unsigned int __vec, ptrdiff_t __offset, unsigned int *__ptr) {
17857   signed char *__addr = (signed char *)__ptr + __offset;
17858   *(unaligned_vec_uint *)__addr = __vec;
17859 }
17860
17861 static inline __ATTRS_o_ai void vec_xst(vector float __vec, ptrdiff_t __offset,
17862                                         float *__ptr) {
17863   signed char *__addr = (signed char *)__ptr + __offset;
17864   *(unaligned_vec_float *)__addr = __vec;
17865 }
17866
17867 #ifdef __VSX__
17868 static inline __ATTRS_o_ai void vec_xst(vector signed long long __vec,
17869                                         ptrdiff_t __offset,
17870                                         signed long long *__ptr) {
17871   signed char *__addr = (signed char *)__ptr + __offset;
17872   *(unaligned_vec_sll *)__addr = __vec;
17873 }
17874
17875 static inline __ATTRS_o_ai void vec_xst(vector unsigned long long __vec,
17876                                         ptrdiff_t __offset,
17877                                         unsigned long long *__ptr) {
17878   signed char *__addr = (signed char *)__ptr + __offset;
17879   *(unaligned_vec_ull *)__addr = __vec;
17880 }
17881
17882 static inline __ATTRS_o_ai void vec_xst(vector double __vec, ptrdiff_t __offset,
17883                                         double *__ptr) {
17884   signed char *__addr = (signed char *)__ptr + __offset;
17885   *(unaligned_vec_double *)__addr = __vec;
17886 }
17887 #endif
17888
17889 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
17890     defined(__SIZEOF_INT128__)
17891 static inline __ATTRS_o_ai void vec_xst(vector signed __int128 __vec,
17892                                         ptrdiff_t __offset,
17893                                         signed __int128 *__ptr) {
17894   signed char *__addr = (signed char *)__ptr + __offset;
17895   *(unaligned_vec_si128 *)__addr = __vec;
17896 }
17897
17898 static inline __ATTRS_o_ai void vec_xst(vector unsigned __int128 __vec,
17899                                         ptrdiff_t __offset,
17900                                         unsigned __int128 *__ptr) {
17901   signed char *__addr = (signed char *)__ptr + __offset;
17902   *(unaligned_vec_ui128 *)__addr = __vec;
17903 }
17904 #endif
17905
17906 /* vec_xst_trunc */
17907
17908 #if defined(__POWER10_VECTOR__) && defined(__VSX__) &&                         \
17909     defined(__SIZEOF_INT128__)
17910 static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
17911                                               ptrdiff_t __offset,
17912                                               signed char *__ptr) {
17913   *(__ptr + __offset) = (signed char)__vec[0];
17914 }
17915
17916 static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
17917                                               ptrdiff_t __offset,
17918                                               unsigned char *__ptr) {
17919   *(__ptr + __offset) = (unsigned char)__vec[0];
17920 }
17921
17922 static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
17923                                               ptrdiff_t __offset,
17924                                               signed short *__ptr) {
17925   *(__ptr + __offset) = (signed short)__vec[0];
17926 }
17927
17928 static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
17929                                               ptrdiff_t __offset,
17930                                               unsigned short *__ptr) {
17931   *(__ptr + __offset) = (unsigned short)__vec[0];
17932 }
17933
17934 static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
17935                                               ptrdiff_t __offset,
17936                                               signed int *__ptr) {
17937   *(__ptr + __offset) = (signed int)__vec[0];
17938 }
17939
17940 static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
17941                                               ptrdiff_t __offset,
17942                                               unsigned int *__ptr) {
17943   *(__ptr + __offset) = (unsigned int)__vec[0];
17944 }
17945
17946 static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
17947                                               ptrdiff_t __offset,
17948                                               signed long long *__ptr) {
17949   *(__ptr + __offset) = (signed long long)__vec[0];
17950 }
17951
17952 static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
17953                                               ptrdiff_t __offset,
17954                                               unsigned long long *__ptr) {
17955   *(__ptr + __offset) = (unsigned long long)__vec[0];
17956 }
17957 #endif
17958
17959 /* vec_xst_be */
17960
17961 #ifdef __LITTLE_ENDIAN__
17962 static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed char __vec,
17963                                                signed long long  __offset,
17964                                                signed char *__ptr) {
17965   vector signed char __tmp =
17966      __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
17967                              13, 12, 11, 10, 9, 8);
17968   typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
17969   __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
17970 }
17971
17972 static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned char __vec,
17973                                                signed long long  __offset,
17974                                                unsigned char *__ptr) {
17975   vector unsigned char __tmp =
17976      __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
17977                              13, 12, 11, 10, 9, 8);
17978   typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
17979   __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
17980 }
17981
17982 static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed short __vec,
17983                                                signed long long  __offset,
17984                                                signed short *__ptr) {
17985   vector signed short __tmp =
17986      __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
17987   typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
17988   __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
17989 }
17990
17991 static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned short __vec,
17992                                                signed long long  __offset,
17993                                                unsigned short *__ptr) {
17994   vector unsigned short __tmp =
17995      __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
17996   typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
17997   __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
17998 }
17999
18000 static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed int __vec,
18001                                                signed long long  __offset,
18002                                                signed int *__ptr) {
18003   __builtin_vsx_stxvw4x_be(__vec, __offset, __ptr);
18004 }
18005
18006 static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned int __vec,
18007                                                signed long long  __offset,
18008                                                unsigned int *__ptr) {
18009   __builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);
18010 }
18011
18012 static __inline__ void __ATTRS_o_ai vec_xst_be(vector float __vec,
18013                                                signed long long  __offset,
18014                                                float *__ptr) {
18015   __builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);
18016 }
18017
18018 #ifdef __VSX__
18019 static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed long long __vec,
18020                                                signed long long  __offset,
18021                                                signed long long *__ptr) {
18022   __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
18023 }
18024
18025 static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned long long __vec,
18026                                                signed long long  __offset,
18027                                                unsigned long long *__ptr) {
18028   __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
18029 }
18030
18031 static __inline__ void __ATTRS_o_ai vec_xst_be(vector double __vec,
18032                                                signed long long  __offset,
18033                                                double *__ptr) {
18034   __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
18035 }
18036 #endif
18037
18038 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
18039     defined(__SIZEOF_INT128__)
18040 static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed __int128 __vec,
18041                                                signed long long  __offset,
18042                                                signed __int128 *__ptr) {
18043   vec_xst(__vec, __offset, __ptr);
18044 }
18045
18046 static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned __int128 __vec,
18047                                                signed long long  __offset,
18048                                                unsigned __int128 *__ptr) {
18049   vec_xst(__vec, __offset, __ptr);
18050 }
18051 #endif
18052 #else
18053   #define vec_xst_be vec_xst
18054 #endif
18055
18056 #ifdef __POWER9_VECTOR__
18057 #define vec_test_data_class(__a, __b)                                          \
18058   _Generic(                                                                    \
18059       (__a), vector float                                                      \
18060       : (vector bool int)__builtin_vsx_xvtstdcsp((vector float)(__a), (__b)),  \
18061         vector double                                                          \
18062       : (vector bool long long)__builtin_vsx_xvtstdcdp((vector double)(__a),   \
18063                                                        (__b)))
18064
18065 #endif /* #ifdef __POWER9_VECTOR__ */
18066
18067 static vector float __ATTRS_o_ai vec_neg(vector float __a) {
18068   return -__a;
18069 }
18070
18071 #ifdef __VSX__
18072 static vector double __ATTRS_o_ai vec_neg(vector double __a) {
18073   return -__a;
18074 }
18075
18076 #endif
18077
18078 #ifdef __VSX__
18079 static vector long long __ATTRS_o_ai vec_neg(vector long long __a) {
18080   return -__a;
18081 }
18082 #endif
18083
18084 static vector signed int __ATTRS_o_ai vec_neg(vector signed int __a) {
18085   return -__a;
18086 }
18087
18088 static vector signed short __ATTRS_o_ai vec_neg(vector signed short __a) {
18089   return -__a;
18090 }
18091
18092 static vector signed char __ATTRS_o_ai vec_neg(vector signed char __a) {
18093   return -__a;
18094 }
18095
18096 static vector float __ATTRS_o_ai vec_nabs(vector float __a) {
18097   return - vec_abs(__a);
18098 }
18099
18100 #ifdef __VSX__
18101 static vector double __ATTRS_o_ai vec_nabs(vector double __a) {
18102   return - vec_abs(__a);
18103 }
18104
18105 #endif
18106
18107 #ifdef __POWER8_VECTOR__
18108 static vector long long __ATTRS_o_ai vec_nabs(vector long long __a) {
18109   return __builtin_altivec_vminsd(__a, -__a);
18110 }
18111 #endif
18112
18113 static vector signed int __ATTRS_o_ai vec_nabs(vector signed int __a) {
18114   return __builtin_altivec_vminsw(__a, -__a);
18115 }
18116
18117 static vector signed short __ATTRS_o_ai vec_nabs(vector signed short __a) {
18118   return __builtin_altivec_vminsh(__a, -__a);
18119 }
18120
18121 static vector signed char __ATTRS_o_ai vec_nabs(vector signed char __a) {
18122   return __builtin_altivec_vminsb(__a, -__a);
18123 }
18124
18125 static vector float __ATTRS_o_ai vec_recipdiv(vector float __a,
18126                                               vector float __b) {
18127   return __builtin_ppc_recipdivf(__a, __b);
18128 }
18129
18130 #ifdef __VSX__
18131 static vector double __ATTRS_o_ai vec_recipdiv(vector double __a,
18132                                                vector double __b) {
18133   return __builtin_ppc_recipdivd(__a, __b);
18134 }
18135 #endif
18136
18137 #ifdef __POWER10_VECTOR__
18138
18139 /* vec_extractm */
18140
18141 static __inline__ unsigned int __ATTRS_o_ai
18142 vec_extractm(vector unsigned char __a) {
18143   return __builtin_altivec_vextractbm(__a);
18144 }
18145
18146 static __inline__ unsigned int __ATTRS_o_ai
18147 vec_extractm(vector unsigned short __a) {
18148   return __builtin_altivec_vextracthm(__a);
18149 }
18150
18151 static __inline__ unsigned int __ATTRS_o_ai
18152 vec_extractm(vector unsigned int __a) {
18153   return __builtin_altivec_vextractwm(__a);
18154 }
18155
18156 static __inline__ unsigned int __ATTRS_o_ai
18157 vec_extractm(vector unsigned long long __a) {
18158   return __builtin_altivec_vextractdm(__a);
18159 }
18160
18161 #ifdef __SIZEOF_INT128__
18162 static __inline__ unsigned int __ATTRS_o_ai
18163 vec_extractm(vector unsigned __int128 __a) {
18164   return __builtin_altivec_vextractqm(__a);
18165 }
18166 #endif
18167
18168 /* vec_expandm */
18169
18170 static __inline__ vector unsigned char __ATTRS_o_ai
18171 vec_expandm(vector unsigned char __a) {
18172   return __builtin_altivec_vexpandbm(__a);
18173 }
18174
18175 static __inline__ vector unsigned short __ATTRS_o_ai
18176 vec_expandm(vector unsigned short __a) {
18177   return __builtin_altivec_vexpandhm(__a);
18178 }
18179
18180 static __inline__ vector unsigned int __ATTRS_o_ai
18181 vec_expandm(vector unsigned int __a) {
18182   return __builtin_altivec_vexpandwm(__a);
18183 }
18184
18185 static __inline__ vector unsigned long long __ATTRS_o_ai
18186 vec_expandm(vector unsigned long long __a) {
18187   return __builtin_altivec_vexpanddm(__a);
18188 }
18189
18190 #ifdef __SIZEOF_INT128__
18191 static __inline__ vector unsigned __int128 __ATTRS_o_ai
18192 vec_expandm(vector unsigned __int128 __a) {
18193   return __builtin_altivec_vexpandqm(__a);
18194 }
18195 #endif
18196
18197 /* vec_cntm */
18198
18199 #define vec_cntm(__a, __mp)                                                    \
18200   _Generic((__a), vector unsigned char                                         \
18201            : __builtin_altivec_vcntmbb((__a), (unsigned int)(__mp)),           \
18202              vector unsigned short                                             \
18203            : __builtin_altivec_vcntmbh((__a), (unsigned int)(__mp)),           \
18204              vector unsigned int                                               \
18205            : __builtin_altivec_vcntmbw((__a), (unsigned int)(__mp)),           \
18206              vector unsigned long long                                         \
18207            : __builtin_altivec_vcntmbd((__a), (unsigned int)(__mp)))
18208
18209 /* vec_gen[b|h|w|d|q]m */
18210
18211 static __inline__ vector unsigned char __ATTRS_o_ai
18212 vec_genbm(unsigned long long __bm) {
18213   return __builtin_altivec_mtvsrbm(__bm);
18214 }
18215
18216 static __inline__ vector unsigned short __ATTRS_o_ai
18217 vec_genhm(unsigned long long __bm) {
18218   return __builtin_altivec_mtvsrhm(__bm);
18219 }
18220
18221 static __inline__ vector unsigned int __ATTRS_o_ai
18222 vec_genwm(unsigned long long __bm) {
18223   return __builtin_altivec_mtvsrwm(__bm);
18224 }
18225
18226 static __inline__ vector unsigned long long __ATTRS_o_ai
18227 vec_gendm(unsigned long long __bm) {
18228   return __builtin_altivec_mtvsrdm(__bm);
18229 }
18230
18231 #ifdef __SIZEOF_INT128__
18232 static __inline__ vector unsigned __int128 __ATTRS_o_ai
18233 vec_genqm(unsigned long long __bm) {
18234   return __builtin_altivec_mtvsrqm(__bm);
18235 }
18236 #endif
18237
18238 /* vec_pdep */
18239
18240 static __inline__ vector unsigned long long __ATTRS_o_ai
18241 vec_pdep(vector unsigned long long __a, vector unsigned long long __b) {
18242   return __builtin_altivec_vpdepd(__a, __b);
18243 }
18244
18245 /* vec_pext */
18246
18247 static __inline__ vector unsigned long long __ATTRS_o_ai
18248 vec_pext(vector unsigned long long __a, vector unsigned long long __b) {
18249   return __builtin_altivec_vpextd(__a, __b);
18250 }
18251
18252 /* vec_cfuge */
18253
18254 static __inline__ vector unsigned long long __ATTRS_o_ai
18255 vec_cfuge(vector unsigned long long __a, vector unsigned long long __b) {
18256   return __builtin_altivec_vcfuged(__a, __b);
18257 }
18258
18259 /* vec_gnb */
18260
18261 #define vec_gnb(__a, __b) __builtin_altivec_vgnb(__a, __b)
18262
18263 /* vec_ternarylogic */
18264 #ifdef __VSX__
18265 #ifdef __SIZEOF_INT128__
18266 #define vec_ternarylogic(__a, __b, __c, __imm)                                 \
18267   _Generic((__a), vector unsigned char                                         \
18268            : __builtin_vsx_xxeval((vector unsigned long long)(__a),            \
18269                                   (vector unsigned long long)(__b),            \
18270                                   (vector unsigned long long)(__c), (__imm)),  \
18271              vector unsigned short                                             \
18272            : __builtin_vsx_xxeval((vector unsigned long long)(__a),            \
18273                                   (vector unsigned long long)(__b),            \
18274                                   (vector unsigned long long)(__c), (__imm)),  \
18275              vector unsigned int                                               \
18276            : __builtin_vsx_xxeval((vector unsigned long long)(__a),            \
18277                                   (vector unsigned long long)(__b),            \
18278                                   (vector unsigned long long)(__c), (__imm)),  \
18279              vector unsigned long long                                         \
18280            : __builtin_vsx_xxeval((vector unsigned long long)(__a),            \
18281                                   (vector unsigned long long)(__b),            \
18282                                   (vector unsigned long long)(__c), (__imm)),  \
18283              vector unsigned __int128                                          \
18284            : __builtin_vsx_xxeval((vector unsigned long long)(__a),            \
18285                                   (vector unsigned long long)(__b),            \
18286                                   (vector unsigned long long)(__c), (__imm)))
18287 #else
18288 #define vec_ternarylogic(__a, __b, __c, __imm)                                 \
18289   _Generic((__a), vector unsigned char                                         \
18290            : __builtin_vsx_xxeval((vector unsigned long long)(__a),            \
18291                                   (vector unsigned long long)(__b),            \
18292                                   (vector unsigned long long)(__c), (__imm)),  \
18293              vector unsigned short                                             \
18294            : __builtin_vsx_xxeval((vector unsigned long long)(__a),            \
18295                                   (vector unsigned long long)(__b),            \
18296                                   (vector unsigned long long)(__c), (__imm)),  \
18297              vector unsigned int                                               \
18298            : __builtin_vsx_xxeval((vector unsigned long long)(__a),            \
18299                                   (vector unsigned long long)(__b),            \
18300                                   (vector unsigned long long)(__c), (__imm)),  \
18301              vector unsigned long long                                         \
18302            : __builtin_vsx_xxeval((vector unsigned long long)(__a),            \
18303                                   (vector unsigned long long)(__b),            \
18304                                   (vector unsigned long long)(__c), (__imm)))
18305 #endif /* __SIZEOF_INT128__ */
18306 #endif /* __VSX__ */
18307
18308 /* vec_genpcvm */
18309
18310 #ifdef __VSX__
18311 #define vec_genpcvm(__a, __imm)                                                \
18312   _Generic((__a), vector unsigned char                                         \
18313            : __builtin_vsx_xxgenpcvbm((__a), (int)(__imm)),                    \
18314              vector unsigned short                                             \
18315            : __builtin_vsx_xxgenpcvhm((__a), (int)(__imm)),                    \
18316              vector unsigned int                                               \
18317            : __builtin_vsx_xxgenpcvwm((__a), (int)(__imm)),                    \
18318              vector unsigned long long                                         \
18319            : __builtin_vsx_xxgenpcvdm((__a), (int)(__imm)))
18320 #endif /* __VSX__ */
18321
18322 /* vec_clrl */
18323
18324 static __inline__ vector signed char __ATTRS_o_ai
18325 vec_clrl(vector signed char __a, unsigned int __n) {
18326 #ifdef __LITTLE_ENDIAN__
18327   return __builtin_altivec_vclrrb(__a, __n);
18328 #else
18329   return __builtin_altivec_vclrlb( __a, __n);
18330 #endif
18331 }
18332
18333 static __inline__ vector unsigned char __ATTRS_o_ai
18334 vec_clrl(vector unsigned char __a, unsigned int __n) {
18335 #ifdef __LITTLE_ENDIAN__
18336   return __builtin_altivec_vclrrb((vector signed char)__a, __n);
18337 #else
18338   return __builtin_altivec_vclrlb((vector signed char)__a, __n);
18339 #endif
18340 }
18341
18342 /* vec_clrr */
18343
18344 static __inline__ vector signed char __ATTRS_o_ai
18345 vec_clrr(vector signed char __a, unsigned int __n) {
18346 #ifdef __LITTLE_ENDIAN__
18347   return __builtin_altivec_vclrlb(__a, __n);
18348 #else
18349   return __builtin_altivec_vclrrb( __a, __n);
18350 #endif
18351 }
18352
18353 static __inline__ vector unsigned char __ATTRS_o_ai
18354 vec_clrr(vector unsigned char __a, unsigned int __n) {
18355 #ifdef __LITTLE_ENDIAN__
18356   return __builtin_altivec_vclrlb((vector signed char)__a, __n);
18357 #else
18358   return __builtin_altivec_vclrrb((vector signed char)__a, __n);
18359 #endif
18360 }
18361
18362 /* vec_cntlzm */
18363
18364 static __inline__ vector unsigned long long __ATTRS_o_ai
18365 vec_cntlzm(vector unsigned long long __a, vector unsigned long long __b) {
18366   return __builtin_altivec_vclzdm(__a, __b);
18367 }
18368
18369 /* vec_cnttzm */
18370
18371 static __inline__ vector unsigned long long __ATTRS_o_ai
18372 vec_cnttzm(vector unsigned long long __a, vector unsigned long long __b) {
18373   return __builtin_altivec_vctzdm(__a, __b);
18374 }
18375
18376 /* vec_mod */
18377
18378 static __inline__ vector signed int __ATTRS_o_ai
18379 vec_mod(vector signed int __a, vector signed int __b) {
18380   return __a % __b;
18381 }
18382
18383 static __inline__ vector unsigned int __ATTRS_o_ai
18384 vec_mod(vector unsigned int __a, vector unsigned int __b) {
18385   return __a % __b;
18386 }
18387
18388 static __inline__ vector signed long long __ATTRS_o_ai
18389 vec_mod(vector signed long long __a, vector signed long long __b) {
18390   return __a % __b;
18391 }
18392
18393 static __inline__ vector unsigned long long __ATTRS_o_ai
18394 vec_mod(vector unsigned long long __a, vector unsigned long long __b) {
18395   return __a % __b;
18396 }
18397
18398 #ifdef __SIZEOF_INT128__
18399 static __inline__ vector signed __int128 __ATTRS_o_ai
18400 vec_mod(vector signed __int128 __a, vector signed __int128 __b) {
18401   return __a % __b;
18402 }
18403
18404 static __inline__ vector unsigned __int128 __ATTRS_o_ai
18405 vec_mod(vector unsigned __int128 __a, vector unsigned __int128 __b) {
18406   return  __a % __b;
18407 }
18408 #endif
18409
18410 /* vec_sldbi */
18411
18412 #define vec_sldb(__a, __b, __c) __builtin_altivec_vsldbi(__a, __b, (__c & 0x7))
18413
18414 /* vec_srdbi */
18415
18416 #define vec_srdb(__a, __b, __c) __builtin_altivec_vsrdbi(__a, __b, (__c & 0x7))
18417
18418 /* vec_insertl */
18419
18420 static __inline__ vector unsigned char __ATTRS_o_ai
18421 vec_insertl(unsigned char __a, vector unsigned char __b, unsigned int __c) {
18422 #ifdef __LITTLE_ENDIAN__
18423   return __builtin_altivec_vinsbrx(__b, __c, __a);
18424 #else
18425   return __builtin_altivec_vinsblx(__b, __c, __a);
18426 #endif
18427 }
18428
18429 static __inline__ vector unsigned short __ATTRS_o_ai
18430 vec_insertl(unsigned short __a, vector unsigned short __b, unsigned int __c) {
18431 #ifdef __LITTLE_ENDIAN__
18432   return __builtin_altivec_vinshrx(__b, __c, __a);
18433 #else
18434   return __builtin_altivec_vinshlx(__b, __c, __a);
18435 #endif
18436 }
18437
18438 static __inline__ vector unsigned int __ATTRS_o_ai
18439 vec_insertl(unsigned int __a, vector unsigned int __b, unsigned int __c) {
18440 #ifdef __LITTLE_ENDIAN__
18441   return __builtin_altivec_vinswrx(__b, __c, __a);
18442 #else
18443   return __builtin_altivec_vinswlx(__b, __c, __a);
18444 #endif
18445 }
18446
18447 static __inline__ vector unsigned long long __ATTRS_o_ai
18448 vec_insertl(unsigned long long __a, vector unsigned long long __b,
18449             unsigned int __c) {
18450 #ifdef __LITTLE_ENDIAN__
18451   return __builtin_altivec_vinsdrx(__b, __c, __a);
18452 #else
18453   return __builtin_altivec_vinsdlx(__b, __c, __a);
18454 #endif
18455 }
18456
18457 static __inline__ vector unsigned char __ATTRS_o_ai
18458 vec_insertl(vector unsigned char __a, vector unsigned char __b,
18459             unsigned int __c) {
18460 #ifdef __LITTLE_ENDIAN__
18461   return __builtin_altivec_vinsbvrx(__b, __c, __a);
18462 #else
18463   return __builtin_altivec_vinsbvlx(__b, __c, __a);
18464 #endif
18465 }
18466
18467 static __inline__ vector unsigned short __ATTRS_o_ai
18468 vec_insertl(vector unsigned short __a, vector unsigned short __b,
18469             unsigned int __c) {
18470 #ifdef __LITTLE_ENDIAN__
18471   return __builtin_altivec_vinshvrx(__b, __c, __a);
18472 #else
18473   return __builtin_altivec_vinshvlx(__b, __c, __a);
18474 #endif
18475 }
18476
18477 static __inline__ vector unsigned int __ATTRS_o_ai
18478 vec_insertl(vector unsigned int __a, vector unsigned int __b,
18479             unsigned int __c) {
18480 #ifdef __LITTLE_ENDIAN__
18481   return __builtin_altivec_vinswvrx(__b, __c, __a);
18482 #else
18483   return __builtin_altivec_vinswvlx(__b, __c, __a);
18484 #endif
18485 }
18486
18487 /* vec_inserth */
18488
18489 static __inline__ vector unsigned char __ATTRS_o_ai
18490 vec_inserth(unsigned char __a, vector unsigned char __b, unsigned int __c) {
18491 #ifdef __LITTLE_ENDIAN__
18492   return __builtin_altivec_vinsblx(__b, __c, __a);
18493 #else
18494   return __builtin_altivec_vinsbrx(__b, __c, __a);
18495 #endif
18496 }
18497
18498 static __inline__ vector unsigned short __ATTRS_o_ai
18499 vec_inserth(unsigned short __a, vector unsigned short __b, unsigned int __c) {
18500 #ifdef __LITTLE_ENDIAN__
18501   return __builtin_altivec_vinshlx(__b, __c, __a);
18502 #else
18503   return __builtin_altivec_vinshrx(__b, __c, __a);
18504 #endif
18505 }
18506
18507 static __inline__ vector unsigned int __ATTRS_o_ai
18508 vec_inserth(unsigned int __a, vector unsigned int __b, unsigned int __c) {
18509 #ifdef __LITTLE_ENDIAN__
18510   return __builtin_altivec_vinswlx(__b, __c, __a);
18511 #else
18512   return __builtin_altivec_vinswrx(__b, __c, __a);
18513 #endif
18514 }
18515
18516 static __inline__ vector unsigned long long __ATTRS_o_ai
18517 vec_inserth(unsigned long long __a, vector unsigned long long __b,
18518             unsigned int __c) {
18519 #ifdef __LITTLE_ENDIAN__
18520   return __builtin_altivec_vinsdlx(__b, __c, __a);
18521 #else
18522   return __builtin_altivec_vinsdrx(__b, __c, __a);
18523 #endif
18524 }
18525
18526 static __inline__ vector unsigned char __ATTRS_o_ai
18527 vec_inserth(vector unsigned char __a, vector unsigned char __b,
18528             unsigned int __c) {
18529 #ifdef __LITTLE_ENDIAN__
18530   return __builtin_altivec_vinsbvlx(__b, __c, __a);
18531 #else
18532   return __builtin_altivec_vinsbvrx(__b, __c, __a);
18533 #endif
18534 }
18535
18536 static __inline__ vector unsigned short __ATTRS_o_ai
18537 vec_inserth(vector unsigned short __a, vector unsigned short __b,
18538             unsigned int __c) {
18539 #ifdef __LITTLE_ENDIAN__
18540   return __builtin_altivec_vinshvlx(__b, __c, __a);
18541 #else
18542   return __builtin_altivec_vinshvrx(__b, __c, __a);
18543 #endif
18544 }
18545
18546 static __inline__ vector unsigned int __ATTRS_o_ai
18547 vec_inserth(vector unsigned int __a, vector unsigned int __b,
18548             unsigned int __c) {
18549 #ifdef __LITTLE_ENDIAN__
18550   return __builtin_altivec_vinswvlx(__b, __c, __a);
18551 #else
18552   return __builtin_altivec_vinswvrx(__b, __c, __a);
18553 #endif
18554 }
18555
18556 /* vec_extractl */
18557
18558 static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
18559     vector unsigned char __a, vector unsigned char __b, unsigned int __c) {
18560 #ifdef __LITTLE_ENDIAN__
18561   return __builtin_altivec_vextdubvrx(__a, __b, __c);
18562 #else
18563   vector unsigned long long __ret = __builtin_altivec_vextdubvlx(__a, __b, __c);
18564   return vec_sld(__ret, __ret, 8);
18565 #endif
18566 }
18567
18568 static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
18569     vector unsigned short __a, vector unsigned short __b, unsigned int __c) {
18570 #ifdef __LITTLE_ENDIAN__
18571   return __builtin_altivec_vextduhvrx(__a, __b, __c);
18572 #else
18573   vector unsigned long long __ret = __builtin_altivec_vextduhvlx(__a, __b, __c);
18574   return vec_sld(__ret, __ret, 8);
18575 #endif
18576 }
18577
18578 static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
18579     vector unsigned int __a, vector unsigned int __b, unsigned int __c) {
18580 #ifdef __LITTLE_ENDIAN__
18581   return __builtin_altivec_vextduwvrx(__a, __b, __c);
18582 #else
18583   vector unsigned long long __ret = __builtin_altivec_vextduwvlx(__a, __b, __c);
18584   return vec_sld(__ret, __ret, 8);
18585 #endif
18586 }
18587
18588 static __inline__ vector unsigned long long __ATTRS_o_ai
18589 vec_extractl(vector unsigned long long __a, vector unsigned long long __b,
18590              unsigned int __c) {
18591 #ifdef __LITTLE_ENDIAN__
18592   return __builtin_altivec_vextddvrx(__a, __b, __c);
18593 #else
18594   vector unsigned long long __ret = __builtin_altivec_vextddvlx(__a, __b, __c);
18595   return vec_sld(__ret, __ret, 8);
18596 #endif
18597 }
18598
18599 /* vec_extracth */
18600
18601 static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
18602     vector unsigned char __a, vector unsigned char __b, unsigned int __c) {
18603 #ifdef __LITTLE_ENDIAN__
18604   return __builtin_altivec_vextdubvlx(__a, __b, __c);
18605 #else
18606   vector unsigned long long __ret = __builtin_altivec_vextdubvrx(__a, __b, __c);
18607   return vec_sld(__ret, __ret, 8);
18608 #endif
18609 }
18610
18611 static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
18612     vector unsigned short __a, vector unsigned short __b, unsigned int __c) {
18613 #ifdef __LITTLE_ENDIAN__
18614   return __builtin_altivec_vextduhvlx(__a, __b, __c);
18615 #else
18616   vector unsigned long long __ret = __builtin_altivec_vextduhvrx(__a, __b, __c);
18617   return vec_sld(__ret, __ret, 8);
18618 #endif
18619 }
18620
18621 static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
18622     vector unsigned int __a, vector unsigned int __b, unsigned int __c) {
18623 #ifdef __LITTLE_ENDIAN__
18624   return __builtin_altivec_vextduwvlx(__a, __b, __c);
18625 #else
18626   vector unsigned long long __ret = __builtin_altivec_vextduwvrx(__a, __b, __c);
18627   return vec_sld(__ret, __ret, 8);
18628 #endif
18629 }
18630
18631 static __inline__ vector unsigned long long __ATTRS_o_ai
18632 vec_extracth(vector unsigned long long __a, vector unsigned long long __b,
18633              unsigned int __c) {
18634 #ifdef __LITTLE_ENDIAN__
18635   return __builtin_altivec_vextddvlx(__a, __b, __c);
18636 #else
18637   vector unsigned long long __ret = __builtin_altivec_vextddvrx(__a, __b, __c);
18638   return vec_sld(__ret, __ret, 8);
18639 #endif
18640 }
18641
18642 #ifdef __VSX__
18643
18644 /* vec_permx */
18645
18646 #define vec_permx(__a, __b, __c, __d)                                          \
18647   __builtin_vsx_xxpermx((__a), (__b), (__c), (__d))
18648
18649 /* vec_blendv */
18650
18651 static __inline__ vector signed char __ATTRS_o_ai
18652 vec_blendv(vector signed char __a, vector signed char __b,
18653            vector unsigned char __c) {
18654   return __builtin_vsx_xxblendvb(__a, __b, __c);
18655 }
18656
18657 static __inline__ vector unsigned char __ATTRS_o_ai
18658 vec_blendv(vector unsigned char __a, vector unsigned char __b,
18659            vector unsigned char __c) {
18660   return __builtin_vsx_xxblendvb(__a, __b, __c);
18661 }
18662
18663 static __inline__ vector signed short __ATTRS_o_ai
18664 vec_blendv(vector signed short __a, vector signed short __b,
18665            vector unsigned short __c) {
18666   return __builtin_vsx_xxblendvh(__a, __b, __c);
18667 }
18668
18669 static __inline__ vector unsigned short __ATTRS_o_ai
18670 vec_blendv(vector unsigned short __a, vector unsigned short __b,
18671            vector unsigned short __c) {
18672   return __builtin_vsx_xxblendvh(__a, __b, __c);
18673 }
18674
18675 static __inline__ vector signed int __ATTRS_o_ai
18676 vec_blendv(vector signed int __a, vector signed int __b,
18677            vector unsigned int __c) {
18678   return __builtin_vsx_xxblendvw(__a, __b, __c);
18679 }
18680
18681 static __inline__ vector unsigned int __ATTRS_o_ai
18682 vec_blendv(vector unsigned int __a, vector unsigned int __b,
18683            vector unsigned int __c) {
18684   return __builtin_vsx_xxblendvw(__a, __b, __c);
18685 }
18686
18687 static __inline__ vector signed long long __ATTRS_o_ai
18688 vec_blendv(vector signed long long __a, vector signed long long __b,
18689            vector unsigned long long __c) {
18690   return __builtin_vsx_xxblendvd(__a, __b, __c);
18691 }
18692
18693 static __inline__ vector unsigned long long __ATTRS_o_ai
18694 vec_blendv(vector unsigned long long __a, vector unsigned long long __b,
18695            vector unsigned long long __c) {
18696   return __builtin_vsx_xxblendvd(__a, __b, __c);
18697 }
18698
18699 static __inline__ vector float __ATTRS_o_ai
18700 vec_blendv(vector float __a, vector float __b, vector unsigned int __c) {
18701   return __builtin_vsx_xxblendvw(__a, __b, __c);
18702 }
18703
18704 static __inline__ vector double __ATTRS_o_ai
18705 vec_blendv(vector double __a, vector double __b,
18706            vector unsigned long long __c) {
18707   return __builtin_vsx_xxblendvd(__a, __b, __c);
18708 }
18709
18710 /* vec_replace_elt */
18711
18712 #define vec_replace_elt __builtin_altivec_vec_replace_elt
18713
18714 /* vec_replace_unaligned */
18715
18716 #define vec_replace_unaligned __builtin_altivec_vec_replace_unaligned
18717
18718 /* vec_splati */
18719
18720 #define vec_splati(__a)                                                        \
18721   _Generic((__a), signed int                                                   \
18722            : ((vector signed int)__a), unsigned int                            \
18723            : ((vector unsigned int)__a), float                                 \
18724            : ((vector float)__a))
18725
18726 /* vec_spatid */
18727
18728 static __inline__ vector double __ATTRS_o_ai vec_splatid(const float __a) {
18729   return ((vector double)((double)__a));
18730 }
18731
18732 /* vec_splati_ins */
18733
18734 static __inline__ vector signed int __ATTRS_o_ai vec_splati_ins(
18735     vector signed int __a, const unsigned int __b, const signed int __c) {
18736 #ifdef __LITTLE_ENDIAN__
18737   __a[1 - __b] = __c;
18738   __a[3 - __b] = __c;
18739 #else
18740   __a[__b] = __c;
18741   __a[2 + __b] = __c;
18742 #endif
18743   return __a;
18744 }
18745
18746 static __inline__ vector unsigned int __ATTRS_o_ai vec_splati_ins(
18747     vector unsigned int __a, const unsigned int __b, const unsigned int __c) {
18748 #ifdef __LITTLE_ENDIAN__
18749   __a[1 - __b] = __c;
18750   __a[3 - __b] = __c;
18751 #else
18752   __a[__b] = __c;
18753   __a[2 + __b] = __c;
18754 #endif
18755   return __a;
18756 }
18757
18758 static __inline__ vector float __ATTRS_o_ai
18759 vec_splati_ins(vector float __a, const unsigned int __b, const float __c) {
18760 #ifdef __LITTLE_ENDIAN__
18761   __a[1 - __b] = __c;
18762   __a[3 - __b] = __c;
18763 #else
18764   __a[__b] = __c;
18765   __a[2 + __b] = __c;
18766 #endif
18767   return __a;
18768 }
18769
18770 /* vec_test_lsbb_all_ones */
18771
18772 static __inline__ int __ATTRS_o_ai
18773 vec_test_lsbb_all_ones(vector unsigned char __a) {
18774   return __builtin_vsx_xvtlsbb(__a, 1);
18775 }
18776
18777 /* vec_test_lsbb_all_zeros */
18778
18779 static __inline__ int __ATTRS_o_ai
18780 vec_test_lsbb_all_zeros(vector unsigned char __a) {
18781   return __builtin_vsx_xvtlsbb(__a, 0);
18782 }
18783 #endif /* __VSX__ */
18784
18785 /* vec_stril */
18786
18787 static __inline__ vector unsigned char __ATTRS_o_ai
18788 vec_stril(vector unsigned char __a) {
18789 #ifdef __LITTLE_ENDIAN__
18790   return __builtin_altivec_vstribr((vector signed char)__a);
18791 #else
18792   return __builtin_altivec_vstribl((vector signed char)__a);
18793 #endif
18794 }
18795
18796 static __inline__ vector signed char __ATTRS_o_ai
18797 vec_stril(vector signed char __a) {
18798 #ifdef __LITTLE_ENDIAN__
18799   return __builtin_altivec_vstribr(__a);
18800 #else
18801   return __builtin_altivec_vstribl(__a);
18802 #endif
18803 }
18804
18805 static __inline__ vector unsigned short __ATTRS_o_ai
18806 vec_stril(vector unsigned short __a) {
18807 #ifdef __LITTLE_ENDIAN__
18808   return __builtin_altivec_vstrihr((vector signed short)__a);
18809 #else
18810   return __builtin_altivec_vstrihl((vector signed short)__a);
18811 #endif
18812 }
18813
18814 static __inline__ vector signed short __ATTRS_o_ai
18815 vec_stril(vector signed short __a) {
18816 #ifdef __LITTLE_ENDIAN__
18817   return __builtin_altivec_vstrihr(__a);
18818 #else
18819   return __builtin_altivec_vstrihl(__a);
18820 #endif
18821 }
18822
18823 /* vec_stril_p */
18824
18825 static __inline__ int __ATTRS_o_ai vec_stril_p(vector unsigned char __a) {
18826 #ifdef __LITTLE_ENDIAN__
18827   return __builtin_altivec_vstribr_p(__CR6_EQ, (vector signed char)__a);
18828 #else
18829   return __builtin_altivec_vstribl_p(__CR6_EQ, (vector signed char)__a);
18830 #endif
18831 }
18832
18833 static __inline__ int __ATTRS_o_ai vec_stril_p(vector signed char __a) {
18834 #ifdef __LITTLE_ENDIAN__
18835   return __builtin_altivec_vstribr_p(__CR6_EQ, __a);
18836 #else
18837   return __builtin_altivec_vstribl_p(__CR6_EQ, __a);
18838 #endif
18839 }
18840
18841 static __inline__ int __ATTRS_o_ai vec_stril_p(vector unsigned short __a) {
18842 #ifdef __LITTLE_ENDIAN__
18843   return __builtin_altivec_vstrihr_p(__CR6_EQ, (vector signed short)__a);
18844 #else
18845   return __builtin_altivec_vstrihl_p(__CR6_EQ, (vector signed short)__a);
18846 #endif
18847 }
18848
18849 static __inline__ int __ATTRS_o_ai vec_stril_p(vector signed short __a) {
18850 #ifdef __LITTLE_ENDIAN__
18851   return __builtin_altivec_vstrihr_p(__CR6_EQ, __a);
18852 #else
18853   return __builtin_altivec_vstrihl_p(__CR6_EQ, __a);
18854 #endif
18855 }
18856
18857 /* vec_strir */
18858
18859 static __inline__ vector unsigned char __ATTRS_o_ai
18860 vec_strir(vector unsigned char __a) {
18861 #ifdef __LITTLE_ENDIAN__
18862   return __builtin_altivec_vstribl((vector signed char)__a);
18863 #else
18864   return __builtin_altivec_vstribr((vector signed char)__a);
18865 #endif
18866 }
18867
18868 static __inline__ vector signed char __ATTRS_o_ai
18869 vec_strir(vector signed char __a) {
18870 #ifdef __LITTLE_ENDIAN__
18871   return __builtin_altivec_vstribl(__a);
18872 #else
18873   return __builtin_altivec_vstribr(__a);
18874 #endif
18875 }
18876
18877 static __inline__ vector unsigned short __ATTRS_o_ai
18878 vec_strir(vector unsigned short __a) {
18879 #ifdef __LITTLE_ENDIAN__
18880   return __builtin_altivec_vstrihl((vector signed short)__a);
18881 #else
18882   return __builtin_altivec_vstrihr((vector signed short)__a);
18883 #endif
18884 }
18885
18886 static __inline__ vector signed short __ATTRS_o_ai
18887 vec_strir(vector signed short __a) {
18888 #ifdef __LITTLE_ENDIAN__
18889   return __builtin_altivec_vstrihl(__a);
18890 #else
18891   return __builtin_altivec_vstrihr(__a);
18892 #endif
18893 }
18894
18895 /* vec_strir_p */
18896
18897 static __inline__ int __ATTRS_o_ai vec_strir_p(vector unsigned char __a) {
18898 #ifdef __LITTLE_ENDIAN__
18899   return __builtin_altivec_vstribl_p(__CR6_EQ, (vector signed char)__a);
18900 #else
18901   return __builtin_altivec_vstribr_p(__CR6_EQ, (vector signed char)__a);
18902 #endif
18903 }
18904
18905 static __inline__ int __ATTRS_o_ai vec_strir_p(vector signed char __a) {
18906 #ifdef __LITTLE_ENDIAN__
18907   return __builtin_altivec_vstribl_p(__CR6_EQ, __a);
18908 #else
18909   return __builtin_altivec_vstribr_p(__CR6_EQ, __a);
18910 #endif
18911 }
18912
18913 static __inline__ int __ATTRS_o_ai vec_strir_p(vector unsigned short __a) {
18914 #ifdef __LITTLE_ENDIAN__
18915   return __builtin_altivec_vstrihl_p(__CR6_EQ, (vector signed short)__a);
18916 #else
18917   return __builtin_altivec_vstrihr_p(__CR6_EQ, (vector signed short)__a);
18918 #endif
18919 }
18920
18921 static __inline__ int __ATTRS_o_ai vec_strir_p(vector signed short __a) {
18922 #ifdef __LITTLE_ENDIAN__
18923   return __builtin_altivec_vstrihl_p(__CR6_EQ, __a);
18924 #else
18925   return __builtin_altivec_vstrihr_p(__CR6_EQ, __a);
18926 #endif
18927 }
18928
18929 /* vs[l | r | ra] */
18930
18931 #ifdef __SIZEOF_INT128__
18932 static __inline__ vector unsigned __int128 __ATTRS_o_ai
18933 vec_sl(vector unsigned __int128 __a, vector unsigned __int128 __b) {
18934   return __a << (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
18935                                                   __CHAR_BIT__));
18936 }
18937
18938 static __inline__ vector signed __int128 __ATTRS_o_ai
18939 vec_sl(vector signed __int128 __a, vector unsigned __int128 __b) {
18940   return __a << (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
18941                                                   __CHAR_BIT__));
18942 }
18943
18944 static __inline__ vector unsigned __int128 __ATTRS_o_ai
18945 vec_sr(vector unsigned __int128 __a, vector unsigned __int128 __b) {
18946   return __a >> (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
18947                                                   __CHAR_BIT__));
18948 }
18949
18950 static __inline__ vector signed __int128 __ATTRS_o_ai
18951 vec_sr(vector signed __int128 __a, vector unsigned __int128 __b) {
18952   return (
18953       vector signed __int128)(((vector unsigned __int128)__a) >>
18954                               (__b %
18955                                (vector unsigned __int128)(sizeof(
18956                                                               unsigned __int128) *
18957                                                           __CHAR_BIT__)));
18958 }
18959
18960 static __inline__ vector unsigned __int128 __ATTRS_o_ai
18961 vec_sra(vector unsigned __int128 __a, vector unsigned __int128 __b) {
18962   return (
18963       vector unsigned __int128)(((vector signed __int128)__a) >>
18964                                 (__b %
18965                                  (vector unsigned __int128)(sizeof(
18966                                                                 unsigned __int128) *
18967                                                             __CHAR_BIT__)));
18968 }
18969
18970 static __inline__ vector signed __int128 __ATTRS_o_ai
18971 vec_sra(vector signed __int128 __a, vector unsigned __int128 __b) {
18972   return __a >> (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
18973                                                   __CHAR_BIT__));
18974 }
18975
18976 #endif /* __SIZEOF_INT128__ */
18977 #endif /* __POWER10_VECTOR__ */
18978
18979 #undef __ATTRS_o_ai
18980
18981 #endif /* __ALTIVEC_H */