zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

altivec.h (715216B) - Raw


      1 /*===---- altivec.h - Standard header for type generic math ---------------===*\
      2  *
      3  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
      4  * See https://llvm.org/LICENSE.txt for license information.
      5  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
      6  *
      7 \*===----------------------------------------------------------------------===*/
      8 
      9 #ifndef __ALTIVEC_H
     10 #define __ALTIVEC_H
     11 
     12 #ifndef __ALTIVEC__
     13 #error "AltiVec support not enabled"
     14 #endif
     15 
     16 /* Constants for mapping CR6 bits to predicate result. */
     17 
     18 #define __CR6_EQ 0
     19 #define __CR6_EQ_REV 1
     20 #define __CR6_LT 2
     21 #define __CR6_LT_REV 3
     22 #define __CR6_GT 4
     23 #define __CR6_GT_REV 5
     24 #define __CR6_SO 6
     25 #define __CR6_SO_REV 7
     26 
     27 /* Constants for vec_test_data_class */
     28 #define __VEC_CLASS_FP_SUBNORMAL_N (1 << 0)
     29 #define __VEC_CLASS_FP_SUBNORMAL_P (1 << 1)
     30 #define __VEC_CLASS_FP_SUBNORMAL (__VEC_CLASS_FP_SUBNORMAL_P | \
     31                                   __VEC_CLASS_FP_SUBNORMAL_N)
     32 #define __VEC_CLASS_FP_ZERO_N (1<<2)
     33 #define __VEC_CLASS_FP_ZERO_P (1<<3)
     34 #define __VEC_CLASS_FP_ZERO (__VEC_CLASS_FP_ZERO_P           | \
     35                              __VEC_CLASS_FP_ZERO_N)
     36 #define __VEC_CLASS_FP_INFINITY_N (1<<4)
     37 #define __VEC_CLASS_FP_INFINITY_P (1<<5)
     38 #define __VEC_CLASS_FP_INFINITY (__VEC_CLASS_FP_INFINITY_P   | \
     39                                  __VEC_CLASS_FP_INFINITY_N)
     40 #define __VEC_CLASS_FP_NAN (1<<6)
     41 #define __VEC_CLASS_FP_NOT_NORMAL (__VEC_CLASS_FP_NAN        | \
     42                                    __VEC_CLASS_FP_SUBNORMAL  | \
     43                                    __VEC_CLASS_FP_ZERO       | \
     44                                    __VEC_CLASS_FP_INFINITY)
     45 
     46 #define __ATTRS_o_ai __attribute__((__overloadable__, __always_inline__))
     47 
     48 #include <stddef.h>
     49 
     50 static __inline__ vector signed char __ATTRS_o_ai vec_perm(
     51     vector signed char __a, vector signed char __b, vector unsigned char __c);
     52 
     53 static __inline__ vector unsigned char __ATTRS_o_ai
     54 vec_perm(vector unsigned char __a, vector unsigned char __b,
     55          vector unsigned char __c);
     56 
     57 static __inline__ vector bool char __ATTRS_o_ai
     58 vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c);
     59 
     60 static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
     61                                                      vector signed short __b,
     62                                                      vector unsigned char __c);
     63 
     64 static __inline__ vector unsigned short __ATTRS_o_ai
     65 vec_perm(vector unsigned short __a, vector unsigned short __b,
     66          vector unsigned char __c);
     67 
     68 static __inline__ vector bool short __ATTRS_o_ai vec_perm(
     69     vector bool short __a, vector bool short __b, vector unsigned char __c);
     70 
     71 static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
     72                                                      vector pixel __b,
     73                                                      vector unsigned char __c);
     74 
     75 static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
     76                                                    vector signed int __b,
     77                                                    vector unsigned char __c);
     78 
     79 static __inline__ vector unsigned int __ATTRS_o_ai vec_perm(
     80     vector unsigned int __a, vector unsigned int __b, vector unsigned char __c);
     81 
     82 static __inline__ vector bool int __ATTRS_o_ai
     83 vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c);
     84 
     85 static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
     86                                                      vector float __b,
     87                                                      vector unsigned char __c);
     88 
     89 #ifdef __VSX__
     90 static __inline__ vector long long __ATTRS_o_ai
     91 vec_perm(vector signed long long __a, vector signed long long __b,
     92          vector unsigned char __c);
     93 
     94 static __inline__ vector unsigned long long __ATTRS_o_ai
     95 vec_perm(vector unsigned long long __a, vector unsigned long long __b,
     96          vector unsigned char __c);
     97 
     98 static __inline__ vector bool long long __ATTRS_o_ai
     99 vec_perm(vector bool long long __a, vector bool long long __b,
    100          vector unsigned char __c);
    101 
    102 static __inline__ vector double __ATTRS_o_ai vec_perm(vector double __a,
    103                                                       vector double __b,
    104                                                       vector unsigned char __c);
    105 #endif
    106 
    107 static __inline__ vector unsigned char __ATTRS_o_ai
    108 vec_xor(vector unsigned char __a, vector unsigned char __b);
    109 
    110 /* vec_abs */
    111 
    112 #define __builtin_altivec_abs_v16qi vec_abs
    113 #define __builtin_altivec_abs_v8hi vec_abs
    114 #define __builtin_altivec_abs_v4si vec_abs
    115 
    116 static __inline__ vector signed char __ATTRS_o_ai
    117 vec_abs(vector signed char __a) {
    118   return __builtin_altivec_vmaxsb(__a, -__a);
    119 }
    120 
    121 static __inline__ vector signed short __ATTRS_o_ai
    122 vec_abs(vector signed short __a) {
    123   return __builtin_altivec_vmaxsh(__a, -__a);
    124 }
    125 
    126 static __inline__ vector signed int __ATTRS_o_ai
    127 vec_abs(vector signed int __a) {
    128   return __builtin_altivec_vmaxsw(__a, -__a);
    129 }
    130 
    131 #ifdef __POWER8_VECTOR__
    132 static __inline__ vector signed long long __ATTRS_o_ai
    133 vec_abs(vector signed long long __a) {
    134   return __builtin_altivec_vmaxsd(__a, -__a);
    135 }
    136 #endif
    137 
    138 static __inline__ vector float __ATTRS_o_ai vec_abs(vector float __a) {
    139 #ifdef __VSX__
    140   return __builtin_vsx_xvabssp(__a);
    141 #else
    142   vector unsigned int __res =
    143       (vector unsigned int)__a & (vector unsigned int)(0x7FFFFFFF);
    144   return (vector float)__res;
    145 #endif
    146 }
    147 
    148 #ifdef __VSX__
    149 static __inline__ vector double __ATTRS_o_ai vec_abs(vector double __a) {
    150   return __builtin_vsx_xvabsdp(__a);
    151 }
    152 #endif
    153 
    154 /* vec_abss */
    155 #define __builtin_altivec_abss_v16qi vec_abss
    156 #define __builtin_altivec_abss_v8hi vec_abss
    157 #define __builtin_altivec_abss_v4si vec_abss
    158 
    159 static __inline__ vector signed char __ATTRS_o_ai
    160 vec_abss(vector signed char __a) {
    161   return __builtin_altivec_vmaxsb(
    162       __a, __builtin_altivec_vsubsbs((vector signed char)(0), __a));
    163 }
    164 
    165 static __inline__ vector signed short __ATTRS_o_ai
    166 vec_abss(vector signed short __a) {
    167   return __builtin_altivec_vmaxsh(
    168       __a, __builtin_altivec_vsubshs((vector signed short)(0), __a));
    169 }
    170 
    171 static __inline__ vector signed int __ATTRS_o_ai
    172 vec_abss(vector signed int __a) {
    173   return __builtin_altivec_vmaxsw(
    174       __a, __builtin_altivec_vsubsws((vector signed int)(0), __a));
    175 }
    176 
    177 /* vec_absd */
    178 #if defined(__POWER9_VECTOR__)
    179 
    180 static __inline__ vector unsigned char __ATTRS_o_ai
    181 vec_absd(vector unsigned char __a, vector unsigned char __b) {
    182   return __builtin_altivec_vabsdub(__a, __b);
    183 }
    184 
    185 static __inline__ vector unsigned short __ATTRS_o_ai
    186 vec_absd(vector unsigned short __a, vector unsigned short __b) {
    187   return __builtin_altivec_vabsduh(__a, __b);
    188 }
    189 
    190 static __inline__ vector unsigned int __ATTRS_o_ai
    191 vec_absd(vector unsigned int __a,  vector unsigned int __b) {
    192   return __builtin_altivec_vabsduw(__a, __b);
    193 }
    194 
    195 #endif /* End __POWER9_VECTOR__ */
    196 
    197 /* vec_add */
    198 
    199 static __inline__ vector signed char __ATTRS_o_ai
    200 vec_add(vector signed char __a, vector signed char __b) {
    201   return __a + __b;
    202 }
    203 
    204 static __inline__ vector signed char __ATTRS_o_ai
    205 vec_add(vector bool char __a, vector signed char __b) {
    206   return (vector signed char)__a + __b;
    207 }
    208 
    209 static __inline__ vector signed char __ATTRS_o_ai
    210 vec_add(vector signed char __a, vector bool char __b) {
    211   return __a + (vector signed char)__b;
    212 }
    213 
    214 static __inline__ vector unsigned char __ATTRS_o_ai
    215 vec_add(vector unsigned char __a, vector unsigned char __b) {
    216   return __a + __b;
    217 }
    218 
    219 static __inline__ vector unsigned char __ATTRS_o_ai
    220 vec_add(vector bool char __a, vector unsigned char __b) {
    221   return (vector unsigned char)__a + __b;
    222 }
    223 
    224 static __inline__ vector unsigned char __ATTRS_o_ai
    225 vec_add(vector unsigned char __a, vector bool char __b) {
    226   return __a + (vector unsigned char)__b;
    227 }
    228 
    229 static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
    230                                                     vector short __b) {
    231   return __a + __b;
    232 }
    233 
    234 static __inline__ vector short __ATTRS_o_ai vec_add(vector bool short __a,
    235                                                     vector short __b) {
    236   return (vector short)__a + __b;
    237 }
    238 
    239 static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
    240                                                     vector bool short __b) {
    241   return __a + (vector short)__b;
    242 }
    243 
    244 static __inline__ vector unsigned short __ATTRS_o_ai
    245 vec_add(vector unsigned short __a, vector unsigned short __b) {
    246   return __a + __b;
    247 }
    248 
    249 static __inline__ vector unsigned short __ATTRS_o_ai
    250 vec_add(vector bool short __a, vector unsigned short __b) {
    251   return (vector unsigned short)__a + __b;
    252 }
    253 
    254 static __inline__ vector unsigned short __ATTRS_o_ai
    255 vec_add(vector unsigned short __a, vector bool short __b) {
    256   return __a + (vector unsigned short)__b;
    257 }
    258 
    259 static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
    260                                                   vector int __b) {
    261   return __a + __b;
    262 }
    263 
    264 static __inline__ vector int __ATTRS_o_ai vec_add(vector bool int __a,
    265                                                   vector int __b) {
    266   return (vector int)__a + __b;
    267 }
    268 
    269 static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
    270                                                   vector bool int __b) {
    271   return __a + (vector int)__b;
    272 }
    273 
    274 static __inline__ vector unsigned int __ATTRS_o_ai
    275 vec_add(vector unsigned int __a, vector unsigned int __b) {
    276   return __a + __b;
    277 }
    278 
    279 static __inline__ vector unsigned int __ATTRS_o_ai
    280 vec_add(vector bool int __a, vector unsigned int __b) {
    281   return (vector unsigned int)__a + __b;
    282 }
    283 
    284 static __inline__ vector unsigned int __ATTRS_o_ai
    285 vec_add(vector unsigned int __a, vector bool int __b) {
    286   return __a + (vector unsigned int)__b;
    287 }
    288 
    289 #ifdef __POWER8_VECTOR__
    290 static __inline__ vector signed long long __ATTRS_o_ai
    291 vec_add(vector signed long long __a, vector signed long long __b) {
    292   return __a + __b;
    293 }
    294 
    295 static __inline__ vector unsigned long long __ATTRS_o_ai
    296 vec_add(vector unsigned long long __a, vector unsigned long long __b) {
    297   return __a + __b;
    298 }
    299 
    300 #ifdef __SIZEOF_INT128__
    301 static __inline__ vector signed __int128 __ATTRS_o_ai
    302 vec_add(vector signed __int128 __a, vector signed __int128 __b) {
    303   return __a + __b;
    304 }
    305 
    306 static __inline__ vector unsigned __int128 __ATTRS_o_ai
    307 vec_add(vector unsigned __int128 __a, vector unsigned __int128 __b) {
    308   return __a + __b;
    309 }
    310 #endif
    311 
    312 static __inline__ vector unsigned char __attribute__((__always_inline__))
    313 vec_add_u128(vector unsigned char __a, vector unsigned char __b) {
    314   return (vector unsigned char)__builtin_altivec_vadduqm(__a, __b);
    315 }
    316 #elif defined(__VSX__)
    317 static __inline__ vector signed long long __ATTRS_o_ai
    318 vec_add(vector signed long long __a, vector signed long long __b) {
    319 #ifdef __LITTLE_ENDIAN__
    320   // Little endian systems on CPU's prior to Power8 don't really exist
    321   // so scalarizing is fine.
    322   return __a + __b;
    323 #else
    324   vector unsigned int __res =
    325       (vector unsigned int)__a + (vector unsigned int)__b;
    326   vector unsigned int __carry = __builtin_altivec_vaddcuw(
    327       (vector unsigned int)__a, (vector unsigned int)__b);
    328   __carry = (vector unsigned int)__builtin_shufflevector(
    329       (vector unsigned char)__carry, (vector unsigned char)__carry, 0, 0, 0, 7,
    330       0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0);
    331   return (vector signed long long)(__res + __carry);
    332 #endif
    333 }
    334 
    335 static __inline__ vector unsigned long long __ATTRS_o_ai
    336 vec_add(vector unsigned long long __a, vector unsigned long long __b) {
    337   return (vector unsigned long long)vec_add((vector signed long long)__a,
    338                                             (vector signed long long)__b);
    339 }
    340 #endif // __POWER8_VECTOR__
    341 
    342 static __inline__ vector float __ATTRS_o_ai vec_add(vector float __a,
    343                                                     vector float __b) {
    344   return __a + __b;
    345 }
    346 
    347 #ifdef __VSX__
    348 static __inline__ vector double __ATTRS_o_ai vec_add(vector double __a,
    349                                                      vector double __b) {
    350   return __a + __b;
    351 }
    352 #endif // __VSX__
    353 
    354 /* vec_adde */
    355 
    356 #ifdef __POWER8_VECTOR__
    357 #ifdef __SIZEOF_INT128__
    358 static __inline__ vector signed __int128 __ATTRS_o_ai
    359 vec_adde(vector signed __int128 __a, vector signed __int128 __b,
    360          vector signed __int128 __c) {
    361   return (vector signed __int128)__builtin_altivec_vaddeuqm(
    362       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
    363       (vector unsigned __int128)__c);
    364 }
    365 
    366 static __inline__ vector unsigned __int128 __ATTRS_o_ai
    367 vec_adde(vector unsigned __int128 __a, vector unsigned __int128 __b,
    368          vector unsigned __int128 __c) {
    369   return __builtin_altivec_vaddeuqm(__a, __b, __c);
    370 }
    371 #endif
    372 
    373 static __inline__ vector unsigned char __attribute__((__always_inline__))
    374 vec_adde_u128(vector unsigned char __a, vector unsigned char __b,
    375               vector unsigned char __c) {
    376   return (vector unsigned char)__builtin_altivec_vaddeuqm_c(
    377       (vector unsigned char)__a, (vector unsigned char)__b,
    378       (vector unsigned char)__c);
    379 }
    380 #endif
    381 
    382 static __inline__ vector signed int __ATTRS_o_ai
    383 vec_adde(vector signed int __a, vector signed int __b,
    384          vector signed int __c) {
    385   vector signed int __mask = {1, 1, 1, 1};
    386   vector signed int __carry = __c & __mask;
    387   return vec_add(vec_add(__a, __b), __carry);
    388 }
    389 
    390 static __inline__ vector unsigned int __ATTRS_o_ai
    391 vec_adde(vector unsigned int __a, vector unsigned int __b,
    392          vector unsigned int __c) {
    393   vector unsigned int __mask = {1, 1, 1, 1};
    394   vector unsigned int __carry = __c & __mask;
    395   return vec_add(vec_add(__a, __b), __carry);
    396 }
    397 
    398 /* vec_addec */
    399 
    400 #ifdef __POWER8_VECTOR__
    401 #ifdef __SIZEOF_INT128__
    402 static __inline__ vector signed __int128 __ATTRS_o_ai
    403 vec_addec(vector signed __int128 __a, vector signed __int128 __b,
    404           vector signed __int128 __c) {
    405   return (vector signed __int128)__builtin_altivec_vaddecuq(
    406       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
    407       (vector unsigned __int128)__c);
    408 }
    409 
    410 static __inline__ vector unsigned __int128 __ATTRS_o_ai
    411 vec_addec(vector unsigned __int128 __a, vector unsigned __int128 __b,
    412           vector unsigned __int128 __c) {
    413   return __builtin_altivec_vaddecuq(__a, __b, __c);
    414 }
    415 #endif
    416 
    417 static __inline__ vector unsigned char __attribute__((__always_inline__))
    418 vec_addec_u128(vector unsigned char __a, vector unsigned char __b,
    419                vector unsigned char __c) {
    420   return (vector unsigned char)__builtin_altivec_vaddecuq_c(
    421       (vector unsigned char)__a, (vector unsigned char)__b,
    422       (vector unsigned char)__c);
    423 }
    424 
    425 #ifdef __powerpc64__
    426 static __inline__ vector signed int __ATTRS_o_ai
    427 vec_addec(vector signed int __a, vector signed int __b,
    428           vector signed int __c) {
    429 
    430   signed int __result[4];
    431   for (int i = 0; i < 4; i++) {
    432     unsigned int __tempa = (unsigned int) __a[i];
    433     unsigned int __tempb = (unsigned int) __b[i];
    434     unsigned int __tempc = (unsigned int) __c[i];
    435     __tempc = __tempc & 0x00000001;
    436     unsigned long long __longa = (unsigned long long) __tempa;
    437     unsigned long long __longb = (unsigned long long) __tempb;
    438     unsigned long long __longc = (unsigned long long) __tempc;
    439     unsigned long long __sum = __longa + __longb + __longc;
    440     unsigned long long __res = (__sum >> 32) & 0x01;
    441     unsigned long long __tempres = (unsigned int) __res;
    442     __result[i] = (signed int) __tempres;
    443   }
    444 
    445   vector signed int ret = { __result[0], __result[1], __result[2], __result[3] };
    446   return ret;
    447 }
    448 
    449 static __inline__ vector unsigned int __ATTRS_o_ai
    450 vec_addec(vector unsigned int __a, vector unsigned int __b,
    451           vector unsigned int __c) {
    452 
    453   unsigned int __result[4];
    454   for (int i = 0; i < 4; i++) {
    455     unsigned int __tempc = __c[i] & 1;
    456     unsigned long long __longa = (unsigned long long) __a[i];
    457     unsigned long long __longb = (unsigned long long) __b[i];
    458     unsigned long long __longc = (unsigned long long) __tempc;
    459     unsigned long long __sum = __longa + __longb + __longc;
    460     unsigned long long __res = (__sum >> 32) & 0x01;
    461     unsigned long long __tempres = (unsigned int) __res;
    462     __result[i] = (signed int) __tempres;
    463   }
    464 
    465   vector unsigned int ret = { __result[0], __result[1], __result[2], __result[3] };
    466   return ret;
    467 }
    468 #endif // __powerpc64__
    469 #endif // __POWER8_VECTOR__
    470 
    471 /* vec_vaddubm */
    472 
    473 #define __builtin_altivec_vaddubm vec_vaddubm
    474 
    475 static __inline__ vector signed char __ATTRS_o_ai
    476 vec_vaddubm(vector signed char __a, vector signed char __b) {
    477   return __a + __b;
    478 }
    479 
    480 static __inline__ vector signed char __ATTRS_o_ai
    481 vec_vaddubm(vector bool char __a, vector signed char __b) {
    482   return (vector signed char)__a + __b;
    483 }
    484 
    485 static __inline__ vector signed char __ATTRS_o_ai
    486 vec_vaddubm(vector signed char __a, vector bool char __b) {
    487   return __a + (vector signed char)__b;
    488 }
    489 
    490 static __inline__ vector unsigned char __ATTRS_o_ai
    491 vec_vaddubm(vector unsigned char __a, vector unsigned char __b) {
    492   return __a + __b;
    493 }
    494 
    495 static __inline__ vector unsigned char __ATTRS_o_ai
    496 vec_vaddubm(vector bool char __a, vector unsigned char __b) {
    497   return (vector unsigned char)__a + __b;
    498 }
    499 
    500 static __inline__ vector unsigned char __ATTRS_o_ai
    501 vec_vaddubm(vector unsigned char __a, vector bool char __b) {
    502   return __a + (vector unsigned char)__b;
    503 }
    504 
    505 /* vec_vadduhm */
    506 
    507 #define __builtin_altivec_vadduhm vec_vadduhm
    508 
    509 static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
    510                                                         vector short __b) {
    511   return __a + __b;
    512 }
    513 
    514 static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector bool short __a,
    515                                                         vector short __b) {
    516   return (vector short)__a + __b;
    517 }
    518 
    519 static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
    520                                                         vector bool short __b) {
    521   return __a + (vector short)__b;
    522 }
    523 
    524 static __inline__ vector unsigned short __ATTRS_o_ai
    525 vec_vadduhm(vector unsigned short __a, vector unsigned short __b) {
    526   return __a + __b;
    527 }
    528 
    529 static __inline__ vector unsigned short __ATTRS_o_ai
    530 vec_vadduhm(vector bool short __a, vector unsigned short __b) {
    531   return (vector unsigned short)__a + __b;
    532 }
    533 
    534 static __inline__ vector unsigned short __ATTRS_o_ai
    535 vec_vadduhm(vector unsigned short __a, vector bool short __b) {
    536   return __a + (vector unsigned short)__b;
    537 }
    538 
    539 /* vec_vadduwm */
    540 
    541 #define __builtin_altivec_vadduwm vec_vadduwm
    542 
    543 static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
    544                                                       vector int __b) {
    545   return __a + __b;
    546 }
    547 
    548 static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector bool int __a,
    549                                                       vector int __b) {
    550   return (vector int)__a + __b;
    551 }
    552 
    553 static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
    554                                                       vector bool int __b) {
    555   return __a + (vector int)__b;
    556 }
    557 
    558 static __inline__ vector unsigned int __ATTRS_o_ai
    559 vec_vadduwm(vector unsigned int __a, vector unsigned int __b) {
    560   return __a + __b;
    561 }
    562 
    563 static __inline__ vector unsigned int __ATTRS_o_ai
    564 vec_vadduwm(vector bool int __a, vector unsigned int __b) {
    565   return (vector unsigned int)__a + __b;
    566 }
    567 
    568 static __inline__ vector unsigned int __ATTRS_o_ai
    569 vec_vadduwm(vector unsigned int __a, vector bool int __b) {
    570   return __a + (vector unsigned int)__b;
    571 }
    572 
    573 /* vec_vaddfp */
    574 
    575 #define __builtin_altivec_vaddfp vec_vaddfp
    576 
    577 static __inline__ vector float __attribute__((__always_inline__))
    578 vec_vaddfp(vector float __a, vector float __b) {
    579   return __a + __b;
    580 }
    581 
    582 /* vec_addc */
    583 
    584 static __inline__ vector signed int __ATTRS_o_ai
    585 vec_addc(vector signed int __a, vector signed int __b) {
    586   return (vector signed int)__builtin_altivec_vaddcuw((vector unsigned int)__a,
    587                                                       (vector unsigned int)__b);
    588 }
    589 
    590 static __inline__ vector unsigned int __ATTRS_o_ai
    591 vec_addc(vector unsigned int __a, vector unsigned int __b) {
    592   return __builtin_altivec_vaddcuw(__a, __b);
    593 }
    594 
    595 #ifdef __POWER8_VECTOR__
    596 #ifdef __SIZEOF_INT128__
    597 static __inline__ vector signed __int128 __ATTRS_o_ai
    598 vec_addc(vector signed __int128 __a, vector signed __int128 __b) {
    599   return (vector signed __int128)__builtin_altivec_vaddcuq(
    600       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
    601 }
    602 
    603 static __inline__ vector unsigned __int128 __ATTRS_o_ai
    604 vec_addc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
    605   return __builtin_altivec_vaddcuq(__a, __b);
    606 }
    607 #endif
    608 
    609 static __inline__ vector unsigned char __attribute__((__always_inline__))
    610 vec_addc_u128(vector unsigned char __a, vector unsigned char __b) {
    611   return (vector unsigned char)__builtin_altivec_vaddcuq_c(
    612       (vector unsigned char)__a, (vector unsigned char)__b);
    613 }
    614 #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
    615 
    616 /* vec_vaddcuw */
    617 
    618 static __inline__ vector unsigned int __attribute__((__always_inline__))
    619 vec_vaddcuw(vector unsigned int __a, vector unsigned int __b) {
    620   return __builtin_altivec_vaddcuw(__a, __b);
    621 }
    622 
    623 /* vec_adds */
    624 
    625 static __inline__ vector signed char __ATTRS_o_ai
    626 vec_adds(vector signed char __a, vector signed char __b) {
    627   return __builtin_altivec_vaddsbs(__a, __b);
    628 }
    629 
    630 static __inline__ vector signed char __ATTRS_o_ai
    631 vec_adds(vector bool char __a, vector signed char __b) {
    632   return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
    633 }
    634 
    635 static __inline__ vector signed char __ATTRS_o_ai
    636 vec_adds(vector signed char __a, vector bool char __b) {
    637   return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
    638 }
    639 
    640 static __inline__ vector unsigned char __ATTRS_o_ai
    641 vec_adds(vector unsigned char __a, vector unsigned char __b) {
    642   return __builtin_altivec_vaddubs(__a, __b);
    643 }
    644 
    645 static __inline__ vector unsigned char __ATTRS_o_ai
    646 vec_adds(vector bool char __a, vector unsigned char __b) {
    647   return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
    648 }
    649 
    650 static __inline__ vector unsigned char __ATTRS_o_ai
    651 vec_adds(vector unsigned char __a, vector bool char __b) {
    652   return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
    653 }
    654 
    655 static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
    656                                                      vector short __b) {
    657   return __builtin_altivec_vaddshs(__a, __b);
    658 }
    659 
    660 static __inline__ vector short __ATTRS_o_ai vec_adds(vector bool short __a,
    661                                                      vector short __b) {
    662   return __builtin_altivec_vaddshs((vector short)__a, __b);
    663 }
    664 
    665 static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
    666                                                      vector bool short __b) {
    667   return __builtin_altivec_vaddshs(__a, (vector short)__b);
    668 }
    669 
    670 static __inline__ vector unsigned short __ATTRS_o_ai
    671 vec_adds(vector unsigned short __a, vector unsigned short __b) {
    672   return __builtin_altivec_vadduhs(__a, __b);
    673 }
    674 
    675 static __inline__ vector unsigned short __ATTRS_o_ai
    676 vec_adds(vector bool short __a, vector unsigned short __b) {
    677   return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
    678 }
    679 
    680 static __inline__ vector unsigned short __ATTRS_o_ai
    681 vec_adds(vector unsigned short __a, vector bool short __b) {
    682   return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
    683 }
    684 
    685 static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
    686                                                    vector int __b) {
    687   return __builtin_altivec_vaddsws(__a, __b);
    688 }
    689 
    690 static __inline__ vector int __ATTRS_o_ai vec_adds(vector bool int __a,
    691                                                    vector int __b) {
    692   return __builtin_altivec_vaddsws((vector int)__a, __b);
    693 }
    694 
    695 static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
    696                                                    vector bool int __b) {
    697   return __builtin_altivec_vaddsws(__a, (vector int)__b);
    698 }
    699 
    700 static __inline__ vector unsigned int __ATTRS_o_ai
    701 vec_adds(vector unsigned int __a, vector unsigned int __b) {
    702   return __builtin_altivec_vadduws(__a, __b);
    703 }
    704 
    705 static __inline__ vector unsigned int __ATTRS_o_ai
    706 vec_adds(vector bool int __a, vector unsigned int __b) {
    707   return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
    708 }
    709 
    710 static __inline__ vector unsigned int __ATTRS_o_ai
    711 vec_adds(vector unsigned int __a, vector bool int __b) {
    712   return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
    713 }
    714 
    715 /* vec_vaddsbs */
    716 
    717 static __inline__ vector signed char __ATTRS_o_ai
    718 vec_vaddsbs(vector signed char __a, vector signed char __b) {
    719   return __builtin_altivec_vaddsbs(__a, __b);
    720 }
    721 
    722 static __inline__ vector signed char __ATTRS_o_ai
    723 vec_vaddsbs(vector bool char __a, vector signed char __b) {
    724   return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
    725 }
    726 
    727 static __inline__ vector signed char __ATTRS_o_ai
    728 vec_vaddsbs(vector signed char __a, vector bool char __b) {
    729   return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
    730 }
    731 
    732 /* vec_vaddubs */
    733 
    734 static __inline__ vector unsigned char __ATTRS_o_ai
    735 vec_vaddubs(vector unsigned char __a, vector unsigned char __b) {
    736   return __builtin_altivec_vaddubs(__a, __b);
    737 }
    738 
    739 static __inline__ vector unsigned char __ATTRS_o_ai
    740 vec_vaddubs(vector bool char __a, vector unsigned char __b) {
    741   return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
    742 }
    743 
    744 static __inline__ vector unsigned char __ATTRS_o_ai
    745 vec_vaddubs(vector unsigned char __a, vector bool char __b) {
    746   return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
    747 }
    748 
    749 /* vec_vaddshs */
    750 
    751 static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
    752                                                         vector short __b) {
    753   return __builtin_altivec_vaddshs(__a, __b);
    754 }
    755 
    756 static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector bool short __a,
    757                                                         vector short __b) {
    758   return __builtin_altivec_vaddshs((vector short)__a, __b);
    759 }
    760 
    761 static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
    762                                                         vector bool short __b) {
    763   return __builtin_altivec_vaddshs(__a, (vector short)__b);
    764 }
    765 
    766 /* vec_vadduhs */
    767 
    768 static __inline__ vector unsigned short __ATTRS_o_ai
    769 vec_vadduhs(vector unsigned short __a, vector unsigned short __b) {
    770   return __builtin_altivec_vadduhs(__a, __b);
    771 }
    772 
    773 static __inline__ vector unsigned short __ATTRS_o_ai
    774 vec_vadduhs(vector bool short __a, vector unsigned short __b) {
    775   return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
    776 }
    777 
    778 static __inline__ vector unsigned short __ATTRS_o_ai
    779 vec_vadduhs(vector unsigned short __a, vector bool short __b) {
    780   return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
    781 }
    782 
    783 /* vec_vaddsws */
    784 
    785 static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
    786                                                       vector int __b) {
    787   return __builtin_altivec_vaddsws(__a, __b);
    788 }
    789 
    790 static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector bool int __a,
    791                                                       vector int __b) {
    792   return __builtin_altivec_vaddsws((vector int)__a, __b);
    793 }
    794 
    795 static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
    796                                                       vector bool int __b) {
    797   return __builtin_altivec_vaddsws(__a, (vector int)__b);
    798 }
    799 
    800 /* vec_vadduws */
    801 
    802 static __inline__ vector unsigned int __ATTRS_o_ai
    803 vec_vadduws(vector unsigned int __a, vector unsigned int __b) {
    804   return __builtin_altivec_vadduws(__a, __b);
    805 }
    806 
    807 static __inline__ vector unsigned int __ATTRS_o_ai
    808 vec_vadduws(vector bool int __a, vector unsigned int __b) {
    809   return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
    810 }
    811 
    812 static __inline__ vector unsigned int __ATTRS_o_ai
    813 vec_vadduws(vector unsigned int __a, vector bool int __b) {
    814   return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
    815 }
    816 
    817 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
    818     defined(__SIZEOF_INT128__)
    819 /* vec_vadduqm */
    820 
    821 static __inline__ vector signed __int128 __ATTRS_o_ai
    822 vec_vadduqm(vector signed __int128 __a, vector signed __int128 __b) {
    823   return __a + __b;
    824 }
    825 
    826 static __inline__ vector unsigned __int128 __ATTRS_o_ai
    827 vec_vadduqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
    828   return __a + __b;
    829 }
    830 
    831 /* vec_vaddeuqm */
    832 
    833 static __inline__ vector signed __int128 __ATTRS_o_ai
    834 vec_vaddeuqm(vector signed __int128 __a, vector signed __int128 __b,
    835              vector signed __int128 __c) {
    836   return (vector signed __int128)__builtin_altivec_vaddeuqm(
    837       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
    838       (vector unsigned __int128)__c);
    839 }
    840 
    841 static __inline__ vector unsigned __int128 __ATTRS_o_ai
    842 vec_vaddeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
    843              vector unsigned __int128 __c) {
    844   return __builtin_altivec_vaddeuqm(__a, __b, __c);
    845 }
    846 
    847 /* vec_vaddcuq */
    848 
    849 static __inline__ vector signed __int128 __ATTRS_o_ai
    850 vec_vaddcuq(vector signed __int128 __a, vector signed __int128 __b) {
    851   return (vector signed __int128)__builtin_altivec_vaddcuq(
    852       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
    853 }
    854 
    855 static __inline__ vector unsigned __int128 __ATTRS_o_ai
    856 vec_vaddcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
    857   return __builtin_altivec_vaddcuq(__a, __b);
    858 }
    859 
    860 /* vec_vaddecuq */
    861 
    862 static __inline__ vector signed __int128 __ATTRS_o_ai
    863 vec_vaddecuq(vector signed __int128 __a, vector signed __int128 __b,
    864              vector signed __int128 __c) {
    865   return (vector signed __int128)__builtin_altivec_vaddecuq(
    866       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
    867       (vector unsigned __int128)__c);
    868 }
    869 
    870 static __inline__ vector unsigned __int128 __ATTRS_o_ai
    871 vec_vaddecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
    872              vector unsigned __int128 __c) {
    873   return __builtin_altivec_vaddecuq(__a, __b, __c);
    874 }
    875 #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
    876 
    877 /* vec_and */
    878 
    879 #define __builtin_altivec_vand vec_and
    880 
    881 static __inline__ vector signed char __ATTRS_o_ai
    882 vec_and(vector signed char __a, vector signed char __b) {
    883   return __a & __b;
    884 }
    885 
    886 static __inline__ vector signed char __ATTRS_o_ai
    887 vec_and(vector bool char __a, vector signed char __b) {
    888   return (vector signed char)__a & __b;
    889 }
    890 
    891 static __inline__ vector signed char __ATTRS_o_ai
    892 vec_and(vector signed char __a, vector bool char __b) {
    893   return __a & (vector signed char)__b;
    894 }
    895 
    896 static __inline__ vector unsigned char __ATTRS_o_ai
    897 vec_and(vector unsigned char __a, vector unsigned char __b) {
    898   return __a & __b;
    899 }
    900 
    901 static __inline__ vector unsigned char __ATTRS_o_ai
    902 vec_and(vector bool char __a, vector unsigned char __b) {
    903   return (vector unsigned char)__a & __b;
    904 }
    905 
    906 static __inline__ vector unsigned char __ATTRS_o_ai
    907 vec_and(vector unsigned char __a, vector bool char __b) {
    908   return __a & (vector unsigned char)__b;
    909 }
    910 
    911 static __inline__ vector bool char __ATTRS_o_ai vec_and(vector bool char __a,
    912                                                         vector bool char __b) {
    913   return __a & __b;
    914 }
    915 
    916 static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
    917                                                     vector short __b) {
    918   return __a & __b;
    919 }
    920 
    921 static __inline__ vector short __ATTRS_o_ai vec_and(vector bool short __a,
    922                                                     vector short __b) {
    923   return (vector short)__a & __b;
    924 }
    925 
    926 static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
    927                                                     vector bool short __b) {
    928   return __a & (vector short)__b;
    929 }
    930 
    931 static __inline__ vector unsigned short __ATTRS_o_ai
    932 vec_and(vector unsigned short __a, vector unsigned short __b) {
    933   return __a & __b;
    934 }
    935 
    936 static __inline__ vector unsigned short __ATTRS_o_ai
    937 vec_and(vector bool short __a, vector unsigned short __b) {
    938   return (vector unsigned short)__a & __b;
    939 }
    940 
    941 static __inline__ vector unsigned short __ATTRS_o_ai
    942 vec_and(vector unsigned short __a, vector bool short __b) {
    943   return __a & (vector unsigned short)__b;
    944 }
    945 
    946 static __inline__ vector bool short __ATTRS_o_ai
    947 vec_and(vector bool short __a, vector bool short __b) {
    948   return __a & __b;
    949 }
    950 
    951 static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
    952                                                   vector int __b) {
    953   return __a & __b;
    954 }
    955 
    956 static __inline__ vector int __ATTRS_o_ai vec_and(vector bool int __a,
    957                                                   vector int __b) {
    958   return (vector int)__a & __b;
    959 }
    960 
    961 static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
    962                                                   vector bool int __b) {
    963   return __a & (vector int)__b;
    964 }
    965 
    966 static __inline__ vector unsigned int __ATTRS_o_ai
    967 vec_and(vector unsigned int __a, vector unsigned int __b) {
    968   return __a & __b;
    969 }
    970 
    971 static __inline__ vector unsigned int __ATTRS_o_ai
    972 vec_and(vector bool int __a, vector unsigned int __b) {
    973   return (vector unsigned int)__a & __b;
    974 }
    975 
    976 static __inline__ vector unsigned int __ATTRS_o_ai
    977 vec_and(vector unsigned int __a, vector bool int __b) {
    978   return __a & (vector unsigned int)__b;
    979 }
    980 
    981 static __inline__ vector bool int __ATTRS_o_ai vec_and(vector bool int __a,
    982                                                        vector bool int __b) {
    983   return __a & __b;
    984 }
    985 
    986 static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
    987                                                     vector float __b) {
    988   vector unsigned int __res =
    989       (vector unsigned int)__a & (vector unsigned int)__b;
    990   return (vector float)__res;
    991 }
    992 
    993 static __inline__ vector float __ATTRS_o_ai vec_and(vector bool int __a,
    994                                                     vector float __b) {
    995   vector unsigned int __res =
    996       (vector unsigned int)__a & (vector unsigned int)__b;
    997   return (vector float)__res;
    998 }
    999 
   1000 static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
   1001                                                     vector bool int __b) {
   1002   vector unsigned int __res =
   1003       (vector unsigned int)__a & (vector unsigned int)__b;
   1004   return (vector float)__res;
   1005 }
   1006 
   1007 #ifdef __VSX__
   1008 static __inline__ vector double __ATTRS_o_ai vec_and(vector bool long long __a,
   1009                                                      vector double __b) {
   1010   vector unsigned long long __res =
   1011       (vector unsigned long long)__a & (vector unsigned long long)__b;
   1012   return (vector double)__res;
   1013 }
   1014 
   1015 static __inline__ vector double __ATTRS_o_ai
   1016 vec_and(vector double __a, vector bool long long __b) {
   1017   vector unsigned long long __res =
   1018       (vector unsigned long long)__a & (vector unsigned long long)__b;
   1019   return (vector double)__res;
   1020 }
   1021 
   1022 static __inline__ vector double __ATTRS_o_ai vec_and(vector double __a,
   1023                                                      vector double __b) {
   1024   vector unsigned long long __res =
   1025       (vector unsigned long long)__a & (vector unsigned long long)__b;
   1026   return (vector double)__res;
   1027 }
   1028 
   1029 static __inline__ vector signed long long __ATTRS_o_ai
   1030 vec_and(vector signed long long __a, vector signed long long __b) {
   1031   return __a & __b;
   1032 }
   1033 
   1034 static __inline__ vector signed long long __ATTRS_o_ai
   1035 vec_and(vector bool long long __a, vector signed long long __b) {
   1036   return (vector signed long long)__a & __b;
   1037 }
   1038 
   1039 static __inline__ vector signed long long __ATTRS_o_ai
   1040 vec_and(vector signed long long __a, vector bool long long __b) {
   1041   return __a & (vector signed long long)__b;
   1042 }
   1043 
   1044 static __inline__ vector unsigned long long __ATTRS_o_ai
   1045 vec_and(vector unsigned long long __a, vector unsigned long long __b) {
   1046   return __a & __b;
   1047 }
   1048 
   1049 static __inline__ vector unsigned long long __ATTRS_o_ai
   1050 vec_and(vector bool long long __a, vector unsigned long long __b) {
   1051   return (vector unsigned long long)__a & __b;
   1052 }
   1053 
   1054 static __inline__ vector unsigned long long __ATTRS_o_ai
   1055 vec_and(vector unsigned long long __a, vector bool long long __b) {
   1056   return __a & (vector unsigned long long)__b;
   1057 }
   1058 
   1059 static __inline__ vector bool long long __ATTRS_o_ai
   1060 vec_and(vector bool long long __a, vector bool long long __b) {
   1061   return __a & __b;
   1062 }
   1063 #endif
   1064 
   1065 /* vec_vand */
   1066 
   1067 static __inline__ vector signed char __ATTRS_o_ai
   1068 vec_vand(vector signed char __a, vector signed char __b) {
   1069   return __a & __b;
   1070 }
   1071 
   1072 static __inline__ vector signed char __ATTRS_o_ai
   1073 vec_vand(vector bool char __a, vector signed char __b) {
   1074   return (vector signed char)__a & __b;
   1075 }
   1076 
   1077 static __inline__ vector signed char __ATTRS_o_ai
   1078 vec_vand(vector signed char __a, vector bool char __b) {
   1079   return __a & (vector signed char)__b;
   1080 }
   1081 
   1082 static __inline__ vector unsigned char __ATTRS_o_ai
   1083 vec_vand(vector unsigned char __a, vector unsigned char __b) {
   1084   return __a & __b;
   1085 }
   1086 
   1087 static __inline__ vector unsigned char __ATTRS_o_ai
   1088 vec_vand(vector bool char __a, vector unsigned char __b) {
   1089   return (vector unsigned char)__a & __b;
   1090 }
   1091 
   1092 static __inline__ vector unsigned char __ATTRS_o_ai
   1093 vec_vand(vector unsigned char __a, vector bool char __b) {
   1094   return __a & (vector unsigned char)__b;
   1095 }
   1096 
   1097 static __inline__ vector bool char __ATTRS_o_ai vec_vand(vector bool char __a,
   1098                                                          vector bool char __b) {
   1099   return __a & __b;
   1100 }
   1101 
   1102 static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
   1103                                                      vector short __b) {
   1104   return __a & __b;
   1105 }
   1106 
   1107 static __inline__ vector short __ATTRS_o_ai vec_vand(vector bool short __a,
   1108                                                      vector short __b) {
   1109   return (vector short)__a & __b;
   1110 }
   1111 
   1112 static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
   1113                                                      vector bool short __b) {
   1114   return __a & (vector short)__b;
   1115 }
   1116 
   1117 static __inline__ vector unsigned short __ATTRS_o_ai
   1118 vec_vand(vector unsigned short __a, vector unsigned short __b) {
   1119   return __a & __b;
   1120 }
   1121 
   1122 static __inline__ vector unsigned short __ATTRS_o_ai
   1123 vec_vand(vector bool short __a, vector unsigned short __b) {
   1124   return (vector unsigned short)__a & __b;
   1125 }
   1126 
   1127 static __inline__ vector unsigned short __ATTRS_o_ai
   1128 vec_vand(vector unsigned short __a, vector bool short __b) {
   1129   return __a & (vector unsigned short)__b;
   1130 }
   1131 
   1132 static __inline__ vector bool short __ATTRS_o_ai
   1133 vec_vand(vector bool short __a, vector bool short __b) {
   1134   return __a & __b;
   1135 }
   1136 
   1137 static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
   1138                                                    vector int __b) {
   1139   return __a & __b;
   1140 }
   1141 
   1142 static __inline__ vector int __ATTRS_o_ai vec_vand(vector bool int __a,
   1143                                                    vector int __b) {
   1144   return (vector int)__a & __b;
   1145 }
   1146 
   1147 static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
   1148                                                    vector bool int __b) {
   1149   return __a & (vector int)__b;
   1150 }
   1151 
   1152 static __inline__ vector unsigned int __ATTRS_o_ai
   1153 vec_vand(vector unsigned int __a, vector unsigned int __b) {
   1154   return __a & __b;
   1155 }
   1156 
   1157 static __inline__ vector unsigned int __ATTRS_o_ai
   1158 vec_vand(vector bool int __a, vector unsigned int __b) {
   1159   return (vector unsigned int)__a & __b;
   1160 }
   1161 
   1162 static __inline__ vector unsigned int __ATTRS_o_ai
   1163 vec_vand(vector unsigned int __a, vector bool int __b) {
   1164   return __a & (vector unsigned int)__b;
   1165 }
   1166 
   1167 static __inline__ vector bool int __ATTRS_o_ai vec_vand(vector bool int __a,
   1168                                                         vector bool int __b) {
   1169   return __a & __b;
   1170 }
   1171 
   1172 static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
   1173                                                      vector float __b) {
   1174   vector unsigned int __res =
   1175       (vector unsigned int)__a & (vector unsigned int)__b;
   1176   return (vector float)__res;
   1177 }
   1178 
   1179 static __inline__ vector float __ATTRS_o_ai vec_vand(vector bool int __a,
   1180                                                      vector float __b) {
   1181   vector unsigned int __res =
   1182       (vector unsigned int)__a & (vector unsigned int)__b;
   1183   return (vector float)__res;
   1184 }
   1185 
   1186 static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
   1187                                                      vector bool int __b) {
   1188   vector unsigned int __res =
   1189       (vector unsigned int)__a & (vector unsigned int)__b;
   1190   return (vector float)__res;
   1191 }
   1192 
   1193 #ifdef __VSX__
   1194 static __inline__ vector signed long long __ATTRS_o_ai
   1195 vec_vand(vector signed long long __a, vector signed long long __b) {
   1196   return __a & __b;
   1197 }
   1198 
   1199 static __inline__ vector signed long long __ATTRS_o_ai
   1200 vec_vand(vector bool long long __a, vector signed long long __b) {
   1201   return (vector signed long long)__a & __b;
   1202 }
   1203 
   1204 static __inline__ vector signed long long __ATTRS_o_ai
   1205 vec_vand(vector signed long long __a, vector bool long long __b) {
   1206   return __a & (vector signed long long)__b;
   1207 }
   1208 
   1209 static __inline__ vector unsigned long long __ATTRS_o_ai
   1210 vec_vand(vector unsigned long long __a, vector unsigned long long __b) {
   1211   return __a & __b;
   1212 }
   1213 
   1214 static __inline__ vector unsigned long long __ATTRS_o_ai
   1215 vec_vand(vector bool long long __a, vector unsigned long long __b) {
   1216   return (vector unsigned long long)__a & __b;
   1217 }
   1218 
   1219 static __inline__ vector unsigned long long __ATTRS_o_ai
   1220 vec_vand(vector unsigned long long __a, vector bool long long __b) {
   1221   return __a & (vector unsigned long long)__b;
   1222 }
   1223 
   1224 static __inline__ vector bool long long __ATTRS_o_ai
   1225 vec_vand(vector bool long long __a, vector bool long long __b) {
   1226   return __a & __b;
   1227 }
   1228 #endif
   1229 
   1230 /* vec_andc */
   1231 
   1232 #define __builtin_altivec_vandc vec_andc
   1233 
   1234 static __inline__ vector signed char __ATTRS_o_ai
   1235 vec_andc(vector signed char __a, vector signed char __b) {
   1236   return __a & ~__b;
   1237 }
   1238 
   1239 static __inline__ vector signed char __ATTRS_o_ai
   1240 vec_andc(vector bool char __a, vector signed char __b) {
   1241   return (vector signed char)__a & ~__b;
   1242 }
   1243 
   1244 static __inline__ vector signed char __ATTRS_o_ai
   1245 vec_andc(vector signed char __a, vector bool char __b) {
   1246   return __a & ~(vector signed char)__b;
   1247 }
   1248 
   1249 static __inline__ vector unsigned char __ATTRS_o_ai
   1250 vec_andc(vector unsigned char __a, vector unsigned char __b) {
   1251   return __a & ~__b;
   1252 }
   1253 
   1254 static __inline__ vector unsigned char __ATTRS_o_ai
   1255 vec_andc(vector bool char __a, vector unsigned char __b) {
   1256   return (vector unsigned char)__a & ~__b;
   1257 }
   1258 
   1259 static __inline__ vector unsigned char __ATTRS_o_ai
   1260 vec_andc(vector unsigned char __a, vector bool char __b) {
   1261   return __a & ~(vector unsigned char)__b;
   1262 }
   1263 
   1264 static __inline__ vector bool char __ATTRS_o_ai vec_andc(vector bool char __a,
   1265                                                          vector bool char __b) {
   1266   return __a & ~__b;
   1267 }
   1268 
   1269 static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
   1270                                                      vector short __b) {
   1271   return __a & ~__b;
   1272 }
   1273 
   1274 static __inline__ vector short __ATTRS_o_ai vec_andc(vector bool short __a,
   1275                                                      vector short __b) {
   1276   return (vector short)__a & ~__b;
   1277 }
   1278 
   1279 static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
   1280                                                      vector bool short __b) {
   1281   return __a & ~(vector short)__b;
   1282 }
   1283 
   1284 static __inline__ vector unsigned short __ATTRS_o_ai
   1285 vec_andc(vector unsigned short __a, vector unsigned short __b) {
   1286   return __a & ~__b;
   1287 }
   1288 
   1289 static __inline__ vector unsigned short __ATTRS_o_ai
   1290 vec_andc(vector bool short __a, vector unsigned short __b) {
   1291   return (vector unsigned short)__a & ~__b;
   1292 }
   1293 
   1294 static __inline__ vector unsigned short __ATTRS_o_ai
   1295 vec_andc(vector unsigned short __a, vector bool short __b) {
   1296   return __a & ~(vector unsigned short)__b;
   1297 }
   1298 
   1299 static __inline__ vector bool short __ATTRS_o_ai
   1300 vec_andc(vector bool short __a, vector bool short __b) {
   1301   return __a & ~__b;
   1302 }
   1303 
   1304 static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
   1305                                                    vector int __b) {
   1306   return __a & ~__b;
   1307 }
   1308 
   1309 static __inline__ vector int __ATTRS_o_ai vec_andc(vector bool int __a,
   1310                                                    vector int __b) {
   1311   return (vector int)__a & ~__b;
   1312 }
   1313 
   1314 static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
   1315                                                    vector bool int __b) {
   1316   return __a & ~(vector int)__b;
   1317 }
   1318 
   1319 static __inline__ vector unsigned int __ATTRS_o_ai
   1320 vec_andc(vector unsigned int __a, vector unsigned int __b) {
   1321   return __a & ~__b;
   1322 }
   1323 
   1324 static __inline__ vector unsigned int __ATTRS_o_ai
   1325 vec_andc(vector bool int __a, vector unsigned int __b) {
   1326   return (vector unsigned int)__a & ~__b;
   1327 }
   1328 
   1329 static __inline__ vector unsigned int __ATTRS_o_ai
   1330 vec_andc(vector unsigned int __a, vector bool int __b) {
   1331   return __a & ~(vector unsigned int)__b;
   1332 }
   1333 
   1334 static __inline__ vector bool int __ATTRS_o_ai vec_andc(vector bool int __a,
   1335                                                         vector bool int __b) {
   1336   return __a & ~__b;
   1337 }
   1338 
   1339 static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
   1340                                                      vector float __b) {
   1341   vector unsigned int __res =
   1342       (vector unsigned int)__a & ~(vector unsigned int)__b;
   1343   return (vector float)__res;
   1344 }
   1345 
   1346 static __inline__ vector float __ATTRS_o_ai vec_andc(vector bool int __a,
   1347                                                      vector float __b) {
   1348   vector unsigned int __res =
   1349       (vector unsigned int)__a & ~(vector unsigned int)__b;
   1350   return (vector float)__res;
   1351 }
   1352 
   1353 static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
   1354                                                      vector bool int __b) {
   1355   vector unsigned int __res =
   1356       (vector unsigned int)__a & ~(vector unsigned int)__b;
   1357   return (vector float)__res;
   1358 }
   1359 
   1360 #ifdef __VSX__
   1361 static __inline__ vector double __ATTRS_o_ai vec_andc(vector bool long long __a,
   1362                                                       vector double __b) {
   1363   vector unsigned long long __res =
   1364       (vector unsigned long long)__a & ~(vector unsigned long long)__b;
   1365   return (vector double)__res;
   1366 }
   1367 
   1368 static __inline__ vector double __ATTRS_o_ai
   1369 vec_andc(vector double __a, vector bool long long __b) {
   1370   vector unsigned long long __res =
   1371       (vector unsigned long long)__a & ~(vector unsigned long long)__b;
   1372   return (vector double)__res;
   1373 }
   1374 
   1375 static __inline__ vector double __ATTRS_o_ai vec_andc(vector double __a,
   1376                                                       vector double __b) {
   1377   vector unsigned long long __res =
   1378       (vector unsigned long long)__a & ~(vector unsigned long long)__b;
   1379   return (vector double)__res;
   1380 }
   1381 
   1382 static __inline__ vector signed long long __ATTRS_o_ai
   1383 vec_andc(vector signed long long __a, vector signed long long __b) {
   1384   return __a & ~__b;
   1385 }
   1386 
   1387 static __inline__ vector signed long long __ATTRS_o_ai
   1388 vec_andc(vector bool long long __a, vector signed long long __b) {
   1389   return (vector signed long long)__a & ~__b;
   1390 }
   1391 
   1392 static __inline__ vector signed long long __ATTRS_o_ai
   1393 vec_andc(vector signed long long __a, vector bool long long __b) {
   1394   return __a & ~(vector signed long long)__b;
   1395 }
   1396 
   1397 static __inline__ vector unsigned long long __ATTRS_o_ai
   1398 vec_andc(vector unsigned long long __a, vector unsigned long long __b) {
   1399   return __a & ~__b;
   1400 }
   1401 
   1402 static __inline__ vector unsigned long long __ATTRS_o_ai
   1403 vec_andc(vector bool long long __a, vector unsigned long long __b) {
   1404   return (vector unsigned long long)__a & ~__b;
   1405 }
   1406 
   1407 static __inline__ vector unsigned long long __ATTRS_o_ai
   1408 vec_andc(vector unsigned long long __a, vector bool long long __b) {
   1409   return __a & ~(vector unsigned long long)__b;
   1410 }
   1411 
   1412 static __inline__ vector bool long long __ATTRS_o_ai
   1413 vec_andc(vector bool long long __a, vector bool long long __b) {
   1414   return __a & ~__b;
   1415 }
   1416 #endif
   1417 
   1418 /* vec_vandc */
   1419 
   1420 static __inline__ vector signed char __ATTRS_o_ai
   1421 vec_vandc(vector signed char __a, vector signed char __b) {
   1422   return __a & ~__b;
   1423 }
   1424 
   1425 static __inline__ vector signed char __ATTRS_o_ai
   1426 vec_vandc(vector bool char __a, vector signed char __b) {
   1427   return (vector signed char)__a & ~__b;
   1428 }
   1429 
   1430 static __inline__ vector signed char __ATTRS_o_ai
   1431 vec_vandc(vector signed char __a, vector bool char __b) {
   1432   return __a & ~(vector signed char)__b;
   1433 }
   1434 
   1435 static __inline__ vector unsigned char __ATTRS_o_ai
   1436 vec_vandc(vector unsigned char __a, vector unsigned char __b) {
   1437   return __a & ~__b;
   1438 }
   1439 
   1440 static __inline__ vector unsigned char __ATTRS_o_ai
   1441 vec_vandc(vector bool char __a, vector unsigned char __b) {
   1442   return (vector unsigned char)__a & ~__b;
   1443 }
   1444 
   1445 static __inline__ vector unsigned char __ATTRS_o_ai
   1446 vec_vandc(vector unsigned char __a, vector bool char __b) {
   1447   return __a & ~(vector unsigned char)__b;
   1448 }
   1449 
   1450 static __inline__ vector bool char __ATTRS_o_ai
   1451 vec_vandc(vector bool char __a, vector bool char __b) {
   1452   return __a & ~__b;
   1453 }
   1454 
   1455 static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
   1456                                                       vector short __b) {
   1457   return __a & ~__b;
   1458 }
   1459 
   1460 static __inline__ vector short __ATTRS_o_ai vec_vandc(vector bool short __a,
   1461                                                       vector short __b) {
   1462   return (vector short)__a & ~__b;
   1463 }
   1464 
   1465 static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
   1466                                                       vector bool short __b) {
   1467   return __a & ~(vector short)__b;
   1468 }
   1469 
   1470 static __inline__ vector unsigned short __ATTRS_o_ai
   1471 vec_vandc(vector unsigned short __a, vector unsigned short __b) {
   1472   return __a & ~__b;
   1473 }
   1474 
   1475 static __inline__ vector unsigned short __ATTRS_o_ai
   1476 vec_vandc(vector bool short __a, vector unsigned short __b) {
   1477   return (vector unsigned short)__a & ~__b;
   1478 }
   1479 
   1480 static __inline__ vector unsigned short __ATTRS_o_ai
   1481 vec_vandc(vector unsigned short __a, vector bool short __b) {
   1482   return __a & ~(vector unsigned short)__b;
   1483 }
   1484 
   1485 static __inline__ vector bool short __ATTRS_o_ai
   1486 vec_vandc(vector bool short __a, vector bool short __b) {
   1487   return __a & ~__b;
   1488 }
   1489 
   1490 static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
   1491                                                     vector int __b) {
   1492   return __a & ~__b;
   1493 }
   1494 
   1495 static __inline__ vector int __ATTRS_o_ai vec_vandc(vector bool int __a,
   1496                                                     vector int __b) {
   1497   return (vector int)__a & ~__b;
   1498 }
   1499 
   1500 static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
   1501                                                     vector bool int __b) {
   1502   return __a & ~(vector int)__b;
   1503 }
   1504 
   1505 static __inline__ vector unsigned int __ATTRS_o_ai
   1506 vec_vandc(vector unsigned int __a, vector unsigned int __b) {
   1507   return __a & ~__b;
   1508 }
   1509 
   1510 static __inline__ vector unsigned int __ATTRS_o_ai
   1511 vec_vandc(vector bool int __a, vector unsigned int __b) {
   1512   return (vector unsigned int)__a & ~__b;
   1513 }
   1514 
   1515 static __inline__ vector unsigned int __ATTRS_o_ai
   1516 vec_vandc(vector unsigned int __a, vector bool int __b) {
   1517   return __a & ~(vector unsigned int)__b;
   1518 }
   1519 
   1520 static __inline__ vector bool int __ATTRS_o_ai vec_vandc(vector bool int __a,
   1521                                                          vector bool int __b) {
   1522   return __a & ~__b;
   1523 }
   1524 
   1525 static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
   1526                                                       vector float __b) {
   1527   vector unsigned int __res =
   1528       (vector unsigned int)__a & ~(vector unsigned int)__b;
   1529   return (vector float)__res;
   1530 }
   1531 
   1532 static __inline__ vector float __ATTRS_o_ai vec_vandc(vector bool int __a,
   1533                                                       vector float __b) {
   1534   vector unsigned int __res =
   1535       (vector unsigned int)__a & ~(vector unsigned int)__b;
   1536   return (vector float)__res;
   1537 }
   1538 
   1539 static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
   1540                                                       vector bool int __b) {
   1541   vector unsigned int __res =
   1542       (vector unsigned int)__a & ~(vector unsigned int)__b;
   1543   return (vector float)__res;
   1544 }
   1545 
   1546 #ifdef __VSX__
   1547 static __inline__ vector signed long long __ATTRS_o_ai
   1548 vec_vandc(vector signed long long __a, vector signed long long __b) {
   1549   return __a & ~__b;
   1550 }
   1551 
   1552 static __inline__ vector signed long long __ATTRS_o_ai
   1553 vec_vandc(vector bool long long __a, vector signed long long __b) {
   1554   return (vector signed long long)__a & ~__b;
   1555 }
   1556 
   1557 static __inline__ vector signed long long __ATTRS_o_ai
   1558 vec_vandc(vector signed long long __a, vector bool long long __b) {
   1559   return __a & ~(vector signed long long)__b;
   1560 }
   1561 
   1562 static __inline__ vector unsigned long long __ATTRS_o_ai
   1563 vec_vandc(vector unsigned long long __a, vector unsigned long long __b) {
   1564   return __a & ~__b;
   1565 }
   1566 
   1567 static __inline__ vector unsigned long long __ATTRS_o_ai
   1568 vec_vandc(vector bool long long __a, vector unsigned long long __b) {
   1569   return (vector unsigned long long)__a & ~__b;
   1570 }
   1571 
   1572 static __inline__ vector unsigned long long __ATTRS_o_ai
   1573 vec_vandc(vector unsigned long long __a, vector bool long long __b) {
   1574   return __a & ~(vector unsigned long long)__b;
   1575 }
   1576 
   1577 static __inline__ vector bool long long __ATTRS_o_ai
   1578 vec_vandc(vector bool long long __a, vector bool long long __b) {
   1579   return __a & ~__b;
   1580 }
   1581 #endif
   1582 
   1583 /* vec_avg */
   1584 
   1585 static __inline__ vector signed char __ATTRS_o_ai
   1586 vec_avg(vector signed char __a, vector signed char __b) {
   1587   return __builtin_altivec_vavgsb(__a, __b);
   1588 }
   1589 
   1590 static __inline__ vector unsigned char __ATTRS_o_ai
   1591 vec_avg(vector unsigned char __a, vector unsigned char __b) {
   1592   return __builtin_altivec_vavgub(__a, __b);
   1593 }
   1594 
   1595 static __inline__ vector short __ATTRS_o_ai vec_avg(vector short __a,
   1596                                                     vector short __b) {
   1597   return __builtin_altivec_vavgsh(__a, __b);
   1598 }
   1599 
   1600 static __inline__ vector unsigned short __ATTRS_o_ai
   1601 vec_avg(vector unsigned short __a, vector unsigned short __b) {
   1602   return __builtin_altivec_vavguh(__a, __b);
   1603 }
   1604 
   1605 static __inline__ vector int __ATTRS_o_ai vec_avg(vector int __a,
   1606                                                   vector int __b) {
   1607   return __builtin_altivec_vavgsw(__a, __b);
   1608 }
   1609 
   1610 static __inline__ vector unsigned int __ATTRS_o_ai
   1611 vec_avg(vector unsigned int __a, vector unsigned int __b) {
   1612   return __builtin_altivec_vavguw(__a, __b);
   1613 }
   1614 
   1615 /* vec_vavgsb */
   1616 
   1617 static __inline__ vector signed char __attribute__((__always_inline__))
   1618 vec_vavgsb(vector signed char __a, vector signed char __b) {
   1619   return __builtin_altivec_vavgsb(__a, __b);
   1620 }
   1621 
   1622 /* vec_vavgub */
   1623 
   1624 static __inline__ vector unsigned char __attribute__((__always_inline__))
   1625 vec_vavgub(vector unsigned char __a, vector unsigned char __b) {
   1626   return __builtin_altivec_vavgub(__a, __b);
   1627 }
   1628 
   1629 /* vec_vavgsh */
   1630 
   1631 static __inline__ vector short __attribute__((__always_inline__))
   1632 vec_vavgsh(vector short __a, vector short __b) {
   1633   return __builtin_altivec_vavgsh(__a, __b);
   1634 }
   1635 
   1636 /* vec_vavguh */
   1637 
   1638 static __inline__ vector unsigned short __attribute__((__always_inline__))
   1639 vec_vavguh(vector unsigned short __a, vector unsigned short __b) {
   1640   return __builtin_altivec_vavguh(__a, __b);
   1641 }
   1642 
   1643 /* vec_vavgsw */
   1644 
   1645 static __inline__ vector int __attribute__((__always_inline__))
   1646 vec_vavgsw(vector int __a, vector int __b) {
   1647   return __builtin_altivec_vavgsw(__a, __b);
   1648 }
   1649 
   1650 /* vec_vavguw */
   1651 
   1652 static __inline__ vector unsigned int __attribute__((__always_inline__))
   1653 vec_vavguw(vector unsigned int __a, vector unsigned int __b) {
   1654   return __builtin_altivec_vavguw(__a, __b);
   1655 }
   1656 
   1657 /* vec_ceil */
   1658 
   1659 static __inline__ vector float __ATTRS_o_ai vec_ceil(vector float __a) {
   1660 #ifdef __VSX__
   1661   return __builtin_vsx_xvrspip(__a);
   1662 #else
   1663   return __builtin_altivec_vrfip(__a);
   1664 #endif
   1665 }
   1666 
   1667 #ifdef __VSX__
   1668 static __inline__ vector double __ATTRS_o_ai vec_ceil(vector double __a) {
   1669   return __builtin_vsx_xvrdpip(__a);
   1670 }
   1671 #endif
   1672 
   1673 /* vec_roundp */
   1674 static __inline__ vector float __ATTRS_o_ai vec_roundp(vector float __a) {
   1675   return vec_ceil(__a);
   1676 }
   1677 
   1678 #ifdef __VSX__
   1679 static __inline__ vector double __ATTRS_o_ai vec_roundp(vector double __a) {
   1680   return vec_ceil(__a);
   1681 }
   1682 #endif
   1683 
   1684 /* vec_vrfip */
   1685 
   1686 static __inline__ vector float __attribute__((__always_inline__))
   1687 vec_vrfip(vector float __a) {
   1688   return __builtin_altivec_vrfip(__a);
   1689 }
   1690 
   1691 /* vec_cmpb */
   1692 
   1693 static __inline__ vector int __attribute__((__always_inline__))
   1694 vec_cmpb(vector float __a, vector float __b) {
   1695   return __builtin_altivec_vcmpbfp(__a, __b);
   1696 }
   1697 
   1698 /* vec_vcmpbfp */
   1699 
   1700 static __inline__ vector int __attribute__((__always_inline__))
   1701 vec_vcmpbfp(vector float __a, vector float __b) {
   1702   return __builtin_altivec_vcmpbfp(__a, __b);
   1703 }
   1704 
   1705 /* vec_cmpeq */
   1706 
   1707 static __inline__ vector bool char __ATTRS_o_ai
   1708 vec_cmpeq(vector signed char __a, vector signed char __b) {
   1709   return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
   1710                                                       (vector char)__b);
   1711 }
   1712 
   1713 static __inline__ vector bool char __ATTRS_o_ai
   1714 vec_cmpeq(vector unsigned char __a, vector unsigned char __b) {
   1715   return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
   1716                                                       (vector char)__b);
   1717 }
   1718 
   1719 static __inline__ vector bool char __ATTRS_o_ai
   1720 vec_cmpeq(vector bool char __a, vector bool char __b) {
   1721   return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
   1722                                                       (vector char)__b);
   1723 }
   1724 
   1725 static __inline__ vector bool short __ATTRS_o_ai vec_cmpeq(vector short __a,
   1726                                                            vector short __b) {
   1727   return (vector bool short)__builtin_altivec_vcmpequh(__a, __b);
   1728 }
   1729 
   1730 static __inline__ vector bool short __ATTRS_o_ai
   1731 vec_cmpeq(vector unsigned short __a, vector unsigned short __b) {
   1732   return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,
   1733                                                        (vector short)__b);
   1734 }
   1735 
   1736 static __inline__ vector bool short __ATTRS_o_ai
   1737 vec_cmpeq(vector bool short __a, vector bool short __b) {
   1738   return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,
   1739                                                        (vector short)__b);
   1740 }
   1741 
   1742 static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector int __a,
   1743                                                          vector int __b) {
   1744   return (vector bool int)__builtin_altivec_vcmpequw(__a, __b);
   1745 }
   1746 
   1747 static __inline__ vector bool int __ATTRS_o_ai
   1748 vec_cmpeq(vector unsigned int __a, vector unsigned int __b) {
   1749   return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,
   1750                                                      (vector int)__b);
   1751 }
   1752 
   1753 static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector bool int __a,
   1754                                                          vector bool int __b) {
   1755   return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,
   1756                                                      (vector int)__b);
   1757 }
   1758 
   1759 #ifdef __POWER8_VECTOR__
   1760 static __inline__ vector bool long long __ATTRS_o_ai
   1761 vec_cmpeq(vector signed long long __a, vector signed long long __b) {
   1762   return (vector bool long long)__builtin_altivec_vcmpequd(__a, __b);
   1763 }
   1764 
   1765 static __inline__ vector bool long long __ATTRS_o_ai
   1766 vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {
   1767   return (vector bool long long)__builtin_altivec_vcmpequd(
   1768       (vector long long)__a, (vector long long)__b);
   1769 }
   1770 
   1771 static __inline__ vector bool long long __ATTRS_o_ai
   1772 vec_cmpeq(vector bool long long __a, vector bool long long __b) {
   1773   return (vector bool long long)__builtin_altivec_vcmpequd(
   1774       (vector long long)__a, (vector long long)__b);
   1775 }
   1776 #elif defined(__VSX__)
   1777 static __inline__ vector bool long long __ATTRS_o_ai
   1778 vec_cmpeq(vector signed long long __a, vector signed long long __b) {
   1779   vector bool int __wordcmp =
   1780       vec_cmpeq((vector signed int)__a, (vector signed int)__b);
   1781 #ifdef __LITTLE_ENDIAN__
   1782   __wordcmp &= __builtin_shufflevector(__wordcmp, __wordcmp, 3, 0, 1, 2);
   1783   return (vector bool long long)__builtin_shufflevector(__wordcmp, __wordcmp, 1,
   1784                                                         1, 3, 3);
   1785 #else
   1786   __wordcmp &= __builtin_shufflevector(__wordcmp, __wordcmp, 1, 2, 3, 0);
   1787   return (vector bool long long)__builtin_shufflevector(__wordcmp, __wordcmp, 0,
   1788                                                         0, 2, 2);
   1789 #endif
   1790 }
   1791 
   1792 static __inline__ vector bool long long __ATTRS_o_ai
   1793 vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {
   1794   return vec_cmpeq((vector signed long long)__a, (vector signed long long)__b);
   1795 }
   1796 
   1797 static __inline__ vector bool long long __ATTRS_o_ai
   1798 vec_cmpeq(vector bool long long __a, vector bool long long __b) {
   1799   return vec_cmpeq((vector signed long long)__a, (vector signed long long)__b);
   1800 }
   1801 #endif
   1802 
   1803 static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector float __a,
   1804                                                          vector float __b) {
   1805 #ifdef __VSX__
   1806   return (vector bool int)__builtin_vsx_xvcmpeqsp(__a, __b);
   1807 #else
   1808   return (vector bool int)__builtin_altivec_vcmpeqfp(__a, __b);
   1809 #endif
   1810 }
   1811 
   1812 #ifdef __VSX__
   1813 static __inline__ vector bool long long __ATTRS_o_ai
   1814 vec_cmpeq(vector double __a, vector double __b) {
   1815   return (vector bool long long)__builtin_vsx_xvcmpeqdp(__a, __b);
   1816 }
   1817 #endif
   1818 
   1819 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   1820 static __inline__ vector bool __int128 __ATTRS_o_ai
   1821 vec_cmpeq(vector signed __int128 __a, vector signed __int128 __b) {
   1822   return (vector bool __int128)__builtin_altivec_vcmpequq(
   1823       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
   1824 }
   1825 
   1826 static __inline__ vector bool __int128 __ATTRS_o_ai
   1827 vec_cmpeq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
   1828   return (vector bool __int128)__builtin_altivec_vcmpequq(
   1829       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
   1830 }
   1831 
   1832 static __inline__ vector bool __int128 __ATTRS_o_ai
   1833 vec_cmpeq(vector bool __int128 __a, vector bool  __int128 __b) {
   1834   return (vector bool __int128)__builtin_altivec_vcmpequq(
   1835       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
   1836 }
   1837 #endif
   1838 
   1839 #ifdef __POWER9_VECTOR__
   1840 /* vec_cmpne */
   1841 
   1842 static __inline__ vector bool char __ATTRS_o_ai
   1843 vec_cmpne(vector bool char __a, vector bool char __b) {
   1844   return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
   1845                                                      (vector char)__b);
   1846 }
   1847 
   1848 static __inline__ vector bool char __ATTRS_o_ai
   1849 vec_cmpne(vector signed char __a, vector signed char __b) {
   1850   return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
   1851                                                      (vector char)__b);
   1852 }
   1853 
   1854 static __inline__ vector bool char __ATTRS_o_ai
   1855 vec_cmpne(vector unsigned char __a, vector unsigned char __b) {
   1856   return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
   1857                                                      (vector char)__b);
   1858 }
   1859 
   1860 static __inline__ vector bool short __ATTRS_o_ai
   1861 vec_cmpne(vector bool short __a, vector bool short __b) {
   1862   return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
   1863                                                       (vector short)__b);
   1864 }
   1865 
   1866 static __inline__ vector bool short __ATTRS_o_ai
   1867 vec_cmpne(vector signed short __a, vector signed short __b) {
   1868   return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
   1869                                                       (vector short)__b);
   1870 }
   1871 
   1872 static __inline__ vector bool short __ATTRS_o_ai
   1873 vec_cmpne(vector unsigned short __a, vector unsigned short __b) {
   1874   return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
   1875                                                       (vector short)__b);
   1876 }
   1877 
   1878 static __inline__ vector bool int __ATTRS_o_ai
   1879 vec_cmpne(vector bool int __a, vector bool int __b) {
   1880   return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
   1881                                                     (vector int)__b);
   1882 }
   1883 
   1884 static __inline__ vector bool int __ATTRS_o_ai
   1885 vec_cmpne(vector signed int __a, vector signed int __b) {
   1886   return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
   1887                                                     (vector int)__b);
   1888 }
   1889 
   1890 static __inline__ vector bool int __ATTRS_o_ai
   1891 vec_cmpne(vector unsigned int __a, vector unsigned int __b) {
   1892   return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
   1893                                                     (vector int)__b);
   1894 }
   1895 
   1896 static __inline__ vector bool int __ATTRS_o_ai
   1897 vec_cmpne(vector float __a, vector float __b) {
   1898   return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
   1899                                                     (vector int)__b);
   1900 }
   1901 
   1902 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   1903 static __inline__ vector bool __int128 __ATTRS_o_ai
   1904 vec_cmpne(vector unsigned __int128 __a, vector unsigned __int128 __b) {
   1905   return (vector bool __int128)~(__builtin_altivec_vcmpequq(
   1906       (vector unsigned __int128)__a, (vector unsigned __int128)__b));
   1907 }
   1908 
   1909 static __inline__ vector bool __int128 __ATTRS_o_ai
   1910 vec_cmpne(vector signed __int128 __a, vector signed __int128 __b) {
   1911   return (vector bool __int128)~(__builtin_altivec_vcmpequq(
   1912       (vector unsigned __int128)__a, (vector unsigned __int128)__b));
   1913 }
   1914 
   1915 static __inline__ vector bool __int128 __ATTRS_o_ai
   1916 vec_cmpne(vector bool __int128 __a, vector bool __int128 __b) {
   1917   return (vector bool __int128)~(__builtin_altivec_vcmpequq(
   1918       (vector unsigned __int128)__a, (vector unsigned __int128)__b));
   1919 }
   1920 #endif
   1921 
   1922 /* vec_cmpnez */
   1923 
   1924 static __inline__ vector bool char __ATTRS_o_ai
   1925 vec_cmpnez(vector signed char __a, vector signed char __b) {
   1926   return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,
   1927                                                       (vector char)__b);
   1928 }
   1929 
   1930 static __inline__ vector bool char __ATTRS_o_ai
   1931 vec_cmpnez(vector unsigned char __a, vector unsigned char __b) {
   1932   return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,
   1933                                                       (vector char)__b);
   1934 }
   1935 
   1936 static __inline__ vector bool short __ATTRS_o_ai
   1937 vec_cmpnez(vector signed short __a, vector signed short __b) {
   1938   return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,
   1939                                                        (vector short)__b);
   1940 }
   1941 
   1942 static __inline__ vector bool short __ATTRS_o_ai
   1943 vec_cmpnez(vector unsigned short __a, vector unsigned short __b) {
   1944   return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,
   1945                                                        (vector short)__b);
   1946 }
   1947 
   1948 static __inline__ vector bool int __ATTRS_o_ai
   1949 vec_cmpnez(vector signed int __a, vector signed int __b) {
   1950   return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,
   1951                                                      (vector int)__b);
   1952 }
   1953 
   1954 static __inline__ vector bool int __ATTRS_o_ai
   1955 vec_cmpnez(vector unsigned int __a, vector unsigned int __b) {
   1956   return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,
   1957                                                      (vector int)__b);
   1958 }
   1959 
   1960 static __inline__ signed int __ATTRS_o_ai
   1961 vec_cntlz_lsbb(vector signed char __a) {
   1962 #ifdef __LITTLE_ENDIAN__
   1963   return __builtin_altivec_vctzlsbb((vector unsigned char)__a);
   1964 #else
   1965   return __builtin_altivec_vclzlsbb((vector unsigned char)__a);
   1966 #endif
   1967 }
   1968 
   1969 static __inline__ signed int __ATTRS_o_ai
   1970 vec_cntlz_lsbb(vector unsigned char __a) {
   1971 #ifdef __LITTLE_ENDIAN__
   1972   return __builtin_altivec_vctzlsbb((vector unsigned char)__a);
   1973 #else
   1974   return __builtin_altivec_vclzlsbb(__a);
   1975 #endif
   1976 }
   1977 
   1978 static __inline__ signed int __ATTRS_o_ai
   1979 vec_cnttz_lsbb(vector signed char __a) {
   1980 #ifdef __LITTLE_ENDIAN__
   1981   return __builtin_altivec_vclzlsbb((vector unsigned char)__a);
   1982 #else
   1983   return __builtin_altivec_vctzlsbb((vector unsigned char)__a);
   1984 #endif
   1985 }
   1986 
   1987 static __inline__ signed int __ATTRS_o_ai
   1988 vec_cnttz_lsbb(vector unsigned char __a) {
   1989 #ifdef __LITTLE_ENDIAN__
   1990   return __builtin_altivec_vclzlsbb(__a);
   1991 #else
   1992   return __builtin_altivec_vctzlsbb(__a);
   1993 #endif
   1994 }
   1995 
   1996 static __inline__ vector unsigned int __ATTRS_o_ai
   1997 vec_parity_lsbb(vector unsigned int __a) {
   1998   return __builtin_altivec_vprtybw(__a);
   1999 }
   2000 
   2001 static __inline__ vector unsigned int __ATTRS_o_ai
   2002 vec_parity_lsbb(vector signed int __a) {
   2003   return __builtin_altivec_vprtybw((vector unsigned int)__a);
   2004 }
   2005 
   2006 #ifdef __SIZEOF_INT128__
   2007 static __inline__ vector unsigned __int128 __ATTRS_o_ai
   2008 vec_parity_lsbb(vector unsigned __int128 __a) {
   2009   return __builtin_altivec_vprtybq(__a);
   2010 }
   2011 
   2012 static __inline__ vector unsigned __int128 __ATTRS_o_ai
   2013 vec_parity_lsbb(vector signed __int128 __a) {
   2014   return __builtin_altivec_vprtybq((vector unsigned __int128)__a);
   2015 }
   2016 #endif
   2017 
   2018 static __inline__ vector unsigned long long __ATTRS_o_ai
   2019 vec_parity_lsbb(vector unsigned long long __a) {
   2020   return __builtin_altivec_vprtybd(__a);
   2021 }
   2022 
   2023 static __inline__ vector unsigned long long __ATTRS_o_ai
   2024 vec_parity_lsbb(vector signed long long __a) {
   2025   return __builtin_altivec_vprtybd((vector unsigned long long)__a);
   2026 }
   2027 
   2028 #else
   2029 /* vec_cmpne */
   2030 
   2031 static __inline__ vector bool char __ATTRS_o_ai
   2032 vec_cmpne(vector bool char __a, vector bool char __b) {
   2033   return ~(vec_cmpeq(__a, __b));
   2034 }
   2035 
   2036 static __inline__ vector bool char __ATTRS_o_ai
   2037 vec_cmpne(vector signed char __a, vector signed char __b) {
   2038   return ~(vec_cmpeq(__a, __b));
   2039 }
   2040 
   2041 static __inline__ vector bool char __ATTRS_o_ai
   2042 vec_cmpne(vector unsigned char __a, vector unsigned char __b) {
   2043   return ~(vec_cmpeq(__a, __b));
   2044 }
   2045 
   2046 static __inline__ vector bool short __ATTRS_o_ai
   2047 vec_cmpne(vector bool short __a, vector bool short __b) {
   2048   return ~(vec_cmpeq(__a, __b));
   2049 }
   2050 
   2051 static __inline__ vector bool short __ATTRS_o_ai
   2052 vec_cmpne(vector signed short __a, vector signed short __b) {
   2053   return ~(vec_cmpeq(__a, __b));
   2054 }
   2055 
   2056 static __inline__ vector bool short __ATTRS_o_ai
   2057 vec_cmpne(vector unsigned short __a, vector unsigned short __b) {
   2058   return ~(vec_cmpeq(__a, __b));
   2059 }
   2060 
   2061 static __inline__ vector bool int __ATTRS_o_ai
   2062 vec_cmpne(vector bool int __a, vector bool int __b) {
   2063   return ~(vec_cmpeq(__a, __b));
   2064 }
   2065 
   2066 static __inline__ vector bool int __ATTRS_o_ai
   2067 vec_cmpne(vector signed int __a, vector signed int __b) {
   2068   return ~(vec_cmpeq(__a, __b));
   2069 }
   2070 
   2071 static __inline__ vector bool int __ATTRS_o_ai
   2072 vec_cmpne(vector unsigned int __a, vector unsigned int __b) {
   2073   return ~(vec_cmpeq(__a, __b));
   2074 }
   2075 
   2076 static __inline__ vector bool int __ATTRS_o_ai
   2077 vec_cmpne(vector float __a, vector float __b) {
   2078   return ~(vec_cmpeq(__a, __b));
   2079 }
   2080 #endif
   2081 
   2082 #ifdef __POWER8_VECTOR__
   2083 static __inline__ vector bool long long __ATTRS_o_ai
   2084 vec_cmpne(vector bool long long __a, vector bool long long __b) {
   2085   return (vector bool long long)
   2086     ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
   2087 }
   2088 
   2089 static __inline__ vector bool long long __ATTRS_o_ai
   2090 vec_cmpne(vector signed long long __a, vector signed long long __b) {
   2091   return (vector bool long long)
   2092     ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
   2093 }
   2094 
   2095 static __inline__ vector bool long long __ATTRS_o_ai
   2096 vec_cmpne(vector unsigned long long __a, vector unsigned long long __b) {
   2097   return (vector bool long long)
   2098     ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
   2099 }
   2100 #elif defined(__VSX__)
   2101 static __inline__ vector bool long long __ATTRS_o_ai
   2102 vec_cmpne(vector bool long long __a, vector bool long long __b) {
   2103   return (vector bool long long)~(
   2104       vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
   2105 }
   2106 
   2107 static __inline__ vector bool long long __ATTRS_o_ai
   2108 vec_cmpne(vector signed long long __a, vector signed long long __b) {
   2109   return (vector bool long long)~(
   2110       vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
   2111 }
   2112 
   2113 static __inline__ vector bool long long __ATTRS_o_ai
   2114 vec_cmpne(vector unsigned long long __a, vector unsigned long long __b) {
   2115   return (vector bool long long)~(
   2116       vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
   2117 }
   2118 #endif
   2119 
   2120 #ifdef __VSX__
   2121 static __inline__ vector bool long long __ATTRS_o_ai
   2122 vec_cmpne(vector double __a, vector double __b) {
   2123   return (vector bool long long)
   2124     ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
   2125 }
   2126 #endif
   2127 
   2128 /* vec_cmpgt */
   2129 
   2130 static __inline__ vector bool char __ATTRS_o_ai
   2131 vec_cmpgt(vector signed char __a, vector signed char __b) {
   2132   return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
   2133 }
   2134 
   2135 static __inline__ vector bool char __ATTRS_o_ai
   2136 vec_cmpgt(vector unsigned char __a, vector unsigned char __b) {
   2137   return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
   2138 }
   2139 
   2140 static __inline__ vector bool short __ATTRS_o_ai vec_cmpgt(vector short __a,
   2141                                                            vector short __b) {
   2142   return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
   2143 }
   2144 
   2145 static __inline__ vector bool short __ATTRS_o_ai
   2146 vec_cmpgt(vector unsigned short __a, vector unsigned short __b) {
   2147   return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
   2148 }
   2149 
   2150 static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector int __a,
   2151                                                          vector int __b) {
   2152   return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
   2153 }
   2154 
   2155 static __inline__ vector bool int __ATTRS_o_ai
   2156 vec_cmpgt(vector unsigned int __a, vector unsigned int __b) {
   2157   return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
   2158 }
   2159 
   2160 #ifdef __POWER8_VECTOR__
   2161 static __inline__ vector bool long long __ATTRS_o_ai
   2162 vec_cmpgt(vector signed long long __a, vector signed long long __b) {
   2163   return (vector bool long long)__builtin_altivec_vcmpgtsd(__a, __b);
   2164 }
   2165 
   2166 static __inline__ vector bool long long __ATTRS_o_ai
   2167 vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {
   2168   return (vector bool long long)__builtin_altivec_vcmpgtud(__a, __b);
   2169 }
   2170 #elif defined(__VSX__)
   2171 static __inline__ vector bool long long __ATTRS_o_ai
   2172 vec_cmpgt(vector signed long long __a, vector signed long long __b) {
   2173   vector signed int __sgtw = (vector signed int)vec_cmpgt(
   2174       (vector signed int)__a, (vector signed int)__b);
   2175   vector unsigned int __ugtw = (vector unsigned int)vec_cmpgt(
   2176       (vector unsigned int)__a, (vector unsigned int)__b);
   2177   vector unsigned int __eqw = (vector unsigned int)vec_cmpeq(
   2178       (vector signed int)__a, (vector signed int)__b);
   2179 #ifdef __LITTLE_ENDIAN__
   2180   __ugtw = __builtin_shufflevector(__ugtw, __ugtw, 3, 0, 1, 2) & __eqw;
   2181   __sgtw |= (vector signed int)__ugtw;
   2182   return (vector bool long long)__builtin_shufflevector(__sgtw, __sgtw, 1, 1, 3,
   2183                                                         3);
   2184 #else
   2185   __ugtw = __builtin_shufflevector(__ugtw, __ugtw, 1, 2, 3, 0) & __eqw;
   2186   __sgtw |= (vector signed int)__ugtw;
   2187   return (vector bool long long)__builtin_shufflevector(__sgtw, __sgtw, 0, 0, 2,
   2188                                                         2);
   2189 #endif
   2190 }
   2191 
   2192 static __inline__ vector bool long long __ATTRS_o_ai
   2193 vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {
   2194   vector unsigned int __ugtw = (vector unsigned int)vec_cmpgt(
   2195       (vector unsigned int)__a, (vector unsigned int)__b);
   2196   vector unsigned int __eqw = (vector unsigned int)vec_cmpeq(
   2197       (vector signed int)__a, (vector signed int)__b);
   2198 #ifdef __LITTLE_ENDIAN__
   2199   __eqw = __builtin_shufflevector(__ugtw, __ugtw, 3, 0, 1, 2) & __eqw;
   2200   __ugtw |= __eqw;
   2201   return (vector bool long long)__builtin_shufflevector(__ugtw, __ugtw, 1, 1, 3,
   2202                                                         3);
   2203 #else
   2204   __eqw = __builtin_shufflevector(__ugtw, __ugtw, 1, 2, 3, 0) & __eqw;
   2205   __ugtw |= __eqw;
   2206   return (vector bool long long)__builtin_shufflevector(__ugtw, __ugtw, 0, 0, 2,
   2207                                                         2);
   2208 #endif
   2209 }
   2210 #endif
   2211 
   2212 static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector float __a,
   2213                                                          vector float __b) {
   2214 #ifdef __VSX__
   2215   return (vector bool int)__builtin_vsx_xvcmpgtsp(__a, __b);
   2216 #else
   2217   return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
   2218 #endif
   2219 }
   2220 
   2221 #ifdef __VSX__
   2222 static __inline__ vector bool long long __ATTRS_o_ai
   2223 vec_cmpgt(vector double __a, vector double __b) {
   2224   return (vector bool long long)__builtin_vsx_xvcmpgtdp(__a, __b);
   2225 }
   2226 #endif
   2227 
   2228 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   2229 static __inline__ vector bool __int128 __ATTRS_o_ai
   2230 vec_cmpgt(vector signed __int128 __a, vector signed __int128 __b) {
   2231   return (vector bool __int128)__builtin_altivec_vcmpgtsq(__a, __b);
   2232 }
   2233 
   2234 static __inline__ vector bool __int128 __ATTRS_o_ai
   2235 vec_cmpgt(vector unsigned __int128 __a, vector unsigned __int128 __b) {
   2236   return (vector bool __int128)__builtin_altivec_vcmpgtuq(__a, __b);
   2237 }
   2238 #endif
   2239 
   2240 /* vec_cmpge */
   2241 
   2242 static __inline__ vector bool char __ATTRS_o_ai
   2243 vec_cmpge(vector signed char __a, vector signed char __b) {
   2244   return ~(vec_cmpgt(__b, __a));
   2245 }
   2246 
   2247 static __inline__ vector bool char __ATTRS_o_ai
   2248 vec_cmpge(vector unsigned char __a, vector unsigned char __b) {
   2249   return ~(vec_cmpgt(__b, __a));
   2250 }
   2251 
   2252 static __inline__ vector bool short __ATTRS_o_ai
   2253 vec_cmpge(vector signed short __a, vector signed short __b) {
   2254   return ~(vec_cmpgt(__b, __a));
   2255 }
   2256 
   2257 static __inline__ vector bool short __ATTRS_o_ai
   2258 vec_cmpge(vector unsigned short __a, vector unsigned short __b) {
   2259   return ~(vec_cmpgt(__b, __a));
   2260 }
   2261 
   2262 static __inline__ vector bool int __ATTRS_o_ai
   2263 vec_cmpge(vector signed int __a, vector signed int __b) {
   2264   return ~(vec_cmpgt(__b, __a));
   2265 }
   2266 
   2267 static __inline__ vector bool int __ATTRS_o_ai
   2268 vec_cmpge(vector unsigned int __a, vector unsigned int __b) {
   2269   return ~(vec_cmpgt(__b, __a));
   2270 }
   2271 
   2272 static __inline__ vector bool int __ATTRS_o_ai vec_cmpge(vector float __a,
   2273                                                          vector float __b) {
   2274 #ifdef __VSX__
   2275   return (vector bool int)__builtin_vsx_xvcmpgesp(__a, __b);
   2276 #else
   2277   return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
   2278 #endif
   2279 }
   2280 
   2281 #ifdef __VSX__
   2282 static __inline__ vector bool long long __ATTRS_o_ai
   2283 vec_cmpge(vector double __a, vector double __b) {
   2284   return (vector bool long long)__builtin_vsx_xvcmpgedp(__a, __b);
   2285 }
   2286 
   2287 static __inline__ vector bool long long __ATTRS_o_ai
   2288 vec_cmpge(vector signed long long __a, vector signed long long __b) {
   2289   return ~(vec_cmpgt(__b, __a));
   2290 }
   2291 
   2292 static __inline__ vector bool long long __ATTRS_o_ai
   2293 vec_cmpge(vector unsigned long long __a, vector unsigned long long __b) {
   2294   return ~(vec_cmpgt(__b, __a));
   2295 }
   2296 #endif
   2297 
   2298 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   2299 static __inline__ vector bool __int128 __ATTRS_o_ai
   2300 vec_cmpge(vector signed __int128 __a, vector signed __int128 __b) {
   2301   return ~(vec_cmpgt(__b, __a));
   2302 }
   2303 
   2304 static __inline__ vector bool __int128 __ATTRS_o_ai
   2305 vec_cmpge(vector unsigned __int128 __a, vector unsigned __int128 __b) {
   2306   return ~(vec_cmpgt(__b, __a));
   2307 }
   2308 #endif
   2309 
   2310 /* vec_vcmpgefp */
   2311 
   2312 static __inline__ vector bool int __attribute__((__always_inline__))
   2313 vec_vcmpgefp(vector float __a, vector float __b) {
   2314   return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
   2315 }
   2316 
   2317 /* vec_vcmpgtsb */
   2318 
   2319 static __inline__ vector bool char __attribute__((__always_inline__))
   2320 vec_vcmpgtsb(vector signed char __a, vector signed char __b) {
   2321   return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
   2322 }
   2323 
   2324 /* vec_vcmpgtub */
   2325 
   2326 static __inline__ vector bool char __attribute__((__always_inline__))
   2327 vec_vcmpgtub(vector unsigned char __a, vector unsigned char __b) {
   2328   return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
   2329 }
   2330 
   2331 /* vec_vcmpgtsh */
   2332 
   2333 static __inline__ vector bool short __attribute__((__always_inline__))
   2334 vec_vcmpgtsh(vector short __a, vector short __b) {
   2335   return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
   2336 }
   2337 
   2338 /* vec_vcmpgtuh */
   2339 
   2340 static __inline__ vector bool short __attribute__((__always_inline__))
   2341 vec_vcmpgtuh(vector unsigned short __a, vector unsigned short __b) {
   2342   return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
   2343 }
   2344 
   2345 /* vec_vcmpgtsw */
   2346 
   2347 static __inline__ vector bool int __attribute__((__always_inline__))
   2348 vec_vcmpgtsw(vector int __a, vector int __b) {
   2349   return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
   2350 }
   2351 
   2352 /* vec_vcmpgtuw */
   2353 
   2354 static __inline__ vector bool int __attribute__((__always_inline__))
   2355 vec_vcmpgtuw(vector unsigned int __a, vector unsigned int __b) {
   2356   return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
   2357 }
   2358 
   2359 /* vec_vcmpgtfp */
   2360 
   2361 static __inline__ vector bool int __attribute__((__always_inline__))
   2362 vec_vcmpgtfp(vector float __a, vector float __b) {
   2363   return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
   2364 }
   2365 
   2366 /* vec_cmple */
   2367 
   2368 static __inline__ vector bool char __ATTRS_o_ai
   2369 vec_cmple(vector signed char __a, vector signed char __b) {
   2370   return vec_cmpge(__b, __a);
   2371 }
   2372 
   2373 static __inline__ vector bool char __ATTRS_o_ai
   2374 vec_cmple(vector unsigned char __a, vector unsigned char __b) {
   2375   return vec_cmpge(__b, __a);
   2376 }
   2377 
   2378 static __inline__ vector bool short __ATTRS_o_ai
   2379 vec_cmple(vector signed short __a, vector signed short __b) {
   2380   return vec_cmpge(__b, __a);
   2381 }
   2382 
   2383 static __inline__ vector bool short __ATTRS_o_ai
   2384 vec_cmple(vector unsigned short __a, vector unsigned short __b) {
   2385   return vec_cmpge(__b, __a);
   2386 }
   2387 
   2388 static __inline__ vector bool int __ATTRS_o_ai
   2389 vec_cmple(vector signed int __a, vector signed int __b) {
   2390   return vec_cmpge(__b, __a);
   2391 }
   2392 
   2393 static __inline__ vector bool int __ATTRS_o_ai
   2394 vec_cmple(vector unsigned int __a, vector unsigned int __b) {
   2395   return vec_cmpge(__b, __a);
   2396 }
   2397 
   2398 static __inline__ vector bool int __ATTRS_o_ai vec_cmple(vector float __a,
   2399                                                          vector float __b) {
   2400   return vec_cmpge(__b, __a);
   2401 }
   2402 
   2403 #ifdef __VSX__
   2404 static __inline__ vector bool long long __ATTRS_o_ai
   2405 vec_cmple(vector double __a, vector double __b) {
   2406   return vec_cmpge(__b, __a);
   2407 }
   2408 
   2409 static __inline__ vector bool long long __ATTRS_o_ai
   2410 vec_cmple(vector signed long long __a, vector signed long long __b) {
   2411   return vec_cmpge(__b, __a);
   2412 }
   2413 
   2414 static __inline__ vector bool long long __ATTRS_o_ai
   2415 vec_cmple(vector unsigned long long __a, vector unsigned long long __b) {
   2416   return vec_cmpge(__b, __a);
   2417 }
   2418 #endif
   2419 
   2420 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   2421 static __inline__ vector bool __int128 __ATTRS_o_ai
   2422 vec_cmple(vector signed __int128 __a, vector signed __int128 __b) {
   2423   return vec_cmpge(__b, __a);
   2424 }
   2425 
   2426 static __inline__ vector bool __int128 __ATTRS_o_ai
   2427 vec_cmple(vector unsigned __int128 __a, vector unsigned __int128 __b) {
   2428   return vec_cmpge(__b, __a);
   2429 }
   2430 #endif
   2431 
   2432 /* vec_cmplt */
   2433 
   2434 static __inline__ vector bool char __ATTRS_o_ai
   2435 vec_cmplt(vector signed char __a, vector signed char __b) {
   2436   return vec_cmpgt(__b, __a);
   2437 }
   2438 
   2439 static __inline__ vector bool char __ATTRS_o_ai
   2440 vec_cmplt(vector unsigned char __a, vector unsigned char __b) {
   2441   return vec_cmpgt(__b, __a);
   2442 }
   2443 
   2444 static __inline__ vector bool short __ATTRS_o_ai vec_cmplt(vector short __a,
   2445                                                            vector short __b) {
   2446   return vec_cmpgt(__b, __a);
   2447 }
   2448 
   2449 static __inline__ vector bool short __ATTRS_o_ai
   2450 vec_cmplt(vector unsigned short __a, vector unsigned short __b) {
   2451   return vec_cmpgt(__b, __a);
   2452 }
   2453 
   2454 static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector int __a,
   2455                                                          vector int __b) {
   2456   return vec_cmpgt(__b, __a);
   2457 }
   2458 
   2459 static __inline__ vector bool int __ATTRS_o_ai
   2460 vec_cmplt(vector unsigned int __a, vector unsigned int __b) {
   2461   return vec_cmpgt(__b, __a);
   2462 }
   2463 
   2464 static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector float __a,
   2465                                                          vector float __b) {
   2466   return vec_cmpgt(__b, __a);
   2467 }
   2468 
   2469 #ifdef __VSX__
   2470 static __inline__ vector bool long long __ATTRS_o_ai
   2471 vec_cmplt(vector double __a, vector double __b) {
   2472   return vec_cmpgt(__b, __a);
   2473 }
   2474 #endif
   2475 
   2476 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   2477 static __inline__ vector bool __int128 __ATTRS_o_ai
   2478 vec_cmplt(vector signed __int128 __a, vector signed __int128 __b) {
   2479   return vec_cmpgt(__b, __a);
   2480 }
   2481 
   2482 static __inline__ vector bool __int128 __ATTRS_o_ai
   2483 vec_cmplt(vector unsigned __int128 __a, vector unsigned __int128 __b) {
   2484   return vec_cmpgt(__b, __a);
   2485 }
   2486 #endif
   2487 
   2488 #ifdef __VSX__
   2489 static __inline__ vector bool long long __ATTRS_o_ai
   2490 vec_cmplt(vector signed long long __a, vector signed long long __b) {
   2491   return vec_cmpgt(__b, __a);
   2492 }
   2493 
   2494 static __inline__ vector bool long long __ATTRS_o_ai
   2495 vec_cmplt(vector unsigned long long __a, vector unsigned long long __b) {
   2496   return vec_cmpgt(__b, __a);
   2497 }
   2498 #endif
   2499 
   2500 #ifdef __POWER8_VECTOR__
   2501 /* vec_popcnt */
   2502 
   2503 static __inline__ vector unsigned char __ATTRS_o_ai
   2504 vec_popcnt(vector signed char __a) {
   2505   return (vector unsigned char)__builtin_elementwise_popcount(
   2506       (vector unsigned char)__a);
   2507 }
   2508 static __inline__ vector unsigned char __ATTRS_o_ai
   2509 vec_popcnt(vector unsigned char __a) {
   2510   return __builtin_elementwise_popcount(__a);
   2511 }
   2512 static __inline__ vector unsigned short __ATTRS_o_ai
   2513 vec_popcnt(vector signed short __a) {
   2514   return (vector unsigned short)__builtin_elementwise_popcount(
   2515       (vector unsigned short)__a);
   2516 }
   2517 static __inline__ vector unsigned short __ATTRS_o_ai
   2518 vec_popcnt(vector unsigned short __a) {
   2519   return __builtin_elementwise_popcount(__a);
   2520 }
   2521 static __inline__ vector unsigned int __ATTRS_o_ai
   2522 vec_popcnt(vector signed int __a) {
   2523   return __builtin_elementwise_popcount((vector unsigned int)__a);
   2524 }
   2525 static __inline__ vector unsigned int __ATTRS_o_ai
   2526 vec_popcnt(vector unsigned int __a) {
   2527   return __builtin_elementwise_popcount(__a);
   2528 }
   2529 static __inline__ vector unsigned long long __ATTRS_o_ai
   2530 vec_popcnt(vector signed long long __a) {
   2531   return __builtin_elementwise_popcount((vector unsigned long long)__a);
   2532 }
   2533 static __inline__ vector unsigned long long __ATTRS_o_ai
   2534 vec_popcnt(vector unsigned long long __a) {
   2535   return __builtin_elementwise_popcount(__a);
   2536 }
   2537 
   2538 #define vec_vclz vec_cntlz
   2539 /* vec_cntlz */
   2540 
   2541 static __inline__ vector signed char __ATTRS_o_ai
   2542 vec_cntlz(vector signed char __a) {
   2543   return (vector signed char)__builtin_altivec_vclzb((vector unsigned char)__a);
   2544 }
   2545 static __inline__ vector unsigned char __ATTRS_o_ai
   2546 vec_cntlz(vector unsigned char __a) {
   2547   return __builtin_altivec_vclzb(__a);
   2548 }
   2549 static __inline__ vector signed short __ATTRS_o_ai
   2550 vec_cntlz(vector signed short __a) {
   2551   return (vector signed short)__builtin_altivec_vclzh(
   2552       (vector unsigned short)__a);
   2553 }
   2554 static __inline__ vector unsigned short __ATTRS_o_ai
   2555 vec_cntlz(vector unsigned short __a) {
   2556   return __builtin_altivec_vclzh(__a);
   2557 }
   2558 static __inline__ vector signed int __ATTRS_o_ai
   2559 vec_cntlz(vector signed int __a) {
   2560   return (vector signed int)__builtin_altivec_vclzw((vector unsigned int)__a);
   2561 }
   2562 static __inline__ vector unsigned int __ATTRS_o_ai
   2563 vec_cntlz(vector unsigned int __a) {
   2564   return __builtin_altivec_vclzw(__a);
   2565 }
   2566 static __inline__ vector signed long long __ATTRS_o_ai
   2567 vec_cntlz(vector signed long long __a) {
   2568   return (vector signed long long)__builtin_altivec_vclzd(
   2569       (vector unsigned long long)__a);
   2570 }
   2571 static __inline__ vector unsigned long long __ATTRS_o_ai
   2572 vec_cntlz(vector unsigned long long __a) {
   2573   return __builtin_altivec_vclzd(__a);
   2574 }
   2575 #endif
   2576 
   2577 #ifdef __POWER9_VECTOR__
   2578 
   2579 /* vec_cnttz */
   2580 
   2581 static __inline__ vector signed char __ATTRS_o_ai
   2582 vec_cnttz(vector signed char __a) {
   2583   return (vector signed char)__builtin_altivec_vctzb((vector unsigned char)__a);
   2584 }
   2585 static __inline__ vector unsigned char __ATTRS_o_ai
   2586 vec_cnttz(vector unsigned char __a) {
   2587   return __builtin_altivec_vctzb(__a);
   2588 }
   2589 static __inline__ vector signed short __ATTRS_o_ai
   2590 vec_cnttz(vector signed short __a) {
   2591   return (vector signed short)__builtin_altivec_vctzh(
   2592       (vector unsigned short)__a);
   2593 }
   2594 static __inline__ vector unsigned short __ATTRS_o_ai
   2595 vec_cnttz(vector unsigned short __a) {
   2596   return __builtin_altivec_vctzh(__a);
   2597 }
   2598 static __inline__ vector signed int __ATTRS_o_ai
   2599 vec_cnttz(vector signed int __a) {
   2600   return (vector signed int)__builtin_altivec_vctzw((vector unsigned int)__a);
   2601 }
   2602 static __inline__ vector unsigned int __ATTRS_o_ai
   2603 vec_cnttz(vector unsigned int __a) {
   2604   return __builtin_altivec_vctzw(__a);
   2605 }
   2606 static __inline__ vector signed long long __ATTRS_o_ai
   2607 vec_cnttz(vector signed long long __a) {
   2608   return (vector signed long long)__builtin_altivec_vctzd(
   2609       (vector unsigned long long)__a);
   2610 }
   2611 static __inline__ vector unsigned long long __ATTRS_o_ai
   2612 vec_cnttz(vector unsigned long long __a) {
   2613   return __builtin_altivec_vctzd(__a);
   2614 }
   2615 
   2616 /* vec_first_match_index */
   2617 
   2618 static __inline__ unsigned __ATTRS_o_ai
   2619 vec_first_match_index(vector signed char __a, vector signed char __b) {
   2620   vector unsigned long long __res =
   2621 #ifdef __LITTLE_ENDIAN__
   2622     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
   2623 #else
   2624     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
   2625 #endif
   2626   if (__res[0] == 64) {
   2627     return (__res[1] + 64) >> 3;
   2628   }
   2629   return __res[0] >> 3;
   2630 }
   2631 
   2632 static __inline__ unsigned __ATTRS_o_ai
   2633 vec_first_match_index(vector unsigned char __a, vector unsigned char __b) {
   2634   vector unsigned long long __res =
   2635 #ifdef __LITTLE_ENDIAN__
   2636     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
   2637 #else
   2638     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
   2639 #endif
   2640   if (__res[0] == 64) {
   2641     return (__res[1] + 64) >> 3;
   2642   }
   2643   return __res[0] >> 3;
   2644 }
   2645 
   2646 static __inline__ unsigned __ATTRS_o_ai
   2647 vec_first_match_index(vector signed short __a, vector signed short __b) {
   2648   vector unsigned long long __res =
   2649 #ifdef __LITTLE_ENDIAN__
   2650     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
   2651 #else
   2652     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
   2653 #endif
   2654   if (__res[0] == 64) {
   2655     return (__res[1] + 64) >> 4;
   2656   }
   2657   return __res[0] >> 4;
   2658 }
   2659 
   2660 static __inline__ unsigned __ATTRS_o_ai
   2661 vec_first_match_index(vector unsigned short __a, vector unsigned short __b) {
   2662   vector unsigned long long __res =
   2663 #ifdef __LITTLE_ENDIAN__
   2664     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
   2665 #else
   2666     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
   2667 #endif
   2668   if (__res[0] == 64) {
   2669     return (__res[1] + 64) >> 4;
   2670   }
   2671   return __res[0] >> 4;
   2672 }
   2673 
   2674 static __inline__ unsigned __ATTRS_o_ai
   2675 vec_first_match_index(vector signed int __a, vector signed int __b) {
   2676   vector unsigned long long __res =
   2677 #ifdef __LITTLE_ENDIAN__
   2678     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
   2679 #else
   2680     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
   2681 #endif
   2682   if (__res[0] == 64) {
   2683     return (__res[1] + 64) >> 5;
   2684   }
   2685   return __res[0] >> 5;
   2686 }
   2687 
   2688 static __inline__ unsigned __ATTRS_o_ai
   2689 vec_first_match_index(vector unsigned int __a, vector unsigned int __b) {
   2690   vector unsigned long long __res =
   2691 #ifdef __LITTLE_ENDIAN__
   2692     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
   2693 #else
   2694     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
   2695 #endif
   2696   if (__res[0] == 64) {
   2697     return (__res[1] + 64) >> 5;
   2698   }
   2699   return __res[0] >> 5;
   2700 }
   2701 
   2702 /* vec_first_match_or_eos_index */
   2703 
   2704 static __inline__ unsigned __ATTRS_o_ai
   2705 vec_first_match_or_eos_index(vector signed char __a, vector signed char __b) {
   2706   /* Compare the result of the comparison of two vectors with either and OR the
   2707      result. Either the elements are equal or one will equal the comparison
   2708      result if either is zero.
   2709   */
   2710   vector bool char __tmp1 = vec_cmpeq(__a, __b);
   2711   vector bool char __tmp2 = __tmp1 |
   2712                             vec_cmpeq((vector signed char)__tmp1, __a) |
   2713                             vec_cmpeq((vector signed char)__tmp1, __b);
   2714 
   2715   vector unsigned long long __res =
   2716 #ifdef __LITTLE_ENDIAN__
   2717       vec_cnttz((vector unsigned long long)__tmp2);
   2718 #else
   2719       vec_cntlz((vector unsigned long long)__tmp2);
   2720 #endif
   2721   if (__res[0] == 64) {
   2722     return (__res[1] + 64) >> 3;
   2723   }
   2724   return __res[0] >> 3;
   2725 }
   2726 
   2727 static __inline__ unsigned __ATTRS_o_ai
   2728 vec_first_match_or_eos_index(vector unsigned char __a,
   2729                              vector unsigned char __b) {
   2730   vector bool char __tmp1 = vec_cmpeq(__a, __b);
   2731   vector bool char __tmp2 = __tmp1 |
   2732                             vec_cmpeq((vector unsigned char)__tmp1, __a) |
   2733                             vec_cmpeq((vector unsigned char)__tmp1, __b);
   2734 
   2735   vector unsigned long long __res =
   2736 #ifdef __LITTLE_ENDIAN__
   2737       vec_cnttz((vector unsigned long long)__tmp2);
   2738 #else
   2739       vec_cntlz((vector unsigned long long)__tmp2);
   2740 #endif
   2741   if (__res[0] == 64) {
   2742     return (__res[1] + 64) >> 3;
   2743   }
   2744   return __res[0] >> 3;
   2745 }
   2746 
   2747 static __inline__ unsigned __ATTRS_o_ai
   2748 vec_first_match_or_eos_index(vector signed short __a, vector signed short __b) {
   2749   vector bool short __tmp1 = vec_cmpeq(__a, __b);
   2750   vector bool short __tmp2 = __tmp1 |
   2751                              vec_cmpeq((vector signed short)__tmp1, __a) |
   2752                              vec_cmpeq((vector signed short)__tmp1, __b);
   2753 
   2754   vector unsigned long long __res =
   2755 #ifdef __LITTLE_ENDIAN__
   2756       vec_cnttz((vector unsigned long long)__tmp2);
   2757 #else
   2758       vec_cntlz((vector unsigned long long)__tmp2);
   2759 #endif
   2760   if (__res[0] == 64) {
   2761     return (__res[1] + 64) >> 4;
   2762   }
   2763   return __res[0] >> 4;
   2764 }
   2765 
   2766 static __inline__ unsigned __ATTRS_o_ai
   2767 vec_first_match_or_eos_index(vector unsigned short __a,
   2768                              vector unsigned short __b) {
   2769   vector bool short __tmp1 = vec_cmpeq(__a, __b);
   2770   vector bool short __tmp2 = __tmp1 |
   2771                              vec_cmpeq((vector unsigned short)__tmp1, __a) |
   2772                              vec_cmpeq((vector unsigned short)__tmp1, __b);
   2773 
   2774   vector unsigned long long __res =
   2775 #ifdef __LITTLE_ENDIAN__
   2776       vec_cnttz((vector unsigned long long)__tmp2);
   2777 #else
   2778       vec_cntlz((vector unsigned long long)__tmp2);
   2779 #endif
   2780   if (__res[0] == 64) {
   2781     return (__res[1] + 64) >> 4;
   2782   }
   2783   return __res[0] >> 4;
   2784 }
   2785 
   2786 static __inline__ unsigned __ATTRS_o_ai
   2787 vec_first_match_or_eos_index(vector signed int __a, vector signed int __b) {
   2788   vector bool int __tmp1 = vec_cmpeq(__a, __b);
   2789   vector bool int __tmp2 = __tmp1 | vec_cmpeq((vector signed int)__tmp1, __a) |
   2790                            vec_cmpeq((vector signed int)__tmp1, __b);
   2791 
   2792   vector unsigned long long __res =
   2793 #ifdef __LITTLE_ENDIAN__
   2794       vec_cnttz((vector unsigned long long)__tmp2);
   2795 #else
   2796       vec_cntlz((vector unsigned long long)__tmp2);
   2797 #endif
   2798   if (__res[0] == 64) {
   2799     return (__res[1] + 64) >> 5;
   2800   }
   2801   return __res[0] >> 5;
   2802 }
   2803 
   2804 static __inline__ unsigned __ATTRS_o_ai
   2805 vec_first_match_or_eos_index(vector unsigned int __a, vector unsigned int __b) {
   2806   vector bool int __tmp1 = vec_cmpeq(__a, __b);
   2807   vector bool int __tmp2 = __tmp1 |
   2808                            vec_cmpeq((vector unsigned int)__tmp1, __a) |
   2809                            vec_cmpeq((vector unsigned int)__tmp1, __b);
   2810 
   2811   vector unsigned long long __res =
   2812 #ifdef __LITTLE_ENDIAN__
   2813     vec_cnttz((vector unsigned long long)__tmp2);
   2814 #else
   2815     vec_cntlz((vector unsigned long long)__tmp2);
   2816 #endif
   2817   if (__res[0] == 64) {
   2818     return (__res[1] + 64) >> 5;
   2819   }
   2820   return __res[0] >> 5;
   2821 }
   2822 
   2823 /* vec_first_mismatch_index */
   2824 
   2825 static __inline__ unsigned __ATTRS_o_ai
   2826 vec_first_mismatch_index(vector signed char __a, vector signed char __b) {
   2827   vector unsigned long long __res =
   2828 #ifdef __LITTLE_ENDIAN__
   2829     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
   2830 #else
   2831     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
   2832 #endif
   2833   if (__res[0] == 64) {
   2834     return (__res[1] + 64) >> 3;
   2835   }
   2836   return __res[0] >> 3;
   2837 }
   2838 
   2839 static __inline__ unsigned __ATTRS_o_ai
   2840 vec_first_mismatch_index(vector unsigned char __a, vector unsigned char __b) {
   2841   vector unsigned long long __res =
   2842 #ifdef __LITTLE_ENDIAN__
   2843     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
   2844 #else
   2845     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
   2846 #endif
   2847   if (__res[0] == 64) {
   2848     return (__res[1] + 64) >> 3;
   2849   }
   2850   return __res[0] >> 3;
   2851 }
   2852 
   2853 static __inline__ unsigned __ATTRS_o_ai
   2854 vec_first_mismatch_index(vector signed short __a, vector signed short __b) {
   2855   vector unsigned long long __res =
   2856 #ifdef __LITTLE_ENDIAN__
   2857     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
   2858 #else
   2859     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
   2860 #endif
   2861   if (__res[0] == 64) {
   2862     return (__res[1] + 64) >> 4;
   2863   }
   2864   return __res[0] >> 4;
   2865 }
   2866 
   2867 static __inline__ unsigned __ATTRS_o_ai
   2868 vec_first_mismatch_index(vector unsigned short __a, vector unsigned short __b) {
   2869   vector unsigned long long __res =
   2870 #ifdef __LITTLE_ENDIAN__
   2871     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
   2872 #else
   2873     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
   2874 #endif
   2875   if (__res[0] == 64) {
   2876     return (__res[1] + 64) >> 4;
   2877   }
   2878   return __res[0] >> 4;
   2879 }
   2880 
   2881 static __inline__ unsigned __ATTRS_o_ai
   2882 vec_first_mismatch_index(vector signed int __a, vector signed int __b) {
   2883   vector unsigned long long __res =
   2884 #ifdef __LITTLE_ENDIAN__
   2885     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
   2886 #else
   2887     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
   2888 #endif
   2889   if (__res[0] == 64) {
   2890     return (__res[1] + 64) >> 5;
   2891   }
   2892   return __res[0] >> 5;
   2893 }
   2894 
   2895 static __inline__ unsigned __ATTRS_o_ai
   2896 vec_first_mismatch_index(vector unsigned int __a, vector unsigned int __b) {
   2897   vector unsigned long long __res =
   2898 #ifdef __LITTLE_ENDIAN__
   2899     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
   2900 #else
   2901     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
   2902 #endif
   2903   if (__res[0] == 64) {
   2904     return (__res[1] + 64) >> 5;
   2905   }
   2906   return __res[0] >> 5;
   2907 }
   2908 
   2909 /* vec_first_mismatch_or_eos_index */
   2910 
   2911 static __inline__ unsigned __ATTRS_o_ai
   2912 vec_first_mismatch_or_eos_index(vector signed char __a,
   2913                                 vector signed char __b) {
   2914   vector unsigned long long __res =
   2915 #ifdef __LITTLE_ENDIAN__
   2916     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
   2917 #else
   2918     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
   2919 #endif
   2920   if (__res[0] == 64) {
   2921     return (__res[1] + 64) >> 3;
   2922   }
   2923   return __res[0] >> 3;
   2924 }
   2925 
   2926 static __inline__ unsigned __ATTRS_o_ai
   2927 vec_first_mismatch_or_eos_index(vector unsigned char __a,
   2928                                 vector unsigned char __b) {
   2929   vector unsigned long long __res =
   2930 #ifdef __LITTLE_ENDIAN__
   2931     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
   2932 #else
   2933     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
   2934 #endif
   2935   if (__res[0] == 64) {
   2936     return (__res[1] + 64) >> 3;
   2937   }
   2938   return __res[0] >> 3;
   2939 }
   2940 
   2941 static __inline__ unsigned __ATTRS_o_ai
   2942 vec_first_mismatch_or_eos_index(vector signed short __a,
   2943                                 vector signed short __b) {
   2944   vector unsigned long long __res =
   2945 #ifdef __LITTLE_ENDIAN__
   2946     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
   2947 #else
   2948     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
   2949 #endif
   2950   if (__res[0] == 64) {
   2951     return (__res[1] + 64) >> 4;
   2952   }
   2953   return __res[0] >> 4;
   2954 }
   2955 
   2956 static __inline__ unsigned __ATTRS_o_ai
   2957 vec_first_mismatch_or_eos_index(vector unsigned short __a,
   2958                                 vector unsigned short __b) {
   2959   vector unsigned long long __res =
   2960 #ifdef __LITTLE_ENDIAN__
   2961     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
   2962 #else
   2963     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
   2964 #endif
   2965   if (__res[0] == 64) {
   2966     return (__res[1] + 64) >> 4;
   2967   }
   2968   return __res[0] >> 4;
   2969 }
   2970 
   2971 static __inline__ unsigned __ATTRS_o_ai
   2972 vec_first_mismatch_or_eos_index(vector signed int __a, vector signed int __b) {
   2973   vector unsigned long long __res =
   2974 #ifdef __LITTLE_ENDIAN__
   2975     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
   2976 #else
   2977     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
   2978 #endif
   2979   if (__res[0] == 64) {
   2980     return (__res[1] + 64) >> 5;
   2981   }
   2982   return __res[0] >> 5;
   2983 }
   2984 
   2985 static __inline__ unsigned __ATTRS_o_ai
   2986 vec_first_mismatch_or_eos_index(vector unsigned int __a,
   2987                                 vector unsigned int __b) {
   2988   vector unsigned long long __res =
   2989 #ifdef __LITTLE_ENDIAN__
   2990     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
   2991 #else
   2992     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
   2993 #endif
   2994   if (__res[0] == 64) {
   2995     return (__res[1] + 64) >> 5;
   2996   }
   2997   return __res[0] >> 5;
   2998 }
   2999 
   3000 static __inline__ vector double  __ATTRS_o_ai
   3001 vec_insert_exp(vector double __a, vector unsigned long long __b) {
   3002   return __builtin_vsx_xviexpdp((vector unsigned long long)__a,__b);
   3003 }
   3004 
   3005 static __inline__ vector double  __ATTRS_o_ai
   3006 vec_insert_exp(vector unsigned long long __a, vector unsigned long long __b) {
   3007   return __builtin_vsx_xviexpdp(__a,__b);
   3008 }
   3009 
   3010 static __inline__ vector float  __ATTRS_o_ai
   3011 vec_insert_exp(vector float __a, vector unsigned int __b) {
   3012   return __builtin_vsx_xviexpsp((vector unsigned int)__a,__b);
   3013 }
   3014 
   3015 static __inline__ vector float  __ATTRS_o_ai
   3016 vec_insert_exp(vector unsigned int __a, vector unsigned int __b) {
   3017   return __builtin_vsx_xviexpsp(__a,__b);
   3018 }
   3019 
   3020 #if defined(__powerpc64__)
   3021 static __inline__ vector signed char __ATTRS_o_ai vec_xl_len(const signed char *__a,
   3022                                                              size_t __b) {
   3023   return (vector signed char)__builtin_vsx_lxvl(__a, (__b << 56));
   3024 }
   3025 
   3026 static __inline__ vector unsigned char __ATTRS_o_ai
   3027 vec_xl_len(const unsigned char *__a, size_t __b) {
   3028   return (vector unsigned char)__builtin_vsx_lxvl(__a, (__b << 56));
   3029 }
   3030 
   3031 static __inline__ vector signed short __ATTRS_o_ai vec_xl_len(const signed short *__a,
   3032                                                               size_t __b) {
   3033   return (vector signed short)__builtin_vsx_lxvl(__a, (__b << 56));
   3034 }
   3035 
   3036 static __inline__ vector unsigned short __ATTRS_o_ai
   3037 vec_xl_len(const unsigned short *__a, size_t __b) {
   3038   return (vector unsigned short)__builtin_vsx_lxvl(__a, (__b << 56));
   3039 }
   3040 
   3041 static __inline__ vector signed int __ATTRS_o_ai vec_xl_len(const signed int *__a,
   3042                                                             size_t __b) {
   3043   return (vector signed int)__builtin_vsx_lxvl(__a, (__b << 56));
   3044 }
   3045 
   3046 static __inline__ vector unsigned int __ATTRS_o_ai vec_xl_len(const unsigned int *__a,
   3047                                                               size_t __b) {
   3048   return (vector unsigned int)__builtin_vsx_lxvl(__a, (__b << 56));
   3049 }
   3050 
   3051 static __inline__ vector float __ATTRS_o_ai vec_xl_len(const float *__a, size_t __b) {
   3052   return (vector float)__builtin_vsx_lxvl(__a, (__b << 56));
   3053 }
   3054 
   3055 #ifdef __SIZEOF_INT128__
   3056 static __inline__ vector signed __int128 __ATTRS_o_ai
   3057 vec_xl_len(const signed __int128 *__a, size_t __b) {
   3058   return (vector signed __int128)__builtin_vsx_lxvl(__a, (__b << 56));
   3059 }
   3060 
   3061 static __inline__ vector unsigned __int128 __ATTRS_o_ai
   3062 vec_xl_len(const unsigned __int128 *__a, size_t __b) {
   3063   return (vector unsigned __int128)__builtin_vsx_lxvl(__a, (__b << 56));
   3064 }
   3065 #endif
   3066 
   3067 static __inline__ vector signed long long __ATTRS_o_ai
   3068 vec_xl_len(const signed long long *__a, size_t __b) {
   3069   return (vector signed long long)__builtin_vsx_lxvl(__a, (__b << 56));
   3070 }
   3071 
   3072 static __inline__ vector unsigned long long __ATTRS_o_ai
   3073 vec_xl_len(const unsigned long long *__a, size_t __b) {
   3074   return (vector unsigned long long)__builtin_vsx_lxvl(__a, (__b << 56));
   3075 }
   3076 
   3077 static __inline__ vector double __ATTRS_o_ai vec_xl_len(const double *__a,
   3078                                                         size_t __b) {
   3079   return (vector double)__builtin_vsx_lxvl(__a, (__b << 56));
   3080 }
   3081 
   3082 static __inline__ vector unsigned char __ATTRS_o_ai
   3083 vec_xl_len_r(const unsigned char *__a, size_t __b) {
   3084   vector unsigned char __res =
   3085       (vector unsigned char)__builtin_vsx_lxvll(__a, (__b << 56));
   3086   vector unsigned char __mask =
   3087       (vector unsigned char)__builtin_altivec_lvsr(16 - __b, (int *)NULL);
   3088   return (vector unsigned char)__builtin_altivec_vperm_4si(
   3089       (vector int)__res, (vector int)__res, __mask);
   3090 }
   3091 
   3092 // vec_xst_len
   3093 static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned char __a,
   3094                                                 unsigned char *__b,
   3095                                                 size_t __c) {
   3096   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
   3097 }
   3098 
   3099 static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed char __a,
   3100                                                 signed char *__b, size_t __c) {
   3101   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
   3102 }
   3103 
   3104 static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed short __a,
   3105                                                 signed short *__b, size_t __c) {
   3106   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
   3107 }
   3108 
   3109 static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned short __a,
   3110                                                 unsigned short *__b,
   3111                                                 size_t __c) {
   3112   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
   3113 }
   3114 
   3115 static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed int __a,
   3116                                                 signed int *__b, size_t __c) {
   3117   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
   3118 }
   3119 
   3120 static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned int __a,
   3121                                                 unsigned int *__b, size_t __c) {
   3122   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
   3123 }
   3124 
   3125 static __inline__ void __ATTRS_o_ai vec_xst_len(vector float __a, float *__b,
   3126                                                 size_t __c) {
   3127   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
   3128 }
   3129 
   3130 #ifdef __SIZEOF_INT128__
   3131 static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed __int128 __a,
   3132                                                 signed __int128 *__b,
   3133                                                 size_t __c) {
   3134   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
   3135 }
   3136 
   3137 static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned __int128 __a,
   3138                                                 unsigned __int128 *__b,
   3139                                                 size_t __c) {
   3140   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
   3141 }
   3142 #endif
   3143 
   3144 static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed long long __a,
   3145                                                 signed long long *__b,
   3146                                                 size_t __c) {
   3147   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
   3148 }
   3149 
   3150 static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned long long __a,
   3151                                                 unsigned long long *__b,
   3152                                                 size_t __c) {
   3153   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
   3154 }
   3155 
   3156 static __inline__ void __ATTRS_o_ai vec_xst_len(vector double __a, double *__b,
   3157                                                 size_t __c) {
   3158   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
   3159 }
   3160 
   3161 static __inline__ void __ATTRS_o_ai vec_xst_len_r(vector unsigned char __a,
   3162                                                   unsigned char *__b,
   3163                                                   size_t __c) {
   3164   vector unsigned char __mask =
   3165       (vector unsigned char)__builtin_altivec_lvsl(16 - __c, (int *)NULL);
   3166   vector unsigned char __res =
   3167       (vector unsigned char)__builtin_altivec_vperm_4si(
   3168           (vector int)__a, (vector int)__a, __mask);
   3169   return __builtin_vsx_stxvll((vector int)__res, __b, (__c << 56));
   3170 }
   3171 #endif
   3172 #endif
   3173 
   3174 #if defined(__POWER9_VECTOR__) && defined(__powerpc64__)
   3175 #define __vec_ldrmb(PTR, CNT) vec_xl_len_r((const unsigned char *)(PTR), (CNT))
   3176 #define __vec_strmb(PTR, CNT, VAL)                                             \
   3177   vec_xst_len_r((VAL), (unsigned char *)(PTR), (CNT))
   3178 #else
   3179 #define __vec_ldrmb __builtin_vsx_ldrmb
   3180 #define __vec_strmb __builtin_vsx_strmb
   3181 #endif
   3182 
   3183 /* vec_cpsgn */
   3184 
   3185 #ifdef __VSX__
   3186 static __inline__ vector float __ATTRS_o_ai vec_cpsgn(vector float __a,
   3187                                                       vector float __b) {
   3188   return __builtin_vsx_xvcpsgnsp(__b, __a);
   3189 }
   3190 
   3191 static __inline__ vector double __ATTRS_o_ai vec_cpsgn(vector double __a,
   3192                                                        vector double __b) {
   3193   return __builtin_vsx_xvcpsgndp(__b, __a);
   3194 }
   3195 #endif
   3196 
   3197 /* vec_ctf */
   3198 
   3199 #ifdef __VSX__
   3200 // There are some functions that have different signatures with the XL compiler
   3201 // from those in Clang/GCC and documented in the PVIPR. This macro ensures that
   3202 // the XL-compatible signatures are used for those functions.
   3203 #ifdef __XL_COMPAT_ALTIVEC__
   3204 #define vec_ctf(__a, __b)                                                      \
   3205   _Generic((__a),                                                              \
   3206       vector int: (vector float)__builtin_altivec_vcfsx((vector int)(__a),     \
   3207                                                         ((__b)&0x1F)),         \
   3208       vector unsigned int: (vector float)__builtin_altivec_vcfux(              \
   3209                (vector unsigned int)(__a), ((__b)&0x1F)),                      \
   3210       vector unsigned long long: (                                             \
   3211                vector float)(__builtin_vsx_xvcvuxdsp(                          \
   3212                                  (vector unsigned long long)(__a)) *           \
   3213                              (vector float)(vector unsigned)((0x7f -           \
   3214                                                               ((__b)&0x1F))    \
   3215                                                              << 23)),          \
   3216       vector signed long long: (                                               \
   3217                vector float)(__builtin_vsx_xvcvsxdsp(                          \
   3218                                  (vector signed long long)(__a)) *             \
   3219                              (vector float)(vector unsigned)((0x7f -           \
   3220                                                               ((__b)&0x1F))    \
   3221                                                              << 23)))
   3222 #else // __XL_COMPAT_ALTIVEC__
   3223 #define vec_ctf(__a, __b)                                                         \
   3224   _Generic(                                                                       \
   3225       (__a),                                                                      \
   3226       vector int: (vector float)__builtin_altivec_vcfsx((vector int)(__a),        \
   3227                                                         ((__b)&0x1F)),            \
   3228       vector unsigned int: (vector float)__builtin_altivec_vcfux(                 \
   3229           (vector unsigned int)(__a), ((__b)&0x1F)),                              \
   3230       vector unsigned long long: (                                                \
   3231           vector float)(__builtin_convertvector(                                  \
   3232                             (vector unsigned long long)(__a), vector double) *    \
   3233                         (vector double)(vector unsigned long long)((0x3ffULL -    \
   3234                                                                     ((__b)&0x1F)) \
   3235                                                                    << 52)),       \
   3236       vector signed long long: (                                                  \
   3237           vector float)(__builtin_convertvector(                                  \
   3238                             (vector signed long long)(__a), vector double) *      \
   3239                         (vector double)(vector unsigned long long)((0x3ffULL -    \
   3240                                                                     ((__b)&0x1F)) \
   3241                                                                    << 52)))
   3242 #endif // __XL_COMPAT_ALTIVEC__
   3243 #else
   3244 #define vec_ctf(__a, __b)                                                      \
   3245   _Generic((__a),                                                              \
   3246       vector int: (vector float)__builtin_altivec_vcfsx((vector int)(__a),     \
   3247                                                         ((__b)&0x1F)),         \
   3248       vector unsigned int: (vector float)__builtin_altivec_vcfux(              \
   3249                (vector unsigned int)(__a), ((__b)&0x1F)))
   3250 #endif
   3251 
   3252 /* vec_ctd */
   3253 #ifdef __VSX__
   3254 #define vec_ctd(__a, __b)                                                      \
   3255   _Generic((__a),                                                              \
   3256       vector signed int: (                                                     \
   3257                vec_doublee((vector signed int)(__a)) *                         \
   3258                (vector double)(vector unsigned long long)((0x3ffULL -          \
   3259                                                            ((__b)&0x1F))       \
   3260                                                           << 52)),             \
   3261       vector unsigned int: (                                                   \
   3262                vec_doublee((vector unsigned int)(__a)) *                       \
   3263                (vector double)(vector unsigned long long)((0x3ffULL -          \
   3264                                                            ((__b)&0x1F))       \
   3265                                                           << 52)),             \
   3266       vector unsigned long long: (                                             \
   3267                __builtin_convertvector((vector unsigned long long)(__a),       \
   3268                                        vector double) *                        \
   3269                (vector double)(vector unsigned long long)((0x3ffULL -          \
   3270                                                            ((__b)&0x1F))       \
   3271                                                           << 52)),             \
   3272       vector signed long long: (                                               \
   3273                __builtin_convertvector((vector signed long long)(__a),         \
   3274                                        vector double) *                        \
   3275                (vector double)(vector unsigned long long)((0x3ffULL -          \
   3276                                                            ((__b)&0x1F))       \
   3277                                                           << 52)))
   3278 #endif // __VSX__
   3279 
   3280 /* vec_vcfsx */
   3281 
   3282 #define vec_vcfux __builtin_altivec_vcfux
   3283 /* vec_vcfux */
   3284 
   3285 #define vec_vcfsx(__a, __b) __builtin_altivec_vcfsx((vector int)(__a), (__b))
   3286 
   3287 /* vec_cts */
   3288 
   3289 #ifdef __VSX__
   3290 #ifdef __XL_COMPAT_ALTIVEC__
   3291 #define vec_cts(__a, __b)                                                      \
   3292   _Generic((__a),                                                              \
   3293       vector float: (vector signed int)__builtin_altivec_vctsxs(               \
   3294                (vector float)(__a), ((__b)&0x1F)),                             \
   3295       vector double: __extension__({                                           \
   3296              vector double __ret =                                             \
   3297                  (vector double)(__a) *                                        \
   3298                  (vector double)(vector unsigned long long)((0x3ffULL +        \
   3299                                                              ((__b)&0x1F))     \
   3300                                                             << 52);            \
   3301              (vector signed long long)__builtin_vsx_xvcvdpsxws(__ret);         \
   3302            }))
   3303 #else // __XL_COMPAT_ALTIVEC__
   3304 #define vec_cts(__a, __b)                                                      \
   3305   _Generic((__a),                                                              \
   3306       vector float: (vector signed int)__builtin_altivec_vctsxs(               \
   3307                (vector float)(__a), ((__b)&0x1F)),                             \
   3308       vector double: __extension__({                                           \
   3309              vector double __ret =                                             \
   3310                  (vector double)(__a) *                                        \
   3311                  (vector double)(vector unsigned long long)((0x3ffULL +        \
   3312                                                              ((__b)&0x1F))     \
   3313                                                             << 52);            \
   3314              (vector signed long long)__builtin_convertvector(                 \
   3315                  __ret, vector signed long long);                              \
   3316            }))
   3317 #endif // __XL_COMPAT_ALTIVEC__
   3318 #else
   3319 #define vec_cts __builtin_altivec_vctsxs
   3320 #endif
   3321 
   3322 /* vec_vctsxs */
   3323 
   3324 #define vec_vctsxs __builtin_altivec_vctsxs
   3325 
   3326 /* vec_ctu */
   3327 
   3328 #ifdef __VSX__
   3329 #ifdef __XL_COMPAT_ALTIVEC__
   3330 #define vec_ctu(__a, __b)                                                      \
   3331   _Generic((__a),                                                              \
   3332       vector float: (vector unsigned int)__builtin_altivec_vctuxs(             \
   3333                (vector float)(__a), ((__b)&0x1F)),                             \
   3334       vector double: __extension__({                                           \
   3335              vector double __ret =                                             \
   3336                  (vector double)(__a) *                                        \
   3337                  (vector double)(vector unsigned long long)((0x3ffULL +        \
   3338                                                              ((__b)&0x1F))     \
   3339                                                             << 52);            \
   3340              (vector unsigned long long)__builtin_vsx_xvcvdpuxws(__ret);       \
   3341            }))
   3342 #else // __XL_COMPAT_ALTIVEC__
   3343 #define vec_ctu(__a, __b)                                                      \
   3344   _Generic((__a),                                                              \
   3345       vector float: (vector unsigned int)__builtin_altivec_vctuxs(             \
   3346                (vector float)(__a), ((__b)&0x1F)),                             \
   3347       vector double: __extension__({                                           \
   3348              vector double __ret =                                             \
   3349                  (vector double)(__a) *                                        \
   3350                  (vector double)(vector unsigned long long)((0x3ffULL +        \
   3351                                                              ((__b)&0x1F))     \
   3352                                                             << 52);            \
   3353              (vector unsigned long long)__builtin_convertvector(               \
   3354                  __ret, vector unsigned long long);                            \
   3355            }))
   3356 #endif // __XL_COMPAT_ALTIVEC__
   3357 #else
   3358 #define vec_ctu __builtin_altivec_vctuxs
   3359 #endif
   3360 
   3361 #ifdef __LITTLE_ENDIAN__
   3362 /* vec_ctsl */
   3363 
   3364 #ifdef __VSX__
   3365 #define vec_ctsl(__a, __b)                                                     \
   3366   _Generic(                                                                    \
   3367       (__a), vector float                                                      \
   3368       : __extension__({                                                        \
   3369           vector float __ret =                                                 \
   3370               (vector float)(__a) *                                            \
   3371               (vector float)(vector unsigned)((0x7f + ((__b)&0x1F)) << 23);    \
   3372           __builtin_vsx_xvcvspsxds(__builtin_vsx_xxsldwi(__ret, __ret, 1));    \
   3373         }),                                                                    \
   3374         vector double                                                          \
   3375       : __extension__({                                                        \
   3376         vector double __ret =                                                  \
   3377             (vector double)(__a) *                                             \
   3378             (vector double)(vector unsigned long long)((0x3ffULL +             \
   3379                                                         ((__b)&0x1F))          \
   3380                                                        << 52);                 \
   3381         __builtin_convertvector(__ret, vector signed long long);               \
   3382       }))
   3383 
   3384 /* vec_ctul */
   3385 
   3386 #define vec_ctul(__a, __b)                                                     \
   3387   _Generic(                                                                    \
   3388       (__a), vector float                                                      \
   3389       : __extension__({                                                        \
   3390           vector float __ret =                                                 \
   3391               (vector float)(__a) *                                            \
   3392               (vector float)(vector unsigned)((0x7f + ((__b)&0x1F)) << 23);    \
   3393           __builtin_vsx_xvcvspuxds(__builtin_vsx_xxsldwi(__ret, __ret, 1));    \
   3394         }),                                                                    \
   3395         vector double                                                          \
   3396       : __extension__({                                                        \
   3397         vector double __ret =                                                  \
   3398             (vector double)(__a) *                                             \
   3399             (vector double)(vector unsigned long long)((0x3ffULL +             \
   3400                                                         ((__b)&0x1F))          \
   3401                                                        << 52);                 \
   3402         __builtin_convertvector(__ret, vector unsigned long long);             \
   3403       }))
   3404 #endif
   3405 #else // __LITTLE_ENDIAN__
   3406 /* vec_ctsl */
   3407 
   3408 #ifdef __VSX__
   3409 #define vec_ctsl(__a, __b)                                                     \
   3410   _Generic((__a),                                                              \
   3411       vector float: __extension__({                                            \
   3412              vector float __ret =                                              \
   3413                  (vector float)(__a) *                                         \
   3414                  (vector float)(vector unsigned)((0x7f + ((__b)&0x1F)) << 23); \
   3415              __builtin_vsx_xvcvspsxds(__ret);                                  \
   3416            }),                                                                 \
   3417       vector double: __extension__({                                           \
   3418              vector double __ret =                                             \
   3419                  (vector double)(__a) *                                        \
   3420                  (vector double)(vector unsigned long long)((0x3ffULL +        \
   3421                                                              ((__b)&0x1F))     \
   3422                                                             << 52);            \
   3423              __builtin_convertvector(__ret, vector signed long long);          \
   3424            }))
   3425 
   3426 /* vec_ctul */
   3427 
   3428 #define vec_ctul(__a, __b)                                                     \
   3429   _Generic((__a), vector float                                                 \
   3430            : __extension__({                                                   \
   3431                vector float __ret =                                            \
   3432                    (vector float)(__a) *                                       \
   3433                    (vector float)(vector unsigned)((0x7f + ((__b)&0x1F))       \
   3434                                                    << 23);                     \
   3435                __builtin_vsx_xvcvspuxds(__ret);                                \
   3436              }),                                                               \
   3437              vector double                                                     \
   3438            : __extension__({                                                   \
   3439              vector double __ret =                                             \
   3440                  (vector double)(__a) *                                        \
   3441                  (vector double)(vector unsigned long long)((0x3ffULL +        \
   3442                                                              ((__b)&0x1F))     \
   3443                                                             << 52);            \
   3444              __builtin_convertvector(__ret, vector unsigned long long);        \
   3445            }))
   3446 #endif
   3447 #endif // __LITTLE_ENDIAN__
   3448 
   3449 /* vec_vctuxs */
   3450 
   3451 #define vec_vctuxs __builtin_altivec_vctuxs
   3452 
   3453 /* vec_signext */
   3454 
   3455 #ifdef __POWER9_VECTOR__
   3456 static __inline__ vector signed int __ATTRS_o_ai
   3457 vec_signexti(vector signed char __a) {
   3458   return __builtin_altivec_vextsb2w(__a);
   3459 }
   3460 
   3461 static __inline__ vector signed int __ATTRS_o_ai
   3462 vec_signexti(vector signed short __a) {
   3463   return __builtin_altivec_vextsh2w(__a);
   3464 }
   3465 
   3466 static __inline__ vector signed long long __ATTRS_o_ai
   3467 vec_signextll(vector signed char __a) {
   3468   return __builtin_altivec_vextsb2d(__a);
   3469 }
   3470 
   3471 static __inline__ vector signed long long __ATTRS_o_ai
   3472 vec_signextll(vector signed short __a) {
   3473   return __builtin_altivec_vextsh2d(__a);
   3474 }
   3475 
   3476 static __inline__ vector signed long long __ATTRS_o_ai
   3477 vec_signextll(vector signed int __a) {
   3478   return __builtin_altivec_vextsw2d(__a);
   3479 }
   3480 #endif
   3481 
   3482 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   3483 static __inline__ vector signed __int128 __ATTRS_o_ai
   3484 vec_signextq(vector signed long long __a) {
   3485   return __builtin_altivec_vextsd2q(__a);
   3486 }
   3487 #endif
   3488 
   3489 /* vec_signed */
   3490 
   3491 static __inline__ vector signed int __ATTRS_o_ai
   3492 vec_sld(vector signed int, vector signed int, unsigned const int __c);
   3493 
   3494 static __inline__ vector signed int __ATTRS_o_ai
   3495 vec_signed(vector float __a) {
   3496   return __builtin_convertvector(__a, vector signed int);
   3497 }
   3498 
   3499 #ifdef __VSX__
   3500 static __inline__ vector signed long long __ATTRS_o_ai
   3501 vec_signed(vector double __a) {
   3502   return __builtin_convertvector(__a, vector signed long long);
   3503 }
   3504 
   3505 static __inline__ vector signed int __attribute__((__always_inline__))
   3506 vec_signed2(vector double __a, vector double __b) {
   3507   return (vector signed int) { __a[0], __a[1], __b[0], __b[1] };
   3508 }
   3509 
   3510 static __inline__ vector signed int __ATTRS_o_ai
   3511 vec_signede(vector double __a) {
   3512 #ifdef __LITTLE_ENDIAN__
   3513   vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);
   3514   return vec_sld(__ret, __ret, 12);
   3515 #else
   3516   return __builtin_vsx_xvcvdpsxws(__a);
   3517 #endif
   3518 }
   3519 
   3520 static __inline__ vector signed int __ATTRS_o_ai
   3521 vec_signedo(vector double __a) {
   3522 #ifdef __LITTLE_ENDIAN__
   3523   return __builtin_vsx_xvcvdpsxws(__a);
   3524 #else
   3525   vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);
   3526   return vec_sld(__ret, __ret, 12);
   3527 #endif
   3528 }
   3529 #endif
   3530 
   3531 /* vec_unsigned */
   3532 
   3533 static __inline__ vector unsigned int __ATTRS_o_ai
   3534 vec_sld(vector unsigned int, vector unsigned int, unsigned const int __c);
   3535 
   3536 static __inline__ vector unsigned int __ATTRS_o_ai
   3537 vec_unsigned(vector float __a) {
   3538   return __builtin_convertvector(__a, vector unsigned int);
   3539 }
   3540 
   3541 #ifdef __VSX__
   3542 static __inline__ vector unsigned long long __ATTRS_o_ai
   3543 vec_unsigned(vector double __a) {
   3544   return __builtin_convertvector(__a, vector unsigned long long);
   3545 }
   3546 
   3547 static __inline__ vector unsigned int __attribute__((__always_inline__))
   3548 vec_unsigned2(vector double __a, vector double __b) {
   3549   return (vector unsigned int) { __a[0], __a[1], __b[0], __b[1] };
   3550 }
   3551 
   3552 static __inline__ vector unsigned int __ATTRS_o_ai
   3553 vec_unsignede(vector double __a) {
   3554 #ifdef __LITTLE_ENDIAN__
   3555   vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);
   3556   return vec_sld(__ret, __ret, 12);
   3557 #else
   3558   return __builtin_vsx_xvcvdpuxws(__a);
   3559 #endif
   3560 }
   3561 
   3562 static __inline__ vector unsigned int __ATTRS_o_ai
   3563 vec_unsignedo(vector double __a) {
   3564 #ifdef __LITTLE_ENDIAN__
   3565   return __builtin_vsx_xvcvdpuxws(__a);
   3566 #else
   3567   vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);
   3568   return vec_sld(__ret, __ret, 12);
   3569 #endif
   3570 }
   3571 #endif
   3572 
   3573 /* vec_float */
   3574 
   3575 static __inline__ vector float __ATTRS_o_ai
   3576 vec_sld(vector float, vector float, unsigned const int __c);
   3577 
   3578 static __inline__ vector float __ATTRS_o_ai
   3579 vec_float(vector signed int __a) {
   3580   return __builtin_convertvector(__a, vector float);
   3581 }
   3582 
   3583 static __inline__ vector float __ATTRS_o_ai
   3584 vec_float(vector unsigned int __a) {
   3585   return __builtin_convertvector(__a, vector float);
   3586 }
   3587 
   3588 #ifdef __VSX__
   3589 static __inline__ vector float __ATTRS_o_ai
   3590 vec_float2(vector signed long long __a, vector signed long long __b) {
   3591   return (vector float) { __a[0], __a[1], __b[0], __b[1] };
   3592 }
   3593 
   3594 static __inline__ vector float __ATTRS_o_ai
   3595 vec_float2(vector unsigned long long __a, vector unsigned long long __b) {
   3596   return (vector float) { __a[0], __a[1], __b[0], __b[1] };
   3597 }
   3598 
   3599 static __inline__ vector float __ATTRS_o_ai
   3600 vec_float2(vector double __a, vector double __b) {
   3601   return (vector float) { __a[0], __a[1], __b[0], __b[1] };
   3602 }
   3603 
   3604 static __inline__ vector float __ATTRS_o_ai
   3605 vec_floate(vector signed long long __a) {
   3606 #ifdef __LITTLE_ENDIAN__
   3607   vector float __ret = __builtin_vsx_xvcvsxdsp(__a);
   3608   return vec_sld(__ret, __ret, 12);
   3609 #else
   3610   return __builtin_vsx_xvcvsxdsp(__a);
   3611 #endif
   3612 }
   3613 
   3614 static __inline__ vector float __ATTRS_o_ai
   3615 vec_floate(vector unsigned long long __a) {
   3616 #ifdef __LITTLE_ENDIAN__
   3617   vector float __ret = __builtin_vsx_xvcvuxdsp(__a);
   3618   return vec_sld(__ret, __ret, 12);
   3619 #else
   3620   return __builtin_vsx_xvcvuxdsp(__a);
   3621 #endif
   3622 }
   3623 
   3624 static __inline__ vector float __ATTRS_o_ai
   3625 vec_floate(vector double __a) {
   3626 #ifdef __LITTLE_ENDIAN__
   3627   vector float __ret = __builtin_vsx_xvcvdpsp(__a);
   3628   return vec_sld(__ret, __ret, 12);
   3629 #else
   3630   return __builtin_vsx_xvcvdpsp(__a);
   3631 #endif
   3632 }
   3633 
   3634 static __inline__ vector float __ATTRS_o_ai
   3635 vec_floato(vector signed long long __a) {
   3636 #ifdef __LITTLE_ENDIAN__
   3637   return __builtin_vsx_xvcvsxdsp(__a);
   3638 #else
   3639   vector float __ret = __builtin_vsx_xvcvsxdsp(__a);
   3640   return vec_sld(__ret, __ret, 12);
   3641 #endif
   3642 }
   3643 
   3644 static __inline__ vector float __ATTRS_o_ai
   3645 vec_floato(vector unsigned long long __a) {
   3646 #ifdef __LITTLE_ENDIAN__
   3647   return __builtin_vsx_xvcvuxdsp(__a);
   3648 #else
   3649   vector float __ret = __builtin_vsx_xvcvuxdsp(__a);
   3650   return vec_sld(__ret, __ret, 12);
   3651 #endif
   3652 }
   3653 
   3654 static __inline__ vector float __ATTRS_o_ai
   3655 vec_floato(vector double __a) {
   3656 #ifdef __LITTLE_ENDIAN__
   3657   return __builtin_vsx_xvcvdpsp(__a);
   3658 #else
   3659   vector float __ret = __builtin_vsx_xvcvdpsp(__a);
   3660   return vec_sld(__ret, __ret, 12);
   3661 #endif
   3662 }
   3663 #endif
   3664 
   3665 /* vec_double */
   3666 
   3667 #ifdef __VSX__
   3668 static __inline__ vector double __ATTRS_o_ai
   3669 vec_double(vector signed long long __a) {
   3670   return __builtin_convertvector(__a, vector double);
   3671 }
   3672 
   3673 static __inline__ vector double __ATTRS_o_ai
   3674 vec_double(vector unsigned long long __a) {
   3675   return __builtin_convertvector(__a, vector double);
   3676 }
   3677 
   3678 static __inline__ vector double __ATTRS_o_ai
   3679 vec_doublee(vector signed int __a) {
   3680 #ifdef __LITTLE_ENDIAN__
   3681   return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));
   3682 #else
   3683   return __builtin_vsx_xvcvsxwdp(__a);
   3684 #endif
   3685 }
   3686 
   3687 static __inline__ vector double __ATTRS_o_ai
   3688 vec_doublee(vector unsigned int __a) {
   3689 #ifdef __LITTLE_ENDIAN__
   3690   return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));
   3691 #else
   3692   return __builtin_vsx_xvcvuxwdp(__a);
   3693 #endif
   3694 }
   3695 
   3696 static __inline__ vector double __ATTRS_o_ai
   3697 vec_doublee(vector float __a) {
   3698 #ifdef __LITTLE_ENDIAN__
   3699   return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));
   3700 #else
   3701   return __builtin_vsx_xvcvspdp(__a);
   3702 #endif
   3703 }
   3704 
   3705 static __inline__ vector double __ATTRS_o_ai
   3706 vec_doubleh(vector signed int __a) {
   3707   vector double __ret = {__a[0], __a[1]};
   3708   return __ret;
   3709 }
   3710 
   3711 static __inline__ vector double __ATTRS_o_ai
   3712 vec_doubleh(vector unsigned int __a) {
   3713   vector double __ret = {__a[0], __a[1]};
   3714   return __ret;
   3715 }
   3716 
   3717 static __inline__ vector double __ATTRS_o_ai
   3718 vec_doubleh(vector float __a) {
   3719   vector double __ret = {__a[0], __a[1]};
   3720   return __ret;
   3721 }
   3722 
   3723 static __inline__ vector double __ATTRS_o_ai
   3724 vec_doublel(vector signed int __a) {
   3725   vector double __ret = {__a[2], __a[3]};
   3726   return __ret;
   3727 }
   3728 
   3729 static __inline__ vector double __ATTRS_o_ai
   3730 vec_doublel(vector unsigned int __a) {
   3731   vector double __ret = {__a[2], __a[3]};
   3732   return __ret;
   3733 }
   3734 
   3735 static __inline__ vector double __ATTRS_o_ai
   3736 vec_doublel(vector float __a) {
   3737   vector double __ret = {__a[2], __a[3]};
   3738   return __ret;
   3739 }
   3740 
   3741 static __inline__ vector double __ATTRS_o_ai
   3742 vec_doubleo(vector signed int __a) {
   3743 #ifdef __LITTLE_ENDIAN__
   3744   return __builtin_vsx_xvcvsxwdp(__a);
   3745 #else
   3746   return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));
   3747 #endif
   3748 }
   3749 
   3750 static __inline__ vector double __ATTRS_o_ai
   3751 vec_doubleo(vector unsigned int __a) {
   3752 #ifdef __LITTLE_ENDIAN__
   3753   return __builtin_vsx_xvcvuxwdp(__a);
   3754 #else
   3755   return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));
   3756 #endif
   3757 }
   3758 
   3759 static __inline__ vector double __ATTRS_o_ai
   3760 vec_doubleo(vector float __a) {
   3761 #ifdef __LITTLE_ENDIAN__
   3762   return __builtin_vsx_xvcvspdp(__a);
   3763 #else
   3764   return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));
   3765 #endif
   3766 }
   3767 
   3768 /* vec_cvf */
   3769 static __inline__ vector double __ATTRS_o_ai vec_cvf(vector float __a) {
   3770   return vec_doublee(__a);
   3771 }
   3772 
   3773 static __inline__ vector float __ATTRS_o_ai vec_cvf(vector double __a) {
   3774   return vec_floate(__a);
   3775 }
   3776 #endif
   3777 
   3778 /* vec_div */
   3779 
   3780 /* Integer vector divides (vectors are scalarized, elements divided
   3781    and the vectors reassembled).
   3782 */
   3783 static __inline__ vector signed char __ATTRS_o_ai
   3784 vec_div(vector signed char __a, vector signed char __b) {
   3785   return __a / __b;
   3786 }
   3787 
   3788 static __inline__ vector unsigned char __ATTRS_o_ai
   3789 vec_div(vector unsigned char __a, vector unsigned char __b) {
   3790   return __a / __b;
   3791 }
   3792 
   3793 static __inline__ vector signed short __ATTRS_o_ai
   3794 vec_div(vector signed short __a, vector signed short __b) {
   3795   return __a / __b;
   3796 }
   3797 
   3798 static __inline__ vector unsigned short __ATTRS_o_ai
   3799 vec_div(vector unsigned short __a, vector unsigned short __b) {
   3800   return __a / __b;
   3801 }
   3802 
   3803 static __inline__ vector signed int __ATTRS_o_ai
   3804 vec_div(vector signed int __a, vector signed int __b) {
   3805   return __a / __b;
   3806 }
   3807 
   3808 static __inline__ vector unsigned int __ATTRS_o_ai
   3809 vec_div(vector unsigned int __a, vector unsigned int __b) {
   3810   return __a / __b;
   3811 }
   3812 
   3813 #ifdef __VSX__
   3814 static __inline__ vector signed long long __ATTRS_o_ai
   3815 vec_div(vector signed long long __a, vector signed long long __b) {
   3816   return __a / __b;
   3817 }
   3818 
   3819 static __inline__ vector unsigned long long __ATTRS_o_ai
   3820 vec_div(vector unsigned long long __a, vector unsigned long long __b) {
   3821   return __a / __b;
   3822 }
   3823 
   3824 static __inline__ vector float __ATTRS_o_ai vec_div(vector float __a,
   3825                                                     vector float __b) {
   3826   return __a / __b;
   3827 }
   3828 
   3829 static __inline__ vector double __ATTRS_o_ai vec_div(vector double __a,
   3830                                                      vector double __b) {
   3831   return __a / __b;
   3832 }
   3833 #endif
   3834 
   3835 /* vec_dive */
   3836 
   3837 #ifdef __POWER10_VECTOR__
   3838 static __inline__ vector signed int __ATTRS_o_ai
   3839 vec_dive(vector signed int __a, vector signed int __b) {
   3840   return __builtin_altivec_vdivesw(__a, __b);
   3841 }
   3842 
   3843 static __inline__ vector unsigned int __ATTRS_o_ai
   3844 vec_dive(vector unsigned int __a, vector unsigned int __b) {
   3845   return __builtin_altivec_vdiveuw(__a, __b);
   3846 }
   3847 
   3848 static __inline__ vector signed long long __ATTRS_o_ai
   3849 vec_dive(vector signed long long __a, vector signed long long __b) {
   3850   return __builtin_altivec_vdivesd(__a, __b);
   3851 }
   3852 
   3853 static __inline__ vector unsigned long long __ATTRS_o_ai
   3854 vec_dive(vector unsigned long long __a, vector unsigned long long __b) {
   3855   return __builtin_altivec_vdiveud(__a, __b);
   3856 }
   3857 
   3858 #ifdef __SIZEOF_INT128__
   3859 static __inline__ vector unsigned __int128 __ATTRS_o_ai
   3860 vec_dive(vector unsigned __int128 __a, vector unsigned __int128 __b) {
   3861   return __builtin_altivec_vdiveuq(__a, __b);
   3862 }
   3863 
   3864 static __inline__ vector signed __int128 __ATTRS_o_ai
   3865 vec_dive(vector signed __int128 __a, vector signed __int128 __b) {
   3866   return __builtin_altivec_vdivesq(__a, __b);
   3867 }
   3868 #endif
   3869 #endif
   3870 
   3871 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   3872 static __inline__ vector unsigned __int128 __ATTRS_o_ai
   3873 vec_div(vector unsigned __int128 __a, vector unsigned __int128 __b) {
   3874   return __a / __b;
   3875 }
   3876 
   3877 static __inline__ vector signed __int128 __ATTRS_o_ai
   3878 vec_div(vector signed __int128 __a, vector signed __int128 __b) {
   3879   return __a / __b;
   3880 }
   3881 #endif /* __POWER10_VECTOR__ */
   3882 
   3883 /* vec_xvtdiv */
   3884 
   3885 #ifdef __VSX__
   3886 static __inline__ int __ATTRS_o_ai vec_test_swdiv(vector double __a,
   3887                                                   vector double __b) {
   3888   return __builtin_vsx_xvtdivdp(__a, __b);
   3889 }
   3890 
   3891 static __inline__ int __ATTRS_o_ai vec_test_swdivs(vector float __a,
   3892                                                    vector float __b) {
   3893   return __builtin_vsx_xvtdivsp(__a, __b);
   3894 }
   3895 #endif
   3896 
   3897 /* vec_dss */
   3898 
   3899 #define vec_dss __builtin_altivec_dss
   3900 
   3901 /* vec_dssall */
   3902 
   3903 static __inline__ void __attribute__((__always_inline__)) vec_dssall(void) {
   3904   __builtin_altivec_dssall();
   3905 }
   3906 
   3907 /* vec_dst */
   3908 #define vec_dst(__PTR, __CW, __STR) \
   3909   __builtin_altivec_dst((const void *)(__PTR), (__CW), (__STR))
   3910 
   3911 /* vec_dstst */
   3912 #define vec_dstst(__PTR, __CW, __STR) \
   3913   __builtin_altivec_dstst((const void *)(__PTR), (__CW), (__STR))
   3914 
   3915 /* vec_dststt */
   3916 #define vec_dststt(__PTR, __CW, __STR) \
   3917   __builtin_altivec_dststt((const void *)(__PTR), (__CW), (__STR))
   3918 
   3919 /* vec_dstt */
   3920 #define vec_dstt(__PTR, __CW, __STR) \
   3921   __builtin_altivec_dstt((const void *)(__PTR), (__CW), (__STR))
   3922 
   3923 /* vec_eqv */
   3924 
   3925 #ifdef __POWER8_VECTOR__
   3926 static __inline__ vector signed char __ATTRS_o_ai
   3927 vec_eqv(vector signed char __a, vector signed char __b) {
   3928   return (vector signed char)__builtin_vsx_xxleqv((vector unsigned int)__a,
   3929                                                   (vector unsigned int)__b);
   3930 }
   3931 
   3932 static __inline__ vector unsigned char __ATTRS_o_ai
   3933 vec_eqv(vector unsigned char __a, vector unsigned char __b) {
   3934   return (vector unsigned char)__builtin_vsx_xxleqv((vector unsigned int)__a,
   3935                                                     (vector unsigned int)__b);
   3936 }
   3937 
   3938 static __inline__ vector bool char __ATTRS_o_ai vec_eqv(vector bool char __a,
   3939                                                         vector bool char __b) {
   3940   return (vector bool char)__builtin_vsx_xxleqv((vector unsigned int)__a,
   3941                                                 (vector unsigned int)__b);
   3942 }
   3943 
   3944 static __inline__ vector signed short __ATTRS_o_ai
   3945 vec_eqv(vector signed short __a, vector signed short __b) {
   3946   return (vector signed short)__builtin_vsx_xxleqv((vector unsigned int)__a,
   3947                                                    (vector unsigned int)__b);
   3948 }
   3949 
   3950 static __inline__ vector unsigned short __ATTRS_o_ai
   3951 vec_eqv(vector unsigned short __a, vector unsigned short __b) {
   3952   return (vector unsigned short)__builtin_vsx_xxleqv((vector unsigned int)__a,
   3953                                                      (vector unsigned int)__b);
   3954 }
   3955 
   3956 static __inline__ vector bool short __ATTRS_o_ai
   3957 vec_eqv(vector bool short __a, vector bool short __b) {
   3958   return (vector bool short)__builtin_vsx_xxleqv((vector unsigned int)__a,
   3959                                                  (vector unsigned int)__b);
   3960 }
   3961 
   3962 static __inline__ vector signed int __ATTRS_o_ai
   3963 vec_eqv(vector signed int __a, vector signed int __b) {
   3964   return (vector signed int)__builtin_vsx_xxleqv((vector unsigned int)__a,
   3965                                                  (vector unsigned int)__b);
   3966 }
   3967 
   3968 static __inline__ vector unsigned int __ATTRS_o_ai
   3969 vec_eqv(vector unsigned int __a, vector unsigned int __b) {
   3970   return __builtin_vsx_xxleqv(__a, __b);
   3971 }
   3972 
   3973 static __inline__ vector bool int __ATTRS_o_ai vec_eqv(vector bool int __a,
   3974                                                        vector bool int __b) {
   3975   return (vector bool int)__builtin_vsx_xxleqv((vector unsigned int)__a,
   3976                                                (vector unsigned int)__b);
   3977 }
   3978 
   3979 static __inline__ vector signed long long __ATTRS_o_ai
   3980 vec_eqv(vector signed long long __a, vector signed long long __b) {
   3981   return (vector signed long long)__builtin_vsx_xxleqv(
   3982       (vector unsigned int)__a, (vector unsigned int)__b);
   3983 }
   3984 
   3985 static __inline__ vector unsigned long long __ATTRS_o_ai
   3986 vec_eqv(vector unsigned long long __a, vector unsigned long long __b) {
   3987   return (vector unsigned long long)__builtin_vsx_xxleqv(
   3988       (vector unsigned int)__a, (vector unsigned int)__b);
   3989 }
   3990 
   3991 static __inline__ vector bool long long __ATTRS_o_ai
   3992 vec_eqv(vector bool long long __a, vector bool long long __b) {
   3993   return (vector bool long long)__builtin_vsx_xxleqv((vector unsigned int)__a,
   3994                                                      (vector unsigned int)__b);
   3995 }
   3996 
   3997 static __inline__ vector float __ATTRS_o_ai vec_eqv(vector float __a,
   3998                                                     vector float __b) {
   3999   return (vector float)__builtin_vsx_xxleqv((vector unsigned int)__a,
   4000                                             (vector unsigned int)__b);
   4001 }
   4002 
   4003 static __inline__ vector double __ATTRS_o_ai vec_eqv(vector double __a,
   4004                                                      vector double __b) {
   4005   return (vector double)__builtin_vsx_xxleqv((vector unsigned int)__a,
   4006                                              (vector unsigned int)__b);
   4007 }
   4008 #endif
   4009 
   4010 /* vec_expte */
   4011 
   4012 static __inline__ vector float __attribute__((__always_inline__))
   4013 vec_expte(vector float __a) {
   4014   return __builtin_altivec_vexptefp(__a);
   4015 }
   4016 
   4017 /* vec_vexptefp */
   4018 
   4019 static __inline__ vector float __attribute__((__always_inline__))
   4020 vec_vexptefp(vector float __a) {
   4021   return __builtin_altivec_vexptefp(__a);
   4022 }
   4023 
   4024 /* vec_floor */
   4025 
   4026 static __inline__ vector float __ATTRS_o_ai vec_floor(vector float __a) {
   4027 #ifdef __VSX__
   4028   return __builtin_vsx_xvrspim(__a);
   4029 #else
   4030   return __builtin_altivec_vrfim(__a);
   4031 #endif
   4032 }
   4033 
   4034 #ifdef __VSX__
   4035 static __inline__ vector double __ATTRS_o_ai vec_floor(vector double __a) {
   4036   return __builtin_vsx_xvrdpim(__a);
   4037 }
   4038 #endif
   4039 
   4040 /* vec_roundm */
   4041 static __inline__ vector float __ATTRS_o_ai vec_roundm(vector float __a) {
   4042   return vec_floor(__a);
   4043 }
   4044 
   4045 #ifdef __VSX__
   4046 static __inline__ vector double __ATTRS_o_ai vec_roundm(vector double __a) {
   4047   return vec_floor(__a);
   4048 }
   4049 #endif
   4050 
   4051 /* vec_vrfim */
   4052 
   4053 static __inline__ vector float __attribute__((__always_inline__))
   4054 vec_vrfim(vector float __a) {
   4055   return __builtin_altivec_vrfim(__a);
   4056 }
   4057 
   4058 /* vec_ld */
   4059 
   4060 static __inline__ vector signed char __ATTRS_o_ai
   4061 vec_ld(long __a, const vector signed char *__b) {
   4062   return (vector signed char)__builtin_altivec_lvx(__a, __b);
   4063 }
   4064 
   4065 static __inline__ vector signed char __ATTRS_o_ai
   4066 vec_ld(long __a, const signed char *__b) {
   4067   return (vector signed char)__builtin_altivec_lvx(__a, __b);
   4068 }
   4069 
   4070 static __inline__ vector unsigned char __ATTRS_o_ai
   4071 vec_ld(long __a, const vector unsigned char *__b) {
   4072   return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
   4073 }
   4074 
   4075 static __inline__ vector unsigned char __ATTRS_o_ai
   4076 vec_ld(long __a, const unsigned char *__b) {
   4077   return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
   4078 }
   4079 
   4080 static __inline__ vector bool char __ATTRS_o_ai
   4081 vec_ld(long __a, const vector bool char *__b) {
   4082   return (vector bool char)__builtin_altivec_lvx(__a, __b);
   4083 }
   4084 
   4085 static __inline__ vector short __ATTRS_o_ai vec_ld(long __a,
   4086                                                    const vector short *__b) {
   4087   return (vector short)__builtin_altivec_lvx(__a, __b);
   4088 }
   4089 
   4090 static __inline__ vector short __ATTRS_o_ai vec_ld(long __a, const short *__b) {
   4091   return (vector short)__builtin_altivec_lvx(__a, __b);
   4092 }
   4093 
   4094 static __inline__ vector unsigned short __ATTRS_o_ai
   4095 vec_ld(long __a, const vector unsigned short *__b) {
   4096   return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
   4097 }
   4098 
   4099 static __inline__ vector unsigned short __ATTRS_o_ai
   4100 vec_ld(long __a, const unsigned short *__b) {
   4101   return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
   4102 }
   4103 
   4104 static __inline__ vector bool short __ATTRS_o_ai
   4105 vec_ld(long __a, const vector bool short *__b) {
   4106   return (vector bool short)__builtin_altivec_lvx(__a, __b);
   4107 }
   4108 
   4109 static __inline__ vector pixel __ATTRS_o_ai vec_ld(long __a,
   4110                                                    const vector pixel *__b) {
   4111   return (vector pixel)__builtin_altivec_lvx(__a, __b);
   4112 }
   4113 
   4114 static __inline__ vector int __ATTRS_o_ai vec_ld(long __a,
   4115                                                  const vector int *__b) {
   4116   return (vector int)__builtin_altivec_lvx(__a, __b);
   4117 }
   4118 
   4119 static __inline__ vector int __ATTRS_o_ai vec_ld(long __a, const int *__b) {
   4120   return (vector int)__builtin_altivec_lvx(__a, __b);
   4121 }
   4122 
   4123 static __inline__ vector unsigned int __ATTRS_o_ai
   4124 vec_ld(long __a, const vector unsigned int *__b) {
   4125   return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
   4126 }
   4127 
   4128 static __inline__ vector unsigned int __ATTRS_o_ai
   4129 vec_ld(long __a, const unsigned int *__b) {
   4130   return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
   4131 }
   4132 
   4133 static __inline__ vector bool int __ATTRS_o_ai
   4134 vec_ld(long __a, const vector bool int *__b) {
   4135   return (vector bool int)__builtin_altivec_lvx(__a, __b);
   4136 }
   4137 
   4138 static __inline__ vector float __ATTRS_o_ai vec_ld(long __a,
   4139                                                    const vector float *__b) {
   4140   return (vector float)__builtin_altivec_lvx(__a, __b);
   4141 }
   4142 
   4143 static __inline__ vector float __ATTRS_o_ai vec_ld(long __a, const float *__b) {
   4144   return (vector float)__builtin_altivec_lvx(__a, __b);
   4145 }
   4146 
   4147 /* vec_lvx */
   4148 
   4149 static __inline__ vector signed char __ATTRS_o_ai
   4150 vec_lvx(long __a, const vector signed char *__b) {
   4151   return (vector signed char)__builtin_altivec_lvx(__a, __b);
   4152 }
   4153 
   4154 static __inline__ vector signed char __ATTRS_o_ai
   4155 vec_lvx(long __a, const signed char *__b) {
   4156   return (vector signed char)__builtin_altivec_lvx(__a, __b);
   4157 }
   4158 
   4159 static __inline__ vector unsigned char __ATTRS_o_ai
   4160 vec_lvx(long __a, const vector unsigned char *__b) {
   4161   return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
   4162 }
   4163 
   4164 static __inline__ vector unsigned char __ATTRS_o_ai
   4165 vec_lvx(long __a, const unsigned char *__b) {
   4166   return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
   4167 }
   4168 
   4169 static __inline__ vector bool char __ATTRS_o_ai
   4170 vec_lvx(long __a, const vector bool char *__b) {
   4171   return (vector bool char)__builtin_altivec_lvx(__a, __b);
   4172 }
   4173 
   4174 static __inline__ vector short __ATTRS_o_ai vec_lvx(long __a,
   4175                                                     const vector short *__b) {
   4176   return (vector short)__builtin_altivec_lvx(__a, __b);
   4177 }
   4178 
   4179 static __inline__ vector short __ATTRS_o_ai vec_lvx(long __a, const short *__b) {
   4180   return (vector short)__builtin_altivec_lvx(__a, __b);
   4181 }
   4182 
   4183 static __inline__ vector unsigned short __ATTRS_o_ai
   4184 vec_lvx(long __a, const vector unsigned short *__b) {
   4185   return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
   4186 }
   4187 
   4188 static __inline__ vector unsigned short __ATTRS_o_ai
   4189 vec_lvx(long __a, const unsigned short *__b) {
   4190   return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
   4191 }
   4192 
   4193 static __inline__ vector bool short __ATTRS_o_ai
   4194 vec_lvx(long __a, const vector bool short *__b) {
   4195   return (vector bool short)__builtin_altivec_lvx(__a, __b);
   4196 }
   4197 
   4198 static __inline__ vector pixel __ATTRS_o_ai vec_lvx(long __a,
   4199                                                     const vector pixel *__b) {
   4200   return (vector pixel)__builtin_altivec_lvx(__a, __b);
   4201 }
   4202 
   4203 static __inline__ vector int __ATTRS_o_ai vec_lvx(long __a,
   4204                                                   const vector int *__b) {
   4205   return (vector int)__builtin_altivec_lvx(__a, __b);
   4206 }
   4207 
   4208 static __inline__ vector int __ATTRS_o_ai vec_lvx(long __a, const int *__b) {
   4209   return (vector int)__builtin_altivec_lvx(__a, __b);
   4210 }
   4211 
   4212 static __inline__ vector unsigned int __ATTRS_o_ai
   4213 vec_lvx(long __a, const vector unsigned int *__b) {
   4214   return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
   4215 }
   4216 
   4217 static __inline__ vector unsigned int __ATTRS_o_ai
   4218 vec_lvx(long __a, const unsigned int *__b) {
   4219   return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
   4220 }
   4221 
   4222 static __inline__ vector bool int __ATTRS_o_ai
   4223 vec_lvx(long __a, const vector bool int *__b) {
   4224   return (vector bool int)__builtin_altivec_lvx(__a, __b);
   4225 }
   4226 
   4227 static __inline__ vector float __ATTRS_o_ai vec_lvx(long __a,
   4228                                                     const vector float *__b) {
   4229   return (vector float)__builtin_altivec_lvx(__a, __b);
   4230 }
   4231 
   4232 static __inline__ vector float __ATTRS_o_ai vec_lvx(long __a, const float *__b) {
   4233   return (vector float)__builtin_altivec_lvx(__a, __b);
   4234 }
   4235 
   4236 /* vec_lde */
   4237 
   4238 static __inline__ vector signed char __ATTRS_o_ai
   4239 vec_lde(long __a, const signed char *__b) {
   4240   return (vector signed char)__builtin_altivec_lvebx(__a, __b);
   4241 }
   4242 
   4243 static __inline__ vector unsigned char __ATTRS_o_ai
   4244 vec_lde(long __a, const unsigned char *__b) {
   4245   return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
   4246 }
   4247 
   4248 static __inline__ vector short __ATTRS_o_ai vec_lde(long __a, const short *__b) {
   4249   return (vector short)__builtin_altivec_lvehx(__a, __b);
   4250 }
   4251 
   4252 static __inline__ vector unsigned short __ATTRS_o_ai
   4253 vec_lde(long __a, const unsigned short *__b) {
   4254   return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
   4255 }
   4256 
   4257 static __inline__ vector int __ATTRS_o_ai vec_lde(long __a, const int *__b) {
   4258   return (vector int)__builtin_altivec_lvewx(__a, __b);
   4259 }
   4260 
   4261 static __inline__ vector unsigned int __ATTRS_o_ai
   4262 vec_lde(long __a, const unsigned int *__b) {
   4263   return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
   4264 }
   4265 
   4266 static __inline__ vector float __ATTRS_o_ai vec_lde(long __a, const float *__b) {
   4267   return (vector float)__builtin_altivec_lvewx(__a, __b);
   4268 }
   4269 
   4270 /* vec_lvebx */
   4271 
   4272 static __inline__ vector signed char __ATTRS_o_ai
   4273 vec_lvebx(long __a, const signed char *__b) {
   4274   return (vector signed char)__builtin_altivec_lvebx(__a, __b);
   4275 }
   4276 
   4277 static __inline__ vector unsigned char __ATTRS_o_ai
   4278 vec_lvebx(long __a, const unsigned char *__b) {
   4279   return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
   4280 }
   4281 
   4282 /* vec_lvehx */
   4283 
   4284 static __inline__ vector short __ATTRS_o_ai vec_lvehx(long __a,
   4285                                                       const short *__b) {
   4286   return (vector short)__builtin_altivec_lvehx(__a, __b);
   4287 }
   4288 
   4289 static __inline__ vector unsigned short __ATTRS_o_ai
   4290 vec_lvehx(long __a, const unsigned short *__b) {
   4291   return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
   4292 }
   4293 
   4294 /* vec_lvewx */
   4295 
   4296 static __inline__ vector int __ATTRS_o_ai vec_lvewx(long __a, const int *__b) {
   4297   return (vector int)__builtin_altivec_lvewx(__a, __b);
   4298 }
   4299 
   4300 static __inline__ vector unsigned int __ATTRS_o_ai
   4301 vec_lvewx(long __a, const unsigned int *__b) {
   4302   return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
   4303 }
   4304 
   4305 static __inline__ vector float __ATTRS_o_ai vec_lvewx(long __a,
   4306                                                       const float *__b) {
   4307   return (vector float)__builtin_altivec_lvewx(__a, __b);
   4308 }
   4309 
   4310 /* vec_ldl */
   4311 
   4312 static __inline__ vector signed char __ATTRS_o_ai
   4313 vec_ldl(long __a, const vector signed char *__b) {
   4314   return (vector signed char)__builtin_altivec_lvxl(__a, __b);
   4315 }
   4316 
   4317 static __inline__ vector signed char __ATTRS_o_ai
   4318 vec_ldl(long __a, const signed char *__b) {
   4319   return (vector signed char)__builtin_altivec_lvxl(__a, __b);
   4320 }
   4321 
   4322 static __inline__ vector unsigned char __ATTRS_o_ai
   4323 vec_ldl(long __a, const vector unsigned char *__b) {
   4324   return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
   4325 }
   4326 
   4327 static __inline__ vector unsigned char __ATTRS_o_ai
   4328 vec_ldl(long __a, const unsigned char *__b) {
   4329   return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
   4330 }
   4331 
   4332 static __inline__ vector bool char __ATTRS_o_ai
   4333 vec_ldl(long __a, const vector bool char *__b) {
   4334   return (vector bool char)__builtin_altivec_lvxl(__a, __b);
   4335 }
   4336 
   4337 static __inline__ vector short __ATTRS_o_ai vec_ldl(long __a,
   4338                                                     const vector short *__b) {
   4339   return (vector short)__builtin_altivec_lvxl(__a, __b);
   4340 }
   4341 
   4342 static __inline__ vector short __ATTRS_o_ai vec_ldl(long __a, const short *__b) {
   4343   return (vector short)__builtin_altivec_lvxl(__a, __b);
   4344 }
   4345 
   4346 static __inline__ vector unsigned short __ATTRS_o_ai
   4347 vec_ldl(long __a, const vector unsigned short *__b) {
   4348   return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
   4349 }
   4350 
   4351 static __inline__ vector unsigned short __ATTRS_o_ai
   4352 vec_ldl(long __a, const unsigned short *__b) {
   4353   return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
   4354 }
   4355 
   4356 static __inline__ vector bool short __ATTRS_o_ai
   4357 vec_ldl(long __a, const vector bool short *__b) {
   4358   return (vector bool short)__builtin_altivec_lvxl(__a, __b);
   4359 }
   4360 
   4361 static __inline__ vector pixel __ATTRS_o_ai vec_ldl(long __a,
   4362                                                     const vector pixel *__b) {
   4363   return (vector pixel short)__builtin_altivec_lvxl(__a, __b);
   4364 }
   4365 
   4366 static __inline__ vector int __ATTRS_o_ai vec_ldl(long __a,
   4367                                                   const vector int *__b) {
   4368   return (vector int)__builtin_altivec_lvxl(__a, __b);
   4369 }
   4370 
   4371 static __inline__ vector int __ATTRS_o_ai vec_ldl(long __a, const int *__b) {
   4372   return (vector int)__builtin_altivec_lvxl(__a, __b);
   4373 }
   4374 
   4375 static __inline__ vector unsigned int __ATTRS_o_ai
   4376 vec_ldl(long __a, const vector unsigned int *__b) {
   4377   return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
   4378 }
   4379 
   4380 static __inline__ vector unsigned int __ATTRS_o_ai
   4381 vec_ldl(long __a, const unsigned int *__b) {
   4382   return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
   4383 }
   4384 
   4385 static __inline__ vector bool int __ATTRS_o_ai
   4386 vec_ldl(long __a, const vector bool int *__b) {
   4387   return (vector bool int)__builtin_altivec_lvxl(__a, __b);
   4388 }
   4389 
   4390 static __inline__ vector float __ATTRS_o_ai vec_ldl(long __a,
   4391                                                     const vector float *__b) {
   4392   return (vector float)__builtin_altivec_lvxl(__a, __b);
   4393 }
   4394 
   4395 static __inline__ vector float __ATTRS_o_ai vec_ldl(long __a, const float *__b) {
   4396   return (vector float)__builtin_altivec_lvxl(__a, __b);
   4397 }
   4398 
   4399 /* vec_lvxl */
   4400 
   4401 static __inline__ vector signed char __ATTRS_o_ai
   4402 vec_lvxl(long __a, const vector signed char *__b) {
   4403   return (vector signed char)__builtin_altivec_lvxl(__a, __b);
   4404 }
   4405 
   4406 static __inline__ vector signed char __ATTRS_o_ai
   4407 vec_lvxl(long __a, const signed char *__b) {
   4408   return (vector signed char)__builtin_altivec_lvxl(__a, __b);
   4409 }
   4410 
   4411 static __inline__ vector unsigned char __ATTRS_o_ai
   4412 vec_lvxl(long __a, const vector unsigned char *__b) {
   4413   return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
   4414 }
   4415 
   4416 static __inline__ vector unsigned char __ATTRS_o_ai
   4417 vec_lvxl(long __a, const unsigned char *__b) {
   4418   return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
   4419 }
   4420 
   4421 static __inline__ vector bool char __ATTRS_o_ai
   4422 vec_lvxl(long __a, const vector bool char *__b) {
   4423   return (vector bool char)__builtin_altivec_lvxl(__a, __b);
   4424 }
   4425 
   4426 static __inline__ vector short __ATTRS_o_ai vec_lvxl(long __a,
   4427                                                      const vector short *__b) {
   4428   return (vector short)__builtin_altivec_lvxl(__a, __b);
   4429 }
   4430 
   4431 static __inline__ vector short __ATTRS_o_ai vec_lvxl(long __a,
   4432                                                      const short *__b) {
   4433   return (vector short)__builtin_altivec_lvxl(__a, __b);
   4434 }
   4435 
   4436 static __inline__ vector unsigned short __ATTRS_o_ai
   4437 vec_lvxl(long __a, const vector unsigned short *__b) {
   4438   return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
   4439 }
   4440 
   4441 static __inline__ vector unsigned short __ATTRS_o_ai
   4442 vec_lvxl(long __a, const unsigned short *__b) {
   4443   return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
   4444 }
   4445 
   4446 static __inline__ vector bool short __ATTRS_o_ai
   4447 vec_lvxl(long __a, const vector bool short *__b) {
   4448   return (vector bool short)__builtin_altivec_lvxl(__a, __b);
   4449 }
   4450 
   4451 static __inline__ vector pixel __ATTRS_o_ai vec_lvxl(long __a,
   4452                                                      const vector pixel *__b) {
   4453   return (vector pixel)__builtin_altivec_lvxl(__a, __b);
   4454 }
   4455 
   4456 static __inline__ vector int __ATTRS_o_ai vec_lvxl(long __a,
   4457                                                    const vector int *__b) {
   4458   return (vector int)__builtin_altivec_lvxl(__a, __b);
   4459 }
   4460 
   4461 static __inline__ vector int __ATTRS_o_ai vec_lvxl(long __a, const int *__b) {
   4462   return (vector int)__builtin_altivec_lvxl(__a, __b);
   4463 }
   4464 
   4465 static __inline__ vector unsigned int __ATTRS_o_ai
   4466 vec_lvxl(long __a, const vector unsigned int *__b) {
   4467   return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
   4468 }
   4469 
   4470 static __inline__ vector unsigned int __ATTRS_o_ai
   4471 vec_lvxl(long __a, const unsigned int *__b) {
   4472   return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
   4473 }
   4474 
   4475 static __inline__ vector bool int __ATTRS_o_ai
   4476 vec_lvxl(long __a, const vector bool int *__b) {
   4477   return (vector bool int)__builtin_altivec_lvxl(__a, __b);
   4478 }
   4479 
   4480 static __inline__ vector float __ATTRS_o_ai vec_lvxl(long __a,
   4481                                                      const vector float *__b) {
   4482   return (vector float)__builtin_altivec_lvxl(__a, __b);
   4483 }
   4484 
   4485 static __inline__ vector float __ATTRS_o_ai vec_lvxl(long __a,
   4486                                                      const float *__b) {
   4487   return (vector float)__builtin_altivec_lvxl(__a, __b);
   4488 }
   4489 
   4490 /* vec_loge */
   4491 
   4492 static __inline__ vector float __attribute__((__always_inline__))
   4493 vec_loge(vector float __a) {
   4494   return __builtin_altivec_vlogefp(__a);
   4495 }
   4496 
   4497 /* vec_vlogefp */
   4498 
   4499 static __inline__ vector float __attribute__((__always_inline__))
   4500 vec_vlogefp(vector float __a) {
   4501   return __builtin_altivec_vlogefp(__a);
   4502 }
   4503 
   4504 /* vec_lvsl */
   4505 
   4506 #ifdef __LITTLE_ENDIAN__
   4507 static __inline__ vector unsigned char __ATTRS_o_ai
   4508     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4509 loads/stores"))) vec_lvsl(int __a, const signed char *__b) {
   4510   vector unsigned char mask =
   4511       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4512   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4513                                   7,  6,  5,  4,  3,  2,  1, 0};
   4514   return vec_perm(mask, mask, reverse);
   4515 }
   4516 #else
   4517 static __inline__ vector unsigned char __ATTRS_o_ai
   4518 vec_lvsl(int __a, const signed char *__b) {
   4519   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4520 }
   4521 #endif
   4522 
   4523 #ifdef __LITTLE_ENDIAN__
   4524 static __inline__ vector unsigned char __ATTRS_o_ai
   4525     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4526 loads/stores"))) vec_lvsl(int __a, const unsigned char *__b) {
   4527   vector unsigned char mask =
   4528       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4529   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4530                                   7,  6,  5,  4,  3,  2,  1, 0};
   4531   return vec_perm(mask, mask, reverse);
   4532 }
   4533 #else
   4534 static __inline__ vector unsigned char __ATTRS_o_ai
   4535 vec_lvsl(int __a, const unsigned char *__b) {
   4536   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4537 }
   4538 #endif
   4539 
   4540 #ifdef __LITTLE_ENDIAN__
   4541 static __inline__ vector unsigned char __ATTRS_o_ai
   4542     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4543 loads/stores"))) vec_lvsl(int __a, const short *__b) {
   4544   vector unsigned char mask =
   4545       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4546   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4547                                   7,  6,  5,  4,  3,  2,  1, 0};
   4548   return vec_perm(mask, mask, reverse);
   4549 }
   4550 #else
   4551 static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
   4552                                                              const short *__b) {
   4553   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4554 }
   4555 #endif
   4556 
   4557 #ifdef __LITTLE_ENDIAN__
   4558 static __inline__ vector unsigned char __ATTRS_o_ai
   4559     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4560 loads/stores"))) vec_lvsl(int __a, const unsigned short *__b) {
   4561   vector unsigned char mask =
   4562       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4563   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4564                                   7,  6,  5,  4,  3,  2,  1, 0};
   4565   return vec_perm(mask, mask, reverse);
   4566 }
   4567 #else
   4568 static __inline__ vector unsigned char __ATTRS_o_ai
   4569 vec_lvsl(int __a, const unsigned short *__b) {
   4570   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4571 }
   4572 #endif
   4573 
   4574 #ifdef __LITTLE_ENDIAN__
   4575 static __inline__ vector unsigned char __ATTRS_o_ai
   4576     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4577 loads/stores"))) vec_lvsl(int __a, const int *__b) {
   4578   vector unsigned char mask =
   4579       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4580   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4581                                   7,  6,  5,  4,  3,  2,  1, 0};
   4582   return vec_perm(mask, mask, reverse);
   4583 }
   4584 #else
   4585 static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
   4586                                                              const int *__b) {
   4587   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4588 }
   4589 #endif
   4590 
   4591 #ifdef __LITTLE_ENDIAN__
   4592 static __inline__ vector unsigned char __ATTRS_o_ai
   4593     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4594 loads/stores"))) vec_lvsl(int __a, const unsigned int *__b) {
   4595   vector unsigned char mask =
   4596       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4597   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4598                                   7,  6,  5,  4,  3,  2,  1, 0};
   4599   return vec_perm(mask, mask, reverse);
   4600 }
   4601 #else
   4602 static __inline__ vector unsigned char __ATTRS_o_ai
   4603 vec_lvsl(int __a, const unsigned int *__b) {
   4604   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4605 }
   4606 #endif
   4607 
   4608 #ifdef __LITTLE_ENDIAN__
   4609 static __inline__ vector unsigned char __ATTRS_o_ai
   4610     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4611 loads/stores"))) vec_lvsl(int __a, const float *__b) {
   4612   vector unsigned char mask =
   4613       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4614   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4615                                   7,  6,  5,  4,  3,  2,  1, 0};
   4616   return vec_perm(mask, mask, reverse);
   4617 }
   4618 #else
   4619 static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
   4620                                                              const float *__b) {
   4621   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
   4622 }
   4623 #endif
   4624 
   4625 /* vec_lvsr */
   4626 
   4627 #ifdef __LITTLE_ENDIAN__
   4628 static __inline__ vector unsigned char __ATTRS_o_ai
   4629     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4630 loads/stores"))) vec_lvsr(int __a, const signed char *__b) {
   4631   vector unsigned char mask =
   4632       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4633   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4634                                   7,  6,  5,  4,  3,  2,  1, 0};
   4635   return vec_perm(mask, mask, reverse);
   4636 }
   4637 #else
   4638 static __inline__ vector unsigned char __ATTRS_o_ai
   4639 vec_lvsr(int __a, const signed char *__b) {
   4640   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4641 }
   4642 #endif
   4643 
   4644 #ifdef __LITTLE_ENDIAN__
   4645 static __inline__ vector unsigned char __ATTRS_o_ai
   4646     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4647 loads/stores"))) vec_lvsr(int __a, const unsigned char *__b) {
   4648   vector unsigned char mask =
   4649       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4650   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4651                                   7,  6,  5,  4,  3,  2,  1, 0};
   4652   return vec_perm(mask, mask, reverse);
   4653 }
   4654 #else
   4655 static __inline__ vector unsigned char __ATTRS_o_ai
   4656 vec_lvsr(int __a, const unsigned char *__b) {
   4657   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4658 }
   4659 #endif
   4660 
   4661 #ifdef __LITTLE_ENDIAN__
   4662 static __inline__ vector unsigned char __ATTRS_o_ai
   4663     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4664 loads/stores"))) vec_lvsr(int __a, const short *__b) {
   4665   vector unsigned char mask =
   4666       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4667   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4668                                   7,  6,  5,  4,  3,  2,  1, 0};
   4669   return vec_perm(mask, mask, reverse);
   4670 }
   4671 #else
   4672 static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
   4673                                                              const short *__b) {
   4674   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4675 }
   4676 #endif
   4677 
   4678 #ifdef __LITTLE_ENDIAN__
   4679 static __inline__ vector unsigned char __ATTRS_o_ai
   4680     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4681 loads/stores"))) vec_lvsr(int __a, const unsigned short *__b) {
   4682   vector unsigned char mask =
   4683       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4684   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4685                                   7,  6,  5,  4,  3,  2,  1, 0};
   4686   return vec_perm(mask, mask, reverse);
   4687 }
   4688 #else
   4689 static __inline__ vector unsigned char __ATTRS_o_ai
   4690 vec_lvsr(int __a, const unsigned short *__b) {
   4691   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4692 }
   4693 #endif
   4694 
   4695 #ifdef __LITTLE_ENDIAN__
   4696 static __inline__ vector unsigned char __ATTRS_o_ai
   4697     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4698 loads/stores"))) vec_lvsr(int __a, const int *__b) {
   4699   vector unsigned char mask =
   4700       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4701   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4702                                   7,  6,  5,  4,  3,  2,  1, 0};
   4703   return vec_perm(mask, mask, reverse);
   4704 }
   4705 #else
   4706 static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
   4707                                                              const int *__b) {
   4708   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4709 }
   4710 #endif
   4711 
   4712 #ifdef __LITTLE_ENDIAN__
   4713 static __inline__ vector unsigned char __ATTRS_o_ai
   4714     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4715 loads/stores"))) vec_lvsr(int __a, const unsigned int *__b) {
   4716   vector unsigned char mask =
   4717       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4718   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4719                                   7,  6,  5,  4,  3,  2,  1, 0};
   4720   return vec_perm(mask, mask, reverse);
   4721 }
   4722 #else
   4723 static __inline__ vector unsigned char __ATTRS_o_ai
   4724 vec_lvsr(int __a, const unsigned int *__b) {
   4725   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4726 }
   4727 #endif
   4728 
   4729 #ifdef __LITTLE_ENDIAN__
   4730 static __inline__ vector unsigned char __ATTRS_o_ai
   4731     __attribute__((__deprecated__("use assignment for unaligned little endian \
   4732 loads/stores"))) vec_lvsr(int __a, const float *__b) {
   4733   vector unsigned char mask =
   4734       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4735   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
   4736                                   7,  6,  5,  4,  3,  2,  1, 0};
   4737   return vec_perm(mask, mask, reverse);
   4738 }
   4739 #else
   4740 static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
   4741                                                              const float *__b) {
   4742   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
   4743 }
   4744 #endif
   4745 
   4746 /* vec_madd */
   4747 static __inline__ vector signed short __ATTRS_o_ai
   4748 vec_mladd(vector signed short, vector signed short, vector signed short);
   4749 static __inline__ vector signed short __ATTRS_o_ai
   4750 vec_mladd(vector signed short, vector unsigned short, vector unsigned short);
   4751 static __inline__ vector signed short __ATTRS_o_ai
   4752 vec_mladd(vector unsigned short, vector signed short, vector signed short);
   4753 static __inline__ vector unsigned short __ATTRS_o_ai
   4754 vec_mladd(vector unsigned short, vector unsigned short, vector unsigned short);
   4755 
   4756 static __inline__ vector signed short __ATTRS_o_ai vec_madd(
   4757     vector signed short __a, vector signed short __b, vector signed short __c) {
   4758   return vec_mladd(__a, __b, __c);
   4759 }
   4760 
   4761 static __inline__ vector signed short __ATTRS_o_ai
   4762 vec_madd(vector signed short __a, vector unsigned short __b,
   4763          vector unsigned short __c) {
   4764   return vec_mladd(__a, __b, __c);
   4765 }
   4766 
   4767 static __inline__ vector signed short __ATTRS_o_ai
   4768 vec_madd(vector unsigned short __a, vector signed short __b,
   4769          vector signed short __c) {
   4770   return vec_mladd(__a, __b, __c);
   4771 }
   4772 
   4773 static __inline__ vector unsigned short __ATTRS_o_ai
   4774 vec_madd(vector unsigned short __a, vector unsigned short __b,
   4775          vector unsigned short __c) {
   4776   return vec_mladd(__a, __b, __c);
   4777 }
   4778 
   4779 static __inline__ vector float __ATTRS_o_ai vec_madd(vector float __a,
   4780                                                      vector float __b,
   4781                                                      vector float __c) {
   4782 #ifdef __VSX__
   4783   return __builtin_vsx_xvmaddasp(__a, __b, __c);
   4784 #else
   4785   return __builtin_altivec_vmaddfp(__a, __b, __c);
   4786 #endif
   4787 }
   4788 
   4789 #ifdef __VSX__
   4790 static __inline__ vector double __ATTRS_o_ai vec_madd(vector double __a,
   4791                                                       vector double __b,
   4792                                                       vector double __c) {
   4793   return __builtin_vsx_xvmaddadp(__a, __b, __c);
   4794 }
   4795 #endif
   4796 
   4797 /* vec_vmaddfp */
   4798 
   4799 static __inline__ vector float __attribute__((__always_inline__))
   4800 vec_vmaddfp(vector float __a, vector float __b, vector float __c) {
   4801   return __builtin_altivec_vmaddfp(__a, __b, __c);
   4802 }
   4803 
   4804 /* vec_madds */
   4805 
   4806 static __inline__ vector signed short __attribute__((__always_inline__))
   4807 vec_madds(vector signed short __a, vector signed short __b,
   4808           vector signed short __c) {
   4809   return __builtin_altivec_vmhaddshs(__a, __b, __c);
   4810 }
   4811 
   4812 /* vec_vmhaddshs */
   4813 static __inline__ vector signed short __attribute__((__always_inline__))
   4814 vec_vmhaddshs(vector signed short __a, vector signed short __b,
   4815               vector signed short __c) {
   4816   return __builtin_altivec_vmhaddshs(__a, __b, __c);
   4817 }
   4818 
   4819 /* vec_msub */
   4820 
   4821 #ifdef __VSX__
   4822 static __inline__ vector float __ATTRS_o_ai vec_msub(vector float __a,
   4823                                                      vector float __b,
   4824                                                      vector float __c) {
   4825   return __builtin_vsx_xvmsubasp(__a, __b, __c);
   4826 }
   4827 
   4828 static __inline__ vector double __ATTRS_o_ai vec_msub(vector double __a,
   4829                                                       vector double __b,
   4830                                                       vector double __c) {
   4831   return __builtin_vsx_xvmsubadp(__a, __b, __c);
   4832 }
   4833 #endif
   4834 
   4835 /* vec_max */
   4836 
   4837 static __inline__ vector signed char __ATTRS_o_ai
   4838 vec_max(vector signed char __a, vector signed char __b) {
   4839   return __builtin_altivec_vmaxsb(__a, __b);
   4840 }
   4841 
   4842 static __inline__ vector signed char __ATTRS_o_ai
   4843 vec_max(vector bool char __a, vector signed char __b) {
   4844   return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
   4845 }
   4846 
   4847 static __inline__ vector signed char __ATTRS_o_ai
   4848 vec_max(vector signed char __a, vector bool char __b) {
   4849   return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
   4850 }
   4851 
   4852 static __inline__ vector unsigned char __ATTRS_o_ai
   4853 vec_max(vector unsigned char __a, vector unsigned char __b) {
   4854   return __builtin_altivec_vmaxub(__a, __b);
   4855 }
   4856 
   4857 static __inline__ vector unsigned char __ATTRS_o_ai
   4858 vec_max(vector bool char __a, vector unsigned char __b) {
   4859   return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
   4860 }
   4861 
   4862 static __inline__ vector unsigned char __ATTRS_o_ai
   4863 vec_max(vector unsigned char __a, vector bool char __b) {
   4864   return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
   4865 }
   4866 
   4867 static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
   4868                                                     vector short __b) {
   4869   return __builtin_altivec_vmaxsh(__a, __b);
   4870 }
   4871 
   4872 static __inline__ vector short __ATTRS_o_ai vec_max(vector bool short __a,
   4873                                                     vector short __b) {
   4874   return __builtin_altivec_vmaxsh((vector short)__a, __b);
   4875 }
   4876 
   4877 static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
   4878                                                     vector bool short __b) {
   4879   return __builtin_altivec_vmaxsh(__a, (vector short)__b);
   4880 }
   4881 
   4882 static __inline__ vector unsigned short __ATTRS_o_ai
   4883 vec_max(vector unsigned short __a, vector unsigned short __b) {
   4884   return __builtin_altivec_vmaxuh(__a, __b);
   4885 }
   4886 
   4887 static __inline__ vector unsigned short __ATTRS_o_ai
   4888 vec_max(vector bool short __a, vector unsigned short __b) {
   4889   return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
   4890 }
   4891 
   4892 static __inline__ vector unsigned short __ATTRS_o_ai
   4893 vec_max(vector unsigned short __a, vector bool short __b) {
   4894   return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
   4895 }
   4896 
   4897 static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
   4898                                                   vector int __b) {
   4899   return __builtin_altivec_vmaxsw(__a, __b);
   4900 }
   4901 
   4902 static __inline__ vector int __ATTRS_o_ai vec_max(vector bool int __a,
   4903                                                   vector int __b) {
   4904   return __builtin_altivec_vmaxsw((vector int)__a, __b);
   4905 }
   4906 
   4907 static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
   4908                                                   vector bool int __b) {
   4909   return __builtin_altivec_vmaxsw(__a, (vector int)__b);
   4910 }
   4911 
   4912 static __inline__ vector unsigned int __ATTRS_o_ai
   4913 vec_max(vector unsigned int __a, vector unsigned int __b) {
   4914   return __builtin_altivec_vmaxuw(__a, __b);
   4915 }
   4916 
   4917 static __inline__ vector unsigned int __ATTRS_o_ai
   4918 vec_max(vector bool int __a, vector unsigned int __b) {
   4919   return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
   4920 }
   4921 
   4922 static __inline__ vector unsigned int __ATTRS_o_ai
   4923 vec_max(vector unsigned int __a, vector bool int __b) {
   4924   return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
   4925 }
   4926 
   4927 #ifdef __POWER8_VECTOR__
   4928 static __inline__ vector signed long long __ATTRS_o_ai
   4929 vec_max(vector signed long long __a, vector signed long long __b) {
   4930   return __builtin_altivec_vmaxsd(__a, __b);
   4931 }
   4932 
   4933 static __inline__ vector signed long long __ATTRS_o_ai
   4934 vec_max(vector bool long long __a, vector signed long long __b) {
   4935   return __builtin_altivec_vmaxsd((vector signed long long)__a, __b);
   4936 }
   4937 
   4938 static __inline__ vector signed long long __ATTRS_o_ai
   4939 vec_max(vector signed long long __a, vector bool long long __b) {
   4940   return __builtin_altivec_vmaxsd(__a, (vector signed long long)__b);
   4941 }
   4942 
   4943 static __inline__ vector unsigned long long __ATTRS_o_ai
   4944 vec_max(vector unsigned long long __a, vector unsigned long long __b) {
   4945   return __builtin_altivec_vmaxud(__a, __b);
   4946 }
   4947 
   4948 static __inline__ vector unsigned long long __ATTRS_o_ai
   4949 vec_max(vector bool long long __a, vector unsigned long long __b) {
   4950   return __builtin_altivec_vmaxud((vector unsigned long long)__a, __b);
   4951 }
   4952 
   4953 static __inline__ vector unsigned long long __ATTRS_o_ai
   4954 vec_max(vector unsigned long long __a, vector bool long long __b) {
   4955   return __builtin_altivec_vmaxud(__a, (vector unsigned long long)__b);
   4956 }
   4957 #endif
   4958 
   4959 static __inline__ vector float __ATTRS_o_ai vec_max(vector float __a,
   4960                                                     vector float __b) {
   4961 #ifdef __VSX__
   4962   return __builtin_vsx_xvmaxsp(__a, __b);
   4963 #else
   4964   return __builtin_altivec_vmaxfp(__a, __b);
   4965 #endif
   4966 }
   4967 
   4968 #ifdef __VSX__
   4969 static __inline__ vector double __ATTRS_o_ai vec_max(vector double __a,
   4970                                                      vector double __b) {
   4971   return __builtin_vsx_xvmaxdp(__a, __b);
   4972 }
   4973 #endif
   4974 
   4975 /* vec_vmaxsb */
   4976 
   4977 static __inline__ vector signed char __ATTRS_o_ai
   4978 vec_vmaxsb(vector signed char __a, vector signed char __b) {
   4979   return __builtin_altivec_vmaxsb(__a, __b);
   4980 }
   4981 
   4982 static __inline__ vector signed char __ATTRS_o_ai
   4983 vec_vmaxsb(vector bool char __a, vector signed char __b) {
   4984   return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
   4985 }
   4986 
   4987 static __inline__ vector signed char __ATTRS_o_ai
   4988 vec_vmaxsb(vector signed char __a, vector bool char __b) {
   4989   return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
   4990 }
   4991 
   4992 /* vec_vmaxub */
   4993 
   4994 static __inline__ vector unsigned char __ATTRS_o_ai
   4995 vec_vmaxub(vector unsigned char __a, vector unsigned char __b) {
   4996   return __builtin_altivec_vmaxub(__a, __b);
   4997 }
   4998 
   4999 static __inline__ vector unsigned char __ATTRS_o_ai
   5000 vec_vmaxub(vector bool char __a, vector unsigned char __b) {
   5001   return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
   5002 }
   5003 
   5004 static __inline__ vector unsigned char __ATTRS_o_ai
   5005 vec_vmaxub(vector unsigned char __a, vector bool char __b) {
   5006   return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
   5007 }
   5008 
   5009 /* vec_vmaxsh */
   5010 
   5011 static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
   5012                                                        vector short __b) {
   5013   return __builtin_altivec_vmaxsh(__a, __b);
   5014 }
   5015 
   5016 static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector bool short __a,
   5017                                                        vector short __b) {
   5018   return __builtin_altivec_vmaxsh((vector short)__a, __b);
   5019 }
   5020 
   5021 static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
   5022                                                        vector bool short __b) {
   5023   return __builtin_altivec_vmaxsh(__a, (vector short)__b);
   5024 }
   5025 
   5026 /* vec_vmaxuh */
   5027 
   5028 static __inline__ vector unsigned short __ATTRS_o_ai
   5029 vec_vmaxuh(vector unsigned short __a, vector unsigned short __b) {
   5030   return __builtin_altivec_vmaxuh(__a, __b);
   5031 }
   5032 
   5033 static __inline__ vector unsigned short __ATTRS_o_ai
   5034 vec_vmaxuh(vector bool short __a, vector unsigned short __b) {
   5035   return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
   5036 }
   5037 
   5038 static __inline__ vector unsigned short __ATTRS_o_ai
   5039 vec_vmaxuh(vector unsigned short __a, vector bool short __b) {
   5040   return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
   5041 }
   5042 
   5043 /* vec_vmaxsw */
   5044 
   5045 static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
   5046                                                      vector int __b) {
   5047   return __builtin_altivec_vmaxsw(__a, __b);
   5048 }
   5049 
   5050 static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector bool int __a,
   5051                                                      vector int __b) {
   5052   return __builtin_altivec_vmaxsw((vector int)__a, __b);
   5053 }
   5054 
   5055 static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
   5056                                                      vector bool int __b) {
   5057   return __builtin_altivec_vmaxsw(__a, (vector int)__b);
   5058 }
   5059 
   5060 /* vec_vmaxuw */
   5061 
   5062 static __inline__ vector unsigned int __ATTRS_o_ai
   5063 vec_vmaxuw(vector unsigned int __a, vector unsigned int __b) {
   5064   return __builtin_altivec_vmaxuw(__a, __b);
   5065 }
   5066 
   5067 static __inline__ vector unsigned int __ATTRS_o_ai
   5068 vec_vmaxuw(vector bool int __a, vector unsigned int __b) {
   5069   return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
   5070 }
   5071 
   5072 static __inline__ vector unsigned int __ATTRS_o_ai
   5073 vec_vmaxuw(vector unsigned int __a, vector bool int __b) {
   5074   return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
   5075 }
   5076 
   5077 /* vec_vmaxfp */
   5078 
   5079 static __inline__ vector float __attribute__((__always_inline__))
   5080 vec_vmaxfp(vector float __a, vector float __b) {
   5081 #ifdef __VSX__
   5082   return __builtin_vsx_xvmaxsp(__a, __b);
   5083 #else
   5084   return __builtin_altivec_vmaxfp(__a, __b);
   5085 #endif
   5086 }
   5087 
   5088 /* vec_mergeh */
   5089 
   5090 static __inline__ vector signed char __ATTRS_o_ai
   5091 vec_mergeh(vector signed char __a, vector signed char __b) {
   5092   return vec_perm(__a, __b,
   5093                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
   5094                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
   5095                                          0x06, 0x16, 0x07, 0x17));
   5096 }
   5097 
   5098 static __inline__ vector unsigned char __ATTRS_o_ai
   5099 vec_mergeh(vector unsigned char __a, vector unsigned char __b) {
   5100   return vec_perm(__a, __b,
   5101                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
   5102                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
   5103                                          0x06, 0x16, 0x07, 0x17));
   5104 }
   5105 
   5106 static __inline__ vector bool char __ATTRS_o_ai
   5107 vec_mergeh(vector bool char __a, vector bool char __b) {
   5108   return vec_perm(__a, __b,
   5109                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
   5110                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
   5111                                          0x06, 0x16, 0x07, 0x17));
   5112 }
   5113 
   5114 static __inline__ vector short __ATTRS_o_ai vec_mergeh(vector short __a,
   5115                                                        vector short __b) {
   5116   return vec_perm(__a, __b,
   5117                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
   5118                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
   5119                                          0x06, 0x07, 0x16, 0x17));
   5120 }
   5121 
   5122 static __inline__ vector unsigned short __ATTRS_o_ai
   5123 vec_mergeh(vector unsigned short __a, vector unsigned short __b) {
   5124   return vec_perm(__a, __b,
   5125                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
   5126                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
   5127                                          0x06, 0x07, 0x16, 0x17));
   5128 }
   5129 
   5130 static __inline__ vector bool short __ATTRS_o_ai
   5131 vec_mergeh(vector bool short __a, vector bool short __b) {
   5132   return vec_perm(__a, __b,
   5133                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
   5134                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
   5135                                          0x06, 0x07, 0x16, 0x17));
   5136 }
   5137 
   5138 static __inline__ vector pixel __ATTRS_o_ai vec_mergeh(vector pixel __a,
   5139                                                        vector pixel __b) {
   5140   return vec_perm(__a, __b,
   5141                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
   5142                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
   5143                                          0x06, 0x07, 0x16, 0x17));
   5144 }
   5145 
   5146 static __inline__ vector int __ATTRS_o_ai vec_mergeh(vector int __a,
   5147                                                      vector int __b) {
   5148   return vec_perm(__a, __b,
   5149                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
   5150                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
   5151                                          0x14, 0x15, 0x16, 0x17));
   5152 }
   5153 
   5154 static __inline__ vector unsigned int __ATTRS_o_ai
   5155 vec_mergeh(vector unsigned int __a, vector unsigned int __b) {
   5156   return vec_perm(__a, __b,
   5157                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
   5158                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
   5159                                          0x14, 0x15, 0x16, 0x17));
   5160 }
   5161 
   5162 static __inline__ vector bool int __ATTRS_o_ai vec_mergeh(vector bool int __a,
   5163                                                           vector bool int __b) {
   5164   return vec_perm(__a, __b,
   5165                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
   5166                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
   5167                                          0x14, 0x15, 0x16, 0x17));
   5168 }
   5169 
   5170 static __inline__ vector float __ATTRS_o_ai vec_mergeh(vector float __a,
   5171                                                        vector float __b) {
   5172   return vec_perm(__a, __b,
   5173                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
   5174                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
   5175                                          0x14, 0x15, 0x16, 0x17));
   5176 }
   5177 
   5178 #ifdef __VSX__
   5179 static __inline__ vector signed long long __ATTRS_o_ai
   5180 vec_mergeh(vector signed long long __a, vector signed long long __b) {
   5181   return vec_perm(__a, __b,
   5182                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
   5183                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
   5184                                          0x14, 0x15, 0x16, 0x17));
   5185 }
   5186 
   5187 static __inline__ vector signed long long __ATTRS_o_ai
   5188 vec_mergeh(vector signed long long __a, vector bool long long __b) {
   5189   return vec_perm(__a, (vector signed long long)__b,
   5190                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
   5191                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
   5192                                          0x14, 0x15, 0x16, 0x17));
   5193 }
   5194 
   5195 static __inline__ vector signed long long __ATTRS_o_ai
   5196 vec_mergeh(vector bool long long __a, vector signed long long __b) {
   5197   return vec_perm((vector signed long long)__a, __b,
   5198                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
   5199                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
   5200                                          0x14, 0x15, 0x16, 0x17));
   5201 }
   5202 
   5203 static __inline__ vector unsigned long long __ATTRS_o_ai
   5204 vec_mergeh(vector unsigned long long __a, vector unsigned long long __b) {
   5205   return vec_perm(__a, __b,
   5206                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
   5207                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
   5208                                          0x14, 0x15, 0x16, 0x17));
   5209 }
   5210 
   5211 static __inline__ vector unsigned long long __ATTRS_o_ai
   5212 vec_mergeh(vector unsigned long long __a, vector bool long long __b) {
   5213   return vec_perm(__a, (vector unsigned long long)__b,
   5214                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
   5215                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
   5216                                          0x14, 0x15, 0x16, 0x17));
   5217 }
   5218 
   5219 static __inline__ vector unsigned long long __ATTRS_o_ai
   5220 vec_mergeh(vector bool long long __a, vector unsigned long long __b) {
   5221   return vec_perm((vector unsigned long long)__a, __b,
   5222                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
   5223                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
   5224                                          0x14, 0x15, 0x16, 0x17));
   5225 }
   5226 
   5227 static __inline__ vector bool long long __ATTRS_o_ai
   5228 vec_mergeh(vector bool long long __a, vector bool long long __b) {
   5229   return vec_perm(__a, __b,
   5230                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
   5231                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
   5232                                          0x14, 0x15, 0x16, 0x17));
   5233 }
   5234 
   5235 static __inline__ vector double __ATTRS_o_ai vec_mergeh(vector double __a,
   5236                                                         vector double __b) {
   5237   return vec_perm(__a, __b,
   5238                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
   5239                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
   5240                                          0x14, 0x15, 0x16, 0x17));
   5241 }
   5242 static __inline__ vector double __ATTRS_o_ai
   5243 vec_mergeh(vector double __a, vector bool long long __b) {
   5244   return vec_perm(__a, (vector double)__b,
   5245                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
   5246                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
   5247                                          0x14, 0x15, 0x16, 0x17));
   5248 }
   5249 static __inline__ vector double __ATTRS_o_ai
   5250 vec_mergeh(vector bool long long __a, vector double __b) {
   5251   return vec_perm((vector double)__a, __b,
   5252                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
   5253                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
   5254                                          0x14, 0x15, 0x16, 0x17));
   5255 }
   5256 #endif
   5257 
   5258 /* vec_vmrghb */
   5259 
   5260 #define __builtin_altivec_vmrghb vec_vmrghb
   5261 
   5262 static __inline__ vector signed char __ATTRS_o_ai
   5263 vec_vmrghb(vector signed char __a, vector signed char __b) {
   5264   return vec_perm(__a, __b,
   5265                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
   5266                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
   5267                                          0x06, 0x16, 0x07, 0x17));
   5268 }
   5269 
   5270 static __inline__ vector unsigned char __ATTRS_o_ai
   5271 vec_vmrghb(vector unsigned char __a, vector unsigned char __b) {
   5272   return vec_perm(__a, __b,
   5273                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
   5274                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
   5275                                          0x06, 0x16, 0x07, 0x17));
   5276 }
   5277 
   5278 static __inline__ vector bool char __ATTRS_o_ai
   5279 vec_vmrghb(vector bool char __a, vector bool char __b) {
   5280   return vec_perm(__a, __b,
   5281                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
   5282                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
   5283                                          0x06, 0x16, 0x07, 0x17));
   5284 }
   5285 
   5286 /* vec_vmrghh */
   5287 
   5288 #define __builtin_altivec_vmrghh vec_vmrghh
   5289 
   5290 static __inline__ vector short __ATTRS_o_ai vec_vmrghh(vector short __a,
   5291                                                        vector short __b) {
   5292   return vec_perm(__a, __b,
   5293                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
   5294                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
   5295                                          0x06, 0x07, 0x16, 0x17));
   5296 }
   5297 
   5298 static __inline__ vector unsigned short __ATTRS_o_ai
   5299 vec_vmrghh(vector unsigned short __a, vector unsigned short __b) {
   5300   return vec_perm(__a, __b,
   5301                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
   5302                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
   5303                                          0x06, 0x07, 0x16, 0x17));
   5304 }
   5305 
   5306 static __inline__ vector bool short __ATTRS_o_ai
   5307 vec_vmrghh(vector bool short __a, vector bool short __b) {
   5308   return vec_perm(__a, __b,
   5309                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
   5310                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
   5311                                          0x06, 0x07, 0x16, 0x17));
   5312 }
   5313 
   5314 static __inline__ vector pixel __ATTRS_o_ai vec_vmrghh(vector pixel __a,
   5315                                                        vector pixel __b) {
   5316   return vec_perm(__a, __b,
   5317                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
   5318                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
   5319                                          0x06, 0x07, 0x16, 0x17));
   5320 }
   5321 
   5322 /* vec_vmrghw */
   5323 
   5324 #define __builtin_altivec_vmrghw vec_vmrghw
   5325 
   5326 static __inline__ vector int __ATTRS_o_ai vec_vmrghw(vector int __a,
   5327                                                      vector int __b) {
   5328   return vec_perm(__a, __b,
   5329                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
   5330                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
   5331                                          0x14, 0x15, 0x16, 0x17));
   5332 }
   5333 
   5334 static __inline__ vector unsigned int __ATTRS_o_ai
   5335 vec_vmrghw(vector unsigned int __a, vector unsigned int __b) {
   5336   return vec_perm(__a, __b,
   5337                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
   5338                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
   5339                                          0x14, 0x15, 0x16, 0x17));
   5340 }
   5341 
   5342 static __inline__ vector bool int __ATTRS_o_ai vec_vmrghw(vector bool int __a,
   5343                                                           vector bool int __b) {
   5344   return vec_perm(__a, __b,
   5345                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
   5346                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
   5347                                          0x14, 0x15, 0x16, 0x17));
   5348 }
   5349 
   5350 static __inline__ vector float __ATTRS_o_ai vec_vmrghw(vector float __a,
   5351                                                        vector float __b) {
   5352   return vec_perm(__a, __b,
   5353                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
   5354                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
   5355                                          0x14, 0x15, 0x16, 0x17));
   5356 }
   5357 
   5358 /* vec_mergel */
   5359 
   5360 static __inline__ vector signed char __ATTRS_o_ai
   5361 vec_mergel(vector signed char __a, vector signed char __b) {
   5362   return vec_perm(__a, __b,
   5363                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
   5364                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
   5365                                          0x0E, 0x1E, 0x0F, 0x1F));
   5366 }
   5367 
   5368 static __inline__ vector unsigned char __ATTRS_o_ai
   5369 vec_mergel(vector unsigned char __a, vector unsigned char __b) {
   5370   return vec_perm(__a, __b,
   5371                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
   5372                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
   5373                                          0x0E, 0x1E, 0x0F, 0x1F));
   5374 }
   5375 
   5376 static __inline__ vector bool char __ATTRS_o_ai
   5377 vec_mergel(vector bool char __a, vector bool char __b) {
   5378   return vec_perm(__a, __b,
   5379                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
   5380                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
   5381                                          0x0E, 0x1E, 0x0F, 0x1F));
   5382 }
   5383 
   5384 static __inline__ vector short __ATTRS_o_ai vec_mergel(vector short __a,
   5385                                                        vector short __b) {
   5386   return vec_perm(__a, __b,
   5387                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
   5388                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
   5389                                          0x0E, 0x0F, 0x1E, 0x1F));
   5390 }
   5391 
   5392 static __inline__ vector unsigned short __ATTRS_o_ai
   5393 vec_mergel(vector unsigned short __a, vector unsigned short __b) {
   5394   return vec_perm(__a, __b,
   5395                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
   5396                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
   5397                                          0x0E, 0x0F, 0x1E, 0x1F));
   5398 }
   5399 
   5400 static __inline__ vector bool short __ATTRS_o_ai
   5401 vec_mergel(vector bool short __a, vector bool short __b) {
   5402   return vec_perm(__a, __b,
   5403                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
   5404                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
   5405                                          0x0E, 0x0F, 0x1E, 0x1F));
   5406 }
   5407 
   5408 static __inline__ vector pixel __ATTRS_o_ai vec_mergel(vector pixel __a,
   5409                                                        vector pixel __b) {
   5410   return vec_perm(__a, __b,
   5411                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
   5412                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
   5413                                          0x0E, 0x0F, 0x1E, 0x1F));
   5414 }
   5415 
   5416 static __inline__ vector int __ATTRS_o_ai vec_mergel(vector int __a,
   5417                                                      vector int __b) {
   5418   return vec_perm(__a, __b,
   5419                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
   5420                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
   5421                                          0x1C, 0x1D, 0x1E, 0x1F));
   5422 }
   5423 
   5424 static __inline__ vector unsigned int __ATTRS_o_ai
   5425 vec_mergel(vector unsigned int __a, vector unsigned int __b) {
   5426   return vec_perm(__a, __b,
   5427                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
   5428                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
   5429                                          0x1C, 0x1D, 0x1E, 0x1F));
   5430 }
   5431 
   5432 static __inline__ vector bool int __ATTRS_o_ai vec_mergel(vector bool int __a,
   5433                                                           vector bool int __b) {
   5434   return vec_perm(__a, __b,
   5435                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
   5436                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
   5437                                          0x1C, 0x1D, 0x1E, 0x1F));
   5438 }
   5439 
   5440 static __inline__ vector float __ATTRS_o_ai vec_mergel(vector float __a,
   5441                                                        vector float __b) {
   5442   return vec_perm(__a, __b,
   5443                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
   5444                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
   5445                                          0x1C, 0x1D, 0x1E, 0x1F));
   5446 }
   5447 
   5448 #ifdef __VSX__
   5449 static __inline__ vector signed long long __ATTRS_o_ai
   5450 vec_mergel(vector signed long long __a, vector signed long long __b) {
   5451   return vec_perm(__a, __b,
   5452                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
   5453                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
   5454                                          0x1C, 0x1D, 0x1E, 0x1F));
   5455 }
   5456 static __inline__ vector signed long long __ATTRS_o_ai
   5457 vec_mergel(vector signed long long __a, vector bool long long __b) {
   5458   return vec_perm(__a, (vector signed long long)__b,
   5459                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
   5460                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
   5461                                          0x1C, 0x1D, 0x1E, 0x1F));
   5462 }
   5463 static __inline__ vector signed long long __ATTRS_o_ai
   5464 vec_mergel(vector bool long long __a, vector signed long long __b) {
   5465   return vec_perm((vector signed long long)__a, __b,
   5466                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
   5467                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
   5468                                          0x1C, 0x1D, 0x1E, 0x1F));
   5469 }
   5470 static __inline__ vector unsigned long long __ATTRS_o_ai
   5471 vec_mergel(vector unsigned long long __a, vector unsigned long long __b) {
   5472   return vec_perm(__a, __b,
   5473                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
   5474                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
   5475                                          0x1C, 0x1D, 0x1E, 0x1F));
   5476 }
   5477 static __inline__ vector unsigned long long __ATTRS_o_ai
   5478 vec_mergel(vector unsigned long long __a, vector bool long long __b) {
   5479   return vec_perm(__a, (vector unsigned long long)__b,
   5480                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
   5481                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
   5482                                          0x1C, 0x1D, 0x1E, 0x1F));
   5483 }
   5484 static __inline__ vector unsigned long long __ATTRS_o_ai
   5485 vec_mergel(vector bool long long __a, vector unsigned long long __b) {
   5486   return vec_perm((vector unsigned long long)__a, __b,
   5487                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
   5488                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
   5489                                          0x1C, 0x1D, 0x1E, 0x1F));
   5490 }
   5491 static __inline__ vector bool long long __ATTRS_o_ai
   5492 vec_mergel(vector bool long long __a, vector bool long long __b) {
   5493   return vec_perm(__a, __b,
   5494                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
   5495                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
   5496                                          0x1C, 0x1D, 0x1E, 0x1F));
   5497 }
   5498 static __inline__ vector double __ATTRS_o_ai vec_mergel(vector double __a,
   5499                                                         vector double __b) {
   5500   return vec_perm(__a, __b,
   5501                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
   5502                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
   5503                                          0x1C, 0x1D, 0x1E, 0x1F));
   5504 }
   5505 static __inline__ vector double __ATTRS_o_ai
   5506 vec_mergel(vector double __a, vector bool long long __b) {
   5507   return vec_perm(__a, (vector double)__b,
   5508                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
   5509                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
   5510                                          0x1C, 0x1D, 0x1E, 0x1F));
   5511 }
   5512 static __inline__ vector double __ATTRS_o_ai
   5513 vec_mergel(vector bool long long __a, vector double __b) {
   5514   return vec_perm((vector double)__a, __b,
   5515                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
   5516                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
   5517                                          0x1C, 0x1D, 0x1E, 0x1F));
   5518 }
   5519 #endif
   5520 
   5521 /* vec_vmrglb */
   5522 
   5523 #define __builtin_altivec_vmrglb vec_vmrglb
   5524 
   5525 static __inline__ vector signed char __ATTRS_o_ai
   5526 vec_vmrglb(vector signed char __a, vector signed char __b) {
   5527   return vec_perm(__a, __b,
   5528                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
   5529                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
   5530                                          0x0E, 0x1E, 0x0F, 0x1F));
   5531 }
   5532 
   5533 static __inline__ vector unsigned char __ATTRS_o_ai
   5534 vec_vmrglb(vector unsigned char __a, vector unsigned char __b) {
   5535   return vec_perm(__a, __b,
   5536                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
   5537                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
   5538                                          0x0E, 0x1E, 0x0F, 0x1F));
   5539 }
   5540 
   5541 static __inline__ vector bool char __ATTRS_o_ai
   5542 vec_vmrglb(vector bool char __a, vector bool char __b) {
   5543   return vec_perm(__a, __b,
   5544                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
   5545                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
   5546                                          0x0E, 0x1E, 0x0F, 0x1F));
   5547 }
   5548 
   5549 /* vec_vmrglh */
   5550 
   5551 #define __builtin_altivec_vmrglh vec_vmrglh
   5552 
   5553 static __inline__ vector short __ATTRS_o_ai vec_vmrglh(vector short __a,
   5554                                                        vector short __b) {
   5555   return vec_perm(__a, __b,
   5556                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
   5557                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
   5558                                          0x0E, 0x0F, 0x1E, 0x1F));
   5559 }
   5560 
   5561 static __inline__ vector unsigned short __ATTRS_o_ai
   5562 vec_vmrglh(vector unsigned short __a, vector unsigned short __b) {
   5563   return vec_perm(__a, __b,
   5564                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
   5565                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
   5566                                          0x0E, 0x0F, 0x1E, 0x1F));
   5567 }
   5568 
   5569 static __inline__ vector bool short __ATTRS_o_ai
   5570 vec_vmrglh(vector bool short __a, vector bool short __b) {
   5571   return vec_perm(__a, __b,
   5572                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
   5573                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
   5574                                          0x0E, 0x0F, 0x1E, 0x1F));
   5575 }
   5576 
   5577 static __inline__ vector pixel __ATTRS_o_ai vec_vmrglh(vector pixel __a,
   5578                                                        vector pixel __b) {
   5579   return vec_perm(__a, __b,
   5580                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
   5581                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
   5582                                          0x0E, 0x0F, 0x1E, 0x1F));
   5583 }
   5584 
   5585 /* vec_vmrglw */
   5586 
   5587 #define __builtin_altivec_vmrglw vec_vmrglw
   5588 
   5589 static __inline__ vector int __ATTRS_o_ai vec_vmrglw(vector int __a,
   5590                                                      vector int __b) {
   5591   return vec_perm(__a, __b,
   5592                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
   5593                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
   5594                                          0x1C, 0x1D, 0x1E, 0x1F));
   5595 }
   5596 
   5597 static __inline__ vector unsigned int __ATTRS_o_ai
   5598 vec_vmrglw(vector unsigned int __a, vector unsigned int __b) {
   5599   return vec_perm(__a, __b,
   5600                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
   5601                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
   5602                                          0x1C, 0x1D, 0x1E, 0x1F));
   5603 }
   5604 
   5605 static __inline__ vector bool int __ATTRS_o_ai vec_vmrglw(vector bool int __a,
   5606                                                           vector bool int __b) {
   5607   return vec_perm(__a, __b,
   5608                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
   5609                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
   5610                                          0x1C, 0x1D, 0x1E, 0x1F));
   5611 }
   5612 
   5613 static __inline__ vector float __ATTRS_o_ai vec_vmrglw(vector float __a,
   5614                                                        vector float __b) {
   5615   return vec_perm(__a, __b,
   5616                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
   5617                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
   5618                                          0x1C, 0x1D, 0x1E, 0x1F));
   5619 }
   5620 
   5621 #ifdef __POWER8_VECTOR__
   5622 /* vec_mergee */
   5623 
   5624 static __inline__ vector bool int __ATTRS_o_ai vec_mergee(vector bool int __a,
   5625                                                           vector bool int __b) {
   5626   return vec_perm(__a, __b,
   5627                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
   5628                                          0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
   5629                                          0x18, 0x19, 0x1A, 0x1B));
   5630 }
   5631 
   5632 static __inline__ vector signed int __ATTRS_o_ai
   5633 vec_mergee(vector signed int __a, vector signed int __b) {
   5634   return vec_perm(__a, __b,
   5635                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
   5636                                          0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
   5637                                          0x18, 0x19, 0x1A, 0x1B));
   5638 }
   5639 
   5640 static __inline__ vector unsigned int __ATTRS_o_ai
   5641 vec_mergee(vector unsigned int __a, vector unsigned int __b) {
   5642   return vec_perm(__a, __b,
   5643                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
   5644                                          0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
   5645                                          0x18, 0x19, 0x1A, 0x1B));
   5646 }
   5647 
   5648 static __inline__ vector bool long long __ATTRS_o_ai
   5649 vec_mergee(vector bool long long __a, vector bool long long __b) {
   5650   return vec_mergeh(__a, __b);
   5651 }
   5652 
   5653 static __inline__ vector signed long long __ATTRS_o_ai
   5654 vec_mergee(vector signed long long __a, vector signed long long __b) {
   5655   return vec_mergeh(__a, __b);
   5656 }
   5657 
   5658 static __inline__ vector unsigned long long __ATTRS_o_ai
   5659 vec_mergee(vector unsigned long long __a, vector unsigned long long __b) {
   5660   return vec_mergeh(__a, __b);
   5661 }
   5662 
   5663 static __inline__ vector float __ATTRS_o_ai
   5664 vec_mergee(vector float __a, vector float __b) {
   5665   return vec_perm(__a, __b,
   5666                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
   5667                                          0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
   5668                                          0x18, 0x19, 0x1A, 0x1B));
   5669 }
   5670 
   5671 static __inline__ vector double __ATTRS_o_ai
   5672 vec_mergee(vector double __a, vector double __b) {
   5673   return vec_mergeh(__a, __b);
   5674 }
   5675 
   5676 /* vec_mergeo */
   5677 
   5678 static __inline__ vector bool int __ATTRS_o_ai vec_mergeo(vector bool int __a,
   5679                                                           vector bool int __b) {
   5680   return vec_perm(__a, __b,
   5681                   (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
   5682                                          0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
   5683                                          0x1C, 0x1D, 0x1E, 0x1F));
   5684 }
   5685 
   5686 static __inline__ vector signed int __ATTRS_o_ai
   5687 vec_mergeo(vector signed int __a, vector signed int __b) {
   5688   return vec_perm(__a, __b,
   5689                   (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
   5690                                          0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
   5691                                          0x1C, 0x1D, 0x1E, 0x1F));
   5692 }
   5693 
   5694 static __inline__ vector unsigned int __ATTRS_o_ai
   5695 vec_mergeo(vector unsigned int __a, vector unsigned int __b) {
   5696   return vec_perm(__a, __b,
   5697                   (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
   5698                                          0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
   5699                                          0x1C, 0x1D, 0x1E, 0x1F));
   5700 }
   5701 
   5702 static __inline__ vector bool long long __ATTRS_o_ai
   5703 vec_mergeo(vector bool long long __a, vector bool long long __b) {
   5704   return vec_mergel(__a, __b);
   5705 }
   5706 
   5707 static __inline__ vector signed long long __ATTRS_o_ai
   5708 vec_mergeo(vector signed long long __a, vector signed long long __b) {
   5709   return vec_mergel(__a, __b);
   5710 }
   5711 
   5712 static __inline__ vector unsigned long long __ATTRS_o_ai
   5713 vec_mergeo(vector unsigned long long __a, vector unsigned long long __b) {
   5714   return vec_mergel(__a, __b);
   5715 }
   5716 
   5717 static __inline__ vector float __ATTRS_o_ai
   5718 vec_mergeo(vector float __a, vector float __b) {
   5719   return vec_perm(__a, __b,
   5720                   (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
   5721                                          0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
   5722                                          0x1C, 0x1D, 0x1E, 0x1F));
   5723 }
   5724 
   5725 static __inline__ vector double __ATTRS_o_ai
   5726 vec_mergeo(vector double __a, vector double __b) {
   5727   return vec_mergel(__a, __b);
   5728 }
   5729 
   5730 #endif
   5731 
   5732 /* vec_mfvscr */
   5733 
   5734 static __inline__ vector unsigned short __attribute__((__always_inline__))
   5735 vec_mfvscr(void) {
   5736   return __builtin_altivec_mfvscr();
   5737 }
   5738 
   5739 /* vec_min */
   5740 
   5741 static __inline__ vector signed char __ATTRS_o_ai
   5742 vec_min(vector signed char __a, vector signed char __b) {
   5743   return __builtin_altivec_vminsb(__a, __b);
   5744 }
   5745 
   5746 static __inline__ vector signed char __ATTRS_o_ai
   5747 vec_min(vector bool char __a, vector signed char __b) {
   5748   return __builtin_altivec_vminsb((vector signed char)__a, __b);
   5749 }
   5750 
   5751 static __inline__ vector signed char __ATTRS_o_ai
   5752 vec_min(vector signed char __a, vector bool char __b) {
   5753   return __builtin_altivec_vminsb(__a, (vector signed char)__b);
   5754 }
   5755 
   5756 static __inline__ vector unsigned char __ATTRS_o_ai
   5757 vec_min(vector unsigned char __a, vector unsigned char __b) {
   5758   return __builtin_altivec_vminub(__a, __b);
   5759 }
   5760 
   5761 static __inline__ vector unsigned char __ATTRS_o_ai
   5762 vec_min(vector bool char __a, vector unsigned char __b) {
   5763   return __builtin_altivec_vminub((vector unsigned char)__a, __b);
   5764 }
   5765 
   5766 static __inline__ vector unsigned char __ATTRS_o_ai
   5767 vec_min(vector unsigned char __a, vector bool char __b) {
   5768   return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
   5769 }
   5770 
   5771 static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
   5772                                                     vector short __b) {
   5773   return __builtin_altivec_vminsh(__a, __b);
   5774 }
   5775 
   5776 static __inline__ vector short __ATTRS_o_ai vec_min(vector bool short __a,
   5777                                                     vector short __b) {
   5778   return __builtin_altivec_vminsh((vector short)__a, __b);
   5779 }
   5780 
   5781 static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
   5782                                                     vector bool short __b) {
   5783   return __builtin_altivec_vminsh(__a, (vector short)__b);
   5784 }
   5785 
   5786 static __inline__ vector unsigned short __ATTRS_o_ai
   5787 vec_min(vector unsigned short __a, vector unsigned short __b) {
   5788   return __builtin_altivec_vminuh(__a, __b);
   5789 }
   5790 
   5791 static __inline__ vector unsigned short __ATTRS_o_ai
   5792 vec_min(vector bool short __a, vector unsigned short __b) {
   5793   return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
   5794 }
   5795 
   5796 static __inline__ vector unsigned short __ATTRS_o_ai
   5797 vec_min(vector unsigned short __a, vector bool short __b) {
   5798   return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
   5799 }
   5800 
   5801 static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
   5802                                                   vector int __b) {
   5803   return __builtin_altivec_vminsw(__a, __b);
   5804 }
   5805 
   5806 static __inline__ vector int __ATTRS_o_ai vec_min(vector bool int __a,
   5807                                                   vector int __b) {
   5808   return __builtin_altivec_vminsw((vector int)__a, __b);
   5809 }
   5810 
   5811 static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
   5812                                                   vector bool int __b) {
   5813   return __builtin_altivec_vminsw(__a, (vector int)__b);
   5814 }
   5815 
   5816 static __inline__ vector unsigned int __ATTRS_o_ai
   5817 vec_min(vector unsigned int __a, vector unsigned int __b) {
   5818   return __builtin_altivec_vminuw(__a, __b);
   5819 }
   5820 
   5821 static __inline__ vector unsigned int __ATTRS_o_ai
   5822 vec_min(vector bool int __a, vector unsigned int __b) {
   5823   return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
   5824 }
   5825 
   5826 static __inline__ vector unsigned int __ATTRS_o_ai
   5827 vec_min(vector unsigned int __a, vector bool int __b) {
   5828   return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
   5829 }
   5830 
   5831 #ifdef __POWER8_VECTOR__
   5832 static __inline__ vector signed long long __ATTRS_o_ai
   5833 vec_min(vector signed long long __a, vector signed long long __b) {
   5834   return __builtin_altivec_vminsd(__a, __b);
   5835 }
   5836 
   5837 static __inline__ vector signed long long __ATTRS_o_ai
   5838 vec_min(vector bool long long __a, vector signed long long __b) {
   5839   return __builtin_altivec_vminsd((vector signed long long)__a, __b);
   5840 }
   5841 
   5842 static __inline__ vector signed long long __ATTRS_o_ai
   5843 vec_min(vector signed long long __a, vector bool long long __b) {
   5844   return __builtin_altivec_vminsd(__a, (vector signed long long)__b);
   5845 }
   5846 
   5847 static __inline__ vector unsigned long long __ATTRS_o_ai
   5848 vec_min(vector unsigned long long __a, vector unsigned long long __b) {
   5849   return __builtin_altivec_vminud(__a, __b);
   5850 }
   5851 
   5852 static __inline__ vector unsigned long long __ATTRS_o_ai
   5853 vec_min(vector bool long long __a, vector unsigned long long __b) {
   5854   return __builtin_altivec_vminud((vector unsigned long long)__a, __b);
   5855 }
   5856 
   5857 static __inline__ vector unsigned long long __ATTRS_o_ai
   5858 vec_min(vector unsigned long long __a, vector bool long long __b) {
   5859   return __builtin_altivec_vminud(__a, (vector unsigned long long)__b);
   5860 }
   5861 #endif
   5862 
   5863 static __inline__ vector float __ATTRS_o_ai vec_min(vector float __a,
   5864                                                     vector float __b) {
   5865 #ifdef __VSX__
   5866   return __builtin_vsx_xvminsp(__a, __b);
   5867 #else
   5868   return __builtin_altivec_vminfp(__a, __b);
   5869 #endif
   5870 }
   5871 
   5872 #ifdef __VSX__
   5873 static __inline__ vector double __ATTRS_o_ai vec_min(vector double __a,
   5874                                                      vector double __b) {
   5875   return __builtin_vsx_xvmindp(__a, __b);
   5876 }
   5877 #endif
   5878 
   5879 /* vec_vminsb */
   5880 
   5881 static __inline__ vector signed char __ATTRS_o_ai
   5882 vec_vminsb(vector signed char __a, vector signed char __b) {
   5883   return __builtin_altivec_vminsb(__a, __b);
   5884 }
   5885 
   5886 static __inline__ vector signed char __ATTRS_o_ai
   5887 vec_vminsb(vector bool char __a, vector signed char __b) {
   5888   return __builtin_altivec_vminsb((vector signed char)__a, __b);
   5889 }
   5890 
   5891 static __inline__ vector signed char __ATTRS_o_ai
   5892 vec_vminsb(vector signed char __a, vector bool char __b) {
   5893   return __builtin_altivec_vminsb(__a, (vector signed char)__b);
   5894 }
   5895 
   5896 /* vec_vminub */
   5897 
   5898 static __inline__ vector unsigned char __ATTRS_o_ai
   5899 vec_vminub(vector unsigned char __a, vector unsigned char __b) {
   5900   return __builtin_altivec_vminub(__a, __b);
   5901 }
   5902 
   5903 static __inline__ vector unsigned char __ATTRS_o_ai
   5904 vec_vminub(vector bool char __a, vector unsigned char __b) {
   5905   return __builtin_altivec_vminub((vector unsigned char)__a, __b);
   5906 }
   5907 
   5908 static __inline__ vector unsigned char __ATTRS_o_ai
   5909 vec_vminub(vector unsigned char __a, vector bool char __b) {
   5910   return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
   5911 }
   5912 
   5913 /* vec_vminsh */
   5914 
   5915 static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
   5916                                                        vector short __b) {
   5917   return __builtin_altivec_vminsh(__a, __b);
   5918 }
   5919 
   5920 static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector bool short __a,
   5921                                                        vector short __b) {
   5922   return __builtin_altivec_vminsh((vector short)__a, __b);
   5923 }
   5924 
   5925 static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
   5926                                                        vector bool short __b) {
   5927   return __builtin_altivec_vminsh(__a, (vector short)__b);
   5928 }
   5929 
   5930 /* vec_vminuh */
   5931 
   5932 static __inline__ vector unsigned short __ATTRS_o_ai
   5933 vec_vminuh(vector unsigned short __a, vector unsigned short __b) {
   5934   return __builtin_altivec_vminuh(__a, __b);
   5935 }
   5936 
   5937 static __inline__ vector unsigned short __ATTRS_o_ai
   5938 vec_vminuh(vector bool short __a, vector unsigned short __b) {
   5939   return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
   5940 }
   5941 
   5942 static __inline__ vector unsigned short __ATTRS_o_ai
   5943 vec_vminuh(vector unsigned short __a, vector bool short __b) {
   5944   return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
   5945 }
   5946 
   5947 /* vec_vminsw */
   5948 
   5949 static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
   5950                                                      vector int __b) {
   5951   return __builtin_altivec_vminsw(__a, __b);
   5952 }
   5953 
   5954 static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector bool int __a,
   5955                                                      vector int __b) {
   5956   return __builtin_altivec_vminsw((vector int)__a, __b);
   5957 }
   5958 
   5959 static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
   5960                                                      vector bool int __b) {
   5961   return __builtin_altivec_vminsw(__a, (vector int)__b);
   5962 }
   5963 
   5964 /* vec_vminuw */
   5965 
   5966 static __inline__ vector unsigned int __ATTRS_o_ai
   5967 vec_vminuw(vector unsigned int __a, vector unsigned int __b) {
   5968   return __builtin_altivec_vminuw(__a, __b);
   5969 }
   5970 
   5971 static __inline__ vector unsigned int __ATTRS_o_ai
   5972 vec_vminuw(vector bool int __a, vector unsigned int __b) {
   5973   return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
   5974 }
   5975 
   5976 static __inline__ vector unsigned int __ATTRS_o_ai
   5977 vec_vminuw(vector unsigned int __a, vector bool int __b) {
   5978   return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
   5979 }
   5980 
   5981 /* vec_vminfp */
   5982 
   5983 static __inline__ vector float __attribute__((__always_inline__))
   5984 vec_vminfp(vector float __a, vector float __b) {
   5985 #ifdef __VSX__
   5986   return __builtin_vsx_xvminsp(__a, __b);
   5987 #else
   5988   return __builtin_altivec_vminfp(__a, __b);
   5989 #endif
   5990 }
   5991 
   5992 /* vec_mladd */
   5993 
   5994 #define __builtin_altivec_vmladduhm vec_mladd
   5995 
   5996 static __inline__ vector short __ATTRS_o_ai vec_mladd(vector short __a,
   5997                                                       vector short __b,
   5998                                                       vector short __c) {
   5999   return __a * __b + __c;
   6000 }
   6001 
   6002 static __inline__ vector short __ATTRS_o_ai vec_mladd(
   6003     vector short __a, vector unsigned short __b, vector unsigned short __c) {
   6004   return __a * (vector short)__b + (vector short)__c;
   6005 }
   6006 
   6007 static __inline__ vector short __ATTRS_o_ai vec_mladd(vector unsigned short __a,
   6008                                                       vector short __b,
   6009                                                       vector short __c) {
   6010   return (vector short)__a * __b + __c;
   6011 }
   6012 
   6013 static __inline__ vector unsigned short __ATTRS_o_ai
   6014 vec_mladd(vector unsigned short __a, vector unsigned short __b,
   6015           vector unsigned short __c) {
   6016   return __a * __b + __c;
   6017 }
   6018 
   6019 /* vec_vmladduhm */
   6020 
   6021 static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(vector short __a,
   6022                                                           vector short __b,
   6023                                                           vector short __c) {
   6024   return __a * __b + __c;
   6025 }
   6026 
   6027 static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(
   6028     vector short __a, vector unsigned short __b, vector unsigned short __c) {
   6029   return __a * (vector short)__b + (vector short)__c;
   6030 }
   6031 
   6032 static __inline__ vector short __ATTRS_o_ai
   6033 vec_vmladduhm(vector unsigned short __a, vector short __b, vector short __c) {
   6034   return (vector short)__a * __b + __c;
   6035 }
   6036 
   6037 static __inline__ vector unsigned short __ATTRS_o_ai
   6038 vec_vmladduhm(vector unsigned short __a, vector unsigned short __b,
   6039               vector unsigned short __c) {
   6040   return __a * __b + __c;
   6041 }
   6042 
   6043 /* vec_mradds */
   6044 
   6045 static __inline__ vector short __attribute__((__always_inline__))
   6046 vec_mradds(vector short __a, vector short __b, vector short __c) {
   6047   return __builtin_altivec_vmhraddshs(__a, __b, __c);
   6048 }
   6049 
   6050 /* vec_vmhraddshs */
   6051 
   6052 static __inline__ vector short __attribute__((__always_inline__))
   6053 vec_vmhraddshs(vector short __a, vector short __b, vector short __c) {
   6054   return __builtin_altivec_vmhraddshs(__a, __b, __c);
   6055 }
   6056 
   6057 /* vec_msum */
   6058 
   6059 static __inline__ vector int __ATTRS_o_ai vec_msum(vector signed char __a,
   6060                                                    vector unsigned char __b,
   6061                                                    vector int __c) {
   6062   return __builtin_altivec_vmsummbm(__a, __b, __c);
   6063 }
   6064 
   6065 static __inline__ vector unsigned int __ATTRS_o_ai
   6066 vec_msum(vector unsigned char __a, vector unsigned char __b,
   6067          vector unsigned int __c) {
   6068   return __builtin_altivec_vmsumubm(__a, __b, __c);
   6069 }
   6070 
   6071 static __inline__ vector int __ATTRS_o_ai vec_msum(vector short __a,
   6072                                                    vector short __b,
   6073                                                    vector int __c) {
   6074   return __builtin_altivec_vmsumshm(__a, __b, __c);
   6075 }
   6076 
   6077 static __inline__ vector unsigned int __ATTRS_o_ai
   6078 vec_msum(vector unsigned short __a, vector unsigned short __b,
   6079          vector unsigned int __c) {
   6080   return __builtin_altivec_vmsumuhm(__a, __b, __c);
   6081 }
   6082 
   6083 /* vec_msumc */
   6084 
   6085 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   6086 static __inline__ vector unsigned __int128 __ATTRS_o_ai
   6087 vec_msumc(vector unsigned long long __a, vector unsigned long long __b,
   6088           vector unsigned __int128 __c) {
   6089   return __builtin_altivec_vmsumcud(__a, __b, __c);
   6090 }
   6091 #endif
   6092 
   6093 /* vec_vmsummbm */
   6094 
   6095 static __inline__ vector int __attribute__((__always_inline__))
   6096 vec_vmsummbm(vector signed char __a, vector unsigned char __b, vector int __c) {
   6097   return __builtin_altivec_vmsummbm(__a, __b, __c);
   6098 }
   6099 
   6100 /* vec_vmsumubm */
   6101 
   6102 static __inline__ vector unsigned int __attribute__((__always_inline__))
   6103 vec_vmsumubm(vector unsigned char __a, vector unsigned char __b,
   6104              vector unsigned int __c) {
   6105   return __builtin_altivec_vmsumubm(__a, __b, __c);
   6106 }
   6107 
   6108 /* vec_vmsumshm */
   6109 
   6110 static __inline__ vector int __attribute__((__always_inline__))
   6111 vec_vmsumshm(vector short __a, vector short __b, vector int __c) {
   6112   return __builtin_altivec_vmsumshm(__a, __b, __c);
   6113 }
   6114 
   6115 /* vec_vmsumuhm */
   6116 
   6117 static __inline__ vector unsigned int __attribute__((__always_inline__))
   6118 vec_vmsumuhm(vector unsigned short __a, vector unsigned short __b,
   6119              vector unsigned int __c) {
   6120   return __builtin_altivec_vmsumuhm(__a, __b, __c);
   6121 }
   6122 
   6123 /* vec_msums */
   6124 
   6125 static __inline__ vector int __ATTRS_o_ai vec_msums(vector short __a,
   6126                                                     vector short __b,
   6127                                                     vector int __c) {
   6128   return __builtin_altivec_vmsumshs(__a, __b, __c);
   6129 }
   6130 
   6131 static __inline__ vector unsigned int __ATTRS_o_ai
   6132 vec_msums(vector unsigned short __a, vector unsigned short __b,
   6133           vector unsigned int __c) {
   6134   return __builtin_altivec_vmsumuhs(__a, __b, __c);
   6135 }
   6136 
   6137 /* vec_vmsumshs */
   6138 
   6139 static __inline__ vector int __attribute__((__always_inline__))
   6140 vec_vmsumshs(vector short __a, vector short __b, vector int __c) {
   6141   return __builtin_altivec_vmsumshs(__a, __b, __c);
   6142 }
   6143 
   6144 /* vec_vmsumuhs */
   6145 
   6146 static __inline__ vector unsigned int __attribute__((__always_inline__))
   6147 vec_vmsumuhs(vector unsigned short __a, vector unsigned short __b,
   6148              vector unsigned int __c) {
   6149   return __builtin_altivec_vmsumuhs(__a, __b, __c);
   6150 }
   6151 
   6152 /* vec_mtvscr */
   6153 
   6154 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector signed char __a) {
   6155   __builtin_altivec_mtvscr((vector int)__a);
   6156 }
   6157 
   6158 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned char __a) {
   6159   __builtin_altivec_mtvscr((vector int)__a);
   6160 }
   6161 
   6162 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool char __a) {
   6163   __builtin_altivec_mtvscr((vector int)__a);
   6164 }
   6165 
   6166 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector short __a) {
   6167   __builtin_altivec_mtvscr((vector int)__a);
   6168 }
   6169 
   6170 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned short __a) {
   6171   __builtin_altivec_mtvscr((vector int)__a);
   6172 }
   6173 
   6174 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool short __a) {
   6175   __builtin_altivec_mtvscr((vector int)__a);
   6176 }
   6177 
   6178 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector pixel __a) {
   6179   __builtin_altivec_mtvscr((vector int)__a);
   6180 }
   6181 
   6182 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector int __a) {
   6183   __builtin_altivec_mtvscr((vector int)__a);
   6184 }
   6185 
   6186 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned int __a) {
   6187   __builtin_altivec_mtvscr((vector int)__a);
   6188 }
   6189 
   6190 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool int __a) {
   6191   __builtin_altivec_mtvscr((vector int)__a);
   6192 }
   6193 
   6194 static __inline__ void __ATTRS_o_ai vec_mtvscr(vector float __a) {
   6195   __builtin_altivec_mtvscr((vector int)__a);
   6196 }
   6197 
   6198 /* vec_mul */
   6199 
   6200 /* Integer vector multiplication will involve multiplication of the odd/even
   6201    elements separately, then truncating the results and moving to the
   6202    result vector.
   6203 */
   6204 static __inline__ vector signed char __ATTRS_o_ai
   6205 vec_mul(vector signed char __a, vector signed char __b) {
   6206   return __a * __b;
   6207 }
   6208 
   6209 static __inline__ vector unsigned char __ATTRS_o_ai
   6210 vec_mul(vector unsigned char __a, vector unsigned char __b) {
   6211   return __a * __b;
   6212 }
   6213 
   6214 static __inline__ vector signed short __ATTRS_o_ai
   6215 vec_mul(vector signed short __a, vector signed short __b) {
   6216   return __a * __b;
   6217 }
   6218 
   6219 static __inline__ vector unsigned short __ATTRS_o_ai
   6220 vec_mul(vector unsigned short __a, vector unsigned short __b) {
   6221   return __a * __b;
   6222 }
   6223 
   6224 static __inline__ vector signed int __ATTRS_o_ai
   6225 vec_mul(vector signed int __a, vector signed int __b) {
   6226   return __a * __b;
   6227 }
   6228 
   6229 static __inline__ vector unsigned int __ATTRS_o_ai
   6230 vec_mul(vector unsigned int __a, vector unsigned int __b) {
   6231   return __a * __b;
   6232 }
   6233 
   6234 #ifdef __VSX__
   6235 static __inline__ vector signed long long __ATTRS_o_ai
   6236 vec_mul(vector signed long long __a, vector signed long long __b) {
   6237   return __a * __b;
   6238 }
   6239 
   6240 static __inline__ vector unsigned long long __ATTRS_o_ai
   6241 vec_mul(vector unsigned long long __a, vector unsigned long long __b) {
   6242   return __a * __b;
   6243 }
   6244 #endif
   6245 
   6246 static __inline__ vector float __ATTRS_o_ai vec_mul(vector float __a,
   6247                                                     vector float __b) {
   6248   return __a * __b;
   6249 }
   6250 
   6251 #ifdef __VSX__
   6252 static __inline__ vector double __ATTRS_o_ai vec_mul(vector double __a,
   6253                                                      vector double __b) {
   6254   return __a * __b;
   6255 }
   6256 #endif
   6257 
   6258 /* The vmulos* and vmules* instructions have a big endian bias, so
   6259    we must reverse the meaning of "even" and "odd" for little endian.  */
   6260 
   6261 /* vec_mule */
   6262 
   6263 static __inline__ vector short __ATTRS_o_ai vec_mule(vector signed char __a,
   6264                                                      vector signed char __b) {
   6265 #ifdef __LITTLE_ENDIAN__
   6266   return __builtin_altivec_vmulosb(__a, __b);
   6267 #else
   6268   return __builtin_altivec_vmulesb(__a, __b);
   6269 #endif
   6270 }
   6271 
   6272 static __inline__ vector unsigned short __ATTRS_o_ai
   6273 vec_mule(vector unsigned char __a, vector unsigned char __b) {
   6274 #ifdef __LITTLE_ENDIAN__
   6275   return __builtin_altivec_vmuloub(__a, __b);
   6276 #else
   6277   return __builtin_altivec_vmuleub(__a, __b);
   6278 #endif
   6279 }
   6280 
   6281 static __inline__ vector int __ATTRS_o_ai vec_mule(vector short __a,
   6282                                                    vector short __b) {
   6283 #ifdef __LITTLE_ENDIAN__
   6284   return __builtin_altivec_vmulosh(__a, __b);
   6285 #else
   6286   return __builtin_altivec_vmulesh(__a, __b);
   6287 #endif
   6288 }
   6289 
   6290 static __inline__ vector unsigned int __ATTRS_o_ai
   6291 vec_mule(vector unsigned short __a, vector unsigned short __b) {
   6292 #ifdef __LITTLE_ENDIAN__
   6293   return __builtin_altivec_vmulouh(__a, __b);
   6294 #else
   6295   return __builtin_altivec_vmuleuh(__a, __b);
   6296 #endif
   6297 }
   6298 
   6299 #ifdef __POWER8_VECTOR__
   6300 static __inline__ vector signed long long __ATTRS_o_ai
   6301 vec_mule(vector signed int __a, vector signed int __b) {
   6302 #ifdef __LITTLE_ENDIAN__
   6303   return __builtin_altivec_vmulosw(__a, __b);
   6304 #else
   6305   return __builtin_altivec_vmulesw(__a, __b);
   6306 #endif
   6307 }
   6308 
   6309 static __inline__ vector unsigned long long __ATTRS_o_ai
   6310 vec_mule(vector unsigned int __a, vector unsigned int __b) {
   6311 #ifdef __LITTLE_ENDIAN__
   6312   return __builtin_altivec_vmulouw(__a, __b);
   6313 #else
   6314   return __builtin_altivec_vmuleuw(__a, __b);
   6315 #endif
   6316 }
   6317 #endif
   6318 
   6319 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   6320 static __inline__ vector signed __int128 __ATTRS_o_ai
   6321 vec_mule(vector signed long long __a, vector signed long long __b) {
   6322 #ifdef __LITTLE_ENDIAN__
   6323   return __builtin_altivec_vmulosd(__a, __b);
   6324 #else
   6325   return __builtin_altivec_vmulesd(__a, __b);
   6326 #endif
   6327 }
   6328 
   6329 static __inline__ vector unsigned __int128 __ATTRS_o_ai
   6330 vec_mule(vector unsigned long long __a, vector unsigned long long __b) {
   6331 #ifdef __LITTLE_ENDIAN__
   6332   return __builtin_altivec_vmuloud(__a, __b);
   6333 #else
   6334   return __builtin_altivec_vmuleud(__a, __b);
   6335 #endif
   6336 }
   6337 #endif
   6338 
   6339 /* vec_vmulesb */
   6340 
   6341 static __inline__ vector short __attribute__((__always_inline__))
   6342 vec_vmulesb(vector signed char __a, vector signed char __b) {
   6343 #ifdef __LITTLE_ENDIAN__
   6344   return __builtin_altivec_vmulosb(__a, __b);
   6345 #else
   6346   return __builtin_altivec_vmulesb(__a, __b);
   6347 #endif
   6348 }
   6349 
   6350 /* vec_vmuleub */
   6351 
   6352 static __inline__ vector unsigned short __attribute__((__always_inline__))
   6353 vec_vmuleub(vector unsigned char __a, vector unsigned char __b) {
   6354 #ifdef __LITTLE_ENDIAN__
   6355   return __builtin_altivec_vmuloub(__a, __b);
   6356 #else
   6357   return __builtin_altivec_vmuleub(__a, __b);
   6358 #endif
   6359 }
   6360 
   6361 /* vec_vmulesh */
   6362 
   6363 static __inline__ vector int __attribute__((__always_inline__))
   6364 vec_vmulesh(vector short __a, vector short __b) {
   6365 #ifdef __LITTLE_ENDIAN__
   6366   return __builtin_altivec_vmulosh(__a, __b);
   6367 #else
   6368   return __builtin_altivec_vmulesh(__a, __b);
   6369 #endif
   6370 }
   6371 
   6372 /* vec_vmuleuh */
   6373 
   6374 static __inline__ vector unsigned int __attribute__((__always_inline__))
   6375 vec_vmuleuh(vector unsigned short __a, vector unsigned short __b) {
   6376 #ifdef __LITTLE_ENDIAN__
   6377   return __builtin_altivec_vmulouh(__a, __b);
   6378 #else
   6379   return __builtin_altivec_vmuleuh(__a, __b);
   6380 #endif
   6381 }
   6382 
   6383 /* vec_mulh */
   6384 
   6385 #ifdef __POWER10_VECTOR__
   6386 static __inline__ vector signed int __ATTRS_o_ai
   6387 vec_mulh(vector signed int __a, vector signed int __b) {
   6388   return __builtin_altivec_vmulhsw(__a, __b);
   6389 }
   6390 
   6391 static __inline__ vector unsigned int __ATTRS_o_ai
   6392 vec_mulh(vector unsigned int __a, vector unsigned int __b) {
   6393   return __builtin_altivec_vmulhuw(__a, __b);
   6394 }
   6395 
   6396 static __inline__ vector signed long long __ATTRS_o_ai
   6397 vec_mulh(vector signed long long __a, vector signed long long __b) {
   6398   return __builtin_altivec_vmulhsd(__a, __b);
   6399 }
   6400 
   6401 static __inline__ vector unsigned long long __ATTRS_o_ai
   6402 vec_mulh(vector unsigned long long __a, vector unsigned long long __b) {
   6403   return __builtin_altivec_vmulhud(__a, __b);
   6404 }
   6405 #endif
   6406 
   6407 /* vec_mulo */
   6408 
   6409 static __inline__ vector short __ATTRS_o_ai vec_mulo(vector signed char __a,
   6410                                                      vector signed char __b) {
   6411 #ifdef __LITTLE_ENDIAN__
   6412   return __builtin_altivec_vmulesb(__a, __b);
   6413 #else
   6414   return __builtin_altivec_vmulosb(__a, __b);
   6415 #endif
   6416 }
   6417 
   6418 static __inline__ vector unsigned short __ATTRS_o_ai
   6419 vec_mulo(vector unsigned char __a, vector unsigned char __b) {
   6420 #ifdef __LITTLE_ENDIAN__
   6421   return __builtin_altivec_vmuleub(__a, __b);
   6422 #else
   6423   return __builtin_altivec_vmuloub(__a, __b);
   6424 #endif
   6425 }
   6426 
   6427 static __inline__ vector int __ATTRS_o_ai vec_mulo(vector short __a,
   6428                                                    vector short __b) {
   6429 #ifdef __LITTLE_ENDIAN__
   6430   return __builtin_altivec_vmulesh(__a, __b);
   6431 #else
   6432   return __builtin_altivec_vmulosh(__a, __b);
   6433 #endif
   6434 }
   6435 
   6436 static __inline__ vector unsigned int __ATTRS_o_ai
   6437 vec_mulo(vector unsigned short __a, vector unsigned short __b) {
   6438 #ifdef __LITTLE_ENDIAN__
   6439   return __builtin_altivec_vmuleuh(__a, __b);
   6440 #else
   6441   return __builtin_altivec_vmulouh(__a, __b);
   6442 #endif
   6443 }
   6444 
   6445 #ifdef __POWER8_VECTOR__
   6446 static __inline__ vector signed long long __ATTRS_o_ai
   6447 vec_mulo(vector signed int __a, vector signed int __b) {
   6448 #ifdef __LITTLE_ENDIAN__
   6449   return __builtin_altivec_vmulesw(__a, __b);
   6450 #else
   6451   return __builtin_altivec_vmulosw(__a, __b);
   6452 #endif
   6453 }
   6454 
   6455 static __inline__ vector unsigned long long __ATTRS_o_ai
   6456 vec_mulo(vector unsigned int __a, vector unsigned int __b) {
   6457 #ifdef __LITTLE_ENDIAN__
   6458   return __builtin_altivec_vmuleuw(__a, __b);
   6459 #else
   6460   return __builtin_altivec_vmulouw(__a, __b);
   6461 #endif
   6462 }
   6463 #endif
   6464 
   6465 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   6466 static __inline__ vector signed __int128 __ATTRS_o_ai
   6467 vec_mulo(vector signed long long __a, vector signed long long __b) {
   6468 #ifdef __LITTLE_ENDIAN__
   6469   return __builtin_altivec_vmulesd(__a, __b);
   6470 #else
   6471   return __builtin_altivec_vmulosd(__a, __b);
   6472 #endif
   6473 }
   6474 
   6475 static __inline__ vector unsigned __int128 __ATTRS_o_ai
   6476 vec_mulo(vector unsigned long long __a, vector unsigned long long __b) {
   6477 #ifdef __LITTLE_ENDIAN__
   6478   return __builtin_altivec_vmuleud(__a, __b);
   6479 #else
   6480   return __builtin_altivec_vmuloud(__a, __b);
   6481 #endif
   6482 }
   6483 #endif
   6484 
   6485 /* vec_vmulosb */
   6486 
   6487 static __inline__ vector short __attribute__((__always_inline__))
   6488 vec_vmulosb(vector signed char __a, vector signed char __b) {
   6489 #ifdef __LITTLE_ENDIAN__
   6490   return __builtin_altivec_vmulesb(__a, __b);
   6491 #else
   6492   return __builtin_altivec_vmulosb(__a, __b);
   6493 #endif
   6494 }
   6495 
   6496 /* vec_vmuloub */
   6497 
   6498 static __inline__ vector unsigned short __attribute__((__always_inline__))
   6499 vec_vmuloub(vector unsigned char __a, vector unsigned char __b) {
   6500 #ifdef __LITTLE_ENDIAN__
   6501   return __builtin_altivec_vmuleub(__a, __b);
   6502 #else
   6503   return __builtin_altivec_vmuloub(__a, __b);
   6504 #endif
   6505 }
   6506 
   6507 /* vec_vmulosh */
   6508 
   6509 static __inline__ vector int __attribute__((__always_inline__))
   6510 vec_vmulosh(vector short __a, vector short __b) {
   6511 #ifdef __LITTLE_ENDIAN__
   6512   return __builtin_altivec_vmulesh(__a, __b);
   6513 #else
   6514   return __builtin_altivec_vmulosh(__a, __b);
   6515 #endif
   6516 }
   6517 
   6518 /* vec_vmulouh */
   6519 
   6520 static __inline__ vector unsigned int __attribute__((__always_inline__))
   6521 vec_vmulouh(vector unsigned short __a, vector unsigned short __b) {
   6522 #ifdef __LITTLE_ENDIAN__
   6523   return __builtin_altivec_vmuleuh(__a, __b);
   6524 #else
   6525   return __builtin_altivec_vmulouh(__a, __b);
   6526 #endif
   6527 }
   6528 
   6529 /*  vec_nand */
   6530 
   6531 #ifdef __POWER8_VECTOR__
   6532 static __inline__ vector signed char __ATTRS_o_ai
   6533 vec_nand(vector signed char __a, vector signed char __b) {
   6534   return ~(__a & __b);
   6535 }
   6536 
   6537 static __inline__ vector signed char __ATTRS_o_ai
   6538 vec_nand(vector signed char __a, vector bool char __b) {
   6539   return ~(__a & (vector signed char)__b);
   6540 }
   6541 
   6542 static __inline__ vector signed char __ATTRS_o_ai
   6543 vec_nand(vector bool char __a, vector signed char __b) {
   6544   return (vector signed char)~(__a & (vector bool char)__b);
   6545 }
   6546 
   6547 static __inline__ vector unsigned char __ATTRS_o_ai
   6548 vec_nand(vector unsigned char __a, vector unsigned char __b) {
   6549   return ~(__a & __b);
   6550 }
   6551 
   6552 static __inline__ vector unsigned char __ATTRS_o_ai
   6553 vec_nand(vector unsigned char __a, vector bool char __b) {
   6554   return ~(__a & (vector unsigned char)__b);
   6555 }
   6556 
   6557 static __inline__ vector unsigned char __ATTRS_o_ai
   6558 vec_nand(vector bool char __a, vector unsigned char __b) {
   6559   return (vector unsigned char)~(__a & (vector bool char)__b);
   6560 }
   6561 
   6562 static __inline__ vector bool char __ATTRS_o_ai vec_nand(vector bool char __a,
   6563                                                          vector bool char __b) {
   6564   return ~(__a & __b);
   6565 }
   6566 
   6567 static __inline__ vector signed short __ATTRS_o_ai
   6568 vec_nand(vector signed short __a, vector signed short __b) {
   6569   return ~(__a & __b);
   6570 }
   6571 
   6572 static __inline__ vector signed short __ATTRS_o_ai
   6573 vec_nand(vector signed short __a, vector bool short __b) {
   6574   return ~(__a & (vector signed short)__b);
   6575 }
   6576 
   6577 static __inline__ vector signed short __ATTRS_o_ai
   6578 vec_nand(vector bool short __a, vector signed short __b) {
   6579   return (vector signed short)~(__a & (vector bool short)__b);
   6580 }
   6581 
   6582 static __inline__ vector unsigned short __ATTRS_o_ai
   6583 vec_nand(vector unsigned short __a, vector unsigned short __b) {
   6584   return ~(__a & __b);
   6585 }
   6586 
   6587 static __inline__ vector unsigned short __ATTRS_o_ai
   6588 vec_nand(vector unsigned short __a, vector bool short __b) {
   6589   return ~(__a & (vector unsigned short)__b);
   6590 }
   6591 
   6592 static __inline__ vector bool short __ATTRS_o_ai
   6593 vec_nand(vector bool short __a, vector bool short __b) {
   6594   return ~(__a & __b);
   6595 }
   6596 
   6597 static __inline__ vector signed int __ATTRS_o_ai
   6598 vec_nand(vector signed int __a, vector signed int __b) {
   6599   return ~(__a & __b);
   6600 }
   6601 
   6602 static __inline__ vector signed int __ATTRS_o_ai vec_nand(vector signed int __a,
   6603                                                           vector bool int __b) {
   6604   return ~(__a & (vector signed int)__b);
   6605 }
   6606 
   6607 static __inline__ vector signed int __ATTRS_o_ai
   6608 vec_nand(vector bool int __a, vector signed int __b) {
   6609   return (vector signed int)~(__a & (vector bool int)__b);
   6610 }
   6611 
   6612 static __inline__ vector unsigned int __ATTRS_o_ai
   6613 vec_nand(vector unsigned int __a, vector unsigned int __b) {
   6614   return ~(__a & __b);
   6615 }
   6616 
   6617 static __inline__ vector unsigned int __ATTRS_o_ai
   6618 vec_nand(vector unsigned int __a, vector bool int __b) {
   6619   return ~(__a & (vector unsigned int)__b);
   6620 }
   6621 
   6622 static __inline__ vector unsigned int __ATTRS_o_ai
   6623 vec_nand(vector bool int __a, vector unsigned int __b) {
   6624   return (vector unsigned int)~(__a & (vector bool int)__b);
   6625 }
   6626 
   6627 static __inline__ vector bool int __ATTRS_o_ai vec_nand(vector bool int __a,
   6628                                                         vector bool int __b) {
   6629   return ~(__a & __b);
   6630 }
   6631 
   6632 static __inline__ vector float __ATTRS_o_ai
   6633 vec_nand(vector float __a, vector float __b) {
   6634   return (vector float)(~((vector unsigned int)__a &
   6635                           (vector unsigned int)__b));
   6636 }
   6637 
   6638 static __inline__ vector signed long long __ATTRS_o_ai
   6639 vec_nand(vector signed long long __a, vector signed long long __b) {
   6640   return ~(__a & __b);
   6641 }
   6642 
   6643 static __inline__ vector signed long long __ATTRS_o_ai
   6644 vec_nand(vector signed long long __a, vector bool long long __b) {
   6645   return ~(__a & (vector signed long long)__b);
   6646 }
   6647 
   6648 static __inline__ vector signed long long __ATTRS_o_ai
   6649 vec_nand(vector bool long long __a, vector signed long long __b) {
   6650   return (vector signed long long)~(__a & (vector bool long long)__b);
   6651 }
   6652 
   6653 static __inline__ vector unsigned long long __ATTRS_o_ai
   6654 vec_nand(vector unsigned long long __a, vector unsigned long long __b) {
   6655   return ~(__a & __b);
   6656 }
   6657 
   6658 static __inline__ vector unsigned long long __ATTRS_o_ai
   6659 vec_nand(vector unsigned long long __a, vector bool long long __b) {
   6660   return ~(__a & (vector unsigned long long)__b);
   6661 }
   6662 
   6663 static __inline__ vector unsigned long long __ATTRS_o_ai
   6664 vec_nand(vector bool long long __a, vector unsigned long long __b) {
   6665   return (vector unsigned long long)~(__a & (vector bool long long)__b);
   6666 }
   6667 
   6668 static __inline__ vector bool long long __ATTRS_o_ai
   6669 vec_nand(vector bool long long __a, vector bool long long __b) {
   6670   return ~(__a & __b);
   6671 }
   6672 
   6673 static __inline__ vector double __ATTRS_o_ai
   6674 vec_nand(vector double __a, vector double __b) {
   6675   return (vector double)(~((vector unsigned long long)__a &
   6676                            (vector unsigned long long)__b));
   6677 }
   6678 
   6679 #endif
   6680 
   6681 /* vec_nmadd */
   6682 
   6683 #ifdef __VSX__
   6684 static __inline__ vector float __ATTRS_o_ai vec_nmadd(vector float __a,
   6685                                                       vector float __b,
   6686                                                       vector float __c) {
   6687   return __builtin_vsx_xvnmaddasp(__a, __b, __c);
   6688 }
   6689 
   6690 static __inline__ vector double __ATTRS_o_ai vec_nmadd(vector double __a,
   6691                                                        vector double __b,
   6692                                                        vector double __c) {
   6693   return __builtin_vsx_xvnmaddadp(__a, __b, __c);
   6694 }
   6695 #endif
   6696 
   6697 /* vec_nmsub */
   6698 
   6699 static __inline__ vector float __ATTRS_o_ai vec_nmsub(vector float __a,
   6700                                                       vector float __b,
   6701                                                       vector float __c) {
   6702 #ifdef __VSX__
   6703   return __builtin_vsx_xvnmsubasp(__a, __b, __c);
   6704 #else
   6705   return __builtin_altivec_vnmsubfp(__a, __b, __c);
   6706 #endif
   6707 }
   6708 
   6709 #ifdef __VSX__
   6710 static __inline__ vector double __ATTRS_o_ai vec_nmsub(vector double __a,
   6711                                                        vector double __b,
   6712                                                        vector double __c) {
   6713   return __builtin_vsx_xvnmsubadp(__a, __b, __c);
   6714 }
   6715 #endif
   6716 
   6717 /* vec_vnmsubfp */
   6718 
   6719 static __inline__ vector float __attribute__((__always_inline__))
   6720 vec_vnmsubfp(vector float __a, vector float __b, vector float __c) {
   6721   return __builtin_altivec_vnmsubfp(__a, __b, __c);
   6722 }
   6723 
   6724 /* vec_nor */
   6725 
   6726 #define __builtin_altivec_vnor vec_nor
   6727 
   6728 static __inline__ vector signed char __ATTRS_o_ai
   6729 vec_nor(vector signed char __a, vector signed char __b) {
   6730   return ~(__a | __b);
   6731 }
   6732 
   6733 static __inline__ vector unsigned char __ATTRS_o_ai
   6734 vec_nor(vector unsigned char __a, vector unsigned char __b) {
   6735   return ~(__a | __b);
   6736 }
   6737 
   6738 static __inline__ vector bool char __ATTRS_o_ai vec_nor(vector bool char __a,
   6739                                                         vector bool char __b) {
   6740   return ~(__a | __b);
   6741 }
   6742 
   6743 static __inline__ vector short __ATTRS_o_ai vec_nor(vector short __a,
   6744                                                     vector short __b) {
   6745   return ~(__a | __b);
   6746 }
   6747 
   6748 static __inline__ vector unsigned short __ATTRS_o_ai
   6749 vec_nor(vector unsigned short __a, vector unsigned short __b) {
   6750   return ~(__a | __b);
   6751 }
   6752 
   6753 static __inline__ vector bool short __ATTRS_o_ai
   6754 vec_nor(vector bool short __a, vector bool short __b) {
   6755   return ~(__a | __b);
   6756 }
   6757 
   6758 static __inline__ vector int __ATTRS_o_ai vec_nor(vector int __a,
   6759                                                   vector int __b) {
   6760   return ~(__a | __b);
   6761 }
   6762 
   6763 static __inline__ vector unsigned int __ATTRS_o_ai
   6764 vec_nor(vector unsigned int __a, vector unsigned int __b) {
   6765   return ~(__a | __b);
   6766 }
   6767 
   6768 static __inline__ vector bool int __ATTRS_o_ai vec_nor(vector bool int __a,
   6769                                                        vector bool int __b) {
   6770   return ~(__a | __b);
   6771 }
   6772 
   6773 static __inline__ vector float __ATTRS_o_ai vec_nor(vector float __a,
   6774                                                     vector float __b) {
   6775   vector unsigned int __res =
   6776       ~((vector unsigned int)__a | (vector unsigned int)__b);
   6777   return (vector float)__res;
   6778 }
   6779 
   6780 #ifdef __VSX__
   6781 static __inline__ vector double __ATTRS_o_ai vec_nor(vector double __a,
   6782                                                      vector double __b) {
   6783   vector unsigned long long __res =
   6784       ~((vector unsigned long long)__a | (vector unsigned long long)__b);
   6785   return (vector double)__res;
   6786 }
   6787 #endif
   6788 
   6789 /* vec_vnor */
   6790 
   6791 static __inline__ vector signed char __ATTRS_o_ai
   6792 vec_vnor(vector signed char __a, vector signed char __b) {
   6793   return ~(__a | __b);
   6794 }
   6795 
   6796 static __inline__ vector unsigned char __ATTRS_o_ai
   6797 vec_vnor(vector unsigned char __a, vector unsigned char __b) {
   6798   return ~(__a | __b);
   6799 }
   6800 
   6801 static __inline__ vector bool char __ATTRS_o_ai vec_vnor(vector bool char __a,
   6802                                                          vector bool char __b) {
   6803   return ~(__a | __b);
   6804 }
   6805 
   6806 static __inline__ vector short __ATTRS_o_ai vec_vnor(vector short __a,
   6807                                                      vector short __b) {
   6808   return ~(__a | __b);
   6809 }
   6810 
   6811 static __inline__ vector unsigned short __ATTRS_o_ai
   6812 vec_vnor(vector unsigned short __a, vector unsigned short __b) {
   6813   return ~(__a | __b);
   6814 }
   6815 
   6816 static __inline__ vector bool short __ATTRS_o_ai
   6817 vec_vnor(vector bool short __a, vector bool short __b) {
   6818   return ~(__a | __b);
   6819 }
   6820 
   6821 static __inline__ vector int __ATTRS_o_ai vec_vnor(vector int __a,
   6822                                                    vector int __b) {
   6823   return ~(__a | __b);
   6824 }
   6825 
   6826 static __inline__ vector unsigned int __ATTRS_o_ai
   6827 vec_vnor(vector unsigned int __a, vector unsigned int __b) {
   6828   return ~(__a | __b);
   6829 }
   6830 
   6831 static __inline__ vector bool int __ATTRS_o_ai vec_vnor(vector bool int __a,
   6832                                                         vector bool int __b) {
   6833   return ~(__a | __b);
   6834 }
   6835 
   6836 static __inline__ vector float __ATTRS_o_ai vec_vnor(vector float __a,
   6837                                                      vector float __b) {
   6838   vector unsigned int __res =
   6839       ~((vector unsigned int)__a | (vector unsigned int)__b);
   6840   return (vector float)__res;
   6841 }
   6842 
   6843 #ifdef __VSX__
   6844 static __inline__ vector signed long long __ATTRS_o_ai
   6845 vec_nor(vector signed long long __a, vector signed long long __b) {
   6846   return ~(__a | __b);
   6847 }
   6848 
   6849 static __inline__ vector unsigned long long __ATTRS_o_ai
   6850 vec_nor(vector unsigned long long __a, vector unsigned long long __b) {
   6851   return ~(__a | __b);
   6852 }
   6853 
   6854 static __inline__ vector bool long long __ATTRS_o_ai
   6855 vec_nor(vector bool long long __a, vector bool long long __b) {
   6856   return ~(__a | __b);
   6857 }
   6858 #endif
   6859 
   6860 /* vec_or */
   6861 
   6862 #define __builtin_altivec_vor vec_or
   6863 
   6864 static __inline__ vector signed char __ATTRS_o_ai
   6865 vec_or(vector signed char __a, vector signed char __b) {
   6866   return __a | __b;
   6867 }
   6868 
   6869 static __inline__ vector signed char __ATTRS_o_ai
   6870 vec_or(vector bool char __a, vector signed char __b) {
   6871   return (vector signed char)__a | __b;
   6872 }
   6873 
   6874 static __inline__ vector signed char __ATTRS_o_ai vec_or(vector signed char __a,
   6875                                                          vector bool char __b) {
   6876   return __a | (vector signed char)__b;
   6877 }
   6878 
   6879 static __inline__ vector unsigned char __ATTRS_o_ai
   6880 vec_or(vector unsigned char __a, vector unsigned char __b) {
   6881   return __a | __b;
   6882 }
   6883 
   6884 static __inline__ vector unsigned char __ATTRS_o_ai
   6885 vec_or(vector bool char __a, vector unsigned char __b) {
   6886   return (vector unsigned char)__a | __b;
   6887 }
   6888 
   6889 static __inline__ vector unsigned char __ATTRS_o_ai
   6890 vec_or(vector unsigned char __a, vector bool char __b) {
   6891   return __a | (vector unsigned char)__b;
   6892 }
   6893 
   6894 static __inline__ vector bool char __ATTRS_o_ai vec_or(vector bool char __a,
   6895                                                        vector bool char __b) {
   6896   return __a | __b;
   6897 }
   6898 
   6899 static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
   6900                                                    vector short __b) {
   6901   return __a | __b;
   6902 }
   6903 
   6904 static __inline__ vector short __ATTRS_o_ai vec_or(vector bool short __a,
   6905                                                    vector short __b) {
   6906   return (vector short)__a | __b;
   6907 }
   6908 
   6909 static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
   6910                                                    vector bool short __b) {
   6911   return __a | (vector short)__b;
   6912 }
   6913 
   6914 static __inline__ vector unsigned short __ATTRS_o_ai
   6915 vec_or(vector unsigned short __a, vector unsigned short __b) {
   6916   return __a | __b;
   6917 }
   6918 
   6919 static __inline__ vector unsigned short __ATTRS_o_ai
   6920 vec_or(vector bool short __a, vector unsigned short __b) {
   6921   return (vector unsigned short)__a | __b;
   6922 }
   6923 
   6924 static __inline__ vector unsigned short __ATTRS_o_ai
   6925 vec_or(vector unsigned short __a, vector bool short __b) {
   6926   return __a | (vector unsigned short)__b;
   6927 }
   6928 
   6929 static __inline__ vector bool short __ATTRS_o_ai vec_or(vector bool short __a,
   6930                                                         vector bool short __b) {
   6931   return __a | __b;
   6932 }
   6933 
   6934 static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
   6935                                                  vector int __b) {
   6936   return __a | __b;
   6937 }
   6938 
   6939 static __inline__ vector int __ATTRS_o_ai vec_or(vector bool int __a,
   6940                                                  vector int __b) {
   6941   return (vector int)__a | __b;
   6942 }
   6943 
   6944 static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
   6945                                                  vector bool int __b) {
   6946   return __a | (vector int)__b;
   6947 }
   6948 
   6949 static __inline__ vector unsigned int __ATTRS_o_ai
   6950 vec_or(vector unsigned int __a, vector unsigned int __b) {
   6951   return __a | __b;
   6952 }
   6953 
   6954 static __inline__ vector unsigned int __ATTRS_o_ai
   6955 vec_or(vector bool int __a, vector unsigned int __b) {
   6956   return (vector unsigned int)__a | __b;
   6957 }
   6958 
   6959 static __inline__ vector unsigned int __ATTRS_o_ai
   6960 vec_or(vector unsigned int __a, vector bool int __b) {
   6961   return __a | (vector unsigned int)__b;
   6962 }
   6963 
   6964 static __inline__ vector bool int __ATTRS_o_ai vec_or(vector bool int __a,
   6965                                                       vector bool int __b) {
   6966   return __a | __b;
   6967 }
   6968 
   6969 static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
   6970                                                    vector float __b) {
   6971   vector unsigned int __res =
   6972       (vector unsigned int)__a | (vector unsigned int)__b;
   6973   return (vector float)__res;
   6974 }
   6975 
   6976 static __inline__ vector float __ATTRS_o_ai vec_or(vector bool int __a,
   6977                                                    vector float __b) {
   6978   vector unsigned int __res =
   6979       (vector unsigned int)__a | (vector unsigned int)__b;
   6980   return (vector float)__res;
   6981 }
   6982 
   6983 static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
   6984                                                    vector bool int __b) {
   6985   vector unsigned int __res =
   6986       (vector unsigned int)__a | (vector unsigned int)__b;
   6987   return (vector float)__res;
   6988 }
   6989 
   6990 #ifdef __VSX__
   6991 static __inline__ vector double __ATTRS_o_ai vec_or(vector bool long long __a,
   6992                                                     vector double __b) {
   6993   return (vector double)((vector unsigned long long)__a |
   6994                          (vector unsigned long long)__b);
   6995 }
   6996 
   6997 static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,
   6998                                                     vector bool long long __b) {
   6999   return (vector double)((vector unsigned long long)__a |
   7000                          (vector unsigned long long)__b);
   7001 }
   7002 
   7003 static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,
   7004                                                     vector double __b) {
   7005   return (vector double)((vector unsigned long long)__a |
   7006                          (vector unsigned long long)__b);
   7007 }
   7008 
   7009 static __inline__ vector signed long long __ATTRS_o_ai
   7010 vec_or(vector signed long long __a, vector signed long long __b) {
   7011   return __a | __b;
   7012 }
   7013 
   7014 static __inline__ vector signed long long __ATTRS_o_ai
   7015 vec_or(vector bool long long __a, vector signed long long __b) {
   7016   return (vector signed long long)__a | __b;
   7017 }
   7018 
   7019 static __inline__ vector signed long long __ATTRS_o_ai
   7020 vec_or(vector signed long long __a, vector bool long long __b) {
   7021   return __a | (vector signed long long)__b;
   7022 }
   7023 
   7024 static __inline__ vector unsigned long long __ATTRS_o_ai
   7025 vec_or(vector unsigned long long __a, vector unsigned long long __b) {
   7026   return __a | __b;
   7027 }
   7028 
   7029 static __inline__ vector unsigned long long __ATTRS_o_ai
   7030 vec_or(vector bool long long __a, vector unsigned long long __b) {
   7031   return (vector unsigned long long)__a | __b;
   7032 }
   7033 
   7034 static __inline__ vector unsigned long long __ATTRS_o_ai
   7035 vec_or(vector unsigned long long __a, vector bool long long __b) {
   7036   return __a | (vector unsigned long long)__b;
   7037 }
   7038 
   7039 static __inline__ vector bool long long __ATTRS_o_ai
   7040 vec_or(vector bool long long __a, vector bool long long __b) {
   7041   return __a | __b;
   7042 }
   7043 #endif
   7044 
   7045 #ifdef __POWER8_VECTOR__
   7046 static __inline__ vector signed char __ATTRS_o_ai
   7047 vec_orc(vector signed char __a, vector signed char __b) {
   7048   return __a | ~__b;
   7049 }
   7050 
   7051 static __inline__ vector signed char __ATTRS_o_ai
   7052 vec_orc(vector signed char __a, vector bool char __b) {
   7053   return __a | (vector signed char)~__b;
   7054 }
   7055 
   7056 static __inline__ vector signed char __ATTRS_o_ai
   7057 vec_orc(vector bool char __a, vector signed char __b) {
   7058   return (vector signed char)(__a | (vector bool char)~__b);
   7059 }
   7060 
   7061 static __inline__ vector unsigned char __ATTRS_o_ai
   7062 vec_orc(vector unsigned char __a, vector unsigned char __b) {
   7063   return __a | ~__b;
   7064 }
   7065 
   7066 static __inline__ vector unsigned char __ATTRS_o_ai
   7067 vec_orc(vector unsigned char __a, vector bool char __b) {
   7068   return __a | (vector unsigned char)~__b;
   7069 }
   7070 
   7071 static __inline__ vector unsigned char __ATTRS_o_ai
   7072 vec_orc(vector bool char __a, vector unsigned char __b) {
   7073   return (vector unsigned char)(__a | (vector bool char)~__b);
   7074 }
   7075 
   7076 static __inline__ vector bool char __ATTRS_o_ai vec_orc(vector bool char __a,
   7077                                                         vector bool char __b) {
   7078   return __a | ~__b;
   7079 }
   7080 
   7081 static __inline__ vector signed short __ATTRS_o_ai
   7082 vec_orc(vector signed short __a, vector signed short __b) {
   7083   return __a | ~__b;
   7084 }
   7085 
   7086 static __inline__ vector signed short __ATTRS_o_ai
   7087 vec_orc(vector signed short __a, vector bool short __b) {
   7088   return __a | (vector signed short)~__b;
   7089 }
   7090 
   7091 static __inline__ vector signed short __ATTRS_o_ai
   7092 vec_orc(vector bool short __a, vector signed short __b) {
   7093   return (vector signed short)(__a | (vector bool short)~__b);
   7094 }
   7095 
   7096 static __inline__ vector unsigned short __ATTRS_o_ai
   7097 vec_orc(vector unsigned short __a, vector unsigned short __b) {
   7098   return __a | ~__b;
   7099 }
   7100 
   7101 static __inline__ vector unsigned short __ATTRS_o_ai
   7102 vec_orc(vector unsigned short __a, vector bool short __b) {
   7103   return __a | (vector unsigned short)~__b;
   7104 }
   7105 
   7106 static __inline__ vector unsigned short __ATTRS_o_ai
   7107 vec_orc(vector bool short __a, vector unsigned short __b) {
   7108   return (vector unsigned short)(__a | (vector bool short)~__b);
   7109 }
   7110 
   7111 static __inline__ vector bool short __ATTRS_o_ai
   7112 vec_orc(vector bool short __a, vector bool short __b) {
   7113   return __a | ~__b;
   7114 }
   7115 
   7116 static __inline__ vector signed int __ATTRS_o_ai
   7117 vec_orc(vector signed int __a, vector signed int __b) {
   7118   return __a | ~__b;
   7119 }
   7120 
   7121 static __inline__ vector signed int __ATTRS_o_ai vec_orc(vector signed int __a,
   7122                                                          vector bool int __b) {
   7123   return __a | (vector signed int)~__b;
   7124 }
   7125 
   7126 static __inline__ vector signed int __ATTRS_o_ai
   7127 vec_orc(vector bool int __a, vector signed int __b) {
   7128   return (vector signed int)(__a | (vector bool int)~__b);
   7129 }
   7130 
   7131 static __inline__ vector unsigned int __ATTRS_o_ai
   7132 vec_orc(vector unsigned int __a, vector unsigned int __b) {
   7133   return __a | ~__b;
   7134 }
   7135 
   7136 static __inline__ vector unsigned int __ATTRS_o_ai
   7137 vec_orc(vector unsigned int __a, vector bool int __b) {
   7138   return __a | (vector unsigned int)~__b;
   7139 }
   7140 
   7141 static __inline__ vector unsigned int __ATTRS_o_ai
   7142 vec_orc(vector bool int __a, vector unsigned int __b) {
   7143   return (vector unsigned int)(__a | (vector bool int)~__b);
   7144 }
   7145 
   7146 static __inline__ vector bool int __ATTRS_o_ai vec_orc(vector bool int __a,
   7147                                                        vector bool int __b) {
   7148   return __a | ~__b;
   7149 }
   7150 
   7151 static __inline__ vector float __ATTRS_o_ai
   7152 vec_orc(vector bool int __a, vector float __b) {
   7153   return (vector float)(__a | ~(vector bool int)__b);
   7154 }
   7155 
   7156 static __inline__ vector float __ATTRS_o_ai
   7157 vec_orc(vector float __a, vector bool int __b) {
   7158   return (vector float)((vector bool int)__a | ~__b);
   7159 }
   7160 
   7161 static __inline__ vector float __ATTRS_o_ai vec_orc(vector float __a,
   7162                                                     vector float __b) {
   7163   return (vector float)((vector unsigned int)__a | ~(vector unsigned int)__b);
   7164 }
   7165 
   7166 static __inline__ vector signed long long __ATTRS_o_ai
   7167 vec_orc(vector signed long long __a, vector signed long long __b) {
   7168   return __a | ~__b;
   7169 }
   7170 
   7171 static __inline__ vector signed long long __ATTRS_o_ai
   7172 vec_orc(vector signed long long __a, vector bool long long __b) {
   7173   return __a | (vector signed long long)~__b;
   7174 }
   7175 
   7176 static __inline__ vector signed long long __ATTRS_o_ai
   7177 vec_orc(vector bool long long __a, vector signed long long __b) {
   7178   return (vector signed long long)(__a | (vector bool long long)~__b);
   7179 }
   7180 
   7181 static __inline__ vector unsigned long long __ATTRS_o_ai
   7182 vec_orc(vector unsigned long long __a, vector unsigned long long __b) {
   7183   return __a | ~__b;
   7184 }
   7185 
   7186 static __inline__ vector unsigned long long __ATTRS_o_ai
   7187 vec_orc(vector unsigned long long __a, vector bool long long __b) {
   7188   return __a | (vector unsigned long long)~__b;
   7189 }
   7190 
   7191 static __inline__ vector unsigned long long __ATTRS_o_ai
   7192 vec_orc(vector bool long long __a, vector unsigned long long __b) {
   7193   return (vector unsigned long long)(__a | (vector bool long long)~__b);
   7194 }
   7195 
   7196 static __inline__ vector bool long long __ATTRS_o_ai
   7197 vec_orc(vector bool long long __a, vector bool long long __b) {
   7198   return __a | ~__b;
   7199 }
   7200 
   7201 static __inline__ vector double __ATTRS_o_ai
   7202 vec_orc(vector double __a, vector bool long long __b) {
   7203   return (vector double)((vector bool long long)__a | ~__b);
   7204 }
   7205 
   7206 static __inline__ vector double __ATTRS_o_ai
   7207 vec_orc(vector bool long long __a, vector double __b) {
   7208   return (vector double)(__a | ~(vector bool long long)__b);
   7209 }
   7210 
   7211 static __inline__ vector double __ATTRS_o_ai vec_orc(vector double __a,
   7212                                                      vector double __b) {
   7213   return (vector double)((vector unsigned long long)__a |
   7214                          ~(vector unsigned long long)__b);
   7215 }
   7216 #endif
   7217 
   7218 /* vec_vor */
   7219 
   7220 static __inline__ vector signed char __ATTRS_o_ai
   7221 vec_vor(vector signed char __a, vector signed char __b) {
   7222   return __a | __b;
   7223 }
   7224 
   7225 static __inline__ vector signed char __ATTRS_o_ai
   7226 vec_vor(vector bool char __a, vector signed char __b) {
   7227   return (vector signed char)__a | __b;
   7228 }
   7229 
   7230 static __inline__ vector signed char __ATTRS_o_ai
   7231 vec_vor(vector signed char __a, vector bool char __b) {
   7232   return __a | (vector signed char)__b;
   7233 }
   7234 
   7235 static __inline__ vector unsigned char __ATTRS_o_ai
   7236 vec_vor(vector unsigned char __a, vector unsigned char __b) {
   7237   return __a | __b;
   7238 }
   7239 
   7240 static __inline__ vector unsigned char __ATTRS_o_ai
   7241 vec_vor(vector bool char __a, vector unsigned char __b) {
   7242   return (vector unsigned char)__a | __b;
   7243 }
   7244 
   7245 static __inline__ vector unsigned char __ATTRS_o_ai
   7246 vec_vor(vector unsigned char __a, vector bool char __b) {
   7247   return __a | (vector unsigned char)__b;
   7248 }
   7249 
   7250 static __inline__ vector bool char __ATTRS_o_ai vec_vor(vector bool char __a,
   7251                                                         vector bool char __b) {
   7252   return __a | __b;
   7253 }
   7254 
   7255 static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
   7256                                                     vector short __b) {
   7257   return __a | __b;
   7258 }
   7259 
   7260 static __inline__ vector short __ATTRS_o_ai vec_vor(vector bool short __a,
   7261                                                     vector short __b) {
   7262   return (vector short)__a | __b;
   7263 }
   7264 
   7265 static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
   7266                                                     vector bool short __b) {
   7267   return __a | (vector short)__b;
   7268 }
   7269 
   7270 static __inline__ vector unsigned short __ATTRS_o_ai
   7271 vec_vor(vector unsigned short __a, vector unsigned short __b) {
   7272   return __a | __b;
   7273 }
   7274 
   7275 static __inline__ vector unsigned short __ATTRS_o_ai
   7276 vec_vor(vector bool short __a, vector unsigned short __b) {
   7277   return (vector unsigned short)__a | __b;
   7278 }
   7279 
   7280 static __inline__ vector unsigned short __ATTRS_o_ai
   7281 vec_vor(vector unsigned short __a, vector bool short __b) {
   7282   return __a | (vector unsigned short)__b;
   7283 }
   7284 
   7285 static __inline__ vector bool short __ATTRS_o_ai
   7286 vec_vor(vector bool short __a, vector bool short __b) {
   7287   return __a | __b;
   7288 }
   7289 
   7290 static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
   7291                                                   vector int __b) {
   7292   return __a | __b;
   7293 }
   7294 
   7295 static __inline__ vector int __ATTRS_o_ai vec_vor(vector bool int __a,
   7296                                                   vector int __b) {
   7297   return (vector int)__a | __b;
   7298 }
   7299 
   7300 static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
   7301                                                   vector bool int __b) {
   7302   return __a | (vector int)__b;
   7303 }
   7304 
   7305 static __inline__ vector unsigned int __ATTRS_o_ai
   7306 vec_vor(vector unsigned int __a, vector unsigned int __b) {
   7307   return __a | __b;
   7308 }
   7309 
   7310 static __inline__ vector unsigned int __ATTRS_o_ai
   7311 vec_vor(vector bool int __a, vector unsigned int __b) {
   7312   return (vector unsigned int)__a | __b;
   7313 }
   7314 
   7315 static __inline__ vector unsigned int __ATTRS_o_ai
   7316 vec_vor(vector unsigned int __a, vector bool int __b) {
   7317   return __a | (vector unsigned int)__b;
   7318 }
   7319 
   7320 static __inline__ vector bool int __ATTRS_o_ai vec_vor(vector bool int __a,
   7321                                                        vector bool int __b) {
   7322   return __a | __b;
   7323 }
   7324 
   7325 static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
   7326                                                     vector float __b) {
   7327   vector unsigned int __res =
   7328       (vector unsigned int)__a | (vector unsigned int)__b;
   7329   return (vector float)__res;
   7330 }
   7331 
   7332 static __inline__ vector float __ATTRS_o_ai vec_vor(vector bool int __a,
   7333                                                     vector float __b) {
   7334   vector unsigned int __res =
   7335       (vector unsigned int)__a | (vector unsigned int)__b;
   7336   return (vector float)__res;
   7337 }
   7338 
   7339 static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
   7340                                                     vector bool int __b) {
   7341   vector unsigned int __res =
   7342       (vector unsigned int)__a | (vector unsigned int)__b;
   7343   return (vector float)__res;
   7344 }
   7345 
   7346 #ifdef __VSX__
   7347 static __inline__ vector signed long long __ATTRS_o_ai
   7348 vec_vor(vector signed long long __a, vector signed long long __b) {
   7349   return __a | __b;
   7350 }
   7351 
   7352 static __inline__ vector signed long long __ATTRS_o_ai
   7353 vec_vor(vector bool long long __a, vector signed long long __b) {
   7354   return (vector signed long long)__a | __b;
   7355 }
   7356 
   7357 static __inline__ vector signed long long __ATTRS_o_ai
   7358 vec_vor(vector signed long long __a, vector bool long long __b) {
   7359   return __a | (vector signed long long)__b;
   7360 }
   7361 
   7362 static __inline__ vector unsigned long long __ATTRS_o_ai
   7363 vec_vor(vector unsigned long long __a, vector unsigned long long __b) {
   7364   return __a | __b;
   7365 }
   7366 
   7367 static __inline__ vector unsigned long long __ATTRS_o_ai
   7368 vec_vor(vector bool long long __a, vector unsigned long long __b) {
   7369   return (vector unsigned long long)__a | __b;
   7370 }
   7371 
   7372 static __inline__ vector unsigned long long __ATTRS_o_ai
   7373 vec_vor(vector unsigned long long __a, vector bool long long __b) {
   7374   return __a | (vector unsigned long long)__b;
   7375 }
   7376 
   7377 static __inline__ vector bool long long __ATTRS_o_ai
   7378 vec_vor(vector bool long long __a, vector bool long long __b) {
   7379   return __a | __b;
   7380 }
   7381 #endif
   7382 
   7383 /* vec_pack */
   7384 
   7385 /* The various vector pack instructions have a big-endian bias, so for
   7386    little endian we must handle reversed element numbering.  */
   7387 
   7388 static __inline__ vector signed char __ATTRS_o_ai
   7389 vec_pack(vector signed short __a, vector signed short __b) {
   7390 #ifdef __LITTLE_ENDIAN__
   7391   return (vector signed char)vec_perm(
   7392       __a, __b,
   7393       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
   7394                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
   7395 #else
   7396   return (vector signed char)vec_perm(
   7397       __a, __b,
   7398       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
   7399                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
   7400 #endif
   7401 }
   7402 
   7403 static __inline__ vector unsigned char __ATTRS_o_ai
   7404 vec_pack(vector unsigned short __a, vector unsigned short __b) {
   7405 #ifdef __LITTLE_ENDIAN__
   7406   return (vector unsigned char)vec_perm(
   7407       __a, __b,
   7408       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
   7409                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
   7410 #else
   7411   return (vector unsigned char)vec_perm(
   7412       __a, __b,
   7413       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
   7414                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
   7415 #endif
   7416 }
   7417 
   7418 static __inline__ vector bool char __ATTRS_o_ai
   7419 vec_pack(vector bool short __a, vector bool short __b) {
   7420 #ifdef __LITTLE_ENDIAN__
   7421   return (vector bool char)vec_perm(
   7422       __a, __b,
   7423       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
   7424                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
   7425 #else
   7426   return (vector bool char)vec_perm(
   7427       __a, __b,
   7428       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
   7429                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
   7430 #endif
   7431 }
   7432 
   7433 static __inline__ vector short __ATTRS_o_ai vec_pack(vector int __a,
   7434                                                      vector int __b) {
   7435 #ifdef __LITTLE_ENDIAN__
   7436   return (vector short)vec_perm(
   7437       __a, __b,
   7438       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
   7439                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
   7440 #else
   7441   return (vector short)vec_perm(
   7442       __a, __b,
   7443       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
   7444                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
   7445 #endif
   7446 }
   7447 
   7448 static __inline__ vector unsigned short __ATTRS_o_ai
   7449 vec_pack(vector unsigned int __a, vector unsigned int __b) {
   7450 #ifdef __LITTLE_ENDIAN__
   7451   return (vector unsigned short)vec_perm(
   7452       __a, __b,
   7453       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
   7454                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
   7455 #else
   7456   return (vector unsigned short)vec_perm(
   7457       __a, __b,
   7458       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
   7459                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
   7460 #endif
   7461 }
   7462 
   7463 static __inline__ vector bool short __ATTRS_o_ai vec_pack(vector bool int __a,
   7464                                                           vector bool int __b) {
   7465 #ifdef __LITTLE_ENDIAN__
   7466   return (vector bool short)vec_perm(
   7467       __a, __b,
   7468       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
   7469                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
   7470 #else
   7471   return (vector bool short)vec_perm(
   7472       __a, __b,
   7473       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
   7474                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
   7475 #endif
   7476 }
   7477 
   7478 #ifdef __VSX__
   7479 static __inline__ vector signed int __ATTRS_o_ai
   7480 vec_pack(vector signed long long __a, vector signed long long __b) {
   7481 #ifdef __LITTLE_ENDIAN__
   7482   return (vector signed int)vec_perm(
   7483       __a, __b,
   7484       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
   7485                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
   7486 #else
   7487   return (vector signed int)vec_perm(
   7488       __a, __b,
   7489       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
   7490                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
   7491 #endif
   7492 }
   7493 static __inline__ vector unsigned int __ATTRS_o_ai
   7494 vec_pack(vector unsigned long long __a, vector unsigned long long __b) {
   7495 #ifdef __LITTLE_ENDIAN__
   7496   return (vector unsigned int)vec_perm(
   7497       __a, __b,
   7498       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
   7499                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
   7500 #else
   7501   return (vector unsigned int)vec_perm(
   7502       __a, __b,
   7503       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
   7504                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
   7505 #endif
   7506 }
   7507 
   7508 static __inline__ vector bool int __ATTRS_o_ai
   7509 vec_pack(vector bool long long __a, vector bool long long __b) {
   7510 #ifdef __LITTLE_ENDIAN__
   7511   return (vector bool int)vec_perm(
   7512       __a, __b,
   7513       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
   7514                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
   7515 #else
   7516   return (vector bool int)vec_perm(
   7517       __a, __b,
   7518       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
   7519                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
   7520 #endif
   7521 }
   7522 
   7523 static __inline__ vector float __ATTRS_o_ai
   7524 vec_pack(vector double __a, vector double __b) {
   7525   return (vector float) (__a[0], __a[1], __b[0], __b[1]);
   7526 }
   7527 #endif
   7528 
   7529 #ifdef __POWER9_VECTOR__
   7530 static __inline__ vector unsigned short __ATTRS_o_ai
   7531 vec_pack_to_short_fp32(vector float __a, vector float __b) {
   7532   vector float __resa = __builtin_vsx_xvcvsphp(__a);
   7533   vector float __resb = __builtin_vsx_xvcvsphp(__b);
   7534 #ifdef __LITTLE_ENDIAN__
   7535   return (vector unsigned short)vec_mergee(__resa, __resb);
   7536 #else
   7537   return (vector unsigned short)vec_mergeo(__resa, __resb);
   7538 #endif
   7539 }
   7540 
   7541 #endif
   7542 /* vec_vpkuhum */
   7543 
   7544 #define __builtin_altivec_vpkuhum vec_vpkuhum
   7545 
   7546 static __inline__ vector signed char __ATTRS_o_ai
   7547 vec_vpkuhum(vector signed short __a, vector signed short __b) {
   7548 #ifdef __LITTLE_ENDIAN__
   7549   return (vector signed char)vec_perm(
   7550       __a, __b,
   7551       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
   7552                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
   7553 #else
   7554   return (vector signed char)vec_perm(
   7555       __a, __b,
   7556       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
   7557                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
   7558 #endif
   7559 }
   7560 
   7561 static __inline__ vector unsigned char __ATTRS_o_ai
   7562 vec_vpkuhum(vector unsigned short __a, vector unsigned short __b) {
   7563 #ifdef __LITTLE_ENDIAN__
   7564   return (vector unsigned char)vec_perm(
   7565       __a, __b,
   7566       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
   7567                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
   7568 #else
   7569   return (vector unsigned char)vec_perm(
   7570       __a, __b,
   7571       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
   7572                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
   7573 #endif
   7574 }
   7575 
   7576 static __inline__ vector bool char __ATTRS_o_ai
   7577 vec_vpkuhum(vector bool short __a, vector bool short __b) {
   7578 #ifdef __LITTLE_ENDIAN__
   7579   return (vector bool char)vec_perm(
   7580       __a, __b,
   7581       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
   7582                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
   7583 #else
   7584   return (vector bool char)vec_perm(
   7585       __a, __b,
   7586       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
   7587                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
   7588 #endif
   7589 }
   7590 
   7591 /* vec_vpkuwum */
   7592 
   7593 #define __builtin_altivec_vpkuwum vec_vpkuwum
   7594 
   7595 static __inline__ vector short __ATTRS_o_ai vec_vpkuwum(vector int __a,
   7596                                                         vector int __b) {
   7597 #ifdef __LITTLE_ENDIAN__
   7598   return (vector short)vec_perm(
   7599       __a, __b,
   7600       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
   7601                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
   7602 #else
   7603   return (vector short)vec_perm(
   7604       __a, __b,
   7605       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
   7606                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
   7607 #endif
   7608 }
   7609 
   7610 static __inline__ vector unsigned short __ATTRS_o_ai
   7611 vec_vpkuwum(vector unsigned int __a, vector unsigned int __b) {
   7612 #ifdef __LITTLE_ENDIAN__
   7613   return (vector unsigned short)vec_perm(
   7614       __a, __b,
   7615       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
   7616                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
   7617 #else
   7618   return (vector unsigned short)vec_perm(
   7619       __a, __b,
   7620       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
   7621                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
   7622 #endif
   7623 }
   7624 
   7625 static __inline__ vector bool short __ATTRS_o_ai
   7626 vec_vpkuwum(vector bool int __a, vector bool int __b) {
   7627 #ifdef __LITTLE_ENDIAN__
   7628   return (vector bool short)vec_perm(
   7629       __a, __b,
   7630       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
   7631                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
   7632 #else
   7633   return (vector bool short)vec_perm(
   7634       __a, __b,
   7635       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
   7636                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
   7637 #endif
   7638 }
   7639 
   7640 /* vec_vpkudum */
   7641 
   7642 #ifdef __POWER8_VECTOR__
   7643 #define __builtin_altivec_vpkudum vec_vpkudum
   7644 
   7645 static __inline__ vector int __ATTRS_o_ai vec_vpkudum(vector long long __a,
   7646                                                       vector long long __b) {
   7647 #ifdef __LITTLE_ENDIAN__
   7648   return (vector int)vec_perm(
   7649       __a, __b,
   7650       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
   7651                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
   7652 #else
   7653   return (vector int)vec_perm(
   7654       __a, __b,
   7655       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
   7656                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
   7657 #endif
   7658 }
   7659 
   7660 static __inline__ vector unsigned int __ATTRS_o_ai
   7661 vec_vpkudum(vector unsigned long long __a, vector unsigned long long __b) {
   7662 #ifdef __LITTLE_ENDIAN__
   7663   return (vector unsigned int)vec_perm(
   7664       __a, __b,
   7665       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
   7666                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
   7667 #else
   7668   return (vector unsigned int)vec_perm(
   7669       __a, __b,
   7670       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
   7671                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
   7672 #endif
   7673 }
   7674 
   7675 static __inline__ vector bool int __ATTRS_o_ai
   7676 vec_vpkudum(vector bool long long __a, vector bool long long __b) {
   7677 #ifdef __LITTLE_ENDIAN__
   7678   return (vector bool int)vec_perm(
   7679       (vector long long)__a, (vector long long)__b,
   7680       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
   7681                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
   7682 #else
   7683   return (vector bool int)vec_perm(
   7684       (vector long long)__a, (vector long long)__b,
   7685       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
   7686                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
   7687 #endif
   7688 }
   7689 #endif
   7690 
   7691 /* vec_packpx */
   7692 
   7693 static __inline__ vector pixel __attribute__((__always_inline__))
   7694 vec_packpx(vector unsigned int __a, vector unsigned int __b) {
   7695 #ifdef __LITTLE_ENDIAN__
   7696   return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
   7697 #else
   7698   return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
   7699 #endif
   7700 }
   7701 
   7702 /* vec_vpkpx */
   7703 
   7704 static __inline__ vector pixel __attribute__((__always_inline__))
   7705 vec_vpkpx(vector unsigned int __a, vector unsigned int __b) {
   7706 #ifdef __LITTLE_ENDIAN__
   7707   return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
   7708 #else
   7709   return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
   7710 #endif
   7711 }
   7712 
   7713 /* vec_packs */
   7714 
   7715 static __inline__ vector signed char __ATTRS_o_ai vec_packs(vector short __a,
   7716                                                             vector short __b) {
   7717 #ifdef __LITTLE_ENDIAN__
   7718   return __builtin_altivec_vpkshss(__b, __a);
   7719 #else
   7720   return __builtin_altivec_vpkshss(__a, __b);
   7721 #endif
   7722 }
   7723 
   7724 static __inline__ vector unsigned char __ATTRS_o_ai
   7725 vec_packs(vector unsigned short __a, vector unsigned short __b) {
   7726 #ifdef __LITTLE_ENDIAN__
   7727   return __builtin_altivec_vpkuhus(__b, __a);
   7728 #else
   7729   return __builtin_altivec_vpkuhus(__a, __b);
   7730 #endif
   7731 }
   7732 
   7733 static __inline__ vector signed short __ATTRS_o_ai vec_packs(vector int __a,
   7734                                                              vector int __b) {
   7735 #ifdef __LITTLE_ENDIAN__
   7736   return __builtin_altivec_vpkswss(__b, __a);
   7737 #else
   7738   return __builtin_altivec_vpkswss(__a, __b);
   7739 #endif
   7740 }
   7741 
   7742 static __inline__ vector unsigned short __ATTRS_o_ai
   7743 vec_packs(vector unsigned int __a, vector unsigned int __b) {
   7744 #ifdef __LITTLE_ENDIAN__
   7745   return __builtin_altivec_vpkuwus(__b, __a);
   7746 #else
   7747   return __builtin_altivec_vpkuwus(__a, __b);
   7748 #endif
   7749 }
   7750 
   7751 #ifdef __POWER8_VECTOR__
   7752 static __inline__ vector int __ATTRS_o_ai vec_packs(vector long long __a,
   7753                                                     vector long long __b) {
   7754 #ifdef __LITTLE_ENDIAN__
   7755   return __builtin_altivec_vpksdss(__b, __a);
   7756 #else
   7757   return __builtin_altivec_vpksdss(__a, __b);
   7758 #endif
   7759 }
   7760 
   7761 static __inline__ vector unsigned int __ATTRS_o_ai
   7762 vec_packs(vector unsigned long long __a, vector unsigned long long __b) {
   7763 #ifdef __LITTLE_ENDIAN__
   7764   return __builtin_altivec_vpkudus(__b, __a);
   7765 #else
   7766   return __builtin_altivec_vpkudus(__a, __b);
   7767 #endif
   7768 }
   7769 #endif
   7770 
   7771 /* vec_vpkshss */
   7772 
   7773 static __inline__ vector signed char __attribute__((__always_inline__))
   7774 vec_vpkshss(vector short __a, vector short __b) {
   7775 #ifdef __LITTLE_ENDIAN__
   7776   return __builtin_altivec_vpkshss(__b, __a);
   7777 #else
   7778   return __builtin_altivec_vpkshss(__a, __b);
   7779 #endif
   7780 }
   7781 
   7782 /* vec_vpksdss */
   7783 
   7784 #ifdef __POWER8_VECTOR__
   7785 static __inline__ vector int __ATTRS_o_ai vec_vpksdss(vector long long __a,
   7786                                                       vector long long __b) {
   7787 #ifdef __LITTLE_ENDIAN__
   7788   return __builtin_altivec_vpksdss(__b, __a);
   7789 #else
   7790   return __builtin_altivec_vpksdss(__a, __b);
   7791 #endif
   7792 }
   7793 #endif
   7794 
   7795 /* vec_vpkuhus */
   7796 
   7797 static __inline__ vector unsigned char __attribute__((__always_inline__))
   7798 vec_vpkuhus(vector unsigned short __a, vector unsigned short __b) {
   7799 #ifdef __LITTLE_ENDIAN__
   7800   return __builtin_altivec_vpkuhus(__b, __a);
   7801 #else
   7802   return __builtin_altivec_vpkuhus(__a, __b);
   7803 #endif
   7804 }
   7805 
   7806 /* vec_vpkudus */
   7807 
   7808 #ifdef __POWER8_VECTOR__
   7809 static __inline__ vector unsigned int __attribute__((__always_inline__))
   7810 vec_vpkudus(vector unsigned long long __a, vector unsigned long long __b) {
   7811 #ifdef __LITTLE_ENDIAN__
   7812   return __builtin_altivec_vpkudus(__b, __a);
   7813 #else
   7814   return __builtin_altivec_vpkudus(__a, __b);
   7815 #endif
   7816 }
   7817 #endif
   7818 
   7819 /* vec_vpkswss */
   7820 
   7821 static __inline__ vector signed short __attribute__((__always_inline__))
   7822 vec_vpkswss(vector int __a, vector int __b) {
   7823 #ifdef __LITTLE_ENDIAN__
   7824   return __builtin_altivec_vpkswss(__b, __a);
   7825 #else
   7826   return __builtin_altivec_vpkswss(__a, __b);
   7827 #endif
   7828 }
   7829 
   7830 /* vec_vpkuwus */
   7831 
   7832 static __inline__ vector unsigned short __attribute__((__always_inline__))
   7833 vec_vpkuwus(vector unsigned int __a, vector unsigned int __b) {
   7834 #ifdef __LITTLE_ENDIAN__
   7835   return __builtin_altivec_vpkuwus(__b, __a);
   7836 #else
   7837   return __builtin_altivec_vpkuwus(__a, __b);
   7838 #endif
   7839 }
   7840 
   7841 /* vec_packsu */
   7842 
   7843 static __inline__ vector unsigned char __ATTRS_o_ai
   7844 vec_packsu(vector short __a, vector short __b) {
   7845 #ifdef __LITTLE_ENDIAN__
   7846   return __builtin_altivec_vpkshus(__b, __a);
   7847 #else
   7848   return __builtin_altivec_vpkshus(__a, __b);
   7849 #endif
   7850 }
   7851 
   7852 static __inline__ vector unsigned char __ATTRS_o_ai
   7853 vec_packsu(vector unsigned short __a, vector unsigned short __b) {
   7854 #ifdef __LITTLE_ENDIAN__
   7855   return __builtin_altivec_vpkuhus(__b, __a);
   7856 #else
   7857   return __builtin_altivec_vpkuhus(__a, __b);
   7858 #endif
   7859 }
   7860 
   7861 static __inline__ vector unsigned short __ATTRS_o_ai
   7862 vec_packsu(vector int __a, vector int __b) {
   7863 #ifdef __LITTLE_ENDIAN__
   7864   return __builtin_altivec_vpkswus(__b, __a);
   7865 #else
   7866   return __builtin_altivec_vpkswus(__a, __b);
   7867 #endif
   7868 }
   7869 
   7870 static __inline__ vector unsigned short __ATTRS_o_ai
   7871 vec_packsu(vector unsigned int __a, vector unsigned int __b) {
   7872 #ifdef __LITTLE_ENDIAN__
   7873   return __builtin_altivec_vpkuwus(__b, __a);
   7874 #else
   7875   return __builtin_altivec_vpkuwus(__a, __b);
   7876 #endif
   7877 }
   7878 
   7879 #ifdef __POWER8_VECTOR__
   7880 static __inline__ vector unsigned int __ATTRS_o_ai
   7881 vec_packsu(vector long long __a, vector long long __b) {
   7882 #ifdef __LITTLE_ENDIAN__
   7883   return __builtin_altivec_vpksdus(__b, __a);
   7884 #else
   7885   return __builtin_altivec_vpksdus(__a, __b);
   7886 #endif
   7887 }
   7888 
   7889 static __inline__ vector unsigned int __ATTRS_o_ai
   7890 vec_packsu(vector unsigned long long __a, vector unsigned long long __b) {
   7891 #ifdef __LITTLE_ENDIAN__
   7892   return __builtin_altivec_vpkudus(__b, __a);
   7893 #else
   7894   return __builtin_altivec_vpkudus(__a, __b);
   7895 #endif
   7896 }
   7897 #endif
   7898 
   7899 /* vec_vpkshus */
   7900 
   7901 static __inline__ vector unsigned char __ATTRS_o_ai
   7902 vec_vpkshus(vector short __a, vector short __b) {
   7903 #ifdef __LITTLE_ENDIAN__
   7904   return __builtin_altivec_vpkshus(__b, __a);
   7905 #else
   7906   return __builtin_altivec_vpkshus(__a, __b);
   7907 #endif
   7908 }
   7909 
   7910 static __inline__ vector unsigned char __ATTRS_o_ai
   7911 vec_vpkshus(vector unsigned short __a, vector unsigned short __b) {
   7912 #ifdef __LITTLE_ENDIAN__
   7913   return __builtin_altivec_vpkuhus(__b, __a);
   7914 #else
   7915   return __builtin_altivec_vpkuhus(__a, __b);
   7916 #endif
   7917 }
   7918 
   7919 /* vec_vpkswus */
   7920 
   7921 static __inline__ vector unsigned short __ATTRS_o_ai
   7922 vec_vpkswus(vector int __a, vector int __b) {
   7923 #ifdef __LITTLE_ENDIAN__
   7924   return __builtin_altivec_vpkswus(__b, __a);
   7925 #else
   7926   return __builtin_altivec_vpkswus(__a, __b);
   7927 #endif
   7928 }
   7929 
   7930 static __inline__ vector unsigned short __ATTRS_o_ai
   7931 vec_vpkswus(vector unsigned int __a, vector unsigned int __b) {
   7932 #ifdef __LITTLE_ENDIAN__
   7933   return __builtin_altivec_vpkuwus(__b, __a);
   7934 #else
   7935   return __builtin_altivec_vpkuwus(__a, __b);
   7936 #endif
   7937 }
   7938 
   7939 /* vec_vpksdus */
   7940 
   7941 #ifdef __POWER8_VECTOR__
   7942 static __inline__ vector unsigned int __ATTRS_o_ai
   7943 vec_vpksdus(vector long long __a, vector long long __b) {
   7944 #ifdef __LITTLE_ENDIAN__
   7945   return __builtin_altivec_vpksdus(__b, __a);
   7946 #else
   7947   return __builtin_altivec_vpksdus(__a, __b);
   7948 #endif
   7949 }
   7950 #endif
   7951 
   7952 /* vec_perm */
   7953 
   7954 // The vperm instruction is defined architecturally with a big-endian bias.
   7955 // For little endian, we swap the input operands and invert the permute
   7956 // control vector.  Only the rightmost 5 bits matter, so we could use
   7957 // a vector of all 31s instead of all 255s to perform the inversion.
   7958 // However, when the PCV is not a constant, using 255 has an advantage
   7959 // in that the vec_xor can be recognized as a vec_nor (and for P8 and
   7960 // later, possibly a vec_nand).
   7961 
   7962 static __inline__ vector signed char __ATTRS_o_ai vec_perm(
   7963     vector signed char __a, vector signed char __b, vector unsigned char __c) {
   7964 #ifdef __LITTLE_ENDIAN__
   7965   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   7966                               255, 255, 255, 255, 255, 255, 255, 255};
   7967   __d = vec_xor(__c, __d);
   7968   return (vector signed char)__builtin_altivec_vperm_4si((vector int)__b,
   7969                                                          (vector int)__a, __d);
   7970 #else
   7971   return (vector signed char)__builtin_altivec_vperm_4si((vector int)__a,
   7972                                                          (vector int)__b, __c);
   7973 #endif
   7974 }
   7975 
   7976 static __inline__ vector unsigned char __ATTRS_o_ai
   7977 vec_perm(vector unsigned char __a, vector unsigned char __b,
   7978          vector unsigned char __c) {
   7979 #ifdef __LITTLE_ENDIAN__
   7980   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   7981                               255, 255, 255, 255, 255, 255, 255, 255};
   7982   __d = vec_xor(__c, __d);
   7983   return (vector unsigned char)__builtin_altivec_vperm_4si(
   7984       (vector int)__b, (vector int)__a, __d);
   7985 #else
   7986   return (vector unsigned char)__builtin_altivec_vperm_4si(
   7987       (vector int)__a, (vector int)__b, __c);
   7988 #endif
   7989 }
   7990 
   7991 static __inline__ vector bool char __ATTRS_o_ai
   7992 vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c) {
   7993 #ifdef __LITTLE_ENDIAN__
   7994   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   7995                               255, 255, 255, 255, 255, 255, 255, 255};
   7996   __d = vec_xor(__c, __d);
   7997   return (vector bool char)__builtin_altivec_vperm_4si((vector int)__b,
   7998                                                        (vector int)__a, __d);
   7999 #else
   8000   return (vector bool char)__builtin_altivec_vperm_4si((vector int)__a,
   8001                                                        (vector int)__b, __c);
   8002 #endif
   8003 }
   8004 
   8005 static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
   8006                                                      vector signed short __b,
   8007                                                      vector unsigned char __c) {
   8008 #ifdef __LITTLE_ENDIAN__
   8009   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   8010                               255, 255, 255, 255, 255, 255, 255, 255};
   8011   __d = vec_xor(__c, __d);
   8012   return (vector signed short)__builtin_altivec_vperm_4si((vector int)__b,
   8013                                                           (vector int)__a, __d);
   8014 #else
   8015   return (vector signed short)__builtin_altivec_vperm_4si((vector int)__a,
   8016                                                           (vector int)__b, __c);
   8017 #endif
   8018 }
   8019 
   8020 static __inline__ vector unsigned short __ATTRS_o_ai
   8021 vec_perm(vector unsigned short __a, vector unsigned short __b,
   8022          vector unsigned char __c) {
   8023 #ifdef __LITTLE_ENDIAN__
   8024   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   8025                               255, 255, 255, 255, 255, 255, 255, 255};
   8026   __d = vec_xor(__c, __d);
   8027   return (vector unsigned short)__builtin_altivec_vperm_4si(
   8028       (vector int)__b, (vector int)__a, __d);
   8029 #else
   8030   return (vector unsigned short)__builtin_altivec_vperm_4si(
   8031       (vector int)__a, (vector int)__b, __c);
   8032 #endif
   8033 }
   8034 
   8035 static __inline__ vector bool short __ATTRS_o_ai vec_perm(
   8036     vector bool short __a, vector bool short __b, vector unsigned char __c) {
   8037 #ifdef __LITTLE_ENDIAN__
   8038   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   8039                               255, 255, 255, 255, 255, 255, 255, 255};
   8040   __d = vec_xor(__c, __d);
   8041   return (vector bool short)__builtin_altivec_vperm_4si((vector int)__b,
   8042                                                         (vector int)__a, __d);
   8043 #else
   8044   return (vector bool short)__builtin_altivec_vperm_4si((vector int)__a,
   8045                                                         (vector int)__b, __c);
   8046 #endif
   8047 }
   8048 
   8049 static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
   8050                                                      vector pixel __b,
   8051                                                      vector unsigned char __c) {
   8052 #ifdef __LITTLE_ENDIAN__
   8053   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   8054                               255, 255, 255, 255, 255, 255, 255, 255};
   8055   __d = vec_xor(__c, __d);
   8056   return (vector pixel)__builtin_altivec_vperm_4si((vector int)__b,
   8057                                                    (vector int)__a, __d);
   8058 #else
   8059   return (vector pixel)__builtin_altivec_vperm_4si((vector int)__a,
   8060                                                    (vector int)__b, __c);
   8061 #endif
   8062 }
   8063 
   8064 static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
   8065                                                    vector signed int __b,
   8066                                                    vector unsigned char __c) {
   8067 #ifdef __LITTLE_ENDIAN__
   8068   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   8069                               255, 255, 255, 255, 255, 255, 255, 255};
   8070   __d = vec_xor(__c, __d);
   8071   return (vector signed int)__builtin_altivec_vperm_4si(__b, __a, __d);
   8072 #else
   8073   return (vector signed int)__builtin_altivec_vperm_4si(__a, __b, __c);
   8074 #endif
   8075 }
   8076 
   8077 static __inline__ vector unsigned int __ATTRS_o_ai
   8078 vec_perm(vector unsigned int __a, vector unsigned int __b,
   8079          vector unsigned char __c) {
   8080 #ifdef __LITTLE_ENDIAN__
   8081   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   8082                               255, 255, 255, 255, 255, 255, 255, 255};
   8083   __d = vec_xor(__c, __d);
   8084   return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__b,
   8085                                                           (vector int)__a, __d);
   8086 #else
   8087   return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__a,
   8088                                                           (vector int)__b, __c);
   8089 #endif
   8090 }
   8091 
   8092 static __inline__ vector bool int __ATTRS_o_ai
   8093 vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
   8094 #ifdef __LITTLE_ENDIAN__
   8095   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   8096                               255, 255, 255, 255, 255, 255, 255, 255};
   8097   __d = vec_xor(__c, __d);
   8098   return (vector bool int)__builtin_altivec_vperm_4si((vector int)__b,
   8099                                                       (vector int)__a, __d);
   8100 #else
   8101   return (vector bool int)__builtin_altivec_vperm_4si((vector int)__a,
   8102                                                       (vector int)__b, __c);
   8103 #endif
   8104 }
   8105 
   8106 static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
   8107                                                      vector float __b,
   8108                                                      vector unsigned char __c) {
   8109 #ifdef __LITTLE_ENDIAN__
   8110   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   8111                               255, 255, 255, 255, 255, 255, 255, 255};
   8112   __d = vec_xor(__c, __d);
   8113   return (vector float)__builtin_altivec_vperm_4si((vector int)__b,
   8114                                                    (vector int)__a, __d);
   8115 #else
   8116   return (vector float)__builtin_altivec_vperm_4si((vector int)__a,
   8117                                                    (vector int)__b, __c);
   8118 #endif
   8119 }
   8120 
   8121 #ifdef __VSX__
   8122 static __inline__ vector long long __ATTRS_o_ai
   8123 vec_perm(vector signed long long __a, vector signed long long __b,
   8124          vector unsigned char __c) {
   8125 #ifdef __LITTLE_ENDIAN__
   8126   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   8127                               255, 255, 255, 255, 255, 255, 255, 255};
   8128   __d = vec_xor(__c, __d);
   8129   return (vector signed long long)__builtin_altivec_vperm_4si(
   8130       (vector int)__b, (vector int)__a, __d);
   8131 #else
   8132   return (vector signed long long)__builtin_altivec_vperm_4si(
   8133       (vector int)__a, (vector int)__b, __c);
   8134 #endif
   8135 }
   8136 
   8137 static __inline__ vector unsigned long long __ATTRS_o_ai
   8138 vec_perm(vector unsigned long long __a, vector unsigned long long __b,
   8139          vector unsigned char __c) {
   8140 #ifdef __LITTLE_ENDIAN__
   8141   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   8142                               255, 255, 255, 255, 255, 255, 255, 255};
   8143   __d = vec_xor(__c, __d);
   8144   return (vector unsigned long long)__builtin_altivec_vperm_4si(
   8145       (vector int)__b, (vector int)__a, __d);
   8146 #else
   8147   return (vector unsigned long long)__builtin_altivec_vperm_4si(
   8148       (vector int)__a, (vector int)__b, __c);
   8149 #endif
   8150 }
   8151 
   8152 static __inline__ vector bool long long __ATTRS_o_ai
   8153 vec_perm(vector bool long long __a, vector bool long long __b,
   8154          vector unsigned char __c) {
   8155 #ifdef __LITTLE_ENDIAN__
   8156   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   8157                               255, 255, 255, 255, 255, 255, 255, 255};
   8158   __d = vec_xor(__c, __d);
   8159   return (vector bool long long)__builtin_altivec_vperm_4si(
   8160       (vector int)__b, (vector int)__a, __d);
   8161 #else
   8162   return (vector bool long long)__builtin_altivec_vperm_4si(
   8163       (vector int)__a, (vector int)__b, __c);
   8164 #endif
   8165 }
   8166 
   8167 static __inline__ vector double __ATTRS_o_ai
   8168 vec_perm(vector double __a, vector double __b, vector unsigned char __c) {
   8169 #ifdef __LITTLE_ENDIAN__
   8170   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
   8171                               255, 255, 255, 255, 255, 255, 255, 255};
   8172   __d = vec_xor(__c, __d);
   8173   return (vector double)__builtin_altivec_vperm_4si((vector int)__b,
   8174                                                     (vector int)__a, __d);
   8175 #else
   8176   return (vector double)__builtin_altivec_vperm_4si((vector int)__a,
   8177                                                     (vector int)__b, __c);
   8178 #endif
   8179 }
   8180 #endif
   8181 
   8182 /* vec_vperm */
   8183 
   8184 static __inline__ vector signed char __ATTRS_o_ai vec_vperm(
   8185     vector signed char __a, vector signed char __b, vector unsigned char __c) {
   8186   return vec_perm(__a, __b, __c);
   8187 }
   8188 
   8189 static __inline__ vector unsigned char __ATTRS_o_ai
   8190 vec_vperm(vector unsigned char __a, vector unsigned char __b,
   8191           vector unsigned char __c) {
   8192   return vec_perm(__a, __b, __c);
   8193 }
   8194 
   8195 static __inline__ vector bool char __ATTRS_o_ai vec_vperm(
   8196     vector bool char __a, vector bool char __b, vector unsigned char __c) {
   8197   return vec_perm(__a, __b, __c);
   8198 }
   8199 
   8200 static __inline__ vector short __ATTRS_o_ai
   8201 vec_vperm(vector short __a, vector short __b, vector unsigned char __c) {
   8202   return vec_perm(__a, __b, __c);
   8203 }
   8204 
   8205 static __inline__ vector unsigned short __ATTRS_o_ai
   8206 vec_vperm(vector unsigned short __a, vector unsigned short __b,
   8207           vector unsigned char __c) {
   8208   return vec_perm(__a, __b, __c);
   8209 }
   8210 
   8211 static __inline__ vector bool short __ATTRS_o_ai vec_vperm(
   8212     vector bool short __a, vector bool short __b, vector unsigned char __c) {
   8213   return vec_perm(__a, __b, __c);
   8214 }
   8215 
   8216 static __inline__ vector pixel __ATTRS_o_ai
   8217 vec_vperm(vector pixel __a, vector pixel __b, vector unsigned char __c) {
   8218   return vec_perm(__a, __b, __c);
   8219 }
   8220 
   8221 static __inline__ vector int __ATTRS_o_ai vec_vperm(vector int __a,
   8222                                                     vector int __b,
   8223                                                     vector unsigned char __c) {
   8224   return vec_perm(__a, __b, __c);
   8225 }
   8226 
   8227 static __inline__ vector unsigned int __ATTRS_o_ai
   8228 vec_vperm(vector unsigned int __a, vector unsigned int __b,
   8229           vector unsigned char __c) {
   8230   return vec_perm(__a, __b, __c);
   8231 }
   8232 
   8233 static __inline__ vector bool int __ATTRS_o_ai
   8234 vec_vperm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
   8235   return vec_perm(__a, __b, __c);
   8236 }
   8237 
   8238 static __inline__ vector float __ATTRS_o_ai
   8239 vec_vperm(vector float __a, vector float __b, vector unsigned char __c) {
   8240   return vec_perm(__a, __b, __c);
   8241 }
   8242 
   8243 #ifdef __VSX__
   8244 static __inline__ vector long long __ATTRS_o_ai vec_vperm(
   8245     vector long long __a, vector long long __b, vector unsigned char __c) {
   8246   return vec_perm(__a, __b, __c);
   8247 }
   8248 
   8249 static __inline__ vector unsigned long long __ATTRS_o_ai
   8250 vec_vperm(vector unsigned long long __a, vector unsigned long long __b,
   8251           vector unsigned char __c) {
   8252   return vec_perm(__a, __b, __c);
   8253 }
   8254 
   8255 static __inline__ vector double __ATTRS_o_ai
   8256 vec_vperm(vector double __a, vector double __b, vector unsigned char __c) {
   8257   return vec_perm(__a, __b, __c);
   8258 }
   8259 #endif
   8260 
   8261 /* vec_re */
   8262 
   8263 static __inline__ vector float __ATTRS_o_ai vec_re(vector float __a) {
   8264 #ifdef __VSX__
   8265   return __builtin_vsx_xvresp(__a);
   8266 #else
   8267   return __builtin_altivec_vrefp(__a);
   8268 #endif
   8269 }
   8270 
   8271 #ifdef __VSX__
   8272 static __inline__ vector double __ATTRS_o_ai vec_re(vector double __a) {
   8273   return __builtin_vsx_xvredp(__a);
   8274 }
   8275 #endif
   8276 
   8277 /* vec_vrefp */
   8278 
   8279 static __inline__ vector float __attribute__((__always_inline__))
   8280 vec_vrefp(vector float __a) {
   8281   return __builtin_altivec_vrefp(__a);
   8282 }
   8283 
   8284 /* vec_rl */
   8285 
   8286 static __inline__ vector signed char __ATTRS_o_ai
   8287 vec_rl(vector signed char __a, vector unsigned char __b) {
   8288   return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
   8289 }
   8290 
   8291 static __inline__ vector unsigned char __ATTRS_o_ai
   8292 vec_rl(vector unsigned char __a, vector unsigned char __b) {
   8293   return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
   8294 }
   8295 
   8296 static __inline__ vector short __ATTRS_o_ai vec_rl(vector short __a,
   8297                                                    vector unsigned short __b) {
   8298   return __builtin_altivec_vrlh(__a, __b);
   8299 }
   8300 
   8301 static __inline__ vector unsigned short __ATTRS_o_ai
   8302 vec_rl(vector unsigned short __a, vector unsigned short __b) {
   8303   return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
   8304 }
   8305 
   8306 static __inline__ vector int __ATTRS_o_ai vec_rl(vector int __a,
   8307                                                  vector unsigned int __b) {
   8308   return __builtin_altivec_vrlw(__a, __b);
   8309 }
   8310 
   8311 static __inline__ vector unsigned int __ATTRS_o_ai
   8312 vec_rl(vector unsigned int __a, vector unsigned int __b) {
   8313   return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
   8314 }
   8315 
   8316 #ifdef __POWER8_VECTOR__
   8317 static __inline__ vector signed long long __ATTRS_o_ai
   8318 vec_rl(vector signed long long __a, vector unsigned long long __b) {
   8319   return __builtin_altivec_vrld(__a, __b);
   8320 }
   8321 
   8322 static __inline__ vector unsigned long long __ATTRS_o_ai
   8323 vec_rl(vector unsigned long long __a, vector unsigned long long __b) {
   8324   return (vector unsigned long long)__builtin_altivec_vrld(
   8325       (vector long long)__a, __b);
   8326 }
   8327 #endif
   8328 
   8329 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   8330 static __inline__ vector signed __int128 __ATTRS_o_ai
   8331 vec_rl(vector signed __int128 __a, vector unsigned __int128 __b) {
   8332   return (vector signed __int128)(((vector unsigned __int128)__b
   8333                                    << (vector unsigned __int128)__a) |
   8334                                   ((vector unsigned __int128)__b >>
   8335                                    ((__CHAR_BIT__ *
   8336                                      sizeof(vector unsigned __int128)) -
   8337                                     (vector unsigned __int128)__a)));
   8338 }
   8339 
   8340 static __inline__ vector unsigned __int128 __ATTRS_o_ai
   8341 vec_rl(vector unsigned __int128 __a, vector unsigned __int128 __b) {
   8342   return (__b << __a)|(__b >> ((__CHAR_BIT__ * sizeof(vector unsigned __int128)) - __a));
   8343 }
   8344 #endif
   8345 
   8346 /* vec_rlmi */
   8347 #ifdef __POWER9_VECTOR__
   8348 static __inline__ vector unsigned int __ATTRS_o_ai
   8349 vec_rlmi(vector unsigned int __a, vector unsigned int __b,
   8350          vector unsigned int __c) {
   8351   return __builtin_altivec_vrlwmi(__a, __c, __b);
   8352 }
   8353 
   8354 static __inline__ vector unsigned long long __ATTRS_o_ai
   8355 vec_rlmi(vector unsigned long long __a, vector unsigned long long __b,
   8356          vector unsigned long long __c) {
   8357   return __builtin_altivec_vrldmi(__a, __c, __b);
   8358 }
   8359 #endif
   8360 
   8361 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   8362 static __inline__ vector unsigned __int128 __ATTRS_o_ai
   8363 vec_rlmi(vector unsigned __int128 __a, vector unsigned __int128 __b,
   8364          vector unsigned __int128 __c) {
   8365   return __builtin_altivec_vrlqmi(__a, __c, __b);
   8366 }
   8367 
   8368 static __inline__ vector signed __int128 __ATTRS_o_ai
   8369 vec_rlmi(vector signed __int128 __a, vector signed __int128 __b,
   8370          vector signed __int128 __c) {
   8371   return (vector signed __int128)__builtin_altivec_vrlqmi(
   8372       (vector unsigned __int128)__a, (vector unsigned __int128)__c,
   8373       (vector unsigned __int128)__b);
   8374 }
   8375 #endif
   8376 
   8377 /* vec_rlnm */
   8378 #ifdef __POWER9_VECTOR__
   8379 static __inline__ vector unsigned int __ATTRS_o_ai
   8380 vec_rlnm(vector unsigned int __a, vector unsigned int __b,
   8381          vector unsigned int __c) {
   8382   vector unsigned int OneByte = { 0x8, 0x8, 0x8, 0x8 };
   8383   return __builtin_altivec_vrlwnm(__a, ((__c << OneByte) | __b));
   8384 }
   8385 
   8386 static __inline__ vector unsigned long long __ATTRS_o_ai
   8387 vec_rlnm(vector unsigned long long __a, vector unsigned long long __b,
   8388          vector unsigned long long __c) {
   8389   vector unsigned long long OneByte = { 0x8, 0x8 };
   8390   return __builtin_altivec_vrldnm(__a, ((__c << OneByte) | __b));
   8391 }
   8392 #endif
   8393 
   8394 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
   8395 static __inline__ vector unsigned __int128 __ATTRS_o_ai
   8396 vec_rlnm(vector unsigned __int128 __a, vector unsigned __int128 __b,
   8397          vector unsigned __int128 __c) {
   8398   // Merge __b and __c using an appropriate shuffle.
   8399   vector unsigned char TmpB = (vector unsigned char)__b;
   8400   vector unsigned char TmpC = (vector unsigned char)__c;
   8401   vector unsigned char MaskAndShift =
   8402 #ifdef __LITTLE_ENDIAN__
   8403       __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, -1, -1, -1, 16, 0,
   8404                               1, -1, -1, -1, -1, -1);
   8405 #else
   8406       __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, 31, 30, 15, -1,
   8407                               -1, -1, -1, -1, -1, -1, -1);
   8408 #endif
   8409    return __builtin_altivec_vrlqnm(__a, (vector unsigned __int128) MaskAndShift);
   8410 }
   8411 
   8412 static __inline__ vector signed __int128 __ATTRS_o_ai
   8413 vec_rlnm(vector signed __int128 __a, vector signed __int128 __b,
   8414          vector signed __int128 __c) {
   8415   // Merge __b and __c using an appropriate shuffle.
   8416   vector unsigned char TmpB = (vector unsigned char)__b;
   8417   vector unsigned char TmpC = (vector unsigned char)__c;
   8418   vector unsigned char MaskAndShift =
   8419 #ifdef __LITTLE_ENDIAN__
   8420       __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, -1, -1, -1, 16, 0,
   8421                               1, -1, -1, -1, -1, -1);
   8422 #else
   8423       __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, 31, 30, 15, -1,
   8424                               -1, -1, -1, -1, -1, -1, -1);
   8425 #endif
   8426   return (vector signed __int128)__builtin_altivec_vrlqnm(
   8427       (vector unsigned __int128)__a, (vector unsigned __int128)MaskAndShift);
   8428 }
   8429 #endif
   8430 
   8431 /* vec_vrlb */
   8432 
   8433 static __inline__ vector signed char __ATTRS_o_ai
   8434 vec_vrlb(vector signed char __a, vector unsigned char __b) {
   8435   return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
   8436 }
   8437 
   8438 static __inline__ vector unsigned char __ATTRS_o_ai
   8439 vec_vrlb(vector unsigned char __a, vector unsigned char __b) {
   8440   return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
   8441 }
   8442 
   8443 /* vec_vrlh */
   8444 
   8445 static __inline__ vector short __ATTRS_o_ai
   8446 vec_vrlh(vector short __a, vector unsigned short __b) {
   8447   return __builtin_altivec_vrlh(__a, __b);
   8448 }
   8449 
   8450 static __inline__ vector unsigned short __ATTRS_o_ai
   8451 vec_vrlh(vector unsigned short __a, vector unsigned short __b) {
   8452   return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
   8453 }
   8454 
   8455 /* vec_vrlw */
   8456 
   8457 static __inline__ vector int __ATTRS_o_ai vec_vrlw(vector int __a,
   8458                                                    vector unsigned int __b) {
   8459   return __builtin_altivec_vrlw(__a, __b);
   8460 }
   8461 
   8462 static __inline__ vector unsigned int __ATTRS_o_ai
   8463 vec_vrlw(vector unsigned int __a, vector unsigned int __b) {
   8464   return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
   8465 }
   8466 
   8467 /* vec_round */
   8468 
   8469 static __inline__ vector float __ATTRS_o_ai vec_round(vector float __a) {
   8470   return __builtin_altivec_vrfin(__a);
   8471 }
   8472 
   8473 #ifdef __VSX__
   8474 #ifdef __XL_COMPAT_ALTIVEC__
   8475 static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a);
   8476 static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) {
   8477   double __fpscr = __builtin_readflm();
   8478   __builtin_setrnd(0);
   8479   vector double __rounded = vec_rint(__a);
   8480   __builtin_setflm(__fpscr);
   8481   return __rounded;
   8482 }
   8483 #else
   8484 static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) {
   8485   return __builtin_vsx_xvrdpi(__a);
   8486 }
   8487 #endif
   8488 
   8489 /* vec_rint */
   8490 
   8491 static __inline__ vector float __ATTRS_o_ai vec_rint(vector float __a) {
   8492   return __builtin_vsx_xvrspic(__a);
   8493 }
   8494 
   8495 static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a) {
   8496   return __builtin_vsx_xvrdpic(__a);
   8497 }
   8498 
   8499 /* vec_roundc */
   8500 
   8501 static __inline__ vector float __ATTRS_o_ai vec_roundc(vector float __a) {
   8502   return __builtin_vsx_xvrspic(__a);
   8503 }
   8504 
   8505 static __inline__ vector double __ATTRS_o_ai vec_roundc(vector double __a) {
   8506   return __builtin_vsx_xvrdpic(__a);
   8507 }
   8508 
   8509 /* vec_nearbyint */
   8510 
   8511 static __inline__ vector float __ATTRS_o_ai vec_nearbyint(vector float __a) {
   8512   return __builtin_vsx_xvrspi(__a);
   8513 }
   8514 
   8515 static __inline__ vector double __ATTRS_o_ai vec_nearbyint(vector double __a) {
   8516   return __builtin_vsx_xvrdpi(__a);
   8517 }
   8518 #endif
   8519 
   8520 /* vec_vrfin */
   8521 
   8522 static __inline__ vector float __attribute__((__always_inline__))
   8523 vec_vrfin(vector float __a) {
   8524   return __builtin_altivec_vrfin(__a);
   8525 }
   8526 
   8527 /* vec_sqrt */
   8528 
   8529 #ifdef __VSX__
   8530 static __inline__ vector float __ATTRS_o_ai vec_sqrt(vector float __a) {
   8531   return __builtin_vsx_xvsqrtsp(__a);
   8532 }
   8533 
   8534 static __inline__ vector double __ATTRS_o_ai vec_sqrt(vector double __a) {
   8535   return __builtin_vsx_xvsqrtdp(__a);
   8536 }
   8537 #endif
   8538 
   8539 /* vec_rsqrte */
   8540 
   8541 static __inline__ vector float __ATTRS_o_ai vec_rsqrte(vector float __a) {
   8542 #ifdef __VSX__
   8543   return __builtin_vsx_xvrsqrtesp(__a);
   8544 #else
   8545   return __builtin_altivec_vrsqrtefp(__a);
   8546 #endif
   8547 }
   8548 
   8549 #ifdef __VSX__
   8550 static __inline__ vector double __ATTRS_o_ai vec_rsqrte(vector double __a) {
   8551   return __builtin_vsx_xvrsqrtedp(__a);
   8552 }
   8553 #endif
   8554 
   8555 static vector float __ATTRS_o_ai vec_rsqrt(vector float __a) {
   8556   return __builtin_ppc_rsqrtf(__a);
   8557 }
   8558 
   8559 #ifdef __VSX__
   8560 static vector double __ATTRS_o_ai vec_rsqrt(vector double __a) {
   8561   return __builtin_ppc_rsqrtd(__a);
   8562 }
   8563 #endif
   8564 
   8565 /* vec_vrsqrtefp */
   8566 
   8567 static __inline__ __vector float __attribute__((__always_inline__))
   8568 vec_vrsqrtefp(vector float __a) {
   8569   return __builtin_altivec_vrsqrtefp(__a);
   8570 }
   8571 
   8572 /* vec_xvtsqrt */
   8573 
   8574 #ifdef __VSX__
   8575 static __inline__ int __ATTRS_o_ai vec_test_swsqrt(vector double __a) {
   8576   return __builtin_vsx_xvtsqrtdp(__a);
   8577 }
   8578 
   8579 static __inline__ int __ATTRS_o_ai vec_test_swsqrts(vector float __a) {
   8580   return __builtin_vsx_xvtsqrtsp(__a);
   8581 }
   8582 #endif
   8583 
   8584 /* vec_sel */
   8585 
   8586 #define __builtin_altivec_vsel_4si vec_sel
   8587 
   8588 static __inline__ vector signed char __ATTRS_o_ai vec_sel(
   8589     vector signed char __a, vector signed char __b, vector unsigned char __c) {
   8590   return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
   8591 }
   8592 
   8593 static __inline__ vector signed char __ATTRS_o_ai
   8594 vec_sel(vector signed char __a, vector signed char __b, vector bool char __c) {
   8595   return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
   8596 }
   8597 
   8598 static __inline__ vector unsigned char __ATTRS_o_ai
   8599 vec_sel(vector unsigned char __a, vector unsigned char __b,
   8600         vector unsigned char __c) {
   8601   return (__a & ~__c) | (__b & __c);
   8602 }
   8603 
   8604 static __inline__ vector unsigned char __ATTRS_o_ai vec_sel(
   8605     vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
   8606   return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
   8607 }
   8608 
   8609 static __inline__ vector bool char __ATTRS_o_ai
   8610 vec_sel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
   8611   return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
   8612 }
   8613 
   8614 static __inline__ vector bool char __ATTRS_o_ai vec_sel(vector bool char __a,
   8615                                                         vector bool char __b,
   8616                                                         vector bool char __c) {
   8617   return (__a & ~__c) | (__b & __c);
   8618 }
   8619 
   8620 static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
   8621                                                     vector short __b,
   8622                                                     vector unsigned short __c) {
   8623   return (__a & ~(vector short)__c) | (__b & (vector short)__c);
   8624 }
   8625 
   8626 static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
   8627                                                     vector short __b,
   8628                                                     vector bool short __c) {
   8629   return (__a & ~(vector short)__c) | (__b & (vector short)__c);
   8630 }
   8631 
   8632 static __inline__ vector unsigned short __ATTRS_o_ai
   8633 vec_sel(vector unsigned short __a, vector unsigned short __b,
   8634         vector unsigned short __c) {
   8635   return (__a & ~__c) | (__b & __c);
   8636 }
   8637 
   8638 static __inline__ vector unsigned short __ATTRS_o_ai
   8639 vec_sel(vector unsigned short __a, vector unsigned short __b,
   8640         vector bool short __c) {
   8641   return (__a & ~(vector unsigned short)__c) |
   8642          (__b & (vector unsigned short)__c);
   8643 }
   8644 
   8645 static __inline__ vector bool short __ATTRS_o_ai vec_sel(
   8646     vector bool short __a, vector bool short __b, vector unsigned short __c) {
   8647   return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
   8648 }
   8649 
   8650 static __inline__ vector bool short __ATTRS_o_ai
   8651 vec_sel(vector bool short __a, vector bool short __b, vector bool short __c) {
   8652   return (__a & ~__c) | (__b & __c);
   8653 }
   8654 
   8655 static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
   8656                                                   vector int __b,
   8657                                                   vector unsigned int __c) {
   8658   return (__a & ~(vector int)__c) | (__b & (vector int)__c);
   8659 }
   8660 
   8661 static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
   8662                                                   vector int __b,
   8663                                                   vector bool int __c) {
   8664   return (__a & ~(vector int)__c) | (__b & (vector int)__c);
   8665 }
   8666 
   8667 static __inline__ vector unsigned int __ATTRS_o_ai vec_sel(
   8668     vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
   8669   return (__a & ~__c) | (__b & __c);
   8670 }
   8671 
   8672 static __inline__ vector unsigned int __ATTRS_o_ai
   8673 vec_sel(vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
   8674   return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
   8675 }
   8676 
   8677 static __inline__ vector bool int __ATTRS_o_ai
   8678 vec_sel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
   8679   return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
   8680 }
   8681 
   8682 static __inline__ vector bool int __ATTRS_o_ai vec_sel(vector bool int __a,
   8683                                                        vector bool int __b,
   8684                                                        vector bool int __c) {
   8685   return (__a & ~__c) | (__b & __c);
   8686 }
   8687 
   8688 static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
   8689                                                     vector float __b,
   8690                                                     vector unsigned int __c) {
   8691   vector int __res = ((vector int)__a & ~(vector int)__c) |
   8692                      ((vector int)__b & (vector int)__c);
   8693   return (vector float)__res;
   8694 }
   8695 
   8696 static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
   8697                                                     vector float __b,
   8698                                                     vector bool int __c) {
   8699   vector int __res = ((vector int)__a & ~(vector int)__c) |
   8700                      ((vector int)__b & (vector int)__c);
   8701   return (vector float)__res;
   8702 }
   8703 
   8704 #ifdef __VSX__
   8705 static __inline__ vector double __ATTRS_o_ai
   8706 vec_sel(vector double __a, vector double __b, vector bool long long __c) {
   8707   vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
   8708                            ((vector long long)__b & (vector long long)__c);
   8709   return (vector double)__res;
   8710 }
   8711 
   8712 static __inline__ vector double __ATTRS_o_ai
   8713 vec_sel(vector double __a, vector double __b, vector unsigned long long __c) {
   8714   vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
   8715                            ((vector long long)__b & (vector long long)__c);
   8716   return (vector double)__res;
   8717 }
   8718 
   8719 static __inline__ vector bool long long __ATTRS_o_ai
   8720 vec_sel(vector bool long long __a, vector bool long long __b,
   8721         vector bool long long __c) {
   8722   return (__a & ~__c) | (__b & __c);
   8723 }
   8724 
   8725 static __inline__ vector bool long long __ATTRS_o_ai
   8726 vec_sel(vector bool long long __a, vector bool long long __b,
   8727         vector unsigned long long __c) {
   8728   return (__a & ~(vector bool long long)__c) |
   8729          (__b & (vector bool long long)__c);
   8730 }
   8731 
   8732 static __inline__ vector signed long long __ATTRS_o_ai
   8733 vec_sel(vector signed long long __a, vector signed long long __b,
   8734         vector bool long long __c) {
   8735   return (__a & ~(vector signed long long)__c) |
   8736          (__b & (vector signed long long)__c);
   8737 }
   8738 
   8739 static __inline__ vector signed long long __ATTRS_o_ai
   8740 vec_sel(vector signed long long __a, vector signed long long __b,
   8741         vector unsigned long long __c) {
   8742   return (__a & ~(vector signed long long)__c) |
   8743          (__b & (vector signed long long)__c);
   8744 }
   8745 
   8746 static __inline__ vector unsigned long long __ATTRS_o_ai
   8747 vec_sel(vector unsigned long long __a, vector unsigned long long __b,
   8748         vector bool long long __c) {
   8749   return (__a & ~(vector unsigned long long)__c) |
   8750          (__b & (vector unsigned long long)__c);
   8751 }
   8752 
   8753 static __inline__ vector unsigned long long __ATTRS_o_ai
   8754 vec_sel(vector unsigned long long __a, vector unsigned long long __b,
   8755         vector unsigned long long __c) {
   8756   return (__a & ~__c) | (__b & __c);
   8757 }
   8758 #endif
   8759 
   8760 /* vec_vsel */
   8761 
   8762 static __inline__ vector signed char __ATTRS_o_ai vec_vsel(
   8763     vector signed char __a, vector signed char __b, vector unsigned char __c) {
   8764   return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
   8765 }
   8766 
   8767 static __inline__ vector signed char __ATTRS_o_ai
   8768 vec_vsel(vector signed char __a, vector signed char __b, vector bool char __c) {
   8769   return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
   8770 }
   8771 
   8772 static __inline__ vector unsigned char __ATTRS_o_ai
   8773 vec_vsel(vector unsigned char __a, vector unsigned char __b,
   8774          vector unsigned char __c) {
   8775   return (__a & ~__c) | (__b & __c);
   8776 }
   8777 
   8778 static __inline__ vector unsigned char __ATTRS_o_ai vec_vsel(
   8779     vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
   8780   return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
   8781 }
   8782 
   8783 static __inline__ vector bool char __ATTRS_o_ai
   8784 vec_vsel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
   8785   return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
   8786 }
   8787 
   8788 static __inline__ vector bool char __ATTRS_o_ai vec_vsel(vector bool char __a,
   8789                                                          vector bool char __b,
   8790                                                          vector bool char __c) {
   8791   return (__a & ~__c) | (__b & __c);
   8792 }
   8793 
   8794 static __inline__ vector short __ATTRS_o_ai
   8795 vec_vsel(vector short __a, vector short __b, vector unsigned short __c) {
   8796   return (__a & ~(vector short)__c) | (__b & (vector short)__c);
   8797 }
   8798 
   8799 static __inline__ vector short __ATTRS_o_ai vec_vsel(vector short __a,
   8800                                                      vector short __b,
   8801                                                      vector bool short __c) {
   8802   return (__a & ~(vector short)__c) | (__b & (vector short)__c);
   8803 }
   8804 
   8805 static __inline__ vector unsigned short __ATTRS_o_ai
   8806 vec_vsel(vector unsigned short __a, vector unsigned short __b,
   8807          vector unsigned short __c) {
   8808   return (__a & ~__c) | (__b & __c);
   8809 }
   8810 
   8811 static __inline__ vector unsigned short __ATTRS_o_ai
   8812 vec_vsel(vector unsigned short __a, vector unsigned short __b,
   8813          vector bool short __c) {
   8814   return (__a & ~(vector unsigned short)__c) |
   8815          (__b & (vector unsigned short)__c);
   8816 }
   8817 
   8818 static __inline__ vector bool short __ATTRS_o_ai vec_vsel(
   8819     vector bool short __a, vector bool short __b, vector unsigned short __c) {
   8820   return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
   8821 }
   8822 
   8823 static __inline__ vector bool short __ATTRS_o_ai
   8824 vec_vsel(vector bool short __a, vector bool short __b, vector bool short __c) {
   8825   return (__a & ~__c) | (__b & __c);
   8826 }
   8827 
   8828 static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
   8829                                                    vector int __b,
   8830                                                    vector unsigned int __c) {
   8831   return (__a & ~(vector int)__c) | (__b & (vector int)__c);
   8832 }
   8833 
   8834 static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
   8835                                                    vector int __b,
   8836                                                    vector bool int __c) {
   8837   return (__a & ~(vector int)__c) | (__b & (vector int)__c);
   8838 }
   8839 
   8840 static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
   8841     vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
   8842   return (__a & ~__c) | (__b & __c);
   8843 }
   8844 
   8845 static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
   8846     vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
   8847   return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
   8848 }
   8849 
   8850 static __inline__ vector bool int __ATTRS_o_ai
   8851 vec_vsel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
   8852   return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
   8853 }
   8854 
   8855 static __inline__ vector bool int __ATTRS_o_ai vec_vsel(vector bool int __a,
   8856                                                         vector bool int __b,
   8857                                                         vector bool int __c) {
   8858   return (__a & ~__c) | (__b & __c);
   8859 }
   8860 
   8861 static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
   8862                                                      vector float __b,
   8863                                                      vector unsigned int __c) {
   8864   vector int __res = ((vector int)__a & ~(vector int)__c) |
   8865                      ((vector int)__b & (vector int)__c);
   8866   return (vector float)__res;
   8867 }
   8868 
   8869 static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
   8870                                                      vector float __b,
   8871                                                      vector bool int __c) {
   8872   vector int __res = ((vector int)__a & ~(vector int)__c) |
   8873                      ((vector int)__b & (vector int)__c);
   8874   return (vector float)__res;
   8875 }
   8876 
   8877 /* vec_sl */
   8878 
   8879 // vec_sl does modulo arithmetic on __b first, so __b is allowed to be more
   8880 // than the length of __a.
   8881 static __inline__ vector unsigned char __ATTRS_o_ai
   8882 vec_sl(vector unsigned char __a, vector unsigned char __b) {
   8883   return __a << (__b %
   8884                  (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));
   8885 }
   8886 
   8887 static __inline__ vector signed char __ATTRS_o_ai
   8888 vec_sl(vector signed char __a, vector unsigned char __b) {
   8889   return (vector signed char)vec_sl((vector unsigned char)__a, __b);
   8890 }
   8891 
   8892 static __inline__ vector unsigned short __ATTRS_o_ai
   8893 vec_sl(vector unsigned short __a, vector unsigned short __b) {
   8894   return __a << (__b % (vector unsigned short)(sizeof(unsigned short) *
   8895                                                __CHAR_BIT__));
   8896 }
   8897 
   8898 static __inline__ vector short __ATTRS_o_ai vec_sl(vector short __a,
   8899                                                    vector unsigned short __b) {
   8900   return (vector short)vec_sl((vector unsigned short)__a, __b);
   8901 }
   8902 
   8903 static __inline__ vector unsigned int __ATTRS_o_ai
   8904 vec_sl(vector unsigned int __a, vector unsigned int __b) {
   8905   return __a << (__b %
   8906                  (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));
   8907 }
   8908 
   8909 static __inline__ vector int __ATTRS_o_ai vec_sl(vector int __a,
   8910                                                  vector unsigned int __b) {
   8911   return (vector int)vec_sl((vector unsigned int)__a, __b);
   8912 }
   8913 
   8914 #ifdef __POWER8_VECTOR__
   8915 static __inline__ vector unsigned long long __ATTRS_o_ai
   8916 vec_sl(vector unsigned long long __a, vector unsigned long long __b) {
   8917   return __a << (__b % (vector unsigned long long)(sizeof(unsigned long long) *
   8918                                                    __CHAR_BIT__));
   8919 }
   8920 
   8921 static __inline__ vector long long __ATTRS_o_ai
   8922 vec_sl(vector long long __a, vector unsigned long long __b) {
   8923   return (vector long long)vec_sl((vector unsigned long long)__a, __b);
   8924 }
   8925 #elif defined(__VSX__)
   8926 static __inline__ vector unsigned char __ATTRS_o_ai
   8927 vec_vspltb(vector unsigned char __a, unsigned char __b);
   8928 static __inline__ vector unsigned long long __ATTRS_o_ai
   8929 vec_sl(vector unsigned long long __a, vector unsigned long long __b) {
   8930   __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
   8931 
   8932   // Big endian element one (the right doubleword) can be left shifted as-is.
   8933   // The other element needs to be swapped into the right doubleword and
   8934   // shifted. Then the right doublewords of the two result vectors are merged.
   8935   vector signed long long __rightelt =
   8936       (vector signed long long)__builtin_altivec_vslo((vector signed int)__a,
   8937                                                       (vector signed int)__b);
   8938 #ifdef __LITTLE_ENDIAN__
   8939   __rightelt = (vector signed long long)__builtin_altivec_vsl(
   8940       (vector signed int)__rightelt,
   8941       (vector signed int)vec_vspltb((vector unsigned char)__b, 0));
   8942 #else
   8943   __rightelt = (vector signed long long)__builtin_altivec_vsl(
   8944       (vector signed int)__rightelt,
   8945       (vector signed int)vec_vspltb((vector unsigned char)__b, 15));
   8946 #endif
   8947   __a = __builtin_shufflevector(__a, __a, 1, 0);
   8948   __b = __builtin_shufflevector(__b, __b, 1, 0);
   8949   vector signed long long __leftelt =
   8950       (vector signed long long)__builtin_altivec_vslo((vector signed int)__a,
   8951                                                       (vector signed int)__b);
   8952 #ifdef __LITTLE_ENDIAN__
   8953   __leftelt = (vector signed long long)__builtin_altivec_vsl(
   8954       (vector signed int)__leftelt,
   8955       (vector signed int)vec_vspltb((vector unsigned char)__b, 0));
   8956   return (vector unsigned long long)__builtin_shufflevector(__rightelt,
   8957                                                             __leftelt, 0, 2);
   8958 #else
   8959   __leftelt = (vector signed long long)__builtin_altivec_vsl(
   8960       (vector signed int)__leftelt,
   8961       (vector signed int)vec_vspltb((vector unsigned char)__b, 15));
   8962   return (vector unsigned long long)__builtin_shufflevector(__leftelt,
   8963                                                             __rightelt, 1, 3);
   8964 #endif
   8965 }
   8966 
   8967 static __inline__ vector long long __ATTRS_o_ai
   8968 vec_sl(vector long long __a, vector unsigned long long __b) {
   8969   return (vector long long)vec_sl((vector unsigned long long)__a, __b);
   8970 }
   8971 #endif /* __VSX__ */
   8972 
   8973 /* vec_vslb */
   8974 
   8975 #define __builtin_altivec_vslb vec_vslb
   8976 
   8977 static __inline__ vector signed char __ATTRS_o_ai
   8978 vec_vslb(vector signed char __a, vector unsigned char __b) {
   8979   return vec_sl(__a, __b);
   8980 }
   8981 
   8982 static __inline__ vector unsigned char __ATTRS_o_ai
   8983 vec_vslb(vector unsigned char __a, vector unsigned char __b) {
   8984   return vec_sl(__a, __b);
   8985 }
   8986 
   8987 /* vec_vslh */
   8988 
   8989 #define __builtin_altivec_vslh vec_vslh
   8990 
   8991 static __inline__ vector short __ATTRS_o_ai
   8992 vec_vslh(vector short __a, vector unsigned short __b) {
   8993   return vec_sl(__a, __b);
   8994 }
   8995 
   8996 static __inline__ vector unsigned short __ATTRS_o_ai
   8997 vec_vslh(vector unsigned short __a, vector unsigned short __b) {
   8998   return vec_sl(__a, __b);
   8999 }
   9000 
   9001 /* vec_vslw */
   9002 
   9003 #define __builtin_altivec_vslw vec_vslw
   9004 
   9005 static __inline__ vector int __ATTRS_o_ai vec_vslw(vector int __a,
   9006                                                    vector unsigned int __b) {
   9007   return vec_sl(__a, __b);
   9008 }
   9009 
   9010 static __inline__ vector unsigned int __ATTRS_o_ai
   9011 vec_vslw(vector unsigned int __a, vector unsigned int __b) {
   9012   return vec_sl(__a, __b);
   9013 }
   9014 
   9015 /* vec_sld */
   9016 
   9017 #define __builtin_altivec_vsldoi_4si vec_sld
   9018 
   9019 static __inline__ vector signed char __ATTRS_o_ai vec_sld(
   9020     vector signed char __a, vector signed char __b, unsigned const int __c) {
   9021   unsigned char __d = __c & 0x0F;
   9022 #ifdef __LITTLE_ENDIAN__
   9023   return vec_perm(
   9024       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9025                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9026                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9027                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9028 #else
   9029   return vec_perm(
   9030       __a, __b,
   9031       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9032                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9033                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9034 #endif
   9035 }
   9036 
   9037 static __inline__ vector unsigned char __ATTRS_o_ai
   9038 vec_sld(vector unsigned char __a, vector unsigned char __b,
   9039         unsigned const int __c) {
   9040   unsigned char __d = __c & 0x0F;
   9041 #ifdef __LITTLE_ENDIAN__
   9042   return vec_perm(
   9043       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9044                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9045                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9046                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9047 #else
   9048   return vec_perm(
   9049       __a, __b,
   9050       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9051                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9052                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9053 #endif
   9054 }
   9055 
   9056 static __inline__ vector bool char __ATTRS_o_ai
   9057 vec_sld(vector bool char __a, vector bool char __b, unsigned const int __c) {
   9058   unsigned char __d = __c & 0x0F;
   9059 #ifdef __LITTLE_ENDIAN__
   9060   return vec_perm(
   9061       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9062                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9063                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9064                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9065 #else
   9066   return vec_perm(
   9067       __a, __b,
   9068       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9069                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9070                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9071 #endif
   9072 }
   9073 
   9074 static __inline__ vector signed short __ATTRS_o_ai vec_sld(
   9075     vector signed short __a, vector signed short __b, unsigned const int __c) {
   9076   unsigned char __d = __c & 0x0F;
   9077 #ifdef __LITTLE_ENDIAN__
   9078   return vec_perm(
   9079       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9080                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9081                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9082                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9083 #else
   9084   return vec_perm(
   9085       __a, __b,
   9086       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9087                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9088                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9089 #endif
   9090 }
   9091 
   9092 static __inline__ vector unsigned short __ATTRS_o_ai
   9093 vec_sld(vector unsigned short __a, vector unsigned short __b,
   9094         unsigned const int __c) {
   9095   unsigned char __d = __c & 0x0F;
   9096 #ifdef __LITTLE_ENDIAN__
   9097   return vec_perm(
   9098       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9099                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9100                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9101                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9102 #else
   9103   return vec_perm(
   9104       __a, __b,
   9105       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9106                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9107                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9108 #endif
   9109 }
   9110 
   9111 static __inline__ vector bool short __ATTRS_o_ai
   9112 vec_sld(vector bool short __a, vector bool short __b, unsigned const int __c) {
   9113   unsigned char __d = __c & 0x0F;
   9114 #ifdef __LITTLE_ENDIAN__
   9115   return vec_perm(
   9116       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9117                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9118                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9119                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9120 #else
   9121   return vec_perm(
   9122       __a, __b,
   9123       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9124                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9125                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9126 #endif
   9127 }
   9128 
   9129 static __inline__ vector pixel __ATTRS_o_ai vec_sld(vector pixel __a,
   9130                                                     vector pixel __b,
   9131                                                     unsigned const int __c) {
   9132   unsigned char __d = __c & 0x0F;
   9133 #ifdef __LITTLE_ENDIAN__
   9134   return vec_perm(
   9135       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9136                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9137                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9138                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9139 #else
   9140   return vec_perm(
   9141       __a, __b,
   9142       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9143                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9144                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9145 #endif
   9146 }
   9147 
   9148 static __inline__ vector signed int __ATTRS_o_ai
   9149 vec_sld(vector signed int __a, vector signed int __b, unsigned const int __c) {
   9150   unsigned char __d = __c & 0x0F;
   9151 #ifdef __LITTLE_ENDIAN__
   9152   return vec_perm(
   9153       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9154                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9155                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9156                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9157 #else
   9158   return vec_perm(
   9159       __a, __b,
   9160       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9161                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9162                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9163 #endif
   9164 }
   9165 
   9166 static __inline__ vector unsigned int __ATTRS_o_ai vec_sld(
   9167     vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {
   9168   unsigned char __d = __c & 0x0F;
   9169 #ifdef __LITTLE_ENDIAN__
   9170   return vec_perm(
   9171       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9172                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9173                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9174                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9175 #else
   9176   return vec_perm(
   9177       __a, __b,
   9178       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9179                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9180                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9181 #endif
   9182 }
   9183 
   9184 static __inline__ vector bool int __ATTRS_o_ai vec_sld(vector bool int __a,
   9185                                                        vector bool int __b,
   9186                                                        unsigned const int __c) {
   9187   unsigned char __d = __c & 0x0F;
   9188 #ifdef __LITTLE_ENDIAN__
   9189   return vec_perm(
   9190       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9191                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9192                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9193                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9194 #else
   9195   return vec_perm(
   9196       __a, __b,
   9197       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9198                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9199                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9200 #endif
   9201 }
   9202 
   9203 static __inline__ vector float __ATTRS_o_ai vec_sld(vector float __a,
   9204                                                     vector float __b,
   9205                                                     unsigned const int __c) {
   9206   unsigned char __d = __c & 0x0F;
   9207 #ifdef __LITTLE_ENDIAN__
   9208   return vec_perm(
   9209       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9210                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9211                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9212                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9213 #else
   9214   return vec_perm(
   9215       __a, __b,
   9216       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9217                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9218                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9219 #endif
   9220 }
   9221 
   9222 #ifdef __VSX__
   9223 static __inline__ vector bool long long __ATTRS_o_ai
   9224 vec_sld(vector bool long long __a, vector bool long long __b,
   9225         unsigned const int __c) {
   9226   unsigned char __d = __c & 0x0F;
   9227 #ifdef __LITTLE_ENDIAN__
   9228   return vec_perm(
   9229       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9230                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9231                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9232                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9233 #else
   9234   return vec_perm(
   9235       __a, __b,
   9236       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9237                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9238                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9239 #endif
   9240 }
   9241 
   9242 static __inline__ vector signed long long __ATTRS_o_ai
   9243 vec_sld(vector signed long long __a, vector signed long long __b,
   9244         unsigned const int __c) {
   9245   unsigned char __d = __c & 0x0F;
   9246 #ifdef __LITTLE_ENDIAN__
   9247   return vec_perm(
   9248       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9249                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9250                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9251                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9252 #else
   9253   return vec_perm(
   9254       __a, __b,
   9255       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9256                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9257                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9258 #endif
   9259 }
   9260 
   9261 static __inline__ vector unsigned long long __ATTRS_o_ai
   9262 vec_sld(vector unsigned long long __a, vector unsigned long long __b,
   9263         unsigned const int __c) {
   9264   unsigned char __d = __c & 0x0F;
   9265 #ifdef __LITTLE_ENDIAN__
   9266   return vec_perm(
   9267       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9268                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9269                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9270                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9271 #else
   9272   return vec_perm(
   9273       __a, __b,
   9274       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9275                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9276                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9277 #endif
   9278 }
   9279 
   9280 static __inline__ vector double __ATTRS_o_ai vec_sld(vector double __a,
   9281                                                      vector double __b,
   9282                                                      unsigned const int __c) {
   9283   unsigned char __d = __c & 0x0F;
   9284 #ifdef __LITTLE_ENDIAN__
   9285   return vec_perm(
   9286       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9287                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9288                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9289                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9290 #else
   9291   return vec_perm(
   9292       __a, __b,
   9293       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9294                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9295                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9296 #endif
   9297 }
   9298 #endif
   9299 
   9300 /* vec_sldw */
   9301 static __inline__ vector signed char __ATTRS_o_ai vec_sldw(
   9302     vector signed char __a, vector signed char __b, unsigned const int __c) {
   9303   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
   9304 }
   9305 
   9306 static __inline__ vector unsigned char __ATTRS_o_ai
   9307 vec_sldw(vector unsigned char __a, vector unsigned char __b,
   9308          unsigned const int __c) {
   9309   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
   9310 }
   9311 
   9312 static __inline__ vector signed short __ATTRS_o_ai vec_sldw(
   9313     vector signed short __a, vector signed short __b, unsigned const int __c) {
   9314   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
   9315 }
   9316 
   9317 static __inline__ vector unsigned short __ATTRS_o_ai
   9318 vec_sldw(vector unsigned short __a, vector unsigned short __b,
   9319          unsigned const int __c) {
   9320   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
   9321 }
   9322 
   9323 static __inline__ vector signed int __ATTRS_o_ai
   9324 vec_sldw(vector signed int __a, vector signed int __b, unsigned const int __c) {
   9325   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
   9326 }
   9327 
   9328 static __inline__ vector unsigned int __ATTRS_o_ai vec_sldw(
   9329     vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {
   9330   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
   9331 }
   9332 
   9333 static __inline__ vector float __ATTRS_o_ai vec_sldw(
   9334     vector float __a, vector float __b, unsigned const int __c) {
   9335   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
   9336 }
   9337 
   9338 #ifdef __VSX__
   9339 static __inline__ vector signed long long __ATTRS_o_ai
   9340 vec_sldw(vector signed long long __a, vector signed long long __b,
   9341          unsigned const int __c) {
   9342   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
   9343 }
   9344 
   9345 static __inline__ vector unsigned long long __ATTRS_o_ai
   9346 vec_sldw(vector unsigned long long __a, vector unsigned long long __b,
   9347          unsigned const int __c) {
   9348   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
   9349 }
   9350 
   9351 static __inline__ vector double __ATTRS_o_ai vec_sldw(
   9352     vector double __a, vector double __b, unsigned const int __c) {
   9353   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
   9354 }
   9355 #endif
   9356 
   9357 #ifdef __POWER9_VECTOR__
   9358 /* vec_slv */
   9359 static __inline__ vector unsigned char __ATTRS_o_ai
   9360 vec_slv(vector unsigned char __a, vector unsigned char __b) {
   9361   return __builtin_altivec_vslv(__a, __b);
   9362 }
   9363 
   9364 /* vec_srv */
   9365 static __inline__ vector unsigned char __ATTRS_o_ai
   9366 vec_srv(vector unsigned char __a, vector unsigned char __b) {
   9367   return __builtin_altivec_vsrv(__a, __b);
   9368 }
   9369 #endif
   9370 
   9371 /* vec_vsldoi */
   9372 
   9373 static __inline__ vector signed char __ATTRS_o_ai
   9374 vec_vsldoi(vector signed char __a, vector signed char __b, unsigned char __c) {
   9375   unsigned char __d = __c & 0x0F;
   9376 #ifdef __LITTLE_ENDIAN__
   9377   return vec_perm(
   9378       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9379                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9380                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9381                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9382 #else
   9383   return vec_perm(
   9384       __a, __b,
   9385       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9386                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9387                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9388 #endif
   9389 }
   9390 
   9391 static __inline__ vector unsigned char __ATTRS_o_ai vec_vsldoi(
   9392     vector unsigned char __a, vector unsigned char __b, unsigned char __c) {
   9393   unsigned char __d = __c & 0x0F;
   9394 #ifdef __LITTLE_ENDIAN__
   9395   return vec_perm(
   9396       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9397                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9398                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9399                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9400 #else
   9401   return vec_perm(
   9402       __a, __b,
   9403       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9404                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9405                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9406 #endif
   9407 }
   9408 
   9409 static __inline__ vector short __ATTRS_o_ai vec_vsldoi(vector short __a,
   9410                                                        vector short __b,
   9411                                                        unsigned char __c) {
   9412   unsigned char __d = __c & 0x0F;
   9413 #ifdef __LITTLE_ENDIAN__
   9414   return vec_perm(
   9415       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9416                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9417                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9418                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9419 #else
   9420   return vec_perm(
   9421       __a, __b,
   9422       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9423                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9424                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9425 #endif
   9426 }
   9427 
   9428 static __inline__ vector unsigned short __ATTRS_o_ai vec_vsldoi(
   9429     vector unsigned short __a, vector unsigned short __b, unsigned char __c) {
   9430   unsigned char __d = __c & 0x0F;
   9431 #ifdef __LITTLE_ENDIAN__
   9432   return vec_perm(
   9433       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9434                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9435                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9436                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9437 #else
   9438   return vec_perm(
   9439       __a, __b,
   9440       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9441                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9442                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9443 #endif
   9444 }
   9445 
   9446 static __inline__ vector pixel __ATTRS_o_ai vec_vsldoi(vector pixel __a,
   9447                                                        vector pixel __b,
   9448                                                        unsigned char __c) {
   9449   unsigned char __d = __c & 0x0F;
   9450 #ifdef __LITTLE_ENDIAN__
   9451   return vec_perm(
   9452       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9453                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9454                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9455                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9456 #else
   9457   return vec_perm(
   9458       __a, __b,
   9459       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9460                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9461                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9462 #endif
   9463 }
   9464 
   9465 static __inline__ vector int __ATTRS_o_ai vec_vsldoi(vector int __a,
   9466                                                      vector int __b,
   9467                                                      unsigned char __c) {
   9468   unsigned char __d = __c & 0x0F;
   9469 #ifdef __LITTLE_ENDIAN__
   9470   return vec_perm(
   9471       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9472                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9473                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9474                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9475 #else
   9476   return vec_perm(
   9477       __a, __b,
   9478       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9479                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9480                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9481 #endif
   9482 }
   9483 
   9484 static __inline__ vector unsigned int __ATTRS_o_ai vec_vsldoi(
   9485     vector unsigned int __a, vector unsigned int __b, unsigned char __c) {
   9486   unsigned char __d = __c & 0x0F;
   9487 #ifdef __LITTLE_ENDIAN__
   9488   return vec_perm(
   9489       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9490                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9491                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9492                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9493 #else
   9494   return vec_perm(
   9495       __a, __b,
   9496       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9497                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9498                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9499 #endif
   9500 }
   9501 
   9502 static __inline__ vector float __ATTRS_o_ai vec_vsldoi(vector float __a,
   9503                                                        vector float __b,
   9504                                                        unsigned char __c) {
   9505   unsigned char __d = __c & 0x0F;
   9506 #ifdef __LITTLE_ENDIAN__
   9507   return vec_perm(
   9508       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
   9509                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
   9510                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
   9511                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
   9512 #else
   9513   return vec_perm(
   9514       __a, __b,
   9515       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
   9516                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
   9517                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
   9518 #endif
   9519 }
   9520 
   9521 /* vec_sll */
   9522 
   9523 static __inline__ vector signed char __ATTRS_o_ai
   9524 vec_sll(vector signed char __a, vector unsigned char __b) {
   9525   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
   9526                                                    (vector int)__b);
   9527 }
   9528 
   9529 static __inline__ vector signed char __ATTRS_o_ai
   9530 vec_sll(vector signed char __a, vector unsigned short __b) {
   9531   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
   9532                                                    (vector int)__b);
   9533 }
   9534 
   9535 static __inline__ vector signed char __ATTRS_o_ai
   9536 vec_sll(vector signed char __a, vector unsigned int __b) {
   9537   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
   9538                                                    (vector int)__b);
   9539 }
   9540 
   9541 static __inline__ vector unsigned char __ATTRS_o_ai
   9542 vec_sll(vector unsigned char __a, vector unsigned char __b) {
   9543   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
   9544                                                      (vector int)__b);
   9545 }
   9546 
   9547 static __inline__ vector unsigned char __ATTRS_o_ai
   9548 vec_sll(vector unsigned char __a, vector unsigned short __b) {
   9549   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
   9550                                                      (vector int)__b);
   9551 }
   9552 
   9553 static __inline__ vector unsigned char __ATTRS_o_ai
   9554 vec_sll(vector unsigned char __a, vector unsigned int __b) {
   9555   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
   9556                                                      (vector int)__b);
   9557 }
   9558 
   9559 static __inline__ vector bool char __ATTRS_o_ai
   9560 vec_sll(vector bool char __a, vector unsigned char __b) {
   9561   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
   9562                                                  (vector int)__b);
   9563 }
   9564 
   9565 static __inline__ vector bool char __ATTRS_o_ai
   9566 vec_sll(vector bool char __a, vector unsigned short __b) {
   9567   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
   9568                                                  (vector int)__b);
   9569 }
   9570 
   9571 static __inline__ vector bool char __ATTRS_o_ai
   9572 vec_sll(vector bool char __a, vector unsigned int __b) {
   9573   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
   9574                                                  (vector int)__b);
   9575 }
   9576 
   9577 static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
   9578                                                     vector unsigned char __b) {
   9579   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
   9580 }
   9581 
   9582 static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
   9583                                                     vector unsigned short __b) {
   9584   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
   9585 }
   9586 
   9587 static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
   9588                                                     vector unsigned int __b) {
   9589   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
   9590 }
   9591 
   9592 static __inline__ vector unsigned short __ATTRS_o_ai
   9593 vec_sll(vector unsigned short __a, vector unsigned char __b) {
   9594   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
   9595                                                       (vector int)__b);
   9596 }
   9597 
   9598 static __inline__ vector unsigned short __ATTRS_o_ai
   9599 vec_sll(vector unsigned short __a, vector unsigned short __b) {
   9600   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
   9601                                                       (vector int)__b);
   9602 }
   9603 
   9604 static __inline__ vector unsigned short __ATTRS_o_ai
   9605 vec_sll(vector unsigned short __a, vector unsigned int __b) {
   9606   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
   9607                                                       (vector int)__b);
   9608 }
   9609 
   9610 static __inline__ vector bool short __ATTRS_o_ai
   9611 vec_sll(vector bool short __a, vector unsigned char __b) {
   9612   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
   9613                                                   (vector int)__b);
   9614 }
   9615 
   9616 static __inline__ vector bool short __ATTRS_o_ai
   9617 vec_sll(vector bool short __a, vector unsigned short __b) {
   9618   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
   9619                                                   (vector int)__b);
   9620 }
   9621 
   9622 static __inline__ vector bool short __ATTRS_o_ai
   9623 vec_sll(vector bool short __a, vector unsigned int __b) {
   9624   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
   9625                                                   (vector int)__b);
   9626 }
   9627 
   9628 static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
   9629                                                     vector unsigned char __b) {
   9630   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
   9631 }
   9632 
   9633 static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
   9634                                                     vector unsigned short __b) {
   9635   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
   9636 }
   9637 
   9638 static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
   9639                                                     vector unsigned int __b) {
   9640   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
   9641 }
   9642 
   9643 static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
   9644                                                   vector unsigned char __b) {
   9645   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
   9646 }
   9647 
   9648 static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
   9649                                                   vector unsigned short __b) {
   9650   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
   9651 }
   9652 
   9653 static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
   9654                                                   vector unsigned int __b) {
   9655   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
   9656 }
   9657 
   9658 static __inline__ vector unsigned int __ATTRS_o_ai
   9659 vec_sll(vector unsigned int __a, vector unsigned char __b) {
   9660   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
   9661                                                     (vector int)__b);
   9662 }
   9663 
   9664 static __inline__ vector unsigned int __ATTRS_o_ai
   9665 vec_sll(vector unsigned int __a, vector unsigned short __b) {
   9666   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
   9667                                                     (vector int)__b);
   9668 }
   9669 
   9670 static __inline__ vector unsigned int __ATTRS_o_ai
   9671 vec_sll(vector unsigned int __a, vector unsigned int __b) {
   9672   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
   9673                                                     (vector int)__b);
   9674 }
   9675 
   9676 static __inline__ vector bool int __ATTRS_o_ai
   9677 vec_sll(vector bool int __a, vector unsigned char __b) {
   9678   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
   9679                                                 (vector int)__b);
   9680 }
   9681 
   9682 static __inline__ vector bool int __ATTRS_o_ai
   9683 vec_sll(vector bool int __a, vector unsigned short __b) {
   9684   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
   9685                                                 (vector int)__b);
   9686 }
   9687 
   9688 static __inline__ vector bool int __ATTRS_o_ai
   9689 vec_sll(vector bool int __a, vector unsigned int __b) {
   9690   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
   9691                                                 (vector int)__b);
   9692 }
   9693 
   9694 #ifdef __VSX__
   9695 static __inline__ vector signed long long __ATTRS_o_ai
   9696 vec_sll(vector signed long long __a, vector unsigned char __b) {
   9697   return (vector signed long long)__builtin_altivec_vsl((vector int)__a,
   9698                                                         (vector int)__b);
   9699 }
   9700 
   9701 static __inline__ vector unsigned long long __ATTRS_o_ai
   9702 vec_sll(vector unsigned long long __a, vector unsigned char __b) {
   9703   return (vector unsigned long long)__builtin_altivec_vsl((vector int)__a,
   9704                                                           (vector int)__b);
   9705 }
   9706 #endif
   9707 
   9708 /* vec_vsl */
   9709 
   9710 static __inline__ vector signed char __ATTRS_o_ai
   9711 vec_vsl(vector signed char __a, vector unsigned char __b) {
   9712   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
   9713                                                    (vector int)__b);
   9714 }
   9715 
   9716 static __inline__ vector signed char __ATTRS_o_ai
   9717 vec_vsl(vector signed char __a, vector unsigned short __b) {
   9718   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
   9719                                                    (vector int)__b);
   9720 }
   9721 
   9722 static __inline__ vector signed char __ATTRS_o_ai
   9723 vec_vsl(vector signed char __a, vector unsigned int __b) {
   9724   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
   9725                                                    (vector int)__b);
   9726 }
   9727 
   9728 static __inline__ vector unsigned char __ATTRS_o_ai
   9729 vec_vsl(vector unsigned char __a, vector unsigned char __b) {
   9730   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
   9731                                                      (vector int)__b);
   9732 }
   9733 
   9734 static __inline__ vector unsigned char __ATTRS_o_ai
   9735 vec_vsl(vector unsigned char __a, vector unsigned short __b) {
   9736   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
   9737                                                      (vector int)__b);
   9738 }
   9739 
   9740 static __inline__ vector unsigned char __ATTRS_o_ai
   9741 vec_vsl(vector unsigned char __a, vector unsigned int __b) {
   9742   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
   9743                                                      (vector int)__b);
   9744 }
   9745 
   9746 static __inline__ vector bool char __ATTRS_o_ai
   9747 vec_vsl(vector bool char __a, vector unsigned char __b) {
   9748   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
   9749                                                  (vector int)__b);
   9750 }
   9751 
   9752 static __inline__ vector bool char __ATTRS_o_ai
   9753 vec_vsl(vector bool char __a, vector unsigned short __b) {
   9754   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
   9755                                                  (vector int)__b);
   9756 }
   9757 
   9758 static __inline__ vector bool char __ATTRS_o_ai
   9759 vec_vsl(vector bool char __a, vector unsigned int __b) {
   9760   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
   9761                                                  (vector int)__b);
   9762 }
   9763 
   9764 static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
   9765                                                     vector unsigned char __b) {
   9766   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
   9767 }
   9768 
   9769 static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
   9770                                                     vector unsigned short __b) {
   9771   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
   9772 }
   9773 
   9774 static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
   9775                                                     vector unsigned int __b) {
   9776   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
   9777 }
   9778 
   9779 static __inline__ vector unsigned short __ATTRS_o_ai
   9780 vec_vsl(vector unsigned short __a, vector unsigned char __b) {
   9781   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
   9782                                                       (vector int)__b);
   9783 }
   9784 
   9785 static __inline__ vector unsigned short __ATTRS_o_ai
   9786 vec_vsl(vector unsigned short __a, vector unsigned short __b) {
   9787   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
   9788                                                       (vector int)__b);
   9789 }
   9790 
   9791 static __inline__ vector unsigned short __ATTRS_o_ai
   9792 vec_vsl(vector unsigned short __a, vector unsigned int __b) {
   9793   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
   9794                                                       (vector int)__b);
   9795 }
   9796 
   9797 static __inline__ vector bool short __ATTRS_o_ai
   9798 vec_vsl(vector bool short __a, vector unsigned char __b) {
   9799   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
   9800                                                   (vector int)__b);
   9801 }
   9802 
   9803 static __inline__ vector bool short __ATTRS_o_ai
   9804 vec_vsl(vector bool short __a, vector unsigned short __b) {
   9805   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
   9806                                                   (vector int)__b);
   9807 }
   9808 
   9809 static __inline__ vector bool short __ATTRS_o_ai
   9810 vec_vsl(vector bool short __a, vector unsigned int __b) {
   9811   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
   9812                                                   (vector int)__b);
   9813 }
   9814 
   9815 static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
   9816                                                     vector unsigned char __b) {
   9817   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
   9818 }
   9819 
   9820 static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
   9821                                                     vector unsigned short __b) {
   9822   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
   9823 }
   9824 
   9825 static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
   9826                                                     vector unsigned int __b) {
   9827   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
   9828 }
   9829 
   9830 static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
   9831                                                   vector unsigned char __b) {
   9832   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
   9833 }
   9834 
   9835 static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
   9836                                                   vector unsigned short __b) {
   9837   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
   9838 }
   9839 
   9840 static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
   9841                                                   vector unsigned int __b) {
   9842   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
   9843 }
   9844 
   9845 static __inline__ vector unsigned int __ATTRS_o_ai
   9846 vec_vsl(vector unsigned int __a, vector unsigned char __b) {
   9847   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
   9848                                                     (vector int)__b);
   9849 }
   9850 
   9851 static __inline__ vector unsigned int __ATTRS_o_ai
   9852 vec_vsl(vector unsigned int __a, vector unsigned short __b) {
   9853   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
   9854                                                     (vector int)__b);
   9855 }
   9856 
   9857 static __inline__ vector unsigned int __ATTRS_o_ai
   9858 vec_vsl(vector unsigned int __a, vector unsigned int __b) {
   9859   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
   9860                                                     (vector int)__b);
   9861 }
   9862 
   9863 static __inline__ vector bool int __ATTRS_o_ai
   9864 vec_vsl(vector bool int __a, vector unsigned char __b) {
   9865   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
   9866                                                 (vector int)__b);
   9867 }
   9868 
   9869 static __inline__ vector bool int __ATTRS_o_ai
   9870 vec_vsl(vector bool int __a, vector unsigned short __b) {
   9871   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
   9872                                                 (vector int)__b);
   9873 }
   9874 
   9875 static __inline__ vector bool int __ATTRS_o_ai
   9876 vec_vsl(vector bool int __a, vector unsigned int __b) {
   9877   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
   9878                                                 (vector int)__b);
   9879 }
   9880 
   9881 /* vec_slo */
   9882 
   9883 static __inline__ vector signed char __ATTRS_o_ai
   9884 vec_slo(vector signed char __a, vector signed char __b) {
   9885   return (vector signed char)__builtin_altivec_vslo((vector int)__a,
   9886                                                     (vector int)__b);
   9887 }
   9888 
   9889 static __inline__ vector signed char __ATTRS_o_ai
   9890 vec_slo(vector signed char __a, vector unsigned char __b) {
   9891   return (vector signed char)__builtin_altivec_vslo((vector int)__a,
   9892                                                     (vector int)__b);
   9893 }
   9894 
   9895 static __inline__ vector unsigned char __ATTRS_o_ai
   9896 vec_slo(vector unsigned char __a, vector signed char __b) {
   9897   return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
   9898                                                       (vector int)__b);
   9899 }
   9900 
   9901 static __inline__ vector unsigned char __ATTRS_o_ai
   9902 vec_slo(vector unsigned char __a, vector unsigned char __b) {
   9903   return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
   9904                                                       (vector int)__b);
   9905 }
   9906 
   9907 static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
   9908                                                     vector signed char __b) {
   9909   return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
   9910 }
   9911 
   9912 static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
   9913                                                     vector unsigned char __b) {
   9914   return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
   9915 }
   9916 
   9917 static __inline__ vector unsigned short __ATTRS_o_ai
   9918 vec_slo(vector unsigned short __a, vector signed char __b) {
   9919   return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
   9920                                                        (vector int)__b);
   9921 }
   9922 
   9923 static __inline__ vector unsigned short __ATTRS_o_ai
   9924 vec_slo(vector unsigned short __a, vector unsigned char __b) {
   9925   return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
   9926                                                        (vector int)__b);
   9927 }
   9928 
   9929 static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
   9930                                                     vector signed char __b) {
   9931   return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
   9932 }
   9933 
   9934 static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
   9935                                                     vector unsigned char __b) {
   9936   return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
   9937 }
   9938 
   9939 static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
   9940                                                   vector signed char __b) {
   9941   return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
   9942 }
   9943 
   9944 static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
   9945                                                   vector unsigned char __b) {
   9946   return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
   9947 }
   9948 
   9949 static __inline__ vector unsigned int __ATTRS_o_ai
   9950 vec_slo(vector unsigned int __a, vector signed char __b) {
   9951   return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
   9952                                                      (vector int)__b);
   9953 }
   9954 
   9955 static __inline__ vector unsigned int __ATTRS_o_ai
   9956 vec_slo(vector unsigned int __a, vector unsigned char __b) {
   9957   return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
   9958                                                      (vector int)__b);
   9959 }
   9960 
   9961 static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
   9962                                                     vector signed char __b) {
   9963   return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
   9964 }
   9965 
   9966 static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
   9967                                                     vector unsigned char __b) {
   9968   return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
   9969 }
   9970 
   9971 #ifdef __VSX__
   9972 static __inline__ vector signed long long __ATTRS_o_ai
   9973 vec_slo(vector signed long long __a, vector signed char __b) {
   9974   return (vector signed long long)__builtin_altivec_vslo((vector int)__a,
   9975                                                          (vector int)__b);
   9976 }
   9977 
   9978 static __inline__ vector signed long long __ATTRS_o_ai
   9979 vec_slo(vector signed long long __a, vector unsigned char __b) {
   9980   return (vector signed long long)__builtin_altivec_vslo((vector int)__a,
   9981                                                          (vector int)__b);
   9982 }
   9983 
   9984 static __inline__ vector unsigned long long __ATTRS_o_ai
   9985 vec_slo(vector unsigned long long __a, vector signed char __b) {
   9986   return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,
   9987                                                            (vector int)__b);
   9988 }
   9989 
   9990 static __inline__ vector unsigned long long __ATTRS_o_ai
   9991 vec_slo(vector unsigned long long __a, vector unsigned char __b) {
   9992   return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,
   9993                                                            (vector int)__b);
   9994 }
   9995 #endif
   9996 
   9997 /* vec_vslo */
   9998 
   9999 static __inline__ vector signed char __ATTRS_o_ai
  10000 vec_vslo(vector signed char __a, vector signed char __b) {
  10001   return (vector signed char)__builtin_altivec_vslo((vector int)__a,
  10002                                                     (vector int)__b);
  10003 }
  10004 
  10005 static __inline__ vector signed char __ATTRS_o_ai
  10006 vec_vslo(vector signed char __a, vector unsigned char __b) {
  10007   return (vector signed char)__builtin_altivec_vslo((vector int)__a,
  10008                                                     (vector int)__b);
  10009 }
  10010 
  10011 static __inline__ vector unsigned char __ATTRS_o_ai
  10012 vec_vslo(vector unsigned char __a, vector signed char __b) {
  10013   return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
  10014                                                       (vector int)__b);
  10015 }
  10016 
  10017 static __inline__ vector unsigned char __ATTRS_o_ai
  10018 vec_vslo(vector unsigned char __a, vector unsigned char __b) {
  10019   return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
  10020                                                       (vector int)__b);
  10021 }
  10022 
  10023 static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
  10024                                                      vector signed char __b) {
  10025   return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  10026 }
  10027 
  10028 static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
  10029                                                      vector unsigned char __b) {
  10030   return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  10031 }
  10032 
  10033 static __inline__ vector unsigned short __ATTRS_o_ai
  10034 vec_vslo(vector unsigned short __a, vector signed char __b) {
  10035   return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
  10036                                                        (vector int)__b);
  10037 }
  10038 
  10039 static __inline__ vector unsigned short __ATTRS_o_ai
  10040 vec_vslo(vector unsigned short __a, vector unsigned char __b) {
  10041   return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
  10042                                                        (vector int)__b);
  10043 }
  10044 
  10045 static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
  10046                                                      vector signed char __b) {
  10047   return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  10048 }
  10049 
  10050 static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
  10051                                                      vector unsigned char __b) {
  10052   return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  10053 }
  10054 
  10055 static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
  10056                                                    vector signed char __b) {
  10057   return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
  10058 }
  10059 
  10060 static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
  10061                                                    vector unsigned char __b) {
  10062   return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
  10063 }
  10064 
  10065 static __inline__ vector unsigned int __ATTRS_o_ai
  10066 vec_vslo(vector unsigned int __a, vector signed char __b) {
  10067   return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
  10068                                                      (vector int)__b);
  10069 }
  10070 
  10071 static __inline__ vector unsigned int __ATTRS_o_ai
  10072 vec_vslo(vector unsigned int __a, vector unsigned char __b) {
  10073   return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
  10074                                                      (vector int)__b);
  10075 }
  10076 
  10077 static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
  10078                                                      vector signed char __b) {
  10079   return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  10080 }
  10081 
  10082 static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
  10083                                                      vector unsigned char __b) {
  10084   return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  10085 }
  10086 
  10087 /* vec_splat */
  10088 
  10089 static __inline__ vector signed char __ATTRS_o_ai
  10090 vec_splat(vector signed char __a, unsigned const int __b) {
  10091   return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
  10092 }
  10093 
  10094 static __inline__ vector unsigned char __ATTRS_o_ai
  10095 vec_splat(vector unsigned char __a, unsigned const int __b) {
  10096   return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
  10097 }
  10098 
  10099 static __inline__ vector bool char __ATTRS_o_ai
  10100 vec_splat(vector bool char __a, unsigned const int __b) {
  10101   return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
  10102 }
  10103 
  10104 static __inline__ vector signed short __ATTRS_o_ai
  10105 vec_splat(vector signed short __a, unsigned const int __b) {
  10106   unsigned char b0 = (__b & 0x07) * 2;
  10107   unsigned char b1 = b0 + 1;
  10108   return vec_perm(__a, __a,
  10109                   (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
  10110                                          b0, b1, b0, b1, b0, b1));
  10111 }
  10112 
  10113 static __inline__ vector unsigned short __ATTRS_o_ai
  10114 vec_splat(vector unsigned short __a, unsigned const int __b) {
  10115   unsigned char b0 = (__b & 0x07) * 2;
  10116   unsigned char b1 = b0 + 1;
  10117   return vec_perm(__a, __a,
  10118                   (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
  10119                                          b0, b1, b0, b1, b0, b1));
  10120 }
  10121 
  10122 static __inline__ vector bool short __ATTRS_o_ai
  10123 vec_splat(vector bool short __a, unsigned const int __b) {
  10124   unsigned char b0 = (__b & 0x07) * 2;
  10125   unsigned char b1 = b0 + 1;
  10126   return vec_perm(__a, __a,
  10127                   (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
  10128                                          b0, b1, b0, b1, b0, b1));
  10129 }
  10130 
  10131 static __inline__ vector pixel __ATTRS_o_ai vec_splat(vector pixel __a,
  10132                                                       unsigned const int __b) {
  10133   unsigned char b0 = (__b & 0x07) * 2;
  10134   unsigned char b1 = b0 + 1;
  10135   return vec_perm(__a, __a,
  10136                   (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
  10137                                          b0, b1, b0, b1, b0, b1));
  10138 }
  10139 
  10140 static __inline__ vector signed int __ATTRS_o_ai
  10141 vec_splat(vector signed int __a, unsigned const int __b) {
  10142   unsigned char b0 = (__b & 0x03) * 4;
  10143   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
  10144   return vec_perm(__a, __a,
  10145                   (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
  10146                                          b2, b3, b0, b1, b2, b3));
  10147 }
  10148 
  10149 static __inline__ vector unsigned int __ATTRS_o_ai
  10150 vec_splat(vector unsigned int __a, unsigned const int __b) {
  10151   unsigned char b0 = (__b & 0x03) * 4;
  10152   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
  10153   return vec_perm(__a, __a,
  10154                   (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
  10155                                          b2, b3, b0, b1, b2, b3));
  10156 }
  10157 
  10158 static __inline__ vector bool int __ATTRS_o_ai
  10159 vec_splat(vector bool int __a, unsigned const int __b) {
  10160   unsigned char b0 = (__b & 0x03) * 4;
  10161   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
  10162   return vec_perm(__a, __a,
  10163                   (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
  10164                                          b2, b3, b0, b1, b2, b3));
  10165 }
  10166 
  10167 static __inline__ vector float __ATTRS_o_ai vec_splat(vector float __a,
  10168                                                       unsigned const int __b) {
  10169   unsigned char b0 = (__b & 0x03) * 4;
  10170   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
  10171   return vec_perm(__a, __a,
  10172                   (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
  10173                                          b2, b3, b0, b1, b2, b3));
  10174 }
  10175 
  10176 #ifdef __VSX__
  10177 static __inline__ vector double __ATTRS_o_ai vec_splat(vector double __a,
  10178                                                        unsigned const int __b) {
  10179   unsigned char b0 = (__b & 0x01) * 8;
  10180   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
  10181                 b6 = b0 + 6, b7 = b0 + 7;
  10182   return vec_perm(__a, __a,
  10183                   (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
  10184                                          b2, b3, b4, b5, b6, b7));
  10185 }
  10186 static __inline__ vector bool long long __ATTRS_o_ai
  10187 vec_splat(vector bool long long __a, unsigned const int __b) {
  10188   unsigned char b0 = (__b & 0x01) * 8;
  10189   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
  10190                 b6 = b0 + 6, b7 = b0 + 7;
  10191   return vec_perm(__a, __a,
  10192                   (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
  10193                                          b2, b3, b4, b5, b6, b7));
  10194 }
  10195 static __inline__ vector signed long long __ATTRS_o_ai
  10196 vec_splat(vector signed long long __a, unsigned const int __b) {
  10197   unsigned char b0 = (__b & 0x01) * 8;
  10198   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
  10199                 b6 = b0 + 6, b7 = b0 + 7;
  10200   return vec_perm(__a, __a,
  10201                   (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
  10202                                          b2, b3, b4, b5, b6, b7));
  10203 }
  10204 static __inline__ vector unsigned long long __ATTRS_o_ai
  10205 vec_splat(vector unsigned long long __a, unsigned const int __b) {
  10206   unsigned char b0 = (__b & 0x01) * 8;
  10207   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
  10208                 b6 = b0 + 6, b7 = b0 + 7;
  10209   return vec_perm(__a, __a,
  10210                   (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
  10211                                          b2, b3, b4, b5, b6, b7));
  10212 }
  10213 #endif
  10214 
  10215 /* vec_vspltb */
  10216 
  10217 #define __builtin_altivec_vspltb vec_vspltb
  10218 
  10219 static __inline__ vector signed char __ATTRS_o_ai
  10220 vec_vspltb(vector signed char __a, unsigned char __b) {
  10221   return vec_perm(__a, __a, (vector unsigned char)(__b));
  10222 }
  10223 
  10224 static __inline__ vector unsigned char __ATTRS_o_ai
  10225 vec_vspltb(vector unsigned char __a, unsigned char __b) {
  10226   return vec_perm(__a, __a, (vector unsigned char)(__b));
  10227 }
  10228 
  10229 static __inline__ vector bool char __ATTRS_o_ai vec_vspltb(vector bool char __a,
  10230                                                            unsigned char __b) {
  10231   return vec_perm(__a, __a, (vector unsigned char)(__b));
  10232 }
  10233 
  10234 /* vec_vsplth */
  10235 
  10236 #define __builtin_altivec_vsplth vec_vsplth
  10237 
  10238 static __inline__ vector short __ATTRS_o_ai vec_vsplth(vector short __a,
  10239                                                        unsigned char __b) {
  10240   __b *= 2;
  10241   unsigned char b1 = __b + 1;
  10242   return vec_perm(__a, __a,
  10243                   (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
  10244                                          __b, b1, __b, b1, __b, b1, __b, b1));
  10245 }
  10246 
  10247 static __inline__ vector unsigned short __ATTRS_o_ai
  10248 vec_vsplth(vector unsigned short __a, unsigned char __b) {
  10249   __b *= 2;
  10250   unsigned char b1 = __b + 1;
  10251   return vec_perm(__a, __a,
  10252                   (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
  10253                                          __b, b1, __b, b1, __b, b1, __b, b1));
  10254 }
  10255 
  10256 static __inline__ vector bool short __ATTRS_o_ai
  10257 vec_vsplth(vector bool short __a, unsigned char __b) {
  10258   __b *= 2;
  10259   unsigned char b1 = __b + 1;
  10260   return vec_perm(__a, __a,
  10261                   (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
  10262                                          __b, b1, __b, b1, __b, b1, __b, b1));
  10263 }
  10264 
  10265 static __inline__ vector pixel __ATTRS_o_ai vec_vsplth(vector pixel __a,
  10266                                                        unsigned char __b) {
  10267   __b *= 2;
  10268   unsigned char b1 = __b + 1;
  10269   return vec_perm(__a, __a,
  10270                   (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
  10271                                          __b, b1, __b, b1, __b, b1, __b, b1));
  10272 }
  10273 
  10274 /* vec_vspltw */
  10275 
  10276 #define __builtin_altivec_vspltw vec_vspltw
  10277 
  10278 static __inline__ vector int __ATTRS_o_ai vec_vspltw(vector int __a,
  10279                                                      unsigned char __b) {
  10280   __b *= 4;
  10281   unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
  10282   return vec_perm(__a, __a,
  10283                   (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
  10284                                          b1, b2, b3, __b, b1, b2, b3));
  10285 }
  10286 
  10287 static __inline__ vector unsigned int __ATTRS_o_ai
  10288 vec_vspltw(vector unsigned int __a, unsigned char __b) {
  10289   __b *= 4;
  10290   unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
  10291   return vec_perm(__a, __a,
  10292                   (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
  10293                                          b1, b2, b3, __b, b1, b2, b3));
  10294 }
  10295 
  10296 static __inline__ vector bool int __ATTRS_o_ai vec_vspltw(vector bool int __a,
  10297                                                           unsigned char __b) {
  10298   __b *= 4;
  10299   unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
  10300   return vec_perm(__a, __a,
  10301                   (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
  10302                                          b1, b2, b3, __b, b1, b2, b3));
  10303 }
  10304 
  10305 static __inline__ vector float __ATTRS_o_ai vec_vspltw(vector float __a,
  10306                                                        unsigned char __b) {
  10307   __b *= 4;
  10308   unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
  10309   return vec_perm(__a, __a,
  10310                   (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
  10311                                          b1, b2, b3, __b, b1, b2, b3));
  10312 }
  10313 
  10314 /* vec_splat_s8 */
  10315 
  10316 #define __builtin_altivec_vspltisb vec_splat_s8
  10317 
  10318 // FIXME: parameter should be treated as 5-bit signed literal
  10319 static __inline__ vector signed char __ATTRS_o_ai
  10320 vec_splat_s8(signed char __a) {
  10321   return (vector signed char)(__a);
  10322 }
  10323 
  10324 /* vec_vspltisb */
  10325 
  10326 // FIXME: parameter should be treated as 5-bit signed literal
  10327 static __inline__ vector signed char __ATTRS_o_ai
  10328 vec_vspltisb(signed char __a) {
  10329   return (vector signed char)(__a);
  10330 }
  10331 
  10332 /* vec_splat_s16 */
  10333 
  10334 #define __builtin_altivec_vspltish vec_splat_s16
  10335 
  10336 // FIXME: parameter should be treated as 5-bit signed literal
  10337 static __inline__ vector short __ATTRS_o_ai vec_splat_s16(signed char __a) {
  10338   return (vector short)(__a);
  10339 }
  10340 
  10341 /* vec_vspltish */
  10342 
  10343 // FIXME: parameter should be treated as 5-bit signed literal
  10344 static __inline__ vector short __ATTRS_o_ai vec_vspltish(signed char __a) {
  10345   return (vector short)(__a);
  10346 }
  10347 
  10348 /* vec_splat_s32 */
  10349 
  10350 #define __builtin_altivec_vspltisw vec_splat_s32
  10351 
  10352 // FIXME: parameter should be treated as 5-bit signed literal
  10353 static __inline__ vector int __ATTRS_o_ai vec_splat_s32(signed char __a) {
  10354   return (vector int)(__a);
  10355 }
  10356 
  10357 /* vec_vspltisw */
  10358 
  10359 // FIXME: parameter should be treated as 5-bit signed literal
  10360 static __inline__ vector int __ATTRS_o_ai vec_vspltisw(signed char __a) {
  10361   return (vector int)(__a);
  10362 }
  10363 
  10364 /* vec_splat_u8 */
  10365 
  10366 // FIXME: parameter should be treated as 5-bit signed literal
  10367 static __inline__ vector unsigned char __ATTRS_o_ai
  10368 vec_splat_u8(unsigned char __a) {
  10369   return (vector unsigned char)(__a);
  10370 }
  10371 
  10372 /* vec_splat_u16 */
  10373 
  10374 // FIXME: parameter should be treated as 5-bit signed literal
  10375 static __inline__ vector unsigned short __ATTRS_o_ai
  10376 vec_splat_u16(signed char __a) {
  10377   return (vector unsigned short)(__a);
  10378 }
  10379 
  10380 /* vec_splat_u32 */
  10381 
  10382 // FIXME: parameter should be treated as 5-bit signed literal
  10383 static __inline__ vector unsigned int __ATTRS_o_ai
  10384 vec_splat_u32(signed char __a) {
  10385   return (vector unsigned int)(__a);
  10386 }
  10387 
  10388 /* vec_sr */
  10389 
  10390 // vec_sr does modulo arithmetic on __b first, so __b is allowed to be more
  10391 // than the length of __a.
  10392 static __inline__ vector unsigned char __ATTRS_o_ai
  10393 vec_sr(vector unsigned char __a, vector unsigned char __b) {
  10394   return __a >>
  10395          (__b % (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));
  10396 }
  10397 
  10398 static __inline__ vector signed char __ATTRS_o_ai
  10399 vec_sr(vector signed char __a, vector unsigned char __b) {
  10400   return (vector signed char)vec_sr((vector unsigned char)__a, __b);
  10401 }
  10402 
  10403 static __inline__ vector unsigned short __ATTRS_o_ai
  10404 vec_sr(vector unsigned short __a, vector unsigned short __b) {
  10405   return __a >>
  10406          (__b % (vector unsigned short)(sizeof(unsigned short) * __CHAR_BIT__));
  10407 }
  10408 
  10409 static __inline__ vector short __ATTRS_o_ai vec_sr(vector short __a,
  10410                                                    vector unsigned short __b) {
  10411   return (vector short)vec_sr((vector unsigned short)__a, __b);
  10412 }
  10413 
  10414 static __inline__ vector unsigned int __ATTRS_o_ai
  10415 vec_sr(vector unsigned int __a, vector unsigned int __b) {
  10416   return __a >>
  10417          (__b % (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));
  10418 }
  10419 
  10420 static __inline__ vector int __ATTRS_o_ai vec_sr(vector int __a,
  10421                                                  vector unsigned int __b) {
  10422   return (vector int)vec_sr((vector unsigned int)__a, __b);
  10423 }
  10424 
  10425 #ifdef __POWER8_VECTOR__
  10426 static __inline__ vector unsigned long long __ATTRS_o_ai
  10427 vec_sr(vector unsigned long long __a, vector unsigned long long __b) {
  10428   return __a >> (__b % (vector unsigned long long)(sizeof(unsigned long long) *
  10429                                                    __CHAR_BIT__));
  10430 }
  10431 
  10432 static __inline__ vector long long __ATTRS_o_ai
  10433 vec_sr(vector long long __a, vector unsigned long long __b) {
  10434   return (vector long long)vec_sr((vector unsigned long long)__a, __b);
  10435 }
  10436 #elif defined(__VSX__)
  10437 static __inline__ vector unsigned long long __ATTRS_o_ai
  10438 vec_sr(vector unsigned long long __a, vector unsigned long long __b) {
  10439   __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
  10440 
  10441   // Big endian element zero (the left doubleword) can be right shifted as-is.
  10442   // However the shift amount must be in the right doubleword.
  10443   // The other element needs to be swapped into the left doubleword and
  10444   // shifted. Then the left doublewords of the two result vectors are merged.
  10445   vector unsigned long long __swapshift =
  10446       __builtin_shufflevector(__b, __b, 1, 0);
  10447   vector unsigned long long __leftelt =
  10448       (vector unsigned long long)__builtin_altivec_vsro(
  10449           (vector signed int)__a, (vector signed int)__swapshift);
  10450 #ifdef __LITTLE_ENDIAN__
  10451   __leftelt = (vector unsigned long long)__builtin_altivec_vsr(
  10452       (vector signed int)__leftelt,
  10453       (vector signed int)vec_vspltb((vector unsigned char)__swapshift, 0));
  10454 #else
  10455   __leftelt = (vector unsigned long long)__builtin_altivec_vsr(
  10456       (vector signed int)__leftelt,
  10457       (vector signed int)vec_vspltb((vector unsigned char)__swapshift, 15));
  10458 #endif
  10459   __a = __builtin_shufflevector(__a, __a, 1, 0);
  10460   vector unsigned long long __rightelt =
  10461       (vector unsigned long long)__builtin_altivec_vsro((vector signed int)__a,
  10462                                                         (vector signed int)__b);
  10463 #ifdef __LITTLE_ENDIAN__
  10464   __rightelt = (vector unsigned long long)__builtin_altivec_vsr(
  10465       (vector signed int)__rightelt,
  10466       (vector signed int)vec_vspltb((vector unsigned char)__b, 0));
  10467   return __builtin_shufflevector(__rightelt, __leftelt, 1, 3);
  10468 #else
  10469   __rightelt = (vector unsigned long long)__builtin_altivec_vsr(
  10470       (vector signed int)__rightelt,
  10471       (vector signed int)vec_vspltb((vector unsigned char)__b, 15));
  10472   return __builtin_shufflevector(__leftelt, __rightelt, 0, 2);
  10473 #endif
  10474 }
  10475 
  10476 static __inline__ vector long long __ATTRS_o_ai
  10477 vec_sr(vector long long __a, vector unsigned long long __b) {
  10478   return (vector long long)vec_sr((vector unsigned long long)__a, __b);
  10479 }
  10480 #endif /* __VSX__ */
  10481 
  10482 /* vec_vsrb */
  10483 
  10484 #define __builtin_altivec_vsrb vec_vsrb
  10485 
  10486 static __inline__ vector signed char __ATTRS_o_ai
  10487 vec_vsrb(vector signed char __a, vector unsigned char __b) {
  10488   return vec_sr(__a, __b);
  10489 }
  10490 
  10491 static __inline__ vector unsigned char __ATTRS_o_ai
  10492 vec_vsrb(vector unsigned char __a, vector unsigned char __b) {
  10493   return vec_sr(__a, __b);
  10494 }
  10495 
  10496 /* vec_vsrh */
  10497 
  10498 #define __builtin_altivec_vsrh vec_vsrh
  10499 
  10500 static __inline__ vector short __ATTRS_o_ai
  10501 vec_vsrh(vector short __a, vector unsigned short __b) {
  10502   return vec_sr(__a, __b);
  10503 }
  10504 
  10505 static __inline__ vector unsigned short __ATTRS_o_ai
  10506 vec_vsrh(vector unsigned short __a, vector unsigned short __b) {
  10507   return vec_sr(__a, __b);
  10508 }
  10509 
  10510 /* vec_vsrw */
  10511 
  10512 #define __builtin_altivec_vsrw vec_vsrw
  10513 
  10514 static __inline__ vector int __ATTRS_o_ai vec_vsrw(vector int __a,
  10515                                                    vector unsigned int __b) {
  10516   return vec_sr(__a, __b);
  10517 }
  10518 
  10519 static __inline__ vector unsigned int __ATTRS_o_ai
  10520 vec_vsrw(vector unsigned int __a, vector unsigned int __b) {
  10521   return vec_sr(__a, __b);
  10522 }
  10523 
  10524 /* vec_sra */
  10525 
  10526 static __inline__ vector signed char __ATTRS_o_ai
  10527 vec_sra(vector signed char __a, vector unsigned char __b) {
  10528   return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
  10529 }
  10530 
  10531 static __inline__ vector unsigned char __ATTRS_o_ai
  10532 vec_sra(vector unsigned char __a, vector unsigned char __b) {
  10533   return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
  10534 }
  10535 
  10536 static __inline__ vector short __ATTRS_o_ai vec_sra(vector short __a,
  10537                                                     vector unsigned short __b) {
  10538   return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
  10539 }
  10540 
  10541 static __inline__ vector unsigned short __ATTRS_o_ai
  10542 vec_sra(vector unsigned short __a, vector unsigned short __b) {
  10543   return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
  10544 }
  10545 
  10546 static __inline__ vector int __ATTRS_o_ai vec_sra(vector int __a,
  10547                                                   vector unsigned int __b) {
  10548   return __builtin_altivec_vsraw(__a, __b);
  10549 }
  10550 
  10551 static __inline__ vector unsigned int __ATTRS_o_ai
  10552 vec_sra(vector unsigned int __a, vector unsigned int __b) {
  10553   return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
  10554 }
  10555 
  10556 #ifdef __POWER8_VECTOR__
  10557 static __inline__ vector signed long long __ATTRS_o_ai
  10558 vec_sra(vector signed long long __a, vector unsigned long long __b) {
  10559   return __a >> __b;
  10560 }
  10561 
  10562 static __inline__ vector unsigned long long __ATTRS_o_ai
  10563 vec_sra(vector unsigned long long __a, vector unsigned long long __b) {
  10564   return (vector unsigned long long)((vector signed long long)__a >> __b);
  10565 }
  10566 #elif defined(__VSX__)
  10567 static __inline__ vector signed long long __ATTRS_o_ai
  10568 vec_sra(vector signed long long __a, vector unsigned long long __b) {
  10569   __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
  10570   return __a >> __b;
  10571 }
  10572 
  10573 static __inline__ vector unsigned long long __ATTRS_o_ai
  10574 vec_sra(vector unsigned long long __a, vector unsigned long long __b) {
  10575   __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
  10576   return (vector unsigned long long)((vector signed long long)__a >> __b);
  10577 }
  10578 #endif /* __VSX__ */
  10579 
  10580 /* vec_vsrab */
  10581 
  10582 static __inline__ vector signed char __ATTRS_o_ai
  10583 vec_vsrab(vector signed char __a, vector unsigned char __b) {
  10584   return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
  10585 }
  10586 
  10587 static __inline__ vector unsigned char __ATTRS_o_ai
  10588 vec_vsrab(vector unsigned char __a, vector unsigned char __b) {
  10589   return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
  10590 }
  10591 
  10592 /* vec_vsrah */
  10593 
  10594 static __inline__ vector short __ATTRS_o_ai
  10595 vec_vsrah(vector short __a, vector unsigned short __b) {
  10596   return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
  10597 }
  10598 
  10599 static __inline__ vector unsigned short __ATTRS_o_ai
  10600 vec_vsrah(vector unsigned short __a, vector unsigned short __b) {
  10601   return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
  10602 }
  10603 
  10604 /* vec_vsraw */
  10605 
  10606 static __inline__ vector int __ATTRS_o_ai vec_vsraw(vector int __a,
  10607                                                     vector unsigned int __b) {
  10608   return __builtin_altivec_vsraw(__a, __b);
  10609 }
  10610 
  10611 static __inline__ vector unsigned int __ATTRS_o_ai
  10612 vec_vsraw(vector unsigned int __a, vector unsigned int __b) {
  10613   return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
  10614 }
  10615 
  10616 /* vec_srl */
  10617 
  10618 static __inline__ vector signed char __ATTRS_o_ai
  10619 vec_srl(vector signed char __a, vector unsigned char __b) {
  10620   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
  10621                                                    (vector int)__b);
  10622 }
  10623 
  10624 static __inline__ vector signed char __ATTRS_o_ai
  10625 vec_srl(vector signed char __a, vector unsigned short __b) {
  10626   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
  10627                                                    (vector int)__b);
  10628 }
  10629 
  10630 static __inline__ vector signed char __ATTRS_o_ai
  10631 vec_srl(vector signed char __a, vector unsigned int __b) {
  10632   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
  10633                                                    (vector int)__b);
  10634 }
  10635 
  10636 static __inline__ vector unsigned char __ATTRS_o_ai
  10637 vec_srl(vector unsigned char __a, vector unsigned char __b) {
  10638   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
  10639                                                      (vector int)__b);
  10640 }
  10641 
  10642 static __inline__ vector unsigned char __ATTRS_o_ai
  10643 vec_srl(vector unsigned char __a, vector unsigned short __b) {
  10644   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
  10645                                                      (vector int)__b);
  10646 }
  10647 
  10648 static __inline__ vector unsigned char __ATTRS_o_ai
  10649 vec_srl(vector unsigned char __a, vector unsigned int __b) {
  10650   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
  10651                                                      (vector int)__b);
  10652 }
  10653 
  10654 static __inline__ vector bool char __ATTRS_o_ai
  10655 vec_srl(vector bool char __a, vector unsigned char __b) {
  10656   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
  10657                                                  (vector int)__b);
  10658 }
  10659 
  10660 static __inline__ vector bool char __ATTRS_o_ai
  10661 vec_srl(vector bool char __a, vector unsigned short __b) {
  10662   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
  10663                                                  (vector int)__b);
  10664 }
  10665 
  10666 static __inline__ vector bool char __ATTRS_o_ai
  10667 vec_srl(vector bool char __a, vector unsigned int __b) {
  10668   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
  10669                                                  (vector int)__b);
  10670 }
  10671 
  10672 static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
  10673                                                     vector unsigned char __b) {
  10674   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10675 }
  10676 
  10677 static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
  10678                                                     vector unsigned short __b) {
  10679   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10680 }
  10681 
  10682 static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
  10683                                                     vector unsigned int __b) {
  10684   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10685 }
  10686 
  10687 static __inline__ vector unsigned short __ATTRS_o_ai
  10688 vec_srl(vector unsigned short __a, vector unsigned char __b) {
  10689   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
  10690                                                       (vector int)__b);
  10691 }
  10692 
  10693 static __inline__ vector unsigned short __ATTRS_o_ai
  10694 vec_srl(vector unsigned short __a, vector unsigned short __b) {
  10695   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
  10696                                                       (vector int)__b);
  10697 }
  10698 
  10699 static __inline__ vector unsigned short __ATTRS_o_ai
  10700 vec_srl(vector unsigned short __a, vector unsigned int __b) {
  10701   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
  10702                                                       (vector int)__b);
  10703 }
  10704 
  10705 static __inline__ vector bool short __ATTRS_o_ai
  10706 vec_srl(vector bool short __a, vector unsigned char __b) {
  10707   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
  10708                                                   (vector int)__b);
  10709 }
  10710 
  10711 static __inline__ vector bool short __ATTRS_o_ai
  10712 vec_srl(vector bool short __a, vector unsigned short __b) {
  10713   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
  10714                                                   (vector int)__b);
  10715 }
  10716 
  10717 static __inline__ vector bool short __ATTRS_o_ai
  10718 vec_srl(vector bool short __a, vector unsigned int __b) {
  10719   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
  10720                                                   (vector int)__b);
  10721 }
  10722 
  10723 static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
  10724                                                     vector unsigned char __b) {
  10725   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10726 }
  10727 
  10728 static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
  10729                                                     vector unsigned short __b) {
  10730   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10731 }
  10732 
  10733 static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
  10734                                                     vector unsigned int __b) {
  10735   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10736 }
  10737 
  10738 static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
  10739                                                   vector unsigned char __b) {
  10740   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
  10741 }
  10742 
  10743 static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
  10744                                                   vector unsigned short __b) {
  10745   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
  10746 }
  10747 
  10748 static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
  10749                                                   vector unsigned int __b) {
  10750   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
  10751 }
  10752 
  10753 static __inline__ vector unsigned int __ATTRS_o_ai
  10754 vec_srl(vector unsigned int __a, vector unsigned char __b) {
  10755   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
  10756                                                     (vector int)__b);
  10757 }
  10758 
  10759 static __inline__ vector unsigned int __ATTRS_o_ai
  10760 vec_srl(vector unsigned int __a, vector unsigned short __b) {
  10761   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
  10762                                                     (vector int)__b);
  10763 }
  10764 
  10765 static __inline__ vector unsigned int __ATTRS_o_ai
  10766 vec_srl(vector unsigned int __a, vector unsigned int __b) {
  10767   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
  10768                                                     (vector int)__b);
  10769 }
  10770 
  10771 static __inline__ vector bool int __ATTRS_o_ai
  10772 vec_srl(vector bool int __a, vector unsigned char __b) {
  10773   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
  10774                                                 (vector int)__b);
  10775 }
  10776 
  10777 static __inline__ vector bool int __ATTRS_o_ai
  10778 vec_srl(vector bool int __a, vector unsigned short __b) {
  10779   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
  10780                                                 (vector int)__b);
  10781 }
  10782 
  10783 static __inline__ vector bool int __ATTRS_o_ai
  10784 vec_srl(vector bool int __a, vector unsigned int __b) {
  10785   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
  10786                                                 (vector int)__b);
  10787 }
  10788 
  10789 #ifdef __VSX__
  10790 static __inline__ vector signed long long __ATTRS_o_ai
  10791 vec_srl(vector signed long long __a, vector unsigned char __b) {
  10792   return (vector signed long long)__builtin_altivec_vsr((vector int)__a,
  10793                                                         (vector int)__b);
  10794 }
  10795 
  10796 static __inline__ vector unsigned long long __ATTRS_o_ai
  10797 vec_srl(vector unsigned long long __a, vector unsigned char __b) {
  10798   return (vector unsigned long long)__builtin_altivec_vsr((vector int)__a,
  10799                                                           (vector int)__b);
  10800 }
  10801 #endif
  10802 
  10803 /* vec_vsr */
  10804 
  10805 static __inline__ vector signed char __ATTRS_o_ai
  10806 vec_vsr(vector signed char __a, vector unsigned char __b) {
  10807   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
  10808                                                    (vector int)__b);
  10809 }
  10810 
  10811 static __inline__ vector signed char __ATTRS_o_ai
  10812 vec_vsr(vector signed char __a, vector unsigned short __b) {
  10813   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
  10814                                                    (vector int)__b);
  10815 }
  10816 
  10817 static __inline__ vector signed char __ATTRS_o_ai
  10818 vec_vsr(vector signed char __a, vector unsigned int __b) {
  10819   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
  10820                                                    (vector int)__b);
  10821 }
  10822 
  10823 static __inline__ vector unsigned char __ATTRS_o_ai
  10824 vec_vsr(vector unsigned char __a, vector unsigned char __b) {
  10825   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
  10826                                                      (vector int)__b);
  10827 }
  10828 
  10829 static __inline__ vector unsigned char __ATTRS_o_ai
  10830 vec_vsr(vector unsigned char __a, vector unsigned short __b) {
  10831   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
  10832                                                      (vector int)__b);
  10833 }
  10834 
  10835 static __inline__ vector unsigned char __ATTRS_o_ai
  10836 vec_vsr(vector unsigned char __a, vector unsigned int __b) {
  10837   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
  10838                                                      (vector int)__b);
  10839 }
  10840 
  10841 static __inline__ vector bool char __ATTRS_o_ai
  10842 vec_vsr(vector bool char __a, vector unsigned char __b) {
  10843   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
  10844                                                  (vector int)__b);
  10845 }
  10846 
  10847 static __inline__ vector bool char __ATTRS_o_ai
  10848 vec_vsr(vector bool char __a, vector unsigned short __b) {
  10849   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
  10850                                                  (vector int)__b);
  10851 }
  10852 
  10853 static __inline__ vector bool char __ATTRS_o_ai
  10854 vec_vsr(vector bool char __a, vector unsigned int __b) {
  10855   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
  10856                                                  (vector int)__b);
  10857 }
  10858 
  10859 static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
  10860                                                     vector unsigned char __b) {
  10861   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10862 }
  10863 
  10864 static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
  10865                                                     vector unsigned short __b) {
  10866   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10867 }
  10868 
  10869 static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
  10870                                                     vector unsigned int __b) {
  10871   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10872 }
  10873 
  10874 static __inline__ vector unsigned short __ATTRS_o_ai
  10875 vec_vsr(vector unsigned short __a, vector unsigned char __b) {
  10876   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
  10877                                                       (vector int)__b);
  10878 }
  10879 
  10880 static __inline__ vector unsigned short __ATTRS_o_ai
  10881 vec_vsr(vector unsigned short __a, vector unsigned short __b) {
  10882   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
  10883                                                       (vector int)__b);
  10884 }
  10885 
  10886 static __inline__ vector unsigned short __ATTRS_o_ai
  10887 vec_vsr(vector unsigned short __a, vector unsigned int __b) {
  10888   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
  10889                                                       (vector int)__b);
  10890 }
  10891 
  10892 static __inline__ vector bool short __ATTRS_o_ai
  10893 vec_vsr(vector bool short __a, vector unsigned char __b) {
  10894   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
  10895                                                   (vector int)__b);
  10896 }
  10897 
  10898 static __inline__ vector bool short __ATTRS_o_ai
  10899 vec_vsr(vector bool short __a, vector unsigned short __b) {
  10900   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
  10901                                                   (vector int)__b);
  10902 }
  10903 
  10904 static __inline__ vector bool short __ATTRS_o_ai
  10905 vec_vsr(vector bool short __a, vector unsigned int __b) {
  10906   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
  10907                                                   (vector int)__b);
  10908 }
  10909 
  10910 static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
  10911                                                     vector unsigned char __b) {
  10912   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10913 }
  10914 
  10915 static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
  10916                                                     vector unsigned short __b) {
  10917   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10918 }
  10919 
  10920 static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
  10921                                                     vector unsigned int __b) {
  10922   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10923 }
  10924 
  10925 static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
  10926                                                   vector unsigned char __b) {
  10927   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
  10928 }
  10929 
  10930 static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
  10931                                                   vector unsigned short __b) {
  10932   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
  10933 }
  10934 
  10935 static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
  10936                                                   vector unsigned int __b) {
  10937   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
  10938 }
  10939 
  10940 static __inline__ vector unsigned int __ATTRS_o_ai
  10941 vec_vsr(vector unsigned int __a, vector unsigned char __b) {
  10942   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
  10943                                                     (vector int)__b);
  10944 }
  10945 
  10946 static __inline__ vector unsigned int __ATTRS_o_ai
  10947 vec_vsr(vector unsigned int __a, vector unsigned short __b) {
  10948   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
  10949                                                     (vector int)__b);
  10950 }
  10951 
  10952 static __inline__ vector unsigned int __ATTRS_o_ai
  10953 vec_vsr(vector unsigned int __a, vector unsigned int __b) {
  10954   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
  10955                                                     (vector int)__b);
  10956 }
  10957 
  10958 static __inline__ vector bool int __ATTRS_o_ai
  10959 vec_vsr(vector bool int __a, vector unsigned char __b) {
  10960   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
  10961                                                 (vector int)__b);
  10962 }
  10963 
  10964 static __inline__ vector bool int __ATTRS_o_ai
  10965 vec_vsr(vector bool int __a, vector unsigned short __b) {
  10966   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
  10967                                                 (vector int)__b);
  10968 }
  10969 
  10970 static __inline__ vector bool int __ATTRS_o_ai
  10971 vec_vsr(vector bool int __a, vector unsigned int __b) {
  10972   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
  10973                                                 (vector int)__b);
  10974 }
  10975 
  10976 /* vec_sro */
  10977 
  10978 static __inline__ vector signed char __ATTRS_o_ai
  10979 vec_sro(vector signed char __a, vector signed char __b) {
  10980   return (vector signed char)__builtin_altivec_vsro((vector int)__a,
  10981                                                     (vector int)__b);
  10982 }
  10983 
  10984 static __inline__ vector signed char __ATTRS_o_ai
  10985 vec_sro(vector signed char __a, vector unsigned char __b) {
  10986   return (vector signed char)__builtin_altivec_vsro((vector int)__a,
  10987                                                     (vector int)__b);
  10988 }
  10989 
  10990 static __inline__ vector unsigned char __ATTRS_o_ai
  10991 vec_sro(vector unsigned char __a, vector signed char __b) {
  10992   return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
  10993                                                       (vector int)__b);
  10994 }
  10995 
  10996 static __inline__ vector unsigned char __ATTRS_o_ai
  10997 vec_sro(vector unsigned char __a, vector unsigned char __b) {
  10998   return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
  10999                                                       (vector int)__b);
  11000 }
  11001 
  11002 static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
  11003                                                     vector signed char __b) {
  11004   return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11005 }
  11006 
  11007 static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
  11008                                                     vector unsigned char __b) {
  11009   return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11010 }
  11011 
  11012 static __inline__ vector unsigned short __ATTRS_o_ai
  11013 vec_sro(vector unsigned short __a, vector signed char __b) {
  11014   return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
  11015                                                        (vector int)__b);
  11016 }
  11017 
  11018 static __inline__ vector unsigned short __ATTRS_o_ai
  11019 vec_sro(vector unsigned short __a, vector unsigned char __b) {
  11020   return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
  11021                                                        (vector int)__b);
  11022 }
  11023 
  11024 static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
  11025                                                     vector signed char __b) {
  11026   return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11027 }
  11028 
  11029 static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
  11030                                                     vector unsigned char __b) {
  11031   return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11032 }
  11033 
  11034 static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
  11035                                                   vector signed char __b) {
  11036   return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
  11037 }
  11038 
  11039 static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
  11040                                                   vector unsigned char __b) {
  11041   return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
  11042 }
  11043 
  11044 static __inline__ vector unsigned int __ATTRS_o_ai
  11045 vec_sro(vector unsigned int __a, vector signed char __b) {
  11046   return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
  11047                                                      (vector int)__b);
  11048 }
  11049 
  11050 static __inline__ vector unsigned int __ATTRS_o_ai
  11051 vec_sro(vector unsigned int __a, vector unsigned char __b) {
  11052   return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
  11053                                                      (vector int)__b);
  11054 }
  11055 
  11056 static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
  11057                                                     vector signed char __b) {
  11058   return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11059 }
  11060 
  11061 static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
  11062                                                     vector unsigned char __b) {
  11063   return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11064 }
  11065 
  11066 #ifdef __VSX__
  11067 static __inline__ vector signed long long __ATTRS_o_ai
  11068 vec_sro(vector signed long long __a, vector signed char __b) {
  11069   return (vector signed long long)__builtin_altivec_vsro((vector int)__a,
  11070                                                          (vector int)__b);
  11071 }
  11072 
  11073 static __inline__ vector signed long long __ATTRS_o_ai
  11074 vec_sro(vector signed long long __a, vector unsigned char __b) {
  11075   return (vector signed long long)__builtin_altivec_vsro((vector int)__a,
  11076                                                          (vector int)__b);
  11077 }
  11078 
  11079 static __inline__ vector unsigned long long __ATTRS_o_ai
  11080 vec_sro(vector unsigned long long __a, vector signed char __b) {
  11081   return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,
  11082                                                            (vector int)__b);
  11083 }
  11084 
  11085 static __inline__ vector unsigned long long __ATTRS_o_ai
  11086 vec_sro(vector unsigned long long __a, vector unsigned char __b) {
  11087   return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,
  11088                                                            (vector int)__b);
  11089 }
  11090 #endif
  11091 
  11092 /* vec_vsro */
  11093 
  11094 static __inline__ vector signed char __ATTRS_o_ai
  11095 vec_vsro(vector signed char __a, vector signed char __b) {
  11096   return (vector signed char)__builtin_altivec_vsro((vector int)__a,
  11097                                                     (vector int)__b);
  11098 }
  11099 
  11100 static __inline__ vector signed char __ATTRS_o_ai
  11101 vec_vsro(vector signed char __a, vector unsigned char __b) {
  11102   return (vector signed char)__builtin_altivec_vsro((vector int)__a,
  11103                                                     (vector int)__b);
  11104 }
  11105 
  11106 static __inline__ vector unsigned char __ATTRS_o_ai
  11107 vec_vsro(vector unsigned char __a, vector signed char __b) {
  11108   return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
  11109                                                       (vector int)__b);
  11110 }
  11111 
  11112 static __inline__ vector unsigned char __ATTRS_o_ai
  11113 vec_vsro(vector unsigned char __a, vector unsigned char __b) {
  11114   return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
  11115                                                       (vector int)__b);
  11116 }
  11117 
  11118 static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
  11119                                                      vector signed char __b) {
  11120   return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11121 }
  11122 
  11123 static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
  11124                                                      vector unsigned char __b) {
  11125   return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11126 }
  11127 
  11128 static __inline__ vector unsigned short __ATTRS_o_ai
  11129 vec_vsro(vector unsigned short __a, vector signed char __b) {
  11130   return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
  11131                                                        (vector int)__b);
  11132 }
  11133 
  11134 static __inline__ vector unsigned short __ATTRS_o_ai
  11135 vec_vsro(vector unsigned short __a, vector unsigned char __b) {
  11136   return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
  11137                                                        (vector int)__b);
  11138 }
  11139 
  11140 static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
  11141                                                      vector signed char __b) {
  11142   return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11143 }
  11144 
  11145 static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
  11146                                                      vector unsigned char __b) {
  11147   return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11148 }
  11149 
  11150 static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
  11151                                                    vector signed char __b) {
  11152   return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
  11153 }
  11154 
  11155 static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
  11156                                                    vector unsigned char __b) {
  11157   return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
  11158 }
  11159 
  11160 static __inline__ vector unsigned int __ATTRS_o_ai
  11161 vec_vsro(vector unsigned int __a, vector signed char __b) {
  11162   return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
  11163                                                      (vector int)__b);
  11164 }
  11165 
  11166 static __inline__ vector unsigned int __ATTRS_o_ai
  11167 vec_vsro(vector unsigned int __a, vector unsigned char __b) {
  11168   return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
  11169                                                      (vector int)__b);
  11170 }
  11171 
  11172 static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
  11173                                                      vector signed char __b) {
  11174   return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11175 }
  11176 
  11177 static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
  11178                                                      vector unsigned char __b) {
  11179   return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11180 }
  11181 
  11182 /* vec_st */
  11183 
  11184 static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, long __b,
  11185                                            vector signed char *__c) {
  11186   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11187 }
  11188 
  11189 static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, long __b,
  11190                                            signed char *__c) {
  11191   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11192 }
  11193 
  11194 static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, long __b,
  11195                                            vector unsigned char *__c) {
  11196   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11197 }
  11198 
  11199 static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, long __b,
  11200                                            unsigned char *__c) {
  11201   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11202 }
  11203 
  11204 static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
  11205                                            signed char *__c) {
  11206   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11207 }
  11208 
  11209 static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
  11210                                            unsigned char *__c) {
  11211   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11212 }
  11213 
  11214 static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
  11215                                            vector bool char *__c) {
  11216   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11217 }
  11218 
  11219 static __inline__ void __ATTRS_o_ai vec_st(vector short __a, long __b,
  11220                                            vector short *__c) {
  11221   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11222 }
  11223 
  11224 static __inline__ void __ATTRS_o_ai vec_st(vector short __a, long __b,
  11225                                            short *__c) {
  11226   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11227 }
  11228 
  11229 static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, long __b,
  11230                                            vector unsigned short *__c) {
  11231   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11232 }
  11233 
  11234 static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, long __b,
  11235                                            unsigned short *__c) {
  11236   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11237 }
  11238 
  11239 static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
  11240                                            short *__c) {
  11241   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11242 }
  11243 
  11244 static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
  11245                                            unsigned short *__c) {
  11246   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11247 }
  11248 
  11249 static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
  11250                                            vector bool short *__c) {
  11251   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11252 }
  11253 
  11254 static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
  11255                                            short *__c) {
  11256   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11257 }
  11258 
  11259 static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
  11260                                            unsigned short *__c) {
  11261   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11262 }
  11263 
  11264 static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
  11265                                            vector pixel *__c) {
  11266   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11267 }
  11268 
  11269 static __inline__ void __ATTRS_o_ai vec_st(vector int __a, long __b,
  11270                                            vector int *__c) {
  11271   __builtin_altivec_stvx(__a, __b, __c);
  11272 }
  11273 
  11274 static __inline__ void __ATTRS_o_ai vec_st(vector int __a, long __b, int *__c) {
  11275   __builtin_altivec_stvx(__a, __b, __c);
  11276 }
  11277 
  11278 static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, long __b,
  11279                                            vector unsigned int *__c) {
  11280   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11281 }
  11282 
  11283 static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, long __b,
  11284                                            unsigned int *__c) {
  11285   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11286 }
  11287 
  11288 static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
  11289                                            int *__c) {
  11290   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11291 }
  11292 
  11293 static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
  11294                                            unsigned int *__c) {
  11295   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11296 }
  11297 
  11298 static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
  11299                                            vector bool int *__c) {
  11300   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11301 }
  11302 
  11303 static __inline__ void __ATTRS_o_ai vec_st(vector float __a, long __b,
  11304                                            vector float *__c) {
  11305   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11306 }
  11307 
  11308 static __inline__ void __ATTRS_o_ai vec_st(vector float __a, long __b,
  11309                                            float *__c) {
  11310   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11311 }
  11312 
  11313 /* vec_stvx */
  11314 
  11315 static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, long __b,
  11316                                              vector signed char *__c) {
  11317   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11318 }
  11319 
  11320 static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, long __b,
  11321                                              signed char *__c) {
  11322   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11323 }
  11324 
  11325 static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, long __b,
  11326                                              vector unsigned char *__c) {
  11327   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11328 }
  11329 
  11330 static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, long __b,
  11331                                              unsigned char *__c) {
  11332   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11333 }
  11334 
  11335 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
  11336                                              signed char *__c) {
  11337   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11338 }
  11339 
  11340 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
  11341                                              unsigned char *__c) {
  11342   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11343 }
  11344 
  11345 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
  11346                                              vector bool char *__c) {
  11347   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11348 }
  11349 
  11350 static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, long __b,
  11351                                              vector short *__c) {
  11352   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11353 }
  11354 
  11355 static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, long __b,
  11356                                              short *__c) {
  11357   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11358 }
  11359 
  11360 static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, long __b,
  11361                                              vector unsigned short *__c) {
  11362   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11363 }
  11364 
  11365 static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, long __b,
  11366                                              unsigned short *__c) {
  11367   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11368 }
  11369 
  11370 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
  11371                                              short *__c) {
  11372   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11373 }
  11374 
  11375 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
  11376                                              unsigned short *__c) {
  11377   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11378 }
  11379 
  11380 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
  11381                                              vector bool short *__c) {
  11382   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11383 }
  11384 
  11385 static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
  11386                                              short *__c) {
  11387   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11388 }
  11389 
  11390 static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
  11391                                              unsigned short *__c) {
  11392   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11393 }
  11394 
  11395 static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
  11396                                              vector pixel *__c) {
  11397   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11398 }
  11399 
  11400 static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, long __b,
  11401                                              vector int *__c) {
  11402   __builtin_altivec_stvx(__a, __b, __c);
  11403 }
  11404 
  11405 static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, long __b,
  11406                                              int *__c) {
  11407   __builtin_altivec_stvx(__a, __b, __c);
  11408 }
  11409 
  11410 static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, long __b,
  11411                                              vector unsigned int *__c) {
  11412   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11413 }
  11414 
  11415 static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, long __b,
  11416                                              unsigned int *__c) {
  11417   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11418 }
  11419 
  11420 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
  11421                                              int *__c) {
  11422   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11423 }
  11424 
  11425 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
  11426                                              unsigned int *__c) {
  11427   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11428 }
  11429 
  11430 static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
  11431                                              vector bool int *__c) {
  11432   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11433 }
  11434 
  11435 static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, long __b,
  11436                                              vector float *__c) {
  11437   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11438 }
  11439 
  11440 static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, long __b,
  11441                                              float *__c) {
  11442   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11443 }
  11444 
  11445 /* vec_ste */
  11446 
  11447 static __inline__ void __ATTRS_o_ai vec_ste(vector signed char __a, long __b,
  11448                                             signed char *__c) {
  11449   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11450 }
  11451 
  11452 static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned char __a, long __b,
  11453                                             unsigned char *__c) {
  11454   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11455 }
  11456 
  11457 static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, long __b,
  11458                                             signed char *__c) {
  11459   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11460 }
  11461 
  11462 static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, long __b,
  11463                                             unsigned char *__c) {
  11464   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11465 }
  11466 
  11467 static __inline__ void __ATTRS_o_ai vec_ste(vector short __a, long __b,
  11468                                             short *__c) {
  11469   __builtin_altivec_stvehx(__a, __b, __c);
  11470 }
  11471 
  11472 static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned short __a, long __b,
  11473                                             unsigned short *__c) {
  11474   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11475 }
  11476 
  11477 static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, long __b,
  11478                                             short *__c) {
  11479   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11480 }
  11481 
  11482 static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, long __b,
  11483                                             unsigned short *__c) {
  11484   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11485 }
  11486 
  11487 static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, long __b,
  11488                                             short *__c) {
  11489   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11490 }
  11491 
  11492 static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, long __b,
  11493                                             unsigned short *__c) {
  11494   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11495 }
  11496 
  11497 static __inline__ void __ATTRS_o_ai vec_ste(vector int __a, long __b, int *__c) {
  11498   __builtin_altivec_stvewx(__a, __b, __c);
  11499 }
  11500 
  11501 static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned int __a, long __b,
  11502                                             unsigned int *__c) {
  11503   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11504 }
  11505 
  11506 static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, long __b,
  11507                                             int *__c) {
  11508   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11509 }
  11510 
  11511 static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, long __b,
  11512                                             unsigned int *__c) {
  11513   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11514 }
  11515 
  11516 static __inline__ void __ATTRS_o_ai vec_ste(vector float __a, long __b,
  11517                                             float *__c) {
  11518   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11519 }
  11520 
  11521 /* vec_stvebx */
  11522 
  11523 static __inline__ void __ATTRS_o_ai vec_stvebx(vector signed char __a, long __b,
  11524                                                signed char *__c) {
  11525   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11526 }
  11527 
  11528 static __inline__ void __ATTRS_o_ai vec_stvebx(vector unsigned char __a,
  11529                                                long __b, unsigned char *__c) {
  11530   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11531 }
  11532 
  11533 static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, long __b,
  11534                                                signed char *__c) {
  11535   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11536 }
  11537 
  11538 static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, long __b,
  11539                                                unsigned char *__c) {
  11540   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11541 }
  11542 
  11543 /* vec_stvehx */
  11544 
  11545 static __inline__ void __ATTRS_o_ai vec_stvehx(vector short __a, long __b,
  11546                                                short *__c) {
  11547   __builtin_altivec_stvehx(__a, __b, __c);
  11548 }
  11549 
  11550 static __inline__ void __ATTRS_o_ai vec_stvehx(vector unsigned short __a,
  11551                                                long __b, unsigned short *__c) {
  11552   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11553 }
  11554 
  11555 static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, long __b,
  11556                                                short *__c) {
  11557   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11558 }
  11559 
  11560 static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, long __b,
  11561                                                unsigned short *__c) {
  11562   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11563 }
  11564 
  11565 static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, long __b,
  11566                                                short *__c) {
  11567   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11568 }
  11569 
  11570 static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, long __b,
  11571                                                unsigned short *__c) {
  11572   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11573 }
  11574 
  11575 /* vec_stvewx */
  11576 
  11577 static __inline__ void __ATTRS_o_ai vec_stvewx(vector int __a, long __b,
  11578                                                int *__c) {
  11579   __builtin_altivec_stvewx(__a, __b, __c);
  11580 }
  11581 
  11582 static __inline__ void __ATTRS_o_ai vec_stvewx(vector unsigned int __a, long __b,
  11583                                                unsigned int *__c) {
  11584   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11585 }
  11586 
  11587 static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, long __b,
  11588                                                int *__c) {
  11589   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11590 }
  11591 
  11592 static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, long __b,
  11593                                                unsigned int *__c) {
  11594   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11595 }
  11596 
  11597 static __inline__ void __ATTRS_o_ai vec_stvewx(vector float __a, long __b,
  11598                                                float *__c) {
  11599   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11600 }
  11601 
  11602 /* vec_stl */
  11603 
  11604 static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
  11605                                             vector signed char *__c) {
  11606   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11607 }
  11608 
  11609 static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
  11610                                             signed char *__c) {
  11611   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11612 }
  11613 
  11614 static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
  11615                                             vector unsigned char *__c) {
  11616   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11617 }
  11618 
  11619 static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
  11620                                             unsigned char *__c) {
  11621   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11622 }
  11623 
  11624 static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
  11625                                             signed char *__c) {
  11626   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11627 }
  11628 
  11629 static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
  11630                                             unsigned char *__c) {
  11631   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11632 }
  11633 
  11634 static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
  11635                                             vector bool char *__c) {
  11636   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11637 }
  11638 
  11639 static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
  11640                                             vector short *__c) {
  11641   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11642 }
  11643 
  11644 static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
  11645                                             short *__c) {
  11646   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11647 }
  11648 
  11649 static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
  11650                                             vector unsigned short *__c) {
  11651   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11652 }
  11653 
  11654 static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
  11655                                             unsigned short *__c) {
  11656   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11657 }
  11658 
  11659 static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
  11660                                             short *__c) {
  11661   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11662 }
  11663 
  11664 static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
  11665                                             unsigned short *__c) {
  11666   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11667 }
  11668 
  11669 static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
  11670                                             vector bool short *__c) {
  11671   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11672 }
  11673 
  11674 static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
  11675                                             short *__c) {
  11676   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11677 }
  11678 
  11679 static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
  11680                                             unsigned short *__c) {
  11681   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11682 }
  11683 
  11684 static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
  11685                                             vector pixel *__c) {
  11686   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11687 }
  11688 
  11689 static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b,
  11690                                             vector int *__c) {
  11691   __builtin_altivec_stvxl(__a, __b, __c);
  11692 }
  11693 
  11694 static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b, int *__c) {
  11695   __builtin_altivec_stvxl(__a, __b, __c);
  11696 }
  11697 
  11698 static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
  11699                                             vector unsigned int *__c) {
  11700   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11701 }
  11702 
  11703 static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
  11704                                             unsigned int *__c) {
  11705   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11706 }
  11707 
  11708 static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
  11709                                             int *__c) {
  11710   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11711 }
  11712 
  11713 static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
  11714                                             unsigned int *__c) {
  11715   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11716 }
  11717 
  11718 static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
  11719                                             vector bool int *__c) {
  11720   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11721 }
  11722 
  11723 static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
  11724                                             vector float *__c) {
  11725   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11726 }
  11727 
  11728 static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
  11729                                             float *__c) {
  11730   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11731 }
  11732 
  11733 /* vec_stvxl */
  11734 
  11735 static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
  11736                                               vector signed char *__c) {
  11737   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11738 }
  11739 
  11740 static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
  11741                                               signed char *__c) {
  11742   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11743 }
  11744 
  11745 static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
  11746                                               vector unsigned char *__c) {
  11747   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11748 }
  11749 
  11750 static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
  11751                                               unsigned char *__c) {
  11752   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11753 }
  11754 
  11755 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
  11756                                               signed char *__c) {
  11757   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11758 }
  11759 
  11760 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
  11761                                               unsigned char *__c) {
  11762   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11763 }
  11764 
  11765 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
  11766                                               vector bool char *__c) {
  11767   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11768 }
  11769 
  11770 static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
  11771                                               vector short *__c) {
  11772   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11773 }
  11774 
  11775 static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
  11776                                               short *__c) {
  11777   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11778 }
  11779 
  11780 static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
  11781                                               int __b,
  11782                                               vector unsigned short *__c) {
  11783   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11784 }
  11785 
  11786 static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
  11787                                               int __b, unsigned short *__c) {
  11788   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11789 }
  11790 
  11791 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
  11792                                               short *__c) {
  11793   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11794 }
  11795 
  11796 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
  11797                                               unsigned short *__c) {
  11798   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11799 }
  11800 
  11801 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
  11802                                               vector bool short *__c) {
  11803   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11804 }
  11805 
  11806 static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
  11807                                               short *__c) {
  11808   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11809 }
  11810 
  11811 static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
  11812                                               unsigned short *__c) {
  11813   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11814 }
  11815 
  11816 static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
  11817                                               vector pixel *__c) {
  11818   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11819 }
  11820 
  11821 static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
  11822                                               vector int *__c) {
  11823   __builtin_altivec_stvxl(__a, __b, __c);
  11824 }
  11825 
  11826 static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
  11827                                               int *__c) {
  11828   __builtin_altivec_stvxl(__a, __b, __c);
  11829 }
  11830 
  11831 static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
  11832                                               vector unsigned int *__c) {
  11833   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11834 }
  11835 
  11836 static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
  11837                                               unsigned int *__c) {
  11838   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11839 }
  11840 
  11841 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
  11842                                               int *__c) {
  11843   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11844 }
  11845 
  11846 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
  11847                                               unsigned int *__c) {
  11848   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11849 }
  11850 
  11851 static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
  11852                                               vector bool int *__c) {
  11853   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11854 }
  11855 
  11856 static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
  11857                                               vector float *__c) {
  11858   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11859 }
  11860 
  11861 static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
  11862                                               float *__c) {
  11863   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11864 }
  11865 
  11866 /* vec_sub */
  11867 
  11868 static __inline__ vector signed char __ATTRS_o_ai
  11869 vec_sub(vector signed char __a, vector signed char __b) {
  11870   return __a - __b;
  11871 }
  11872 
  11873 static __inline__ vector signed char __ATTRS_o_ai
  11874 vec_sub(vector bool char __a, vector signed char __b) {
  11875   return (vector signed char)__a - __b;
  11876 }
  11877 
  11878 static __inline__ vector signed char __ATTRS_o_ai
  11879 vec_sub(vector signed char __a, vector bool char __b) {
  11880   return __a - (vector signed char)__b;
  11881 }
  11882 
  11883 static __inline__ vector unsigned char __ATTRS_o_ai
  11884 vec_sub(vector unsigned char __a, vector unsigned char __b) {
  11885   return __a - __b;
  11886 }
  11887 
  11888 static __inline__ vector unsigned char __ATTRS_o_ai
  11889 vec_sub(vector bool char __a, vector unsigned char __b) {
  11890   return (vector unsigned char)__a - __b;
  11891 }
  11892 
  11893 static __inline__ vector unsigned char __ATTRS_o_ai
  11894 vec_sub(vector unsigned char __a, vector bool char __b) {
  11895   return __a - (vector unsigned char)__b;
  11896 }
  11897 
  11898 static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
  11899                                                     vector short __b) {
  11900   return __a - __b;
  11901 }
  11902 
  11903 static __inline__ vector short __ATTRS_o_ai vec_sub(vector bool short __a,
  11904                                                     vector short __b) {
  11905   return (vector short)__a - __b;
  11906 }
  11907 
  11908 static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
  11909                                                     vector bool short __b) {
  11910   return __a - (vector short)__b;
  11911 }
  11912 
  11913 static __inline__ vector unsigned short __ATTRS_o_ai
  11914 vec_sub(vector unsigned short __a, vector unsigned short __b) {
  11915   return __a - __b;
  11916 }
  11917 
  11918 static __inline__ vector unsigned short __ATTRS_o_ai
  11919 vec_sub(vector bool short __a, vector unsigned short __b) {
  11920   return (vector unsigned short)__a - __b;
  11921 }
  11922 
  11923 static __inline__ vector unsigned short __ATTRS_o_ai
  11924 vec_sub(vector unsigned short __a, vector bool short __b) {
  11925   return __a - (vector unsigned short)__b;
  11926 }
  11927 
  11928 static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
  11929                                                   vector int __b) {
  11930   return __a - __b;
  11931 }
  11932 
  11933 static __inline__ vector int __ATTRS_o_ai vec_sub(vector bool int __a,
  11934                                                   vector int __b) {
  11935   return (vector int)__a - __b;
  11936 }
  11937 
  11938 static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
  11939                                                   vector bool int __b) {
  11940   return __a - (vector int)__b;
  11941 }
  11942 
  11943 static __inline__ vector unsigned int __ATTRS_o_ai
  11944 vec_sub(vector unsigned int __a, vector unsigned int __b) {
  11945   return __a - __b;
  11946 }
  11947 
  11948 static __inline__ vector unsigned int __ATTRS_o_ai
  11949 vec_sub(vector bool int __a, vector unsigned int __b) {
  11950   return (vector unsigned int)__a - __b;
  11951 }
  11952 
  11953 static __inline__ vector unsigned int __ATTRS_o_ai
  11954 vec_sub(vector unsigned int __a, vector bool int __b) {
  11955   return __a - (vector unsigned int)__b;
  11956 }
  11957 
  11958 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  11959     defined(__SIZEOF_INT128__)
  11960 static __inline__ vector signed __int128 __ATTRS_o_ai
  11961 vec_sub(vector signed __int128 __a, vector signed __int128 __b) {
  11962   return __a - __b;
  11963 }
  11964 
  11965 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  11966 vec_sub(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  11967   return __a - __b;
  11968 }
  11969 #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&
  11970        // defined(__SIZEOF_INT128__)
  11971 
  11972 #ifdef __VSX__
  11973 static __inline__ vector signed long long __ATTRS_o_ai
  11974 vec_sub(vector signed long long __a, vector signed long long __b) {
  11975   return __a - __b;
  11976 }
  11977 
  11978 static __inline__ vector unsigned long long __ATTRS_o_ai
  11979 vec_sub(vector unsigned long long __a, vector unsigned long long __b) {
  11980   return __a - __b;
  11981 }
  11982 
  11983 static __inline__ vector double __ATTRS_o_ai vec_sub(vector double __a,
  11984                                                      vector double __b) {
  11985   return __a - __b;
  11986 }
  11987 #endif
  11988 
  11989 static __inline__ vector float __ATTRS_o_ai vec_sub(vector float __a,
  11990                                                     vector float __b) {
  11991   return __a - __b;
  11992 }
  11993 
  11994 /* vec_vsububm */
  11995 
  11996 #define __builtin_altivec_vsububm vec_vsububm
  11997 
  11998 static __inline__ vector signed char __ATTRS_o_ai
  11999 vec_vsububm(vector signed char __a, vector signed char __b) {
  12000   return __a - __b;
  12001 }
  12002 
  12003 static __inline__ vector signed char __ATTRS_o_ai
  12004 vec_vsububm(vector bool char __a, vector signed char __b) {
  12005   return (vector signed char)__a - __b;
  12006 }
  12007 
  12008 static __inline__ vector signed char __ATTRS_o_ai
  12009 vec_vsububm(vector signed char __a, vector bool char __b) {
  12010   return __a - (vector signed char)__b;
  12011 }
  12012 
  12013 static __inline__ vector unsigned char __ATTRS_o_ai
  12014 vec_vsububm(vector unsigned char __a, vector unsigned char __b) {
  12015   return __a - __b;
  12016 }
  12017 
  12018 static __inline__ vector unsigned char __ATTRS_o_ai
  12019 vec_vsububm(vector bool char __a, vector unsigned char __b) {
  12020   return (vector unsigned char)__a - __b;
  12021 }
  12022 
  12023 static __inline__ vector unsigned char __ATTRS_o_ai
  12024 vec_vsububm(vector unsigned char __a, vector bool char __b) {
  12025   return __a - (vector unsigned char)__b;
  12026 }
  12027 
  12028 /* vec_vsubuhm */
  12029 
  12030 #define __builtin_altivec_vsubuhm vec_vsubuhm
  12031 
  12032 static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
  12033                                                         vector short __b) {
  12034   return __a - __b;
  12035 }
  12036 
  12037 static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector bool short __a,
  12038                                                         vector short __b) {
  12039   return (vector short)__a - __b;
  12040 }
  12041 
  12042 static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
  12043                                                         vector bool short __b) {
  12044   return __a - (vector short)__b;
  12045 }
  12046 
  12047 static __inline__ vector unsigned short __ATTRS_o_ai
  12048 vec_vsubuhm(vector unsigned short __a, vector unsigned short __b) {
  12049   return __a - __b;
  12050 }
  12051 
  12052 static __inline__ vector unsigned short __ATTRS_o_ai
  12053 vec_vsubuhm(vector bool short __a, vector unsigned short __b) {
  12054   return (vector unsigned short)__a - __b;
  12055 }
  12056 
  12057 static __inline__ vector unsigned short __ATTRS_o_ai
  12058 vec_vsubuhm(vector unsigned short __a, vector bool short __b) {
  12059   return __a - (vector unsigned short)__b;
  12060 }
  12061 
  12062 /* vec_vsubuwm */
  12063 
  12064 #define __builtin_altivec_vsubuwm vec_vsubuwm
  12065 
  12066 static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
  12067                                                       vector int __b) {
  12068   return __a - __b;
  12069 }
  12070 
  12071 static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector bool int __a,
  12072                                                       vector int __b) {
  12073   return (vector int)__a - __b;
  12074 }
  12075 
  12076 static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
  12077                                                       vector bool int __b) {
  12078   return __a - (vector int)__b;
  12079 }
  12080 
  12081 static __inline__ vector unsigned int __ATTRS_o_ai
  12082 vec_vsubuwm(vector unsigned int __a, vector unsigned int __b) {
  12083   return __a - __b;
  12084 }
  12085 
  12086 static __inline__ vector unsigned int __ATTRS_o_ai
  12087 vec_vsubuwm(vector bool int __a, vector unsigned int __b) {
  12088   return (vector unsigned int)__a - __b;
  12089 }
  12090 
  12091 static __inline__ vector unsigned int __ATTRS_o_ai
  12092 vec_vsubuwm(vector unsigned int __a, vector bool int __b) {
  12093   return __a - (vector unsigned int)__b;
  12094 }
  12095 
  12096 /* vec_vsubfp */
  12097 
  12098 #define __builtin_altivec_vsubfp vec_vsubfp
  12099 
  12100 static __inline__ vector float __attribute__((__always_inline__))
  12101 vec_vsubfp(vector float __a, vector float __b) {
  12102   return __a - __b;
  12103 }
  12104 
  12105 /* vec_subc */
  12106 
  12107 static __inline__ vector signed int __ATTRS_o_ai
  12108 vec_subc(vector signed int __a, vector signed int __b) {
  12109   return (vector signed int)__builtin_altivec_vsubcuw((vector unsigned int)__a,
  12110                                                       (vector unsigned int) __b);
  12111 }
  12112 
  12113 static __inline__ vector unsigned int __ATTRS_o_ai
  12114 vec_subc(vector unsigned int __a, vector unsigned int __b) {
  12115   return __builtin_altivec_vsubcuw(__a, __b);
  12116 }
  12117 
  12118 #ifdef __POWER8_VECTOR__
  12119 #ifdef __SIZEOF_INT128__
  12120 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12121 vec_subc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  12122   return __builtin_altivec_vsubcuq(__a, __b);
  12123 }
  12124 
  12125 static __inline__ vector signed __int128 __ATTRS_o_ai
  12126 vec_subc(vector signed __int128 __a, vector signed __int128 __b) {
  12127   return (vector signed __int128)__builtin_altivec_vsubcuq(
  12128       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
  12129 }
  12130 #endif
  12131 
  12132 static __inline__ vector unsigned char __attribute__((__always_inline__))
  12133 vec_subc_u128(vector unsigned char __a, vector unsigned char __b) {
  12134   return (vector unsigned char)__builtin_altivec_vsubcuq_c(
  12135       (vector unsigned char)__a, (vector unsigned char)__b);
  12136 }
  12137 #endif // __POWER8_VECTOR__
  12138 
  12139 /* vec_vsubcuw */
  12140 
  12141 static __inline__ vector unsigned int __attribute__((__always_inline__))
  12142 vec_vsubcuw(vector unsigned int __a, vector unsigned int __b) {
  12143   return __builtin_altivec_vsubcuw(__a, __b);
  12144 }
  12145 
  12146 /* vec_subs */
  12147 
  12148 static __inline__ vector signed char __ATTRS_o_ai
  12149 vec_subs(vector signed char __a, vector signed char __b) {
  12150   return __builtin_altivec_vsubsbs(__a, __b);
  12151 }
  12152 
  12153 static __inline__ vector signed char __ATTRS_o_ai
  12154 vec_subs(vector bool char __a, vector signed char __b) {
  12155   return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
  12156 }
  12157 
  12158 static __inline__ vector signed char __ATTRS_o_ai
  12159 vec_subs(vector signed char __a, vector bool char __b) {
  12160   return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
  12161 }
  12162 
  12163 static __inline__ vector unsigned char __ATTRS_o_ai
  12164 vec_subs(vector unsigned char __a, vector unsigned char __b) {
  12165   return __builtin_altivec_vsububs(__a, __b);
  12166 }
  12167 
  12168 static __inline__ vector unsigned char __ATTRS_o_ai
  12169 vec_subs(vector bool char __a, vector unsigned char __b) {
  12170   return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
  12171 }
  12172 
  12173 static __inline__ vector unsigned char __ATTRS_o_ai
  12174 vec_subs(vector unsigned char __a, vector bool char __b) {
  12175   return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
  12176 }
  12177 
  12178 static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
  12179                                                      vector short __b) {
  12180   return __builtin_altivec_vsubshs(__a, __b);
  12181 }
  12182 
  12183 static __inline__ vector short __ATTRS_o_ai vec_subs(vector bool short __a,
  12184                                                      vector short __b) {
  12185   return __builtin_altivec_vsubshs((vector short)__a, __b);
  12186 }
  12187 
  12188 static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
  12189                                                      vector bool short __b) {
  12190   return __builtin_altivec_vsubshs(__a, (vector short)__b);
  12191 }
  12192 
  12193 static __inline__ vector unsigned short __ATTRS_o_ai
  12194 vec_subs(vector unsigned short __a, vector unsigned short __b) {
  12195   return __builtin_altivec_vsubuhs(__a, __b);
  12196 }
  12197 
  12198 static __inline__ vector unsigned short __ATTRS_o_ai
  12199 vec_subs(vector bool short __a, vector unsigned short __b) {
  12200   return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
  12201 }
  12202 
  12203 static __inline__ vector unsigned short __ATTRS_o_ai
  12204 vec_subs(vector unsigned short __a, vector bool short __b) {
  12205   return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
  12206 }
  12207 
  12208 static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
  12209                                                    vector int __b) {
  12210   return __builtin_altivec_vsubsws(__a, __b);
  12211 }
  12212 
  12213 static __inline__ vector int __ATTRS_o_ai vec_subs(vector bool int __a,
  12214                                                    vector int __b) {
  12215   return __builtin_altivec_vsubsws((vector int)__a, __b);
  12216 }
  12217 
  12218 static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
  12219                                                    vector bool int __b) {
  12220   return __builtin_altivec_vsubsws(__a, (vector int)__b);
  12221 }
  12222 
  12223 static __inline__ vector unsigned int __ATTRS_o_ai
  12224 vec_subs(vector unsigned int __a, vector unsigned int __b) {
  12225   return __builtin_altivec_vsubuws(__a, __b);
  12226 }
  12227 
  12228 static __inline__ vector unsigned int __ATTRS_o_ai
  12229 vec_subs(vector bool int __a, vector unsigned int __b) {
  12230   return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
  12231 }
  12232 
  12233 static __inline__ vector unsigned int __ATTRS_o_ai
  12234 vec_subs(vector unsigned int __a, vector bool int __b) {
  12235   return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
  12236 }
  12237 
  12238 /* vec_vsubsbs */
  12239 
  12240 static __inline__ vector signed char __ATTRS_o_ai
  12241 vec_vsubsbs(vector signed char __a, vector signed char __b) {
  12242   return __builtin_altivec_vsubsbs(__a, __b);
  12243 }
  12244 
  12245 static __inline__ vector signed char __ATTRS_o_ai
  12246 vec_vsubsbs(vector bool char __a, vector signed char __b) {
  12247   return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
  12248 }
  12249 
  12250 static __inline__ vector signed char __ATTRS_o_ai
  12251 vec_vsubsbs(vector signed char __a, vector bool char __b) {
  12252   return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
  12253 }
  12254 
  12255 /* vec_vsububs */
  12256 
  12257 static __inline__ vector unsigned char __ATTRS_o_ai
  12258 vec_vsububs(vector unsigned char __a, vector unsigned char __b) {
  12259   return __builtin_altivec_vsububs(__a, __b);
  12260 }
  12261 
  12262 static __inline__ vector unsigned char __ATTRS_o_ai
  12263 vec_vsububs(vector bool char __a, vector unsigned char __b) {
  12264   return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
  12265 }
  12266 
  12267 static __inline__ vector unsigned char __ATTRS_o_ai
  12268 vec_vsububs(vector unsigned char __a, vector bool char __b) {
  12269   return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
  12270 }
  12271 
  12272 /* vec_vsubshs */
  12273 
  12274 static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
  12275                                                         vector short __b) {
  12276   return __builtin_altivec_vsubshs(__a, __b);
  12277 }
  12278 
  12279 static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector bool short __a,
  12280                                                         vector short __b) {
  12281   return __builtin_altivec_vsubshs((vector short)__a, __b);
  12282 }
  12283 
  12284 static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
  12285                                                         vector bool short __b) {
  12286   return __builtin_altivec_vsubshs(__a, (vector short)__b);
  12287 }
  12288 
  12289 /* vec_vsubuhs */
  12290 
  12291 static __inline__ vector unsigned short __ATTRS_o_ai
  12292 vec_vsubuhs(vector unsigned short __a, vector unsigned short __b) {
  12293   return __builtin_altivec_vsubuhs(__a, __b);
  12294 }
  12295 
  12296 static __inline__ vector unsigned short __ATTRS_o_ai
  12297 vec_vsubuhs(vector bool short __a, vector unsigned short __b) {
  12298   return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
  12299 }
  12300 
  12301 static __inline__ vector unsigned short __ATTRS_o_ai
  12302 vec_vsubuhs(vector unsigned short __a, vector bool short __b) {
  12303   return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
  12304 }
  12305 
  12306 /* vec_vsubsws */
  12307 
  12308 static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
  12309                                                       vector int __b) {
  12310   return __builtin_altivec_vsubsws(__a, __b);
  12311 }
  12312 
  12313 static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector bool int __a,
  12314                                                       vector int __b) {
  12315   return __builtin_altivec_vsubsws((vector int)__a, __b);
  12316 }
  12317 
  12318 static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
  12319                                                       vector bool int __b) {
  12320   return __builtin_altivec_vsubsws(__a, (vector int)__b);
  12321 }
  12322 
  12323 /* vec_vsubuws */
  12324 
  12325 static __inline__ vector unsigned int __ATTRS_o_ai
  12326 vec_vsubuws(vector unsigned int __a, vector unsigned int __b) {
  12327   return __builtin_altivec_vsubuws(__a, __b);
  12328 }
  12329 
  12330 static __inline__ vector unsigned int __ATTRS_o_ai
  12331 vec_vsubuws(vector bool int __a, vector unsigned int __b) {
  12332   return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
  12333 }
  12334 
  12335 static __inline__ vector unsigned int __ATTRS_o_ai
  12336 vec_vsubuws(vector unsigned int __a, vector bool int __b) {
  12337   return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
  12338 }
  12339 
  12340 #ifdef __POWER8_VECTOR__
  12341 /* vec_vsubuqm */
  12342 
  12343 #ifdef __SIZEOF_INT128__
  12344 static __inline__ vector signed __int128 __ATTRS_o_ai
  12345 vec_vsubuqm(vector signed __int128 __a, vector signed __int128 __b) {
  12346   return __a - __b;
  12347 }
  12348 
  12349 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12350 vec_vsubuqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  12351   return __a - __b;
  12352 }
  12353 #endif
  12354 
  12355 static __inline__ vector unsigned char __attribute__((__always_inline__))
  12356 vec_sub_u128(vector unsigned char __a, vector unsigned char __b) {
  12357   return (vector unsigned char)__builtin_altivec_vsubuqm(__a, __b);
  12358 }
  12359 
  12360 /* vec_vsubeuqm */
  12361 
  12362 #ifdef __SIZEOF_INT128__
  12363 static __inline__ vector signed __int128 __ATTRS_o_ai
  12364 vec_vsubeuqm(vector signed __int128 __a, vector signed __int128 __b,
  12365              vector signed __int128 __c) {
  12366   return (vector signed __int128)__builtin_altivec_vsubeuqm(
  12367       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
  12368       (vector unsigned __int128)__c);
  12369 }
  12370 
  12371 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12372 vec_vsubeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
  12373              vector unsigned __int128 __c) {
  12374   return __builtin_altivec_vsubeuqm(__a, __b, __c);
  12375 }
  12376 
  12377 static __inline__ vector signed __int128 __ATTRS_o_ai
  12378 vec_sube(vector signed __int128 __a, vector signed __int128 __b,
  12379              vector signed __int128 __c) {
  12380   return (vector signed __int128)__builtin_altivec_vsubeuqm(
  12381       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
  12382       (vector unsigned __int128)__c);
  12383 }
  12384 
  12385 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12386 vec_sube(vector unsigned __int128 __a, vector unsigned __int128 __b,
  12387              vector unsigned __int128 __c) {
  12388   return __builtin_altivec_vsubeuqm(__a, __b, __c);
  12389 }
  12390 #endif
  12391 
  12392 static __inline__ vector unsigned char __attribute__((__always_inline__))
  12393 vec_sube_u128(vector unsigned char __a, vector unsigned char __b,
  12394               vector unsigned char __c) {
  12395   return (vector unsigned char)__builtin_altivec_vsubeuqm_c(
  12396       (vector unsigned char)__a, (vector unsigned char)__b,
  12397       (vector unsigned char)__c);
  12398 }
  12399 
  12400 /* vec_vsubcuq */
  12401 
  12402 #ifdef __SIZEOF_INT128__
  12403 static __inline__ vector signed __int128 __ATTRS_o_ai
  12404 vec_vsubcuq(vector signed __int128 __a, vector signed __int128 __b) {
  12405   return (vector signed __int128)__builtin_altivec_vsubcuq(
  12406       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
  12407 }
  12408 
  12409 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12410 vec_vsubcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  12411   return __builtin_altivec_vsubcuq(__a, __b);
  12412 }
  12413 
  12414 /* vec_vsubecuq */
  12415 
  12416 static __inline__ vector signed __int128 __ATTRS_o_ai
  12417 vec_vsubecuq(vector signed __int128 __a, vector signed __int128 __b,
  12418              vector signed __int128 __c) {
  12419   return (vector signed __int128)__builtin_altivec_vsubecuq(
  12420       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
  12421       (vector unsigned __int128)__c);
  12422 }
  12423 
  12424 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12425 vec_vsubecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
  12426              vector unsigned __int128 __c) {
  12427   return __builtin_altivec_vsubecuq(__a, __b, __c);
  12428 }
  12429 #endif
  12430 
  12431 #ifdef __powerpc64__
  12432 static __inline__ vector signed int __ATTRS_o_ai
  12433 vec_subec(vector signed int __a, vector signed int __b,
  12434              vector signed int __c) {
  12435   return vec_addec(__a, ~__b, __c);
  12436 }
  12437 
  12438 static __inline__ vector unsigned int __ATTRS_o_ai
  12439 vec_subec(vector unsigned int __a, vector unsigned int __b,
  12440              vector unsigned int __c) {
  12441   return vec_addec(__a, ~__b, __c);
  12442 }
  12443 #endif
  12444 
  12445 #ifdef __SIZEOF_INT128__
  12446 static __inline__ vector signed __int128 __ATTRS_o_ai
  12447 vec_subec(vector signed __int128 __a, vector signed __int128 __b,
  12448              vector signed __int128 __c) {
  12449   return (vector signed __int128)__builtin_altivec_vsubecuq(
  12450       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
  12451       (vector unsigned __int128)__c);
  12452 }
  12453 
  12454 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12455 vec_subec(vector unsigned __int128 __a, vector unsigned __int128 __b,
  12456              vector unsigned __int128 __c) {
  12457   return __builtin_altivec_vsubecuq(__a, __b, __c);
  12458 }
  12459 #endif
  12460 
  12461 static __inline__ vector unsigned char __attribute__((__always_inline__))
  12462 vec_subec_u128(vector unsigned char __a, vector unsigned char __b,
  12463                vector unsigned char __c) {
  12464   return (vector unsigned char)__builtin_altivec_vsubecuq_c(
  12465       (vector unsigned char)__a, (vector unsigned char)__b,
  12466       (vector unsigned char)__c);
  12467 }
  12468 #endif // __POWER8_VECTOR__
  12469 
  12470 static __inline__ vector signed int __ATTRS_o_ai
  12471 vec_sube(vector signed int __a, vector signed int __b,
  12472          vector signed int __c) {
  12473   vector signed int __mask = {1, 1, 1, 1};
  12474   vector signed int __carry = __c & __mask;
  12475   return vec_adde(__a, ~__b, __carry);
  12476 }
  12477 
  12478 static __inline__ vector unsigned int __ATTRS_o_ai
  12479 vec_sube(vector unsigned int __a, vector unsigned int __b,
  12480          vector unsigned int __c) {
  12481   vector unsigned int __mask = {1, 1, 1, 1};
  12482   vector unsigned int __carry = __c & __mask;
  12483   return vec_adde(__a, ~__b, __carry);
  12484 }
  12485 /* vec_sum4s */
  12486 
  12487 static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed char __a,
  12488                                                     vector int __b) {
  12489   return __builtin_altivec_vsum4sbs(__a, __b);
  12490 }
  12491 
  12492 static __inline__ vector unsigned int __ATTRS_o_ai
  12493 vec_sum4s(vector unsigned char __a, vector unsigned int __b) {
  12494   return __builtin_altivec_vsum4ubs(__a, __b);
  12495 }
  12496 
  12497 static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed short __a,
  12498                                                     vector int __b) {
  12499   return __builtin_altivec_vsum4shs(__a, __b);
  12500 }
  12501 
  12502 /* vec_vsum4sbs */
  12503 
  12504 static __inline__ vector int __attribute__((__always_inline__))
  12505 vec_vsum4sbs(vector signed char __a, vector int __b) {
  12506   return __builtin_altivec_vsum4sbs(__a, __b);
  12507 }
  12508 
  12509 /* vec_vsum4ubs */
  12510 
  12511 static __inline__ vector unsigned int __attribute__((__always_inline__))
  12512 vec_vsum4ubs(vector unsigned char __a, vector unsigned int __b) {
  12513   return __builtin_altivec_vsum4ubs(__a, __b);
  12514 }
  12515 
  12516 /* vec_vsum4shs */
  12517 
  12518 static __inline__ vector int __attribute__((__always_inline__))
  12519 vec_vsum4shs(vector signed short __a, vector int __b) {
  12520   return __builtin_altivec_vsum4shs(__a, __b);
  12521 }
  12522 
  12523 /* vec_sum2s */
  12524 
  12525 /* The vsum2sws instruction has a big-endian bias, so that the second
  12526    input vector and the result always reference big-endian elements
  12527    1 and 3 (little-endian element 0 and 2).  For ease of porting the
  12528    programmer wants elements 1 and 3 in both cases, so for little
  12529    endian we must perform some permutes.  */
  12530 
  12531 static __inline__ vector signed int __attribute__((__always_inline__))
  12532 vec_sum2s(vector int __a, vector int __b) {
  12533 #ifdef __LITTLE_ENDIAN__
  12534   vector int __c = (vector signed int)vec_perm(
  12535       __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
  12536                                        8, 9, 10, 11));
  12537   __c = __builtin_altivec_vsum2sws(__a, __c);
  12538   return (vector signed int)vec_perm(
  12539       __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
  12540                                        8, 9, 10, 11));
  12541 #else
  12542   return __builtin_altivec_vsum2sws(__a, __b);
  12543 #endif
  12544 }
  12545 
  12546 /* vec_vsum2sws */
  12547 
  12548 static __inline__ vector signed int __attribute__((__always_inline__))
  12549 vec_vsum2sws(vector int __a, vector int __b) {
  12550 #ifdef __LITTLE_ENDIAN__
  12551   vector int __c = (vector signed int)vec_perm(
  12552       __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
  12553                                        8, 9, 10, 11));
  12554   __c = __builtin_altivec_vsum2sws(__a, __c);
  12555   return (vector signed int)vec_perm(
  12556       __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
  12557                                        8, 9, 10, 11));
  12558 #else
  12559   return __builtin_altivec_vsum2sws(__a, __b);
  12560 #endif
  12561 }
  12562 
  12563 /* vec_sums */
  12564 
  12565 /* The vsumsws instruction has a big-endian bias, so that the second
  12566    input vector and the result always reference big-endian element 3
  12567    (little-endian element 0).  For ease of porting the programmer
  12568    wants element 3 in both cases, so for little endian we must perform
  12569    some permutes.  */
  12570 
  12571 static __inline__ vector signed int __attribute__((__always_inline__))
  12572 vec_sums(vector signed int __a, vector signed int __b) {
  12573 #ifdef __LITTLE_ENDIAN__
  12574   __b = (vector signed int)vec_splat(__b, 3);
  12575   __b = __builtin_altivec_vsumsws(__a, __b);
  12576   return (vector signed int)(0, 0, 0, __b[0]);
  12577 #else
  12578   return __builtin_altivec_vsumsws(__a, __b);
  12579 #endif
  12580 }
  12581 
  12582 /* vec_vsumsws */
  12583 
  12584 static __inline__ vector signed int __attribute__((__always_inline__))
  12585 vec_vsumsws(vector signed int __a, vector signed int __b) {
  12586 #ifdef __LITTLE_ENDIAN__
  12587   __b = (vector signed int)vec_splat(__b, 3);
  12588   __b = __builtin_altivec_vsumsws(__a, __b);
  12589   return (vector signed int)(0, 0, 0, __b[0]);
  12590 #else
  12591   return __builtin_altivec_vsumsws(__a, __b);
  12592 #endif
  12593 }
  12594 
  12595 /* vec_trunc */
  12596 
  12597 static __inline__ vector float __ATTRS_o_ai vec_trunc(vector float __a) {
  12598 #ifdef __VSX__
  12599   return __builtin_vsx_xvrspiz(__a);
  12600 #else
  12601   return __builtin_altivec_vrfiz(__a);
  12602 #endif
  12603 }
  12604 
  12605 #ifdef __VSX__
  12606 static __inline__ vector double __ATTRS_o_ai vec_trunc(vector double __a) {
  12607   return __builtin_vsx_xvrdpiz(__a);
  12608 }
  12609 #endif
  12610 
  12611 /* vec_roundz */
  12612 static __inline__ vector float __ATTRS_o_ai vec_roundz(vector float __a) {
  12613   return vec_trunc(__a);
  12614 }
  12615 
  12616 #ifdef __VSX__
  12617 static __inline__ vector double __ATTRS_o_ai vec_roundz(vector double __a) {
  12618   return vec_trunc(__a);
  12619 }
  12620 #endif
  12621 
  12622 /* vec_vrfiz */
  12623 
  12624 static __inline__ vector float __attribute__((__always_inline__))
  12625 vec_vrfiz(vector float __a) {
  12626   return __builtin_altivec_vrfiz(__a);
  12627 }
  12628 
  12629 /* vec_unpackh */
  12630 
  12631 /* The vector unpack instructions all have a big-endian bias, so for
  12632    little endian we must reverse the meanings of "high" and "low."  */
  12633 #ifdef __LITTLE_ENDIAN__
  12634 #define vec_vupkhpx(__a) __builtin_altivec_vupklpx((vector short)(__a))
  12635 #define vec_vupklpx(__a) __builtin_altivec_vupkhpx((vector short)(__a))
  12636 #else
  12637 #define vec_vupkhpx(__a) __builtin_altivec_vupkhpx((vector short)(__a))
  12638 #define vec_vupklpx(__a) __builtin_altivec_vupklpx((vector short)(__a))
  12639 #endif
  12640 
  12641 static __inline__ vector short __ATTRS_o_ai
  12642 vec_unpackh(vector signed char __a) {
  12643 #ifdef __LITTLE_ENDIAN__
  12644   return __builtin_altivec_vupklsb((vector char)__a);
  12645 #else
  12646   return __builtin_altivec_vupkhsb((vector char)__a);
  12647 #endif
  12648 }
  12649 
  12650 static __inline__ vector bool short __ATTRS_o_ai
  12651 vec_unpackh(vector bool char __a) {
  12652 #ifdef __LITTLE_ENDIAN__
  12653   return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
  12654 #else
  12655   return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
  12656 #endif
  12657 }
  12658 
  12659 static __inline__ vector int __ATTRS_o_ai vec_unpackh(vector short __a) {
  12660 #ifdef __LITTLE_ENDIAN__
  12661   return __builtin_altivec_vupklsh(__a);
  12662 #else
  12663   return __builtin_altivec_vupkhsh(__a);
  12664 #endif
  12665 }
  12666 
  12667 static __inline__ vector bool int __ATTRS_o_ai
  12668 vec_unpackh(vector bool short __a) {
  12669 #ifdef __LITTLE_ENDIAN__
  12670   return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
  12671 #else
  12672   return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
  12673 #endif
  12674 }
  12675 
  12676 static __inline__ vector unsigned int __ATTRS_o_ai
  12677 vec_unpackh(vector pixel __a) {
  12678 #ifdef __LITTLE_ENDIAN__
  12679   return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
  12680 #else
  12681   return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
  12682 #endif
  12683 }
  12684 
  12685 #ifdef __POWER8_VECTOR__
  12686 static __inline__ vector long long __ATTRS_o_ai vec_unpackh(vector int __a) {
  12687 #ifdef __LITTLE_ENDIAN__
  12688   return __builtin_altivec_vupklsw(__a);
  12689 #else
  12690   return __builtin_altivec_vupkhsw(__a);
  12691 #endif
  12692 }
  12693 
  12694 static __inline__ vector bool long long __ATTRS_o_ai
  12695 vec_unpackh(vector bool int __a) {
  12696 #ifdef __LITTLE_ENDIAN__
  12697   return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
  12698 #else
  12699   return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
  12700 #endif
  12701 }
  12702 
  12703 static __inline__ vector double __ATTRS_o_ai
  12704 vec_unpackh(vector float __a) {
  12705   return (vector double)(__a[0], __a[1]);
  12706 }
  12707 #endif
  12708 
  12709 /* vec_vupkhsb */
  12710 
  12711 static __inline__ vector short __ATTRS_o_ai
  12712 vec_vupkhsb(vector signed char __a) {
  12713 #ifdef __LITTLE_ENDIAN__
  12714   return __builtin_altivec_vupklsb((vector char)__a);
  12715 #else
  12716   return __builtin_altivec_vupkhsb((vector char)__a);
  12717 #endif
  12718 }
  12719 
  12720 static __inline__ vector bool short __ATTRS_o_ai
  12721 vec_vupkhsb(vector bool char __a) {
  12722 #ifdef __LITTLE_ENDIAN__
  12723   return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
  12724 #else
  12725   return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
  12726 #endif
  12727 }
  12728 
  12729 /* vec_vupkhsh */
  12730 
  12731 static __inline__ vector int __ATTRS_o_ai vec_vupkhsh(vector short __a) {
  12732 #ifdef __LITTLE_ENDIAN__
  12733   return __builtin_altivec_vupklsh(__a);
  12734 #else
  12735   return __builtin_altivec_vupkhsh(__a);
  12736 #endif
  12737 }
  12738 
  12739 static __inline__ vector bool int __ATTRS_o_ai
  12740 vec_vupkhsh(vector bool short __a) {
  12741 #ifdef __LITTLE_ENDIAN__
  12742   return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
  12743 #else
  12744   return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
  12745 #endif
  12746 }
  12747 
  12748 static __inline__ vector unsigned int __ATTRS_o_ai
  12749 vec_vupkhsh(vector pixel __a) {
  12750 #ifdef __LITTLE_ENDIAN__
  12751   return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
  12752 #else
  12753   return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
  12754 #endif
  12755 }
  12756 
  12757 /* vec_vupkhsw */
  12758 
  12759 #ifdef __POWER8_VECTOR__
  12760 static __inline__ vector long long __ATTRS_o_ai vec_vupkhsw(vector int __a) {
  12761 #ifdef __LITTLE_ENDIAN__
  12762   return __builtin_altivec_vupklsw(__a);
  12763 #else
  12764   return __builtin_altivec_vupkhsw(__a);
  12765 #endif
  12766 }
  12767 
  12768 static __inline__ vector bool long long __ATTRS_o_ai
  12769 vec_vupkhsw(vector bool int __a) {
  12770 #ifdef __LITTLE_ENDIAN__
  12771   return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
  12772 #else
  12773   return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
  12774 #endif
  12775 }
  12776 #endif
  12777 
  12778 /* vec_unpackl */
  12779 
  12780 static __inline__ vector short __ATTRS_o_ai
  12781 vec_unpackl(vector signed char __a) {
  12782 #ifdef __LITTLE_ENDIAN__
  12783   return __builtin_altivec_vupkhsb((vector char)__a);
  12784 #else
  12785   return __builtin_altivec_vupklsb((vector char)__a);
  12786 #endif
  12787 }
  12788 
  12789 static __inline__ vector bool short __ATTRS_o_ai
  12790 vec_unpackl(vector bool char __a) {
  12791 #ifdef __LITTLE_ENDIAN__
  12792   return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
  12793 #else
  12794   return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
  12795 #endif
  12796 }
  12797 
  12798 static __inline__ vector int __ATTRS_o_ai vec_unpackl(vector short __a) {
  12799 #ifdef __LITTLE_ENDIAN__
  12800   return __builtin_altivec_vupkhsh(__a);
  12801 #else
  12802   return __builtin_altivec_vupklsh(__a);
  12803 #endif
  12804 }
  12805 
  12806 static __inline__ vector bool int __ATTRS_o_ai
  12807 vec_unpackl(vector bool short __a) {
  12808 #ifdef __LITTLE_ENDIAN__
  12809   return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
  12810 #else
  12811   return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
  12812 #endif
  12813 }
  12814 
  12815 static __inline__ vector unsigned int __ATTRS_o_ai
  12816 vec_unpackl(vector pixel __a) {
  12817 #ifdef __LITTLE_ENDIAN__
  12818   return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
  12819 #else
  12820   return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
  12821 #endif
  12822 }
  12823 
  12824 #ifdef __POWER8_VECTOR__
  12825 static __inline__ vector long long __ATTRS_o_ai vec_unpackl(vector int __a) {
  12826 #ifdef __LITTLE_ENDIAN__
  12827   return __builtin_altivec_vupkhsw(__a);
  12828 #else
  12829   return __builtin_altivec_vupklsw(__a);
  12830 #endif
  12831 }
  12832 
  12833 static __inline__ vector bool long long __ATTRS_o_ai
  12834 vec_unpackl(vector bool int __a) {
  12835 #ifdef __LITTLE_ENDIAN__
  12836   return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
  12837 #else
  12838   return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
  12839 #endif
  12840 }
  12841 
  12842 static __inline__ vector double __ATTRS_o_ai
  12843 vec_unpackl(vector float __a) {
  12844   return (vector double)(__a[2], __a[3]);
  12845 }
  12846 #endif
  12847 
  12848 /* vec_vupklsb */
  12849 
  12850 static __inline__ vector short __ATTRS_o_ai
  12851 vec_vupklsb(vector signed char __a) {
  12852 #ifdef __LITTLE_ENDIAN__
  12853   return __builtin_altivec_vupkhsb((vector char)__a);
  12854 #else
  12855   return __builtin_altivec_vupklsb((vector char)__a);
  12856 #endif
  12857 }
  12858 
  12859 static __inline__ vector bool short __ATTRS_o_ai
  12860 vec_vupklsb(vector bool char __a) {
  12861 #ifdef __LITTLE_ENDIAN__
  12862   return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
  12863 #else
  12864   return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
  12865 #endif
  12866 }
  12867 
  12868 /* vec_vupklsh */
  12869 
  12870 static __inline__ vector int __ATTRS_o_ai vec_vupklsh(vector short __a) {
  12871 #ifdef __LITTLE_ENDIAN__
  12872   return __builtin_altivec_vupkhsh(__a);
  12873 #else
  12874   return __builtin_altivec_vupklsh(__a);
  12875 #endif
  12876 }
  12877 
  12878 static __inline__ vector bool int __ATTRS_o_ai
  12879 vec_vupklsh(vector bool short __a) {
  12880 #ifdef __LITTLE_ENDIAN__
  12881   return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
  12882 #else
  12883   return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
  12884 #endif
  12885 }
  12886 
  12887 static __inline__ vector unsigned int __ATTRS_o_ai
  12888 vec_vupklsh(vector pixel __a) {
  12889 #ifdef __LITTLE_ENDIAN__
  12890   return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
  12891 #else
  12892   return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
  12893 #endif
  12894 }
  12895 
  12896 /* vec_vupklsw */
  12897 
  12898 #ifdef __POWER8_VECTOR__
  12899 static __inline__ vector long long __ATTRS_o_ai vec_vupklsw(vector int __a) {
  12900 #ifdef __LITTLE_ENDIAN__
  12901   return __builtin_altivec_vupkhsw(__a);
  12902 #else
  12903   return __builtin_altivec_vupklsw(__a);
  12904 #endif
  12905 }
  12906 
  12907 static __inline__ vector bool long long __ATTRS_o_ai
  12908 vec_vupklsw(vector bool int __a) {
  12909 #ifdef __LITTLE_ENDIAN__
  12910   return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
  12911 #else
  12912   return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
  12913 #endif
  12914 }
  12915 #endif
  12916 
  12917 /* vec_vsx_ld */
  12918 
  12919 #ifdef __VSX__
  12920 
  12921 static __inline__ vector bool int __ATTRS_o_ai
  12922 vec_vsx_ld(int __a, const vector bool int *__b) {
  12923   return (vector bool int)__builtin_vsx_lxvw4x(__a, __b);
  12924 }
  12925 
  12926 static __inline__ vector signed int __ATTRS_o_ai
  12927 vec_vsx_ld(int __a, const vector signed int *__b) {
  12928   return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
  12929 }
  12930 
  12931 static __inline__ vector signed int __ATTRS_o_ai
  12932 vec_vsx_ld(int __a, const signed int *__b) {
  12933   return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
  12934 }
  12935 
  12936 static __inline__ vector unsigned int __ATTRS_o_ai
  12937 vec_vsx_ld(int __a, const vector unsigned int *__b) {
  12938   return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
  12939 }
  12940 
  12941 static __inline__ vector unsigned int __ATTRS_o_ai
  12942 vec_vsx_ld(int __a, const unsigned int *__b) {
  12943   return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
  12944 }
  12945 
  12946 static __inline__ vector float __ATTRS_o_ai
  12947 vec_vsx_ld(int __a, const vector float *__b) {
  12948   return (vector float)__builtin_vsx_lxvw4x(__a, __b);
  12949 }
  12950 
  12951 static __inline__ vector float __ATTRS_o_ai vec_vsx_ld(int __a,
  12952                                                        const float *__b) {
  12953   return (vector float)__builtin_vsx_lxvw4x(__a, __b);
  12954 }
  12955 
  12956 static __inline__ vector signed long long __ATTRS_o_ai
  12957 vec_vsx_ld(int __a, const vector signed long long *__b) {
  12958   return (vector signed long long)__builtin_vsx_lxvd2x(__a, __b);
  12959 }
  12960 
  12961 static __inline__ vector unsigned long long __ATTRS_o_ai
  12962 vec_vsx_ld(int __a, const vector unsigned long long *__b) {
  12963   return (vector unsigned long long)__builtin_vsx_lxvd2x(__a, __b);
  12964 }
  12965 
  12966 static __inline__ vector double __ATTRS_o_ai
  12967 vec_vsx_ld(int __a, const vector double *__b) {
  12968   return (vector double)__builtin_vsx_lxvd2x(__a, __b);
  12969 }
  12970 
  12971 static __inline__ vector double __ATTRS_o_ai
  12972 vec_vsx_ld(int __a, const double *__b) {
  12973   return (vector double)__builtin_vsx_lxvd2x(__a, __b);
  12974 }
  12975 
  12976 static __inline__ vector bool short __ATTRS_o_ai
  12977 vec_vsx_ld(int __a, const vector bool short *__b) {
  12978   return (vector bool short)__builtin_vsx_lxvw4x(__a, __b);
  12979 }
  12980 
  12981 static __inline__ vector signed short __ATTRS_o_ai
  12982 vec_vsx_ld(int __a, const vector signed short *__b) {
  12983   return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
  12984 }
  12985 
  12986 static __inline__ vector signed short __ATTRS_o_ai
  12987 vec_vsx_ld(int __a, const signed short *__b) {
  12988   return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
  12989 }
  12990 
  12991 static __inline__ vector unsigned short __ATTRS_o_ai
  12992 vec_vsx_ld(int __a, const vector unsigned short *__b) {
  12993   return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
  12994 }
  12995 
  12996 static __inline__ vector unsigned short __ATTRS_o_ai
  12997 vec_vsx_ld(int __a, const unsigned short *__b) {
  12998   return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
  12999 }
  13000 
  13001 static __inline__ vector bool char __ATTRS_o_ai
  13002 vec_vsx_ld(int __a, const vector bool char *__b) {
  13003   return (vector bool char)__builtin_vsx_lxvw4x(__a, __b);
  13004 }
  13005 
  13006 static __inline__ vector signed char __ATTRS_o_ai
  13007 vec_vsx_ld(int __a, const vector signed char *__b) {
  13008   return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
  13009 }
  13010 
  13011 static __inline__ vector signed char __ATTRS_o_ai
  13012 vec_vsx_ld(int __a, const signed char *__b) {
  13013   return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
  13014 }
  13015 
  13016 static __inline__ vector unsigned char __ATTRS_o_ai
  13017 vec_vsx_ld(int __a, const vector unsigned char *__b) {
  13018   return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
  13019 }
  13020 
  13021 static __inline__ vector unsigned char __ATTRS_o_ai
  13022 vec_vsx_ld(int __a, const unsigned char *__b) {
  13023   return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
  13024 }
  13025 
  13026 #endif
  13027 
  13028 /* vec_vsx_st */
  13029 
  13030 #ifdef __VSX__
  13031 
  13032 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
  13033                                                vector bool int *__c) {
  13034   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13035 }
  13036 
  13037 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
  13038                                                signed int *__c) {
  13039   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13040 }
  13041 
  13042 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
  13043                                                unsigned int *__c) {
  13044   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13045 }
  13046 
  13047 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
  13048                                                vector signed int *__c) {
  13049   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13050 }
  13051 
  13052 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
  13053                                                signed int *__c) {
  13054   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13055 }
  13056 
  13057 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
  13058                                                vector unsigned int *__c) {
  13059   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13060 }
  13061 
  13062 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
  13063                                                unsigned int *__c) {
  13064   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13065 }
  13066 
  13067 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
  13068                                                vector float *__c) {
  13069   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13070 }
  13071 
  13072 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
  13073                                                float *__c) {
  13074   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13075 }
  13076 
  13077 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed long long __a,
  13078                                                int __b,
  13079                                                vector signed long long *__c) {
  13080   __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
  13081 }
  13082 
  13083 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned long long __a,
  13084                                                int __b,
  13085                                                vector unsigned long long *__c) {
  13086   __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
  13087 }
  13088 
  13089 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
  13090                                                vector double *__c) {
  13091   __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
  13092 }
  13093 
  13094 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
  13095                                                double *__c) {
  13096   __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
  13097 }
  13098 
  13099 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
  13100                                                vector bool short *__c) {
  13101   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13102 }
  13103 
  13104 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
  13105                                                signed short *__c) {
  13106   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13107 }
  13108 
  13109 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
  13110                                                unsigned short *__c) {
  13111   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13112 }
  13113 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
  13114                                                vector signed short *__c) {
  13115   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13116 }
  13117 
  13118 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
  13119                                                signed short *__c) {
  13120   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13121 }
  13122 
  13123 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
  13124                                                int __b,
  13125                                                vector unsigned short *__c) {
  13126   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13127 }
  13128 
  13129 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
  13130                                                int __b, unsigned short *__c) {
  13131   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13132 }
  13133 
  13134 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
  13135                                                vector bool char *__c) {
  13136   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13137 }
  13138 
  13139 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
  13140                                                signed char *__c) {
  13141   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13142 }
  13143 
  13144 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
  13145                                                unsigned char *__c) {
  13146   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13147 }
  13148 
  13149 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
  13150                                                vector signed char *__c) {
  13151   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13152 }
  13153 
  13154 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
  13155                                                signed char *__c) {
  13156   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13157 }
  13158 
  13159 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
  13160                                                int __b,
  13161                                                vector unsigned char *__c) {
  13162   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13163 }
  13164 
  13165 static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
  13166                                                int __b, unsigned char *__c) {
  13167   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13168 }
  13169 
  13170 #endif
  13171 
  13172 #ifdef __VSX__
  13173 #define vec_xxpermdi __builtin_vsx_xxpermdi
  13174 #define vec_xxsldwi __builtin_vsx_xxsldwi
  13175 #define vec_permi(__a, __b, __c)                                               \
  13176   _Generic((__a), vector signed long long                                      \
  13177            : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1),       \
  13178                                      (((__c)&0x1) + 2)),                       \
  13179              vector unsigned long long                                         \
  13180            : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1),       \
  13181                                      (((__c)&0x1) + 2)),                       \
  13182              vector double                                                     \
  13183            : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1),       \
  13184                                      (((__c)&0x1) + 2)))
  13185 #endif
  13186 
  13187 /* vec_xor */
  13188 
  13189 #define __builtin_altivec_vxor vec_xor
  13190 
  13191 static __inline__ vector signed char __ATTRS_o_ai
  13192 vec_xor(vector signed char __a, vector signed char __b) {
  13193   return __a ^ __b;
  13194 }
  13195 
  13196 static __inline__ vector signed char __ATTRS_o_ai
  13197 vec_xor(vector bool char __a, vector signed char __b) {
  13198   return (vector signed char)__a ^ __b;
  13199 }
  13200 
  13201 static __inline__ vector signed char __ATTRS_o_ai
  13202 vec_xor(vector signed char __a, vector bool char __b) {
  13203   return __a ^ (vector signed char)__b;
  13204 }
  13205 
  13206 static __inline__ vector unsigned char __ATTRS_o_ai
  13207 vec_xor(vector unsigned char __a, vector unsigned char __b) {
  13208   return __a ^ __b;
  13209 }
  13210 
  13211 static __inline__ vector unsigned char __ATTRS_o_ai
  13212 vec_xor(vector bool char __a, vector unsigned char __b) {
  13213   return (vector unsigned char)__a ^ __b;
  13214 }
  13215 
  13216 static __inline__ vector unsigned char __ATTRS_o_ai
  13217 vec_xor(vector unsigned char __a, vector bool char __b) {
  13218   return __a ^ (vector unsigned char)__b;
  13219 }
  13220 
  13221 static __inline__ vector bool char __ATTRS_o_ai vec_xor(vector bool char __a,
  13222                                                         vector bool char __b) {
  13223   return __a ^ __b;
  13224 }
  13225 
  13226 static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
  13227                                                     vector short __b) {
  13228   return __a ^ __b;
  13229 }
  13230 
  13231 static __inline__ vector short __ATTRS_o_ai vec_xor(vector bool short __a,
  13232                                                     vector short __b) {
  13233   return (vector short)__a ^ __b;
  13234 }
  13235 
  13236 static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
  13237                                                     vector bool short __b) {
  13238   return __a ^ (vector short)__b;
  13239 }
  13240 
  13241 static __inline__ vector unsigned short __ATTRS_o_ai
  13242 vec_xor(vector unsigned short __a, vector unsigned short __b) {
  13243   return __a ^ __b;
  13244 }
  13245 
  13246 static __inline__ vector unsigned short __ATTRS_o_ai
  13247 vec_xor(vector bool short __a, vector unsigned short __b) {
  13248   return (vector unsigned short)__a ^ __b;
  13249 }
  13250 
  13251 static __inline__ vector unsigned short __ATTRS_o_ai
  13252 vec_xor(vector unsigned short __a, vector bool short __b) {
  13253   return __a ^ (vector unsigned short)__b;
  13254 }
  13255 
  13256 static __inline__ vector bool short __ATTRS_o_ai
  13257 vec_xor(vector bool short __a, vector bool short __b) {
  13258   return __a ^ __b;
  13259 }
  13260 
  13261 static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
  13262                                                   vector int __b) {
  13263   return __a ^ __b;
  13264 }
  13265 
  13266 static __inline__ vector int __ATTRS_o_ai vec_xor(vector bool int __a,
  13267                                                   vector int __b) {
  13268   return (vector int)__a ^ __b;
  13269 }
  13270 
  13271 static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
  13272                                                   vector bool int __b) {
  13273   return __a ^ (vector int)__b;
  13274 }
  13275 
  13276 static __inline__ vector unsigned int __ATTRS_o_ai
  13277 vec_xor(vector unsigned int __a, vector unsigned int __b) {
  13278   return __a ^ __b;
  13279 }
  13280 
  13281 static __inline__ vector unsigned int __ATTRS_o_ai
  13282 vec_xor(vector bool int __a, vector unsigned int __b) {
  13283   return (vector unsigned int)__a ^ __b;
  13284 }
  13285 
  13286 static __inline__ vector unsigned int __ATTRS_o_ai
  13287 vec_xor(vector unsigned int __a, vector bool int __b) {
  13288   return __a ^ (vector unsigned int)__b;
  13289 }
  13290 
  13291 static __inline__ vector bool int __ATTRS_o_ai vec_xor(vector bool int __a,
  13292                                                        vector bool int __b) {
  13293   return __a ^ __b;
  13294 }
  13295 
  13296 static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
  13297                                                     vector float __b) {
  13298   vector unsigned int __res =
  13299       (vector unsigned int)__a ^ (vector unsigned int)__b;
  13300   return (vector float)__res;
  13301 }
  13302 
  13303 static __inline__ vector float __ATTRS_o_ai vec_xor(vector bool int __a,
  13304                                                     vector float __b) {
  13305   vector unsigned int __res =
  13306       (vector unsigned int)__a ^ (vector unsigned int)__b;
  13307   return (vector float)__res;
  13308 }
  13309 
  13310 static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
  13311                                                     vector bool int __b) {
  13312   vector unsigned int __res =
  13313       (vector unsigned int)__a ^ (vector unsigned int)__b;
  13314   return (vector float)__res;
  13315 }
  13316 
  13317 #ifdef __VSX__
  13318 static __inline__ vector signed long long __ATTRS_o_ai
  13319 vec_xor(vector signed long long __a, vector signed long long __b) {
  13320   return __a ^ __b;
  13321 }
  13322 
  13323 static __inline__ vector signed long long __ATTRS_o_ai
  13324 vec_xor(vector bool long long __a, vector signed long long __b) {
  13325   return (vector signed long long)__a ^ __b;
  13326 }
  13327 
  13328 static __inline__ vector signed long long __ATTRS_o_ai
  13329 vec_xor(vector signed long long __a, vector bool long long __b) {
  13330   return __a ^ (vector signed long long)__b;
  13331 }
  13332 
  13333 static __inline__ vector unsigned long long __ATTRS_o_ai
  13334 vec_xor(vector unsigned long long __a, vector unsigned long long __b) {
  13335   return __a ^ __b;
  13336 }
  13337 
  13338 static __inline__ vector unsigned long long __ATTRS_o_ai
  13339 vec_xor(vector bool long long __a, vector unsigned long long __b) {
  13340   return (vector unsigned long long)__a ^ __b;
  13341 }
  13342 
  13343 static __inline__ vector unsigned long long __ATTRS_o_ai
  13344 vec_xor(vector unsigned long long __a, vector bool long long __b) {
  13345   return __a ^ (vector unsigned long long)__b;
  13346 }
  13347 
  13348 static __inline__ vector bool long long __ATTRS_o_ai
  13349 vec_xor(vector bool long long __a, vector bool long long __b) {
  13350   return __a ^ __b;
  13351 }
  13352 
  13353 static __inline__ vector double __ATTRS_o_ai vec_xor(vector double __a,
  13354                                                      vector double __b) {
  13355   return (vector double)((vector unsigned long long)__a ^
  13356                          (vector unsigned long long)__b);
  13357 }
  13358 
  13359 static __inline__ vector double __ATTRS_o_ai
  13360 vec_xor(vector double __a, vector bool long long __b) {
  13361   return (vector double)((vector unsigned long long)__a ^
  13362                          (vector unsigned long long)__b);
  13363 }
  13364 
  13365 static __inline__ vector double __ATTRS_o_ai vec_xor(vector bool long long __a,
  13366                                                      vector double __b) {
  13367   return (vector double)((vector unsigned long long)__a ^
  13368                          (vector unsigned long long)__b);
  13369 }
  13370 #endif
  13371 
  13372 /* vec_vxor */
  13373 
  13374 static __inline__ vector signed char __ATTRS_o_ai
  13375 vec_vxor(vector signed char __a, vector signed char __b) {
  13376   return __a ^ __b;
  13377 }
  13378 
  13379 static __inline__ vector signed char __ATTRS_o_ai
  13380 vec_vxor(vector bool char __a, vector signed char __b) {
  13381   return (vector signed char)__a ^ __b;
  13382 }
  13383 
  13384 static __inline__ vector signed char __ATTRS_o_ai
  13385 vec_vxor(vector signed char __a, vector bool char __b) {
  13386   return __a ^ (vector signed char)__b;
  13387 }
  13388 
  13389 static __inline__ vector unsigned char __ATTRS_o_ai
  13390 vec_vxor(vector unsigned char __a, vector unsigned char __b) {
  13391   return __a ^ __b;
  13392 }
  13393 
  13394 static __inline__ vector unsigned char __ATTRS_o_ai
  13395 vec_vxor(vector bool char __a, vector unsigned char __b) {
  13396   return (vector unsigned char)__a ^ __b;
  13397 }
  13398 
  13399 static __inline__ vector unsigned char __ATTRS_o_ai
  13400 vec_vxor(vector unsigned char __a, vector bool char __b) {
  13401   return __a ^ (vector unsigned char)__b;
  13402 }
  13403 
  13404 static __inline__ vector bool char __ATTRS_o_ai vec_vxor(vector bool char __a,
  13405                                                          vector bool char __b) {
  13406   return __a ^ __b;
  13407 }
  13408 
  13409 static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
  13410                                                      vector short __b) {
  13411   return __a ^ __b;
  13412 }
  13413 
  13414 static __inline__ vector short __ATTRS_o_ai vec_vxor(vector bool short __a,
  13415                                                      vector short __b) {
  13416   return (vector short)__a ^ __b;
  13417 }
  13418 
  13419 static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
  13420                                                      vector bool short __b) {
  13421   return __a ^ (vector short)__b;
  13422 }
  13423 
  13424 static __inline__ vector unsigned short __ATTRS_o_ai
  13425 vec_vxor(vector unsigned short __a, vector unsigned short __b) {
  13426   return __a ^ __b;
  13427 }
  13428 
  13429 static __inline__ vector unsigned short __ATTRS_o_ai
  13430 vec_vxor(vector bool short __a, vector unsigned short __b) {
  13431   return (vector unsigned short)__a ^ __b;
  13432 }
  13433 
  13434 static __inline__ vector unsigned short __ATTRS_o_ai
  13435 vec_vxor(vector unsigned short __a, vector bool short __b) {
  13436   return __a ^ (vector unsigned short)__b;
  13437 }
  13438 
  13439 static __inline__ vector bool short __ATTRS_o_ai
  13440 vec_vxor(vector bool short __a, vector bool short __b) {
  13441   return __a ^ __b;
  13442 }
  13443 
  13444 static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
  13445                                                    vector int __b) {
  13446   return __a ^ __b;
  13447 }
  13448 
  13449 static __inline__ vector int __ATTRS_o_ai vec_vxor(vector bool int __a,
  13450                                                    vector int __b) {
  13451   return (vector int)__a ^ __b;
  13452 }
  13453 
  13454 static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
  13455                                                    vector bool int __b) {
  13456   return __a ^ (vector int)__b;
  13457 }
  13458 
  13459 static __inline__ vector unsigned int __ATTRS_o_ai
  13460 vec_vxor(vector unsigned int __a, vector unsigned int __b) {
  13461   return __a ^ __b;
  13462 }
  13463 
  13464 static __inline__ vector unsigned int __ATTRS_o_ai
  13465 vec_vxor(vector bool int __a, vector unsigned int __b) {
  13466   return (vector unsigned int)__a ^ __b;
  13467 }
  13468 
  13469 static __inline__ vector unsigned int __ATTRS_o_ai
  13470 vec_vxor(vector unsigned int __a, vector bool int __b) {
  13471   return __a ^ (vector unsigned int)__b;
  13472 }
  13473 
  13474 static __inline__ vector bool int __ATTRS_o_ai vec_vxor(vector bool int __a,
  13475                                                         vector bool int __b) {
  13476   return __a ^ __b;
  13477 }
  13478 
  13479 static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
  13480                                                      vector float __b) {
  13481   vector unsigned int __res =
  13482       (vector unsigned int)__a ^ (vector unsigned int)__b;
  13483   return (vector float)__res;
  13484 }
  13485 
  13486 static __inline__ vector float __ATTRS_o_ai vec_vxor(vector bool int __a,
  13487                                                      vector float __b) {
  13488   vector unsigned int __res =
  13489       (vector unsigned int)__a ^ (vector unsigned int)__b;
  13490   return (vector float)__res;
  13491 }
  13492 
  13493 static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
  13494                                                      vector bool int __b) {
  13495   vector unsigned int __res =
  13496       (vector unsigned int)__a ^ (vector unsigned int)__b;
  13497   return (vector float)__res;
  13498 }
  13499 
  13500 #ifdef __VSX__
  13501 static __inline__ vector signed long long __ATTRS_o_ai
  13502 vec_vxor(vector signed long long __a, vector signed long long __b) {
  13503   return __a ^ __b;
  13504 }
  13505 
  13506 static __inline__ vector signed long long __ATTRS_o_ai
  13507 vec_vxor(vector bool long long __a, vector signed long long __b) {
  13508   return (vector signed long long)__a ^ __b;
  13509 }
  13510 
  13511 static __inline__ vector signed long long __ATTRS_o_ai
  13512 vec_vxor(vector signed long long __a, vector bool long long __b) {
  13513   return __a ^ (vector signed long long)__b;
  13514 }
  13515 
  13516 static __inline__ vector unsigned long long __ATTRS_o_ai
  13517 vec_vxor(vector unsigned long long __a, vector unsigned long long __b) {
  13518   return __a ^ __b;
  13519 }
  13520 
  13521 static __inline__ vector unsigned long long __ATTRS_o_ai
  13522 vec_vxor(vector bool long long __a, vector unsigned long long __b) {
  13523   return (vector unsigned long long)__a ^ __b;
  13524 }
  13525 
  13526 static __inline__ vector unsigned long long __ATTRS_o_ai
  13527 vec_vxor(vector unsigned long long __a, vector bool long long __b) {
  13528   return __a ^ (vector unsigned long long)__b;
  13529 }
  13530 
  13531 static __inline__ vector bool long long __ATTRS_o_ai
  13532 vec_vxor(vector bool long long __a, vector bool long long __b) {
  13533   return __a ^ __b;
  13534 }
  13535 #endif
  13536 
  13537 /* ------------------------ extensions for CBEA ----------------------------- */
  13538 
  13539 /* vec_extract */
  13540 
  13541 static __inline__ signed char __ATTRS_o_ai vec_extract(vector signed char __a,
  13542                                                        signed int __b) {
  13543   return __a[__b & 0xf];
  13544 }
  13545 
  13546 static __inline__ unsigned char __ATTRS_o_ai
  13547 vec_extract(vector unsigned char __a, signed int __b) {
  13548   return __a[__b & 0xf];
  13549 }
  13550 
  13551 static __inline__ unsigned char __ATTRS_o_ai vec_extract(vector bool char __a,
  13552                                                          signed int __b) {
  13553   return __a[__b & 0xf];
  13554 }
  13555 
  13556 static __inline__ signed short __ATTRS_o_ai vec_extract(vector signed short __a,
  13557                                                         signed int __b) {
  13558   return __a[__b & 0x7];
  13559 }
  13560 
  13561 static __inline__ unsigned short __ATTRS_o_ai
  13562 vec_extract(vector unsigned short __a, signed int __b) {
  13563   return __a[__b & 0x7];
  13564 }
  13565 
  13566 static __inline__ unsigned short __ATTRS_o_ai vec_extract(vector bool short __a,
  13567                                                           signed int __b) {
  13568   return __a[__b & 0x7];
  13569 }
  13570 
  13571 static __inline__ signed int __ATTRS_o_ai vec_extract(vector signed int __a,
  13572                                                       signed int __b) {
  13573   return __a[__b & 0x3];
  13574 }
  13575 
  13576 static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector unsigned int __a,
  13577                                                         signed int __b) {
  13578   return __a[__b & 0x3];
  13579 }
  13580 
  13581 static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector bool int __a,
  13582                                                         signed int __b) {
  13583   return __a[__b & 0x3];
  13584 }
  13585 
  13586 #ifdef __VSX__
  13587 static __inline__ signed long long __ATTRS_o_ai
  13588 vec_extract(vector signed long long __a, signed int __b) {
  13589   return __a[__b & 0x1];
  13590 }
  13591 
  13592 static __inline__ unsigned long long __ATTRS_o_ai
  13593 vec_extract(vector unsigned long long __a, signed int __b) {
  13594   return __a[__b & 0x1];
  13595 }
  13596 
  13597 static __inline__ unsigned long long __ATTRS_o_ai
  13598 vec_extract(vector bool long long __a, signed int __b) {
  13599   return __a[__b & 0x1];
  13600 }
  13601 
  13602 static __inline__ double __ATTRS_o_ai vec_extract(vector double __a,
  13603                                                   signed int __b) {
  13604   return __a[__b & 0x1];
  13605 }
  13606 #endif
  13607 
  13608 static __inline__ float __ATTRS_o_ai vec_extract(vector float __a,
  13609                                                  signed int __b) {
  13610   return __a[__b & 0x3];
  13611 }
  13612 
  13613 #ifdef __POWER9_VECTOR__
  13614 
  13615 #define vec_insert4b __builtin_vsx_insertword
  13616 #define vec_extract4b __builtin_vsx_extractuword
  13617 
  13618 /* vec_extract_exp */
  13619 
  13620 static __inline__ vector unsigned int __ATTRS_o_ai
  13621 vec_extract_exp(vector float __a) {
  13622   return __builtin_vsx_xvxexpsp(__a);
  13623 }
  13624 
  13625 static __inline__ vector unsigned long long __ATTRS_o_ai
  13626 vec_extract_exp(vector double __a) {
  13627   return __builtin_vsx_xvxexpdp(__a);
  13628 }
  13629 
  13630 /* vec_extract_sig */
  13631 
  13632 static __inline__ vector unsigned int __ATTRS_o_ai
  13633 vec_extract_sig(vector float __a) {
  13634   return __builtin_vsx_xvxsigsp(__a);
  13635 }
  13636 
  13637 static __inline__ vector unsigned long long __ATTRS_o_ai
  13638 vec_extract_sig (vector double __a) {
  13639   return __builtin_vsx_xvxsigdp(__a);
  13640 }
  13641 
  13642 static __inline__ vector float __ATTRS_o_ai
  13643 vec_extract_fp32_from_shorth(vector unsigned short __a) {
  13644   vector unsigned short __b =
  13645 #ifdef __LITTLE_ENDIAN__
  13646             __builtin_shufflevector(__a, __a, 0, -1, 1, -1, 2, -1, 3, -1);
  13647 #else
  13648             __builtin_shufflevector(__a, __a, -1, 0, -1, 1, -1, 2, -1, 3);
  13649 #endif
  13650   return __builtin_vsx_xvcvhpsp(__b);
  13651 }
  13652 
  13653 static __inline__ vector float __ATTRS_o_ai
  13654 vec_extract_fp32_from_shortl(vector unsigned short __a) {
  13655   vector unsigned short __b =
  13656 #ifdef __LITTLE_ENDIAN__
  13657             __builtin_shufflevector(__a, __a, 4, -1, 5, -1, 6, -1, 7, -1);
  13658 #else
  13659             __builtin_shufflevector(__a, __a, -1, 4, -1, 5, -1, 6, -1, 7);
  13660 #endif
  13661   return __builtin_vsx_xvcvhpsp(__b);
  13662 }
  13663 #endif /* __POWER9_VECTOR__ */
  13664 
  13665 /* vec_insert */
  13666 
  13667 static __inline__ vector signed char __ATTRS_o_ai
  13668 vec_insert(signed char __a, vector signed char __b, int __c) {
  13669   __b[__c & 0xF] = __a;
  13670   return __b;
  13671 }
  13672 
  13673 static __inline__ vector unsigned char __ATTRS_o_ai
  13674 vec_insert(unsigned char __a, vector unsigned char __b, int __c) {
  13675   __b[__c & 0xF] = __a;
  13676   return __b;
  13677 }
  13678 
  13679 static __inline__ vector bool char __ATTRS_o_ai vec_insert(unsigned char __a,
  13680                                                            vector bool char __b,
  13681                                                            int __c) {
  13682   __b[__c & 0xF] = __a;
  13683   return __b;
  13684 }
  13685 
  13686 static __inline__ vector signed short __ATTRS_o_ai
  13687 vec_insert(signed short __a, vector signed short __b, int __c) {
  13688   __b[__c & 0x7] = __a;
  13689   return __b;
  13690 }
  13691 
  13692 static __inline__ vector unsigned short __ATTRS_o_ai
  13693 vec_insert(unsigned short __a, vector unsigned short __b, int __c) {
  13694   __b[__c & 0x7] = __a;
  13695   return __b;
  13696 }
  13697 
  13698 static __inline__ vector bool short __ATTRS_o_ai
  13699 vec_insert(unsigned short __a, vector bool short __b, int __c) {
  13700   __b[__c & 0x7] = __a;
  13701   return __b;
  13702 }
  13703 
  13704 static __inline__ vector signed int __ATTRS_o_ai
  13705 vec_insert(signed int __a, vector signed int __b, int __c) {
  13706   __b[__c & 0x3] = __a;
  13707   return __b;
  13708 }
  13709 
  13710 static __inline__ vector unsigned int __ATTRS_o_ai
  13711 vec_insert(unsigned int __a, vector unsigned int __b, int __c) {
  13712   __b[__c & 0x3] = __a;
  13713   return __b;
  13714 }
  13715 
  13716 static __inline__ vector bool int __ATTRS_o_ai vec_insert(unsigned int __a,
  13717                                                           vector bool int __b,
  13718                                                           int __c) {
  13719   __b[__c & 0x3] = __a;
  13720   return __b;
  13721 }
  13722 
  13723 #ifdef __VSX__
  13724 static __inline__ vector signed long long __ATTRS_o_ai
  13725 vec_insert(signed long long __a, vector signed long long __b, int __c) {
  13726   __b[__c & 0x1] = __a;
  13727   return __b;
  13728 }
  13729 
  13730 static __inline__ vector unsigned long long __ATTRS_o_ai
  13731 vec_insert(unsigned long long __a, vector unsigned long long __b, int __c) {
  13732   __b[__c & 0x1] = __a;
  13733   return __b;
  13734 }
  13735 
  13736 static __inline__ vector bool long long __ATTRS_o_ai
  13737 vec_insert(unsigned long long __a, vector bool long long __b, int __c) {
  13738   __b[__c & 0x1] = __a;
  13739   return __b;
  13740 }
  13741 static __inline__ vector double __ATTRS_o_ai vec_insert(double __a,
  13742                                                         vector double __b,
  13743                                                         int __c) {
  13744   __b[__c & 0x1] = __a;
  13745   return __b;
  13746 }
  13747 #endif
  13748 
  13749 static __inline__ vector float __ATTRS_o_ai vec_insert(float __a,
  13750                                                        vector float __b,
  13751                                                        int __c) {
  13752   __b[__c & 0x3] = __a;
  13753   return __b;
  13754 }
  13755 
  13756 /* vec_lvlx */
  13757 
  13758 static __inline__ vector signed char __ATTRS_o_ai
  13759 vec_lvlx(int __a, const signed char *__b) {
  13760   return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
  13761                   vec_lvsl(__a, __b));
  13762 }
  13763 
  13764 static __inline__ vector signed char __ATTRS_o_ai
  13765 vec_lvlx(int __a, const vector signed char *__b) {
  13766   return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
  13767                   vec_lvsl(__a, (unsigned char *)__b));
  13768 }
  13769 
  13770 static __inline__ vector unsigned char __ATTRS_o_ai
  13771 vec_lvlx(int __a, const unsigned char *__b) {
  13772   return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
  13773                   vec_lvsl(__a, __b));
  13774 }
  13775 
  13776 static __inline__ vector unsigned char __ATTRS_o_ai
  13777 vec_lvlx(int __a, const vector unsigned char *__b) {
  13778   return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
  13779                   vec_lvsl(__a, (unsigned char *)__b));
  13780 }
  13781 
  13782 static __inline__ vector bool char __ATTRS_o_ai
  13783 vec_lvlx(int __a, const vector bool char *__b) {
  13784   return vec_perm(vec_ld(__a, __b), (vector bool char)(0),
  13785                   vec_lvsl(__a, (unsigned char *)__b));
  13786 }
  13787 
  13788 static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
  13789                                                      const short *__b) {
  13790   return vec_perm(vec_ld(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
  13791 }
  13792 
  13793 static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
  13794                                                      const vector short *__b) {
  13795   return vec_perm(vec_ld(__a, __b), (vector short)(0),
  13796                   vec_lvsl(__a, (unsigned char *)__b));
  13797 }
  13798 
  13799 static __inline__ vector unsigned short __ATTRS_o_ai
  13800 vec_lvlx(int __a, const unsigned short *__b) {
  13801   return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
  13802                   vec_lvsl(__a, __b));
  13803 }
  13804 
  13805 static __inline__ vector unsigned short __ATTRS_o_ai
  13806 vec_lvlx(int __a, const vector unsigned short *__b) {
  13807   return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
  13808                   vec_lvsl(__a, (unsigned char *)__b));
  13809 }
  13810 
  13811 static __inline__ vector bool short __ATTRS_o_ai
  13812 vec_lvlx(int __a, const vector bool short *__b) {
  13813   return vec_perm(vec_ld(__a, __b), (vector bool short)(0),
  13814                   vec_lvsl(__a, (unsigned char *)__b));
  13815 }
  13816 
  13817 static __inline__ vector pixel __ATTRS_o_ai vec_lvlx(int __a,
  13818                                                      const vector pixel *__b) {
  13819   return vec_perm(vec_ld(__a, __b), (vector pixel)(0),
  13820                   vec_lvsl(__a, (unsigned char *)__b));
  13821 }
  13822 
  13823 static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a, const int *__b) {
  13824   return vec_perm(vec_ld(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
  13825 }
  13826 
  13827 static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a,
  13828                                                    const vector int *__b) {
  13829   return vec_perm(vec_ld(__a, __b), (vector int)(0),
  13830                   vec_lvsl(__a, (unsigned char *)__b));
  13831 }
  13832 
  13833 static __inline__ vector unsigned int __ATTRS_o_ai
  13834 vec_lvlx(int __a, const unsigned int *__b) {
  13835   return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
  13836                   vec_lvsl(__a, __b));
  13837 }
  13838 
  13839 static __inline__ vector unsigned int __ATTRS_o_ai
  13840 vec_lvlx(int __a, const vector unsigned int *__b) {
  13841   return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
  13842                   vec_lvsl(__a, (unsigned char *)__b));
  13843 }
  13844 
  13845 static __inline__ vector bool int __ATTRS_o_ai
  13846 vec_lvlx(int __a, const vector bool int *__b) {
  13847   return vec_perm(vec_ld(__a, __b), (vector bool int)(0),
  13848                   vec_lvsl(__a, (unsigned char *)__b));
  13849 }
  13850 
  13851 static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
  13852                                                      const float *__b) {
  13853   return vec_perm(vec_ld(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
  13854 }
  13855 
  13856 static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
  13857                                                      const vector float *__b) {
  13858   return vec_perm(vec_ld(__a, __b), (vector float)(0),
  13859                   vec_lvsl(__a, (unsigned char *)__b));
  13860 }
  13861 
  13862 /* vec_lvlxl */
  13863 
  13864 static __inline__ vector signed char __ATTRS_o_ai
  13865 vec_lvlxl(int __a, const signed char *__b) {
  13866   return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
  13867                   vec_lvsl(__a, __b));
  13868 }
  13869 
  13870 static __inline__ vector signed char __ATTRS_o_ai
  13871 vec_lvlxl(int __a, const vector signed char *__b) {
  13872   return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
  13873                   vec_lvsl(__a, (unsigned char *)__b));
  13874 }
  13875 
  13876 static __inline__ vector unsigned char __ATTRS_o_ai
  13877 vec_lvlxl(int __a, const unsigned char *__b) {
  13878   return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
  13879                   vec_lvsl(__a, __b));
  13880 }
  13881 
  13882 static __inline__ vector unsigned char __ATTRS_o_ai
  13883 vec_lvlxl(int __a, const vector unsigned char *__b) {
  13884   return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
  13885                   vec_lvsl(__a, (unsigned char *)__b));
  13886 }
  13887 
  13888 static __inline__ vector bool char __ATTRS_o_ai
  13889 vec_lvlxl(int __a, const vector bool char *__b) {
  13890   return vec_perm(vec_ldl(__a, __b), (vector bool char)(0),
  13891                   vec_lvsl(__a, (unsigned char *)__b));
  13892 }
  13893 
  13894 static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
  13895                                                       const short *__b) {
  13896   return vec_perm(vec_ldl(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
  13897 }
  13898 
  13899 static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
  13900                                                       const vector short *__b) {
  13901   return vec_perm(vec_ldl(__a, __b), (vector short)(0),
  13902                   vec_lvsl(__a, (unsigned char *)__b));
  13903 }
  13904 
  13905 static __inline__ vector unsigned short __ATTRS_o_ai
  13906 vec_lvlxl(int __a, const unsigned short *__b) {
  13907   return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
  13908                   vec_lvsl(__a, __b));
  13909 }
  13910 
  13911 static __inline__ vector unsigned short __ATTRS_o_ai
  13912 vec_lvlxl(int __a, const vector unsigned short *__b) {
  13913   return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
  13914                   vec_lvsl(__a, (unsigned char *)__b));
  13915 }
  13916 
  13917 static __inline__ vector bool short __ATTRS_o_ai
  13918 vec_lvlxl(int __a, const vector bool short *__b) {
  13919   return vec_perm(vec_ldl(__a, __b), (vector bool short)(0),
  13920                   vec_lvsl(__a, (unsigned char *)__b));
  13921 }
  13922 
  13923 static __inline__ vector pixel __ATTRS_o_ai vec_lvlxl(int __a,
  13924                                                       const vector pixel *__b) {
  13925   return vec_perm(vec_ldl(__a, __b), (vector pixel)(0),
  13926                   vec_lvsl(__a, (unsigned char *)__b));
  13927 }
  13928 
  13929 static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a, const int *__b) {
  13930   return vec_perm(vec_ldl(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
  13931 }
  13932 
  13933 static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a,
  13934                                                     const vector int *__b) {
  13935   return vec_perm(vec_ldl(__a, __b), (vector int)(0),
  13936                   vec_lvsl(__a, (unsigned char *)__b));
  13937 }
  13938 
  13939 static __inline__ vector unsigned int __ATTRS_o_ai
  13940 vec_lvlxl(int __a, const unsigned int *__b) {
  13941   return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
  13942                   vec_lvsl(__a, __b));
  13943 }
  13944 
  13945 static __inline__ vector unsigned int __ATTRS_o_ai
  13946 vec_lvlxl(int __a, const vector unsigned int *__b) {
  13947   return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
  13948                   vec_lvsl(__a, (unsigned char *)__b));
  13949 }
  13950 
  13951 static __inline__ vector bool int __ATTRS_o_ai
  13952 vec_lvlxl(int __a, const vector bool int *__b) {
  13953   return vec_perm(vec_ldl(__a, __b), (vector bool int)(0),
  13954                   vec_lvsl(__a, (unsigned char *)__b));
  13955 }
  13956 
  13957 static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
  13958                                                       const float *__b) {
  13959   return vec_perm(vec_ldl(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
  13960 }
  13961 
  13962 static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
  13963                                                       vector float *__b) {
  13964   return vec_perm(vec_ldl(__a, __b), (vector float)(0),
  13965                   vec_lvsl(__a, (unsigned char *)__b));
  13966 }
  13967 
  13968 /* vec_lvrx */
  13969 
  13970 static __inline__ vector signed char __ATTRS_o_ai
  13971 vec_lvrx(int __a, const signed char *__b) {
  13972   return vec_perm((vector signed char)(0), vec_ld(__a, __b),
  13973                   vec_lvsl(__a, __b));
  13974 }
  13975 
  13976 static __inline__ vector signed char __ATTRS_o_ai
  13977 vec_lvrx(int __a, const vector signed char *__b) {
  13978   return vec_perm((vector signed char)(0), vec_ld(__a, __b),
  13979                   vec_lvsl(__a, (unsigned char *)__b));
  13980 }
  13981 
  13982 static __inline__ vector unsigned char __ATTRS_o_ai
  13983 vec_lvrx(int __a, const unsigned char *__b) {
  13984   return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
  13985                   vec_lvsl(__a, __b));
  13986 }
  13987 
  13988 static __inline__ vector unsigned char __ATTRS_o_ai
  13989 vec_lvrx(int __a, const vector unsigned char *__b) {
  13990   return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
  13991                   vec_lvsl(__a, (unsigned char *)__b));
  13992 }
  13993 
  13994 static __inline__ vector bool char __ATTRS_o_ai
  13995 vec_lvrx(int __a, const vector bool char *__b) {
  13996   return vec_perm((vector bool char)(0), vec_ld(__a, __b),
  13997                   vec_lvsl(__a, (unsigned char *)__b));
  13998 }
  13999 
  14000 static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
  14001                                                      const short *__b) {
  14002   return vec_perm((vector short)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
  14003 }
  14004 
  14005 static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
  14006                                                      const vector short *__b) {
  14007   return vec_perm((vector short)(0), vec_ld(__a, __b),
  14008                   vec_lvsl(__a, (unsigned char *)__b));
  14009 }
  14010 
  14011 static __inline__ vector unsigned short __ATTRS_o_ai
  14012 vec_lvrx(int __a, const unsigned short *__b) {
  14013   return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
  14014                   vec_lvsl(__a, __b));
  14015 }
  14016 
  14017 static __inline__ vector unsigned short __ATTRS_o_ai
  14018 vec_lvrx(int __a, const vector unsigned short *__b) {
  14019   return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
  14020                   vec_lvsl(__a, (unsigned char *)__b));
  14021 }
  14022 
  14023 static __inline__ vector bool short __ATTRS_o_ai
  14024 vec_lvrx(int __a, const vector bool short *__b) {
  14025   return vec_perm((vector bool short)(0), vec_ld(__a, __b),
  14026                   vec_lvsl(__a, (unsigned char *)__b));
  14027 }
  14028 
  14029 static __inline__ vector pixel __ATTRS_o_ai vec_lvrx(int __a,
  14030                                                      const vector pixel *__b) {
  14031   return vec_perm((vector pixel)(0), vec_ld(__a, __b),
  14032                   vec_lvsl(__a, (unsigned char *)__b));
  14033 }
  14034 
  14035 static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a, const int *__b) {
  14036   return vec_perm((vector int)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
  14037 }
  14038 
  14039 static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a,
  14040                                                    const vector int *__b) {
  14041   return vec_perm((vector int)(0), vec_ld(__a, __b),
  14042                   vec_lvsl(__a, (unsigned char *)__b));
  14043 }
  14044 
  14045 static __inline__ vector unsigned int __ATTRS_o_ai
  14046 vec_lvrx(int __a, const unsigned int *__b) {
  14047   return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
  14048                   vec_lvsl(__a, __b));
  14049 }
  14050 
  14051 static __inline__ vector unsigned int __ATTRS_o_ai
  14052 vec_lvrx(int __a, const vector unsigned int *__b) {
  14053   return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
  14054                   vec_lvsl(__a, (unsigned char *)__b));
  14055 }
  14056 
  14057 static __inline__ vector bool int __ATTRS_o_ai
  14058 vec_lvrx(int __a, const vector bool int *__b) {
  14059   return vec_perm((vector bool int)(0), vec_ld(__a, __b),
  14060                   vec_lvsl(__a, (unsigned char *)__b));
  14061 }
  14062 
  14063 static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
  14064                                                      const float *__b) {
  14065   return vec_perm((vector float)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
  14066 }
  14067 
  14068 static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
  14069                                                      const vector float *__b) {
  14070   return vec_perm((vector float)(0), vec_ld(__a, __b),
  14071                   vec_lvsl(__a, (unsigned char *)__b));
  14072 }
  14073 
  14074 /* vec_lvrxl */
  14075 
  14076 static __inline__ vector signed char __ATTRS_o_ai
  14077 vec_lvrxl(int __a, const signed char *__b) {
  14078   return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
  14079                   vec_lvsl(__a, __b));
  14080 }
  14081 
  14082 static __inline__ vector signed char __ATTRS_o_ai
  14083 vec_lvrxl(int __a, const vector signed char *__b) {
  14084   return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
  14085                   vec_lvsl(__a, (unsigned char *)__b));
  14086 }
  14087 
  14088 static __inline__ vector unsigned char __ATTRS_o_ai
  14089 vec_lvrxl(int __a, const unsigned char *__b) {
  14090   return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
  14091                   vec_lvsl(__a, __b));
  14092 }
  14093 
  14094 static __inline__ vector unsigned char __ATTRS_o_ai
  14095 vec_lvrxl(int __a, const vector unsigned char *__b) {
  14096   return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
  14097                   vec_lvsl(__a, (unsigned char *)__b));
  14098 }
  14099 
  14100 static __inline__ vector bool char __ATTRS_o_ai
  14101 vec_lvrxl(int __a, const vector bool char *__b) {
  14102   return vec_perm((vector bool char)(0), vec_ldl(__a, __b),
  14103                   vec_lvsl(__a, (unsigned char *)__b));
  14104 }
  14105 
  14106 static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
  14107                                                       const short *__b) {
  14108   return vec_perm((vector short)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
  14109 }
  14110 
  14111 static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
  14112                                                       const vector short *__b) {
  14113   return vec_perm((vector short)(0), vec_ldl(__a, __b),
  14114                   vec_lvsl(__a, (unsigned char *)__b));
  14115 }
  14116 
  14117 static __inline__ vector unsigned short __ATTRS_o_ai
  14118 vec_lvrxl(int __a, const unsigned short *__b) {
  14119   return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
  14120                   vec_lvsl(__a, __b));
  14121 }
  14122 
  14123 static __inline__ vector unsigned short __ATTRS_o_ai
  14124 vec_lvrxl(int __a, const vector unsigned short *__b) {
  14125   return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
  14126                   vec_lvsl(__a, (unsigned char *)__b));
  14127 }
  14128 
  14129 static __inline__ vector bool short __ATTRS_o_ai
  14130 vec_lvrxl(int __a, const vector bool short *__b) {
  14131   return vec_perm((vector bool short)(0), vec_ldl(__a, __b),
  14132                   vec_lvsl(__a, (unsigned char *)__b));
  14133 }
  14134 
  14135 static __inline__ vector pixel __ATTRS_o_ai vec_lvrxl(int __a,
  14136                                                       const vector pixel *__b) {
  14137   return vec_perm((vector pixel)(0), vec_ldl(__a, __b),
  14138                   vec_lvsl(__a, (unsigned char *)__b));
  14139 }
  14140 
  14141 static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a, const int *__b) {
  14142   return vec_perm((vector int)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
  14143 }
  14144 
  14145 static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a,
  14146                                                     const vector int *__b) {
  14147   return vec_perm((vector int)(0), vec_ldl(__a, __b),
  14148                   vec_lvsl(__a, (unsigned char *)__b));
  14149 }
  14150 
  14151 static __inline__ vector unsigned int __ATTRS_o_ai
  14152 vec_lvrxl(int __a, const unsigned int *__b) {
  14153   return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
  14154                   vec_lvsl(__a, __b));
  14155 }
  14156 
  14157 static __inline__ vector unsigned int __ATTRS_o_ai
  14158 vec_lvrxl(int __a, const vector unsigned int *__b) {
  14159   return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
  14160                   vec_lvsl(__a, (unsigned char *)__b));
  14161 }
  14162 
  14163 static __inline__ vector bool int __ATTRS_o_ai
  14164 vec_lvrxl(int __a, const vector bool int *__b) {
  14165   return vec_perm((vector bool int)(0), vec_ldl(__a, __b),
  14166                   vec_lvsl(__a, (unsigned char *)__b));
  14167 }
  14168 
  14169 static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
  14170                                                       const float *__b) {
  14171   return vec_perm((vector float)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
  14172 }
  14173 
  14174 static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
  14175                                                       const vector float *__b) {
  14176   return vec_perm((vector float)(0), vec_ldl(__a, __b),
  14177                   vec_lvsl(__a, (unsigned char *)__b));
  14178 }
  14179 
  14180 /* vec_stvlx */
  14181 
  14182 static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
  14183                                               signed char *__c) {
  14184   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14185                 __c);
  14186 }
  14187 
  14188 static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
  14189                                               vector signed char *__c) {
  14190   return vec_st(
  14191       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14192       __b, __c);
  14193 }
  14194 
  14195 static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
  14196                                               unsigned char *__c) {
  14197   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14198                 __c);
  14199 }
  14200 
  14201 static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
  14202                                               vector unsigned char *__c) {
  14203   return vec_st(
  14204       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14205       __b, __c);
  14206 }
  14207 
  14208 static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool char __a, int __b,
  14209                                               vector bool char *__c) {
  14210   return vec_st(
  14211       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14212       __b, __c);
  14213 }
  14214 
  14215 static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
  14216                                               short *__c) {
  14217   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14218                 __c);
  14219 }
  14220 
  14221 static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
  14222                                               vector short *__c) {
  14223   return vec_st(
  14224       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14225       __b, __c);
  14226 }
  14227 
  14228 static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
  14229                                               int __b, unsigned short *__c) {
  14230   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14231                 __c);
  14232 }
  14233 
  14234 static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
  14235                                               int __b,
  14236                                               vector unsigned short *__c) {
  14237   return vec_st(
  14238       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14239       __b, __c);
  14240 }
  14241 
  14242 static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool short __a, int __b,
  14243                                               vector bool short *__c) {
  14244   return vec_st(
  14245       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14246       __b, __c);
  14247 }
  14248 
  14249 static __inline__ void __ATTRS_o_ai vec_stvlx(vector pixel __a, int __b,
  14250                                               vector pixel *__c) {
  14251   return vec_st(
  14252       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14253       __b, __c);
  14254 }
  14255 
  14256 static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
  14257                                               int *__c) {
  14258   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14259                 __c);
  14260 }
  14261 
  14262 static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
  14263                                               vector int *__c) {
  14264   return vec_st(
  14265       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14266       __b, __c);
  14267 }
  14268 
  14269 static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
  14270                                               unsigned int *__c) {
  14271   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14272                 __c);
  14273 }
  14274 
  14275 static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
  14276                                               vector unsigned int *__c) {
  14277   return vec_st(
  14278       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14279       __b, __c);
  14280 }
  14281 
  14282 static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool int __a, int __b,
  14283                                               vector bool int *__c) {
  14284   return vec_st(
  14285       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14286       __b, __c);
  14287 }
  14288 
  14289 static __inline__ void __ATTRS_o_ai vec_stvlx(vector float __a, int __b,
  14290                                               vector float *__c) {
  14291   return vec_st(
  14292       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14293       __b, __c);
  14294 }
  14295 
  14296 /* vec_stvlxl */
  14297 
  14298 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
  14299                                                signed char *__c) {
  14300   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14301                  __c);
  14302 }
  14303 
  14304 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
  14305                                                vector signed char *__c) {
  14306   return vec_stl(
  14307       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14308       __b, __c);
  14309 }
  14310 
  14311 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
  14312                                                int __b, unsigned char *__c) {
  14313   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14314                  __c);
  14315 }
  14316 
  14317 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
  14318                                                int __b,
  14319                                                vector unsigned char *__c) {
  14320   return vec_stl(
  14321       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14322       __b, __c);
  14323 }
  14324 
  14325 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool char __a, int __b,
  14326                                                vector bool char *__c) {
  14327   return vec_stl(
  14328       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14329       __b, __c);
  14330 }
  14331 
  14332 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
  14333                                                short *__c) {
  14334   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14335                  __c);
  14336 }
  14337 
  14338 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
  14339                                                vector short *__c) {
  14340   return vec_stl(
  14341       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14342       __b, __c);
  14343 }
  14344 
  14345 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
  14346                                                int __b, unsigned short *__c) {
  14347   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14348                  __c);
  14349 }
  14350 
  14351 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
  14352                                                int __b,
  14353                                                vector unsigned short *__c) {
  14354   return vec_stl(
  14355       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14356       __b, __c);
  14357 }
  14358 
  14359 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool short __a, int __b,
  14360                                                vector bool short *__c) {
  14361   return vec_stl(
  14362       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14363       __b, __c);
  14364 }
  14365 
  14366 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector pixel __a, int __b,
  14367                                                vector pixel *__c) {
  14368   return vec_stl(
  14369       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14370       __b, __c);
  14371 }
  14372 
  14373 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
  14374                                                int *__c) {
  14375   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14376                  __c);
  14377 }
  14378 
  14379 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
  14380                                                vector int *__c) {
  14381   return vec_stl(
  14382       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14383       __b, __c);
  14384 }
  14385 
  14386 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
  14387                                                unsigned int *__c) {
  14388   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14389                  __c);
  14390 }
  14391 
  14392 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
  14393                                                vector unsigned int *__c) {
  14394   return vec_stl(
  14395       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14396       __b, __c);
  14397 }
  14398 
  14399 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool int __a, int __b,
  14400                                                vector bool int *__c) {
  14401   return vec_stl(
  14402       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14403       __b, __c);
  14404 }
  14405 
  14406 static __inline__ void __ATTRS_o_ai vec_stvlxl(vector float __a, int __b,
  14407                                                vector float *__c) {
  14408   return vec_stl(
  14409       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14410       __b, __c);
  14411 }
  14412 
  14413 /* vec_stvrx */
  14414 
  14415 static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
  14416                                               signed char *__c) {
  14417   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14418                 __c);
  14419 }
  14420 
  14421 static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
  14422                                               vector signed char *__c) {
  14423   return vec_st(
  14424       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14425       __b, __c);
  14426 }
  14427 
  14428 static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
  14429                                               unsigned char *__c) {
  14430   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14431                 __c);
  14432 }
  14433 
  14434 static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
  14435                                               vector unsigned char *__c) {
  14436   return vec_st(
  14437       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14438       __b, __c);
  14439 }
  14440 
  14441 static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool char __a, int __b,
  14442                                               vector bool char *__c) {
  14443   return vec_st(
  14444       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14445       __b, __c);
  14446 }
  14447 
  14448 static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
  14449                                               short *__c) {
  14450   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14451                 __c);
  14452 }
  14453 
  14454 static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
  14455                                               vector short *__c) {
  14456   return vec_st(
  14457       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14458       __b, __c);
  14459 }
  14460 
  14461 static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
  14462                                               int __b, unsigned short *__c) {
  14463   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14464                 __c);
  14465 }
  14466 
  14467 static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
  14468                                               int __b,
  14469                                               vector unsigned short *__c) {
  14470   return vec_st(
  14471       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14472       __b, __c);
  14473 }
  14474 
  14475 static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool short __a, int __b,
  14476                                               vector bool short *__c) {
  14477   return vec_st(
  14478       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14479       __b, __c);
  14480 }
  14481 
  14482 static __inline__ void __ATTRS_o_ai vec_stvrx(vector pixel __a, int __b,
  14483                                               vector pixel *__c) {
  14484   return vec_st(
  14485       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14486       __b, __c);
  14487 }
  14488 
  14489 static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
  14490                                               int *__c) {
  14491   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14492                 __c);
  14493 }
  14494 
  14495 static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
  14496                                               vector int *__c) {
  14497   return vec_st(
  14498       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14499       __b, __c);
  14500 }
  14501 
  14502 static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
  14503                                               unsigned int *__c) {
  14504   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14505                 __c);
  14506 }
  14507 
  14508 static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
  14509                                               vector unsigned int *__c) {
  14510   return vec_st(
  14511       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14512       __b, __c);
  14513 }
  14514 
  14515 static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool int __a, int __b,
  14516                                               vector bool int *__c) {
  14517   return vec_st(
  14518       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14519       __b, __c);
  14520 }
  14521 
  14522 static __inline__ void __ATTRS_o_ai vec_stvrx(vector float __a, int __b,
  14523                                               vector float *__c) {
  14524   return vec_st(
  14525       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14526       __b, __c);
  14527 }
  14528 
  14529 /* vec_stvrxl */
  14530 
  14531 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
  14532                                                signed char *__c) {
  14533   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14534                  __c);
  14535 }
  14536 
  14537 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
  14538                                                vector signed char *__c) {
  14539   return vec_stl(
  14540       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14541       __b, __c);
  14542 }
  14543 
  14544 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
  14545                                                int __b, unsigned char *__c) {
  14546   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14547                  __c);
  14548 }
  14549 
  14550 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
  14551                                                int __b,
  14552                                                vector unsigned char *__c) {
  14553   return vec_stl(
  14554       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14555       __b, __c);
  14556 }
  14557 
  14558 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool char __a, int __b,
  14559                                                vector bool char *__c) {
  14560   return vec_stl(
  14561       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14562       __b, __c);
  14563 }
  14564 
  14565 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
  14566                                                short *__c) {
  14567   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14568                  __c);
  14569 }
  14570 
  14571 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
  14572                                                vector short *__c) {
  14573   return vec_stl(
  14574       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14575       __b, __c);
  14576 }
  14577 
  14578 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
  14579                                                int __b, unsigned short *__c) {
  14580   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14581                  __c);
  14582 }
  14583 
  14584 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
  14585                                                int __b,
  14586                                                vector unsigned short *__c) {
  14587   return vec_stl(
  14588       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14589       __b, __c);
  14590 }
  14591 
  14592 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool short __a, int __b,
  14593                                                vector bool short *__c) {
  14594   return vec_stl(
  14595       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14596       __b, __c);
  14597 }
  14598 
  14599 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector pixel __a, int __b,
  14600                                                vector pixel *__c) {
  14601   return vec_stl(
  14602       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14603       __b, __c);
  14604 }
  14605 
  14606 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
  14607                                                int *__c) {
  14608   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14609                  __c);
  14610 }
  14611 
  14612 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
  14613                                                vector int *__c) {
  14614   return vec_stl(
  14615       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14616       __b, __c);
  14617 }
  14618 
  14619 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
  14620                                                unsigned int *__c) {
  14621   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14622                  __c);
  14623 }
  14624 
  14625 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
  14626                                                vector unsigned int *__c) {
  14627   return vec_stl(
  14628       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14629       __b, __c);
  14630 }
  14631 
  14632 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool int __a, int __b,
  14633                                                vector bool int *__c) {
  14634   return vec_stl(
  14635       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14636       __b, __c);
  14637 }
  14638 
  14639 static __inline__ void __ATTRS_o_ai vec_stvrxl(vector float __a, int __b,
  14640                                                vector float *__c) {
  14641   return vec_stl(
  14642       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14643       __b, __c);
  14644 }
  14645 
  14646 /* vec_promote */
  14647 
  14648 static __inline__ vector signed char __ATTRS_o_ai vec_promote(signed char __a,
  14649                                                               int __b) {
  14650   const vector signed char __zero = (vector signed char)0;
  14651   vector signed char __res =
  14652       __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1, -1, -1, -1, -1,
  14653                               -1, -1, -1, -1, -1, -1, -1, -1);
  14654   __res[__b & 0xf] = __a;
  14655   return __res;
  14656 }
  14657 
  14658 static __inline__ vector unsigned char __ATTRS_o_ai
  14659 vec_promote(unsigned char __a, int __b) {
  14660   const vector unsigned char __zero = (vector unsigned char)(0);
  14661   vector unsigned char __res =
  14662       __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1, -1, -1, -1, -1,
  14663                               -1, -1, -1, -1, -1, -1, -1, -1);
  14664   __res[__b & 0xf] = __a;
  14665   return __res;
  14666 }
  14667 
  14668 static __inline__ vector short __ATTRS_o_ai vec_promote(short __a, int __b) {
  14669   const vector short __zero = (vector short)(0);
  14670   vector short __res =
  14671       __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1, -1, -1, -1, -1);
  14672   __res[__b & 0x7] = __a;
  14673   return __res;
  14674 }
  14675 
  14676 static __inline__ vector unsigned short __ATTRS_o_ai
  14677 vec_promote(unsigned short __a, int __b) {
  14678   const vector unsigned short __zero = (vector unsigned short)(0);
  14679   vector unsigned short __res =
  14680       __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1, -1, -1, -1, -1);
  14681   __res[__b & 0x7] = __a;
  14682   return __res;
  14683 }
  14684 
  14685 static __inline__ vector int __ATTRS_o_ai vec_promote(int __a, int __b) {
  14686   const vector int __zero = (vector int)(0);
  14687   vector int __res = __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1);
  14688   __res[__b & 0x3] = __a;
  14689   return __res;
  14690 }
  14691 
  14692 static __inline__ vector unsigned int __ATTRS_o_ai vec_promote(unsigned int __a,
  14693                                                                int __b) {
  14694   const vector unsigned int __zero = (vector unsigned int)(0);
  14695   vector unsigned int __res =
  14696       __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1);
  14697   __res[__b & 0x3] = __a;
  14698   return __res;
  14699 }
  14700 
  14701 static __inline__ vector float __ATTRS_o_ai vec_promote(float __a, int __b) {
  14702   const vector float __zero = (vector float)(0);
  14703   vector float __res = __builtin_shufflevector(__zero, __zero, -1, -1, -1, -1);
  14704   __res[__b & 0x3] = __a;
  14705   return __res;
  14706 }
  14707 
  14708 #ifdef __VSX__
  14709 static __inline__ vector double __ATTRS_o_ai vec_promote(double __a, int __b) {
  14710   const vector double __zero = (vector double)(0);
  14711   vector double __res = __builtin_shufflevector(__zero, __zero, -1, -1);
  14712   __res[__b & 0x1] = __a;
  14713   return __res;
  14714 }
  14715 
  14716 static __inline__ vector signed long long __ATTRS_o_ai
  14717 vec_promote(signed long long __a, int __b) {
  14718   const vector signed long long __zero = (vector signed long long)(0);
  14719   vector signed long long __res =
  14720       __builtin_shufflevector(__zero, __zero, -1, -1);
  14721   __res[__b & 0x1] = __a;
  14722   return __res;
  14723 }
  14724 
  14725 static __inline__ vector unsigned long long __ATTRS_o_ai
  14726 vec_promote(unsigned long long __a, int __b) {
  14727   const vector unsigned long long __zero = (vector unsigned long long)(0);
  14728   vector unsigned long long __res =
  14729       __builtin_shufflevector(__zero, __zero, -1, -1);
  14730   __res[__b & 0x1] = __a;
  14731   return __res;
  14732 }
  14733 #endif
  14734 
  14735 /* vec_splats */
  14736 
  14737 static __inline__ vector signed char __ATTRS_o_ai vec_splats(signed char __a) {
  14738   return (vector signed char)(__a);
  14739 }
  14740 
  14741 static __inline__ vector unsigned char __ATTRS_o_ai
  14742 vec_splats(unsigned char __a) {
  14743   return (vector unsigned char)(__a);
  14744 }
  14745 
  14746 static __inline__ vector short __ATTRS_o_ai vec_splats(short __a) {
  14747   return (vector short)(__a);
  14748 }
  14749 
  14750 static __inline__ vector unsigned short __ATTRS_o_ai
  14751 vec_splats(unsigned short __a) {
  14752   return (vector unsigned short)(__a);
  14753 }
  14754 
  14755 static __inline__ vector int __ATTRS_o_ai vec_splats(int __a) {
  14756   return (vector int)(__a);
  14757 }
  14758 
  14759 static __inline__ vector unsigned int __ATTRS_o_ai
  14760 vec_splats(unsigned int __a) {
  14761   return (vector unsigned int)(__a);
  14762 }
  14763 
  14764 #ifdef __VSX__
  14765 static __inline__ vector signed long long __ATTRS_o_ai
  14766 vec_splats(signed long long __a) {
  14767   return (vector signed long long)(__a);
  14768 }
  14769 
  14770 static __inline__ vector unsigned long long __ATTRS_o_ai
  14771 vec_splats(unsigned long long __a) {
  14772   return (vector unsigned long long)(__a);
  14773 }
  14774 
  14775 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  14776     defined(__SIZEOF_INT128__)
  14777 static __inline__ vector signed __int128 __ATTRS_o_ai
  14778 vec_splats(signed __int128 __a) {
  14779   return (vector signed __int128)(__a);
  14780 }
  14781 
  14782 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  14783 vec_splats(unsigned __int128 __a) {
  14784   return (vector unsigned __int128)(__a);
  14785 }
  14786 
  14787 #endif
  14788 
  14789 static __inline__ vector double __ATTRS_o_ai vec_splats(double __a) {
  14790   return (vector double)(__a);
  14791 }
  14792 #endif
  14793 
  14794 static __inline__ vector float __ATTRS_o_ai vec_splats(float __a) {
  14795   return (vector float)(__a);
  14796 }
  14797 
  14798 /* ----------------------------- predicates --------------------------------- */
  14799 
  14800 /* vec_all_eq */
  14801 
  14802 static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
  14803                                               vector signed char __b) {
  14804   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14805                                       (vector char)__b);
  14806 }
  14807 
  14808 static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
  14809                                               vector bool char __b) {
  14810   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14811                                       (vector char)__b);
  14812 }
  14813 
  14814 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
  14815                                               vector unsigned char __b) {
  14816   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14817                                       (vector char)__b);
  14818 }
  14819 
  14820 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
  14821                                               vector bool char __b) {
  14822   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14823                                       (vector char)__b);
  14824 }
  14825 
  14826 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
  14827                                               vector signed char __b) {
  14828   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14829                                       (vector char)__b);
  14830 }
  14831 
  14832 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
  14833                                               vector unsigned char __b) {
  14834   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14835                                       (vector char)__b);
  14836 }
  14837 
  14838 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
  14839                                               vector bool char __b) {
  14840   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14841                                       (vector char)__b);
  14842 }
  14843 
  14844 static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
  14845                                               vector short __b) {
  14846   return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, __b);
  14847 }
  14848 
  14849 static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
  14850                                               vector bool short __b) {
  14851   return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, (vector short)__b);
  14852 }
  14853 
  14854 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
  14855                                               vector unsigned short __b) {
  14856   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
  14857                                       (vector short)__b);
  14858 }
  14859 
  14860 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
  14861                                               vector bool short __b) {
  14862   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
  14863                                       (vector short)__b);
  14864 }
  14865 
  14866 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
  14867                                               vector short __b) {
  14868   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
  14869                                       (vector short)__b);
  14870 }
  14871 
  14872 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
  14873                                               vector unsigned short __b) {
  14874   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
  14875                                       (vector short)__b);
  14876 }
  14877 
  14878 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
  14879                                               vector bool short __b) {
  14880   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
  14881                                       (vector short)__b);
  14882 }
  14883 
  14884 static __inline__ int __ATTRS_o_ai vec_all_eq(vector pixel __a,
  14885                                               vector pixel __b) {
  14886   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
  14887                                       (vector short)__b);
  14888 }
  14889 
  14890 static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a, vector int __b) {
  14891   return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, __b);
  14892 }
  14893 
  14894 static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a,
  14895                                               vector bool int __b) {
  14896   return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, (vector int)__b);
  14897 }
  14898 
  14899 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
  14900                                               vector unsigned int __b) {
  14901   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
  14902                                       (vector int)__b);
  14903 }
  14904 
  14905 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
  14906                                               vector bool int __b) {
  14907   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
  14908                                       (vector int)__b);
  14909 }
  14910 
  14911 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
  14912                                               vector int __b) {
  14913   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
  14914                                       (vector int)__b);
  14915 }
  14916 
  14917 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
  14918                                               vector unsigned int __b) {
  14919   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
  14920                                       (vector int)__b);
  14921 }
  14922 
  14923 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
  14924                                               vector bool int __b) {
  14925   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
  14926                                       (vector int)__b);
  14927 }
  14928 
  14929 #ifdef __VSX__
  14930 static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed long long __a,
  14931                                               vector signed long long __b) {
  14932 #ifdef __POWER8_VECTOR__
  14933   return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, __b);
  14934 #else
  14935   // No vcmpequd on Power7 so we xor the two vectors and compare against zero as
  14936   // 32-bit elements.
  14937   return vec_all_eq((vector signed int)vec_xor(__a, __b), (vector signed int)0);
  14938 #endif
  14939 }
  14940 
  14941 static __inline__ int __ATTRS_o_ai vec_all_eq(vector long long __a,
  14942                                               vector bool long long __b) {
  14943   return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
  14944 }
  14945 
  14946 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
  14947                                               vector unsigned long long __b) {
  14948   return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
  14949 }
  14950 
  14951 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
  14952                                               vector bool long long __b) {
  14953   return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
  14954 }
  14955 
  14956 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
  14957                                               vector long long __b) {
  14958   return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
  14959 }
  14960 
  14961 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
  14962                                               vector unsigned long long __b) {
  14963   return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
  14964 }
  14965 
  14966 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
  14967                                               vector bool long long __b) {
  14968   return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
  14969 }
  14970 #endif
  14971 
  14972 static __inline__ int __ATTRS_o_ai vec_all_eq(vector float __a,
  14973                                               vector float __b) {
  14974 #ifdef __VSX__
  14975   return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __b);
  14976 #else
  14977   return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __b);
  14978 #endif
  14979 }
  14980 
  14981 #ifdef __VSX__
  14982 static __inline__ int __ATTRS_o_ai vec_all_eq(vector double __a,
  14983                                               vector double __b) {
  14984   return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __b);
  14985 }
  14986 #endif
  14987 
  14988 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  14989 static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed __int128 __a,
  14990                                               vector signed __int128 __b) {
  14991   return __builtin_altivec_vcmpequq_p(__CR6_LT, (vector unsigned __int128)__a,
  14992                                       (vector signed __int128)__b);
  14993 }
  14994 
  14995 static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned __int128 __a,
  14996                                               vector unsigned __int128 __b) {
  14997   return __builtin_altivec_vcmpequq_p(__CR6_LT, __a,
  14998                                       (vector signed __int128)__b);
  14999 }
  15000 
  15001 static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool __int128 __a,
  15002                                               vector bool __int128 __b) {
  15003   return __builtin_altivec_vcmpequq_p(__CR6_LT, (vector unsigned __int128)__a,
  15004                                       (vector signed __int128)__b);
  15005 }
  15006 #endif
  15007 
  15008 /* vec_all_ge */
  15009 
  15010 static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
  15011                                               vector signed char __b) {
  15012   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, __a);
  15013 }
  15014 
  15015 static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
  15016                                               vector bool char __b) {
  15017   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__b, __a);
  15018 }
  15019 
  15020 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
  15021                                               vector unsigned char __b) {
  15022   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, __a);
  15023 }
  15024 
  15025 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
  15026                                               vector bool char __b) {
  15027   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, __a);
  15028 }
  15029 
  15030 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
  15031                                               vector signed char __b) {
  15032   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, (vector signed char)__a);
  15033 }
  15034 
  15035 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
  15036                                               vector unsigned char __b) {
  15037   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, (vector unsigned char)__a);
  15038 }
  15039 
  15040 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
  15041                                               vector bool char __b) {
  15042   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b,
  15043                                       (vector unsigned char)__a);
  15044 }
  15045 
  15046 static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
  15047                                               vector short __b) {
  15048   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, __a);
  15049 }
  15050 
  15051 static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
  15052                                               vector bool short __b) {
  15053   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector short)__b, __a);
  15054 }
  15055 
  15056 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
  15057                                               vector unsigned short __b) {
  15058   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, __a);
  15059 }
  15060 
  15061 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
  15062                                               vector bool short __b) {
  15063   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
  15064                                       __a);
  15065 }
  15066 
  15067 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
  15068                                               vector short __b) {
  15069   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, (vector signed short)__a);
  15070 }
  15071 
  15072 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
  15073                                               vector unsigned short __b) {
  15074   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b,
  15075                                       (vector unsigned short)__a);
  15076 }
  15077 
  15078 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
  15079                                               vector bool short __b) {
  15080   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
  15081                                       (vector unsigned short)__a);
  15082 }
  15083 
  15084 static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a, vector int __b) {
  15085   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, __a);
  15086 }
  15087 
  15088 static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a,
  15089                                               vector bool int __b) {
  15090   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector int)__b, __a);
  15091 }
  15092 
  15093 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
  15094                                               vector unsigned int __b) {
  15095   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, __a);
  15096 }
  15097 
  15098 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
  15099                                               vector bool int __b) {
  15100   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, __a);
  15101 }
  15102 
  15103 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
  15104                                               vector int __b) {
  15105   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, (vector signed int)__a);
  15106 }
  15107 
  15108 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
  15109                                               vector unsigned int __b) {
  15110   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, (vector unsigned int)__a);
  15111 }
  15112 
  15113 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
  15114                                               vector bool int __b) {
  15115   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b,
  15116                                       (vector unsigned int)__a);
  15117 }
  15118 
  15119 #ifdef __VSX__
  15120 static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
  15121                                               vector signed long long __b) {
  15122   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b, __a);
  15123 }
  15124 static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
  15125                                               vector bool long long __b) {
  15126   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__b,
  15127                                       __a);
  15128 }
  15129 
  15130 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
  15131                                               vector unsigned long long __b) {
  15132   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b, __a);
  15133 }
  15134 
  15135 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
  15136                                               vector bool long long __b) {
  15137   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
  15138                                       __a);
  15139 }
  15140 
  15141 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
  15142                                               vector signed long long __b) {
  15143   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b,
  15144                                       (vector signed long long)__a);
  15145 }
  15146 
  15147 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
  15148                                               vector unsigned long long __b) {
  15149   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b,
  15150                                       (vector unsigned long long)__a);
  15151 }
  15152 
  15153 static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
  15154                                               vector bool long long __b) {
  15155   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
  15156                                       (vector unsigned long long)__a);
  15157 }
  15158 #endif
  15159 
  15160 static __inline__ int __ATTRS_o_ai vec_all_ge(vector float __a,
  15161                                               vector float __b) {
  15162 #ifdef __VSX__
  15163   return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __a, __b);
  15164 #else
  15165   return __builtin_altivec_vcmpgefp_p(__CR6_LT, __a, __b);
  15166 #endif
  15167 }
  15168 
  15169 #ifdef __VSX__
  15170 static __inline__ int __ATTRS_o_ai vec_all_ge(vector double __a,
  15171                                               vector double __b) {
  15172   return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __a, __b);
  15173 }
  15174 #endif
  15175 
  15176 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  15177 static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed __int128 __a,
  15178                                               vector signed __int128 __b) {
  15179   return __builtin_altivec_vcmpgtsq_p(__CR6_EQ, __b, __a);
  15180 }
  15181 
  15182 static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned __int128 __a,
  15183                                               vector unsigned __int128 __b) {
  15184   return __builtin_altivec_vcmpgtuq_p(__CR6_EQ, __b, __a);
  15185 }
  15186 #endif
  15187 
  15188 /* vec_all_gt */
  15189 
  15190 static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
  15191                                               vector signed char __b) {
  15192   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, __b);
  15193 }
  15194 
  15195 static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
  15196                                               vector bool char __b) {
  15197   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, (vector signed char)__b);
  15198 }
  15199 
  15200 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
  15201                                               vector unsigned char __b) {
  15202   return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, __b);
  15203 }
  15204 
  15205 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
  15206                                               vector bool char __b) {
  15207   return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, (vector unsigned char)__b);
  15208 }
  15209 
  15210 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
  15211                                               vector signed char __b) {
  15212   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__a, __b);
  15213 }
  15214 
  15215 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
  15216                                               vector unsigned char __b) {
  15217   return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, __b);
  15218 }
  15219 
  15220 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
  15221                                               vector bool char __b) {
  15222   return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a,
  15223                                       (vector unsigned char)__b);
  15224 }
  15225 
  15226 static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
  15227                                               vector short __b) {
  15228   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, __b);
  15229 }
  15230 
  15231 static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
  15232                                               vector bool short __b) {
  15233   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, (vector short)__b);
  15234 }
  15235 
  15236 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
  15237                                               vector unsigned short __b) {
  15238   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, __b);
  15239 }
  15240 
  15241 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
  15242                                               vector bool short __b) {
  15243   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a,
  15244                                       (vector unsigned short)__b);
  15245 }
  15246 
  15247 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
  15248                                               vector short __b) {
  15249   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector signed short)__a, __b);
  15250 }
  15251 
  15252 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
  15253                                               vector unsigned short __b) {
  15254   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
  15255                                       __b);
  15256 }
  15257 
  15258 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
  15259                                               vector bool short __b) {
  15260   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
  15261                                       (vector unsigned short)__b);
  15262 }
  15263 
  15264 static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a, vector int __b) {
  15265   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, __b);
  15266 }
  15267 
  15268 static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a,
  15269                                               vector bool int __b) {
  15270   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, (vector int)__b);
  15271 }
  15272 
  15273 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
  15274                                               vector unsigned int __b) {
  15275   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, __b);
  15276 }
  15277 
  15278 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
  15279                                               vector bool int __b) {
  15280   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, (vector unsigned int)__b);
  15281 }
  15282 
  15283 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
  15284                                               vector int __b) {
  15285   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector signed int)__a, __b);
  15286 }
  15287 
  15288 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
  15289                                               vector unsigned int __b) {
  15290   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, __b);
  15291 }
  15292 
  15293 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
  15294                                               vector bool int __b) {
  15295   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a,
  15296                                       (vector unsigned int)__b);
  15297 }
  15298 
  15299 #ifdef __VSX__
  15300 static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
  15301                                               vector signed long long __b) {
  15302   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a, __b);
  15303 }
  15304 static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
  15305                                               vector bool long long __b) {
  15306   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a,
  15307                                       (vector signed long long)__b);
  15308 }
  15309 
  15310 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
  15311                                               vector unsigned long long __b) {
  15312   return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a, __b);
  15313 }
  15314 
  15315 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
  15316                                               vector bool long long __b) {
  15317   return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a,
  15318                                       (vector unsigned long long)__b);
  15319 }
  15320 
  15321 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
  15322                                               vector signed long long __b) {
  15323   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__a,
  15324                                       __b);
  15325 }
  15326 
  15327 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
  15328                                               vector unsigned long long __b) {
  15329   return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
  15330                                       __b);
  15331 }
  15332 
  15333 static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
  15334                                               vector bool long long __b) {
  15335   return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
  15336                                       (vector unsigned long long)__b);
  15337 }
  15338 #endif
  15339 
  15340 static __inline__ int __ATTRS_o_ai vec_all_gt(vector float __a,
  15341                                               vector float __b) {
  15342 #ifdef __VSX__
  15343   return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __a, __b);
  15344 #else
  15345   return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __a, __b);
  15346 #endif
  15347 }
  15348 
  15349 #ifdef __VSX__
  15350 static __inline__ int __ATTRS_o_ai vec_all_gt(vector double __a,
  15351                                               vector double __b) {
  15352   return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __a, __b);
  15353 }
  15354 #endif
  15355 
  15356 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  15357 static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed __int128 __a,
  15358                                               vector signed __int128 __b) {
  15359   return __builtin_altivec_vcmpgtsq_p(__CR6_LT, __a, __b);
  15360 }
  15361 
  15362 static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned __int128 __a,
  15363                                               vector unsigned __int128 __b) {
  15364   return __builtin_altivec_vcmpgtuq_p(__CR6_LT, __a, __b);
  15365 }
  15366 #endif
  15367 
  15368 /* vec_all_in */
  15369 
  15370 static __inline__ int __attribute__((__always_inline__))
  15371 vec_all_in(vector float __a, vector float __b) {
  15372   return __builtin_altivec_vcmpbfp_p(__CR6_EQ, __a, __b);
  15373 }
  15374 
  15375 /* vec_all_le */
  15376 
  15377 static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
  15378                                               vector signed char __b) {
  15379   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, __b);
  15380 }
  15381 
  15382 static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
  15383                                               vector bool char __b) {
  15384   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, (vector signed char)__b);
  15385 }
  15386 
  15387 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
  15388                                               vector unsigned char __b) {
  15389   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, __b);
  15390 }
  15391 
  15392 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
  15393                                               vector bool char __b) {
  15394   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, (vector unsigned char)__b);
  15395 }
  15396 
  15397 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
  15398                                               vector signed char __b) {
  15399   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__a, __b);
  15400 }
  15401 
  15402 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
  15403                                               vector unsigned char __b) {
  15404   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, __b);
  15405 }
  15406 
  15407 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
  15408                                               vector bool char __b) {
  15409   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a,
  15410                                       (vector unsigned char)__b);
  15411 }
  15412 
  15413 static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
  15414                                               vector short __b) {
  15415   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, __b);
  15416 }
  15417 
  15418 static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
  15419                                               vector bool short __b) {
  15420   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, (vector short)__b);
  15421 }
  15422 
  15423 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
  15424                                               vector unsigned short __b) {
  15425   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, __b);
  15426 }
  15427 
  15428 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
  15429                                               vector bool short __b) {
  15430   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a,
  15431                                       (vector unsigned short)__b);
  15432 }
  15433 
  15434 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
  15435                                               vector short __b) {
  15436   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector signed short)__a, __b);
  15437 }
  15438 
  15439 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
  15440                                               vector unsigned short __b) {
  15441   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
  15442                                       __b);
  15443 }
  15444 
  15445 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
  15446                                               vector bool short __b) {
  15447   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
  15448                                       (vector unsigned short)__b);
  15449 }
  15450 
  15451 static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a, vector int __b) {
  15452   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, __b);
  15453 }
  15454 
  15455 static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a,
  15456                                               vector bool int __b) {
  15457   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, (vector int)__b);
  15458 }
  15459 
  15460 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
  15461                                               vector unsigned int __b) {
  15462   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, __b);
  15463 }
  15464 
  15465 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
  15466                                               vector bool int __b) {
  15467   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, (vector unsigned int)__b);
  15468 }
  15469 
  15470 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
  15471                                               vector int __b) {
  15472   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector signed int)__a, __b);
  15473 }
  15474 
  15475 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
  15476                                               vector unsigned int __b) {
  15477   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, __b);
  15478 }
  15479 
  15480 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
  15481                                               vector bool int __b) {
  15482   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a,
  15483                                       (vector unsigned int)__b);
  15484 }
  15485 
  15486 #ifdef __VSX__
  15487 static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
  15488                                               vector signed long long __b) {
  15489   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a, __b);
  15490 }
  15491 
  15492 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
  15493                                               vector unsigned long long __b) {
  15494   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a, __b);
  15495 }
  15496 
  15497 static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
  15498                                               vector bool long long __b) {
  15499   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a,
  15500                                       (vector signed long long)__b);
  15501 }
  15502 
  15503 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
  15504                                               vector bool long long __b) {
  15505   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a,
  15506                                       (vector unsigned long long)__b);
  15507 }
  15508 
  15509 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
  15510                                               vector signed long long __b) {
  15511   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__a,
  15512                                       __b);
  15513 }
  15514 
  15515 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
  15516                                               vector unsigned long long __b) {
  15517   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
  15518                                       __b);
  15519 }
  15520 
  15521 static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
  15522                                               vector bool long long __b) {
  15523   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
  15524                                       (vector unsigned long long)__b);
  15525 }
  15526 #endif
  15527 
  15528 static __inline__ int __ATTRS_o_ai vec_all_le(vector float __a,
  15529                                               vector float __b) {
  15530 #ifdef __VSX__
  15531   return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __b, __a);
  15532 #else
  15533   return __builtin_altivec_vcmpgefp_p(__CR6_LT, __b, __a);
  15534 #endif
  15535 }
  15536 
  15537 #ifdef __VSX__
  15538 static __inline__ int __ATTRS_o_ai vec_all_le(vector double __a,
  15539                                               vector double __b) {
  15540   return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __b, __a);
  15541 }
  15542 #endif
  15543 
  15544 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  15545 static __inline__ int __ATTRS_o_ai vec_all_le(vector signed __int128 __a,
  15546                                               vector signed __int128 __b) {
  15547   return __builtin_altivec_vcmpgtsq_p(__CR6_EQ, __a, __b);
  15548 }
  15549 
  15550 static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned __int128 __a,
  15551                                               vector unsigned __int128 __b) {
  15552   return __builtin_altivec_vcmpgtuq_p(__CR6_EQ, __a, __b);
  15553 }
  15554 #endif
  15555 
  15556 /* vec_all_lt */
  15557 
  15558 static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
  15559                                               vector signed char __b) {
  15560   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, __a);
  15561 }
  15562 
  15563 static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
  15564                                               vector bool char __b) {
  15565   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__b, __a);
  15566 }
  15567 
  15568 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
  15569                                               vector unsigned char __b) {
  15570   return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, __a);
  15571 }
  15572 
  15573 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
  15574                                               vector bool char __b) {
  15575   return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, __a);
  15576 }
  15577 
  15578 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
  15579                                               vector signed char __b) {
  15580   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, (vector signed char)__a);
  15581 }
  15582 
  15583 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
  15584                                               vector unsigned char __b) {
  15585   return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, (vector unsigned char)__a);
  15586 }
  15587 
  15588 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
  15589                                               vector bool char __b) {
  15590   return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b,
  15591                                       (vector unsigned char)__a);
  15592 }
  15593 
  15594 static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
  15595                                               vector short __b) {
  15596   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, __a);
  15597 }
  15598 
  15599 static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
  15600                                               vector bool short __b) {
  15601   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector short)__b, __a);
  15602 }
  15603 
  15604 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
  15605                                               vector unsigned short __b) {
  15606   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, __a);
  15607 }
  15608 
  15609 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
  15610                                               vector bool short __b) {
  15611   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
  15612                                       __a);
  15613 }
  15614 
  15615 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
  15616                                               vector short __b) {
  15617   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, (vector signed short)__a);
  15618 }
  15619 
  15620 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
  15621                                               vector unsigned short __b) {
  15622   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b,
  15623                                       (vector unsigned short)__a);
  15624 }
  15625 
  15626 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
  15627                                               vector bool short __b) {
  15628   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
  15629                                       (vector unsigned short)__a);
  15630 }
  15631 
  15632 static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a, vector int __b) {
  15633   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, __a);
  15634 }
  15635 
  15636 static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a,
  15637                                               vector bool int __b) {
  15638   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector int)__b, __a);
  15639 }
  15640 
  15641 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
  15642                                               vector unsigned int __b) {
  15643   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, __a);
  15644 }
  15645 
  15646 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
  15647                                               vector bool int __b) {
  15648   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, __a);
  15649 }
  15650 
  15651 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
  15652                                               vector int __b) {
  15653   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, (vector signed int)__a);
  15654 }
  15655 
  15656 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
  15657                                               vector unsigned int __b) {
  15658   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, (vector unsigned int)__a);
  15659 }
  15660 
  15661 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
  15662                                               vector bool int __b) {
  15663   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b,
  15664                                       (vector unsigned int)__a);
  15665 }
  15666 
  15667 #ifdef __VSX__
  15668 static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
  15669                                               vector signed long long __b) {
  15670   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b, __a);
  15671 }
  15672 
  15673 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
  15674                                               vector unsigned long long __b) {
  15675   return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b, __a);
  15676 }
  15677 
  15678 static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
  15679                                               vector bool long long __b) {
  15680   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__b,
  15681                                       __a);
  15682 }
  15683 
  15684 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
  15685                                               vector bool long long __b) {
  15686   return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
  15687                                       __a);
  15688 }
  15689 
  15690 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
  15691                                               vector signed long long __b) {
  15692   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b,
  15693                                       (vector signed long long)__a);
  15694 }
  15695 
  15696 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
  15697                                               vector unsigned long long __b) {
  15698   return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b,
  15699                                       (vector unsigned long long)__a);
  15700 }
  15701 
  15702 static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
  15703                                               vector bool long long __b) {
  15704   return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
  15705                                       (vector unsigned long long)__a);
  15706 }
  15707 #endif
  15708 
  15709 static __inline__ int __ATTRS_o_ai vec_all_lt(vector float __a,
  15710                                               vector float __b) {
  15711 #ifdef __VSX__
  15712   return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __b, __a);
  15713 #else
  15714   return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __b, __a);
  15715 #endif
  15716 }
  15717 
  15718 #ifdef __VSX__
  15719 static __inline__ int __ATTRS_o_ai vec_all_lt(vector double __a,
  15720                                               vector double __b) {
  15721   return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __b, __a);
  15722 }
  15723 #endif
  15724 
  15725 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  15726 static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed __int128 __a,
  15727                                               vector signed __int128 __b) {
  15728   return __builtin_altivec_vcmpgtsq_p(__CR6_LT, __b, __a);
  15729 }
  15730 
  15731 static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned __int128 __a,
  15732                                               vector unsigned __int128 __b) {
  15733   return __builtin_altivec_vcmpgtuq_p(__CR6_LT, __b, __a);
  15734 }
  15735 #endif
  15736 
  15737 /* vec_all_nan */
  15738 
  15739 static __inline__ int __ATTRS_o_ai vec_all_nan(vector float __a) {
  15740 #ifdef __VSX__
  15741   return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __a);
  15742 #else
  15743   return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __a);
  15744 #endif
  15745 }
  15746 
  15747 #ifdef __VSX__
  15748 static __inline__ int __ATTRS_o_ai vec_all_nan(vector double __a) {
  15749   return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __a);
  15750 }
  15751 #endif
  15752 
  15753 /* vec_all_ne */
  15754 
  15755 static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
  15756                                               vector signed char __b) {
  15757   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15758                                       (vector char)__b);
  15759 }
  15760 
  15761 static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
  15762                                               vector bool char __b) {
  15763   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15764                                       (vector char)__b);
  15765 }
  15766 
  15767 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
  15768                                               vector unsigned char __b) {
  15769   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15770                                       (vector char)__b);
  15771 }
  15772 
  15773 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
  15774                                               vector bool char __b) {
  15775   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15776                                       (vector char)__b);
  15777 }
  15778 
  15779 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
  15780                                               vector signed char __b) {
  15781   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15782                                       (vector char)__b);
  15783 }
  15784 
  15785 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
  15786                                               vector unsigned char __b) {
  15787   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15788                                       (vector char)__b);
  15789 }
  15790 
  15791 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
  15792                                               vector bool char __b) {
  15793   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15794                                       (vector char)__b);
  15795 }
  15796 
  15797 static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
  15798                                               vector short __b) {
  15799   return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, __b);
  15800 }
  15801 
  15802 static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
  15803                                               vector bool short __b) {
  15804   return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, (vector short)__b);
  15805 }
  15806 
  15807 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
  15808                                               vector unsigned short __b) {
  15809   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
  15810                                       (vector short)__b);
  15811 }
  15812 
  15813 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
  15814                                               vector bool short __b) {
  15815   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
  15816                                       (vector short)__b);
  15817 }
  15818 
  15819 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
  15820                                               vector short __b) {
  15821   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
  15822                                       (vector short)__b);
  15823 }
  15824 
  15825 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
  15826                                               vector unsigned short __b) {
  15827   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
  15828                                       (vector short)__b);
  15829 }
  15830 
  15831 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
  15832                                               vector bool short __b) {
  15833   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
  15834                                       (vector short)__b);
  15835 }
  15836 
  15837 static __inline__ int __ATTRS_o_ai vec_all_ne(vector pixel __a,
  15838                                               vector pixel __b) {
  15839   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
  15840                                       (vector short)__b);
  15841 }
  15842 
  15843 static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a, vector int __b) {
  15844   return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, __b);
  15845 }
  15846 
  15847 static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a,
  15848                                               vector bool int __b) {
  15849   return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, (vector int)__b);
  15850 }
  15851 
  15852 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
  15853                                               vector unsigned int __b) {
  15854   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
  15855                                       (vector int)__b);
  15856 }
  15857 
  15858 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
  15859                                               vector bool int __b) {
  15860   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
  15861                                       (vector int)__b);
  15862 }
  15863 
  15864 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
  15865                                               vector int __b) {
  15866   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
  15867                                       (vector int)__b);
  15868 }
  15869 
  15870 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
  15871                                               vector unsigned int __b) {
  15872   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
  15873                                       (vector int)__b);
  15874 }
  15875 
  15876 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
  15877                                               vector bool int __b) {
  15878   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
  15879                                       (vector int)__b);
  15880 }
  15881 
  15882 #ifdef __VSX__
  15883 static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
  15884                                               vector signed long long __b) {
  15885   return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a, __b);
  15886 }
  15887 
  15888 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
  15889                                               vector unsigned long long __b) {
  15890   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector long long)__a,
  15891                                       (vector long long)__b);
  15892 }
  15893 
  15894 static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
  15895                                               vector bool long long __b) {
  15896   return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a,
  15897                                       (vector signed long long)__b);
  15898 }
  15899 
  15900 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
  15901                                               vector bool long long __b) {
  15902   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
  15903                                       (vector signed long long)__b);
  15904 }
  15905 
  15906 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
  15907                                               vector signed long long __b) {
  15908   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
  15909                                       (vector signed long long)__b);
  15910 }
  15911 
  15912 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
  15913                                               vector unsigned long long __b) {
  15914   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
  15915                                       (vector signed long long)__b);
  15916 }
  15917 
  15918 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
  15919                                               vector bool long long __b) {
  15920   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
  15921                                       (vector signed long long)__b);
  15922 }
  15923 #endif
  15924 
  15925 static __inline__ int __ATTRS_o_ai vec_all_ne(vector float __a,
  15926                                               vector float __b) {
  15927 #ifdef __VSX__
  15928   return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __b);
  15929 #else
  15930   return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __b);
  15931 #endif
  15932 }
  15933 
  15934 #ifdef __VSX__
  15935 static __inline__ int __ATTRS_o_ai vec_all_ne(vector double __a,
  15936                                               vector double __b) {
  15937   return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __b);
  15938 }
  15939 #endif
  15940 
  15941 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  15942 static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed __int128 __a,
  15943                                               vector signed __int128 __b) {
  15944   return __builtin_altivec_vcmpequq_p(__CR6_EQ, (vector unsigned __int128)__a,
  15945                                       __b);
  15946 }
  15947 
  15948 static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned __int128 __a,
  15949                                               vector unsigned __int128 __b) {
  15950   return __builtin_altivec_vcmpequq_p(__CR6_EQ, __a,
  15951                                       (vector signed __int128)__b);
  15952 }
  15953 
  15954 static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool __int128 __a,
  15955                                               vector bool __int128 __b) {
  15956   return __builtin_altivec_vcmpequq_p(__CR6_EQ, (vector unsigned __int128)__a,
  15957                                       (vector signed __int128)__b);
  15958 }
  15959 #endif
  15960 
  15961 /* vec_all_nge */
  15962 
  15963 static __inline__ int __ATTRS_o_ai vec_all_nge(vector float __a,
  15964                                                vector float __b) {
  15965 #ifdef __VSX__
  15966   return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __a, __b);
  15967 #else
  15968   return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __a, __b);
  15969 #endif
  15970 }
  15971 
  15972 #ifdef __VSX__
  15973 static __inline__ int __ATTRS_o_ai vec_all_nge(vector double __a,
  15974                                                vector double __b) {
  15975   return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __a, __b);
  15976 }
  15977 #endif
  15978 
  15979 /* vec_all_ngt */
  15980 
  15981 static __inline__ int __ATTRS_o_ai vec_all_ngt(vector float __a,
  15982                                                vector float __b) {
  15983 #ifdef __VSX__
  15984   return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __a, __b);
  15985 #else
  15986   return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __a, __b);
  15987 #endif
  15988 }
  15989 
  15990 #ifdef __VSX__
  15991 static __inline__ int __ATTRS_o_ai vec_all_ngt(vector double __a,
  15992                                                vector double __b) {
  15993   return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __a, __b);
  15994 }
  15995 #endif
  15996 
  15997 /* vec_all_nle */
  15998 
  15999 static __inline__ int __ATTRS_o_ai
  16000 vec_all_nle(vector float __a, vector float __b) {
  16001 #ifdef __VSX__
  16002   return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __b, __a);
  16003 #else
  16004   return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __b, __a);
  16005 #endif
  16006 }
  16007 
  16008 #ifdef __VSX__
  16009 static __inline__ int __ATTRS_o_ai vec_all_nle(vector double __a,
  16010                                                vector double __b) {
  16011   return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __b, __a);
  16012 }
  16013 #endif
  16014 
  16015 /* vec_all_nlt */
  16016 
  16017 static __inline__ int __ATTRS_o_ai
  16018 vec_all_nlt(vector float __a, vector float __b) {
  16019 #ifdef __VSX__
  16020   return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __b, __a);
  16021 #else
  16022   return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __b, __a);
  16023 #endif
  16024 }
  16025 
  16026 #ifdef __VSX__
  16027 static __inline__ int __ATTRS_o_ai vec_all_nlt(vector double __a,
  16028                                                vector double __b) {
  16029   return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __b, __a);
  16030 }
  16031 #endif
  16032 
  16033 /* vec_all_numeric */
  16034 
  16035 static __inline__ int __ATTRS_o_ai
  16036 vec_all_numeric(vector float __a) {
  16037 #ifdef __VSX__
  16038   return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __a);
  16039 #else
  16040   return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __a);
  16041 #endif
  16042 }
  16043 
  16044 #ifdef __VSX__
  16045 static __inline__ int __ATTRS_o_ai vec_all_numeric(vector double __a) {
  16046   return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __a);
  16047 }
  16048 #endif
  16049 
  16050 /* vec_any_eq */
  16051 
  16052 static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
  16053                                               vector signed char __b) {
  16054   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16055                                       (vector char)__b);
  16056 }
  16057 
  16058 static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
  16059                                               vector bool char __b) {
  16060   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16061                                       (vector char)__b);
  16062 }
  16063 
  16064 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
  16065                                               vector unsigned char __b) {
  16066   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16067                                       (vector char)__b);
  16068 }
  16069 
  16070 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
  16071                                               vector bool char __b) {
  16072   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16073                                       (vector char)__b);
  16074 }
  16075 
  16076 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
  16077                                               vector signed char __b) {
  16078   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16079                                       (vector char)__b);
  16080 }
  16081 
  16082 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
  16083                                               vector unsigned char __b) {
  16084   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16085                                       (vector char)__b);
  16086 }
  16087 
  16088 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
  16089                                               vector bool char __b) {
  16090   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16091                                       (vector char)__b);
  16092 }
  16093 
  16094 static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
  16095                                               vector short __b) {
  16096   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, __b);
  16097 }
  16098 
  16099 static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
  16100                                               vector bool short __b) {
  16101   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, (vector short)__b);
  16102 }
  16103 
  16104 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
  16105                                               vector unsigned short __b) {
  16106   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
  16107                                       (vector short)__b);
  16108 }
  16109 
  16110 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
  16111                                               vector bool short __b) {
  16112   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
  16113                                       (vector short)__b);
  16114 }
  16115 
  16116 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
  16117                                               vector short __b) {
  16118   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
  16119                                       (vector short)__b);
  16120 }
  16121 
  16122 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
  16123                                               vector unsigned short __b) {
  16124   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
  16125                                       (vector short)__b);
  16126 }
  16127 
  16128 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
  16129                                               vector bool short __b) {
  16130   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
  16131                                       (vector short)__b);
  16132 }
  16133 
  16134 static __inline__ int __ATTRS_o_ai vec_any_eq(vector pixel __a,
  16135                                               vector pixel __b) {
  16136   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
  16137                                       (vector short)__b);
  16138 }
  16139 
  16140 static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a, vector int __b) {
  16141   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, __b);
  16142 }
  16143 
  16144 static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a,
  16145                                               vector bool int __b) {
  16146   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, (vector int)__b);
  16147 }
  16148 
  16149 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
  16150                                               vector unsigned int __b) {
  16151   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
  16152                                       (vector int)__b);
  16153 }
  16154 
  16155 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
  16156                                               vector bool int __b) {
  16157   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
  16158                                       (vector int)__b);
  16159 }
  16160 
  16161 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
  16162                                               vector int __b) {
  16163   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
  16164                                       (vector int)__b);
  16165 }
  16166 
  16167 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
  16168                                               vector unsigned int __b) {
  16169   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
  16170                                       (vector int)__b);
  16171 }
  16172 
  16173 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
  16174                                               vector bool int __b) {
  16175   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
  16176                                       (vector int)__b);
  16177 }
  16178 
  16179 #ifdef __VSX__
  16180 static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
  16181                                               vector signed long long __b) {
  16182   return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a, __b);
  16183 }
  16184 
  16185 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
  16186                                               vector unsigned long long __b) {
  16187   return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector long long)__a,
  16188                                       (vector long long)__b);
  16189 }
  16190 
  16191 static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
  16192                                               vector bool long long __b) {
  16193   return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a,
  16194                                       (vector signed long long)__b);
  16195 }
  16196 
  16197 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
  16198                                               vector bool long long __b) {
  16199   return __builtin_altivec_vcmpequd_p(
  16200       __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
  16201 }
  16202 
  16203 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
  16204                                               vector signed long long __b) {
  16205   return __builtin_altivec_vcmpequd_p(
  16206       __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
  16207 }
  16208 
  16209 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
  16210                                               vector unsigned long long __b) {
  16211   return __builtin_altivec_vcmpequd_p(
  16212       __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
  16213 }
  16214 
  16215 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
  16216                                               vector bool long long __b) {
  16217   return __builtin_altivec_vcmpequd_p(
  16218       __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
  16219 }
  16220 #endif
  16221 
  16222 static __inline__ int __ATTRS_o_ai vec_any_eq(vector float __a,
  16223                                               vector float __b) {
  16224 #ifdef __VSX__
  16225   return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __b);
  16226 #else
  16227   return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __b);
  16228 #endif
  16229 }
  16230 
  16231 #ifdef __VSX__
  16232 static __inline__ int __ATTRS_o_ai vec_any_eq(vector double __a,
  16233                                               vector double __b) {
  16234   return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __b);
  16235 }
  16236 #endif
  16237 
  16238 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  16239 static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed __int128 __a,
  16240                                               vector signed __int128 __b) {
  16241   return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV,
  16242                                       (vector unsigned __int128)__a, __b);
  16243 }
  16244 
  16245 static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned __int128 __a,
  16246                                               vector unsigned __int128 __b) {
  16247   return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV, __a,
  16248                                       (vector signed __int128)__b);
  16249 }
  16250 
  16251 static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool __int128 __a,
  16252                                               vector bool __int128 __b) {
  16253   return __builtin_altivec_vcmpequq_p(
  16254       __CR6_EQ_REV, (vector unsigned __int128)__a, (vector signed __int128)__b);
  16255 }
  16256 #endif
  16257 
  16258 /* vec_any_ge */
  16259 
  16260 static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
  16261                                               vector signed char __b) {
  16262   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b, __a);
  16263 }
  16264 
  16265 static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
  16266                                               vector bool char __b) {
  16267   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__b,
  16268                                       __a);
  16269 }
  16270 
  16271 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
  16272                                               vector unsigned char __b) {
  16273   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, __a);
  16274 }
  16275 
  16276 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
  16277                                               vector bool char __b) {
  16278   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
  16279                                       __a);
  16280 }
  16281 
  16282 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
  16283                                               vector signed char __b) {
  16284   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b,
  16285                                       (vector signed char)__a);
  16286 }
  16287 
  16288 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
  16289                                               vector unsigned char __b) {
  16290   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b,
  16291                                       (vector unsigned char)__a);
  16292 }
  16293 
  16294 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
  16295                                               vector bool char __b) {
  16296   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
  16297                                       (vector unsigned char)__a);
  16298 }
  16299 
  16300 static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
  16301                                               vector short __b) {
  16302   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b, __a);
  16303 }
  16304 
  16305 static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
  16306                                               vector bool short __b) {
  16307   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector short)__b, __a);
  16308 }
  16309 
  16310 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
  16311                                               vector unsigned short __b) {
  16312   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, __a);
  16313 }
  16314 
  16315 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
  16316                                               vector bool short __b) {
  16317   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
  16318                                       __a);
  16319 }
  16320 
  16321 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
  16322                                               vector short __b) {
  16323   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b,
  16324                                       (vector signed short)__a);
  16325 }
  16326 
  16327 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
  16328                                               vector unsigned short __b) {
  16329   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b,
  16330                                       (vector unsigned short)__a);
  16331 }
  16332 
  16333 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
  16334                                               vector bool short __b) {
  16335   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
  16336                                       (vector unsigned short)__a);
  16337 }
  16338 
  16339 static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a, vector int __b) {
  16340   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b, __a);
  16341 }
  16342 
  16343 static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a,
  16344                                               vector bool int __b) {
  16345   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector int)__b, __a);
  16346 }
  16347 
  16348 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
  16349                                               vector unsigned int __b) {
  16350   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, __a);
  16351 }
  16352 
  16353 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
  16354                                               vector bool int __b) {
  16355   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
  16356                                       __a);
  16357 }
  16358 
  16359 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
  16360                                               vector int __b) {
  16361   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b,
  16362                                       (vector signed int)__a);
  16363 }
  16364 
  16365 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
  16366                                               vector unsigned int __b) {
  16367   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b,
  16368                                       (vector unsigned int)__a);
  16369 }
  16370 
  16371 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
  16372                                               vector bool int __b) {
  16373   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
  16374                                       (vector unsigned int)__a);
  16375 }
  16376 
  16377 #ifdef __VSX__
  16378 static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
  16379                                               vector signed long long __b) {
  16380   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b, __a);
  16381 }
  16382 
  16383 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
  16384                                               vector unsigned long long __b) {
  16385   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b, __a);
  16386 }
  16387 
  16388 static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
  16389                                               vector bool long long __b) {
  16390   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,
  16391                                       (vector signed long long)__b, __a);
  16392 }
  16393 
  16394 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
  16395                                               vector bool long long __b) {
  16396   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
  16397                                       (vector unsigned long long)__b, __a);
  16398 }
  16399 
  16400 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
  16401                                               vector signed long long __b) {
  16402   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b,
  16403                                       (vector signed long long)__a);
  16404 }
  16405 
  16406 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
  16407                                               vector unsigned long long __b) {
  16408   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b,
  16409                                       (vector unsigned long long)__a);
  16410 }
  16411 
  16412 static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
  16413                                               vector bool long long __b) {
  16414   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
  16415                                       (vector unsigned long long)__b,
  16416                                       (vector unsigned long long)__a);
  16417 }
  16418 #endif
  16419 
  16420 static __inline__ int __ATTRS_o_ai vec_any_ge(vector float __a,
  16421                                               vector float __b) {
  16422 #ifdef __VSX__
  16423   return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __a, __b);
  16424 #else
  16425   return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __a, __b);
  16426 #endif
  16427 }
  16428 
  16429 #ifdef __VSX__
  16430 static __inline__ int __ATTRS_o_ai vec_any_ge(vector double __a,
  16431                                               vector double __b) {
  16432   return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __a, __b);
  16433 }
  16434 #endif
  16435 
  16436 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  16437 static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed __int128 __a,
  16438                                               vector signed __int128 __b) {
  16439   return __builtin_altivec_vcmpgtsq_p(__CR6_LT_REV, __b, __a);
  16440 }
  16441 
  16442 static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned __int128 __a,
  16443                                               vector unsigned __int128 __b) {
  16444   return __builtin_altivec_vcmpgtuq_p(__CR6_LT_REV, __b, __a);
  16445 }
  16446 #endif
  16447 
  16448 /* vec_any_gt */
  16449 
  16450 static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
  16451                                               vector signed char __b) {
  16452   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, __b);
  16453 }
  16454 
  16455 static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
  16456                                               vector bool char __b) {
  16457   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a,
  16458                                       (vector signed char)__b);
  16459 }
  16460 
  16461 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
  16462                                               vector unsigned char __b) {
  16463   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, __b);
  16464 }
  16465 
  16466 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
  16467                                               vector bool char __b) {
  16468   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a,
  16469                                       (vector unsigned char)__b);
  16470 }
  16471 
  16472 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
  16473                                               vector signed char __b) {
  16474   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__a,
  16475                                       __b);
  16476 }
  16477 
  16478 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
  16479                                               vector unsigned char __b) {
  16480   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
  16481                                       __b);
  16482 }
  16483 
  16484 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
  16485                                               vector bool char __b) {
  16486   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
  16487                                       (vector unsigned char)__b);
  16488 }
  16489 
  16490 static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
  16491                                               vector short __b) {
  16492   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, __b);
  16493 }
  16494 
  16495 static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
  16496                                               vector bool short __b) {
  16497   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, (vector short)__b);
  16498 }
  16499 
  16500 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
  16501                                               vector unsigned short __b) {
  16502   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, __b);
  16503 }
  16504 
  16505 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
  16506                                               vector bool short __b) {
  16507   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a,
  16508                                       (vector unsigned short)__b);
  16509 }
  16510 
  16511 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
  16512                                               vector short __b) {
  16513   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector signed short)__a,
  16514                                       __b);
  16515 }
  16516 
  16517 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
  16518                                               vector unsigned short __b) {
  16519   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
  16520                                       __b);
  16521 }
  16522 
  16523 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
  16524                                               vector bool short __b) {
  16525   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
  16526                                       (vector unsigned short)__b);
  16527 }
  16528 
  16529 static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a, vector int __b) {
  16530   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, __b);
  16531 }
  16532 
  16533 static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a,
  16534                                               vector bool int __b) {
  16535   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, (vector int)__b);
  16536 }
  16537 
  16538 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
  16539                                               vector unsigned int __b) {
  16540   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, __b);
  16541 }
  16542 
  16543 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
  16544                                               vector bool int __b) {
  16545   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a,
  16546                                       (vector unsigned int)__b);
  16547 }
  16548 
  16549 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
  16550                                               vector int __b) {
  16551   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector signed int)__a,
  16552                                       __b);
  16553 }
  16554 
  16555 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
  16556                                               vector unsigned int __b) {
  16557   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
  16558                                       __b);
  16559 }
  16560 
  16561 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
  16562                                               vector bool int __b) {
  16563   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
  16564                                       (vector unsigned int)__b);
  16565 }
  16566 
  16567 #ifdef __VSX__
  16568 static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
  16569                                               vector signed long long __b) {
  16570   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a, __b);
  16571 }
  16572 
  16573 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
  16574                                               vector unsigned long long __b) {
  16575   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a, __b);
  16576 }
  16577 
  16578 static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
  16579                                               vector bool long long __b) {
  16580   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a,
  16581                                       (vector signed long long)__b);
  16582 }
  16583 
  16584 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
  16585                                               vector bool long long __b) {
  16586   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a,
  16587                                       (vector unsigned long long)__b);
  16588 }
  16589 
  16590 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
  16591                                               vector signed long long __b) {
  16592   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,
  16593                                       (vector signed long long)__a, __b);
  16594 }
  16595 
  16596 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
  16597                                               vector unsigned long long __b) {
  16598   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
  16599                                       (vector unsigned long long)__a, __b);
  16600 }
  16601 
  16602 static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
  16603                                               vector bool long long __b) {
  16604   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
  16605                                       (vector unsigned long long)__a,
  16606                                       (vector unsigned long long)__b);
  16607 }
  16608 #endif
  16609 
  16610 static __inline__ int __ATTRS_o_ai vec_any_gt(vector float __a,
  16611                                               vector float __b) {
  16612 #ifdef __VSX__
  16613   return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __a, __b);
  16614 #else
  16615   return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __a, __b);
  16616 #endif
  16617 }
  16618 
  16619 #ifdef __VSX__
  16620 static __inline__ int __ATTRS_o_ai vec_any_gt(vector double __a,
  16621                                               vector double __b) {
  16622   return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __a, __b);
  16623 }
  16624 #endif
  16625 
  16626 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  16627 static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed __int128 __a,
  16628                                               vector signed __int128 __b) {
  16629   return __builtin_altivec_vcmpgtsq_p(__CR6_EQ_REV, __a, __b);
  16630 }
  16631 
  16632 static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned __int128 __a,
  16633                                               vector unsigned __int128 __b) {
  16634   return __builtin_altivec_vcmpgtuq_p(__CR6_EQ_REV, __a, __b);
  16635 }
  16636 #endif
  16637 
  16638 /* vec_any_le */
  16639 
  16640 static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
  16641                                               vector signed char __b) {
  16642   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, __b);
  16643 }
  16644 
  16645 static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
  16646                                               vector bool char __b) {
  16647   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a,
  16648                                       (vector signed char)__b);
  16649 }
  16650 
  16651 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
  16652                                               vector unsigned char __b) {
  16653   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, __b);
  16654 }
  16655 
  16656 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
  16657                                               vector bool char __b) {
  16658   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a,
  16659                                       (vector unsigned char)__b);
  16660 }
  16661 
  16662 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
  16663                                               vector signed char __b) {
  16664   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__a,
  16665                                       __b);
  16666 }
  16667 
  16668 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
  16669                                               vector unsigned char __b) {
  16670   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
  16671                                       __b);
  16672 }
  16673 
  16674 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
  16675                                               vector bool char __b) {
  16676   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
  16677                                       (vector unsigned char)__b);
  16678 }
  16679 
  16680 static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
  16681                                               vector short __b) {
  16682   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, __b);
  16683 }
  16684 
  16685 static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
  16686                                               vector bool short __b) {
  16687   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, (vector short)__b);
  16688 }
  16689 
  16690 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
  16691                                               vector unsigned short __b) {
  16692   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, __b);
  16693 }
  16694 
  16695 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
  16696                                               vector bool short __b) {
  16697   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a,
  16698                                       (vector unsigned short)__b);
  16699 }
  16700 
  16701 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
  16702                                               vector short __b) {
  16703   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector signed short)__a,
  16704                                       __b);
  16705 }
  16706 
  16707 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
  16708                                               vector unsigned short __b) {
  16709   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
  16710                                       __b);
  16711 }
  16712 
  16713 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
  16714                                               vector bool short __b) {
  16715   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
  16716                                       (vector unsigned short)__b);
  16717 }
  16718 
  16719 static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a, vector int __b) {
  16720   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, __b);
  16721 }
  16722 
  16723 static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a,
  16724                                               vector bool int __b) {
  16725   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, (vector int)__b);
  16726 }
  16727 
  16728 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
  16729                                               vector unsigned int __b) {
  16730   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, __b);
  16731 }
  16732 
  16733 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
  16734                                               vector bool int __b) {
  16735   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a,
  16736                                       (vector unsigned int)__b);
  16737 }
  16738 
  16739 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
  16740                                               vector int __b) {
  16741   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector signed int)__a,
  16742                                       __b);
  16743 }
  16744 
  16745 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
  16746                                               vector unsigned int __b) {
  16747   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
  16748                                       __b);
  16749 }
  16750 
  16751 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
  16752                                               vector bool int __b) {
  16753   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
  16754                                       (vector unsigned int)__b);
  16755 }
  16756 
  16757 #ifdef __VSX__
  16758 static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
  16759                                               vector signed long long __b) {
  16760   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a, __b);
  16761 }
  16762 
  16763 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
  16764                                               vector unsigned long long __b) {
  16765   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a, __b);
  16766 }
  16767 
  16768 static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
  16769                                               vector bool long long __b) {
  16770   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a,
  16771                                       (vector signed long long)__b);
  16772 }
  16773 
  16774 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
  16775                                               vector bool long long __b) {
  16776   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a,
  16777                                       (vector unsigned long long)__b);
  16778 }
  16779 
  16780 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
  16781                                               vector signed long long __b) {
  16782   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,
  16783                                       (vector signed long long)__a, __b);
  16784 }
  16785 
  16786 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
  16787                                               vector unsigned long long __b) {
  16788   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
  16789                                       (vector unsigned long long)__a, __b);
  16790 }
  16791 
  16792 static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
  16793                                               vector bool long long __b) {
  16794   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
  16795                                       (vector unsigned long long)__a,
  16796                                       (vector unsigned long long)__b);
  16797 }
  16798 #endif
  16799 
  16800 static __inline__ int __ATTRS_o_ai vec_any_le(vector float __a,
  16801                                               vector float __b) {
  16802 #ifdef __VSX__
  16803   return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __b, __a);
  16804 #else
  16805   return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __b, __a);
  16806 #endif
  16807 }
  16808 
  16809 #ifdef __VSX__
  16810 static __inline__ int __ATTRS_o_ai vec_any_le(vector double __a,
  16811                                               vector double __b) {
  16812   return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __b, __a);
  16813 }
  16814 #endif
  16815 
  16816 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  16817 static __inline__ int __ATTRS_o_ai vec_any_le(vector signed __int128 __a,
  16818                                               vector signed __int128 __b) {
  16819   return __builtin_altivec_vcmpgtsq_p(__CR6_LT_REV, __a, __b);
  16820 }
  16821 
  16822 static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned __int128 __a,
  16823                                               vector unsigned __int128 __b) {
  16824   return __builtin_altivec_vcmpgtuq_p(__CR6_LT_REV, __a, __b);
  16825 }
  16826 #endif
  16827 
  16828 /* vec_any_lt */
  16829 
  16830 static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
  16831                                               vector signed char __b) {
  16832   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b, __a);
  16833 }
  16834 
  16835 static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
  16836                                               vector bool char __b) {
  16837   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__b,
  16838                                       __a);
  16839 }
  16840 
  16841 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
  16842                                               vector unsigned char __b) {
  16843   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, __a);
  16844 }
  16845 
  16846 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
  16847                                               vector bool char __b) {
  16848   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
  16849                                       __a);
  16850 }
  16851 
  16852 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
  16853                                               vector signed char __b) {
  16854   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b,
  16855                                       (vector signed char)__a);
  16856 }
  16857 
  16858 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
  16859                                               vector unsigned char __b) {
  16860   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b,
  16861                                       (vector unsigned char)__a);
  16862 }
  16863 
  16864 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
  16865                                               vector bool char __b) {
  16866   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
  16867                                       (vector unsigned char)__a);
  16868 }
  16869 
  16870 static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
  16871                                               vector short __b) {
  16872   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b, __a);
  16873 }
  16874 
  16875 static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
  16876                                               vector bool short __b) {
  16877   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector short)__b, __a);
  16878 }
  16879 
  16880 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
  16881                                               vector unsigned short __b) {
  16882   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, __a);
  16883 }
  16884 
  16885 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
  16886                                               vector bool short __b) {
  16887   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
  16888                                       __a);
  16889 }
  16890 
  16891 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
  16892                                               vector short __b) {
  16893   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b,
  16894                                       (vector signed short)__a);
  16895 }
  16896 
  16897 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
  16898                                               vector unsigned short __b) {
  16899   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b,
  16900                                       (vector unsigned short)__a);
  16901 }
  16902 
  16903 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
  16904                                               vector bool short __b) {
  16905   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
  16906                                       (vector unsigned short)__a);
  16907 }
  16908 
  16909 static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a, vector int __b) {
  16910   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b, __a);
  16911 }
  16912 
  16913 static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a,
  16914                                               vector bool int __b) {
  16915   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector int)__b, __a);
  16916 }
  16917 
  16918 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
  16919                                               vector unsigned int __b) {
  16920   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, __a);
  16921 }
  16922 
  16923 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
  16924                                               vector bool int __b) {
  16925   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
  16926                                       __a);
  16927 }
  16928 
  16929 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
  16930                                               vector int __b) {
  16931   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b,
  16932                                       (vector signed int)__a);
  16933 }
  16934 
  16935 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
  16936                                               vector unsigned int __b) {
  16937   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b,
  16938                                       (vector unsigned int)__a);
  16939 }
  16940 
  16941 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
  16942                                               vector bool int __b) {
  16943   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
  16944                                       (vector unsigned int)__a);
  16945 }
  16946 
  16947 #ifdef __VSX__
  16948 static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
  16949                                               vector signed long long __b) {
  16950   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b, __a);
  16951 }
  16952 
  16953 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
  16954                                               vector unsigned long long __b) {
  16955   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b, __a);
  16956 }
  16957 
  16958 static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
  16959                                               vector bool long long __b) {
  16960   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,
  16961                                       (vector signed long long)__b, __a);
  16962 }
  16963 
  16964 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
  16965                                               vector bool long long __b) {
  16966   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
  16967                                       (vector unsigned long long)__b, __a);
  16968 }
  16969 
  16970 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
  16971                                               vector signed long long __b) {
  16972   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b,
  16973                                       (vector signed long long)__a);
  16974 }
  16975 
  16976 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
  16977                                               vector unsigned long long __b) {
  16978   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b,
  16979                                       (vector unsigned long long)__a);
  16980 }
  16981 
  16982 static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
  16983                                               vector bool long long __b) {
  16984   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
  16985                                       (vector unsigned long long)__b,
  16986                                       (vector unsigned long long)__a);
  16987 }
  16988 #endif
  16989 
  16990 static __inline__ int __ATTRS_o_ai vec_any_lt(vector float __a,
  16991                                               vector float __b) {
  16992 #ifdef __VSX__
  16993   return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __b, __a);
  16994 #else
  16995   return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __b, __a);
  16996 #endif
  16997 }
  16998 
  16999 #ifdef __VSX__
  17000 static __inline__ int __ATTRS_o_ai vec_any_lt(vector double __a,
  17001                                               vector double __b) {
  17002   return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __b, __a);
  17003 }
  17004 #endif
  17005 
  17006 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  17007 static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed __int128 __a,
  17008                                               vector signed __int128 __b) {
  17009   return __builtin_altivec_vcmpgtsq_p(__CR6_EQ_REV, __b, __a);
  17010 }
  17011 
  17012 static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned __int128 __a,
  17013                                               vector unsigned __int128 __b) {
  17014   return __builtin_altivec_vcmpgtuq_p(__CR6_EQ_REV, __b, __a);
  17015 }
  17016 #endif
  17017 
  17018 /* vec_any_nan */
  17019 
  17020 static __inline__ int __ATTRS_o_ai vec_any_nan(vector float __a) {
  17021 #ifdef __VSX__
  17022   return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __a);
  17023 #else
  17024   return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __a);
  17025 #endif
  17026 }
  17027 #ifdef __VSX__
  17028 static __inline__ int __ATTRS_o_ai vec_any_nan(vector double __a) {
  17029   return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __a);
  17030 }
  17031 #endif
  17032 
  17033 /* vec_any_ne */
  17034 
  17035 static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
  17036                                               vector signed char __b) {
  17037   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17038                                       (vector char)__b);
  17039 }
  17040 
  17041 static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
  17042                                               vector bool char __b) {
  17043   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17044                                       (vector char)__b);
  17045 }
  17046 
  17047 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
  17048                                               vector unsigned char __b) {
  17049   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17050                                       (vector char)__b);
  17051 }
  17052 
  17053 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
  17054                                               vector bool char __b) {
  17055   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17056                                       (vector char)__b);
  17057 }
  17058 
  17059 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
  17060                                               vector signed char __b) {
  17061   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17062                                       (vector char)__b);
  17063 }
  17064 
  17065 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
  17066                                               vector unsigned char __b) {
  17067   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17068                                       (vector char)__b);
  17069 }
  17070 
  17071 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
  17072                                               vector bool char __b) {
  17073   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17074                                       (vector char)__b);
  17075 }
  17076 
  17077 static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
  17078                                               vector short __b) {
  17079   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, __b);
  17080 }
  17081 
  17082 static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
  17083                                               vector bool short __b) {
  17084   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, (vector short)__b);
  17085 }
  17086 
  17087 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
  17088                                               vector unsigned short __b) {
  17089   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
  17090                                       (vector short)__b);
  17091 }
  17092 
  17093 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
  17094                                               vector bool short __b) {
  17095   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
  17096                                       (vector short)__b);
  17097 }
  17098 
  17099 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
  17100                                               vector short __b) {
  17101   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
  17102                                       (vector short)__b);
  17103 }
  17104 
  17105 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
  17106                                               vector unsigned short __b) {
  17107   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
  17108                                       (vector short)__b);
  17109 }
  17110 
  17111 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
  17112                                               vector bool short __b) {
  17113   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
  17114                                       (vector short)__b);
  17115 }
  17116 
  17117 static __inline__ int __ATTRS_o_ai vec_any_ne(vector pixel __a,
  17118                                               vector pixel __b) {
  17119   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
  17120                                       (vector short)__b);
  17121 }
  17122 
  17123 static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a, vector int __b) {
  17124   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, __b);
  17125 }
  17126 
  17127 static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a,
  17128                                               vector bool int __b) {
  17129   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, (vector int)__b);
  17130 }
  17131 
  17132 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
  17133                                               vector unsigned int __b) {
  17134   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
  17135                                       (vector int)__b);
  17136 }
  17137 
  17138 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
  17139                                               vector bool int __b) {
  17140   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
  17141                                       (vector int)__b);
  17142 }
  17143 
  17144 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
  17145                                               vector int __b) {
  17146   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
  17147                                       (vector int)__b);
  17148 }
  17149 
  17150 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
  17151                                               vector unsigned int __b) {
  17152   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
  17153                                       (vector int)__b);
  17154 }
  17155 
  17156 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
  17157                                               vector bool int __b) {
  17158   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
  17159                                       (vector int)__b);
  17160 }
  17161 
  17162 #ifdef __VSX__
  17163 static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
  17164                                               vector signed long long __b) {
  17165 #ifdef __POWER8_VECTOR__
  17166   return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a, __b);
  17167 #else
  17168   // Take advantage of the optimized sequence for vec_all_eq when vcmpequd is
  17169   // not available.
  17170   return !vec_all_eq(__a, __b);
  17171 #endif
  17172 }
  17173 
  17174 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
  17175                                               vector unsigned long long __b) {
  17176   return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
  17177 }
  17178 
  17179 static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
  17180                                               vector bool long long __b) {
  17181   return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
  17182 }
  17183 
  17184 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
  17185                                               vector bool long long __b) {
  17186   return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
  17187 }
  17188 
  17189 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
  17190                                               vector signed long long __b) {
  17191   return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
  17192 }
  17193 
  17194 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
  17195                                               vector unsigned long long __b) {
  17196   return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
  17197 }
  17198 
  17199 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
  17200                                               vector bool long long __b) {
  17201   return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
  17202 }
  17203 #endif
  17204 
  17205 static __inline__ int __ATTRS_o_ai vec_any_ne(vector float __a,
  17206                                               vector float __b) {
  17207 #ifdef __VSX__
  17208   return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __b);
  17209 #else
  17210   return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __b);
  17211 #endif
  17212 }
  17213 
  17214 #ifdef __VSX__
  17215 static __inline__ int __ATTRS_o_ai vec_any_ne(vector double __a,
  17216                                               vector double __b) {
  17217   return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __b);
  17218 }
  17219 #endif
  17220 
  17221 #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  17222 static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed __int128 __a,
  17223                                               vector signed __int128 __b) {
  17224   return __builtin_altivec_vcmpequq_p(__CR6_LT_REV,
  17225                                       (vector unsigned __int128)__a, __b);
  17226 }
  17227 
  17228 static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned __int128 __a,
  17229                                               vector unsigned __int128 __b) {
  17230   return __builtin_altivec_vcmpequq_p(__CR6_LT_REV, __a,
  17231                                       (vector signed __int128)__b);
  17232 }
  17233 
  17234 static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool __int128 __a,
  17235                                               vector bool __int128 __b) {
  17236   return __builtin_altivec_vcmpequq_p(
  17237       __CR6_LT_REV, (vector unsigned __int128)__a, (vector signed __int128)__b);
  17238 }
  17239 #endif
  17240 
  17241 /* vec_any_nge */
  17242 
  17243 static __inline__ int __ATTRS_o_ai vec_any_nge(vector float __a,
  17244                                                vector float __b) {
  17245 #ifdef __VSX__
  17246   return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __a, __b);
  17247 #else
  17248   return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __a, __b);
  17249 #endif
  17250 }
  17251 
  17252 #ifdef __VSX__
  17253 static __inline__ int __ATTRS_o_ai vec_any_nge(vector double __a,
  17254                                                vector double __b) {
  17255   return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __a, __b);
  17256 }
  17257 #endif
  17258 
  17259 /* vec_any_ngt */
  17260 
  17261 static __inline__ int __ATTRS_o_ai vec_any_ngt(vector float __a,
  17262                                                vector float __b) {
  17263 #ifdef __VSX__
  17264   return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __a, __b);
  17265 #else
  17266   return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __a, __b);
  17267 #endif
  17268 }
  17269 
  17270 #ifdef __VSX__
  17271 static __inline__ int __ATTRS_o_ai vec_any_ngt(vector double __a,
  17272                                                vector double __b) {
  17273   return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __a, __b);
  17274 }
  17275 #endif
  17276 
  17277 /* vec_any_nle */
  17278 
  17279 static __inline__ int __ATTRS_o_ai vec_any_nle(vector float __a,
  17280                                                vector float __b) {
  17281 #ifdef __VSX__
  17282   return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __b, __a);
  17283 #else
  17284   return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __b, __a);
  17285 #endif
  17286 }
  17287 
  17288 #ifdef __VSX__
  17289 static __inline__ int __ATTRS_o_ai vec_any_nle(vector double __a,
  17290                                                vector double __b) {
  17291   return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __b, __a);
  17292 }
  17293 #endif
  17294 
  17295 /* vec_any_nlt */
  17296 
  17297 static __inline__ int __ATTRS_o_ai vec_any_nlt(vector float __a,
  17298                                                vector float __b) {
  17299 #ifdef __VSX__
  17300   return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __b, __a);
  17301 #else
  17302   return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __b, __a);
  17303 #endif
  17304 }
  17305 
  17306 #ifdef __VSX__
  17307 static __inline__ int __ATTRS_o_ai vec_any_nlt(vector double __a,
  17308                                                vector double __b) {
  17309   return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __b, __a);
  17310 }
  17311 #endif
  17312 
  17313 /* vec_any_numeric */
  17314 
  17315 static __inline__ int __ATTRS_o_ai vec_any_numeric(vector float __a) {
  17316 #ifdef __VSX__
  17317   return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __a);
  17318 #else
  17319   return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __a);
  17320 #endif
  17321 }
  17322 
  17323 #ifdef __VSX__
  17324 static __inline__ int __ATTRS_o_ai vec_any_numeric(vector double __a) {
  17325   return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __a);
  17326 }
  17327 #endif
  17328 
  17329 /* vec_any_out */
  17330 
  17331 static __inline__ int __attribute__((__always_inline__))
  17332 vec_any_out(vector float __a, vector float __b) {
  17333   return __builtin_altivec_vcmpbfp_p(__CR6_EQ_REV, __a, __b);
  17334 }
  17335 
  17336 /* Power 8 Crypto functions
  17337 Note: We diverge from the current GCC implementation with regard
  17338 to cryptography and related functions as follows:
  17339 - Only the SHA and AES instructions and builtins are disabled by -mno-crypto
  17340 - The remaining ones are only available on Power8 and up so
  17341   require -mpower8-vector
  17342 The justification for this is that export requirements require that
  17343 Category:Vector.Crypto is optional (i.e. compliant hardware may not provide
  17344 support). As a result, we need to be able to turn off support for those.
  17345 The remaining ones (currently controlled by -mcrypto for GCC) still
  17346 need to be provided on compliant hardware even if Vector.Crypto is not
  17347 provided.
  17348 */
  17349 #ifdef __CRYPTO__
  17350 #define vec_sbox_be __builtin_altivec_crypto_vsbox
  17351 #define vec_cipher_be __builtin_altivec_crypto_vcipher
  17352 #define vec_cipherlast_be __builtin_altivec_crypto_vcipherlast
  17353 #define vec_ncipher_be __builtin_altivec_crypto_vncipher
  17354 #define vec_ncipherlast_be __builtin_altivec_crypto_vncipherlast
  17355 
  17356 #ifdef __VSX__
  17357 static __inline__ vector unsigned char __attribute__((__always_inline__))
  17358 __builtin_crypto_vsbox(vector unsigned char __a) {
  17359   return __builtin_altivec_crypto_vsbox(__a);
  17360 }
  17361 
  17362 static __inline__ vector unsigned char __attribute__((__always_inline__))
  17363 __builtin_crypto_vcipher(vector unsigned char __a,
  17364                          vector unsigned char __b) {
  17365   return __builtin_altivec_crypto_vcipher(__a, __b);
  17366 }
  17367 
  17368 static __inline__ vector unsigned char __attribute__((__always_inline__))
  17369 __builtin_crypto_vcipherlast(vector unsigned char __a,
  17370                              vector unsigned char __b) {
  17371   return __builtin_altivec_crypto_vcipherlast(__a, __b);
  17372 }
  17373 
  17374 static __inline__ vector unsigned char __attribute__((__always_inline__))
  17375 __builtin_crypto_vncipher(vector unsigned char __a,
  17376                           vector unsigned char __b) {
  17377   return __builtin_altivec_crypto_vncipher(__a, __b);
  17378 }
  17379 
  17380 static __inline__ vector unsigned char  __attribute__((__always_inline__))
  17381 __builtin_crypto_vncipherlast(vector unsigned char __a,
  17382                               vector unsigned char __b) {
  17383   return __builtin_altivec_crypto_vncipherlast(__a, __b);
  17384 }
  17385 #endif /* __VSX__ */
  17386 
  17387 #define __builtin_crypto_vshasigmad __builtin_altivec_crypto_vshasigmad
  17388 #define __builtin_crypto_vshasigmaw __builtin_altivec_crypto_vshasigmaw
  17389 
  17390 #define vec_shasigma_be(X, Y, Z)                                               \
  17391   _Generic((X), vector unsigned int                                            \
  17392            : __builtin_crypto_vshasigmaw, vector unsigned long long            \
  17393            : __builtin_crypto_vshasigmad)((X), (Y), (Z))
  17394 #endif
  17395 
  17396 #ifdef __POWER8_VECTOR__
  17397 static __inline__ vector bool char __ATTRS_o_ai
  17398 vec_permxor(vector bool char __a, vector bool char __b,
  17399             vector bool char __c) {
  17400   return (vector bool char)__builtin_altivec_crypto_vpermxor(
  17401       (vector unsigned char)__a, (vector unsigned char)__b,
  17402       (vector unsigned char)__c);
  17403 }
  17404 
  17405 static __inline__ vector signed char __ATTRS_o_ai
  17406 vec_permxor(vector signed char __a, vector signed char __b,
  17407             vector signed char __c) {
  17408   return (vector signed char)__builtin_altivec_crypto_vpermxor(
  17409       (vector unsigned char)__a, (vector unsigned char)__b,
  17410       (vector unsigned char)__c);
  17411 }
  17412 
  17413 static __inline__ vector unsigned char __ATTRS_o_ai
  17414 vec_permxor(vector unsigned char __a, vector unsigned char __b,
  17415             vector unsigned char __c) {
  17416   return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
  17417 }
  17418 
  17419 static __inline__ vector unsigned char __ATTRS_o_ai
  17420 __builtin_crypto_vpermxor(vector unsigned char __a, vector unsigned char __b,
  17421                           vector unsigned char __c) {
  17422   return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
  17423 }
  17424 
  17425 static __inline__ vector unsigned short __ATTRS_o_ai
  17426 __builtin_crypto_vpermxor(vector unsigned short __a, vector unsigned short __b,
  17427                           vector unsigned short __c) {
  17428   return (vector unsigned short)__builtin_altivec_crypto_vpermxor(
  17429       (vector unsigned char)__a, (vector unsigned char)__b,
  17430       (vector unsigned char)__c);
  17431 }
  17432 
  17433 static __inline__ vector unsigned int __ATTRS_o_ai __builtin_crypto_vpermxor(
  17434     vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
  17435   return (vector unsigned int)__builtin_altivec_crypto_vpermxor(
  17436       (vector unsigned char)__a, (vector unsigned char)__b,
  17437       (vector unsigned char)__c);
  17438 }
  17439 
  17440 static __inline__ vector unsigned long long __ATTRS_o_ai
  17441 __builtin_crypto_vpermxor(vector unsigned long long __a,
  17442                           vector unsigned long long __b,
  17443                           vector unsigned long long __c) {
  17444   return (vector unsigned long long)__builtin_altivec_crypto_vpermxor(
  17445       (vector unsigned char)__a, (vector unsigned char)__b,
  17446       (vector unsigned char)__c);
  17447 }
  17448 
  17449 static __inline__ vector unsigned char __ATTRS_o_ai
  17450 __builtin_crypto_vpmsumb(vector unsigned char __a, vector unsigned char __b) {
  17451   return __builtin_altivec_crypto_vpmsumb(__a, __b);
  17452 }
  17453 
  17454 static __inline__ vector unsigned short __ATTRS_o_ai
  17455 __builtin_crypto_vpmsumb(vector unsigned short __a, vector unsigned short __b) {
  17456   return __builtin_altivec_crypto_vpmsumh(__a, __b);
  17457 }
  17458 
  17459 static __inline__ vector unsigned int __ATTRS_o_ai
  17460 __builtin_crypto_vpmsumb(vector unsigned int __a, vector unsigned int __b) {
  17461   return __builtin_altivec_crypto_vpmsumw(__a, __b);
  17462 }
  17463 
  17464 static __inline__ vector unsigned long long __ATTRS_o_ai
  17465 __builtin_crypto_vpmsumb(vector unsigned long long __a,
  17466                          vector unsigned long long __b) {
  17467   return __builtin_altivec_crypto_vpmsumd(__a, __b);
  17468 }
  17469 
  17470 static __inline__ vector signed char __ATTRS_o_ai
  17471 vec_vgbbd(vector signed char __a) {
  17472   return (vector signed char)__builtin_altivec_vgbbd((vector unsigned char)__a);
  17473 }
  17474 
  17475 #define vec_pmsum_be __builtin_crypto_vpmsumb
  17476 #define vec_gb __builtin_altivec_vgbbd
  17477 
  17478 static __inline__ vector unsigned char __ATTRS_o_ai
  17479 vec_vgbbd(vector unsigned char __a) {
  17480   return __builtin_altivec_vgbbd(__a);
  17481 }
  17482 
  17483 static __inline__ vector signed long long __ATTRS_o_ai
  17484 vec_gbb(vector signed long long __a) {
  17485   return (vector signed long long)__builtin_altivec_vgbbd(
  17486       (vector unsigned char)__a);
  17487 }
  17488 
  17489 static __inline__ vector unsigned long long __ATTRS_o_ai
  17490 vec_gbb(vector unsigned long long __a) {
  17491   return (vector unsigned long long)__builtin_altivec_vgbbd(
  17492       (vector unsigned char)__a);
  17493 }
  17494 
  17495 static __inline__ vector long long __ATTRS_o_ai
  17496 vec_vbpermq(vector signed char __a, vector signed char __b) {
  17497   return (vector long long)__builtin_altivec_vbpermq((vector unsigned char)__a,
  17498                                                      (vector unsigned char)__b);
  17499 }
  17500 
  17501 static __inline__ vector long long __ATTRS_o_ai
  17502 vec_vbpermq(vector unsigned char __a, vector unsigned char __b) {
  17503   return (vector long long)__builtin_altivec_vbpermq(__a, __b);
  17504 }
  17505 
  17506 #if defined(__powerpc64__) && defined(__SIZEOF_INT128__)
  17507 static __inline__ vector unsigned long long __ATTRS_o_ai
  17508 vec_bperm(vector unsigned __int128 __a, vector unsigned char __b) {
  17509   return __builtin_altivec_vbpermq((vector unsigned char)__a,
  17510                                    (vector unsigned char)__b);
  17511 }
  17512 #endif
  17513 static __inline__ vector unsigned char __ATTRS_o_ai
  17514 vec_bperm(vector unsigned char __a, vector unsigned char __b) {
  17515   return (vector unsigned char)__builtin_altivec_vbpermq(__a, __b);
  17516 }
  17517 #endif // __POWER8_VECTOR__
  17518 #ifdef __POWER9_VECTOR__
  17519 static __inline__ vector unsigned long long __ATTRS_o_ai
  17520 vec_bperm(vector unsigned long long __a, vector unsigned char __b) {
  17521   return __builtin_altivec_vbpermd(__a, __b);
  17522 }
  17523 #endif
  17524 
  17525 
  17526 /* vec_reve */
  17527 
  17528 static inline __ATTRS_o_ai vector bool char vec_reve(vector bool char __a) {
  17529   return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
  17530                                  5, 4, 3, 2, 1, 0);
  17531 }
  17532 
  17533 static inline __ATTRS_o_ai vector signed char vec_reve(vector signed char __a) {
  17534   return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
  17535                                  5, 4, 3, 2, 1, 0);
  17536 }
  17537 
  17538 static inline __ATTRS_o_ai vector unsigned char
  17539 vec_reve(vector unsigned char __a) {
  17540   return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
  17541                                  5, 4, 3, 2, 1, 0);
  17542 }
  17543 
  17544 static inline __ATTRS_o_ai vector bool int vec_reve(vector bool int __a) {
  17545   return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
  17546 }
  17547 
  17548 static inline __ATTRS_o_ai vector signed int vec_reve(vector signed int __a) {
  17549   return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
  17550 }
  17551 
  17552 static inline __ATTRS_o_ai vector unsigned int
  17553 vec_reve(vector unsigned int __a) {
  17554   return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
  17555 }
  17556 
  17557 static inline __ATTRS_o_ai vector bool short vec_reve(vector bool short __a) {
  17558   return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
  17559 }
  17560 
  17561 static inline __ATTRS_o_ai vector signed short
  17562 vec_reve(vector signed short __a) {
  17563   return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
  17564 }
  17565 
  17566 static inline __ATTRS_o_ai vector unsigned short
  17567 vec_reve(vector unsigned short __a) {
  17568   return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
  17569 }
  17570 
  17571 static inline __ATTRS_o_ai vector float vec_reve(vector float __a) {
  17572   return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
  17573 }
  17574 
  17575 #ifdef __VSX__
  17576 static inline __ATTRS_o_ai vector bool long long
  17577 vec_reve(vector bool long long __a) {
  17578   return __builtin_shufflevector(__a, __a, 1, 0);
  17579 }
  17580 
  17581 static inline __ATTRS_o_ai vector signed long long
  17582 vec_reve(vector signed long long __a) {
  17583   return __builtin_shufflevector(__a, __a, 1, 0);
  17584 }
  17585 
  17586 static inline __ATTRS_o_ai vector unsigned long long
  17587 vec_reve(vector unsigned long long __a) {
  17588   return __builtin_shufflevector(__a, __a, 1, 0);
  17589 }
  17590 
  17591 static inline __ATTRS_o_ai vector double vec_reve(vector double __a) {
  17592   return __builtin_shufflevector(__a, __a, 1, 0);
  17593 }
  17594 #endif
  17595 
  17596 /* vec_revb */
  17597 static __inline__ vector bool char __ATTRS_o_ai
  17598 vec_revb(vector bool char __a) {
  17599   return __a;
  17600 }
  17601 
  17602 static __inline__ vector signed char __ATTRS_o_ai
  17603 vec_revb(vector signed char __a) {
  17604   return __a;
  17605 }
  17606 
  17607 static __inline__ vector unsigned char __ATTRS_o_ai
  17608 vec_revb(vector unsigned char __a) {
  17609   return __a;
  17610 }
  17611 
  17612 static __inline__ vector bool short __ATTRS_o_ai
  17613 vec_revb(vector bool short __a) {
  17614   vector unsigned char __indices =
  17615       { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
  17616   return vec_perm(__a, __a, __indices);
  17617 }
  17618 
  17619 static __inline__ vector signed short __ATTRS_o_ai
  17620 vec_revb(vector signed short __a) {
  17621   vector unsigned char __indices =
  17622       { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
  17623   return vec_perm(__a, __a, __indices);
  17624 }
  17625 
  17626 static __inline__ vector unsigned short __ATTRS_o_ai
  17627 vec_revb(vector unsigned short __a) {
  17628   vector unsigned char __indices =
  17629      { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
  17630   return vec_perm(__a, __a, __indices);
  17631 }
  17632 
  17633 static __inline__ vector bool int __ATTRS_o_ai
  17634 vec_revb(vector bool int __a) {
  17635   vector unsigned char __indices =
  17636       { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
  17637   return vec_perm(__a, __a, __indices);
  17638 }
  17639 
  17640 static __inline__ vector signed int __ATTRS_o_ai
  17641 vec_revb(vector signed int __a) {
  17642   vector unsigned char __indices =
  17643       { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
  17644   return vec_perm(__a, __a, __indices);
  17645 }
  17646 
  17647 static __inline__ vector unsigned int __ATTRS_o_ai
  17648 vec_revb(vector unsigned int __a) {
  17649   vector unsigned char __indices =
  17650       { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
  17651   return vec_perm(__a, __a, __indices);
  17652 }
  17653 
  17654 static __inline__ vector float __ATTRS_o_ai
  17655 vec_revb(vector float __a) {
  17656  vector unsigned char __indices =
  17657       { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
  17658  return vec_perm(__a, __a, __indices);
  17659 }
  17660 
  17661 #ifdef __VSX__
  17662 static __inline__ vector bool long long __ATTRS_o_ai
  17663 vec_revb(vector bool long long __a) {
  17664   vector unsigned char __indices =
  17665       { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
  17666   return vec_perm(__a, __a, __indices);
  17667 }
  17668 
  17669 static __inline__ vector signed long long __ATTRS_o_ai
  17670 vec_revb(vector signed long long __a) {
  17671   vector unsigned char __indices =
  17672       { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
  17673   return vec_perm(__a, __a, __indices);
  17674 }
  17675 
  17676 static __inline__ vector unsigned long long __ATTRS_o_ai
  17677 vec_revb(vector unsigned long long __a) {
  17678   vector unsigned char __indices =
  17679       { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
  17680   return vec_perm(__a, __a, __indices);
  17681 }
  17682 
  17683 static __inline__ vector double __ATTRS_o_ai
  17684 vec_revb(vector double __a) {
  17685   vector unsigned char __indices =
  17686       { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
  17687   return vec_perm(__a, __a, __indices);
  17688 }
  17689 #endif /* End __VSX__ */
  17690 
  17691 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  17692     defined(__SIZEOF_INT128__)
  17693 static __inline__ vector signed __int128 __ATTRS_o_ai
  17694 vec_revb(vector signed __int128 __a) {
  17695   vector unsigned char __indices =
  17696       { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
  17697   return (vector signed __int128)vec_perm((vector signed int)__a,
  17698                                           (vector signed int)__a,
  17699                                            __indices);
  17700 }
  17701 
  17702 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  17703 vec_revb(vector unsigned __int128 __a) {
  17704   vector unsigned char __indices =
  17705       { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
  17706   return (vector unsigned __int128)vec_perm((vector signed int)__a,
  17707                                             (vector signed int)__a,
  17708                                              __indices);
  17709 }
  17710 #endif /* END __POWER8_VECTOR__ && __powerpc64__ */
  17711 
  17712 /* vec_xl */
  17713 
  17714 #define vec_xld2 vec_xl
  17715 #define vec_xlw4 vec_xl
  17716 typedef vector signed char unaligned_vec_schar __attribute__((aligned(1)));
  17717 typedef vector unsigned char unaligned_vec_uchar __attribute__((aligned(1)));
  17718 typedef vector signed short unaligned_vec_sshort __attribute__((aligned(1)));
  17719 typedef vector unsigned short unaligned_vec_ushort __attribute__((aligned(1)));
  17720 typedef vector signed int unaligned_vec_sint __attribute__((aligned(1)));
  17721 typedef vector unsigned int unaligned_vec_uint __attribute__((aligned(1)));
  17722 typedef vector float unaligned_vec_float __attribute__((aligned(1)));
  17723 
  17724 static inline __ATTRS_o_ai vector signed char vec_xl(ptrdiff_t __offset,
  17725                                                      const signed char *__ptr) {
  17726   return *(unaligned_vec_schar *)(__ptr + __offset);
  17727 }
  17728 
  17729 static inline __ATTRS_o_ai vector unsigned char
  17730 vec_xl(ptrdiff_t __offset, const unsigned char *__ptr) {
  17731   return *(unaligned_vec_uchar*)(__ptr + __offset);
  17732 }
  17733 
  17734 static inline __ATTRS_o_ai vector signed short
  17735 vec_xl(ptrdiff_t __offset, const signed short *__ptr) {
  17736   signed char *__addr = (signed char *)__ptr + __offset;
  17737   return *(unaligned_vec_sshort *)__addr;
  17738 }
  17739 
  17740 static inline __ATTRS_o_ai vector unsigned short
  17741 vec_xl(ptrdiff_t __offset, const unsigned short *__ptr) {
  17742   signed char *__addr = (signed char *)__ptr + __offset;
  17743   return *(unaligned_vec_ushort *)__addr;
  17744 }
  17745 
  17746 static inline __ATTRS_o_ai vector signed int vec_xl(ptrdiff_t __offset,
  17747                                                     const signed int *__ptr) {
  17748   signed char *__addr = (signed char *)__ptr + __offset;
  17749   return *(unaligned_vec_sint *)__addr;
  17750 }
  17751 
  17752 static inline __ATTRS_o_ai vector unsigned int
  17753 vec_xl(ptrdiff_t __offset, const unsigned int *__ptr) {
  17754   signed char *__addr = (signed char *)__ptr + __offset;
  17755   return *(unaligned_vec_uint *)__addr;
  17756 }
  17757 
  17758 static inline __ATTRS_o_ai vector float vec_xl(ptrdiff_t __offset,
  17759                                                const float *__ptr) {
  17760   signed char *__addr = (signed char *)__ptr + __offset;
  17761   return *(unaligned_vec_float *)__addr;
  17762 }
  17763 
  17764 #ifdef __VSX__
  17765 typedef vector signed long long unaligned_vec_sll __attribute__((aligned(1)));
  17766 typedef vector unsigned long long unaligned_vec_ull __attribute__((aligned(1)));
  17767 typedef vector double unaligned_vec_double __attribute__((aligned(1)));
  17768 
  17769 static inline __ATTRS_o_ai vector signed long long
  17770 vec_xl(ptrdiff_t __offset, const signed long long *__ptr) {
  17771   signed char *__addr = (signed char *)__ptr + __offset;
  17772   return *(unaligned_vec_sll *)__addr;
  17773 }
  17774 
  17775 static inline __ATTRS_o_ai vector unsigned long long
  17776 vec_xl(ptrdiff_t __offset, const unsigned long long *__ptr) {
  17777   signed char *__addr = (signed char *)__ptr + __offset;
  17778   return *(unaligned_vec_ull *)__addr;
  17779 }
  17780 
  17781 static inline __ATTRS_o_ai vector double vec_xl(ptrdiff_t __offset,
  17782                                                 const double *__ptr) {
  17783   signed char *__addr = (signed char *)__ptr + __offset;
  17784   return *(unaligned_vec_double *)__addr;
  17785 }
  17786 #endif
  17787 
  17788 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  17789     defined(__SIZEOF_INT128__)
  17790 typedef vector signed __int128 unaligned_vec_si128 __attribute__((aligned(1)));
  17791 typedef vector unsigned __int128 unaligned_vec_ui128
  17792     __attribute__((aligned(1)));
  17793 static inline __ATTRS_o_ai vector signed __int128
  17794 vec_xl(ptrdiff_t __offset, const signed __int128 *__ptr) {
  17795   signed char *__addr = (signed char *)__ptr + __offset;
  17796   return *(unaligned_vec_si128 *)__addr;
  17797 }
  17798 
  17799 static inline __ATTRS_o_ai vector unsigned __int128
  17800 vec_xl(ptrdiff_t __offset, const unsigned __int128 *__ptr) {
  17801   signed char *__addr = (signed char *)__ptr + __offset;
  17802   return *(unaligned_vec_ui128 *)__addr;
  17803 }
  17804 #endif
  17805 
  17806 /* vec_xl_be */
  17807 
  17808 #ifdef __LITTLE_ENDIAN__
  17809 static __inline__ vector signed char __ATTRS_o_ai
  17810 vec_xl_be(ptrdiff_t __offset, const signed char *__ptr) {
  17811   vector signed char __vec = (vector signed char)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17812   return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
  17813                                  13, 12, 11, 10, 9, 8);
  17814 }
  17815 
  17816 static __inline__ vector unsigned char __ATTRS_o_ai
  17817 vec_xl_be(ptrdiff_t __offset, const unsigned char *__ptr) {
  17818   vector unsigned char __vec = (vector unsigned char)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17819   return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
  17820                                  13, 12, 11, 10, 9, 8);
  17821 }
  17822 
  17823 static __inline__ vector signed short __ATTRS_o_ai
  17824 vec_xl_be(ptrdiff_t __offset, const signed short *__ptr) {
  17825   vector signed short __vec = (vector signed short)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17826   return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
  17827 }
  17828 
  17829 static __inline__ vector unsigned short __ATTRS_o_ai
  17830 vec_xl_be(ptrdiff_t __offset, const unsigned short *__ptr) {
  17831   vector unsigned short __vec = (vector unsigned short)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17832   return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
  17833 }
  17834 
  17835 static __inline__ vector signed int __ATTRS_o_ai
  17836 vec_xl_be(signed long long  __offset, const signed int *__ptr) {
  17837   return (vector signed int)__builtin_vsx_lxvw4x_be(__offset, __ptr);
  17838 }
  17839 
  17840 static __inline__ vector unsigned int __ATTRS_o_ai
  17841 vec_xl_be(signed long long  __offset, const unsigned int *__ptr) {
  17842   return (vector unsigned int)__builtin_vsx_lxvw4x_be(__offset, __ptr);
  17843 }
  17844 
  17845 static __inline__ vector float __ATTRS_o_ai
  17846 vec_xl_be(signed long long  __offset, const float *__ptr) {
  17847   return (vector float)__builtin_vsx_lxvw4x_be(__offset, __ptr);
  17848 }
  17849 
  17850 #ifdef __VSX__
  17851 static __inline__ vector signed long long __ATTRS_o_ai
  17852 vec_xl_be(signed long long  __offset, const signed long long *__ptr) {
  17853   return (vector signed long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17854 }
  17855 
  17856 static __inline__ vector unsigned long long __ATTRS_o_ai
  17857 vec_xl_be(signed long long  __offset, const unsigned long long *__ptr) {
  17858   return (vector unsigned long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17859 }
  17860 
  17861 static __inline__ vector double __ATTRS_o_ai
  17862 vec_xl_be(signed long long  __offset, const double *__ptr) {
  17863   return (vector double)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17864 }
  17865 #endif
  17866 
  17867 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  17868     defined(__SIZEOF_INT128__)
  17869 static __inline__ vector signed __int128 __ATTRS_o_ai
  17870 vec_xl_be(signed long long  __offset, const signed __int128 *__ptr) {
  17871   return vec_xl(__offset, __ptr);
  17872 }
  17873 
  17874 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  17875 vec_xl_be(signed long long  __offset, const unsigned __int128 *__ptr) {
  17876   return vec_xl(__offset, __ptr);
  17877 }
  17878 #endif
  17879 #else
  17880   #define vec_xl_be vec_xl
  17881 #endif
  17882 
  17883 #if defined(__POWER10_VECTOR__) && defined(__VSX__) &&                         \
  17884     defined(__SIZEOF_INT128__)
  17885 
  17886 /* vec_xl_sext */
  17887 
  17888 static __inline__ vector signed __int128 __ATTRS_o_ai
  17889 vec_xl_sext(ptrdiff_t __offset, const signed char *__pointer) {
  17890   return (vector signed __int128)*(__pointer + __offset);
  17891 }
  17892 
  17893 static __inline__ vector signed __int128 __ATTRS_o_ai
  17894 vec_xl_sext(ptrdiff_t __offset, const signed short *__pointer) {
  17895   return (vector signed __int128)*(__pointer + __offset);
  17896 }
  17897 
  17898 static __inline__ vector signed __int128 __ATTRS_o_ai
  17899 vec_xl_sext(ptrdiff_t __offset, const signed int *__pointer) {
  17900   return (vector signed __int128)*(__pointer + __offset);
  17901 }
  17902 
  17903 static __inline__ vector signed __int128 __ATTRS_o_ai
  17904 vec_xl_sext(ptrdiff_t __offset, const signed long long *__pointer) {
  17905   return (vector signed __int128)*(__pointer + __offset);
  17906 }
  17907 
  17908 /* vec_xl_zext */
  17909 
  17910 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  17911 vec_xl_zext(ptrdiff_t __offset, const unsigned char *__pointer) {
  17912   return (vector unsigned __int128)*(__pointer + __offset);
  17913 }
  17914 
  17915 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  17916 vec_xl_zext(ptrdiff_t __offset, const unsigned short *__pointer) {
  17917   return (vector unsigned __int128)*(__pointer + __offset);
  17918 }
  17919 
  17920 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  17921 vec_xl_zext(ptrdiff_t __offset, const unsigned int *__pointer) {
  17922   return (vector unsigned __int128)*(__pointer + __offset);
  17923 }
  17924 
  17925 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  17926 vec_xl_zext(ptrdiff_t __offset, const unsigned long long *__pointer) {
  17927   return (vector unsigned __int128)*(__pointer + __offset);
  17928 }
  17929 
  17930 #endif
  17931 
  17932 /* vec_xlds */
  17933 #ifdef __VSX__
  17934 static __inline__ vector signed long long __ATTRS_o_ai
  17935 vec_xlds(ptrdiff_t __offset, const signed long long *__ptr) {
  17936   signed long long *__addr = (signed long long*)((signed char *)__ptr + __offset);
  17937   return (vector signed long long) *__addr;
  17938 }
  17939 
  17940 static __inline__ vector unsigned long long __ATTRS_o_ai
  17941 vec_xlds(ptrdiff_t __offset, const unsigned long long *__ptr) {
  17942   unsigned long long *__addr = (unsigned long long *)((signed char *)__ptr + __offset);
  17943   return (unaligned_vec_ull) *__addr;
  17944 }
  17945 
  17946 static __inline__ vector double __ATTRS_o_ai vec_xlds(ptrdiff_t __offset,
  17947                                                       const double *__ptr) {
  17948   double *__addr = (double*)((signed char *)__ptr + __offset);
  17949   return (unaligned_vec_double) *__addr;
  17950 }
  17951 
  17952 /* vec_load_splats */
  17953 static __inline__ vector signed int __ATTRS_o_ai
  17954 vec_load_splats(signed long long __offset, const signed int *__ptr) {
  17955   signed int *__addr = (signed int*)((signed char *)__ptr + __offset);
  17956   return (vector signed int)*__addr;
  17957 }
  17958 
  17959 static __inline__ vector signed int __ATTRS_o_ai
  17960 vec_load_splats(unsigned long long __offset, const signed int *__ptr) {
  17961   signed int *__addr = (signed int*)((signed char *)__ptr + __offset);
  17962   return (vector signed int)*__addr;
  17963 }
  17964 
  17965 static __inline__ vector unsigned int __ATTRS_o_ai
  17966 vec_load_splats(signed long long __offset, const unsigned int *__ptr) {
  17967   unsigned int *__addr = (unsigned int*)((signed char *)__ptr + __offset);
  17968   return (vector unsigned int)*__addr;
  17969 }
  17970 
  17971 static __inline__ vector unsigned int __ATTRS_o_ai
  17972 vec_load_splats(unsigned long long __offset, const unsigned int *__ptr) {
  17973   unsigned int *__addr = (unsigned int*)((signed char *)__ptr + __offset);
  17974   return (vector unsigned int)*__addr;
  17975 }
  17976 
  17977 static __inline__ vector float __ATTRS_o_ai
  17978 vec_load_splats(signed long long __offset, const float *__ptr) {
  17979   float *__addr = (float*)((signed char *)__ptr + __offset);
  17980   return (vector float)*__addr;
  17981 }
  17982 
  17983 static __inline__ vector float __ATTRS_o_ai
  17984 vec_load_splats(unsigned long long __offset, const float *__ptr) {
  17985   float *__addr = (float*)((signed char *)__ptr + __offset);
  17986   return (vector float)*__addr;
  17987 }
  17988 #endif
  17989 
  17990 /* vec_xst */
  17991 
  17992 #define vec_xstd2 vec_xst
  17993 #define vec_xstw4 vec_xst
  17994 static inline __ATTRS_o_ai void
  17995 vec_xst(vector signed char __vec, ptrdiff_t __offset, signed char *__ptr) {
  17996   *(unaligned_vec_schar *)(__ptr + __offset) = __vec;
  17997 }
  17998 
  17999 static inline __ATTRS_o_ai void
  18000 vec_xst(vector unsigned char __vec, ptrdiff_t __offset, unsigned char *__ptr) {
  18001   *(unaligned_vec_uchar *)(__ptr + __offset) = __vec;
  18002 }
  18003 
  18004 static inline __ATTRS_o_ai void
  18005 vec_xst(vector signed short __vec, ptrdiff_t __offset, signed short *__ptr) {
  18006   signed char *__addr = (signed char *)__ptr + __offset;
  18007   *(unaligned_vec_sshort *)__addr = __vec;
  18008 }
  18009 
  18010 static inline __ATTRS_o_ai void vec_xst(vector unsigned short __vec,
  18011                                         ptrdiff_t __offset,
  18012                                         unsigned short *__ptr) {
  18013   signed char *__addr = (signed char *)__ptr + __offset;
  18014   *(unaligned_vec_ushort *)__addr = __vec;
  18015 }
  18016 
  18017 static inline __ATTRS_o_ai void vec_xst(vector signed int __vec,
  18018                                         ptrdiff_t __offset, signed int *__ptr) {
  18019   signed char *__addr = (signed char *)__ptr + __offset;
  18020   *(unaligned_vec_sint *)__addr = __vec;
  18021 }
  18022 
  18023 static inline __ATTRS_o_ai void
  18024 vec_xst(vector unsigned int __vec, ptrdiff_t __offset, unsigned int *__ptr) {
  18025   signed char *__addr = (signed char *)__ptr + __offset;
  18026   *(unaligned_vec_uint *)__addr = __vec;
  18027 }
  18028 
  18029 static inline __ATTRS_o_ai void vec_xst(vector float __vec, ptrdiff_t __offset,
  18030                                         float *__ptr) {
  18031   signed char *__addr = (signed char *)__ptr + __offset;
  18032   *(unaligned_vec_float *)__addr = __vec;
  18033 }
  18034 
  18035 #ifdef __VSX__
  18036 static inline __ATTRS_o_ai void vec_xst(vector signed long long __vec,
  18037                                         ptrdiff_t __offset,
  18038                                         signed long long *__ptr) {
  18039   signed char *__addr = (signed char *)__ptr + __offset;
  18040   *(unaligned_vec_sll *)__addr = __vec;
  18041 }
  18042 
  18043 static inline __ATTRS_o_ai void vec_xst(vector unsigned long long __vec,
  18044                                         ptrdiff_t __offset,
  18045                                         unsigned long long *__ptr) {
  18046   signed char *__addr = (signed char *)__ptr + __offset;
  18047   *(unaligned_vec_ull *)__addr = __vec;
  18048 }
  18049 
  18050 static inline __ATTRS_o_ai void vec_xst(vector double __vec, ptrdiff_t __offset,
  18051                                         double *__ptr) {
  18052   signed char *__addr = (signed char *)__ptr + __offset;
  18053   *(unaligned_vec_double *)__addr = __vec;
  18054 }
  18055 #endif
  18056 
  18057 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  18058     defined(__SIZEOF_INT128__)
  18059 static inline __ATTRS_o_ai void vec_xst(vector signed __int128 __vec,
  18060                                         ptrdiff_t __offset,
  18061                                         signed __int128 *__ptr) {
  18062   signed char *__addr = (signed char *)__ptr + __offset;
  18063   *(unaligned_vec_si128 *)__addr = __vec;
  18064 }
  18065 
  18066 static inline __ATTRS_o_ai void vec_xst(vector unsigned __int128 __vec,
  18067                                         ptrdiff_t __offset,
  18068                                         unsigned __int128 *__ptr) {
  18069   signed char *__addr = (signed char *)__ptr + __offset;
  18070   *(unaligned_vec_ui128 *)__addr = __vec;
  18071 }
  18072 #endif
  18073 
  18074 /* vec_xst_trunc */
  18075 
  18076 #if defined(__POWER10_VECTOR__) && defined(__VSX__) &&                         \
  18077     defined(__SIZEOF_INT128__)
  18078 static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
  18079                                               ptrdiff_t __offset,
  18080                                               signed char *__ptr) {
  18081   *(__ptr + __offset) = (signed char)__vec[0];
  18082 }
  18083 
  18084 static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
  18085                                               ptrdiff_t __offset,
  18086                                               unsigned char *__ptr) {
  18087   *(__ptr + __offset) = (unsigned char)__vec[0];
  18088 }
  18089 
  18090 static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
  18091                                               ptrdiff_t __offset,
  18092                                               signed short *__ptr) {
  18093   *(__ptr + __offset) = (signed short)__vec[0];
  18094 }
  18095 
  18096 static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
  18097                                               ptrdiff_t __offset,
  18098                                               unsigned short *__ptr) {
  18099   *(__ptr + __offset) = (unsigned short)__vec[0];
  18100 }
  18101 
  18102 static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
  18103                                               ptrdiff_t __offset,
  18104                                               signed int *__ptr) {
  18105   *(__ptr + __offset) = (signed int)__vec[0];
  18106 }
  18107 
  18108 static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
  18109                                               ptrdiff_t __offset,
  18110                                               unsigned int *__ptr) {
  18111   *(__ptr + __offset) = (unsigned int)__vec[0];
  18112 }
  18113 
  18114 static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
  18115                                               ptrdiff_t __offset,
  18116                                               signed long long *__ptr) {
  18117   *(__ptr + __offset) = (signed long long)__vec[0];
  18118 }
  18119 
  18120 static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
  18121                                               ptrdiff_t __offset,
  18122                                               unsigned long long *__ptr) {
  18123   *(__ptr + __offset) = (unsigned long long)__vec[0];
  18124 }
  18125 #endif
  18126 
  18127 /* vec_xst_be */
  18128 
  18129 #ifdef __LITTLE_ENDIAN__
  18130 static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed char __vec,
  18131                                                signed long long  __offset,
  18132                                                signed char *__ptr) {
  18133   vector signed char __tmp =
  18134      __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
  18135                              13, 12, 11, 10, 9, 8);
  18136   typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
  18137   __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
  18138 }
  18139 
  18140 static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned char __vec,
  18141                                                signed long long  __offset,
  18142                                                unsigned char *__ptr) {
  18143   vector unsigned char __tmp =
  18144      __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
  18145                              13, 12, 11, 10, 9, 8);
  18146   typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
  18147   __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
  18148 }
  18149 
  18150 static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed short __vec,
  18151                                                signed long long  __offset,
  18152                                                signed short *__ptr) {
  18153   vector signed short __tmp =
  18154      __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
  18155   typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
  18156   __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
  18157 }
  18158 
  18159 static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned short __vec,
  18160                                                signed long long  __offset,
  18161                                                unsigned short *__ptr) {
  18162   vector unsigned short __tmp =
  18163      __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
  18164   typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
  18165   __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
  18166 }
  18167 
  18168 static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed int __vec,
  18169                                                signed long long  __offset,
  18170                                                signed int *__ptr) {
  18171   __builtin_vsx_stxvw4x_be(__vec, __offset, __ptr);
  18172 }
  18173 
  18174 static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned int __vec,
  18175                                                signed long long  __offset,
  18176                                                unsigned int *__ptr) {
  18177   __builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);
  18178 }
  18179 
  18180 static __inline__ void __ATTRS_o_ai vec_xst_be(vector float __vec,
  18181                                                signed long long  __offset,
  18182                                                float *__ptr) {
  18183   __builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);
  18184 }
  18185 
  18186 #ifdef __VSX__
  18187 static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed long long __vec,
  18188                                                signed long long  __offset,
  18189                                                signed long long *__ptr) {
  18190   __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
  18191 }
  18192 
  18193 static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned long long __vec,
  18194                                                signed long long  __offset,
  18195                                                unsigned long long *__ptr) {
  18196   __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
  18197 }
  18198 
  18199 static __inline__ void __ATTRS_o_ai vec_xst_be(vector double __vec,
  18200                                                signed long long  __offset,
  18201                                                double *__ptr) {
  18202   __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
  18203 }
  18204 #endif
  18205 
  18206 #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  18207     defined(__SIZEOF_INT128__)
  18208 static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed __int128 __vec,
  18209                                                signed long long  __offset,
  18210                                                signed __int128 *__ptr) {
  18211   vec_xst(__vec, __offset, __ptr);
  18212 }
  18213 
  18214 static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned __int128 __vec,
  18215                                                signed long long  __offset,
  18216                                                unsigned __int128 *__ptr) {
  18217   vec_xst(__vec, __offset, __ptr);
  18218 }
  18219 #endif
  18220 #else
  18221   #define vec_xst_be vec_xst
  18222 #endif
  18223 
  18224 #ifdef __POWER9_VECTOR__
  18225 #define vec_test_data_class(__a, __b)                                          \
  18226   _Generic(                                                                    \
  18227       (__a), vector float                                                      \
  18228       : (vector bool int)__builtin_vsx_xvtstdcsp((vector float)(__a), (__b)),  \
  18229         vector double                                                          \
  18230       : (vector bool long long)__builtin_vsx_xvtstdcdp((vector double)(__a),   \
  18231                                                        (__b)))
  18232 
  18233 #endif /* #ifdef __POWER9_VECTOR__ */
  18234 
  18235 static vector float __ATTRS_o_ai vec_neg(vector float __a) {
  18236   return -__a;
  18237 }
  18238 
  18239 #ifdef __VSX__
  18240 static vector double __ATTRS_o_ai vec_neg(vector double __a) {
  18241   return -__a;
  18242 }
  18243 
  18244 #endif
  18245 
  18246 #ifdef __VSX__
  18247 static vector long long __ATTRS_o_ai vec_neg(vector long long __a) {
  18248   return -__a;
  18249 }
  18250 #endif
  18251 
  18252 static vector signed int __ATTRS_o_ai vec_neg(vector signed int __a) {
  18253   return -__a;
  18254 }
  18255 
  18256 static vector signed short __ATTRS_o_ai vec_neg(vector signed short __a) {
  18257   return -__a;
  18258 }
  18259 
  18260 static vector signed char __ATTRS_o_ai vec_neg(vector signed char __a) {
  18261   return -__a;
  18262 }
  18263 
  18264 static vector float __ATTRS_o_ai vec_nabs(vector float __a) {
  18265   return - vec_abs(__a);
  18266 }
  18267 
  18268 #ifdef __VSX__
  18269 static vector double __ATTRS_o_ai vec_nabs(vector double __a) {
  18270   return - vec_abs(__a);
  18271 }
  18272 
  18273 #endif
  18274 
  18275 #ifdef __POWER8_VECTOR__
  18276 static vector long long __ATTRS_o_ai vec_nabs(vector long long __a) {
  18277   return __builtin_altivec_vminsd(__a, -__a);
  18278 }
  18279 #endif
  18280 
  18281 static vector signed int __ATTRS_o_ai vec_nabs(vector signed int __a) {
  18282   return __builtin_altivec_vminsw(__a, -__a);
  18283 }
  18284 
  18285 static vector signed short __ATTRS_o_ai vec_nabs(vector signed short __a) {
  18286   return __builtin_altivec_vminsh(__a, -__a);
  18287 }
  18288 
  18289 static vector signed char __ATTRS_o_ai vec_nabs(vector signed char __a) {
  18290   return __builtin_altivec_vminsb(__a, -__a);
  18291 }
  18292 
  18293 static vector float __ATTRS_o_ai vec_recipdiv(vector float __a,
  18294                                               vector float __b) {
  18295   return __builtin_ppc_recipdivf(__a, __b);
  18296 }
  18297 
  18298 #ifdef __VSX__
  18299 static vector double __ATTRS_o_ai vec_recipdiv(vector double __a,
  18300                                                vector double __b) {
  18301   return __builtin_ppc_recipdivd(__a, __b);
  18302 }
  18303 #endif
  18304 
  18305 #ifdef __POWER10_VECTOR__
  18306 
  18307 /* vec_extractm */
  18308 
  18309 static __inline__ unsigned int __ATTRS_o_ai
  18310 vec_extractm(vector unsigned char __a) {
  18311   return __builtin_altivec_vextractbm(__a);
  18312 }
  18313 
  18314 static __inline__ unsigned int __ATTRS_o_ai
  18315 vec_extractm(vector unsigned short __a) {
  18316   return __builtin_altivec_vextracthm(__a);
  18317 }
  18318 
  18319 static __inline__ unsigned int __ATTRS_o_ai
  18320 vec_extractm(vector unsigned int __a) {
  18321   return __builtin_altivec_vextractwm(__a);
  18322 }
  18323 
  18324 static __inline__ unsigned int __ATTRS_o_ai
  18325 vec_extractm(vector unsigned long long __a) {
  18326   return __builtin_altivec_vextractdm(__a);
  18327 }
  18328 
  18329 #ifdef __SIZEOF_INT128__
  18330 static __inline__ unsigned int __ATTRS_o_ai
  18331 vec_extractm(vector unsigned __int128 __a) {
  18332   return __builtin_altivec_vextractqm(__a);
  18333 }
  18334 #endif
  18335 
  18336 /* vec_expandm */
  18337 
  18338 static __inline__ vector unsigned char __ATTRS_o_ai
  18339 vec_expandm(vector unsigned char __a) {
  18340   return __builtin_altivec_vexpandbm(__a);
  18341 }
  18342 
  18343 static __inline__ vector unsigned short __ATTRS_o_ai
  18344 vec_expandm(vector unsigned short __a) {
  18345   return __builtin_altivec_vexpandhm(__a);
  18346 }
  18347 
  18348 static __inline__ vector unsigned int __ATTRS_o_ai
  18349 vec_expandm(vector unsigned int __a) {
  18350   return __builtin_altivec_vexpandwm(__a);
  18351 }
  18352 
  18353 static __inline__ vector unsigned long long __ATTRS_o_ai
  18354 vec_expandm(vector unsigned long long __a) {
  18355   return __builtin_altivec_vexpanddm(__a);
  18356 }
  18357 
  18358 #ifdef __SIZEOF_INT128__
  18359 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  18360 vec_expandm(vector unsigned __int128 __a) {
  18361   return __builtin_altivec_vexpandqm(__a);
  18362 }
  18363 #endif
  18364 
  18365 /* vec_cntm */
  18366 
  18367 #define vec_cntm(__a, __mp)                                                    \
  18368   _Generic((__a), vector unsigned char                                         \
  18369            : __builtin_altivec_vcntmbb((vector unsigned char)(__a),            \
  18370                                        (unsigned char)(__mp)),                 \
  18371              vector unsigned short                                             \
  18372            : __builtin_altivec_vcntmbh((vector unsigned short)(__a),           \
  18373                                        (unsigned char)(__mp)),                 \
  18374              vector unsigned int                                               \
  18375            : __builtin_altivec_vcntmbw((vector unsigned int)(__a),             \
  18376                                        (unsigned char)(__mp)),                 \
  18377              vector unsigned long long                                         \
  18378            : __builtin_altivec_vcntmbd((vector unsigned long long)(__a),       \
  18379                                        (unsigned char)(__mp)))
  18380 
  18381 /* vec_gen[b|h|w|d|q]m */
  18382 
  18383 static __inline__ vector unsigned char __ATTRS_o_ai
  18384 vec_genbm(unsigned long long __bm) {
  18385   return __builtin_altivec_mtvsrbm(__bm);
  18386 }
  18387 
  18388 static __inline__ vector unsigned short __ATTRS_o_ai
  18389 vec_genhm(unsigned long long __bm) {
  18390   return __builtin_altivec_mtvsrhm(__bm);
  18391 }
  18392 
  18393 static __inline__ vector unsigned int __ATTRS_o_ai
  18394 vec_genwm(unsigned long long __bm) {
  18395   return __builtin_altivec_mtvsrwm(__bm);
  18396 }
  18397 
  18398 static __inline__ vector unsigned long long __ATTRS_o_ai
  18399 vec_gendm(unsigned long long __bm) {
  18400   return __builtin_altivec_mtvsrdm(__bm);
  18401 }
  18402 
  18403 #ifdef __SIZEOF_INT128__
  18404 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  18405 vec_genqm(unsigned long long __bm) {
  18406   return __builtin_altivec_mtvsrqm(__bm);
  18407 }
  18408 #endif
  18409 
  18410 /* vec_pdep */
  18411 
  18412 static __inline__ vector unsigned long long __ATTRS_o_ai
  18413 vec_pdep(vector unsigned long long __a, vector unsigned long long __b) {
  18414   return __builtin_altivec_vpdepd(__a, __b);
  18415 }
  18416 
  18417 /* vec_pext */
  18418 
  18419 static __inline__ vector unsigned long long __ATTRS_o_ai
  18420 vec_pext(vector unsigned long long __a, vector unsigned long long __b) {
  18421   return __builtin_altivec_vpextd(__a, __b);
  18422 }
  18423 
  18424 /* vec_cfuge */
  18425 
  18426 static __inline__ vector unsigned long long __ATTRS_o_ai
  18427 vec_cfuge(vector unsigned long long __a, vector unsigned long long __b) {
  18428   return __builtin_altivec_vcfuged(__a, __b);
  18429 }
  18430 
  18431 /* vec_gnb */
  18432 
  18433 #define vec_gnb(__a, __b) __builtin_altivec_vgnb(__a, __b)
  18434 
  18435 /* vec_ternarylogic */
  18436 #ifdef __VSX__
  18437 #ifdef __SIZEOF_INT128__
  18438 #define vec_ternarylogic(__a, __b, __c, __imm)                                 \
  18439   _Generic((__a), vector unsigned char                                         \
  18440            : (vector unsigned char)__builtin_vsx_xxeval(                       \
  18441                  (vector unsigned long long)(__a),                             \
  18442                  (vector unsigned long long)(__b),                             \
  18443                  (vector unsigned long long)(__c), (__imm)),                   \
  18444              vector unsigned short                                             \
  18445            : (vector unsigned short)__builtin_vsx_xxeval(                      \
  18446                  (vector unsigned long long)(__a),                             \
  18447                  (vector unsigned long long)(__b),                             \
  18448                  (vector unsigned long long)(__c), (__imm)),                   \
  18449              vector unsigned int                                               \
  18450            : (vector unsigned int)__builtin_vsx_xxeval(                        \
  18451                  (vector unsigned long long)(__a),                             \
  18452                  (vector unsigned long long)(__b),                             \
  18453                  (vector unsigned long long)(__c), (__imm)),                   \
  18454              vector unsigned long long                                         \
  18455            : (vector unsigned long long)__builtin_vsx_xxeval(                  \
  18456                  (vector unsigned long long)(__a),                             \
  18457                  (vector unsigned long long)(__b),                             \
  18458                  (vector unsigned long long)(__c), (__imm)),                   \
  18459              vector unsigned __int128                                          \
  18460            : (vector unsigned __int128)__builtin_vsx_xxeval(                   \
  18461                (vector unsigned long long)(__a),                               \
  18462                (vector unsigned long long)(__b),                               \
  18463                (vector unsigned long long)(__c), (__imm)))
  18464 #else
  18465 #define vec_ternarylogic(__a, __b, __c, __imm)                                 \
  18466   _Generic((__a), vector unsigned char                                         \
  18467            : (vector unsigned char)__builtin_vsx_xxeval(                       \
  18468                  (vector unsigned long long)(__a),                             \
  18469                  (vector unsigned long long)(__b),                             \
  18470                  (vector unsigned long long)(__c), (__imm)),                   \
  18471              vector unsigned short                                             \
  18472            : (vector unsigned short)__builtin_vsx_xxeval(                      \
  18473                  (vector unsigned long long)(__a),                             \
  18474                  (vector unsigned long long)(__b),                             \
  18475                  (vector unsigned long long)(__c), (__imm)),                   \
  18476              vector unsigned int                                               \
  18477            : (vector unsigned int)__builtin_vsx_xxeval(                        \
  18478                  (vector unsigned long long)(__a),                             \
  18479                  (vector unsigned long long)(__b),                             \
  18480                  (vector unsigned long long)(__c), (__imm)),                   \
  18481              vector unsigned long long                                         \
  18482            : (vector unsigned long long)__builtin_vsx_xxeval(                  \
  18483                (vector unsigned long long)(__a),                               \
  18484                (vector unsigned long long)(__b),                               \
  18485                (vector unsigned long long)(__c), (__imm)))
  18486 #endif /* __SIZEOF_INT128__ */
  18487 #endif /* __VSX__ */
  18488 
  18489 /* vec_genpcvm */
  18490 
  18491 #ifdef __VSX__
  18492 #define vec_genpcvm(__a, __imm)                                                \
  18493   _Generic(                                                                    \
  18494       (__a), vector unsigned char                                              \
  18495       : __builtin_vsx_xxgenpcvbm((vector unsigned char)(__a), (int)(__imm)),   \
  18496         vector unsigned short                                                  \
  18497       : __builtin_vsx_xxgenpcvhm((vector unsigned short)(__a), (int)(__imm)),  \
  18498         vector unsigned int                                                    \
  18499       : __builtin_vsx_xxgenpcvwm((vector unsigned int)(__a), (int)(__imm)),    \
  18500         vector unsigned long long                                              \
  18501       : __builtin_vsx_xxgenpcvdm((vector unsigned long long)(__a),             \
  18502                                  (int)(__imm)))
  18503 #endif /* __VSX__ */
  18504 
  18505 /* vec_clr_first */
  18506 
  18507 static __inline__ vector signed char __ATTRS_o_ai
  18508 vec_clr_first(vector signed char __a, unsigned int __n) {
  18509 #ifdef __LITTLE_ENDIAN__
  18510   return (vector signed char)__builtin_altivec_vclrrb((vector unsigned char)__a,
  18511                                                       __n);
  18512 #else
  18513   return (vector signed char)__builtin_altivec_vclrlb((vector unsigned char)__a,
  18514                                                       __n);
  18515 #endif
  18516 }
  18517 
  18518 static __inline__ vector unsigned char __ATTRS_o_ai
  18519 vec_clr_first(vector unsigned char __a, unsigned int __n) {
  18520 #ifdef __LITTLE_ENDIAN__
  18521   return (vector unsigned char)__builtin_altivec_vclrrb(
  18522       (vector unsigned char)__a, __n);
  18523 #else
  18524   return (vector unsigned char)__builtin_altivec_vclrlb(
  18525       (vector unsigned char)__a, __n);
  18526 #endif
  18527 }
  18528 
  18529 /* vec_clr_last */
  18530 
  18531 static __inline__ vector signed char __ATTRS_o_ai
  18532 vec_clr_last(vector signed char __a, unsigned int __n) {
  18533 #ifdef __LITTLE_ENDIAN__
  18534   return (vector signed char)__builtin_altivec_vclrlb((vector unsigned char)__a,
  18535                                                       __n);
  18536 #else
  18537   return (vector signed char)__builtin_altivec_vclrrb((vector unsigned char)__a,
  18538                                                       __n);
  18539 #endif
  18540 }
  18541 
  18542 static __inline__ vector unsigned char __ATTRS_o_ai
  18543 vec_clr_last(vector unsigned char __a, unsigned int __n) {
  18544 #ifdef __LITTLE_ENDIAN__
  18545   return (vector unsigned char)__builtin_altivec_vclrlb(
  18546       (vector unsigned char)__a, __n);
  18547 #else
  18548   return (vector unsigned char)__builtin_altivec_vclrrb(
  18549       (vector unsigned char)__a, __n);
  18550 #endif
  18551 }
  18552 
  18553 /* vec_cntlzm */
  18554 
  18555 static __inline__ vector unsigned long long __ATTRS_o_ai
  18556 vec_cntlzm(vector unsigned long long __a, vector unsigned long long __b) {
  18557   return __builtin_altivec_vclzdm(__a, __b);
  18558 }
  18559 
  18560 /* vec_cnttzm */
  18561 
  18562 static __inline__ vector unsigned long long __ATTRS_o_ai
  18563 vec_cnttzm(vector unsigned long long __a, vector unsigned long long __b) {
  18564   return __builtin_altivec_vctzdm(__a, __b);
  18565 }
  18566 
  18567 /* vec_mod */
  18568 
  18569 static __inline__ vector signed int __ATTRS_o_ai
  18570 vec_mod(vector signed int __a, vector signed int __b) {
  18571   return __a % __b;
  18572 }
  18573 
  18574 static __inline__ vector unsigned int __ATTRS_o_ai
  18575 vec_mod(vector unsigned int __a, vector unsigned int __b) {
  18576   return __a % __b;
  18577 }
  18578 
  18579 static __inline__ vector signed long long __ATTRS_o_ai
  18580 vec_mod(vector signed long long __a, vector signed long long __b) {
  18581   return __a % __b;
  18582 }
  18583 
  18584 static __inline__ vector unsigned long long __ATTRS_o_ai
  18585 vec_mod(vector unsigned long long __a, vector unsigned long long __b) {
  18586   return __a % __b;
  18587 }
  18588 
  18589 #ifdef __SIZEOF_INT128__
  18590 static __inline__ vector signed __int128 __ATTRS_o_ai
  18591 vec_mod(vector signed __int128 __a, vector signed __int128 __b) {
  18592   return __a % __b;
  18593 }
  18594 
  18595 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  18596 vec_mod(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  18597   return  __a % __b;
  18598 }
  18599 #endif
  18600 
  18601 /* vec_sldb */
  18602 #define vec_sldb(__a, __b, __c)                                                \
  18603   _Generic(                                                                    \
  18604       (__a), vector unsigned char                                              \
  18605       : (vector unsigned char)__builtin_altivec_vsldbi(                        \
  18606             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18607             (__c & 0x7)),                                                      \
  18608         vector signed char                                                     \
  18609       : (vector signed char)__builtin_altivec_vsldbi(                          \
  18610             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18611             (__c & 0x7)),                                                      \
  18612         vector unsigned short                                                  \
  18613       : (vector unsigned short)__builtin_altivec_vsldbi(                       \
  18614             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18615             (__c & 0x7)),                                                      \
  18616         vector signed short                                                    \
  18617       : (vector signed short)__builtin_altivec_vsldbi(                         \
  18618             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18619             (__c & 0x7)),                                                      \
  18620         vector unsigned int                                                    \
  18621       : (vector unsigned int)__builtin_altivec_vsldbi(                         \
  18622             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18623             (__c & 0x7)),                                                      \
  18624         vector signed int                                                      \
  18625       : (vector signed int)__builtin_altivec_vsldbi((vector unsigned char)__a, \
  18626                                                     (vector unsigned char)__b, \
  18627                                                     (__c & 0x7)),              \
  18628         vector unsigned long long                                              \
  18629       : (vector unsigned long long)__builtin_altivec_vsldbi(                   \
  18630             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18631             (__c & 0x7)),                                                      \
  18632         vector signed long long                                                \
  18633       : (vector signed long long)__builtin_altivec_vsldbi(                     \
  18634           (vector unsigned char)__a, (vector unsigned char)__b, (__c & 0x7)))
  18635 
  18636 /* vec_srdb */
  18637 #define vec_srdb(__a, __b, __c)                                                \
  18638   _Generic(                                                                    \
  18639       (__a), vector unsigned char                                              \
  18640       : (vector unsigned char)__builtin_altivec_vsrdbi(                        \
  18641             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18642             (__c & 0x7)),                                                      \
  18643         vector signed char                                                     \
  18644       : (vector signed char)__builtin_altivec_vsrdbi(                          \
  18645             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18646             (__c & 0x7)),                                                      \
  18647         vector unsigned short                                                  \
  18648       : (vector unsigned short)__builtin_altivec_vsrdbi(                       \
  18649             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18650             (__c & 0x7)),                                                      \
  18651         vector signed short                                                    \
  18652       : (vector signed short)__builtin_altivec_vsrdbi(                         \
  18653             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18654             (__c & 0x7)),                                                      \
  18655         vector unsigned int                                                    \
  18656       : (vector unsigned int)__builtin_altivec_vsrdbi(                         \
  18657             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18658             (__c & 0x7)),                                                      \
  18659         vector signed int                                                      \
  18660       : (vector signed int)__builtin_altivec_vsrdbi((vector unsigned char)__a, \
  18661                                                     (vector unsigned char)__b, \
  18662                                                     (__c & 0x7)),              \
  18663         vector unsigned long long                                              \
  18664       : (vector unsigned long long)__builtin_altivec_vsrdbi(                   \
  18665             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18666             (__c & 0x7)),                                                      \
  18667         vector signed long long                                                \
  18668       : (vector signed long long)__builtin_altivec_vsrdbi(                     \
  18669           (vector unsigned char)__a, (vector unsigned char)__b, (__c & 0x7)))
  18670 
  18671 /* vec_insertl */
  18672 
  18673 static __inline__ vector unsigned char __ATTRS_o_ai
  18674 vec_insertl(unsigned char __a, vector unsigned char __b, unsigned int __c) {
  18675 #ifdef __LITTLE_ENDIAN__
  18676   return __builtin_altivec_vinsbrx(__b, __c, __a);
  18677 #else
  18678   return __builtin_altivec_vinsblx(__b, __c, __a);
  18679 #endif
  18680 }
  18681 
  18682 static __inline__ vector unsigned short __ATTRS_o_ai
  18683 vec_insertl(unsigned short __a, vector unsigned short __b, unsigned int __c) {
  18684 #ifdef __LITTLE_ENDIAN__
  18685   return __builtin_altivec_vinshrx(__b, __c, __a);
  18686 #else
  18687   return __builtin_altivec_vinshlx(__b, __c, __a);
  18688 #endif
  18689 }
  18690 
  18691 static __inline__ vector unsigned int __ATTRS_o_ai
  18692 vec_insertl(unsigned int __a, vector unsigned int __b, unsigned int __c) {
  18693 #ifdef __LITTLE_ENDIAN__
  18694   return __builtin_altivec_vinswrx(__b, __c, __a);
  18695 #else
  18696   return __builtin_altivec_vinswlx(__b, __c, __a);
  18697 #endif
  18698 }
  18699 
  18700 static __inline__ vector unsigned long long __ATTRS_o_ai
  18701 vec_insertl(unsigned long long __a, vector unsigned long long __b,
  18702             unsigned int __c) {
  18703 #ifdef __LITTLE_ENDIAN__
  18704   return __builtin_altivec_vinsdrx(__b, __c, __a);
  18705 #else
  18706   return __builtin_altivec_vinsdlx(__b, __c, __a);
  18707 #endif
  18708 }
  18709 
  18710 static __inline__ vector unsigned char __ATTRS_o_ai
  18711 vec_insertl(vector unsigned char __a, vector unsigned char __b,
  18712             unsigned int __c) {
  18713 #ifdef __LITTLE_ENDIAN__
  18714   return __builtin_altivec_vinsbvrx(__b, __c, __a);
  18715 #else
  18716   return __builtin_altivec_vinsbvlx(__b, __c, __a);
  18717 #endif
  18718 }
  18719 
  18720 static __inline__ vector unsigned short __ATTRS_o_ai
  18721 vec_insertl(vector unsigned short __a, vector unsigned short __b,
  18722             unsigned int __c) {
  18723 #ifdef __LITTLE_ENDIAN__
  18724   return __builtin_altivec_vinshvrx(__b, __c, __a);
  18725 #else
  18726   return __builtin_altivec_vinshvlx(__b, __c, __a);
  18727 #endif
  18728 }
  18729 
  18730 static __inline__ vector unsigned int __ATTRS_o_ai
  18731 vec_insertl(vector unsigned int __a, vector unsigned int __b,
  18732             unsigned int __c) {
  18733 #ifdef __LITTLE_ENDIAN__
  18734   return __builtin_altivec_vinswvrx(__b, __c, __a);
  18735 #else
  18736   return __builtin_altivec_vinswvlx(__b, __c, __a);
  18737 #endif
  18738 }
  18739 
  18740 /* vec_inserth */
  18741 
  18742 static __inline__ vector unsigned char __ATTRS_o_ai
  18743 vec_inserth(unsigned char __a, vector unsigned char __b, unsigned int __c) {
  18744 #ifdef __LITTLE_ENDIAN__
  18745   return __builtin_altivec_vinsblx(__b, __c, __a);
  18746 #else
  18747   return __builtin_altivec_vinsbrx(__b, __c, __a);
  18748 #endif
  18749 }
  18750 
  18751 static __inline__ vector unsigned short __ATTRS_o_ai
  18752 vec_inserth(unsigned short __a, vector unsigned short __b, unsigned int __c) {
  18753 #ifdef __LITTLE_ENDIAN__
  18754   return __builtin_altivec_vinshlx(__b, __c, __a);
  18755 #else
  18756   return __builtin_altivec_vinshrx(__b, __c, __a);
  18757 #endif
  18758 }
  18759 
  18760 static __inline__ vector unsigned int __ATTRS_o_ai
  18761 vec_inserth(unsigned int __a, vector unsigned int __b, unsigned int __c) {
  18762 #ifdef __LITTLE_ENDIAN__
  18763   return __builtin_altivec_vinswlx(__b, __c, __a);
  18764 #else
  18765   return __builtin_altivec_vinswrx(__b, __c, __a);
  18766 #endif
  18767 }
  18768 
  18769 static __inline__ vector unsigned long long __ATTRS_o_ai
  18770 vec_inserth(unsigned long long __a, vector unsigned long long __b,
  18771             unsigned int __c) {
  18772 #ifdef __LITTLE_ENDIAN__
  18773   return __builtin_altivec_vinsdlx(__b, __c, __a);
  18774 #else
  18775   return __builtin_altivec_vinsdrx(__b, __c, __a);
  18776 #endif
  18777 }
  18778 
  18779 static __inline__ vector unsigned char __ATTRS_o_ai
  18780 vec_inserth(vector unsigned char __a, vector unsigned char __b,
  18781             unsigned int __c) {
  18782 #ifdef __LITTLE_ENDIAN__
  18783   return __builtin_altivec_vinsbvlx(__b, __c, __a);
  18784 #else
  18785   return __builtin_altivec_vinsbvrx(__b, __c, __a);
  18786 #endif
  18787 }
  18788 
  18789 static __inline__ vector unsigned short __ATTRS_o_ai
  18790 vec_inserth(vector unsigned short __a, vector unsigned short __b,
  18791             unsigned int __c) {
  18792 #ifdef __LITTLE_ENDIAN__
  18793   return __builtin_altivec_vinshvlx(__b, __c, __a);
  18794 #else
  18795   return __builtin_altivec_vinshvrx(__b, __c, __a);
  18796 #endif
  18797 }
  18798 
  18799 static __inline__ vector unsigned int __ATTRS_o_ai
  18800 vec_inserth(vector unsigned int __a, vector unsigned int __b,
  18801             unsigned int __c) {
  18802 #ifdef __LITTLE_ENDIAN__
  18803   return __builtin_altivec_vinswvlx(__b, __c, __a);
  18804 #else
  18805   return __builtin_altivec_vinswvrx(__b, __c, __a);
  18806 #endif
  18807 }
  18808 
  18809 /* vec_extractl */
  18810 
  18811 static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
  18812     vector unsigned char __a, vector unsigned char __b, unsigned int __c) {
  18813 #ifdef __LITTLE_ENDIAN__
  18814   return __builtin_altivec_vextdubvrx(__a, __b, __c);
  18815 #else
  18816   vector unsigned long long __ret = __builtin_altivec_vextdubvlx(__a, __b, __c);
  18817   return vec_sld(__ret, __ret, 8);
  18818 #endif
  18819 }
  18820 
  18821 static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
  18822     vector unsigned short __a, vector unsigned short __b, unsigned int __c) {
  18823 #ifdef __LITTLE_ENDIAN__
  18824   return __builtin_altivec_vextduhvrx(__a, __b, __c);
  18825 #else
  18826   vector unsigned long long __ret = __builtin_altivec_vextduhvlx(__a, __b, __c);
  18827   return vec_sld(__ret, __ret, 8);
  18828 #endif
  18829 }
  18830 
  18831 static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
  18832     vector unsigned int __a, vector unsigned int __b, unsigned int __c) {
  18833 #ifdef __LITTLE_ENDIAN__
  18834   return __builtin_altivec_vextduwvrx(__a, __b, __c);
  18835 #else
  18836   vector unsigned long long __ret = __builtin_altivec_vextduwvlx(__a, __b, __c);
  18837   return vec_sld(__ret, __ret, 8);
  18838 #endif
  18839 }
  18840 
  18841 static __inline__ vector unsigned long long __ATTRS_o_ai
  18842 vec_extractl(vector unsigned long long __a, vector unsigned long long __b,
  18843              unsigned int __c) {
  18844 #ifdef __LITTLE_ENDIAN__
  18845   return __builtin_altivec_vextddvrx(__a, __b, __c);
  18846 #else
  18847   vector unsigned long long __ret = __builtin_altivec_vextddvlx(__a, __b, __c);
  18848   return vec_sld(__ret, __ret, 8);
  18849 #endif
  18850 }
  18851 
  18852 /* vec_extracth */
  18853 
  18854 static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
  18855     vector unsigned char __a, vector unsigned char __b, unsigned int __c) {
  18856 #ifdef __LITTLE_ENDIAN__
  18857   return __builtin_altivec_vextdubvlx(__a, __b, __c);
  18858 #else
  18859   vector unsigned long long __ret = __builtin_altivec_vextdubvrx(__a, __b, __c);
  18860   return vec_sld(__ret, __ret, 8);
  18861 #endif
  18862 }
  18863 
  18864 static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
  18865     vector unsigned short __a, vector unsigned short __b, unsigned int __c) {
  18866 #ifdef __LITTLE_ENDIAN__
  18867   return __builtin_altivec_vextduhvlx(__a, __b, __c);
  18868 #else
  18869   vector unsigned long long __ret = __builtin_altivec_vextduhvrx(__a, __b, __c);
  18870   return vec_sld(__ret, __ret, 8);
  18871 #endif
  18872 }
  18873 
  18874 static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
  18875     vector unsigned int __a, vector unsigned int __b, unsigned int __c) {
  18876 #ifdef __LITTLE_ENDIAN__
  18877   return __builtin_altivec_vextduwvlx(__a, __b, __c);
  18878 #else
  18879   vector unsigned long long __ret = __builtin_altivec_vextduwvrx(__a, __b, __c);
  18880   return vec_sld(__ret, __ret, 8);
  18881 #endif
  18882 }
  18883 
  18884 static __inline__ vector unsigned long long __ATTRS_o_ai
  18885 vec_extracth(vector unsigned long long __a, vector unsigned long long __b,
  18886              unsigned int __c) {
  18887 #ifdef __LITTLE_ENDIAN__
  18888   return __builtin_altivec_vextddvlx(__a, __b, __c);
  18889 #else
  18890   vector unsigned long long __ret = __builtin_altivec_vextddvrx(__a, __b, __c);
  18891   return vec_sld(__ret, __ret, 8);
  18892 #endif
  18893 }
  18894 
  18895 #ifdef __VSX__
  18896 
  18897 /* vec_permx */
  18898 #define vec_permx(__a, __b, __c, __d)                                          \
  18899   _Generic(                                                                    \
  18900       (__a), vector unsigned char                                              \
  18901       : (vector unsigned char)__builtin_vsx_xxpermx(                           \
  18902             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18903         vector signed char                                                     \
  18904       : (vector signed char)__builtin_vsx_xxpermx(                             \
  18905             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18906         vector unsigned short                                                  \
  18907       : (vector unsigned short)__builtin_vsx_xxpermx(                          \
  18908             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18909         vector signed short                                                    \
  18910       : (vector signed short)__builtin_vsx_xxpermx(                            \
  18911             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18912         vector unsigned int                                                    \
  18913       : (vector unsigned int)__builtin_vsx_xxpermx(                            \
  18914             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18915         vector signed int                                                      \
  18916       : (vector signed int)__builtin_vsx_xxpermx(                              \
  18917             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18918         vector unsigned long long                                              \
  18919       : (vector unsigned long long)__builtin_vsx_xxpermx(                      \
  18920             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18921         vector signed long long                                                \
  18922       : (vector signed long long)__builtin_vsx_xxpermx(                        \
  18923             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18924         vector float                                                           \
  18925       : (vector float)__builtin_vsx_xxpermx(                                   \
  18926             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18927         vector double                                                          \
  18928       : (vector double)__builtin_vsx_xxpermx(                                  \
  18929           (vector unsigned char)__a, (vector unsigned char)__b, __c, __d))
  18930 
  18931 /* vec_blendv */
  18932 
  18933 static __inline__ vector signed char __ATTRS_o_ai
  18934 vec_blendv(vector signed char __a, vector signed char __b,
  18935            vector unsigned char __c) {
  18936   return (vector signed char)__builtin_vsx_xxblendvb(
  18937       (vector unsigned char)__a, (vector unsigned char)__b, __c);
  18938 }
  18939 
  18940 static __inline__ vector unsigned char __ATTRS_o_ai
  18941 vec_blendv(vector unsigned char __a, vector unsigned char __b,
  18942            vector unsigned char __c) {
  18943   return __builtin_vsx_xxblendvb(__a, __b, __c);
  18944 }
  18945 
  18946 static __inline__ vector signed short __ATTRS_o_ai
  18947 vec_blendv(vector signed short __a, vector signed short __b,
  18948            vector unsigned short __c) {
  18949   return (vector signed short)__builtin_vsx_xxblendvh(
  18950       (vector unsigned short)__a, (vector unsigned short)__b, __c);
  18951 }
  18952 
  18953 static __inline__ vector unsigned short __ATTRS_o_ai
  18954 vec_blendv(vector unsigned short __a, vector unsigned short __b,
  18955            vector unsigned short __c) {
  18956   return __builtin_vsx_xxblendvh(__a, __b, __c);
  18957 }
  18958 
  18959 static __inline__ vector signed int __ATTRS_o_ai
  18960 vec_blendv(vector signed int __a, vector signed int __b,
  18961            vector unsigned int __c) {
  18962   return (vector signed int)__builtin_vsx_xxblendvw(
  18963       (vector unsigned int)__a, (vector unsigned int)__b, __c);
  18964 }
  18965 
  18966 static __inline__ vector unsigned int __ATTRS_o_ai
  18967 vec_blendv(vector unsigned int __a, vector unsigned int __b,
  18968            vector unsigned int __c) {
  18969   return __builtin_vsx_xxblendvw(__a, __b, __c);
  18970 }
  18971 
  18972 static __inline__ vector signed long long __ATTRS_o_ai
  18973 vec_blendv(vector signed long long __a, vector signed long long __b,
  18974            vector unsigned long long __c) {
  18975   return (vector signed long long)__builtin_vsx_xxblendvd(
  18976       (vector unsigned long long)__a, (vector unsigned long long)__b, __c);
  18977 }
  18978 
  18979 static __inline__ vector unsigned long long __ATTRS_o_ai
  18980 vec_blendv(vector unsigned long long __a, vector unsigned long long __b,
  18981            vector unsigned long long __c) {
  18982   return (vector unsigned long long)__builtin_vsx_xxblendvd(__a, __b, __c);
  18983 }
  18984 
  18985 static __inline__ vector float __ATTRS_o_ai
  18986 vec_blendv(vector float __a, vector float __b, vector unsigned int __c) {
  18987   return (vector float)__builtin_vsx_xxblendvw((vector unsigned int)__a,
  18988                                                (vector unsigned int)__b, __c);
  18989 }
  18990 
  18991 static __inline__ vector double __ATTRS_o_ai
  18992 vec_blendv(vector double __a, vector double __b,
  18993            vector unsigned long long __c) {
  18994   return (vector double)__builtin_vsx_xxblendvd(
  18995       (vector unsigned long long)__a, (vector unsigned long long)__b, __c);
  18996 }
  18997 
  18998 #define vec_replace_unaligned(__a, __b, __c)                                   \
  18999   _Generic((__a), vector signed int                                            \
  19000            : __builtin_altivec_vinsw((vector unsigned char)__a,                \
  19001                                      (unsigned int)__b, __c),                  \
  19002              vector unsigned int                                               \
  19003            : __builtin_altivec_vinsw((vector unsigned char)__a,                \
  19004                                      (unsigned int)__b, __c),                  \
  19005              vector unsigned long long                                         \
  19006            : __builtin_altivec_vinsd((vector unsigned char)__a,                \
  19007                                      (unsigned long long)__b, __c),            \
  19008              vector signed long long                                           \
  19009            : __builtin_altivec_vinsd((vector unsigned char)__a,                \
  19010                                      (unsigned long long)__b, __c),            \
  19011              vector float                                                      \
  19012            : __builtin_altivec_vinsw((vector unsigned char)__a,                \
  19013                                      (unsigned int)__b, __c),                  \
  19014              vector double                                                     \
  19015            : __builtin_altivec_vinsd((vector unsigned char)__a,                \
  19016                                      (unsigned long long)__b, __c))
  19017 
  19018 #define vec_replace_elt(__a, __b, __c)                                         \
  19019   _Generic((__a), vector signed int                                            \
  19020            : (vector signed int)__builtin_altivec_vinsw_elt(                   \
  19021                  (vector unsigned char)__a, (unsigned int)__b, __c),           \
  19022              vector unsigned int                                               \
  19023            : (vector unsigned int)__builtin_altivec_vinsw_elt(                 \
  19024                  (vector unsigned char)__a, (unsigned int)__b, __c),           \
  19025              vector unsigned long long                                         \
  19026            : (vector unsigned long long)__builtin_altivec_vinsd_elt(           \
  19027                  (vector unsigned char)__a, (unsigned long long)__b, __c),     \
  19028              vector signed long long                                           \
  19029            : (vector signed long long)__builtin_altivec_vinsd_elt(             \
  19030                  (vector unsigned char)__a, (unsigned long long)__b, __c),     \
  19031              vector float                                                      \
  19032            : (vector float)__builtin_altivec_vinsw_elt(                        \
  19033                  (vector unsigned char)__a, (unsigned int)__b, __c),           \
  19034              vector double                                                     \
  19035            : (vector double)__builtin_altivec_vinsd_elt(                       \
  19036                (vector unsigned char)__a, (unsigned long long)__b, __c))
  19037 
  19038 /* vec_splati */
  19039 
  19040 #define vec_splati(__a)                                                        \
  19041   _Generic((__a), signed int                                                   \
  19042            : ((vector signed int)__a), unsigned int                            \
  19043            : ((vector unsigned int)__a), float                                 \
  19044            : ((vector float)__a))
  19045 
  19046 /* vec_spatid */
  19047 
  19048 static __inline__ vector double __ATTRS_o_ai vec_splatid(const float __a) {
  19049   return ((vector double)((double)__a));
  19050 }
  19051 
  19052 /* vec_splati_ins */
  19053 
  19054 static __inline__ vector signed int __ATTRS_o_ai vec_splati_ins(
  19055     vector signed int __a, const unsigned int __b, const signed int __c) {
  19056   const unsigned int __d = __b & 0x01;
  19057 #ifdef __LITTLE_ENDIAN__
  19058   __a[1 - __d] = __c;
  19059   __a[3 - __d] = __c;
  19060 #else
  19061   __a[__d] = __c;
  19062   __a[2 + __d] = __c;
  19063 #endif
  19064   return __a;
  19065 }
  19066 
  19067 static __inline__ vector unsigned int __ATTRS_o_ai vec_splati_ins(
  19068     vector unsigned int __a, const unsigned int __b, const unsigned int __c) {
  19069   const unsigned int __d = __b & 0x01;
  19070 #ifdef __LITTLE_ENDIAN__
  19071   __a[1 - __d] = __c;
  19072   __a[3 - __d] = __c;
  19073 #else
  19074   __a[__d] = __c;
  19075   __a[2 + __d] = __c;
  19076 #endif
  19077   return __a;
  19078 }
  19079 
  19080 static __inline__ vector float __ATTRS_o_ai
  19081 vec_splati_ins(vector float __a, const unsigned int __b, const float __c) {
  19082   const unsigned int __d = __b & 0x01;
  19083 #ifdef __LITTLE_ENDIAN__
  19084   __a[1 - __d] = __c;
  19085   __a[3 - __d] = __c;
  19086 #else
  19087   __a[__d] = __c;
  19088   __a[2 + __d] = __c;
  19089 #endif
  19090   return __a;
  19091 }
  19092 
  19093 /* vec_test_lsbb_all_ones */
  19094 
  19095 static __inline__ int __ATTRS_o_ai
  19096 vec_test_lsbb_all_ones(vector unsigned char __a) {
  19097   return __builtin_vsx_xvtlsbb(__a, 1);
  19098 }
  19099 
  19100 /* vec_test_lsbb_all_zeros */
  19101 
  19102 static __inline__ int __ATTRS_o_ai
  19103 vec_test_lsbb_all_zeros(vector unsigned char __a) {
  19104   return __builtin_vsx_xvtlsbb(__a, 0);
  19105 }
  19106 #endif /* __VSX__ */
  19107 
  19108 /* vec_stril */
  19109 
  19110 static __inline__ vector unsigned char __ATTRS_o_ai
  19111 vec_stril(vector unsigned char __a) {
  19112 #ifdef __LITTLE_ENDIAN__
  19113   return (vector unsigned char)__builtin_altivec_vstribr(
  19114       (vector unsigned char)__a);
  19115 #else
  19116   return (vector unsigned char)__builtin_altivec_vstribl(
  19117       (vector unsigned char)__a);
  19118 #endif
  19119 }
  19120 
  19121 static __inline__ vector signed char __ATTRS_o_ai
  19122 vec_stril(vector signed char __a) {
  19123 #ifdef __LITTLE_ENDIAN__
  19124   return (vector signed char)__builtin_altivec_vstribr(
  19125       (vector unsigned char)__a);
  19126 #else
  19127   return (vector signed char)__builtin_altivec_vstribl(
  19128       (vector unsigned char)__a);
  19129 #endif
  19130 }
  19131 
  19132 static __inline__ vector unsigned short __ATTRS_o_ai
  19133 vec_stril(vector unsigned short __a) {
  19134 #ifdef __LITTLE_ENDIAN__
  19135   return (vector unsigned short)__builtin_altivec_vstrihr(
  19136       (vector signed short)__a);
  19137 #else
  19138   return (vector unsigned short)__builtin_altivec_vstrihl(
  19139       (vector signed short)__a);
  19140 #endif
  19141 }
  19142 
  19143 static __inline__ vector signed short __ATTRS_o_ai
  19144 vec_stril(vector signed short __a) {
  19145 #ifdef __LITTLE_ENDIAN__
  19146   return __builtin_altivec_vstrihr(__a);
  19147 #else
  19148   return __builtin_altivec_vstrihl(__a);
  19149 #endif
  19150 }
  19151 
  19152 /* vec_stril_p */
  19153 
  19154 static __inline__ int __ATTRS_o_ai vec_stril_p(vector unsigned char __a) {
  19155 #ifdef __LITTLE_ENDIAN__
  19156   return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
  19157 #else
  19158   return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
  19159 #endif
  19160 }
  19161 
  19162 static __inline__ int __ATTRS_o_ai vec_stril_p(vector signed char __a) {
  19163 #ifdef __LITTLE_ENDIAN__
  19164   return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
  19165 #else
  19166   return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
  19167 #endif
  19168 }
  19169 
  19170 static __inline__ int __ATTRS_o_ai vec_stril_p(vector unsigned short __a) {
  19171 #ifdef __LITTLE_ENDIAN__
  19172   return __builtin_altivec_vstrihr_p(__CR6_EQ, (vector signed short)__a);
  19173 #else
  19174   return __builtin_altivec_vstrihl_p(__CR6_EQ, (vector signed short)__a);
  19175 #endif
  19176 }
  19177 
  19178 static __inline__ int __ATTRS_o_ai vec_stril_p(vector signed short __a) {
  19179 #ifdef __LITTLE_ENDIAN__
  19180   return __builtin_altivec_vstrihr_p(__CR6_EQ, __a);
  19181 #else
  19182   return __builtin_altivec_vstrihl_p(__CR6_EQ, __a);
  19183 #endif
  19184 }
  19185 
  19186 /* vec_strir */
  19187 
  19188 static __inline__ vector unsigned char __ATTRS_o_ai
  19189 vec_strir(vector unsigned char __a) {
  19190 #ifdef __LITTLE_ENDIAN__
  19191   return (vector unsigned char)__builtin_altivec_vstribl(
  19192       (vector unsigned char)__a);
  19193 #else
  19194   return (vector unsigned char)__builtin_altivec_vstribr(
  19195       (vector unsigned char)__a);
  19196 #endif
  19197 }
  19198 
  19199 static __inline__ vector signed char __ATTRS_o_ai
  19200 vec_strir(vector signed char __a) {
  19201 #ifdef __LITTLE_ENDIAN__
  19202   return (vector signed char)__builtin_altivec_vstribl(
  19203       (vector unsigned char)__a);
  19204 #else
  19205   return (vector signed char)__builtin_altivec_vstribr(
  19206       (vector unsigned char)__a);
  19207 #endif
  19208 }
  19209 
  19210 static __inline__ vector unsigned short __ATTRS_o_ai
  19211 vec_strir(vector unsigned short __a) {
  19212 #ifdef __LITTLE_ENDIAN__
  19213   return (vector unsigned short)__builtin_altivec_vstrihl(
  19214       (vector signed short)__a);
  19215 #else
  19216   return (vector unsigned short)__builtin_altivec_vstrihr(
  19217       (vector signed short)__a);
  19218 #endif
  19219 }
  19220 
  19221 static __inline__ vector signed short __ATTRS_o_ai
  19222 vec_strir(vector signed short __a) {
  19223 #ifdef __LITTLE_ENDIAN__
  19224   return __builtin_altivec_vstrihl(__a);
  19225 #else
  19226   return __builtin_altivec_vstrihr(__a);
  19227 #endif
  19228 }
  19229 
  19230 /* vec_strir_p */
  19231 
  19232 static __inline__ int __ATTRS_o_ai vec_strir_p(vector unsigned char __a) {
  19233 #ifdef __LITTLE_ENDIAN__
  19234   return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
  19235 #else
  19236   return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
  19237 #endif
  19238 }
  19239 
  19240 static __inline__ int __ATTRS_o_ai vec_strir_p(vector signed char __a) {
  19241 #ifdef __LITTLE_ENDIAN__
  19242   return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
  19243 #else
  19244   return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
  19245 #endif
  19246 }
  19247 
  19248 static __inline__ int __ATTRS_o_ai vec_strir_p(vector unsigned short __a) {
  19249 #ifdef __LITTLE_ENDIAN__
  19250   return __builtin_altivec_vstrihl_p(__CR6_EQ, (vector signed short)__a);
  19251 #else
  19252   return __builtin_altivec_vstrihr_p(__CR6_EQ, (vector signed short)__a);
  19253 #endif
  19254 }
  19255 
  19256 static __inline__ int __ATTRS_o_ai vec_strir_p(vector signed short __a) {
  19257 #ifdef __LITTLE_ENDIAN__
  19258   return __builtin_altivec_vstrihl_p(__CR6_EQ, __a);
  19259 #else
  19260   return __builtin_altivec_vstrihr_p(__CR6_EQ, __a);
  19261 #endif
  19262 }
  19263 
  19264 /* vs[l | r | ra] */
  19265 
  19266 #ifdef __SIZEOF_INT128__
  19267 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  19268 vec_sl(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  19269   return __a << (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
  19270                                                   __CHAR_BIT__));
  19271 }
  19272 
  19273 static __inline__ vector signed __int128 __ATTRS_o_ai
  19274 vec_sl(vector signed __int128 __a, vector unsigned __int128 __b) {
  19275   return __a << (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
  19276                                                   __CHAR_BIT__));
  19277 }
  19278 
  19279 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  19280 vec_sr(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  19281   return __a >> (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
  19282                                                   __CHAR_BIT__));
  19283 }
  19284 
  19285 static __inline__ vector signed __int128 __ATTRS_o_ai
  19286 vec_sr(vector signed __int128 __a, vector unsigned __int128 __b) {
  19287   return (
  19288       vector signed __int128)(((vector unsigned __int128)__a) >>
  19289                               (__b %
  19290                                (vector unsigned __int128)(sizeof(
  19291                                                               unsigned __int128) *
  19292                                                           __CHAR_BIT__)));
  19293 }
  19294 
  19295 static __inline__ vector unsigned __int128 __ATTRS_o_ai
  19296 vec_sra(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  19297   return (
  19298       vector unsigned __int128)(((vector signed __int128)__a) >>
  19299                                 (__b %
  19300                                  (vector unsigned __int128)(sizeof(
  19301                                                                 unsigned __int128) *
  19302                                                             __CHAR_BIT__)));
  19303 }
  19304 
  19305 static __inline__ vector signed __int128 __ATTRS_o_ai
  19306 vec_sra(vector signed __int128 __a, vector unsigned __int128 __b) {
  19307   return __a >> (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
  19308                                                   __CHAR_BIT__));
  19309 }
  19310 
  19311 #endif /* __SIZEOF_INT128__ */
  19312 #endif /* __POWER10_VECTOR__ */
  19313 
  19314 #ifdef __POWER8_VECTOR__
  19315 #define __bcdadd(__a, __b, __ps) __builtin_ppc_bcdadd((__a), (__b), (__ps))
  19316 #define __bcdsub(__a, __b, __ps) __builtin_ppc_bcdsub((__a), (__b), (__ps))
  19317 
  19318 static __inline__ long __bcdadd_ofl(vector unsigned char __a,
  19319                                     vector unsigned char __b) {
  19320   return __builtin_ppc_bcdadd_p(__CR6_SO, __a, __b);
  19321 }
  19322 
  19323 static __inline__ long __bcdsub_ofl(vector unsigned char __a,
  19324                                     vector unsigned char __b) {
  19325   return __builtin_ppc_bcdsub_p(__CR6_SO, __a, __b);
  19326 }
  19327 
  19328 static __inline__ long __bcd_invalid(vector unsigned char __a) {
  19329   return __builtin_ppc_bcdsub_p(__CR6_SO, __a, __a);
  19330 }
  19331 
  19332 static __inline__ long __bcdcmpeq(vector unsigned char __a,
  19333                                   vector unsigned char __b) {
  19334   return __builtin_ppc_bcdsub_p(__CR6_EQ, __a, __b);
  19335 }
  19336 
  19337 static __inline__ long __bcdcmplt(vector unsigned char __a,
  19338                                   vector unsigned char __b) {
  19339   return __builtin_ppc_bcdsub_p(__CR6_LT, __a, __b);
  19340 }
  19341 
  19342 static __inline__ long __bcdcmpgt(vector unsigned char __a,
  19343                                   vector unsigned char __b) {
  19344   return __builtin_ppc_bcdsub_p(__CR6_GT, __a, __b);
  19345 }
  19346 
  19347 static __inline__ long __bcdcmple(vector unsigned char __a,
  19348                                   vector unsigned char __b) {
  19349   return __builtin_ppc_bcdsub_p(__CR6_GT_REV, __a, __b);
  19350 }
  19351 
  19352 static __inline__ long __bcdcmpge(vector unsigned char __a,
  19353                                   vector unsigned char __b) {
  19354   return __builtin_ppc_bcdsub_p(__CR6_LT_REV, __a, __b);
  19355 }
  19356 
  19357 #endif // __POWER8_VECTOR__
  19358 
  19359 #undef __ATTRS_o_ai
  19360 
  19361 #endif /* __ALTIVEC_H */