Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*===---- altivec.h - Standard header for type generic math ---------------===*\
  2.  *
  3.  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4.  * See https://llvm.org/LICENSE.txt for license information.
  5.  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6.  *
  7. \*===----------------------------------------------------------------------===*/
  8.  
  9. #ifndef __ALTIVEC_H
  10. #define __ALTIVEC_H
  11.  
  12. #ifndef __ALTIVEC__
  13. #error "AltiVec support not enabled"
  14. #endif
  15.  
  16. /* Constants for mapping CR6 bits to predicate result. */
  17.  
  18. #define __CR6_EQ 0
  19. #define __CR6_EQ_REV 1
  20. #define __CR6_LT 2
  21. #define __CR6_LT_REV 3
  22. #define __CR6_GT 4
  23. #define __CR6_GT_REV 5
  24. #define __CR6_SO 6
  25. #define __CR6_SO_REV 7
  26.  
  27. /* Constants for vec_test_data_class */
  28. #define __VEC_CLASS_FP_SUBNORMAL_N (1 << 0)
  29. #define __VEC_CLASS_FP_SUBNORMAL_P (1 << 1)
  30. #define __VEC_CLASS_FP_SUBNORMAL (__VEC_CLASS_FP_SUBNORMAL_P | \
  31.                                   __VEC_CLASS_FP_SUBNORMAL_N)
  32. #define __VEC_CLASS_FP_ZERO_N (1<<2)
  33. #define __VEC_CLASS_FP_ZERO_P (1<<3)
  34. #define __VEC_CLASS_FP_ZERO (__VEC_CLASS_FP_ZERO_P           | \
  35.                              __VEC_CLASS_FP_ZERO_N)
  36. #define __VEC_CLASS_FP_INFINITY_N (1<<4)
  37. #define __VEC_CLASS_FP_INFINITY_P (1<<5)
  38. #define __VEC_CLASS_FP_INFINITY (__VEC_CLASS_FP_INFINITY_P   | \
  39.                                  __VEC_CLASS_FP_INFINITY_N)
  40. #define __VEC_CLASS_FP_NAN (1<<6)
  41. #define __VEC_CLASS_FP_NOT_NORMAL (__VEC_CLASS_FP_NAN        | \
  42.                                    __VEC_CLASS_FP_SUBNORMAL  | \
  43.                                    __VEC_CLASS_FP_ZERO       | \
  44.                                    __VEC_CLASS_FP_INFINITY)
  45.  
  46. #define __ATTRS_o_ai __attribute__((__overloadable__, __always_inline__))
  47.  
  48. #include <stddef.h>
  49.  
  50. static __inline__ vector signed char __ATTRS_o_ai vec_perm(
  51.     vector signed char __a, vector signed char __b, vector unsigned char __c);
  52.  
  53. static __inline__ vector unsigned char __ATTRS_o_ai
  54. vec_perm(vector unsigned char __a, vector unsigned char __b,
  55.          vector unsigned char __c);
  56.  
  57. static __inline__ vector bool char __ATTRS_o_ai
  58. vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c);
  59.  
  60. static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
  61.                                                      vector signed short __b,
  62.                                                      vector unsigned char __c);
  63.  
  64. static __inline__ vector unsigned short __ATTRS_o_ai
  65. vec_perm(vector unsigned short __a, vector unsigned short __b,
  66.          vector unsigned char __c);
  67.  
  68. static __inline__ vector bool short __ATTRS_o_ai vec_perm(
  69.     vector bool short __a, vector bool short __b, vector unsigned char __c);
  70.  
  71. static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
  72.                                                      vector pixel __b,
  73.                                                      vector unsigned char __c);
  74.  
  75. static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
  76.                                                    vector signed int __b,
  77.                                                    vector unsigned char __c);
  78.  
  79. static __inline__ vector unsigned int __ATTRS_o_ai vec_perm(
  80.     vector unsigned int __a, vector unsigned int __b, vector unsigned char __c);
  81.  
  82. static __inline__ vector bool int __ATTRS_o_ai
  83. vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c);
  84.  
  85. static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
  86.                                                      vector float __b,
  87.                                                      vector unsigned char __c);
  88.  
  89. #ifdef __VSX__
  90. static __inline__ vector long long __ATTRS_o_ai
  91. vec_perm(vector signed long long __a, vector signed long long __b,
  92.          vector unsigned char __c);
  93.  
  94. static __inline__ vector unsigned long long __ATTRS_o_ai
  95. vec_perm(vector unsigned long long __a, vector unsigned long long __b,
  96.          vector unsigned char __c);
  97.  
  98. static __inline__ vector bool long long __ATTRS_o_ai
  99. vec_perm(vector bool long long __a, vector bool long long __b,
  100.          vector unsigned char __c);
  101.  
  102. static __inline__ vector double __ATTRS_o_ai vec_perm(vector double __a,
  103.                                                       vector double __b,
  104.                                                       vector unsigned char __c);
  105. #endif
  106.  
  107. static __inline__ vector unsigned char __ATTRS_o_ai
  108. vec_xor(vector unsigned char __a, vector unsigned char __b);
  109.  
  110. /* vec_abs */
  111.  
  112. #define __builtin_altivec_abs_v16qi vec_abs
  113. #define __builtin_altivec_abs_v8hi vec_abs
  114. #define __builtin_altivec_abs_v4si vec_abs
  115.  
  116. static __inline__ vector signed char __ATTRS_o_ai
  117. vec_abs(vector signed char __a) {
  118.   return __builtin_altivec_vmaxsb(__a, -__a);
  119. }
  120.  
  121. static __inline__ vector signed short __ATTRS_o_ai
  122. vec_abs(vector signed short __a) {
  123.   return __builtin_altivec_vmaxsh(__a, -__a);
  124. }
  125.  
  126. static __inline__ vector signed int __ATTRS_o_ai
  127. vec_abs(vector signed int __a) {
  128.   return __builtin_altivec_vmaxsw(__a, -__a);
  129. }
  130.  
  131. #ifdef __POWER8_VECTOR__
  132. static __inline__ vector signed long long __ATTRS_o_ai
  133. vec_abs(vector signed long long __a) {
  134.   return __builtin_altivec_vmaxsd(__a, -__a);
  135. }
  136. #endif
  137.  
  138. static __inline__ vector float __ATTRS_o_ai vec_abs(vector float __a) {
  139. #ifdef __VSX__
  140.   return __builtin_vsx_xvabssp(__a);
  141. #else
  142.   vector unsigned int __res =
  143.       (vector unsigned int)__a & (vector unsigned int)(0x7FFFFFFF);
  144.   return (vector float)__res;
  145. #endif
  146. }
  147.  
  148. #ifdef __VSX__
  149. static __inline__ vector double __ATTRS_o_ai vec_abs(vector double __a) {
  150.   return __builtin_vsx_xvabsdp(__a);
  151. }
  152. #endif
  153.  
  154. /* vec_abss */
  155. #define __builtin_altivec_abss_v16qi vec_abss
  156. #define __builtin_altivec_abss_v8hi vec_abss
  157. #define __builtin_altivec_abss_v4si vec_abss
  158.  
  159. static __inline__ vector signed char __ATTRS_o_ai
  160. vec_abss(vector signed char __a) {
  161.   return __builtin_altivec_vmaxsb(
  162.       __a, __builtin_altivec_vsubsbs((vector signed char)(0), __a));
  163. }
  164.  
  165. static __inline__ vector signed short __ATTRS_o_ai
  166. vec_abss(vector signed short __a) {
  167.   return __builtin_altivec_vmaxsh(
  168.       __a, __builtin_altivec_vsubshs((vector signed short)(0), __a));
  169. }
  170.  
  171. static __inline__ vector signed int __ATTRS_o_ai
  172. vec_abss(vector signed int __a) {
  173.   return __builtin_altivec_vmaxsw(
  174.       __a, __builtin_altivec_vsubsws((vector signed int)(0), __a));
  175. }
  176.  
  177. /* vec_absd */
  178. #if defined(__POWER9_VECTOR__)
  179.  
  180. static __inline__ vector unsigned char __ATTRS_o_ai
  181. vec_absd(vector unsigned char __a, vector unsigned char __b) {
  182.   return __builtin_altivec_vabsdub(__a, __b);
  183. }
  184.  
  185. static __inline__ vector unsigned short __ATTRS_o_ai
  186. vec_absd(vector unsigned short __a, vector unsigned short __b) {
  187.   return __builtin_altivec_vabsduh(__a, __b);
  188. }
  189.  
  190. static __inline__ vector unsigned int __ATTRS_o_ai
  191. vec_absd(vector unsigned int __a,  vector unsigned int __b) {
  192.   return __builtin_altivec_vabsduw(__a, __b);
  193. }
  194.  
  195. #endif /* End __POWER9_VECTOR__ */
  196.  
  197. /* vec_add */
  198.  
  199. static __inline__ vector signed char __ATTRS_o_ai
  200. vec_add(vector signed char __a, vector signed char __b) {
  201.   return __a + __b;
  202. }
  203.  
  204. static __inline__ vector signed char __ATTRS_o_ai
  205. vec_add(vector bool char __a, vector signed char __b) {
  206.   return (vector signed char)__a + __b;
  207. }
  208.  
  209. static __inline__ vector signed char __ATTRS_o_ai
  210. vec_add(vector signed char __a, vector bool char __b) {
  211.   return __a + (vector signed char)__b;
  212. }
  213.  
  214. static __inline__ vector unsigned char __ATTRS_o_ai
  215. vec_add(vector unsigned char __a, vector unsigned char __b) {
  216.   return __a + __b;
  217. }
  218.  
  219. static __inline__ vector unsigned char __ATTRS_o_ai
  220. vec_add(vector bool char __a, vector unsigned char __b) {
  221.   return (vector unsigned char)__a + __b;
  222. }
  223.  
  224. static __inline__ vector unsigned char __ATTRS_o_ai
  225. vec_add(vector unsigned char __a, vector bool char __b) {
  226.   return __a + (vector unsigned char)__b;
  227. }
  228.  
  229. static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
  230.                                                     vector short __b) {
  231.   return __a + __b;
  232. }
  233.  
  234. static __inline__ vector short __ATTRS_o_ai vec_add(vector bool short __a,
  235.                                                     vector short __b) {
  236.   return (vector short)__a + __b;
  237. }
  238.  
  239. static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
  240.                                                     vector bool short __b) {
  241.   return __a + (vector short)__b;
  242. }
  243.  
  244. static __inline__ vector unsigned short __ATTRS_o_ai
  245. vec_add(vector unsigned short __a, vector unsigned short __b) {
  246.   return __a + __b;
  247. }
  248.  
  249. static __inline__ vector unsigned short __ATTRS_o_ai
  250. vec_add(vector bool short __a, vector unsigned short __b) {
  251.   return (vector unsigned short)__a + __b;
  252. }
  253.  
  254. static __inline__ vector unsigned short __ATTRS_o_ai
  255. vec_add(vector unsigned short __a, vector bool short __b) {
  256.   return __a + (vector unsigned short)__b;
  257. }
  258.  
  259. static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
  260.                                                   vector int __b) {
  261.   return __a + __b;
  262. }
  263.  
  264. static __inline__ vector int __ATTRS_o_ai vec_add(vector bool int __a,
  265.                                                   vector int __b) {
  266.   return (vector int)__a + __b;
  267. }
  268.  
  269. static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
  270.                                                   vector bool int __b) {
  271.   return __a + (vector int)__b;
  272. }
  273.  
  274. static __inline__ vector unsigned int __ATTRS_o_ai
  275. vec_add(vector unsigned int __a, vector unsigned int __b) {
  276.   return __a + __b;
  277. }
  278.  
  279. static __inline__ vector unsigned int __ATTRS_o_ai
  280. vec_add(vector bool int __a, vector unsigned int __b) {
  281.   return (vector unsigned int)__a + __b;
  282. }
  283.  
  284. static __inline__ vector unsigned int __ATTRS_o_ai
  285. vec_add(vector unsigned int __a, vector bool int __b) {
  286.   return __a + (vector unsigned int)__b;
  287. }
  288.  
  289. #ifdef __POWER8_VECTOR__
  290. static __inline__ vector signed long long __ATTRS_o_ai
  291. vec_add(vector signed long long __a, vector signed long long __b) {
  292.   return __a + __b;
  293. }
  294.  
  295. static __inline__ vector unsigned long long __ATTRS_o_ai
  296. vec_add(vector unsigned long long __a, vector unsigned long long __b) {
  297.   return __a + __b;
  298. }
  299.  
  300. #ifdef __SIZEOF_INT128__
  301. static __inline__ vector signed __int128 __ATTRS_o_ai
  302. vec_add(vector signed __int128 __a, vector signed __int128 __b) {
  303.   return __a + __b;
  304. }
  305.  
  306. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  307. vec_add(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  308.   return __a + __b;
  309. }
  310. #endif
  311.  
  312. static __inline__ vector unsigned char __attribute__((__always_inline__))
  313. vec_add_u128(vector unsigned char __a, vector unsigned char __b) {
  314.   return (vector unsigned char)__builtin_altivec_vadduqm(__a, __b);
  315. }
  316. #elif defined(__VSX__)
  317. static __inline__ vector signed long long __ATTRS_o_ai
  318. vec_add(vector signed long long __a, vector signed long long __b) {
  319. #ifdef __LITTLE_ENDIAN__
  320.   // Little endian systems on CPU's prior to Power8 don't really exist
  321.   // so scalarizing is fine.
  322.   return __a + __b;
  323. #else
  324.   vector unsigned int __res =
  325.       (vector unsigned int)__a + (vector unsigned int)__b;
  326.   vector unsigned int __carry = __builtin_altivec_vaddcuw(
  327.       (vector unsigned int)__a, (vector unsigned int)__b);
  328.   __carry = (vector unsigned int)__builtin_shufflevector(
  329.       (vector unsigned char)__carry, (vector unsigned char)__carry, 0, 0, 0, 7,
  330.       0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0);
  331.   return (vector signed long long)(__res + __carry);
  332. #endif
  333. }
  334.  
  335. static __inline__ vector unsigned long long __ATTRS_o_ai
  336. vec_add(vector unsigned long long __a, vector unsigned long long __b) {
  337.   return (vector unsigned long long)vec_add((vector signed long long)__a,
  338.                                             (vector signed long long)__b);
  339. }
  340. #endif // __POWER8_VECTOR__
  341.  
  342. static __inline__ vector float __ATTRS_o_ai vec_add(vector float __a,
  343.                                                     vector float __b) {
  344.   return __a + __b;
  345. }
  346.  
  347. #ifdef __VSX__
  348. static __inline__ vector double __ATTRS_o_ai vec_add(vector double __a,
  349.                                                      vector double __b) {
  350.   return __a + __b;
  351. }
  352. #endif // __VSX__
  353.  
  354. /* vec_adde */
  355.  
  356. #ifdef __POWER8_VECTOR__
  357. #ifdef __SIZEOF_INT128__
  358. static __inline__ vector signed __int128 __ATTRS_o_ai
  359. vec_adde(vector signed __int128 __a, vector signed __int128 __b,
  360.          vector signed __int128 __c) {
  361.   return (vector signed __int128)__builtin_altivec_vaddeuqm(
  362.       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
  363.       (vector unsigned __int128)__c);
  364. }
  365.  
  366. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  367. vec_adde(vector unsigned __int128 __a, vector unsigned __int128 __b,
  368.          vector unsigned __int128 __c) {
  369.   return __builtin_altivec_vaddeuqm(__a, __b, __c);
  370. }
  371. #endif
  372.  
  373. static __inline__ vector unsigned char __attribute__((__always_inline__))
  374. vec_adde_u128(vector unsigned char __a, vector unsigned char __b,
  375.               vector unsigned char __c) {
  376.   return (vector unsigned char)__builtin_altivec_vaddeuqm_c(
  377.       (vector unsigned char)__a, (vector unsigned char)__b,
  378.       (vector unsigned char)__c);
  379. }
  380. #endif
  381.  
  382. static __inline__ vector signed int __ATTRS_o_ai
  383. vec_adde(vector signed int __a, vector signed int __b,
  384.          vector signed int __c) {
  385.   vector signed int __mask = {1, 1, 1, 1};
  386.   vector signed int __carry = __c & __mask;
  387.   return vec_add(vec_add(__a, __b), __carry);
  388. }
  389.  
  390. static __inline__ vector unsigned int __ATTRS_o_ai
  391. vec_adde(vector unsigned int __a, vector unsigned int __b,
  392.          vector unsigned int __c) {
  393.   vector unsigned int __mask = {1, 1, 1, 1};
  394.   vector unsigned int __carry = __c & __mask;
  395.   return vec_add(vec_add(__a, __b), __carry);
  396. }
  397.  
  398. /* vec_addec */
  399.  
  400. #ifdef __POWER8_VECTOR__
  401. #ifdef __SIZEOF_INT128__
  402. static __inline__ vector signed __int128 __ATTRS_o_ai
  403. vec_addec(vector signed __int128 __a, vector signed __int128 __b,
  404.           vector signed __int128 __c) {
  405.   return (vector signed __int128)__builtin_altivec_vaddecuq(
  406.       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
  407.       (vector unsigned __int128)__c);
  408. }
  409.  
  410. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  411. vec_addec(vector unsigned __int128 __a, vector unsigned __int128 __b,
  412.           vector unsigned __int128 __c) {
  413.   return __builtin_altivec_vaddecuq(__a, __b, __c);
  414. }
  415. #endif
  416.  
  417. static __inline__ vector unsigned char __attribute__((__always_inline__))
  418. vec_addec_u128(vector unsigned char __a, vector unsigned char __b,
  419.                vector unsigned char __c) {
  420.   return (vector unsigned char)__builtin_altivec_vaddecuq_c(
  421.       (vector unsigned char)__a, (vector unsigned char)__b,
  422.       (vector unsigned char)__c);
  423. }
  424.  
  425. #ifdef __powerpc64__
  426. static __inline__ vector signed int __ATTRS_o_ai
  427. vec_addec(vector signed int __a, vector signed int __b,
  428.           vector signed int __c) {
  429.  
  430.   signed int __result[4];
  431.   for (int i = 0; i < 4; i++) {
  432.     unsigned int __tempa = (unsigned int) __a[i];
  433.     unsigned int __tempb = (unsigned int) __b[i];
  434.     unsigned int __tempc = (unsigned int) __c[i];
  435.     __tempc = __tempc & 0x00000001;
  436.     unsigned long long __longa = (unsigned long long) __tempa;
  437.     unsigned long long __longb = (unsigned long long) __tempb;
  438.     unsigned long long __longc = (unsigned long long) __tempc;
  439.     unsigned long long __sum = __longa + __longb + __longc;
  440.     unsigned long long __res = (__sum >> 32) & 0x01;
  441.     unsigned long long __tempres = (unsigned int) __res;
  442.     __result[i] = (signed int) __tempres;
  443.   }
  444.  
  445.   vector signed int ret = { __result[0], __result[1], __result[2], __result[3] };
  446.   return ret;
  447. }
  448.  
  449. static __inline__ vector unsigned int __ATTRS_o_ai
  450. vec_addec(vector unsigned int __a, vector unsigned int __b,
  451.           vector unsigned int __c) {
  452.  
  453.   unsigned int __result[4];
  454.   for (int i = 0; i < 4; i++) {
  455.     unsigned int __tempc = __c[i] & 1;
  456.     unsigned long long __longa = (unsigned long long) __a[i];
  457.     unsigned long long __longb = (unsigned long long) __b[i];
  458.     unsigned long long __longc = (unsigned long long) __tempc;
  459.     unsigned long long __sum = __longa + __longb + __longc;
  460.     unsigned long long __res = (__sum >> 32) & 0x01;
  461.     unsigned long long __tempres = (unsigned int) __res;
  462.     __result[i] = (signed int) __tempres;
  463.   }
  464.  
  465.   vector unsigned int ret = { __result[0], __result[1], __result[2], __result[3] };
  466.   return ret;
  467. }
  468. #endif // __powerpc64__
  469. #endif // __POWER8_VECTOR__
  470.  
  471. /* vec_vaddubm */
  472.  
  473. #define __builtin_altivec_vaddubm vec_vaddubm
  474.  
  475. static __inline__ vector signed char __ATTRS_o_ai
  476. vec_vaddubm(vector signed char __a, vector signed char __b) {
  477.   return __a + __b;
  478. }
  479.  
  480. static __inline__ vector signed char __ATTRS_o_ai
  481. vec_vaddubm(vector bool char __a, vector signed char __b) {
  482.   return (vector signed char)__a + __b;
  483. }
  484.  
  485. static __inline__ vector signed char __ATTRS_o_ai
  486. vec_vaddubm(vector signed char __a, vector bool char __b) {
  487.   return __a + (vector signed char)__b;
  488. }
  489.  
  490. static __inline__ vector unsigned char __ATTRS_o_ai
  491. vec_vaddubm(vector unsigned char __a, vector unsigned char __b) {
  492.   return __a + __b;
  493. }
  494.  
  495. static __inline__ vector unsigned char __ATTRS_o_ai
  496. vec_vaddubm(vector bool char __a, vector unsigned char __b) {
  497.   return (vector unsigned char)__a + __b;
  498. }
  499.  
  500. static __inline__ vector unsigned char __ATTRS_o_ai
  501. vec_vaddubm(vector unsigned char __a, vector bool char __b) {
  502.   return __a + (vector unsigned char)__b;
  503. }
  504.  
  505. /* vec_vadduhm */
  506.  
  507. #define __builtin_altivec_vadduhm vec_vadduhm
  508.  
  509. static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
  510.                                                         vector short __b) {
  511.   return __a + __b;
  512. }
  513.  
  514. static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector bool short __a,
  515.                                                         vector short __b) {
  516.   return (vector short)__a + __b;
  517. }
  518.  
  519. static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
  520.                                                         vector bool short __b) {
  521.   return __a + (vector short)__b;
  522. }
  523.  
  524. static __inline__ vector unsigned short __ATTRS_o_ai
  525. vec_vadduhm(vector unsigned short __a, vector unsigned short __b) {
  526.   return __a + __b;
  527. }
  528.  
  529. static __inline__ vector unsigned short __ATTRS_o_ai
  530. vec_vadduhm(vector bool short __a, vector unsigned short __b) {
  531.   return (vector unsigned short)__a + __b;
  532. }
  533.  
  534. static __inline__ vector unsigned short __ATTRS_o_ai
  535. vec_vadduhm(vector unsigned short __a, vector bool short __b) {
  536.   return __a + (vector unsigned short)__b;
  537. }
  538.  
  539. /* vec_vadduwm */
  540.  
  541. #define __builtin_altivec_vadduwm vec_vadduwm
  542.  
  543. static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
  544.                                                       vector int __b) {
  545.   return __a + __b;
  546. }
  547.  
  548. static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector bool int __a,
  549.                                                       vector int __b) {
  550.   return (vector int)__a + __b;
  551. }
  552.  
  553. static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
  554.                                                       vector bool int __b) {
  555.   return __a + (vector int)__b;
  556. }
  557.  
  558. static __inline__ vector unsigned int __ATTRS_o_ai
  559. vec_vadduwm(vector unsigned int __a, vector unsigned int __b) {
  560.   return __a + __b;
  561. }
  562.  
  563. static __inline__ vector unsigned int __ATTRS_o_ai
  564. vec_vadduwm(vector bool int __a, vector unsigned int __b) {
  565.   return (vector unsigned int)__a + __b;
  566. }
  567.  
  568. static __inline__ vector unsigned int __ATTRS_o_ai
  569. vec_vadduwm(vector unsigned int __a, vector bool int __b) {
  570.   return __a + (vector unsigned int)__b;
  571. }
  572.  
  573. /* vec_vaddfp */
  574.  
  575. #define __builtin_altivec_vaddfp vec_vaddfp
  576.  
  577. static __inline__ vector float __attribute__((__always_inline__))
  578. vec_vaddfp(vector float __a, vector float __b) {
  579.   return __a + __b;
  580. }
  581.  
  582. /* vec_addc */
  583.  
  584. static __inline__ vector signed int __ATTRS_o_ai
  585. vec_addc(vector signed int __a, vector signed int __b) {
  586.   return (vector signed int)__builtin_altivec_vaddcuw((vector unsigned int)__a,
  587.                                                       (vector unsigned int)__b);
  588. }
  589.  
  590. static __inline__ vector unsigned int __ATTRS_o_ai
  591. vec_addc(vector unsigned int __a, vector unsigned int __b) {
  592.   return __builtin_altivec_vaddcuw(__a, __b);
  593. }
  594.  
  595. #ifdef __POWER8_VECTOR__
  596. #ifdef __SIZEOF_INT128__
  597. static __inline__ vector signed __int128 __ATTRS_o_ai
  598. vec_addc(vector signed __int128 __a, vector signed __int128 __b) {
  599.   return (vector signed __int128)__builtin_altivec_vaddcuq(
  600.       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
  601. }
  602.  
  603. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  604. vec_addc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  605.   return __builtin_altivec_vaddcuq(__a, __b);
  606. }
  607. #endif
  608.  
  609. static __inline__ vector unsigned char __attribute__((__always_inline__))
  610. vec_addc_u128(vector unsigned char __a, vector unsigned char __b) {
  611.   return (vector unsigned char)__builtin_altivec_vaddcuq_c(
  612.       (vector unsigned char)__a, (vector unsigned char)__b);
  613. }
  614. #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
  615.  
  616. /* vec_vaddcuw */
  617.  
  618. static __inline__ vector unsigned int __attribute__((__always_inline__))
  619. vec_vaddcuw(vector unsigned int __a, vector unsigned int __b) {
  620.   return __builtin_altivec_vaddcuw(__a, __b);
  621. }
  622.  
  623. /* vec_adds */
  624.  
  625. static __inline__ vector signed char __ATTRS_o_ai
  626. vec_adds(vector signed char __a, vector signed char __b) {
  627.   return __builtin_altivec_vaddsbs(__a, __b);
  628. }
  629.  
  630. static __inline__ vector signed char __ATTRS_o_ai
  631. vec_adds(vector bool char __a, vector signed char __b) {
  632.   return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
  633. }
  634.  
  635. static __inline__ vector signed char __ATTRS_o_ai
  636. vec_adds(vector signed char __a, vector bool char __b) {
  637.   return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
  638. }
  639.  
  640. static __inline__ vector unsigned char __ATTRS_o_ai
  641. vec_adds(vector unsigned char __a, vector unsigned char __b) {
  642.   return __builtin_altivec_vaddubs(__a, __b);
  643. }
  644.  
  645. static __inline__ vector unsigned char __ATTRS_o_ai
  646. vec_adds(vector bool char __a, vector unsigned char __b) {
  647.   return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
  648. }
  649.  
  650. static __inline__ vector unsigned char __ATTRS_o_ai
  651. vec_adds(vector unsigned char __a, vector bool char __b) {
  652.   return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
  653. }
  654.  
  655. static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
  656.                                                      vector short __b) {
  657.   return __builtin_altivec_vaddshs(__a, __b);
  658. }
  659.  
  660. static __inline__ vector short __ATTRS_o_ai vec_adds(vector bool short __a,
  661.                                                      vector short __b) {
  662.   return __builtin_altivec_vaddshs((vector short)__a, __b);
  663. }
  664.  
  665. static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
  666.                                                      vector bool short __b) {
  667.   return __builtin_altivec_vaddshs(__a, (vector short)__b);
  668. }
  669.  
  670. static __inline__ vector unsigned short __ATTRS_o_ai
  671. vec_adds(vector unsigned short __a, vector unsigned short __b) {
  672.   return __builtin_altivec_vadduhs(__a, __b);
  673. }
  674.  
  675. static __inline__ vector unsigned short __ATTRS_o_ai
  676. vec_adds(vector bool short __a, vector unsigned short __b) {
  677.   return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
  678. }
  679.  
  680. static __inline__ vector unsigned short __ATTRS_o_ai
  681. vec_adds(vector unsigned short __a, vector bool short __b) {
  682.   return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
  683. }
  684.  
  685. static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
  686.                                                    vector int __b) {
  687.   return __builtin_altivec_vaddsws(__a, __b);
  688. }
  689.  
  690. static __inline__ vector int __ATTRS_o_ai vec_adds(vector bool int __a,
  691.                                                    vector int __b) {
  692.   return __builtin_altivec_vaddsws((vector int)__a, __b);
  693. }
  694.  
  695. static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
  696.                                                    vector bool int __b) {
  697.   return __builtin_altivec_vaddsws(__a, (vector int)__b);
  698. }
  699.  
  700. static __inline__ vector unsigned int __ATTRS_o_ai
  701. vec_adds(vector unsigned int __a, vector unsigned int __b) {
  702.   return __builtin_altivec_vadduws(__a, __b);
  703. }
  704.  
  705. static __inline__ vector unsigned int __ATTRS_o_ai
  706. vec_adds(vector bool int __a, vector unsigned int __b) {
  707.   return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
  708. }
  709.  
  710. static __inline__ vector unsigned int __ATTRS_o_ai
  711. vec_adds(vector unsigned int __a, vector bool int __b) {
  712.   return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
  713. }
  714.  
  715. /* vec_vaddsbs */
  716.  
  717. static __inline__ vector signed char __ATTRS_o_ai
  718. vec_vaddsbs(vector signed char __a, vector signed char __b) {
  719.   return __builtin_altivec_vaddsbs(__a, __b);
  720. }
  721.  
  722. static __inline__ vector signed char __ATTRS_o_ai
  723. vec_vaddsbs(vector bool char __a, vector signed char __b) {
  724.   return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
  725. }
  726.  
  727. static __inline__ vector signed char __ATTRS_o_ai
  728. vec_vaddsbs(vector signed char __a, vector bool char __b) {
  729.   return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
  730. }
  731.  
  732. /* vec_vaddubs */
  733.  
  734. static __inline__ vector unsigned char __ATTRS_o_ai
  735. vec_vaddubs(vector unsigned char __a, vector unsigned char __b) {
  736.   return __builtin_altivec_vaddubs(__a, __b);
  737. }
  738.  
  739. static __inline__ vector unsigned char __ATTRS_o_ai
  740. vec_vaddubs(vector bool char __a, vector unsigned char __b) {
  741.   return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
  742. }
  743.  
  744. static __inline__ vector unsigned char __ATTRS_o_ai
  745. vec_vaddubs(vector unsigned char __a, vector bool char __b) {
  746.   return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
  747. }
  748.  
  749. /* vec_vaddshs */
  750.  
  751. static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
  752.                                                         vector short __b) {
  753.   return __builtin_altivec_vaddshs(__a, __b);
  754. }
  755.  
  756. static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector bool short __a,
  757.                                                         vector short __b) {
  758.   return __builtin_altivec_vaddshs((vector short)__a, __b);
  759. }
  760.  
  761. static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
  762.                                                         vector bool short __b) {
  763.   return __builtin_altivec_vaddshs(__a, (vector short)__b);
  764. }
  765.  
  766. /* vec_vadduhs */
  767.  
  768. static __inline__ vector unsigned short __ATTRS_o_ai
  769. vec_vadduhs(vector unsigned short __a, vector unsigned short __b) {
  770.   return __builtin_altivec_vadduhs(__a, __b);
  771. }
  772.  
  773. static __inline__ vector unsigned short __ATTRS_o_ai
  774. vec_vadduhs(vector bool short __a, vector unsigned short __b) {
  775.   return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
  776. }
  777.  
  778. static __inline__ vector unsigned short __ATTRS_o_ai
  779. vec_vadduhs(vector unsigned short __a, vector bool short __b) {
  780.   return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
  781. }
  782.  
  783. /* vec_vaddsws */
  784.  
  785. static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
  786.                                                       vector int __b) {
  787.   return __builtin_altivec_vaddsws(__a, __b);
  788. }
  789.  
  790. static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector bool int __a,
  791.                                                       vector int __b) {
  792.   return __builtin_altivec_vaddsws((vector int)__a, __b);
  793. }
  794.  
  795. static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
  796.                                                       vector bool int __b) {
  797.   return __builtin_altivec_vaddsws(__a, (vector int)__b);
  798. }
  799.  
  800. /* vec_vadduws */
  801.  
  802. static __inline__ vector unsigned int __ATTRS_o_ai
  803. vec_vadduws(vector unsigned int __a, vector unsigned int __b) {
  804.   return __builtin_altivec_vadduws(__a, __b);
  805. }
  806.  
  807. static __inline__ vector unsigned int __ATTRS_o_ai
  808. vec_vadduws(vector bool int __a, vector unsigned int __b) {
  809.   return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
  810. }
  811.  
  812. static __inline__ vector unsigned int __ATTRS_o_ai
  813. vec_vadduws(vector unsigned int __a, vector bool int __b) {
  814.   return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
  815. }
  816.  
  817. #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  818.     defined(__SIZEOF_INT128__)
  819. /* vec_vadduqm */
  820.  
  821. static __inline__ vector signed __int128 __ATTRS_o_ai
  822. vec_vadduqm(vector signed __int128 __a, vector signed __int128 __b) {
  823.   return __a + __b;
  824. }
  825.  
  826. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  827. vec_vadduqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  828.   return __a + __b;
  829. }
  830.  
  831. /* vec_vaddeuqm */
  832.  
  833. static __inline__ vector signed __int128 __ATTRS_o_ai
  834. vec_vaddeuqm(vector signed __int128 __a, vector signed __int128 __b,
  835.              vector signed __int128 __c) {
  836.   return (vector signed __int128)__builtin_altivec_vaddeuqm(
  837.       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
  838.       (vector unsigned __int128)__c);
  839. }
  840.  
  841. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  842. vec_vaddeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
  843.              vector unsigned __int128 __c) {
  844.   return __builtin_altivec_vaddeuqm(__a, __b, __c);
  845. }
  846.  
  847. /* vec_vaddcuq */
  848.  
  849. static __inline__ vector signed __int128 __ATTRS_o_ai
  850. vec_vaddcuq(vector signed __int128 __a, vector signed __int128 __b) {
  851.   return (vector signed __int128)__builtin_altivec_vaddcuq(
  852.       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
  853. }
  854.  
  855. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  856. vec_vaddcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  857.   return __builtin_altivec_vaddcuq(__a, __b);
  858. }
  859.  
  860. /* vec_vaddecuq */
  861.  
  862. static __inline__ vector signed __int128 __ATTRS_o_ai
  863. vec_vaddecuq(vector signed __int128 __a, vector signed __int128 __b,
  864.              vector signed __int128 __c) {
  865.   return (vector signed __int128)__builtin_altivec_vaddecuq(
  866.       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
  867.       (vector unsigned __int128)__c);
  868. }
  869.  
  870. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  871. vec_vaddecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
  872.              vector unsigned __int128 __c) {
  873.   return __builtin_altivec_vaddecuq(__a, __b, __c);
  874. }
  875. #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
  876.  
  877. /* vec_and */
  878.  
  879. #define __builtin_altivec_vand vec_and
  880.  
  881. static __inline__ vector signed char __ATTRS_o_ai
  882. vec_and(vector signed char __a, vector signed char __b) {
  883.   return __a & __b;
  884. }
  885.  
  886. static __inline__ vector signed char __ATTRS_o_ai
  887. vec_and(vector bool char __a, vector signed char __b) {
  888.   return (vector signed char)__a & __b;
  889. }
  890.  
  891. static __inline__ vector signed char __ATTRS_o_ai
  892. vec_and(vector signed char __a, vector bool char __b) {
  893.   return __a & (vector signed char)__b;
  894. }
  895.  
  896. static __inline__ vector unsigned char __ATTRS_o_ai
  897. vec_and(vector unsigned char __a, vector unsigned char __b) {
  898.   return __a & __b;
  899. }
  900.  
  901. static __inline__ vector unsigned char __ATTRS_o_ai
  902. vec_and(vector bool char __a, vector unsigned char __b) {
  903.   return (vector unsigned char)__a & __b;
  904. }
  905.  
  906. static __inline__ vector unsigned char __ATTRS_o_ai
  907. vec_and(vector unsigned char __a, vector bool char __b) {
  908.   return __a & (vector unsigned char)__b;
  909. }
  910.  
  911. static __inline__ vector bool char __ATTRS_o_ai vec_and(vector bool char __a,
  912.                                                         vector bool char __b) {
  913.   return __a & __b;
  914. }
  915.  
  916. static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
  917.                                                     vector short __b) {
  918.   return __a & __b;
  919. }
  920.  
  921. static __inline__ vector short __ATTRS_o_ai vec_and(vector bool short __a,
  922.                                                     vector short __b) {
  923.   return (vector short)__a & __b;
  924. }
  925.  
  926. static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
  927.                                                     vector bool short __b) {
  928.   return __a & (vector short)__b;
  929. }
  930.  
  931. static __inline__ vector unsigned short __ATTRS_o_ai
  932. vec_and(vector unsigned short __a, vector unsigned short __b) {
  933.   return __a & __b;
  934. }
  935.  
  936. static __inline__ vector unsigned short __ATTRS_o_ai
  937. vec_and(vector bool short __a, vector unsigned short __b) {
  938.   return (vector unsigned short)__a & __b;
  939. }
  940.  
  941. static __inline__ vector unsigned short __ATTRS_o_ai
  942. vec_and(vector unsigned short __a, vector bool short __b) {
  943.   return __a & (vector unsigned short)__b;
  944. }
  945.  
  946. static __inline__ vector bool short __ATTRS_o_ai
  947. vec_and(vector bool short __a, vector bool short __b) {
  948.   return __a & __b;
  949. }
  950.  
  951. static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
  952.                                                   vector int __b) {
  953.   return __a & __b;
  954. }
  955.  
  956. static __inline__ vector int __ATTRS_o_ai vec_and(vector bool int __a,
  957.                                                   vector int __b) {
  958.   return (vector int)__a & __b;
  959. }
  960.  
  961. static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
  962.                                                   vector bool int __b) {
  963.   return __a & (vector int)__b;
  964. }
  965.  
  966. static __inline__ vector unsigned int __ATTRS_o_ai
  967. vec_and(vector unsigned int __a, vector unsigned int __b) {
  968.   return __a & __b;
  969. }
  970.  
  971. static __inline__ vector unsigned int __ATTRS_o_ai
  972. vec_and(vector bool int __a, vector unsigned int __b) {
  973.   return (vector unsigned int)__a & __b;
  974. }
  975.  
  976. static __inline__ vector unsigned int __ATTRS_o_ai
  977. vec_and(vector unsigned int __a, vector bool int __b) {
  978.   return __a & (vector unsigned int)__b;
  979. }
  980.  
  981. static __inline__ vector bool int __ATTRS_o_ai vec_and(vector bool int __a,
  982.                                                        vector bool int __b) {
  983.   return __a & __b;
  984. }
  985.  
  986. static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
  987.                                                     vector float __b) {
  988.   vector unsigned int __res =
  989.       (vector unsigned int)__a & (vector unsigned int)__b;
  990.   return (vector float)__res;
  991. }
  992.  
  993. static __inline__ vector float __ATTRS_o_ai vec_and(vector bool int __a,
  994.                                                     vector float __b) {
  995.   vector unsigned int __res =
  996.       (vector unsigned int)__a & (vector unsigned int)__b;
  997.   return (vector float)__res;
  998. }
  999.  
  1000. static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
  1001.                                                     vector bool int __b) {
  1002.   vector unsigned int __res =
  1003.       (vector unsigned int)__a & (vector unsigned int)__b;
  1004.   return (vector float)__res;
  1005. }
  1006.  
  1007. #ifdef __VSX__
  1008. static __inline__ vector double __ATTRS_o_ai vec_and(vector bool long long __a,
  1009.                                                      vector double __b) {
  1010.   vector unsigned long long __res =
  1011.       (vector unsigned long long)__a & (vector unsigned long long)__b;
  1012.   return (vector double)__res;
  1013. }
  1014.  
  1015. static __inline__ vector double __ATTRS_o_ai
  1016. vec_and(vector double __a, vector bool long long __b) {
  1017.   vector unsigned long long __res =
  1018.       (vector unsigned long long)__a & (vector unsigned long long)__b;
  1019.   return (vector double)__res;
  1020. }
  1021.  
  1022. static __inline__ vector double __ATTRS_o_ai vec_and(vector double __a,
  1023.                                                      vector double __b) {
  1024.   vector unsigned long long __res =
  1025.       (vector unsigned long long)__a & (vector unsigned long long)__b;
  1026.   return (vector double)__res;
  1027. }
  1028.  
  1029. static __inline__ vector signed long long __ATTRS_o_ai
  1030. vec_and(vector signed long long __a, vector signed long long __b) {
  1031.   return __a & __b;
  1032. }
  1033.  
  1034. static __inline__ vector signed long long __ATTRS_o_ai
  1035. vec_and(vector bool long long __a, vector signed long long __b) {
  1036.   return (vector signed long long)__a & __b;
  1037. }
  1038.  
  1039. static __inline__ vector signed long long __ATTRS_o_ai
  1040. vec_and(vector signed long long __a, vector bool long long __b) {
  1041.   return __a & (vector signed long long)__b;
  1042. }
  1043.  
  1044. static __inline__ vector unsigned long long __ATTRS_o_ai
  1045. vec_and(vector unsigned long long __a, vector unsigned long long __b) {
  1046.   return __a & __b;
  1047. }
  1048.  
  1049. static __inline__ vector unsigned long long __ATTRS_o_ai
  1050. vec_and(vector bool long long __a, vector unsigned long long __b) {
  1051.   return (vector unsigned long long)__a & __b;
  1052. }
  1053.  
  1054. static __inline__ vector unsigned long long __ATTRS_o_ai
  1055. vec_and(vector unsigned long long __a, vector bool long long __b) {
  1056.   return __a & (vector unsigned long long)__b;
  1057. }
  1058.  
  1059. static __inline__ vector bool long long __ATTRS_o_ai
  1060. vec_and(vector bool long long __a, vector bool long long __b) {
  1061.   return __a & __b;
  1062. }
  1063. #endif
  1064.  
  1065. /* vec_vand */
  1066.  
  1067. static __inline__ vector signed char __ATTRS_o_ai
  1068. vec_vand(vector signed char __a, vector signed char __b) {
  1069.   return __a & __b;
  1070. }
  1071.  
  1072. static __inline__ vector signed char __ATTRS_o_ai
  1073. vec_vand(vector bool char __a, vector signed char __b) {
  1074.   return (vector signed char)__a & __b;
  1075. }
  1076.  
  1077. static __inline__ vector signed char __ATTRS_o_ai
  1078. vec_vand(vector signed char __a, vector bool char __b) {
  1079.   return __a & (vector signed char)__b;
  1080. }
  1081.  
  1082. static __inline__ vector unsigned char __ATTRS_o_ai
  1083. vec_vand(vector unsigned char __a, vector unsigned char __b) {
  1084.   return __a & __b;
  1085. }
  1086.  
  1087. static __inline__ vector unsigned char __ATTRS_o_ai
  1088. vec_vand(vector bool char __a, vector unsigned char __b) {
  1089.   return (vector unsigned char)__a & __b;
  1090. }
  1091.  
  1092. static __inline__ vector unsigned char __ATTRS_o_ai
  1093. vec_vand(vector unsigned char __a, vector bool char __b) {
  1094.   return __a & (vector unsigned char)__b;
  1095. }
  1096.  
  1097. static __inline__ vector bool char __ATTRS_o_ai vec_vand(vector bool char __a,
  1098.                                                          vector bool char __b) {
  1099.   return __a & __b;
  1100. }
  1101.  
  1102. static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
  1103.                                                      vector short __b) {
  1104.   return __a & __b;
  1105. }
  1106.  
  1107. static __inline__ vector short __ATTRS_o_ai vec_vand(vector bool short __a,
  1108.                                                      vector short __b) {
  1109.   return (vector short)__a & __b;
  1110. }
  1111.  
  1112. static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
  1113.                                                      vector bool short __b) {
  1114.   return __a & (vector short)__b;
  1115. }
  1116.  
  1117. static __inline__ vector unsigned short __ATTRS_o_ai
  1118. vec_vand(vector unsigned short __a, vector unsigned short __b) {
  1119.   return __a & __b;
  1120. }
  1121.  
  1122. static __inline__ vector unsigned short __ATTRS_o_ai
  1123. vec_vand(vector bool short __a, vector unsigned short __b) {
  1124.   return (vector unsigned short)__a & __b;
  1125. }
  1126.  
  1127. static __inline__ vector unsigned short __ATTRS_o_ai
  1128. vec_vand(vector unsigned short __a, vector bool short __b) {
  1129.   return __a & (vector unsigned short)__b;
  1130. }
  1131.  
  1132. static __inline__ vector bool short __ATTRS_o_ai
  1133. vec_vand(vector bool short __a, vector bool short __b) {
  1134.   return __a & __b;
  1135. }
  1136.  
  1137. static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
  1138.                                                    vector int __b) {
  1139.   return __a & __b;
  1140. }
  1141.  
  1142. static __inline__ vector int __ATTRS_o_ai vec_vand(vector bool int __a,
  1143.                                                    vector int __b) {
  1144.   return (vector int)__a & __b;
  1145. }
  1146.  
  1147. static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
  1148.                                                    vector bool int __b) {
  1149.   return __a & (vector int)__b;
  1150. }
  1151.  
  1152. static __inline__ vector unsigned int __ATTRS_o_ai
  1153. vec_vand(vector unsigned int __a, vector unsigned int __b) {
  1154.   return __a & __b;
  1155. }
  1156.  
  1157. static __inline__ vector unsigned int __ATTRS_o_ai
  1158. vec_vand(vector bool int __a, vector unsigned int __b) {
  1159.   return (vector unsigned int)__a & __b;
  1160. }
  1161.  
  1162. static __inline__ vector unsigned int __ATTRS_o_ai
  1163. vec_vand(vector unsigned int __a, vector bool int __b) {
  1164.   return __a & (vector unsigned int)__b;
  1165. }
  1166.  
  1167. static __inline__ vector bool int __ATTRS_o_ai vec_vand(vector bool int __a,
  1168.                                                         vector bool int __b) {
  1169.   return __a & __b;
  1170. }
  1171.  
  1172. static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
  1173.                                                      vector float __b) {
  1174.   vector unsigned int __res =
  1175.       (vector unsigned int)__a & (vector unsigned int)__b;
  1176.   return (vector float)__res;
  1177. }
  1178.  
  1179. static __inline__ vector float __ATTRS_o_ai vec_vand(vector bool int __a,
  1180.                                                      vector float __b) {
  1181.   vector unsigned int __res =
  1182.       (vector unsigned int)__a & (vector unsigned int)__b;
  1183.   return (vector float)__res;
  1184. }
  1185.  
  1186. static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
  1187.                                                      vector bool int __b) {
  1188.   vector unsigned int __res =
  1189.       (vector unsigned int)__a & (vector unsigned int)__b;
  1190.   return (vector float)__res;
  1191. }
  1192.  
  1193. #ifdef __VSX__
  1194. static __inline__ vector signed long long __ATTRS_o_ai
  1195. vec_vand(vector signed long long __a, vector signed long long __b) {
  1196.   return __a & __b;
  1197. }
  1198.  
  1199. static __inline__ vector signed long long __ATTRS_o_ai
  1200. vec_vand(vector bool long long __a, vector signed long long __b) {
  1201.   return (vector signed long long)__a & __b;
  1202. }
  1203.  
  1204. static __inline__ vector signed long long __ATTRS_o_ai
  1205. vec_vand(vector signed long long __a, vector bool long long __b) {
  1206.   return __a & (vector signed long long)__b;
  1207. }
  1208.  
  1209. static __inline__ vector unsigned long long __ATTRS_o_ai
  1210. vec_vand(vector unsigned long long __a, vector unsigned long long __b) {
  1211.   return __a & __b;
  1212. }
  1213.  
  1214. static __inline__ vector unsigned long long __ATTRS_o_ai
  1215. vec_vand(vector bool long long __a, vector unsigned long long __b) {
  1216.   return (vector unsigned long long)__a & __b;
  1217. }
  1218.  
  1219. static __inline__ vector unsigned long long __ATTRS_o_ai
  1220. vec_vand(vector unsigned long long __a, vector bool long long __b) {
  1221.   return __a & (vector unsigned long long)__b;
  1222. }
  1223.  
  1224. static __inline__ vector bool long long __ATTRS_o_ai
  1225. vec_vand(vector bool long long __a, vector bool long long __b) {
  1226.   return __a & __b;
  1227. }
  1228. #endif
  1229.  
  1230. /* vec_andc */
  1231.  
  1232. #define __builtin_altivec_vandc vec_andc
  1233.  
  1234. static __inline__ vector signed char __ATTRS_o_ai
  1235. vec_andc(vector signed char __a, vector signed char __b) {
  1236.   return __a & ~__b;
  1237. }
  1238.  
  1239. static __inline__ vector signed char __ATTRS_o_ai
  1240. vec_andc(vector bool char __a, vector signed char __b) {
  1241.   return (vector signed char)__a & ~__b;
  1242. }
  1243.  
  1244. static __inline__ vector signed char __ATTRS_o_ai
  1245. vec_andc(vector signed char __a, vector bool char __b) {
  1246.   return __a & ~(vector signed char)__b;
  1247. }
  1248.  
  1249. static __inline__ vector unsigned char __ATTRS_o_ai
  1250. vec_andc(vector unsigned char __a, vector unsigned char __b) {
  1251.   return __a & ~__b;
  1252. }
  1253.  
  1254. static __inline__ vector unsigned char __ATTRS_o_ai
  1255. vec_andc(vector bool char __a, vector unsigned char __b) {
  1256.   return (vector unsigned char)__a & ~__b;
  1257. }
  1258.  
  1259. static __inline__ vector unsigned char __ATTRS_o_ai
  1260. vec_andc(vector unsigned char __a, vector bool char __b) {
  1261.   return __a & ~(vector unsigned char)__b;
  1262. }
  1263.  
  1264. static __inline__ vector bool char __ATTRS_o_ai vec_andc(vector bool char __a,
  1265.                                                          vector bool char __b) {
  1266.   return __a & ~__b;
  1267. }
  1268.  
  1269. static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
  1270.                                                      vector short __b) {
  1271.   return __a & ~__b;
  1272. }
  1273.  
  1274. static __inline__ vector short __ATTRS_o_ai vec_andc(vector bool short __a,
  1275.                                                      vector short __b) {
  1276.   return (vector short)__a & ~__b;
  1277. }
  1278.  
  1279. static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
  1280.                                                      vector bool short __b) {
  1281.   return __a & ~(vector short)__b;
  1282. }
  1283.  
  1284. static __inline__ vector unsigned short __ATTRS_o_ai
  1285. vec_andc(vector unsigned short __a, vector unsigned short __b) {
  1286.   return __a & ~__b;
  1287. }
  1288.  
  1289. static __inline__ vector unsigned short __ATTRS_o_ai
  1290. vec_andc(vector bool short __a, vector unsigned short __b) {
  1291.   return (vector unsigned short)__a & ~__b;
  1292. }
  1293.  
  1294. static __inline__ vector unsigned short __ATTRS_o_ai
  1295. vec_andc(vector unsigned short __a, vector bool short __b) {
  1296.   return __a & ~(vector unsigned short)__b;
  1297. }
  1298.  
  1299. static __inline__ vector bool short __ATTRS_o_ai
  1300. vec_andc(vector bool short __a, vector bool short __b) {
  1301.   return __a & ~__b;
  1302. }
  1303.  
  1304. static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
  1305.                                                    vector int __b) {
  1306.   return __a & ~__b;
  1307. }
  1308.  
  1309. static __inline__ vector int __ATTRS_o_ai vec_andc(vector bool int __a,
  1310.                                                    vector int __b) {
  1311.   return (vector int)__a & ~__b;
  1312. }
  1313.  
  1314. static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
  1315.                                                    vector bool int __b) {
  1316.   return __a & ~(vector int)__b;
  1317. }
  1318.  
  1319. static __inline__ vector unsigned int __ATTRS_o_ai
  1320. vec_andc(vector unsigned int __a, vector unsigned int __b) {
  1321.   return __a & ~__b;
  1322. }
  1323.  
  1324. static __inline__ vector unsigned int __ATTRS_o_ai
  1325. vec_andc(vector bool int __a, vector unsigned int __b) {
  1326.   return (vector unsigned int)__a & ~__b;
  1327. }
  1328.  
  1329. static __inline__ vector unsigned int __ATTRS_o_ai
  1330. vec_andc(vector unsigned int __a, vector bool int __b) {
  1331.   return __a & ~(vector unsigned int)__b;
  1332. }
  1333.  
  1334. static __inline__ vector bool int __ATTRS_o_ai vec_andc(vector bool int __a,
  1335.                                                         vector bool int __b) {
  1336.   return __a & ~__b;
  1337. }
  1338.  
  1339. static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
  1340.                                                      vector float __b) {
  1341.   vector unsigned int __res =
  1342.       (vector unsigned int)__a & ~(vector unsigned int)__b;
  1343.   return (vector float)__res;
  1344. }
  1345.  
  1346. static __inline__ vector float __ATTRS_o_ai vec_andc(vector bool int __a,
  1347.                                                      vector float __b) {
  1348.   vector unsigned int __res =
  1349.       (vector unsigned int)__a & ~(vector unsigned int)__b;
  1350.   return (vector float)__res;
  1351. }
  1352.  
  1353. static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
  1354.                                                      vector bool int __b) {
  1355.   vector unsigned int __res =
  1356.       (vector unsigned int)__a & ~(vector unsigned int)__b;
  1357.   return (vector float)__res;
  1358. }
  1359.  
  1360. #ifdef __VSX__
  1361. static __inline__ vector double __ATTRS_o_ai vec_andc(vector bool long long __a,
  1362.                                                       vector double __b) {
  1363.   vector unsigned long long __res =
  1364.       (vector unsigned long long)__a & ~(vector unsigned long long)__b;
  1365.   return (vector double)__res;
  1366. }
  1367.  
  1368. static __inline__ vector double __ATTRS_o_ai
  1369. vec_andc(vector double __a, vector bool long long __b) {
  1370.   vector unsigned long long __res =
  1371.       (vector unsigned long long)__a & ~(vector unsigned long long)__b;
  1372.   return (vector double)__res;
  1373. }
  1374.  
  1375. static __inline__ vector double __ATTRS_o_ai vec_andc(vector double __a,
  1376.                                                       vector double __b) {
  1377.   vector unsigned long long __res =
  1378.       (vector unsigned long long)__a & ~(vector unsigned long long)__b;
  1379.   return (vector double)__res;
  1380. }
  1381.  
  1382. static __inline__ vector signed long long __ATTRS_o_ai
  1383. vec_andc(vector signed long long __a, vector signed long long __b) {
  1384.   return __a & ~__b;
  1385. }
  1386.  
  1387. static __inline__ vector signed long long __ATTRS_o_ai
  1388. vec_andc(vector bool long long __a, vector signed long long __b) {
  1389.   return (vector signed long long)__a & ~__b;
  1390. }
  1391.  
  1392. static __inline__ vector signed long long __ATTRS_o_ai
  1393. vec_andc(vector signed long long __a, vector bool long long __b) {
  1394.   return __a & ~(vector signed long long)__b;
  1395. }
  1396.  
  1397. static __inline__ vector unsigned long long __ATTRS_o_ai
  1398. vec_andc(vector unsigned long long __a, vector unsigned long long __b) {
  1399.   return __a & ~__b;
  1400. }
  1401.  
  1402. static __inline__ vector unsigned long long __ATTRS_o_ai
  1403. vec_andc(vector bool long long __a, vector unsigned long long __b) {
  1404.   return (vector unsigned long long)__a & ~__b;
  1405. }
  1406.  
  1407. static __inline__ vector unsigned long long __ATTRS_o_ai
  1408. vec_andc(vector unsigned long long __a, vector bool long long __b) {
  1409.   return __a & ~(vector unsigned long long)__b;
  1410. }
  1411.  
  1412. static __inline__ vector bool long long __ATTRS_o_ai
  1413. vec_andc(vector bool long long __a, vector bool long long __b) {
  1414.   return __a & ~__b;
  1415. }
  1416. #endif
  1417.  
  1418. /* vec_vandc */
  1419.  
  1420. static __inline__ vector signed char __ATTRS_o_ai
  1421. vec_vandc(vector signed char __a, vector signed char __b) {
  1422.   return __a & ~__b;
  1423. }
  1424.  
  1425. static __inline__ vector signed char __ATTRS_o_ai
  1426. vec_vandc(vector bool char __a, vector signed char __b) {
  1427.   return (vector signed char)__a & ~__b;
  1428. }
  1429.  
  1430. static __inline__ vector signed char __ATTRS_o_ai
  1431. vec_vandc(vector signed char __a, vector bool char __b) {
  1432.   return __a & ~(vector signed char)__b;
  1433. }
  1434.  
  1435. static __inline__ vector unsigned char __ATTRS_o_ai
  1436. vec_vandc(vector unsigned char __a, vector unsigned char __b) {
  1437.   return __a & ~__b;
  1438. }
  1439.  
  1440. static __inline__ vector unsigned char __ATTRS_o_ai
  1441. vec_vandc(vector bool char __a, vector unsigned char __b) {
  1442.   return (vector unsigned char)__a & ~__b;
  1443. }
  1444.  
  1445. static __inline__ vector unsigned char __ATTRS_o_ai
  1446. vec_vandc(vector unsigned char __a, vector bool char __b) {
  1447.   return __a & ~(vector unsigned char)__b;
  1448. }
  1449.  
  1450. static __inline__ vector bool char __ATTRS_o_ai
  1451. vec_vandc(vector bool char __a, vector bool char __b) {
  1452.   return __a & ~__b;
  1453. }
  1454.  
  1455. static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
  1456.                                                       vector short __b) {
  1457.   return __a & ~__b;
  1458. }
  1459.  
  1460. static __inline__ vector short __ATTRS_o_ai vec_vandc(vector bool short __a,
  1461.                                                       vector short __b) {
  1462.   return (vector short)__a & ~__b;
  1463. }
  1464.  
  1465. static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
  1466.                                                       vector bool short __b) {
  1467.   return __a & ~(vector short)__b;
  1468. }
  1469.  
  1470. static __inline__ vector unsigned short __ATTRS_o_ai
  1471. vec_vandc(vector unsigned short __a, vector unsigned short __b) {
  1472.   return __a & ~__b;
  1473. }
  1474.  
  1475. static __inline__ vector unsigned short __ATTRS_o_ai
  1476. vec_vandc(vector bool short __a, vector unsigned short __b) {
  1477.   return (vector unsigned short)__a & ~__b;
  1478. }
  1479.  
  1480. static __inline__ vector unsigned short __ATTRS_o_ai
  1481. vec_vandc(vector unsigned short __a, vector bool short __b) {
  1482.   return __a & ~(vector unsigned short)__b;
  1483. }
  1484.  
  1485. static __inline__ vector bool short __ATTRS_o_ai
  1486. vec_vandc(vector bool short __a, vector bool short __b) {
  1487.   return __a & ~__b;
  1488. }
  1489.  
  1490. static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
  1491.                                                     vector int __b) {
  1492.   return __a & ~__b;
  1493. }
  1494.  
  1495. static __inline__ vector int __ATTRS_o_ai vec_vandc(vector bool int __a,
  1496.                                                     vector int __b) {
  1497.   return (vector int)__a & ~__b;
  1498. }
  1499.  
  1500. static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
  1501.                                                     vector bool int __b) {
  1502.   return __a & ~(vector int)__b;
  1503. }
  1504.  
  1505. static __inline__ vector unsigned int __ATTRS_o_ai
  1506. vec_vandc(vector unsigned int __a, vector unsigned int __b) {
  1507.   return __a & ~__b;
  1508. }
  1509.  
  1510. static __inline__ vector unsigned int __ATTRS_o_ai
  1511. vec_vandc(vector bool int __a, vector unsigned int __b) {
  1512.   return (vector unsigned int)__a & ~__b;
  1513. }
  1514.  
  1515. static __inline__ vector unsigned int __ATTRS_o_ai
  1516. vec_vandc(vector unsigned int __a, vector bool int __b) {
  1517.   return __a & ~(vector unsigned int)__b;
  1518. }
  1519.  
  1520. static __inline__ vector bool int __ATTRS_o_ai vec_vandc(vector bool int __a,
  1521.                                                          vector bool int __b) {
  1522.   return __a & ~__b;
  1523. }
  1524.  
  1525. static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
  1526.                                                       vector float __b) {
  1527.   vector unsigned int __res =
  1528.       (vector unsigned int)__a & ~(vector unsigned int)__b;
  1529.   return (vector float)__res;
  1530. }
  1531.  
  1532. static __inline__ vector float __ATTRS_o_ai vec_vandc(vector bool int __a,
  1533.                                                       vector float __b) {
  1534.   vector unsigned int __res =
  1535.       (vector unsigned int)__a & ~(vector unsigned int)__b;
  1536.   return (vector float)__res;
  1537. }
  1538.  
  1539. static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
  1540.                                                       vector bool int __b) {
  1541.   vector unsigned int __res =
  1542.       (vector unsigned int)__a & ~(vector unsigned int)__b;
  1543.   return (vector float)__res;
  1544. }
  1545.  
  1546. #ifdef __VSX__
  1547. static __inline__ vector signed long long __ATTRS_o_ai
  1548. vec_vandc(vector signed long long __a, vector signed long long __b) {
  1549.   return __a & ~__b;
  1550. }
  1551.  
  1552. static __inline__ vector signed long long __ATTRS_o_ai
  1553. vec_vandc(vector bool long long __a, vector signed long long __b) {
  1554.   return (vector signed long long)__a & ~__b;
  1555. }
  1556.  
  1557. static __inline__ vector signed long long __ATTRS_o_ai
  1558. vec_vandc(vector signed long long __a, vector bool long long __b) {
  1559.   return __a & ~(vector signed long long)__b;
  1560. }
  1561.  
  1562. static __inline__ vector unsigned long long __ATTRS_o_ai
  1563. vec_vandc(vector unsigned long long __a, vector unsigned long long __b) {
  1564.   return __a & ~__b;
  1565. }
  1566.  
  1567. static __inline__ vector unsigned long long __ATTRS_o_ai
  1568. vec_vandc(vector bool long long __a, vector unsigned long long __b) {
  1569.   return (vector unsigned long long)__a & ~__b;
  1570. }
  1571.  
  1572. static __inline__ vector unsigned long long __ATTRS_o_ai
  1573. vec_vandc(vector unsigned long long __a, vector bool long long __b) {
  1574.   return __a & ~(vector unsigned long long)__b;
  1575. }
  1576.  
  1577. static __inline__ vector bool long long __ATTRS_o_ai
  1578. vec_vandc(vector bool long long __a, vector bool long long __b) {
  1579.   return __a & ~__b;
  1580. }
  1581. #endif
  1582.  
  1583. /* vec_avg */
  1584.  
  1585. static __inline__ vector signed char __ATTRS_o_ai
  1586. vec_avg(vector signed char __a, vector signed char __b) {
  1587.   return __builtin_altivec_vavgsb(__a, __b);
  1588. }
  1589.  
  1590. static __inline__ vector unsigned char __ATTRS_o_ai
  1591. vec_avg(vector unsigned char __a, vector unsigned char __b) {
  1592.   return __builtin_altivec_vavgub(__a, __b);
  1593. }
  1594.  
  1595. static __inline__ vector short __ATTRS_o_ai vec_avg(vector short __a,
  1596.                                                     vector short __b) {
  1597.   return __builtin_altivec_vavgsh(__a, __b);
  1598. }
  1599.  
  1600. static __inline__ vector unsigned short __ATTRS_o_ai
  1601. vec_avg(vector unsigned short __a, vector unsigned short __b) {
  1602.   return __builtin_altivec_vavguh(__a, __b);
  1603. }
  1604.  
  1605. static __inline__ vector int __ATTRS_o_ai vec_avg(vector int __a,
  1606.                                                   vector int __b) {
  1607.   return __builtin_altivec_vavgsw(__a, __b);
  1608. }
  1609.  
  1610. static __inline__ vector unsigned int __ATTRS_o_ai
  1611. vec_avg(vector unsigned int __a, vector unsigned int __b) {
  1612.   return __builtin_altivec_vavguw(__a, __b);
  1613. }
  1614.  
  1615. /* vec_vavgsb */
  1616.  
  1617. static __inline__ vector signed char __attribute__((__always_inline__))
  1618. vec_vavgsb(vector signed char __a, vector signed char __b) {
  1619.   return __builtin_altivec_vavgsb(__a, __b);
  1620. }
  1621.  
  1622. /* vec_vavgub */
  1623.  
  1624. static __inline__ vector unsigned char __attribute__((__always_inline__))
  1625. vec_vavgub(vector unsigned char __a, vector unsigned char __b) {
  1626.   return __builtin_altivec_vavgub(__a, __b);
  1627. }
  1628.  
  1629. /* vec_vavgsh */
  1630.  
  1631. static __inline__ vector short __attribute__((__always_inline__))
  1632. vec_vavgsh(vector short __a, vector short __b) {
  1633.   return __builtin_altivec_vavgsh(__a, __b);
  1634. }
  1635.  
  1636. /* vec_vavguh */
  1637.  
  1638. static __inline__ vector unsigned short __attribute__((__always_inline__))
  1639. vec_vavguh(vector unsigned short __a, vector unsigned short __b) {
  1640.   return __builtin_altivec_vavguh(__a, __b);
  1641. }
  1642.  
  1643. /* vec_vavgsw */
  1644.  
  1645. static __inline__ vector int __attribute__((__always_inline__))
  1646. vec_vavgsw(vector int __a, vector int __b) {
  1647.   return __builtin_altivec_vavgsw(__a, __b);
  1648. }
  1649.  
  1650. /* vec_vavguw */
  1651.  
  1652. static __inline__ vector unsigned int __attribute__((__always_inline__))
  1653. vec_vavguw(vector unsigned int __a, vector unsigned int __b) {
  1654.   return __builtin_altivec_vavguw(__a, __b);
  1655. }
  1656.  
  1657. /* vec_ceil */
  1658.  
  1659. static __inline__ vector float __ATTRS_o_ai vec_ceil(vector float __a) {
  1660. #ifdef __VSX__
  1661.   return __builtin_vsx_xvrspip(__a);
  1662. #else
  1663.   return __builtin_altivec_vrfip(__a);
  1664. #endif
  1665. }
  1666.  
  1667. #ifdef __VSX__
  1668. static __inline__ vector double __ATTRS_o_ai vec_ceil(vector double __a) {
  1669.   return __builtin_vsx_xvrdpip(__a);
  1670. }
  1671. #endif
  1672.  
  1673. /* vec_roundp */
  1674. static __inline__ vector float __ATTRS_o_ai vec_roundp(vector float __a) {
  1675.   return vec_ceil(__a);
  1676. }
  1677.  
  1678. #ifdef __VSX__
  1679. static __inline__ vector double __ATTRS_o_ai vec_roundp(vector double __a) {
  1680.   return vec_ceil(__a);
  1681. }
  1682. #endif
  1683.  
  1684. /* vec_vrfip */
  1685.  
  1686. static __inline__ vector float __attribute__((__always_inline__))
  1687. vec_vrfip(vector float __a) {
  1688.   return __builtin_altivec_vrfip(__a);
  1689. }
  1690.  
  1691. /* vec_cmpb */
  1692.  
  1693. static __inline__ vector int __attribute__((__always_inline__))
  1694. vec_cmpb(vector float __a, vector float __b) {
  1695.   return __builtin_altivec_vcmpbfp(__a, __b);
  1696. }
  1697.  
  1698. /* vec_vcmpbfp */
  1699.  
  1700. static __inline__ vector int __attribute__((__always_inline__))
  1701. vec_vcmpbfp(vector float __a, vector float __b) {
  1702.   return __builtin_altivec_vcmpbfp(__a, __b);
  1703. }
  1704.  
  1705. /* vec_cmpeq */
  1706.  
  1707. static __inline__ vector bool char __ATTRS_o_ai
  1708. vec_cmpeq(vector signed char __a, vector signed char __b) {
  1709.   return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
  1710.                                                       (vector char)__b);
  1711. }
  1712.  
  1713. static __inline__ vector bool char __ATTRS_o_ai
  1714. vec_cmpeq(vector unsigned char __a, vector unsigned char __b) {
  1715.   return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
  1716.                                                       (vector char)__b);
  1717. }
  1718.  
  1719. static __inline__ vector bool char __ATTRS_o_ai
  1720. vec_cmpeq(vector bool char __a, vector bool char __b) {
  1721.   return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
  1722.                                                       (vector char)__b);
  1723. }
  1724.  
  1725. static __inline__ vector bool short __ATTRS_o_ai vec_cmpeq(vector short __a,
  1726.                                                            vector short __b) {
  1727.   return (vector bool short)__builtin_altivec_vcmpequh(__a, __b);
  1728. }
  1729.  
  1730. static __inline__ vector bool short __ATTRS_o_ai
  1731. vec_cmpeq(vector unsigned short __a, vector unsigned short __b) {
  1732.   return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,
  1733.                                                        (vector short)__b);
  1734. }
  1735.  
  1736. static __inline__ vector bool short __ATTRS_o_ai
  1737. vec_cmpeq(vector bool short __a, vector bool short __b) {
  1738.   return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,
  1739.                                                        (vector short)__b);
  1740. }
  1741.  
  1742. static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector int __a,
  1743.                                                          vector int __b) {
  1744.   return (vector bool int)__builtin_altivec_vcmpequw(__a, __b);
  1745. }
  1746.  
  1747. static __inline__ vector bool int __ATTRS_o_ai
  1748. vec_cmpeq(vector unsigned int __a, vector unsigned int __b) {
  1749.   return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,
  1750.                                                      (vector int)__b);
  1751. }
  1752.  
  1753. static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector bool int __a,
  1754.                                                          vector bool int __b) {
  1755.   return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,
  1756.                                                      (vector int)__b);
  1757. }
  1758.  
  1759. #ifdef __POWER8_VECTOR__
  1760. static __inline__ vector bool long long __ATTRS_o_ai
  1761. vec_cmpeq(vector signed long long __a, vector signed long long __b) {
  1762.   return (vector bool long long)__builtin_altivec_vcmpequd(__a, __b);
  1763. }
  1764.  
  1765. static __inline__ vector bool long long __ATTRS_o_ai
  1766. vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {
  1767.   return (vector bool long long)__builtin_altivec_vcmpequd(
  1768.       (vector long long)__a, (vector long long)__b);
  1769. }
  1770.  
  1771. static __inline__ vector bool long long __ATTRS_o_ai
  1772. vec_cmpeq(vector bool long long __a, vector bool long long __b) {
  1773.   return (vector bool long long)__builtin_altivec_vcmpequd(
  1774.       (vector long long)__a, (vector long long)__b);
  1775. }
  1776. #elif defined(__VSX__)
  1777. static __inline__ vector bool long long __ATTRS_o_ai
  1778. vec_cmpeq(vector signed long long __a, vector signed long long __b) {
  1779.   vector bool int __wordcmp =
  1780.       vec_cmpeq((vector signed int)__a, (vector signed int)__b);
  1781. #ifdef __LITTLE_ENDIAN__
  1782.   __wordcmp &= __builtin_shufflevector(__wordcmp, __wordcmp, 3, 0, 1, 2);
  1783.   return (vector bool long long)__builtin_shufflevector(__wordcmp, __wordcmp, 1,
  1784.                                                         1, 3, 3);
  1785. #else
  1786.   __wordcmp &= __builtin_shufflevector(__wordcmp, __wordcmp, 1, 2, 3, 0);
  1787.   return (vector bool long long)__builtin_shufflevector(__wordcmp, __wordcmp, 0,
  1788.                                                         0, 2, 2);
  1789. #endif
  1790. }
  1791.  
  1792. static __inline__ vector bool long long __ATTRS_o_ai
  1793. vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {
  1794.   return vec_cmpeq((vector signed long long)__a, (vector signed long long)__b);
  1795. }
  1796.  
  1797. static __inline__ vector bool long long __ATTRS_o_ai
  1798. vec_cmpeq(vector bool long long __a, vector bool long long __b) {
  1799.   return vec_cmpeq((vector signed long long)__a, (vector signed long long)__b);
  1800. }
  1801. #endif
  1802.  
  1803. static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector float __a,
  1804.                                                          vector float __b) {
  1805. #ifdef __VSX__
  1806.   return (vector bool int)__builtin_vsx_xvcmpeqsp(__a, __b);
  1807. #else
  1808.   return (vector bool int)__builtin_altivec_vcmpeqfp(__a, __b);
  1809. #endif
  1810. }
  1811.  
  1812. #ifdef __VSX__
  1813. static __inline__ vector bool long long __ATTRS_o_ai
  1814. vec_cmpeq(vector double __a, vector double __b) {
  1815.   return (vector bool long long)__builtin_vsx_xvcmpeqdp(__a, __b);
  1816. }
  1817. #endif
  1818.  
  1819. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  1820. static __inline__ vector bool __int128 __ATTRS_o_ai
  1821. vec_cmpeq(vector signed __int128 __a, vector signed __int128 __b) {
  1822.   return (vector bool __int128)__builtin_altivec_vcmpequq(
  1823.       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
  1824. }
  1825.  
  1826. static __inline__ vector bool __int128 __ATTRS_o_ai
  1827. vec_cmpeq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  1828.   return (vector bool __int128)__builtin_altivec_vcmpequq(
  1829.       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
  1830. }
  1831.  
  1832. static __inline__ vector bool __int128 __ATTRS_o_ai
  1833. vec_cmpeq(vector bool __int128 __a, vector bool  __int128 __b) {
  1834.   return (vector bool __int128)__builtin_altivec_vcmpequq(
  1835.       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
  1836. }
  1837. #endif
  1838.  
  1839. #ifdef __POWER9_VECTOR__
  1840. /* vec_cmpne */
  1841.  
  1842. static __inline__ vector bool char __ATTRS_o_ai
  1843. vec_cmpne(vector bool char __a, vector bool char __b) {
  1844.   return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
  1845.                                                      (vector char)__b);
  1846. }
  1847.  
  1848. static __inline__ vector bool char __ATTRS_o_ai
  1849. vec_cmpne(vector signed char __a, vector signed char __b) {
  1850.   return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
  1851.                                                      (vector char)__b);
  1852. }
  1853.  
  1854. static __inline__ vector bool char __ATTRS_o_ai
  1855. vec_cmpne(vector unsigned char __a, vector unsigned char __b) {
  1856.   return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
  1857.                                                      (vector char)__b);
  1858. }
  1859.  
  1860. static __inline__ vector bool short __ATTRS_o_ai
  1861. vec_cmpne(vector bool short __a, vector bool short __b) {
  1862.   return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
  1863.                                                       (vector short)__b);
  1864. }
  1865.  
  1866. static __inline__ vector bool short __ATTRS_o_ai
  1867. vec_cmpne(vector signed short __a, vector signed short __b) {
  1868.   return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
  1869.                                                       (vector short)__b);
  1870. }
  1871.  
  1872. static __inline__ vector bool short __ATTRS_o_ai
  1873. vec_cmpne(vector unsigned short __a, vector unsigned short __b) {
  1874.   return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
  1875.                                                       (vector short)__b);
  1876. }
  1877.  
  1878. static __inline__ vector bool int __ATTRS_o_ai
  1879. vec_cmpne(vector bool int __a, vector bool int __b) {
  1880.   return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
  1881.                                                     (vector int)__b);
  1882. }
  1883.  
  1884. static __inline__ vector bool int __ATTRS_o_ai
  1885. vec_cmpne(vector signed int __a, vector signed int __b) {
  1886.   return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
  1887.                                                     (vector int)__b);
  1888. }
  1889.  
  1890. static __inline__ vector bool int __ATTRS_o_ai
  1891. vec_cmpne(vector unsigned int __a, vector unsigned int __b) {
  1892.   return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
  1893.                                                     (vector int)__b);
  1894. }
  1895.  
  1896. static __inline__ vector bool int __ATTRS_o_ai
  1897. vec_cmpne(vector float __a, vector float __b) {
  1898.   return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
  1899.                                                     (vector int)__b);
  1900. }
  1901.  
  1902. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  1903. static __inline__ vector bool __int128 __ATTRS_o_ai
  1904. vec_cmpne(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  1905.   return (vector bool __int128)~(__builtin_altivec_vcmpequq(
  1906.       (vector unsigned __int128)__a, (vector unsigned __int128)__b));
  1907. }
  1908.  
  1909. static __inline__ vector bool __int128 __ATTRS_o_ai
  1910. vec_cmpne(vector signed __int128 __a, vector signed __int128 __b) {
  1911.   return (vector bool __int128)~(__builtin_altivec_vcmpequq(
  1912.       (vector unsigned __int128)__a, (vector unsigned __int128)__b));
  1913. }
  1914.  
  1915. static __inline__ vector bool __int128 __ATTRS_o_ai
  1916. vec_cmpne(vector bool __int128 __a, vector bool __int128 __b) {
  1917.   return (vector bool __int128)~(__builtin_altivec_vcmpequq(
  1918.       (vector unsigned __int128)__a, (vector unsigned __int128)__b));
  1919. }
  1920. #endif
  1921.  
  1922. /* vec_cmpnez */
  1923.  
  1924. static __inline__ vector bool char __ATTRS_o_ai
  1925. vec_cmpnez(vector signed char __a, vector signed char __b) {
  1926.   return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,
  1927.                                                       (vector char)__b);
  1928. }
  1929.  
  1930. static __inline__ vector bool char __ATTRS_o_ai
  1931. vec_cmpnez(vector unsigned char __a, vector unsigned char __b) {
  1932.   return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,
  1933.                                                       (vector char)__b);
  1934. }
  1935.  
  1936. static __inline__ vector bool short __ATTRS_o_ai
  1937. vec_cmpnez(vector signed short __a, vector signed short __b) {
  1938.   return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,
  1939.                                                        (vector short)__b);
  1940. }
  1941.  
  1942. static __inline__ vector bool short __ATTRS_o_ai
  1943. vec_cmpnez(vector unsigned short __a, vector unsigned short __b) {
  1944.   return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,
  1945.                                                        (vector short)__b);
  1946. }
  1947.  
  1948. static __inline__ vector bool int __ATTRS_o_ai
  1949. vec_cmpnez(vector signed int __a, vector signed int __b) {
  1950.   return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,
  1951.                                                      (vector int)__b);
  1952. }
  1953.  
  1954. static __inline__ vector bool int __ATTRS_o_ai
  1955. vec_cmpnez(vector unsigned int __a, vector unsigned int __b) {
  1956.   return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,
  1957.                                                      (vector int)__b);
  1958. }
  1959.  
  1960. static __inline__ signed int __ATTRS_o_ai
  1961. vec_cntlz_lsbb(vector signed char __a) {
  1962. #ifdef __LITTLE_ENDIAN__
  1963.   return __builtin_altivec_vctzlsbb((vector unsigned char)__a);
  1964. #else
  1965.   return __builtin_altivec_vclzlsbb((vector unsigned char)__a);
  1966. #endif
  1967. }
  1968.  
  1969. static __inline__ signed int __ATTRS_o_ai
  1970. vec_cntlz_lsbb(vector unsigned char __a) {
  1971. #ifdef __LITTLE_ENDIAN__
  1972.   return __builtin_altivec_vctzlsbb((vector unsigned char)__a);
  1973. #else
  1974.   return __builtin_altivec_vclzlsbb(__a);
  1975. #endif
  1976. }
  1977.  
  1978. static __inline__ signed int __ATTRS_o_ai
  1979. vec_cnttz_lsbb(vector signed char __a) {
  1980. #ifdef __LITTLE_ENDIAN__
  1981.   return __builtin_altivec_vclzlsbb((vector unsigned char)__a);
  1982. #else
  1983.   return __builtin_altivec_vctzlsbb((vector unsigned char)__a);
  1984. #endif
  1985. }
  1986.  
  1987. static __inline__ signed int __ATTRS_o_ai
  1988. vec_cnttz_lsbb(vector unsigned char __a) {
  1989. #ifdef __LITTLE_ENDIAN__
  1990.   return __builtin_altivec_vclzlsbb(__a);
  1991. #else
  1992.   return __builtin_altivec_vctzlsbb(__a);
  1993. #endif
  1994. }
  1995.  
  1996. static __inline__ vector unsigned int __ATTRS_o_ai
  1997. vec_parity_lsbb(vector unsigned int __a) {
  1998.   return __builtin_altivec_vprtybw(__a);
  1999. }
  2000.  
  2001. static __inline__ vector unsigned int __ATTRS_o_ai
  2002. vec_parity_lsbb(vector signed int __a) {
  2003.   return __builtin_altivec_vprtybw((vector unsigned int)__a);
  2004. }
  2005.  
  2006. #ifdef __SIZEOF_INT128__
  2007. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  2008. vec_parity_lsbb(vector unsigned __int128 __a) {
  2009.   return __builtin_altivec_vprtybq(__a);
  2010. }
  2011.  
  2012. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  2013. vec_parity_lsbb(vector signed __int128 __a) {
  2014.   return __builtin_altivec_vprtybq((vector unsigned __int128)__a);
  2015. }
  2016. #endif
  2017.  
  2018. static __inline__ vector unsigned long long __ATTRS_o_ai
  2019. vec_parity_lsbb(vector unsigned long long __a) {
  2020.   return __builtin_altivec_vprtybd(__a);
  2021. }
  2022.  
  2023. static __inline__ vector unsigned long long __ATTRS_o_ai
  2024. vec_parity_lsbb(vector signed long long __a) {
  2025.   return __builtin_altivec_vprtybd((vector unsigned long long)__a);
  2026. }
  2027.  
  2028. #else
  2029. /* vec_cmpne */
  2030.  
  2031. static __inline__ vector bool char __ATTRS_o_ai
  2032. vec_cmpne(vector bool char __a, vector bool char __b) {
  2033.   return ~(vec_cmpeq(__a, __b));
  2034. }
  2035.  
  2036. static __inline__ vector bool char __ATTRS_o_ai
  2037. vec_cmpne(vector signed char __a, vector signed char __b) {
  2038.   return ~(vec_cmpeq(__a, __b));
  2039. }
  2040.  
  2041. static __inline__ vector bool char __ATTRS_o_ai
  2042. vec_cmpne(vector unsigned char __a, vector unsigned char __b) {
  2043.   return ~(vec_cmpeq(__a, __b));
  2044. }
  2045.  
  2046. static __inline__ vector bool short __ATTRS_o_ai
  2047. vec_cmpne(vector bool short __a, vector bool short __b) {
  2048.   return ~(vec_cmpeq(__a, __b));
  2049. }
  2050.  
  2051. static __inline__ vector bool short __ATTRS_o_ai
  2052. vec_cmpne(vector signed short __a, vector signed short __b) {
  2053.   return ~(vec_cmpeq(__a, __b));
  2054. }
  2055.  
  2056. static __inline__ vector bool short __ATTRS_o_ai
  2057. vec_cmpne(vector unsigned short __a, vector unsigned short __b) {
  2058.   return ~(vec_cmpeq(__a, __b));
  2059. }
  2060.  
  2061. static __inline__ vector bool int __ATTRS_o_ai
  2062. vec_cmpne(vector bool int __a, vector bool int __b) {
  2063.   return ~(vec_cmpeq(__a, __b));
  2064. }
  2065.  
  2066. static __inline__ vector bool int __ATTRS_o_ai
  2067. vec_cmpne(vector signed int __a, vector signed int __b) {
  2068.   return ~(vec_cmpeq(__a, __b));
  2069. }
  2070.  
  2071. static __inline__ vector bool int __ATTRS_o_ai
  2072. vec_cmpne(vector unsigned int __a, vector unsigned int __b) {
  2073.   return ~(vec_cmpeq(__a, __b));
  2074. }
  2075.  
  2076. static __inline__ vector bool int __ATTRS_o_ai
  2077. vec_cmpne(vector float __a, vector float __b) {
  2078.   return ~(vec_cmpeq(__a, __b));
  2079. }
  2080. #endif
  2081.  
  2082. #ifdef __POWER8_VECTOR__
  2083. static __inline__ vector bool long long __ATTRS_o_ai
  2084. vec_cmpne(vector bool long long __a, vector bool long long __b) {
  2085.   return (vector bool long long)
  2086.     ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
  2087. }
  2088.  
  2089. static __inline__ vector bool long long __ATTRS_o_ai
  2090. vec_cmpne(vector signed long long __a, vector signed long long __b) {
  2091.   return (vector bool long long)
  2092.     ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
  2093. }
  2094.  
  2095. static __inline__ vector bool long long __ATTRS_o_ai
  2096. vec_cmpne(vector unsigned long long __a, vector unsigned long long __b) {
  2097.   return (vector bool long long)
  2098.     ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
  2099. }
  2100. #elif defined(__VSX__)
  2101. static __inline__ vector bool long long __ATTRS_o_ai
  2102. vec_cmpne(vector bool long long __a, vector bool long long __b) {
  2103.   return (vector bool long long)~(
  2104.       vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
  2105. }
  2106.  
  2107. static __inline__ vector bool long long __ATTRS_o_ai
  2108. vec_cmpne(vector signed long long __a, vector signed long long __b) {
  2109.   return (vector bool long long)~(
  2110.       vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
  2111. }
  2112.  
  2113. static __inline__ vector bool long long __ATTRS_o_ai
  2114. vec_cmpne(vector unsigned long long __a, vector unsigned long long __b) {
  2115.   return (vector bool long long)~(
  2116.       vec_cmpeq((vector signed long long)__a, (vector signed long long)__b));
  2117. }
  2118. #endif
  2119.  
  2120. #ifdef __VSX__
  2121. static __inline__ vector bool long long __ATTRS_o_ai
  2122. vec_cmpne(vector double __a, vector double __b) {
  2123.   return (vector bool long long)
  2124.     ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
  2125. }
  2126. #endif
  2127.  
  2128. /* vec_cmpgt */
  2129.  
  2130. static __inline__ vector bool char __ATTRS_o_ai
  2131. vec_cmpgt(vector signed char __a, vector signed char __b) {
  2132.   return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
  2133. }
  2134.  
  2135. static __inline__ vector bool char __ATTRS_o_ai
  2136. vec_cmpgt(vector unsigned char __a, vector unsigned char __b) {
  2137.   return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
  2138. }
  2139.  
  2140. static __inline__ vector bool short __ATTRS_o_ai vec_cmpgt(vector short __a,
  2141.                                                            vector short __b) {
  2142.   return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
  2143. }
  2144.  
  2145. static __inline__ vector bool short __ATTRS_o_ai
  2146. vec_cmpgt(vector unsigned short __a, vector unsigned short __b) {
  2147.   return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
  2148. }
  2149.  
  2150. static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector int __a,
  2151.                                                          vector int __b) {
  2152.   return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
  2153. }
  2154.  
  2155. static __inline__ vector bool int __ATTRS_o_ai
  2156. vec_cmpgt(vector unsigned int __a, vector unsigned int __b) {
  2157.   return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
  2158. }
  2159.  
  2160. #ifdef __POWER8_VECTOR__
  2161. static __inline__ vector bool long long __ATTRS_o_ai
  2162. vec_cmpgt(vector signed long long __a, vector signed long long __b) {
  2163.   return (vector bool long long)__builtin_altivec_vcmpgtsd(__a, __b);
  2164. }
  2165.  
  2166. static __inline__ vector bool long long __ATTRS_o_ai
  2167. vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {
  2168.   return (vector bool long long)__builtin_altivec_vcmpgtud(__a, __b);
  2169. }
  2170. #elif defined(__VSX__)
  2171. static __inline__ vector bool long long __ATTRS_o_ai
  2172. vec_cmpgt(vector signed long long __a, vector signed long long __b) {
  2173.   vector signed int __sgtw = (vector signed int)vec_cmpgt(
  2174.       (vector signed int)__a, (vector signed int)__b);
  2175.   vector unsigned int __ugtw = (vector unsigned int)vec_cmpgt(
  2176.       (vector unsigned int)__a, (vector unsigned int)__b);
  2177.   vector unsigned int __eqw = (vector unsigned int)vec_cmpeq(
  2178.       (vector signed int)__a, (vector signed int)__b);
  2179. #ifdef __LITTLE_ENDIAN__
  2180.   __ugtw = __builtin_shufflevector(__ugtw, __ugtw, 3, 0, 1, 2) & __eqw;
  2181.   __sgtw |= (vector signed int)__ugtw;
  2182.   return (vector bool long long)__builtin_shufflevector(__sgtw, __sgtw, 1, 1, 3,
  2183.                                                         3);
  2184. #else
  2185.   __ugtw = __builtin_shufflevector(__ugtw, __ugtw, 1, 2, 3, 0) & __eqw;
  2186.   __sgtw |= (vector signed int)__ugtw;
  2187.   return (vector bool long long)__builtin_shufflevector(__sgtw, __sgtw, 0, 0, 2,
  2188.                                                         2);
  2189. #endif
  2190. }
  2191.  
  2192. static __inline__ vector bool long long __ATTRS_o_ai
  2193. vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {
  2194.   vector unsigned int __ugtw = (vector unsigned int)vec_cmpgt(
  2195.       (vector unsigned int)__a, (vector unsigned int)__b);
  2196.   vector unsigned int __eqw = (vector unsigned int)vec_cmpeq(
  2197.       (vector signed int)__a, (vector signed int)__b);
  2198. #ifdef __LITTLE_ENDIAN__
  2199.   __eqw = __builtin_shufflevector(__ugtw, __ugtw, 3, 0, 1, 2) & __eqw;
  2200.   __ugtw |= __eqw;
  2201.   return (vector bool long long)__builtin_shufflevector(__ugtw, __ugtw, 1, 1, 3,
  2202.                                                         3);
  2203. #else
  2204.   __eqw = __builtin_shufflevector(__ugtw, __ugtw, 1, 2, 3, 0) & __eqw;
  2205.   __ugtw |= __eqw;
  2206.   return (vector bool long long)__builtin_shufflevector(__ugtw, __ugtw, 0, 0, 2,
  2207.                                                         2);
  2208. #endif
  2209. }
  2210. #endif
  2211.  
  2212. static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector float __a,
  2213.                                                          vector float __b) {
  2214. #ifdef __VSX__
  2215.   return (vector bool int)__builtin_vsx_xvcmpgtsp(__a, __b);
  2216. #else
  2217.   return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
  2218. #endif
  2219. }
  2220.  
  2221. #ifdef __VSX__
  2222. static __inline__ vector bool long long __ATTRS_o_ai
  2223. vec_cmpgt(vector double __a, vector double __b) {
  2224.   return (vector bool long long)__builtin_vsx_xvcmpgtdp(__a, __b);
  2225. }
  2226. #endif
  2227.  
  2228. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  2229. static __inline__ vector bool __int128 __ATTRS_o_ai
  2230. vec_cmpgt(vector signed __int128 __a, vector signed __int128 __b) {
  2231.   return (vector bool __int128)__builtin_altivec_vcmpgtsq(__a, __b);
  2232. }
  2233.  
  2234. static __inline__ vector bool __int128 __ATTRS_o_ai
  2235. vec_cmpgt(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  2236.   return (vector bool __int128)__builtin_altivec_vcmpgtuq(__a, __b);
  2237. }
  2238. #endif
  2239.  
  2240. /* vec_cmpge */
  2241.  
  2242. static __inline__ vector bool char __ATTRS_o_ai
  2243. vec_cmpge(vector signed char __a, vector signed char __b) {
  2244.   return ~(vec_cmpgt(__b, __a));
  2245. }
  2246.  
  2247. static __inline__ vector bool char __ATTRS_o_ai
  2248. vec_cmpge(vector unsigned char __a, vector unsigned char __b) {
  2249.   return ~(vec_cmpgt(__b, __a));
  2250. }
  2251.  
  2252. static __inline__ vector bool short __ATTRS_o_ai
  2253. vec_cmpge(vector signed short __a, vector signed short __b) {
  2254.   return ~(vec_cmpgt(__b, __a));
  2255. }
  2256.  
  2257. static __inline__ vector bool short __ATTRS_o_ai
  2258. vec_cmpge(vector unsigned short __a, vector unsigned short __b) {
  2259.   return ~(vec_cmpgt(__b, __a));
  2260. }
  2261.  
  2262. static __inline__ vector bool int __ATTRS_o_ai
  2263. vec_cmpge(vector signed int __a, vector signed int __b) {
  2264.   return ~(vec_cmpgt(__b, __a));
  2265. }
  2266.  
  2267. static __inline__ vector bool int __ATTRS_o_ai
  2268. vec_cmpge(vector unsigned int __a, vector unsigned int __b) {
  2269.   return ~(vec_cmpgt(__b, __a));
  2270. }
  2271.  
  2272. static __inline__ vector bool int __ATTRS_o_ai vec_cmpge(vector float __a,
  2273.                                                          vector float __b) {
  2274. #ifdef __VSX__
  2275.   return (vector bool int)__builtin_vsx_xvcmpgesp(__a, __b);
  2276. #else
  2277.   return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
  2278. #endif
  2279. }
  2280.  
  2281. #ifdef __VSX__
  2282. static __inline__ vector bool long long __ATTRS_o_ai
  2283. vec_cmpge(vector double __a, vector double __b) {
  2284.   return (vector bool long long)__builtin_vsx_xvcmpgedp(__a, __b);
  2285. }
  2286.  
  2287. static __inline__ vector bool long long __ATTRS_o_ai
  2288. vec_cmpge(vector signed long long __a, vector signed long long __b) {
  2289.   return ~(vec_cmpgt(__b, __a));
  2290. }
  2291.  
  2292. static __inline__ vector bool long long __ATTRS_o_ai
  2293. vec_cmpge(vector unsigned long long __a, vector unsigned long long __b) {
  2294.   return ~(vec_cmpgt(__b, __a));
  2295. }
  2296. #endif
  2297.  
  2298. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  2299. static __inline__ vector bool __int128 __ATTRS_o_ai
  2300. vec_cmpge(vector signed __int128 __a, vector signed __int128 __b) {
  2301.   return ~(vec_cmpgt(__b, __a));
  2302. }
  2303.  
  2304. static __inline__ vector bool __int128 __ATTRS_o_ai
  2305. vec_cmpge(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  2306.   return ~(vec_cmpgt(__b, __a));
  2307. }
  2308. #endif
  2309.  
  2310. /* vec_vcmpgefp */
  2311.  
  2312. static __inline__ vector bool int __attribute__((__always_inline__))
  2313. vec_vcmpgefp(vector float __a, vector float __b) {
  2314.   return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
  2315. }
  2316.  
  2317. /* vec_vcmpgtsb */
  2318.  
  2319. static __inline__ vector bool char __attribute__((__always_inline__))
  2320. vec_vcmpgtsb(vector signed char __a, vector signed char __b) {
  2321.   return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
  2322. }
  2323.  
  2324. /* vec_vcmpgtub */
  2325.  
  2326. static __inline__ vector bool char __attribute__((__always_inline__))
  2327. vec_vcmpgtub(vector unsigned char __a, vector unsigned char __b) {
  2328.   return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
  2329. }
  2330.  
  2331. /* vec_vcmpgtsh */
  2332.  
  2333. static __inline__ vector bool short __attribute__((__always_inline__))
  2334. vec_vcmpgtsh(vector short __a, vector short __b) {
  2335.   return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
  2336. }
  2337.  
  2338. /* vec_vcmpgtuh */
  2339.  
  2340. static __inline__ vector bool short __attribute__((__always_inline__))
  2341. vec_vcmpgtuh(vector unsigned short __a, vector unsigned short __b) {
  2342.   return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
  2343. }
  2344.  
  2345. /* vec_vcmpgtsw */
  2346.  
  2347. static __inline__ vector bool int __attribute__((__always_inline__))
  2348. vec_vcmpgtsw(vector int __a, vector int __b) {
  2349.   return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
  2350. }
  2351.  
  2352. /* vec_vcmpgtuw */
  2353.  
  2354. static __inline__ vector bool int __attribute__((__always_inline__))
  2355. vec_vcmpgtuw(vector unsigned int __a, vector unsigned int __b) {
  2356.   return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
  2357. }
  2358.  
  2359. /* vec_vcmpgtfp */
  2360.  
  2361. static __inline__ vector bool int __attribute__((__always_inline__))
  2362. vec_vcmpgtfp(vector float __a, vector float __b) {
  2363.   return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
  2364. }
  2365.  
  2366. /* vec_cmple */
  2367.  
  2368. static __inline__ vector bool char __ATTRS_o_ai
  2369. vec_cmple(vector signed char __a, vector signed char __b) {
  2370.   return vec_cmpge(__b, __a);
  2371. }
  2372.  
  2373. static __inline__ vector bool char __ATTRS_o_ai
  2374. vec_cmple(vector unsigned char __a, vector unsigned char __b) {
  2375.   return vec_cmpge(__b, __a);
  2376. }
  2377.  
  2378. static __inline__ vector bool short __ATTRS_o_ai
  2379. vec_cmple(vector signed short __a, vector signed short __b) {
  2380.   return vec_cmpge(__b, __a);
  2381. }
  2382.  
  2383. static __inline__ vector bool short __ATTRS_o_ai
  2384. vec_cmple(vector unsigned short __a, vector unsigned short __b) {
  2385.   return vec_cmpge(__b, __a);
  2386. }
  2387.  
  2388. static __inline__ vector bool int __ATTRS_o_ai
  2389. vec_cmple(vector signed int __a, vector signed int __b) {
  2390.   return vec_cmpge(__b, __a);
  2391. }
  2392.  
  2393. static __inline__ vector bool int __ATTRS_o_ai
  2394. vec_cmple(vector unsigned int __a, vector unsigned int __b) {
  2395.   return vec_cmpge(__b, __a);
  2396. }
  2397.  
  2398. static __inline__ vector bool int __ATTRS_o_ai vec_cmple(vector float __a,
  2399.                                                          vector float __b) {
  2400.   return vec_cmpge(__b, __a);
  2401. }
  2402.  
  2403. #ifdef __VSX__
  2404. static __inline__ vector bool long long __ATTRS_o_ai
  2405. vec_cmple(vector double __a, vector double __b) {
  2406.   return vec_cmpge(__b, __a);
  2407. }
  2408.  
  2409. static __inline__ vector bool long long __ATTRS_o_ai
  2410. vec_cmple(vector signed long long __a, vector signed long long __b) {
  2411.   return vec_cmpge(__b, __a);
  2412. }
  2413.  
  2414. static __inline__ vector bool long long __ATTRS_o_ai
  2415. vec_cmple(vector unsigned long long __a, vector unsigned long long __b) {
  2416.   return vec_cmpge(__b, __a);
  2417. }
  2418. #endif
  2419.  
  2420. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  2421. static __inline__ vector bool __int128 __ATTRS_o_ai
  2422. vec_cmple(vector signed __int128 __a, vector signed __int128 __b) {
  2423.   return vec_cmpge(__b, __a);
  2424. }
  2425.  
  2426. static __inline__ vector bool __int128 __ATTRS_o_ai
  2427. vec_cmple(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  2428.   return vec_cmpge(__b, __a);
  2429. }
  2430. #endif
  2431.  
  2432. /* vec_cmplt */
  2433.  
  2434. static __inline__ vector bool char __ATTRS_o_ai
  2435. vec_cmplt(vector signed char __a, vector signed char __b) {
  2436.   return vec_cmpgt(__b, __a);
  2437. }
  2438.  
  2439. static __inline__ vector bool char __ATTRS_o_ai
  2440. vec_cmplt(vector unsigned char __a, vector unsigned char __b) {
  2441.   return vec_cmpgt(__b, __a);
  2442. }
  2443.  
  2444. static __inline__ vector bool short __ATTRS_o_ai vec_cmplt(vector short __a,
  2445.                                                            vector short __b) {
  2446.   return vec_cmpgt(__b, __a);
  2447. }
  2448.  
  2449. static __inline__ vector bool short __ATTRS_o_ai
  2450. vec_cmplt(vector unsigned short __a, vector unsigned short __b) {
  2451.   return vec_cmpgt(__b, __a);
  2452. }
  2453.  
  2454. static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector int __a,
  2455.                                                          vector int __b) {
  2456.   return vec_cmpgt(__b, __a);
  2457. }
  2458.  
  2459. static __inline__ vector bool int __ATTRS_o_ai
  2460. vec_cmplt(vector unsigned int __a, vector unsigned int __b) {
  2461.   return vec_cmpgt(__b, __a);
  2462. }
  2463.  
  2464. static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector float __a,
  2465.                                                          vector float __b) {
  2466.   return vec_cmpgt(__b, __a);
  2467. }
  2468.  
  2469. #ifdef __VSX__
  2470. static __inline__ vector bool long long __ATTRS_o_ai
  2471. vec_cmplt(vector double __a, vector double __b) {
  2472.   return vec_cmpgt(__b, __a);
  2473. }
  2474. #endif
  2475.  
  2476. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  2477. static __inline__ vector bool __int128 __ATTRS_o_ai
  2478. vec_cmplt(vector signed __int128 __a, vector signed __int128 __b) {
  2479.   return vec_cmpgt(__b, __a);
  2480. }
  2481.  
  2482. static __inline__ vector bool __int128 __ATTRS_o_ai
  2483. vec_cmplt(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  2484.   return vec_cmpgt(__b, __a);
  2485. }
  2486. #endif
  2487.  
  2488. #ifdef __VSX__
  2489. static __inline__ vector bool long long __ATTRS_o_ai
  2490. vec_cmplt(vector signed long long __a, vector signed long long __b) {
  2491.   return vec_cmpgt(__b, __a);
  2492. }
  2493.  
  2494. static __inline__ vector bool long long __ATTRS_o_ai
  2495. vec_cmplt(vector unsigned long long __a, vector unsigned long long __b) {
  2496.   return vec_cmpgt(__b, __a);
  2497. }
  2498. #endif
  2499.  
  2500. #ifdef __POWER8_VECTOR__
  2501. /* vec_popcnt */
  2502.  
  2503. static __inline__ vector unsigned char __ATTRS_o_ai
  2504. vec_popcnt(vector signed char __a) {
  2505.   return (vector unsigned char)__builtin_altivec_vpopcntb(
  2506.       (vector unsigned char)__a);
  2507. }
  2508. static __inline__ vector unsigned char __ATTRS_o_ai
  2509. vec_popcnt(vector unsigned char __a) {
  2510.   return __builtin_altivec_vpopcntb(__a);
  2511. }
  2512. static __inline__ vector unsigned short __ATTRS_o_ai
  2513. vec_popcnt(vector signed short __a) {
  2514.   return (vector unsigned short)__builtin_altivec_vpopcnth(
  2515.       (vector unsigned short)__a);
  2516. }
  2517. static __inline__ vector unsigned short __ATTRS_o_ai
  2518. vec_popcnt(vector unsigned short __a) {
  2519.   return __builtin_altivec_vpopcnth(__a);
  2520. }
  2521. static __inline__ vector unsigned int __ATTRS_o_ai
  2522. vec_popcnt(vector signed int __a) {
  2523.   return __builtin_altivec_vpopcntw((vector unsigned int)__a);
  2524. }
  2525. static __inline__ vector unsigned int __ATTRS_o_ai
  2526. vec_popcnt(vector unsigned int __a) {
  2527.   return __builtin_altivec_vpopcntw(__a);
  2528. }
  2529. static __inline__ vector unsigned long long __ATTRS_o_ai
  2530. vec_popcnt(vector signed long long __a) {
  2531.   return __builtin_altivec_vpopcntd((vector unsigned long long)__a);
  2532. }
  2533. static __inline__ vector unsigned long long __ATTRS_o_ai
  2534. vec_popcnt(vector unsigned long long __a) {
  2535.   return __builtin_altivec_vpopcntd(__a);
  2536. }
  2537.  
  2538. #define vec_vclz vec_cntlz
  2539. /* vec_cntlz */
  2540.  
  2541. static __inline__ vector signed char __ATTRS_o_ai
  2542. vec_cntlz(vector signed char __a) {
  2543.   return (vector signed char)__builtin_altivec_vclzb((vector unsigned char)__a);
  2544. }
  2545. static __inline__ vector unsigned char __ATTRS_o_ai
  2546. vec_cntlz(vector unsigned char __a) {
  2547.   return __builtin_altivec_vclzb(__a);
  2548. }
  2549. static __inline__ vector signed short __ATTRS_o_ai
  2550. vec_cntlz(vector signed short __a) {
  2551.   return (vector signed short)__builtin_altivec_vclzh(
  2552.       (vector unsigned short)__a);
  2553. }
  2554. static __inline__ vector unsigned short __ATTRS_o_ai
  2555. vec_cntlz(vector unsigned short __a) {
  2556.   return __builtin_altivec_vclzh(__a);
  2557. }
  2558. static __inline__ vector signed int __ATTRS_o_ai
  2559. vec_cntlz(vector signed int __a) {
  2560.   return (vector signed int)__builtin_altivec_vclzw((vector unsigned int)__a);
  2561. }
  2562. static __inline__ vector unsigned int __ATTRS_o_ai
  2563. vec_cntlz(vector unsigned int __a) {
  2564.   return __builtin_altivec_vclzw(__a);
  2565. }
  2566. static __inline__ vector signed long long __ATTRS_o_ai
  2567. vec_cntlz(vector signed long long __a) {
  2568.   return (vector signed long long)__builtin_altivec_vclzd(
  2569.       (vector unsigned long long)__a);
  2570. }
  2571. static __inline__ vector unsigned long long __ATTRS_o_ai
  2572. vec_cntlz(vector unsigned long long __a) {
  2573.   return __builtin_altivec_vclzd(__a);
  2574. }
  2575. #endif
  2576.  
  2577. #ifdef __POWER9_VECTOR__
  2578.  
  2579. /* vec_cnttz */
  2580.  
  2581. static __inline__ vector signed char __ATTRS_o_ai
  2582. vec_cnttz(vector signed char __a) {
  2583.   return (vector signed char)__builtin_altivec_vctzb((vector unsigned char)__a);
  2584. }
  2585. static __inline__ vector unsigned char __ATTRS_o_ai
  2586. vec_cnttz(vector unsigned char __a) {
  2587.   return __builtin_altivec_vctzb(__a);
  2588. }
  2589. static __inline__ vector signed short __ATTRS_o_ai
  2590. vec_cnttz(vector signed short __a) {
  2591.   return (vector signed short)__builtin_altivec_vctzh(
  2592.       (vector unsigned short)__a);
  2593. }
  2594. static __inline__ vector unsigned short __ATTRS_o_ai
  2595. vec_cnttz(vector unsigned short __a) {
  2596.   return __builtin_altivec_vctzh(__a);
  2597. }
  2598. static __inline__ vector signed int __ATTRS_o_ai
  2599. vec_cnttz(vector signed int __a) {
  2600.   return (vector signed int)__builtin_altivec_vctzw((vector unsigned int)__a);
  2601. }
  2602. static __inline__ vector unsigned int __ATTRS_o_ai
  2603. vec_cnttz(vector unsigned int __a) {
  2604.   return __builtin_altivec_vctzw(__a);
  2605. }
  2606. static __inline__ vector signed long long __ATTRS_o_ai
  2607. vec_cnttz(vector signed long long __a) {
  2608.   return (vector signed long long)__builtin_altivec_vctzd(
  2609.       (vector unsigned long long)__a);
  2610. }
  2611. static __inline__ vector unsigned long long __ATTRS_o_ai
  2612. vec_cnttz(vector unsigned long long __a) {
  2613.   return __builtin_altivec_vctzd(__a);
  2614. }
  2615.  
  2616. /* vec_first_match_index */
  2617.  
  2618. static __inline__ unsigned __ATTRS_o_ai
  2619. vec_first_match_index(vector signed char __a, vector signed char __b) {
  2620.   vector unsigned long long __res =
  2621. #ifdef __LITTLE_ENDIAN__
  2622.     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
  2623. #else
  2624.     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
  2625. #endif
  2626.   if (__res[0] == 64) {
  2627.     return (__res[1] + 64) >> 3;
  2628.   }
  2629.   return __res[0] >> 3;
  2630. }
  2631.  
  2632. static __inline__ unsigned __ATTRS_o_ai
  2633. vec_first_match_index(vector unsigned char __a, vector unsigned char __b) {
  2634.   vector unsigned long long __res =
  2635. #ifdef __LITTLE_ENDIAN__
  2636.     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
  2637. #else
  2638.     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
  2639. #endif
  2640.   if (__res[0] == 64) {
  2641.     return (__res[1] + 64) >> 3;
  2642.   }
  2643.   return __res[0] >> 3;
  2644. }
  2645.  
  2646. static __inline__ unsigned __ATTRS_o_ai
  2647. vec_first_match_index(vector signed short __a, vector signed short __b) {
  2648.   vector unsigned long long __res =
  2649. #ifdef __LITTLE_ENDIAN__
  2650.     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
  2651. #else
  2652.     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
  2653. #endif
  2654.   if (__res[0] == 64) {
  2655.     return (__res[1] + 64) >> 4;
  2656.   }
  2657.   return __res[0] >> 4;
  2658. }
  2659.  
  2660. static __inline__ unsigned __ATTRS_o_ai
  2661. vec_first_match_index(vector unsigned short __a, vector unsigned short __b) {
  2662.   vector unsigned long long __res =
  2663. #ifdef __LITTLE_ENDIAN__
  2664.     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
  2665. #else
  2666.     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
  2667. #endif
  2668.   if (__res[0] == 64) {
  2669.     return (__res[1] + 64) >> 4;
  2670.   }
  2671.   return __res[0] >> 4;
  2672. }
  2673.  
  2674. static __inline__ unsigned __ATTRS_o_ai
  2675. vec_first_match_index(vector signed int __a, vector signed int __b) {
  2676.   vector unsigned long long __res =
  2677. #ifdef __LITTLE_ENDIAN__
  2678.     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
  2679. #else
  2680.     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
  2681. #endif
  2682.   if (__res[0] == 64) {
  2683.     return (__res[1] + 64) >> 5;
  2684.   }
  2685.   return __res[0] >> 5;
  2686. }
  2687.  
  2688. static __inline__ unsigned __ATTRS_o_ai
  2689. vec_first_match_index(vector unsigned int __a, vector unsigned int __b) {
  2690.   vector unsigned long long __res =
  2691. #ifdef __LITTLE_ENDIAN__
  2692.     vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
  2693. #else
  2694.     vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
  2695. #endif
  2696.   if (__res[0] == 64) {
  2697.     return (__res[1] + 64) >> 5;
  2698.   }
  2699.   return __res[0] >> 5;
  2700. }
  2701.  
  2702. /* vec_first_match_or_eos_index */
  2703.  
  2704. static __inline__ unsigned __ATTRS_o_ai
  2705. vec_first_match_or_eos_index(vector signed char __a, vector signed char __b) {
  2706.   /* Compare the result of the comparison of two vectors with either and OR the
  2707.      result. Either the elements are equal or one will equal the comparison
  2708.      result if either is zero.
  2709.   */
  2710.   vector bool char __tmp1 = vec_cmpeq(__a, __b);
  2711.   vector bool char __tmp2 = __tmp1 |
  2712.                             vec_cmpeq((vector signed char)__tmp1, __a) |
  2713.                             vec_cmpeq((vector signed char)__tmp1, __b);
  2714.  
  2715.   vector unsigned long long __res =
  2716. #ifdef __LITTLE_ENDIAN__
  2717.       vec_cnttz((vector unsigned long long)__tmp2);
  2718. #else
  2719.       vec_cntlz((vector unsigned long long)__tmp2);
  2720. #endif
  2721.   if (__res[0] == 64) {
  2722.     return (__res[1] + 64) >> 3;
  2723.   }
  2724.   return __res[0] >> 3;
  2725. }
  2726.  
  2727. static __inline__ unsigned __ATTRS_o_ai
  2728. vec_first_match_or_eos_index(vector unsigned char __a,
  2729.                              vector unsigned char __b) {
  2730.   vector bool char __tmp1 = vec_cmpeq(__a, __b);
  2731.   vector bool char __tmp2 = __tmp1 |
  2732.                             vec_cmpeq((vector unsigned char)__tmp1, __a) |
  2733.                             vec_cmpeq((vector unsigned char)__tmp1, __b);
  2734.  
  2735.   vector unsigned long long __res =
  2736. #ifdef __LITTLE_ENDIAN__
  2737.       vec_cnttz((vector unsigned long long)__tmp2);
  2738. #else
  2739.       vec_cntlz((vector unsigned long long)__tmp2);
  2740. #endif
  2741.   if (__res[0] == 64) {
  2742.     return (__res[1] + 64) >> 3;
  2743.   }
  2744.   return __res[0] >> 3;
  2745. }
  2746.  
  2747. static __inline__ unsigned __ATTRS_o_ai
  2748. vec_first_match_or_eos_index(vector signed short __a, vector signed short __b) {
  2749.   vector bool short __tmp1 = vec_cmpeq(__a, __b);
  2750.   vector bool short __tmp2 = __tmp1 |
  2751.                              vec_cmpeq((vector signed short)__tmp1, __a) |
  2752.                              vec_cmpeq((vector signed short)__tmp1, __b);
  2753.  
  2754.   vector unsigned long long __res =
  2755. #ifdef __LITTLE_ENDIAN__
  2756.       vec_cnttz((vector unsigned long long)__tmp2);
  2757. #else
  2758.       vec_cntlz((vector unsigned long long)__tmp2);
  2759. #endif
  2760.   if (__res[0] == 64) {
  2761.     return (__res[1] + 64) >> 4;
  2762.   }
  2763.   return __res[0] >> 4;
  2764. }
  2765.  
  2766. static __inline__ unsigned __ATTRS_o_ai
  2767. vec_first_match_or_eos_index(vector unsigned short __a,
  2768.                              vector unsigned short __b) {
  2769.   vector bool short __tmp1 = vec_cmpeq(__a, __b);
  2770.   vector bool short __tmp2 = __tmp1 |
  2771.                              vec_cmpeq((vector unsigned short)__tmp1, __a) |
  2772.                              vec_cmpeq((vector unsigned short)__tmp1, __b);
  2773.  
  2774.   vector unsigned long long __res =
  2775. #ifdef __LITTLE_ENDIAN__
  2776.       vec_cnttz((vector unsigned long long)__tmp2);
  2777. #else
  2778.       vec_cntlz((vector unsigned long long)__tmp2);
  2779. #endif
  2780.   if (__res[0] == 64) {
  2781.     return (__res[1] + 64) >> 4;
  2782.   }
  2783.   return __res[0] >> 4;
  2784. }
  2785.  
  2786. static __inline__ unsigned __ATTRS_o_ai
  2787. vec_first_match_or_eos_index(vector signed int __a, vector signed int __b) {
  2788.   vector bool int __tmp1 = vec_cmpeq(__a, __b);
  2789.   vector bool int __tmp2 = __tmp1 | vec_cmpeq((vector signed int)__tmp1, __a) |
  2790.                            vec_cmpeq((vector signed int)__tmp1, __b);
  2791.  
  2792.   vector unsigned long long __res =
  2793. #ifdef __LITTLE_ENDIAN__
  2794.       vec_cnttz((vector unsigned long long)__tmp2);
  2795. #else
  2796.       vec_cntlz((vector unsigned long long)__tmp2);
  2797. #endif
  2798.   if (__res[0] == 64) {
  2799.     return (__res[1] + 64) >> 5;
  2800.   }
  2801.   return __res[0] >> 5;
  2802. }
  2803.  
  2804. static __inline__ unsigned __ATTRS_o_ai
  2805. vec_first_match_or_eos_index(vector unsigned int __a, vector unsigned int __b) {
  2806.   vector bool int __tmp1 = vec_cmpeq(__a, __b);
  2807.   vector bool int __tmp2 = __tmp1 |
  2808.                            vec_cmpeq((vector unsigned int)__tmp1, __a) |
  2809.                            vec_cmpeq((vector unsigned int)__tmp1, __b);
  2810.  
  2811.   vector unsigned long long __res =
  2812. #ifdef __LITTLE_ENDIAN__
  2813.     vec_cnttz((vector unsigned long long)__tmp2);
  2814. #else
  2815.     vec_cntlz((vector unsigned long long)__tmp2);
  2816. #endif
  2817.   if (__res[0] == 64) {
  2818.     return (__res[1] + 64) >> 5;
  2819.   }
  2820.   return __res[0] >> 5;
  2821. }
  2822.  
  2823. /* vec_first_mismatch_index */
  2824.  
  2825. static __inline__ unsigned __ATTRS_o_ai
  2826. vec_first_mismatch_index(vector signed char __a, vector signed char __b) {
  2827.   vector unsigned long long __res =
  2828. #ifdef __LITTLE_ENDIAN__
  2829.     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
  2830. #else
  2831.     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
  2832. #endif
  2833.   if (__res[0] == 64) {
  2834.     return (__res[1] + 64) >> 3;
  2835.   }
  2836.   return __res[0] >> 3;
  2837. }
  2838.  
  2839. static __inline__ unsigned __ATTRS_o_ai
  2840. vec_first_mismatch_index(vector unsigned char __a, vector unsigned char __b) {
  2841.   vector unsigned long long __res =
  2842. #ifdef __LITTLE_ENDIAN__
  2843.     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
  2844. #else
  2845.     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
  2846. #endif
  2847.   if (__res[0] == 64) {
  2848.     return (__res[1] + 64) >> 3;
  2849.   }
  2850.   return __res[0] >> 3;
  2851. }
  2852.  
  2853. static __inline__ unsigned __ATTRS_o_ai
  2854. vec_first_mismatch_index(vector signed short __a, vector signed short __b) {
  2855.   vector unsigned long long __res =
  2856. #ifdef __LITTLE_ENDIAN__
  2857.     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
  2858. #else
  2859.     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
  2860. #endif
  2861.   if (__res[0] == 64) {
  2862.     return (__res[1] + 64) >> 4;
  2863.   }
  2864.   return __res[0] >> 4;
  2865. }
  2866.  
  2867. static __inline__ unsigned __ATTRS_o_ai
  2868. vec_first_mismatch_index(vector unsigned short __a, vector unsigned short __b) {
  2869.   vector unsigned long long __res =
  2870. #ifdef __LITTLE_ENDIAN__
  2871.     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
  2872. #else
  2873.     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
  2874. #endif
  2875.   if (__res[0] == 64) {
  2876.     return (__res[1] + 64) >> 4;
  2877.   }
  2878.   return __res[0] >> 4;
  2879. }
  2880.  
  2881. static __inline__ unsigned __ATTRS_o_ai
  2882. vec_first_mismatch_index(vector signed int __a, vector signed int __b) {
  2883.   vector unsigned long long __res =
  2884. #ifdef __LITTLE_ENDIAN__
  2885.     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
  2886. #else
  2887.     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
  2888. #endif
  2889.   if (__res[0] == 64) {
  2890.     return (__res[1] + 64) >> 5;
  2891.   }
  2892.   return __res[0] >> 5;
  2893. }
  2894.  
  2895. static __inline__ unsigned __ATTRS_o_ai
  2896. vec_first_mismatch_index(vector unsigned int __a, vector unsigned int __b) {
  2897.   vector unsigned long long __res =
  2898. #ifdef __LITTLE_ENDIAN__
  2899.     vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
  2900. #else
  2901.     vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
  2902. #endif
  2903.   if (__res[0] == 64) {
  2904.     return (__res[1] + 64) >> 5;
  2905.   }
  2906.   return __res[0] >> 5;
  2907. }
  2908.  
  2909. /* vec_first_mismatch_or_eos_index */
  2910.  
  2911. static __inline__ unsigned __ATTRS_o_ai
  2912. vec_first_mismatch_or_eos_index(vector signed char __a,
  2913.                                 vector signed char __b) {
  2914.   vector unsigned long long __res =
  2915. #ifdef __LITTLE_ENDIAN__
  2916.     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
  2917. #else
  2918.     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
  2919. #endif
  2920.   if (__res[0] == 64) {
  2921.     return (__res[1] + 64) >> 3;
  2922.   }
  2923.   return __res[0] >> 3;
  2924. }
  2925.  
  2926. static __inline__ unsigned __ATTRS_o_ai
  2927. vec_first_mismatch_or_eos_index(vector unsigned char __a,
  2928.                                 vector unsigned char __b) {
  2929.   vector unsigned long long __res =
  2930. #ifdef __LITTLE_ENDIAN__
  2931.     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
  2932. #else
  2933.     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
  2934. #endif
  2935.   if (__res[0] == 64) {
  2936.     return (__res[1] + 64) >> 3;
  2937.   }
  2938.   return __res[0] >> 3;
  2939. }
  2940.  
  2941. static __inline__ unsigned __ATTRS_o_ai
  2942. vec_first_mismatch_or_eos_index(vector signed short __a,
  2943.                                 vector signed short __b) {
  2944.   vector unsigned long long __res =
  2945. #ifdef __LITTLE_ENDIAN__
  2946.     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
  2947. #else
  2948.     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
  2949. #endif
  2950.   if (__res[0] == 64) {
  2951.     return (__res[1] + 64) >> 4;
  2952.   }
  2953.   return __res[0] >> 4;
  2954. }
  2955.  
  2956. static __inline__ unsigned __ATTRS_o_ai
  2957. vec_first_mismatch_or_eos_index(vector unsigned short __a,
  2958.                                 vector unsigned short __b) {
  2959.   vector unsigned long long __res =
  2960. #ifdef __LITTLE_ENDIAN__
  2961.     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
  2962. #else
  2963.     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
  2964. #endif
  2965.   if (__res[0] == 64) {
  2966.     return (__res[1] + 64) >> 4;
  2967.   }
  2968.   return __res[0] >> 4;
  2969. }
  2970.  
  2971. static __inline__ unsigned __ATTRS_o_ai
  2972. vec_first_mismatch_or_eos_index(vector signed int __a, vector signed int __b) {
  2973.   vector unsigned long long __res =
  2974. #ifdef __LITTLE_ENDIAN__
  2975.     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
  2976. #else
  2977.     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
  2978. #endif
  2979.   if (__res[0] == 64) {
  2980.     return (__res[1] + 64) >> 5;
  2981.   }
  2982.   return __res[0] >> 5;
  2983. }
  2984.  
  2985. static __inline__ unsigned __ATTRS_o_ai
  2986. vec_first_mismatch_or_eos_index(vector unsigned int __a,
  2987.                                 vector unsigned int __b) {
  2988.   vector unsigned long long __res =
  2989. #ifdef __LITTLE_ENDIAN__
  2990.     vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
  2991. #else
  2992.     vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
  2993. #endif
  2994.   if (__res[0] == 64) {
  2995.     return (__res[1] + 64) >> 5;
  2996.   }
  2997.   return __res[0] >> 5;
  2998. }
  2999.  
  3000. static __inline__ vector double  __ATTRS_o_ai
  3001. vec_insert_exp(vector double __a, vector unsigned long long __b) {
  3002.   return __builtin_vsx_xviexpdp((vector unsigned long long)__a,__b);
  3003. }
  3004.  
  3005. static __inline__ vector double  __ATTRS_o_ai
  3006. vec_insert_exp(vector unsigned long long __a, vector unsigned long long __b) {
  3007.   return __builtin_vsx_xviexpdp(__a,__b);
  3008. }
  3009.  
  3010. static __inline__ vector float  __ATTRS_o_ai
  3011. vec_insert_exp(vector float __a, vector unsigned int __b) {
  3012.   return __builtin_vsx_xviexpsp((vector unsigned int)__a,__b);
  3013. }
  3014.  
  3015. static __inline__ vector float  __ATTRS_o_ai
  3016. vec_insert_exp(vector unsigned int __a, vector unsigned int __b) {
  3017.   return __builtin_vsx_xviexpsp(__a,__b);
  3018. }
  3019.  
  3020. #if defined(__powerpc64__)
  3021. static __inline__ vector signed char __ATTRS_o_ai vec_xl_len(const signed char *__a,
  3022.                                                              size_t __b) {
  3023.   return (vector signed char)__builtin_vsx_lxvl(__a, (__b << 56));
  3024. }
  3025.  
  3026. static __inline__ vector unsigned char __ATTRS_o_ai
  3027. vec_xl_len(const unsigned char *__a, size_t __b) {
  3028.   return (vector unsigned char)__builtin_vsx_lxvl(__a, (__b << 56));
  3029. }
  3030.  
  3031. static __inline__ vector signed short __ATTRS_o_ai vec_xl_len(const signed short *__a,
  3032.                                                               size_t __b) {
  3033.   return (vector signed short)__builtin_vsx_lxvl(__a, (__b << 56));
  3034. }
  3035.  
  3036. static __inline__ vector unsigned short __ATTRS_o_ai
  3037. vec_xl_len(const unsigned short *__a, size_t __b) {
  3038.   return (vector unsigned short)__builtin_vsx_lxvl(__a, (__b << 56));
  3039. }
  3040.  
  3041. static __inline__ vector signed int __ATTRS_o_ai vec_xl_len(const signed int *__a,
  3042.                                                             size_t __b) {
  3043.   return (vector signed int)__builtin_vsx_lxvl(__a, (__b << 56));
  3044. }
  3045.  
  3046. static __inline__ vector unsigned int __ATTRS_o_ai vec_xl_len(const unsigned int *__a,
  3047.                                                               size_t __b) {
  3048.   return (vector unsigned int)__builtin_vsx_lxvl(__a, (__b << 56));
  3049. }
  3050.  
  3051. static __inline__ vector float __ATTRS_o_ai vec_xl_len(const float *__a, size_t __b) {
  3052.   return (vector float)__builtin_vsx_lxvl(__a, (__b << 56));
  3053. }
  3054.  
  3055. #ifdef __SIZEOF_INT128__
  3056. static __inline__ vector signed __int128 __ATTRS_o_ai
  3057. vec_xl_len(const signed __int128 *__a, size_t __b) {
  3058.   return (vector signed __int128)__builtin_vsx_lxvl(__a, (__b << 56));
  3059. }
  3060.  
  3061. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  3062. vec_xl_len(const unsigned __int128 *__a, size_t __b) {
  3063.   return (vector unsigned __int128)__builtin_vsx_lxvl(__a, (__b << 56));
  3064. }
  3065. #endif
  3066.  
  3067. static __inline__ vector signed long long __ATTRS_o_ai
  3068. vec_xl_len(const signed long long *__a, size_t __b) {
  3069.   return (vector signed long long)__builtin_vsx_lxvl(__a, (__b << 56));
  3070. }
  3071.  
  3072. static __inline__ vector unsigned long long __ATTRS_o_ai
  3073. vec_xl_len(const unsigned long long *__a, size_t __b) {
  3074.   return (vector unsigned long long)__builtin_vsx_lxvl(__a, (__b << 56));
  3075. }
  3076.  
  3077. static __inline__ vector double __ATTRS_o_ai vec_xl_len(const double *__a,
  3078.                                                         size_t __b) {
  3079.   return (vector double)__builtin_vsx_lxvl(__a, (__b << 56));
  3080. }
  3081.  
  3082. static __inline__ vector unsigned char __ATTRS_o_ai
  3083. vec_xl_len_r(const unsigned char *__a, size_t __b) {
  3084.   vector unsigned char __res =
  3085.       (vector unsigned char)__builtin_vsx_lxvll(__a, (__b << 56));
  3086.   vector unsigned char __mask =
  3087.       (vector unsigned char)__builtin_altivec_lvsr(16 - __b, (int *)NULL);
  3088.   return (vector unsigned char)__builtin_altivec_vperm_4si(
  3089.       (vector int)__res, (vector int)__res, __mask);
  3090. }
  3091.  
  3092. // vec_xst_len
  3093. static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned char __a,
  3094.                                                 unsigned char *__b,
  3095.                                                 size_t __c) {
  3096.   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
  3097. }
  3098.  
  3099. static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed char __a,
  3100.                                                 signed char *__b, size_t __c) {
  3101.   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
  3102. }
  3103.  
  3104. static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed short __a,
  3105.                                                 signed short *__b, size_t __c) {
  3106.   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
  3107. }
  3108.  
  3109. static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned short __a,
  3110.                                                 unsigned short *__b,
  3111.                                                 size_t __c) {
  3112.   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
  3113. }
  3114.  
  3115. static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed int __a,
  3116.                                                 signed int *__b, size_t __c) {
  3117.   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
  3118. }
  3119.  
  3120. static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned int __a,
  3121.                                                 unsigned int *__b, size_t __c) {
  3122.   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
  3123. }
  3124.  
  3125. static __inline__ void __ATTRS_o_ai vec_xst_len(vector float __a, float *__b,
  3126.                                                 size_t __c) {
  3127.   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
  3128. }
  3129.  
  3130. #ifdef __SIZEOF_INT128__
  3131. static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed __int128 __a,
  3132.                                                 signed __int128 *__b,
  3133.                                                 size_t __c) {
  3134.   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
  3135. }
  3136.  
  3137. static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned __int128 __a,
  3138.                                                 unsigned __int128 *__b,
  3139.                                                 size_t __c) {
  3140.   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
  3141. }
  3142. #endif
  3143.  
  3144. static __inline__ void __ATTRS_o_ai vec_xst_len(vector signed long long __a,
  3145.                                                 signed long long *__b,
  3146.                                                 size_t __c) {
  3147.   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
  3148. }
  3149.  
  3150. static __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned long long __a,
  3151.                                                 unsigned long long *__b,
  3152.                                                 size_t __c) {
  3153.   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
  3154. }
  3155.  
  3156. static __inline__ void __ATTRS_o_ai vec_xst_len(vector double __a, double *__b,
  3157.                                                 size_t __c) {
  3158.   return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
  3159. }
  3160.  
  3161. static __inline__ void __ATTRS_o_ai vec_xst_len_r(vector unsigned char __a,
  3162.                                                   unsigned char *__b,
  3163.                                                   size_t __c) {
  3164.   vector unsigned char __mask =
  3165.       (vector unsigned char)__builtin_altivec_lvsl(16 - __c, (int *)NULL);
  3166.   vector unsigned char __res =
  3167.       (vector unsigned char)__builtin_altivec_vperm_4si(
  3168.           (vector int)__a, (vector int)__a, __mask);
  3169.   return __builtin_vsx_stxvll((vector int)__res, __b, (__c << 56));
  3170. }
  3171. #endif
  3172. #endif
  3173.  
  3174. #if defined(__POWER9_VECTOR__) && defined(__powerpc64__)
  3175. #define __vec_ldrmb(PTR, CNT) vec_xl_len_r((const unsigned char *)(PTR), (CNT))
  3176. #define __vec_strmb(PTR, CNT, VAL)                                             \
  3177.   vec_xst_len_r((VAL), (unsigned char *)(PTR), (CNT))
  3178. #else
  3179. #define __vec_ldrmb __builtin_vsx_ldrmb
  3180. #define __vec_strmb __builtin_vsx_strmb
  3181. #endif
  3182.  
  3183. /* vec_cpsgn */
  3184.  
  3185. #ifdef __VSX__
  3186. static __inline__ vector float __ATTRS_o_ai vec_cpsgn(vector float __a,
  3187.                                                       vector float __b) {
  3188.   return __builtin_vsx_xvcpsgnsp(__b, __a);
  3189. }
  3190.  
  3191. static __inline__ vector double __ATTRS_o_ai vec_cpsgn(vector double __a,
  3192.                                                        vector double __b) {
  3193.   return __builtin_vsx_xvcpsgndp(__b, __a);
  3194. }
  3195. #endif
  3196.  
  3197. /* vec_ctf */
  3198.  
  3199. #ifdef __VSX__
  3200. // There are some functions that have different signatures with the XL compiler
  3201. // from those in Clang/GCC and documented in the PVIPR. This macro ensures that
  3202. // the XL-compatible signatures are used for those functions.
  3203. #ifdef __XL_COMPAT_ALTIVEC__
  3204. #define vec_ctf(__a, __b)                                                      \
  3205.   _Generic(                                                                    \
  3206.       (__a), vector int                                                        \
  3207.       : (vector float)__builtin_altivec_vcfsx((vector int)(__a), (__b)),       \
  3208.         vector unsigned int                                                    \
  3209.       : (vector float)__builtin_altivec_vcfux((vector unsigned int)(__a),      \
  3210.                                               (__b)),                          \
  3211.         vector unsigned long long                                              \
  3212.       : (vector float)(__builtin_vsx_xvcvuxdsp(                                \
  3213.                            (vector unsigned long long)(__a)) *                 \
  3214.                        (vector float)(vector unsigned)((0x7f - (__b)) << 23)), \
  3215.         vector signed long long                                                \
  3216.       : (vector float)(__builtin_vsx_xvcvsxdsp(                                \
  3217.                            (vector signed long long)(__a)) *                   \
  3218.                        (vector float)(vector unsigned)((0x7f - (__b)) << 23)))
  3219. #else // __XL_COMPAT_ALTIVEC__
  3220. #define vec_ctf(__a, __b)                                                      \
  3221.   _Generic(                                                                    \
  3222.       (__a), vector int                                                        \
  3223.       : (vector float)__builtin_altivec_vcfsx((vector int)(__a), (__b)),       \
  3224.         vector unsigned int                                                    \
  3225.       : (vector float)__builtin_altivec_vcfux((vector unsigned int)(__a),      \
  3226.                                               (__b)),                          \
  3227.         vector unsigned long long                                              \
  3228.       : (vector float)(__builtin_convertvector(                                \
  3229.                            (vector unsigned long long)(__a), vector double) *  \
  3230.                        (vector double)(vector unsigned long long)((0x3ffULL -  \
  3231.                                                                    (__b))      \
  3232.                                                                   << 52)),     \
  3233.         vector signed long long                                                \
  3234.       : (vector float)(__builtin_convertvector((vector signed long long)(__a), \
  3235.                                                vector double) *                \
  3236.                        (vector double)(vector unsigned long long)((0x3ffULL -  \
  3237.                                                                    (__b))      \
  3238.                                                                   << 52)))
  3239. #endif // __XL_COMPAT_ALTIVEC__
  3240. #else
  3241. #define vec_ctf(__a, __b)                                                      \
  3242.   _Generic((__a), vector int                                                   \
  3243.            : (vector float)__builtin_altivec_vcfsx((vector int)(__a), (__b)),  \
  3244.              vector unsigned int                                               \
  3245.            : (vector float)__builtin_altivec_vcfux((vector unsigned int)(__a), \
  3246.                                                    (__b)))
  3247. #endif
  3248.  
  3249. /* vec_ctd */
  3250. #ifdef __VSX__
  3251. #define vec_ctd(__a, __b)                                                      \
  3252.   _Generic((__a), vector signed int                                            \
  3253.            : (vec_doublee((vector signed int)(__a)) *                          \
  3254.               (vector double)(vector unsigned long long)((0x3ffULL - (__b))    \
  3255.                                                          << 52)),              \
  3256.              vector unsigned int                                               \
  3257.            : (vec_doublee((vector unsigned int)(__a)) *                        \
  3258.               (vector double)(vector unsigned long long)((0x3ffULL - (__b))    \
  3259.                                                          << 52)),              \
  3260.              vector unsigned long long                                         \
  3261.            : (__builtin_convertvector((vector unsigned long long)(__a),        \
  3262.                                       vector double) *                         \
  3263.               (vector double)(vector unsigned long long)((0x3ffULL - (__b))    \
  3264.                                                          << 52)),              \
  3265.              vector signed long long                                           \
  3266.            : (__builtin_convertvector((vector signed long long)(__a),          \
  3267.                                       vector double) *                         \
  3268.               (vector double)(vector unsigned long long)((0x3ffULL - (__b))    \
  3269.                                                          << 52)))
  3270. #endif // __VSX__
  3271.  
  3272. /* vec_vcfsx */
  3273.  
  3274. #define vec_vcfux __builtin_altivec_vcfux
  3275. /* vec_vcfux */
  3276.  
  3277. #define vec_vcfsx(__a, __b) __builtin_altivec_vcfsx((vector int)(__a), (__b))
  3278.  
  3279. /* vec_cts */
  3280.  
  3281. #ifdef __VSX__
  3282. #ifdef __XL_COMPAT_ALTIVEC__
  3283. #define vec_cts(__a, __b)                                                      \
  3284.   _Generic((__a), vector float                                                 \
  3285.            : (vector signed int)__builtin_altivec_vctsxs((vector float)(__a),  \
  3286.                                                          (__b)),               \
  3287.              vector double                                                     \
  3288.            : __extension__({                                                   \
  3289.              vector double __ret =                                             \
  3290.                  (vector double)(__a) *                                        \
  3291.                  (vector double)(vector unsigned long long)((0x3ffULL + (__b)) \
  3292.                                                             << 52);            \
  3293.              (vector signed long long)__builtin_vsx_xvcvdpsxws(__ret);         \
  3294.            }))
  3295. #else // __XL_COMPAT_ALTIVEC__
  3296. #define vec_cts(__a, __b)                                                      \
  3297.   _Generic((__a), vector float                                                 \
  3298.            : (vector signed int)__builtin_altivec_vctsxs((vector float)(__a),  \
  3299.                                                          (__b)),               \
  3300.              vector double                                                     \
  3301.            : __extension__({                                                   \
  3302.              vector double __ret =                                             \
  3303.                  (vector double)(__a) *                                        \
  3304.                  (vector double)(vector unsigned long long)((0x3ffULL + (__b)) \
  3305.                                                             << 52);            \
  3306.              (vector signed long long)__builtin_convertvector(                 \
  3307.                  __ret, vector signed long long);                              \
  3308.            }))
  3309. #endif // __XL_COMPAT_ALTIVEC__
  3310. #else
  3311. #define vec_cts __builtin_altivec_vctsxs
  3312. #endif
  3313.  
  3314. /* vec_vctsxs */
  3315.  
  3316. #define vec_vctsxs __builtin_altivec_vctsxs
  3317.  
  3318. /* vec_ctu */
  3319.  
  3320. #ifdef __VSX__
  3321. #ifdef __XL_COMPAT_ALTIVEC__
  3322. #define vec_ctu(__a, __b)                                                      \
  3323.   _Generic((__a), vector float                                                 \
  3324.            : (vector unsigned int)__builtin_altivec_vctuxs(                    \
  3325.                  (vector float)(__a), (__b)),                                  \
  3326.              vector double                                                     \
  3327.            : __extension__({                                                   \
  3328.              vector double __ret =                                             \
  3329.                  (vector double)(__a) *                                        \
  3330.                  (vector double)(vector unsigned long long)((0x3ffULL + __b)   \
  3331.                                                             << 52);            \
  3332.              (vector unsigned long long)__builtin_vsx_xvcvdpuxws(__ret);       \
  3333.            }))
  3334. #else // __XL_COMPAT_ALTIVEC__
  3335. #define vec_ctu(__a, __b)                                                      \
  3336.   _Generic((__a), vector float                                                 \
  3337.            : (vector unsigned int)__builtin_altivec_vctuxs(                    \
  3338.                  (vector float)(__a), (__b)),                                  \
  3339.              vector double                                                     \
  3340.            : __extension__({                                                   \
  3341.              vector double __ret =                                             \
  3342.                  (vector double)(__a) *                                        \
  3343.                  (vector double)(vector unsigned long long)((0x3ffULL + __b)   \
  3344.                                                             << 52);            \
  3345.              (vector unsigned long long)__builtin_convertvector(               \
  3346.                  __ret, vector unsigned long long);                            \
  3347.            }))
  3348. #endif // __XL_COMPAT_ALTIVEC__
  3349. #else
  3350. #define vec_ctu __builtin_altivec_vctuxs
  3351. #endif
  3352.  
  3353. #ifdef __LITTLE_ENDIAN__
  3354. /* vec_ctsl */
  3355.  
  3356. #ifdef __VSX__
  3357. #define vec_ctsl(__a, __b)                                                     \
  3358.   _Generic((__a), vector float                                                 \
  3359.            : __extension__({                                                   \
  3360.                vector float __ret =                                            \
  3361.                    (vector float)(__a) *                                       \
  3362.                    (vector float)(vector unsigned)((0x7f + (__b)) << 23);      \
  3363.                __builtin_vsx_xvcvspsxds(                                       \
  3364.                    __builtin_vsx_xxsldwi(__ret, __ret, 1));                    \
  3365.              }),                                                               \
  3366.              vector double                                                     \
  3367.            : __extension__({                                                   \
  3368.              vector double __ret =                                             \
  3369.                  (vector double)(__a) *                                        \
  3370.                  (vector double)(vector unsigned long long)((0x3ffULL + __b)   \
  3371.                                                             << 52);            \
  3372.              __builtin_convertvector(__ret, vector signed long long);          \
  3373.            }))
  3374.  
  3375. /* vec_ctul */
  3376.  
  3377. #define vec_ctul(__a, __b)                                                     \
  3378.   _Generic((__a), vector float                                                 \
  3379.            : __extension__({                                                   \
  3380.                vector float __ret =                                            \
  3381.                    (vector float)(__a) *                                       \
  3382.                    (vector float)(vector unsigned)((0x7f + (__b)) << 23);      \
  3383.                __builtin_vsx_xvcvspuxds(                                       \
  3384.                    __builtin_vsx_xxsldwi(__ret, __ret, 1));                    \
  3385.              }),                                                               \
  3386.              vector double                                                     \
  3387.            : __extension__({                                                   \
  3388.              vector double __ret =                                             \
  3389.                  (vector double)(__a) *                                        \
  3390.                  (vector double)(vector unsigned long long)((0x3ffULL + __b)   \
  3391.                                                             << 52);            \
  3392.              __builtin_convertvector(__ret, vector unsigned long long);        \
  3393.            }))
  3394. #endif
  3395. #else // __LITTLE_ENDIAN__
  3396. /* vec_ctsl */
  3397.  
  3398. #ifdef __VSX__
  3399. #define vec_ctsl(__a, __b)                                                     \
  3400.   _Generic((__a), vector float                                                 \
  3401.            : __extension__({                                                   \
  3402.                vector float __ret =                                            \
  3403.                    (vector float)(__a) *                                       \
  3404.                    (vector float)(vector unsigned)((0x7f + (__b)) << 23);      \
  3405.                __builtin_vsx_xvcvspsxds(__ret);                                \
  3406.              }),                                                               \
  3407.              vector double                                                     \
  3408.            : __extension__({                                                   \
  3409.              vector double __ret =                                             \
  3410.                  (vector double)(__a) *                                        \
  3411.                  (vector double)(vector unsigned long long)((0x3ffULL + __b)   \
  3412.                                                             << 52);            \
  3413.              __builtin_convertvector(__ret, vector signed long long);          \
  3414.            }))
  3415.  
  3416. /* vec_ctul */
  3417.  
  3418. #define vec_ctul(__a, __b)                                                     \
  3419.   _Generic((__a), vector float                                                 \
  3420.            : __extension__({                                                   \
  3421.                vector float __ret =                                            \
  3422.                    (vector float)(__a) *                                       \
  3423.                    (vector float)(vector unsigned)((0x7f + (__b)) << 23);      \
  3424.                __builtin_vsx_xvcvspuxds(__ret);                                \
  3425.              }),                                                               \
  3426.              vector double                                                     \
  3427.            : __extension__({                                                   \
  3428.              vector double __ret =                                             \
  3429.                  (vector double)(__a) *                                        \
  3430.                  (vector double)(vector unsigned long long)((0x3ffULL + __b)   \
  3431.                                                             << 52);            \
  3432.              __builtin_convertvector(__ret, vector unsigned long long);        \
  3433.            }))
  3434. #endif
  3435. #endif // __LITTLE_ENDIAN__
  3436.  
  3437. /* vec_vctuxs */
  3438.  
  3439. #define vec_vctuxs __builtin_altivec_vctuxs
  3440.  
  3441. /* vec_signext */
  3442.  
  3443. #ifdef __POWER9_VECTOR__
  3444. static __inline__ vector signed int __ATTRS_o_ai
  3445. vec_signexti(vector signed char __a) {
  3446.   return __builtin_altivec_vextsb2w(__a);
  3447. }
  3448.  
  3449. static __inline__ vector signed int __ATTRS_o_ai
  3450. vec_signexti(vector signed short __a) {
  3451.   return __builtin_altivec_vextsh2w(__a);
  3452. }
  3453.  
  3454. static __inline__ vector signed long long __ATTRS_o_ai
  3455. vec_signextll(vector signed char __a) {
  3456.   return __builtin_altivec_vextsb2d(__a);
  3457. }
  3458.  
  3459. static __inline__ vector signed long long __ATTRS_o_ai
  3460. vec_signextll(vector signed short __a) {
  3461.   return __builtin_altivec_vextsh2d(__a);
  3462. }
  3463.  
  3464. static __inline__ vector signed long long __ATTRS_o_ai
  3465. vec_signextll(vector signed int __a) {
  3466.   return __builtin_altivec_vextsw2d(__a);
  3467. }
  3468. #endif
  3469.  
  3470. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  3471. static __inline__ vector signed __int128 __ATTRS_o_ai
  3472. vec_signextq(vector signed long long __a) {
  3473.   return __builtin_altivec_vextsd2q(__a);
  3474. }
  3475. #endif
  3476.  
  3477. /* vec_signed */
  3478.  
  3479. static __inline__ vector signed int __ATTRS_o_ai
  3480. vec_sld(vector signed int, vector signed int, unsigned const int __c);
  3481.  
  3482. static __inline__ vector signed int __ATTRS_o_ai
  3483. vec_signed(vector float __a) {
  3484.   return __builtin_convertvector(__a, vector signed int);
  3485. }
  3486.  
  3487. #ifdef __VSX__
  3488. static __inline__ vector signed long long __ATTRS_o_ai
  3489. vec_signed(vector double __a) {
  3490.   return __builtin_convertvector(__a, vector signed long long);
  3491. }
  3492.  
  3493. static __inline__ vector signed int __attribute__((__always_inline__))
  3494. vec_signed2(vector double __a, vector double __b) {
  3495.   return (vector signed int) { __a[0], __a[1], __b[0], __b[1] };
  3496. }
  3497.  
  3498. static __inline__ vector signed int __ATTRS_o_ai
  3499. vec_signede(vector double __a) {
  3500. #ifdef __LITTLE_ENDIAN__
  3501.   vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);
  3502.   return vec_sld(__ret, __ret, 12);
  3503. #else
  3504.   return __builtin_vsx_xvcvdpsxws(__a);
  3505. #endif
  3506. }
  3507.  
  3508. static __inline__ vector signed int __ATTRS_o_ai
  3509. vec_signedo(vector double __a) {
  3510. #ifdef __LITTLE_ENDIAN__
  3511.   return __builtin_vsx_xvcvdpsxws(__a);
  3512. #else
  3513.   vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);
  3514.   return vec_sld(__ret, __ret, 12);
  3515. #endif
  3516. }
  3517. #endif
  3518.  
  3519. /* vec_unsigned */
  3520.  
  3521. static __inline__ vector unsigned int __ATTRS_o_ai
  3522. vec_sld(vector unsigned int, vector unsigned int, unsigned const int __c);
  3523.  
  3524. static __inline__ vector unsigned int __ATTRS_o_ai
  3525. vec_unsigned(vector float __a) {
  3526.   return __builtin_convertvector(__a, vector unsigned int);
  3527. }
  3528.  
  3529. #ifdef __VSX__
  3530. static __inline__ vector unsigned long long __ATTRS_o_ai
  3531. vec_unsigned(vector double __a) {
  3532.   return __builtin_convertvector(__a, vector unsigned long long);
  3533. }
  3534.  
  3535. static __inline__ vector unsigned int __attribute__((__always_inline__))
  3536. vec_unsigned2(vector double __a, vector double __b) {
  3537.   return (vector unsigned int) { __a[0], __a[1], __b[0], __b[1] };
  3538. }
  3539.  
  3540. static __inline__ vector unsigned int __ATTRS_o_ai
  3541. vec_unsignede(vector double __a) {
  3542. #ifdef __LITTLE_ENDIAN__
  3543.   vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);
  3544.   return vec_sld(__ret, __ret, 12);
  3545. #else
  3546.   return __builtin_vsx_xvcvdpuxws(__a);
  3547. #endif
  3548. }
  3549.  
  3550. static __inline__ vector unsigned int __ATTRS_o_ai
  3551. vec_unsignedo(vector double __a) {
  3552. #ifdef __LITTLE_ENDIAN__
  3553.   return __builtin_vsx_xvcvdpuxws(__a);
  3554. #else
  3555.   vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);
  3556.   return vec_sld(__ret, __ret, 12);
  3557. #endif
  3558. }
  3559. #endif
  3560.  
  3561. /* vec_float */
  3562.  
  3563. static __inline__ vector float __ATTRS_o_ai
  3564. vec_sld(vector float, vector float, unsigned const int __c);
  3565.  
  3566. static __inline__ vector float __ATTRS_o_ai
  3567. vec_float(vector signed int __a) {
  3568.   return __builtin_convertvector(__a, vector float);
  3569. }
  3570.  
  3571. static __inline__ vector float __ATTRS_o_ai
  3572. vec_float(vector unsigned int __a) {
  3573.   return __builtin_convertvector(__a, vector float);
  3574. }
  3575.  
  3576. #ifdef __VSX__
  3577. static __inline__ vector float __ATTRS_o_ai
  3578. vec_float2(vector signed long long __a, vector signed long long __b) {
  3579.   return (vector float) { __a[0], __a[1], __b[0], __b[1] };
  3580. }
  3581.  
  3582. static __inline__ vector float __ATTRS_o_ai
  3583. vec_float2(vector unsigned long long __a, vector unsigned long long __b) {
  3584.   return (vector float) { __a[0], __a[1], __b[0], __b[1] };
  3585. }
  3586.  
  3587. static __inline__ vector float __ATTRS_o_ai
  3588. vec_float2(vector double __a, vector double __b) {
  3589.   return (vector float) { __a[0], __a[1], __b[0], __b[1] };
  3590. }
  3591.  
  3592. static __inline__ vector float __ATTRS_o_ai
  3593. vec_floate(vector signed long long __a) {
  3594. #ifdef __LITTLE_ENDIAN__
  3595.   vector float __ret = __builtin_vsx_xvcvsxdsp(__a);
  3596.   return vec_sld(__ret, __ret, 12);
  3597. #else
  3598.   return __builtin_vsx_xvcvsxdsp(__a);
  3599. #endif
  3600. }
  3601.  
  3602. static __inline__ vector float __ATTRS_o_ai
  3603. vec_floate(vector unsigned long long __a) {
  3604. #ifdef __LITTLE_ENDIAN__
  3605.   vector float __ret = __builtin_vsx_xvcvuxdsp(__a);
  3606.   return vec_sld(__ret, __ret, 12);
  3607. #else
  3608.   return __builtin_vsx_xvcvuxdsp(__a);
  3609. #endif
  3610. }
  3611.  
  3612. static __inline__ vector float __ATTRS_o_ai
  3613. vec_floate(vector double __a) {
  3614. #ifdef __LITTLE_ENDIAN__
  3615.   vector float __ret = __builtin_vsx_xvcvdpsp(__a);
  3616.   return vec_sld(__ret, __ret, 12);
  3617. #else
  3618.   return __builtin_vsx_xvcvdpsp(__a);
  3619. #endif
  3620. }
  3621.  
  3622. static __inline__ vector float __ATTRS_o_ai
  3623. vec_floato(vector signed long long __a) {
  3624. #ifdef __LITTLE_ENDIAN__
  3625.   return __builtin_vsx_xvcvsxdsp(__a);
  3626. #else
  3627.   vector float __ret = __builtin_vsx_xvcvsxdsp(__a);
  3628.   return vec_sld(__ret, __ret, 12);
  3629. #endif
  3630. }
  3631.  
  3632. static __inline__ vector float __ATTRS_o_ai
  3633. vec_floato(vector unsigned long long __a) {
  3634. #ifdef __LITTLE_ENDIAN__
  3635.   return __builtin_vsx_xvcvuxdsp(__a);
  3636. #else
  3637.   vector float __ret = __builtin_vsx_xvcvuxdsp(__a);
  3638.   return vec_sld(__ret, __ret, 12);
  3639. #endif
  3640. }
  3641.  
  3642. static __inline__ vector float __ATTRS_o_ai
  3643. vec_floato(vector double __a) {
  3644. #ifdef __LITTLE_ENDIAN__
  3645.   return __builtin_vsx_xvcvdpsp(__a);
  3646. #else
  3647.   vector float __ret = __builtin_vsx_xvcvdpsp(__a);
  3648.   return vec_sld(__ret, __ret, 12);
  3649. #endif
  3650. }
  3651. #endif
  3652.  
  3653. /* vec_double */
  3654.  
  3655. #ifdef __VSX__
  3656. static __inline__ vector double __ATTRS_o_ai
  3657. vec_double(vector signed long long __a) {
  3658.   return __builtin_convertvector(__a, vector double);
  3659. }
  3660.  
  3661. static __inline__ vector double __ATTRS_o_ai
  3662. vec_double(vector unsigned long long __a) {
  3663.   return __builtin_convertvector(__a, vector double);
  3664. }
  3665.  
  3666. static __inline__ vector double __ATTRS_o_ai
  3667. vec_doublee(vector signed int __a) {
  3668. #ifdef __LITTLE_ENDIAN__
  3669.   return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));
  3670. #else
  3671.   return __builtin_vsx_xvcvsxwdp(__a);
  3672. #endif
  3673. }
  3674.  
  3675. static __inline__ vector double __ATTRS_o_ai
  3676. vec_doublee(vector unsigned int __a) {
  3677. #ifdef __LITTLE_ENDIAN__
  3678.   return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));
  3679. #else
  3680.   return __builtin_vsx_xvcvuxwdp(__a);
  3681. #endif
  3682. }
  3683.  
  3684. static __inline__ vector double __ATTRS_o_ai
  3685. vec_doublee(vector float __a) {
  3686. #ifdef __LITTLE_ENDIAN__
  3687.   return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));
  3688. #else
  3689.   return __builtin_vsx_xvcvspdp(__a);
  3690. #endif
  3691. }
  3692.  
  3693. static __inline__ vector double __ATTRS_o_ai
  3694. vec_doubleh(vector signed int __a) {
  3695.   vector double __ret = {__a[0], __a[1]};
  3696.   return __ret;
  3697. }
  3698.  
  3699. static __inline__ vector double __ATTRS_o_ai
  3700. vec_doubleh(vector unsigned int __a) {
  3701.   vector double __ret = {__a[0], __a[1]};
  3702.   return __ret;
  3703. }
  3704.  
  3705. static __inline__ vector double __ATTRS_o_ai
  3706. vec_doubleh(vector float __a) {
  3707.   vector double __ret = {__a[0], __a[1]};
  3708.   return __ret;
  3709. }
  3710.  
  3711. static __inline__ vector double __ATTRS_o_ai
  3712. vec_doublel(vector signed int __a) {
  3713.   vector double __ret = {__a[2], __a[3]};
  3714.   return __ret;
  3715. }
  3716.  
  3717. static __inline__ vector double __ATTRS_o_ai
  3718. vec_doublel(vector unsigned int __a) {
  3719.   vector double __ret = {__a[2], __a[3]};
  3720.   return __ret;
  3721. }
  3722.  
  3723. static __inline__ vector double __ATTRS_o_ai
  3724. vec_doublel(vector float __a) {
  3725.   vector double __ret = {__a[2], __a[3]};
  3726.   return __ret;
  3727. }
  3728.  
  3729. static __inline__ vector double __ATTRS_o_ai
  3730. vec_doubleo(vector signed int __a) {
  3731. #ifdef __LITTLE_ENDIAN__
  3732.   return __builtin_vsx_xvcvsxwdp(__a);
  3733. #else
  3734.   return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));
  3735. #endif
  3736. }
  3737.  
  3738. static __inline__ vector double __ATTRS_o_ai
  3739. vec_doubleo(vector unsigned int __a) {
  3740. #ifdef __LITTLE_ENDIAN__
  3741.   return __builtin_vsx_xvcvuxwdp(__a);
  3742. #else
  3743.   return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));
  3744. #endif
  3745. }
  3746.  
  3747. static __inline__ vector double __ATTRS_o_ai
  3748. vec_doubleo(vector float __a) {
  3749. #ifdef __LITTLE_ENDIAN__
  3750.   return __builtin_vsx_xvcvspdp(__a);
  3751. #else
  3752.   return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));
  3753. #endif
  3754. }
  3755.  
  3756. /* vec_cvf */
  3757. static __inline__ vector double __ATTRS_o_ai vec_cvf(vector float __a) {
  3758.   return vec_doublee(__a);
  3759. }
  3760.  
  3761. static __inline__ vector float __ATTRS_o_ai vec_cvf(vector double __a) {
  3762.   return vec_floate(__a);
  3763. }
  3764. #endif
  3765.  
  3766. /* vec_div */
  3767.  
  3768. /* Integer vector divides (vectors are scalarized, elements divided
  3769.    and the vectors reassembled).
  3770. */
  3771. static __inline__ vector signed char __ATTRS_o_ai
  3772. vec_div(vector signed char __a, vector signed char __b) {
  3773.   return __a / __b;
  3774. }
  3775.  
  3776. static __inline__ vector unsigned char __ATTRS_o_ai
  3777. vec_div(vector unsigned char __a, vector unsigned char __b) {
  3778.   return __a / __b;
  3779. }
  3780.  
  3781. static __inline__ vector signed short __ATTRS_o_ai
  3782. vec_div(vector signed short __a, vector signed short __b) {
  3783.   return __a / __b;
  3784. }
  3785.  
  3786. static __inline__ vector unsigned short __ATTRS_o_ai
  3787. vec_div(vector unsigned short __a, vector unsigned short __b) {
  3788.   return __a / __b;
  3789. }
  3790.  
  3791. static __inline__ vector signed int __ATTRS_o_ai
  3792. vec_div(vector signed int __a, vector signed int __b) {
  3793.   return __a / __b;
  3794. }
  3795.  
  3796. static __inline__ vector unsigned int __ATTRS_o_ai
  3797. vec_div(vector unsigned int __a, vector unsigned int __b) {
  3798.   return __a / __b;
  3799. }
  3800.  
  3801. #ifdef __VSX__
  3802. static __inline__ vector signed long long __ATTRS_o_ai
  3803. vec_div(vector signed long long __a, vector signed long long __b) {
  3804.   return __a / __b;
  3805. }
  3806.  
  3807. static __inline__ vector unsigned long long __ATTRS_o_ai
  3808. vec_div(vector unsigned long long __a, vector unsigned long long __b) {
  3809.   return __a / __b;
  3810. }
  3811.  
  3812. static __inline__ vector float __ATTRS_o_ai vec_div(vector float __a,
  3813.                                                     vector float __b) {
  3814.   return __a / __b;
  3815. }
  3816.  
  3817. static __inline__ vector double __ATTRS_o_ai vec_div(vector double __a,
  3818.                                                      vector double __b) {
  3819.   return __a / __b;
  3820. }
  3821. #endif
  3822.  
  3823. /* vec_dive */
  3824.  
  3825. #ifdef __POWER10_VECTOR__
  3826. static __inline__ vector signed int __ATTRS_o_ai
  3827. vec_dive(vector signed int __a, vector signed int __b) {
  3828.   return __builtin_altivec_vdivesw(__a, __b);
  3829. }
  3830.  
  3831. static __inline__ vector unsigned int __ATTRS_o_ai
  3832. vec_dive(vector unsigned int __a, vector unsigned int __b) {
  3833.   return __builtin_altivec_vdiveuw(__a, __b);
  3834. }
  3835.  
  3836. static __inline__ vector signed long long __ATTRS_o_ai
  3837. vec_dive(vector signed long long __a, vector signed long long __b) {
  3838.   return __builtin_altivec_vdivesd(__a, __b);
  3839. }
  3840.  
  3841. static __inline__ vector unsigned long long __ATTRS_o_ai
  3842. vec_dive(vector unsigned long long __a, vector unsigned long long __b) {
  3843.   return __builtin_altivec_vdiveud(__a, __b);
  3844. }
  3845.  
  3846. #ifdef __SIZEOF_INT128__
  3847. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  3848. vec_dive(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  3849.   return __builtin_altivec_vdiveuq(__a, __b);
  3850. }
  3851.  
  3852. static __inline__ vector signed __int128 __ATTRS_o_ai
  3853. vec_dive(vector signed __int128 __a, vector signed __int128 __b) {
  3854.   return __builtin_altivec_vdivesq(__a, __b);
  3855. }
  3856. #endif
  3857. #endif
  3858.  
  3859. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  3860. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  3861. vec_div(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  3862.   return __a / __b;
  3863. }
  3864.  
  3865. static __inline__ vector signed __int128 __ATTRS_o_ai
  3866. vec_div(vector signed __int128 __a, vector signed __int128 __b) {
  3867.   return __a / __b;
  3868. }
  3869. #endif /* __POWER10_VECTOR__ */
  3870.  
  3871. /* vec_xvtdiv */
  3872.  
  3873. #ifdef __VSX__
  3874. static __inline__ int __ATTRS_o_ai vec_test_swdiv(vector double __a,
  3875.                                                   vector double __b) {
  3876.   return __builtin_vsx_xvtdivdp(__a, __b);
  3877. }
  3878.  
  3879. static __inline__ int __ATTRS_o_ai vec_test_swdivs(vector float __a,
  3880.                                                    vector float __b) {
  3881.   return __builtin_vsx_xvtdivsp(__a, __b);
  3882. }
  3883. #endif
  3884.  
  3885. /* vec_dss */
  3886.  
  3887. #define vec_dss __builtin_altivec_dss
  3888.  
  3889. /* vec_dssall */
  3890.  
  3891. static __inline__ void __attribute__((__always_inline__)) vec_dssall(void) {
  3892.   __builtin_altivec_dssall();
  3893. }
  3894.  
  3895. /* vec_dst */
  3896. #define vec_dst(__PTR, __CW, __STR) \
  3897.   __builtin_altivec_dst((const void *)(__PTR), (__CW), (__STR))
  3898.  
  3899. /* vec_dstst */
  3900. #define vec_dstst(__PTR, __CW, __STR) \
  3901.   __builtin_altivec_dstst((const void *)(__PTR), (__CW), (__STR))
  3902.  
  3903. /* vec_dststt */
  3904. #define vec_dststt(__PTR, __CW, __STR) \
  3905.   __builtin_altivec_dststt((const void *)(__PTR), (__CW), (__STR))
  3906.  
  3907. /* vec_dstt */
  3908. #define vec_dstt(__PTR, __CW, __STR) \
  3909.   __builtin_altivec_dstt((const void *)(__PTR), (__CW), (__STR))
  3910.  
  3911. /* vec_eqv */
  3912.  
  3913. #ifdef __POWER8_VECTOR__
  3914. static __inline__ vector signed char __ATTRS_o_ai
  3915. vec_eqv(vector signed char __a, vector signed char __b) {
  3916.   return (vector signed char)__builtin_vsx_xxleqv((vector unsigned int)__a,
  3917.                                                   (vector unsigned int)__b);
  3918. }
  3919.  
  3920. static __inline__ vector unsigned char __ATTRS_o_ai
  3921. vec_eqv(vector unsigned char __a, vector unsigned char __b) {
  3922.   return (vector unsigned char)__builtin_vsx_xxleqv((vector unsigned int)__a,
  3923.                                                     (vector unsigned int)__b);
  3924. }
  3925.  
  3926. static __inline__ vector bool char __ATTRS_o_ai vec_eqv(vector bool char __a,
  3927.                                                         vector bool char __b) {
  3928.   return (vector bool char)__builtin_vsx_xxleqv((vector unsigned int)__a,
  3929.                                                 (vector unsigned int)__b);
  3930. }
  3931.  
  3932. static __inline__ vector signed short __ATTRS_o_ai
  3933. vec_eqv(vector signed short __a, vector signed short __b) {
  3934.   return (vector signed short)__builtin_vsx_xxleqv((vector unsigned int)__a,
  3935.                                                    (vector unsigned int)__b);
  3936. }
  3937.  
  3938. static __inline__ vector unsigned short __ATTRS_o_ai
  3939. vec_eqv(vector unsigned short __a, vector unsigned short __b) {
  3940.   return (vector unsigned short)__builtin_vsx_xxleqv((vector unsigned int)__a,
  3941.                                                      (vector unsigned int)__b);
  3942. }
  3943.  
  3944. static __inline__ vector bool short __ATTRS_o_ai
  3945. vec_eqv(vector bool short __a, vector bool short __b) {
  3946.   return (vector bool short)__builtin_vsx_xxleqv((vector unsigned int)__a,
  3947.                                                  (vector unsigned int)__b);
  3948. }
  3949.  
  3950. static __inline__ vector signed int __ATTRS_o_ai
  3951. vec_eqv(vector signed int __a, vector signed int __b) {
  3952.   return (vector signed int)__builtin_vsx_xxleqv((vector unsigned int)__a,
  3953.                                                  (vector unsigned int)__b);
  3954. }
  3955.  
  3956. static __inline__ vector unsigned int __ATTRS_o_ai
  3957. vec_eqv(vector unsigned int __a, vector unsigned int __b) {
  3958.   return __builtin_vsx_xxleqv(__a, __b);
  3959. }
  3960.  
  3961. static __inline__ vector bool int __ATTRS_o_ai vec_eqv(vector bool int __a,
  3962.                                                        vector bool int __b) {
  3963.   return (vector bool int)__builtin_vsx_xxleqv((vector unsigned int)__a,
  3964.                                                (vector unsigned int)__b);
  3965. }
  3966.  
  3967. static __inline__ vector signed long long __ATTRS_o_ai
  3968. vec_eqv(vector signed long long __a, vector signed long long __b) {
  3969.   return (vector signed long long)__builtin_vsx_xxleqv(
  3970.       (vector unsigned int)__a, (vector unsigned int)__b);
  3971. }
  3972.  
  3973. static __inline__ vector unsigned long long __ATTRS_o_ai
  3974. vec_eqv(vector unsigned long long __a, vector unsigned long long __b) {
  3975.   return (vector unsigned long long)__builtin_vsx_xxleqv(
  3976.       (vector unsigned int)__a, (vector unsigned int)__b);
  3977. }
  3978.  
  3979. static __inline__ vector bool long long __ATTRS_o_ai
  3980. vec_eqv(vector bool long long __a, vector bool long long __b) {
  3981.   return (vector bool long long)__builtin_vsx_xxleqv((vector unsigned int)__a,
  3982.                                                      (vector unsigned int)__b);
  3983. }
  3984.  
  3985. static __inline__ vector float __ATTRS_o_ai vec_eqv(vector float __a,
  3986.                                                     vector float __b) {
  3987.   return (vector float)__builtin_vsx_xxleqv((vector unsigned int)__a,
  3988.                                             (vector unsigned int)__b);
  3989. }
  3990.  
  3991. static __inline__ vector double __ATTRS_o_ai vec_eqv(vector double __a,
  3992.                                                      vector double __b) {
  3993.   return (vector double)__builtin_vsx_xxleqv((vector unsigned int)__a,
  3994.                                              (vector unsigned int)__b);
  3995. }
  3996. #endif
  3997.  
  3998. /* vec_expte */
  3999.  
  4000. static __inline__ vector float __attribute__((__always_inline__))
  4001. vec_expte(vector float __a) {
  4002.   return __builtin_altivec_vexptefp(__a);
  4003. }
  4004.  
  4005. /* vec_vexptefp */
  4006.  
  4007. static __inline__ vector float __attribute__((__always_inline__))
  4008. vec_vexptefp(vector float __a) {
  4009.   return __builtin_altivec_vexptefp(__a);
  4010. }
  4011.  
  4012. /* vec_floor */
  4013.  
  4014. static __inline__ vector float __ATTRS_o_ai vec_floor(vector float __a) {
  4015. #ifdef __VSX__
  4016.   return __builtin_vsx_xvrspim(__a);
  4017. #else
  4018.   return __builtin_altivec_vrfim(__a);
  4019. #endif
  4020. }
  4021.  
  4022. #ifdef __VSX__
  4023. static __inline__ vector double __ATTRS_o_ai vec_floor(vector double __a) {
  4024.   return __builtin_vsx_xvrdpim(__a);
  4025. }
  4026. #endif
  4027.  
  4028. /* vec_roundm */
  4029. static __inline__ vector float __ATTRS_o_ai vec_roundm(vector float __a) {
  4030.   return vec_floor(__a);
  4031. }
  4032.  
  4033. #ifdef __VSX__
  4034. static __inline__ vector double __ATTRS_o_ai vec_roundm(vector double __a) {
  4035.   return vec_floor(__a);
  4036. }
  4037. #endif
  4038.  
  4039. /* vec_vrfim */
  4040.  
  4041. static __inline__ vector float __attribute__((__always_inline__))
  4042. vec_vrfim(vector float __a) {
  4043.   return __builtin_altivec_vrfim(__a);
  4044. }
  4045.  
  4046. /* vec_ld */
  4047.  
  4048. static __inline__ vector signed char __ATTRS_o_ai
  4049. vec_ld(long __a, const vector signed char *__b) {
  4050.   return (vector signed char)__builtin_altivec_lvx(__a, __b);
  4051. }
  4052.  
  4053. static __inline__ vector signed char __ATTRS_o_ai
  4054. vec_ld(long __a, const signed char *__b) {
  4055.   return (vector signed char)__builtin_altivec_lvx(__a, __b);
  4056. }
  4057.  
  4058. static __inline__ vector unsigned char __ATTRS_o_ai
  4059. vec_ld(long __a, const vector unsigned char *__b) {
  4060.   return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
  4061. }
  4062.  
  4063. static __inline__ vector unsigned char __ATTRS_o_ai
  4064. vec_ld(long __a, const unsigned char *__b) {
  4065.   return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
  4066. }
  4067.  
  4068. static __inline__ vector bool char __ATTRS_o_ai
  4069. vec_ld(long __a, const vector bool char *__b) {
  4070.   return (vector bool char)__builtin_altivec_lvx(__a, __b);
  4071. }
  4072.  
  4073. static __inline__ vector short __ATTRS_o_ai vec_ld(long __a,
  4074.                                                    const vector short *__b) {
  4075.   return (vector short)__builtin_altivec_lvx(__a, __b);
  4076. }
  4077.  
  4078. static __inline__ vector short __ATTRS_o_ai vec_ld(long __a, const short *__b) {
  4079.   return (vector short)__builtin_altivec_lvx(__a, __b);
  4080. }
  4081.  
  4082. static __inline__ vector unsigned short __ATTRS_o_ai
  4083. vec_ld(long __a, const vector unsigned short *__b) {
  4084.   return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
  4085. }
  4086.  
  4087. static __inline__ vector unsigned short __ATTRS_o_ai
  4088. vec_ld(long __a, const unsigned short *__b) {
  4089.   return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
  4090. }
  4091.  
  4092. static __inline__ vector bool short __ATTRS_o_ai
  4093. vec_ld(long __a, const vector bool short *__b) {
  4094.   return (vector bool short)__builtin_altivec_lvx(__a, __b);
  4095. }
  4096.  
  4097. static __inline__ vector pixel __ATTRS_o_ai vec_ld(long __a,
  4098.                                                    const vector pixel *__b) {
  4099.   return (vector pixel)__builtin_altivec_lvx(__a, __b);
  4100. }
  4101.  
  4102. static __inline__ vector int __ATTRS_o_ai vec_ld(long __a,
  4103.                                                  const vector int *__b) {
  4104.   return (vector int)__builtin_altivec_lvx(__a, __b);
  4105. }
  4106.  
  4107. static __inline__ vector int __ATTRS_o_ai vec_ld(long __a, const int *__b) {
  4108.   return (vector int)__builtin_altivec_lvx(__a, __b);
  4109. }
  4110.  
  4111. static __inline__ vector unsigned int __ATTRS_o_ai
  4112. vec_ld(long __a, const vector unsigned int *__b) {
  4113.   return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
  4114. }
  4115.  
  4116. static __inline__ vector unsigned int __ATTRS_o_ai
  4117. vec_ld(long __a, const unsigned int *__b) {
  4118.   return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
  4119. }
  4120.  
  4121. static __inline__ vector bool int __ATTRS_o_ai
  4122. vec_ld(long __a, const vector bool int *__b) {
  4123.   return (vector bool int)__builtin_altivec_lvx(__a, __b);
  4124. }
  4125.  
  4126. static __inline__ vector float __ATTRS_o_ai vec_ld(long __a,
  4127.                                                    const vector float *__b) {
  4128.   return (vector float)__builtin_altivec_lvx(__a, __b);
  4129. }
  4130.  
  4131. static __inline__ vector float __ATTRS_o_ai vec_ld(long __a, const float *__b) {
  4132.   return (vector float)__builtin_altivec_lvx(__a, __b);
  4133. }
  4134.  
  4135. /* vec_lvx */
  4136.  
  4137. static __inline__ vector signed char __ATTRS_o_ai
  4138. vec_lvx(long __a, const vector signed char *__b) {
  4139.   return (vector signed char)__builtin_altivec_lvx(__a, __b);
  4140. }
  4141.  
  4142. static __inline__ vector signed char __ATTRS_o_ai
  4143. vec_lvx(long __a, const signed char *__b) {
  4144.   return (vector signed char)__builtin_altivec_lvx(__a, __b);
  4145. }
  4146.  
  4147. static __inline__ vector unsigned char __ATTRS_o_ai
  4148. vec_lvx(long __a, const vector unsigned char *__b) {
  4149.   return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
  4150. }
  4151.  
  4152. static __inline__ vector unsigned char __ATTRS_o_ai
  4153. vec_lvx(long __a, const unsigned char *__b) {
  4154.   return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
  4155. }
  4156.  
  4157. static __inline__ vector bool char __ATTRS_o_ai
  4158. vec_lvx(long __a, const vector bool char *__b) {
  4159.   return (vector bool char)__builtin_altivec_lvx(__a, __b);
  4160. }
  4161.  
  4162. static __inline__ vector short __ATTRS_o_ai vec_lvx(long __a,
  4163.                                                     const vector short *__b) {
  4164.   return (vector short)__builtin_altivec_lvx(__a, __b);
  4165. }
  4166.  
  4167. static __inline__ vector short __ATTRS_o_ai vec_lvx(long __a, const short *__b) {
  4168.   return (vector short)__builtin_altivec_lvx(__a, __b);
  4169. }
  4170.  
  4171. static __inline__ vector unsigned short __ATTRS_o_ai
  4172. vec_lvx(long __a, const vector unsigned short *__b) {
  4173.   return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
  4174. }
  4175.  
  4176. static __inline__ vector unsigned short __ATTRS_o_ai
  4177. vec_lvx(long __a, const unsigned short *__b) {
  4178.   return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
  4179. }
  4180.  
  4181. static __inline__ vector bool short __ATTRS_o_ai
  4182. vec_lvx(long __a, const vector bool short *__b) {
  4183.   return (vector bool short)__builtin_altivec_lvx(__a, __b);
  4184. }
  4185.  
  4186. static __inline__ vector pixel __ATTRS_o_ai vec_lvx(long __a,
  4187.                                                     const vector pixel *__b) {
  4188.   return (vector pixel)__builtin_altivec_lvx(__a, __b);
  4189. }
  4190.  
  4191. static __inline__ vector int __ATTRS_o_ai vec_lvx(long __a,
  4192.                                                   const vector int *__b) {
  4193.   return (vector int)__builtin_altivec_lvx(__a, __b);
  4194. }
  4195.  
  4196. static __inline__ vector int __ATTRS_o_ai vec_lvx(long __a, const int *__b) {
  4197.   return (vector int)__builtin_altivec_lvx(__a, __b);
  4198. }
  4199.  
  4200. static __inline__ vector unsigned int __ATTRS_o_ai
  4201. vec_lvx(long __a, const vector unsigned int *__b) {
  4202.   return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
  4203. }
  4204.  
  4205. static __inline__ vector unsigned int __ATTRS_o_ai
  4206. vec_lvx(long __a, const unsigned int *__b) {
  4207.   return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
  4208. }
  4209.  
  4210. static __inline__ vector bool int __ATTRS_o_ai
  4211. vec_lvx(long __a, const vector bool int *__b) {
  4212.   return (vector bool int)__builtin_altivec_lvx(__a, __b);
  4213. }
  4214.  
  4215. static __inline__ vector float __ATTRS_o_ai vec_lvx(long __a,
  4216.                                                     const vector float *__b) {
  4217.   return (vector float)__builtin_altivec_lvx(__a, __b);
  4218. }
  4219.  
  4220. static __inline__ vector float __ATTRS_o_ai vec_lvx(long __a, const float *__b) {
  4221.   return (vector float)__builtin_altivec_lvx(__a, __b);
  4222. }
  4223.  
  4224. /* vec_lde */
  4225.  
  4226. static __inline__ vector signed char __ATTRS_o_ai
  4227. vec_lde(long __a, const signed char *__b) {
  4228.   return (vector signed char)__builtin_altivec_lvebx(__a, __b);
  4229. }
  4230.  
  4231. static __inline__ vector unsigned char __ATTRS_o_ai
  4232. vec_lde(long __a, const unsigned char *__b) {
  4233.   return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
  4234. }
  4235.  
  4236. static __inline__ vector short __ATTRS_o_ai vec_lde(long __a, const short *__b) {
  4237.   return (vector short)__builtin_altivec_lvehx(__a, __b);
  4238. }
  4239.  
  4240. static __inline__ vector unsigned short __ATTRS_o_ai
  4241. vec_lde(long __a, const unsigned short *__b) {
  4242.   return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
  4243. }
  4244.  
  4245. static __inline__ vector int __ATTRS_o_ai vec_lde(long __a, const int *__b) {
  4246.   return (vector int)__builtin_altivec_lvewx(__a, __b);
  4247. }
  4248.  
  4249. static __inline__ vector unsigned int __ATTRS_o_ai
  4250. vec_lde(long __a, const unsigned int *__b) {
  4251.   return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
  4252. }
  4253.  
  4254. static __inline__ vector float __ATTRS_o_ai vec_lde(long __a, const float *__b) {
  4255.   return (vector float)__builtin_altivec_lvewx(__a, __b);
  4256. }
  4257.  
  4258. /* vec_lvebx */
  4259.  
  4260. static __inline__ vector signed char __ATTRS_o_ai
  4261. vec_lvebx(long __a, const signed char *__b) {
  4262.   return (vector signed char)__builtin_altivec_lvebx(__a, __b);
  4263. }
  4264.  
  4265. static __inline__ vector unsigned char __ATTRS_o_ai
  4266. vec_lvebx(long __a, const unsigned char *__b) {
  4267.   return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
  4268. }
  4269.  
  4270. /* vec_lvehx */
  4271.  
  4272. static __inline__ vector short __ATTRS_o_ai vec_lvehx(long __a,
  4273.                                                       const short *__b) {
  4274.   return (vector short)__builtin_altivec_lvehx(__a, __b);
  4275. }
  4276.  
  4277. static __inline__ vector unsigned short __ATTRS_o_ai
  4278. vec_lvehx(long __a, const unsigned short *__b) {
  4279.   return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
  4280. }
  4281.  
  4282. /* vec_lvewx */
  4283.  
  4284. static __inline__ vector int __ATTRS_o_ai vec_lvewx(long __a, const int *__b) {
  4285.   return (vector int)__builtin_altivec_lvewx(__a, __b);
  4286. }
  4287.  
  4288. static __inline__ vector unsigned int __ATTRS_o_ai
  4289. vec_lvewx(long __a, const unsigned int *__b) {
  4290.   return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
  4291. }
  4292.  
  4293. static __inline__ vector float __ATTRS_o_ai vec_lvewx(long __a,
  4294.                                                       const float *__b) {
  4295.   return (vector float)__builtin_altivec_lvewx(__a, __b);
  4296. }
  4297.  
  4298. /* vec_ldl */
  4299.  
  4300. static __inline__ vector signed char __ATTRS_o_ai
  4301. vec_ldl(long __a, const vector signed char *__b) {
  4302.   return (vector signed char)__builtin_altivec_lvxl(__a, __b);
  4303. }
  4304.  
  4305. static __inline__ vector signed char __ATTRS_o_ai
  4306. vec_ldl(long __a, const signed char *__b) {
  4307.   return (vector signed char)__builtin_altivec_lvxl(__a, __b);
  4308. }
  4309.  
  4310. static __inline__ vector unsigned char __ATTRS_o_ai
  4311. vec_ldl(long __a, const vector unsigned char *__b) {
  4312.   return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
  4313. }
  4314.  
  4315. static __inline__ vector unsigned char __ATTRS_o_ai
  4316. vec_ldl(long __a, const unsigned char *__b) {
  4317.   return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
  4318. }
  4319.  
  4320. static __inline__ vector bool char __ATTRS_o_ai
  4321. vec_ldl(long __a, const vector bool char *__b) {
  4322.   return (vector bool char)__builtin_altivec_lvxl(__a, __b);
  4323. }
  4324.  
  4325. static __inline__ vector short __ATTRS_o_ai vec_ldl(long __a,
  4326.                                                     const vector short *__b) {
  4327.   return (vector short)__builtin_altivec_lvxl(__a, __b);
  4328. }
  4329.  
  4330. static __inline__ vector short __ATTRS_o_ai vec_ldl(long __a, const short *__b) {
  4331.   return (vector short)__builtin_altivec_lvxl(__a, __b);
  4332. }
  4333.  
  4334. static __inline__ vector unsigned short __ATTRS_o_ai
  4335. vec_ldl(long __a, const vector unsigned short *__b) {
  4336.   return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
  4337. }
  4338.  
  4339. static __inline__ vector unsigned short __ATTRS_o_ai
  4340. vec_ldl(long __a, const unsigned short *__b) {
  4341.   return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
  4342. }
  4343.  
  4344. static __inline__ vector bool short __ATTRS_o_ai
  4345. vec_ldl(long __a, const vector bool short *__b) {
  4346.   return (vector bool short)__builtin_altivec_lvxl(__a, __b);
  4347. }
  4348.  
  4349. static __inline__ vector pixel __ATTRS_o_ai vec_ldl(long __a,
  4350.                                                     const vector pixel *__b) {
  4351.   return (vector pixel short)__builtin_altivec_lvxl(__a, __b);
  4352. }
  4353.  
  4354. static __inline__ vector int __ATTRS_o_ai vec_ldl(long __a,
  4355.                                                   const vector int *__b) {
  4356.   return (vector int)__builtin_altivec_lvxl(__a, __b);
  4357. }
  4358.  
  4359. static __inline__ vector int __ATTRS_o_ai vec_ldl(long __a, const int *__b) {
  4360.   return (vector int)__builtin_altivec_lvxl(__a, __b);
  4361. }
  4362.  
  4363. static __inline__ vector unsigned int __ATTRS_o_ai
  4364. vec_ldl(long __a, const vector unsigned int *__b) {
  4365.   return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
  4366. }
  4367.  
  4368. static __inline__ vector unsigned int __ATTRS_o_ai
  4369. vec_ldl(long __a, const unsigned int *__b) {
  4370.   return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
  4371. }
  4372.  
  4373. static __inline__ vector bool int __ATTRS_o_ai
  4374. vec_ldl(long __a, const vector bool int *__b) {
  4375.   return (vector bool int)__builtin_altivec_lvxl(__a, __b);
  4376. }
  4377.  
  4378. static __inline__ vector float __ATTRS_o_ai vec_ldl(long __a,
  4379.                                                     const vector float *__b) {
  4380.   return (vector float)__builtin_altivec_lvxl(__a, __b);
  4381. }
  4382.  
  4383. static __inline__ vector float __ATTRS_o_ai vec_ldl(long __a, const float *__b) {
  4384.   return (vector float)__builtin_altivec_lvxl(__a, __b);
  4385. }
  4386.  
  4387. /* vec_lvxl */
  4388.  
  4389. static __inline__ vector signed char __ATTRS_o_ai
  4390. vec_lvxl(long __a, const vector signed char *__b) {
  4391.   return (vector signed char)__builtin_altivec_lvxl(__a, __b);
  4392. }
  4393.  
  4394. static __inline__ vector signed char __ATTRS_o_ai
  4395. vec_lvxl(long __a, const signed char *__b) {
  4396.   return (vector signed char)__builtin_altivec_lvxl(__a, __b);
  4397. }
  4398.  
  4399. static __inline__ vector unsigned char __ATTRS_o_ai
  4400. vec_lvxl(long __a, const vector unsigned char *__b) {
  4401.   return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
  4402. }
  4403.  
  4404. static __inline__ vector unsigned char __ATTRS_o_ai
  4405. vec_lvxl(long __a, const unsigned char *__b) {
  4406.   return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
  4407. }
  4408.  
  4409. static __inline__ vector bool char __ATTRS_o_ai
  4410. vec_lvxl(long __a, const vector bool char *__b) {
  4411.   return (vector bool char)__builtin_altivec_lvxl(__a, __b);
  4412. }
  4413.  
  4414. static __inline__ vector short __ATTRS_o_ai vec_lvxl(long __a,
  4415.                                                      const vector short *__b) {
  4416.   return (vector short)__builtin_altivec_lvxl(__a, __b);
  4417. }
  4418.  
  4419. static __inline__ vector short __ATTRS_o_ai vec_lvxl(long __a,
  4420.                                                      const short *__b) {
  4421.   return (vector short)__builtin_altivec_lvxl(__a, __b);
  4422. }
  4423.  
  4424. static __inline__ vector unsigned short __ATTRS_o_ai
  4425. vec_lvxl(long __a, const vector unsigned short *__b) {
  4426.   return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
  4427. }
  4428.  
  4429. static __inline__ vector unsigned short __ATTRS_o_ai
  4430. vec_lvxl(long __a, const unsigned short *__b) {
  4431.   return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
  4432. }
  4433.  
  4434. static __inline__ vector bool short __ATTRS_o_ai
  4435. vec_lvxl(long __a, const vector bool short *__b) {
  4436.   return (vector bool short)__builtin_altivec_lvxl(__a, __b);
  4437. }
  4438.  
  4439. static __inline__ vector pixel __ATTRS_o_ai vec_lvxl(long __a,
  4440.                                                      const vector pixel *__b) {
  4441.   return (vector pixel)__builtin_altivec_lvxl(__a, __b);
  4442. }
  4443.  
  4444. static __inline__ vector int __ATTRS_o_ai vec_lvxl(long __a,
  4445.                                                    const vector int *__b) {
  4446.   return (vector int)__builtin_altivec_lvxl(__a, __b);
  4447. }
  4448.  
  4449. static __inline__ vector int __ATTRS_o_ai vec_lvxl(long __a, const int *__b) {
  4450.   return (vector int)__builtin_altivec_lvxl(__a, __b);
  4451. }
  4452.  
  4453. static __inline__ vector unsigned int __ATTRS_o_ai
  4454. vec_lvxl(long __a, const vector unsigned int *__b) {
  4455.   return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
  4456. }
  4457.  
  4458. static __inline__ vector unsigned int __ATTRS_o_ai
  4459. vec_lvxl(long __a, const unsigned int *__b) {
  4460.   return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
  4461. }
  4462.  
  4463. static __inline__ vector bool int __ATTRS_o_ai
  4464. vec_lvxl(long __a, const vector bool int *__b) {
  4465.   return (vector bool int)__builtin_altivec_lvxl(__a, __b);
  4466. }
  4467.  
  4468. static __inline__ vector float __ATTRS_o_ai vec_lvxl(long __a,
  4469.                                                      const vector float *__b) {
  4470.   return (vector float)__builtin_altivec_lvxl(__a, __b);
  4471. }
  4472.  
  4473. static __inline__ vector float __ATTRS_o_ai vec_lvxl(long __a,
  4474.                                                      const float *__b) {
  4475.   return (vector float)__builtin_altivec_lvxl(__a, __b);
  4476. }
  4477.  
  4478. /* vec_loge */
  4479.  
  4480. static __inline__ vector float __attribute__((__always_inline__))
  4481. vec_loge(vector float __a) {
  4482.   return __builtin_altivec_vlogefp(__a);
  4483. }
  4484.  
  4485. /* vec_vlogefp */
  4486.  
  4487. static __inline__ vector float __attribute__((__always_inline__))
  4488. vec_vlogefp(vector float __a) {
  4489.   return __builtin_altivec_vlogefp(__a);
  4490. }
  4491.  
  4492. /* vec_lvsl */
  4493.  
  4494. #ifdef __LITTLE_ENDIAN__
  4495. static __inline__ vector unsigned char __ATTRS_o_ai
  4496.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4497. loads/stores"))) vec_lvsl(int __a, const signed char *__b) {
  4498.   vector unsigned char mask =
  4499.       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4500.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4501.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4502.   return vec_perm(mask, mask, reverse);
  4503. }
  4504. #else
  4505. static __inline__ vector unsigned char __ATTRS_o_ai
  4506. vec_lvsl(int __a, const signed char *__b) {
  4507.   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4508. }
  4509. #endif
  4510.  
  4511. #ifdef __LITTLE_ENDIAN__
  4512. static __inline__ vector unsigned char __ATTRS_o_ai
  4513.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4514. loads/stores"))) vec_lvsl(int __a, const unsigned char *__b) {
  4515.   vector unsigned char mask =
  4516.       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4517.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4518.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4519.   return vec_perm(mask, mask, reverse);
  4520. }
  4521. #else
  4522. static __inline__ vector unsigned char __ATTRS_o_ai
  4523. vec_lvsl(int __a, const unsigned char *__b) {
  4524.   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4525. }
  4526. #endif
  4527.  
  4528. #ifdef __LITTLE_ENDIAN__
  4529. static __inline__ vector unsigned char __ATTRS_o_ai
  4530.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4531. loads/stores"))) vec_lvsl(int __a, const short *__b) {
  4532.   vector unsigned char mask =
  4533.       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4534.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4535.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4536.   return vec_perm(mask, mask, reverse);
  4537. }
  4538. #else
  4539. static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
  4540.                                                              const short *__b) {
  4541.   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4542. }
  4543. #endif
  4544.  
  4545. #ifdef __LITTLE_ENDIAN__
  4546. static __inline__ vector unsigned char __ATTRS_o_ai
  4547.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4548. loads/stores"))) vec_lvsl(int __a, const unsigned short *__b) {
  4549.   vector unsigned char mask =
  4550.       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4551.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4552.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4553.   return vec_perm(mask, mask, reverse);
  4554. }
  4555. #else
  4556. static __inline__ vector unsigned char __ATTRS_o_ai
  4557. vec_lvsl(int __a, const unsigned short *__b) {
  4558.   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4559. }
  4560. #endif
  4561.  
  4562. #ifdef __LITTLE_ENDIAN__
  4563. static __inline__ vector unsigned char __ATTRS_o_ai
  4564.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4565. loads/stores"))) vec_lvsl(int __a, const int *__b) {
  4566.   vector unsigned char mask =
  4567.       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4568.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4569.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4570.   return vec_perm(mask, mask, reverse);
  4571. }
  4572. #else
  4573. static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
  4574.                                                              const int *__b) {
  4575.   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4576. }
  4577. #endif
  4578.  
  4579. #ifdef __LITTLE_ENDIAN__
  4580. static __inline__ vector unsigned char __ATTRS_o_ai
  4581.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4582. loads/stores"))) vec_lvsl(int __a, const unsigned int *__b) {
  4583.   vector unsigned char mask =
  4584.       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4585.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4586.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4587.   return vec_perm(mask, mask, reverse);
  4588. }
  4589. #else
  4590. static __inline__ vector unsigned char __ATTRS_o_ai
  4591. vec_lvsl(int __a, const unsigned int *__b) {
  4592.   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4593. }
  4594. #endif
  4595.  
  4596. #ifdef __LITTLE_ENDIAN__
  4597. static __inline__ vector unsigned char __ATTRS_o_ai
  4598.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4599. loads/stores"))) vec_lvsl(int __a, const float *__b) {
  4600.   vector unsigned char mask =
  4601.       (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4602.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4603.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4604.   return vec_perm(mask, mask, reverse);
  4605. }
  4606. #else
  4607. static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
  4608.                                                              const float *__b) {
  4609.   return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
  4610. }
  4611. #endif
  4612.  
  4613. /* vec_lvsr */
  4614.  
  4615. #ifdef __LITTLE_ENDIAN__
  4616. static __inline__ vector unsigned char __ATTRS_o_ai
  4617.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4618. loads/stores"))) vec_lvsr(int __a, const signed char *__b) {
  4619.   vector unsigned char mask =
  4620.       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4621.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4622.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4623.   return vec_perm(mask, mask, reverse);
  4624. }
  4625. #else
  4626. static __inline__ vector unsigned char __ATTRS_o_ai
  4627. vec_lvsr(int __a, const signed char *__b) {
  4628.   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4629. }
  4630. #endif
  4631.  
  4632. #ifdef __LITTLE_ENDIAN__
  4633. static __inline__ vector unsigned char __ATTRS_o_ai
  4634.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4635. loads/stores"))) vec_lvsr(int __a, const unsigned char *__b) {
  4636.   vector unsigned char mask =
  4637.       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4638.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4639.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4640.   return vec_perm(mask, mask, reverse);
  4641. }
  4642. #else
  4643. static __inline__ vector unsigned char __ATTRS_o_ai
  4644. vec_lvsr(int __a, const unsigned char *__b) {
  4645.   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4646. }
  4647. #endif
  4648.  
  4649. #ifdef __LITTLE_ENDIAN__
  4650. static __inline__ vector unsigned char __ATTRS_o_ai
  4651.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4652. loads/stores"))) vec_lvsr(int __a, const short *__b) {
  4653.   vector unsigned char mask =
  4654.       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4655.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4656.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4657.   return vec_perm(mask, mask, reverse);
  4658. }
  4659. #else
  4660. static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
  4661.                                                              const short *__b) {
  4662.   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4663. }
  4664. #endif
  4665.  
  4666. #ifdef __LITTLE_ENDIAN__
  4667. static __inline__ vector unsigned char __ATTRS_o_ai
  4668.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4669. loads/stores"))) vec_lvsr(int __a, const unsigned short *__b) {
  4670.   vector unsigned char mask =
  4671.       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4672.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4673.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4674.   return vec_perm(mask, mask, reverse);
  4675. }
  4676. #else
  4677. static __inline__ vector unsigned char __ATTRS_o_ai
  4678. vec_lvsr(int __a, const unsigned short *__b) {
  4679.   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4680. }
  4681. #endif
  4682.  
  4683. #ifdef __LITTLE_ENDIAN__
  4684. static __inline__ vector unsigned char __ATTRS_o_ai
  4685.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4686. loads/stores"))) vec_lvsr(int __a, const int *__b) {
  4687.   vector unsigned char mask =
  4688.       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4689.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4690.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4691.   return vec_perm(mask, mask, reverse);
  4692. }
  4693. #else
  4694. static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
  4695.                                                              const int *__b) {
  4696.   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4697. }
  4698. #endif
  4699.  
  4700. #ifdef __LITTLE_ENDIAN__
  4701. static __inline__ vector unsigned char __ATTRS_o_ai
  4702.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4703. loads/stores"))) vec_lvsr(int __a, const unsigned int *__b) {
  4704.   vector unsigned char mask =
  4705.       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4706.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4707.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4708.   return vec_perm(mask, mask, reverse);
  4709. }
  4710. #else
  4711. static __inline__ vector unsigned char __ATTRS_o_ai
  4712. vec_lvsr(int __a, const unsigned int *__b) {
  4713.   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4714. }
  4715. #endif
  4716.  
  4717. #ifdef __LITTLE_ENDIAN__
  4718. static __inline__ vector unsigned char __ATTRS_o_ai
  4719.     __attribute__((__deprecated__("use assignment for unaligned little endian \
  4720. loads/stores"))) vec_lvsr(int __a, const float *__b) {
  4721.   vector unsigned char mask =
  4722.       (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4723.   vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
  4724.                                   7,  6,  5,  4,  3,  2,  1, 0};
  4725.   return vec_perm(mask, mask, reverse);
  4726. }
  4727. #else
  4728. static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
  4729.                                                              const float *__b) {
  4730.   return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
  4731. }
  4732. #endif
  4733.  
  4734. /* vec_madd */
  4735. static __inline__ vector signed short __ATTRS_o_ai
  4736. vec_mladd(vector signed short, vector signed short, vector signed short);
  4737. static __inline__ vector signed short __ATTRS_o_ai
  4738. vec_mladd(vector signed short, vector unsigned short, vector unsigned short);
  4739. static __inline__ vector signed short __ATTRS_o_ai
  4740. vec_mladd(vector unsigned short, vector signed short, vector signed short);
  4741. static __inline__ vector unsigned short __ATTRS_o_ai
  4742. vec_mladd(vector unsigned short, vector unsigned short, vector unsigned short);
  4743.  
  4744. static __inline__ vector signed short __ATTRS_o_ai vec_madd(
  4745.     vector signed short __a, vector signed short __b, vector signed short __c) {
  4746.   return vec_mladd(__a, __b, __c);
  4747. }
  4748.  
  4749. static __inline__ vector signed short __ATTRS_o_ai
  4750. vec_madd(vector signed short __a, vector unsigned short __b,
  4751.          vector unsigned short __c) {
  4752.   return vec_mladd(__a, __b, __c);
  4753. }
  4754.  
  4755. static __inline__ vector signed short __ATTRS_o_ai
  4756. vec_madd(vector unsigned short __a, vector signed short __b,
  4757.          vector signed short __c) {
  4758.   return vec_mladd(__a, __b, __c);
  4759. }
  4760.  
  4761. static __inline__ vector unsigned short __ATTRS_o_ai
  4762. vec_madd(vector unsigned short __a, vector unsigned short __b,
  4763.          vector unsigned short __c) {
  4764.   return vec_mladd(__a, __b, __c);
  4765. }
  4766.  
  4767. static __inline__ vector float __ATTRS_o_ai vec_madd(vector float __a,
  4768.                                                      vector float __b,
  4769.                                                      vector float __c) {
  4770. #ifdef __VSX__
  4771.   return __builtin_vsx_xvmaddasp(__a, __b, __c);
  4772. #else
  4773.   return __builtin_altivec_vmaddfp(__a, __b, __c);
  4774. #endif
  4775. }
  4776.  
  4777. #ifdef __VSX__
  4778. static __inline__ vector double __ATTRS_o_ai vec_madd(vector double __a,
  4779.                                                       vector double __b,
  4780.                                                       vector double __c) {
  4781.   return __builtin_vsx_xvmaddadp(__a, __b, __c);
  4782. }
  4783. #endif
  4784.  
  4785. /* vec_vmaddfp */
  4786.  
  4787. static __inline__ vector float __attribute__((__always_inline__))
  4788. vec_vmaddfp(vector float __a, vector float __b, vector float __c) {
  4789.   return __builtin_altivec_vmaddfp(__a, __b, __c);
  4790. }
  4791.  
  4792. /* vec_madds */
  4793.  
  4794. static __inline__ vector signed short __attribute__((__always_inline__))
  4795. vec_madds(vector signed short __a, vector signed short __b,
  4796.           vector signed short __c) {
  4797.   return __builtin_altivec_vmhaddshs(__a, __b, __c);
  4798. }
  4799.  
  4800. /* vec_vmhaddshs */
  4801. static __inline__ vector signed short __attribute__((__always_inline__))
  4802. vec_vmhaddshs(vector signed short __a, vector signed short __b,
  4803.               vector signed short __c) {
  4804.   return __builtin_altivec_vmhaddshs(__a, __b, __c);
  4805. }
  4806.  
  4807. /* vec_msub */
  4808.  
  4809. #ifdef __VSX__
  4810. static __inline__ vector float __ATTRS_o_ai vec_msub(vector float __a,
  4811.                                                      vector float __b,
  4812.                                                      vector float __c) {
  4813.   return __builtin_vsx_xvmsubasp(__a, __b, __c);
  4814. }
  4815.  
  4816. static __inline__ vector double __ATTRS_o_ai vec_msub(vector double __a,
  4817.                                                       vector double __b,
  4818.                                                       vector double __c) {
  4819.   return __builtin_vsx_xvmsubadp(__a, __b, __c);
  4820. }
  4821. #endif
  4822.  
  4823. /* vec_max */
  4824.  
  4825. static __inline__ vector signed char __ATTRS_o_ai
  4826. vec_max(vector signed char __a, vector signed char __b) {
  4827.   return __builtin_altivec_vmaxsb(__a, __b);
  4828. }
  4829.  
  4830. static __inline__ vector signed char __ATTRS_o_ai
  4831. vec_max(vector bool char __a, vector signed char __b) {
  4832.   return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
  4833. }
  4834.  
  4835. static __inline__ vector signed char __ATTRS_o_ai
  4836. vec_max(vector signed char __a, vector bool char __b) {
  4837.   return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
  4838. }
  4839.  
  4840. static __inline__ vector unsigned char __ATTRS_o_ai
  4841. vec_max(vector unsigned char __a, vector unsigned char __b) {
  4842.   return __builtin_altivec_vmaxub(__a, __b);
  4843. }
  4844.  
  4845. static __inline__ vector unsigned char __ATTRS_o_ai
  4846. vec_max(vector bool char __a, vector unsigned char __b) {
  4847.   return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
  4848. }
  4849.  
  4850. static __inline__ vector unsigned char __ATTRS_o_ai
  4851. vec_max(vector unsigned char __a, vector bool char __b) {
  4852.   return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
  4853. }
  4854.  
  4855. static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
  4856.                                                     vector short __b) {
  4857.   return __builtin_altivec_vmaxsh(__a, __b);
  4858. }
  4859.  
  4860. static __inline__ vector short __ATTRS_o_ai vec_max(vector bool short __a,
  4861.                                                     vector short __b) {
  4862.   return __builtin_altivec_vmaxsh((vector short)__a, __b);
  4863. }
  4864.  
  4865. static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
  4866.                                                     vector bool short __b) {
  4867.   return __builtin_altivec_vmaxsh(__a, (vector short)__b);
  4868. }
  4869.  
  4870. static __inline__ vector unsigned short __ATTRS_o_ai
  4871. vec_max(vector unsigned short __a, vector unsigned short __b) {
  4872.   return __builtin_altivec_vmaxuh(__a, __b);
  4873. }
  4874.  
  4875. static __inline__ vector unsigned short __ATTRS_o_ai
  4876. vec_max(vector bool short __a, vector unsigned short __b) {
  4877.   return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
  4878. }
  4879.  
  4880. static __inline__ vector unsigned short __ATTRS_o_ai
  4881. vec_max(vector unsigned short __a, vector bool short __b) {
  4882.   return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
  4883. }
  4884.  
  4885. static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
  4886.                                                   vector int __b) {
  4887.   return __builtin_altivec_vmaxsw(__a, __b);
  4888. }
  4889.  
  4890. static __inline__ vector int __ATTRS_o_ai vec_max(vector bool int __a,
  4891.                                                   vector int __b) {
  4892.   return __builtin_altivec_vmaxsw((vector int)__a, __b);
  4893. }
  4894.  
  4895. static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
  4896.                                                   vector bool int __b) {
  4897.   return __builtin_altivec_vmaxsw(__a, (vector int)__b);
  4898. }
  4899.  
  4900. static __inline__ vector unsigned int __ATTRS_o_ai
  4901. vec_max(vector unsigned int __a, vector unsigned int __b) {
  4902.   return __builtin_altivec_vmaxuw(__a, __b);
  4903. }
  4904.  
  4905. static __inline__ vector unsigned int __ATTRS_o_ai
  4906. vec_max(vector bool int __a, vector unsigned int __b) {
  4907.   return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
  4908. }
  4909.  
  4910. static __inline__ vector unsigned int __ATTRS_o_ai
  4911. vec_max(vector unsigned int __a, vector bool int __b) {
  4912.   return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
  4913. }
  4914.  
  4915. #ifdef __POWER8_VECTOR__
  4916. static __inline__ vector signed long long __ATTRS_o_ai
  4917. vec_max(vector signed long long __a, vector signed long long __b) {
  4918.   return __builtin_altivec_vmaxsd(__a, __b);
  4919. }
  4920.  
  4921. static __inline__ vector signed long long __ATTRS_o_ai
  4922. vec_max(vector bool long long __a, vector signed long long __b) {
  4923.   return __builtin_altivec_vmaxsd((vector signed long long)__a, __b);
  4924. }
  4925.  
  4926. static __inline__ vector signed long long __ATTRS_o_ai
  4927. vec_max(vector signed long long __a, vector bool long long __b) {
  4928.   return __builtin_altivec_vmaxsd(__a, (vector signed long long)__b);
  4929. }
  4930.  
  4931. static __inline__ vector unsigned long long __ATTRS_o_ai
  4932. vec_max(vector unsigned long long __a, vector unsigned long long __b) {
  4933.   return __builtin_altivec_vmaxud(__a, __b);
  4934. }
  4935.  
  4936. static __inline__ vector unsigned long long __ATTRS_o_ai
  4937. vec_max(vector bool long long __a, vector unsigned long long __b) {
  4938.   return __builtin_altivec_vmaxud((vector unsigned long long)__a, __b);
  4939. }
  4940.  
  4941. static __inline__ vector unsigned long long __ATTRS_o_ai
  4942. vec_max(vector unsigned long long __a, vector bool long long __b) {
  4943.   return __builtin_altivec_vmaxud(__a, (vector unsigned long long)__b);
  4944. }
  4945. #endif
  4946.  
  4947. static __inline__ vector float __ATTRS_o_ai vec_max(vector float __a,
  4948.                                                     vector float __b) {
  4949. #ifdef __VSX__
  4950.   return __builtin_vsx_xvmaxsp(__a, __b);
  4951. #else
  4952.   return __builtin_altivec_vmaxfp(__a, __b);
  4953. #endif
  4954. }
  4955.  
  4956. #ifdef __VSX__
  4957. static __inline__ vector double __ATTRS_o_ai vec_max(vector double __a,
  4958.                                                      vector double __b) {
  4959.   return __builtin_vsx_xvmaxdp(__a, __b);
  4960. }
  4961. #endif
  4962.  
  4963. /* vec_vmaxsb */
  4964.  
  4965. static __inline__ vector signed char __ATTRS_o_ai
  4966. vec_vmaxsb(vector signed char __a, vector signed char __b) {
  4967.   return __builtin_altivec_vmaxsb(__a, __b);
  4968. }
  4969.  
  4970. static __inline__ vector signed char __ATTRS_o_ai
  4971. vec_vmaxsb(vector bool char __a, vector signed char __b) {
  4972.   return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
  4973. }
  4974.  
  4975. static __inline__ vector signed char __ATTRS_o_ai
  4976. vec_vmaxsb(vector signed char __a, vector bool char __b) {
  4977.   return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
  4978. }
  4979.  
  4980. /* vec_vmaxub */
  4981.  
  4982. static __inline__ vector unsigned char __ATTRS_o_ai
  4983. vec_vmaxub(vector unsigned char __a, vector unsigned char __b) {
  4984.   return __builtin_altivec_vmaxub(__a, __b);
  4985. }
  4986.  
  4987. static __inline__ vector unsigned char __ATTRS_o_ai
  4988. vec_vmaxub(vector bool char __a, vector unsigned char __b) {
  4989.   return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
  4990. }
  4991.  
  4992. static __inline__ vector unsigned char __ATTRS_o_ai
  4993. vec_vmaxub(vector unsigned char __a, vector bool char __b) {
  4994.   return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
  4995. }
  4996.  
  4997. /* vec_vmaxsh */
  4998.  
  4999. static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
  5000.                                                        vector short __b) {
  5001.   return __builtin_altivec_vmaxsh(__a, __b);
  5002. }
  5003.  
  5004. static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector bool short __a,
  5005.                                                        vector short __b) {
  5006.   return __builtin_altivec_vmaxsh((vector short)__a, __b);
  5007. }
  5008.  
  5009. static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
  5010.                                                        vector bool short __b) {
  5011.   return __builtin_altivec_vmaxsh(__a, (vector short)__b);
  5012. }
  5013.  
  5014. /* vec_vmaxuh */
  5015.  
  5016. static __inline__ vector unsigned short __ATTRS_o_ai
  5017. vec_vmaxuh(vector unsigned short __a, vector unsigned short __b) {
  5018.   return __builtin_altivec_vmaxuh(__a, __b);
  5019. }
  5020.  
  5021. static __inline__ vector unsigned short __ATTRS_o_ai
  5022. vec_vmaxuh(vector bool short __a, vector unsigned short __b) {
  5023.   return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
  5024. }
  5025.  
  5026. static __inline__ vector unsigned short __ATTRS_o_ai
  5027. vec_vmaxuh(vector unsigned short __a, vector bool short __b) {
  5028.   return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
  5029. }
  5030.  
  5031. /* vec_vmaxsw */
  5032.  
  5033. static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
  5034.                                                      vector int __b) {
  5035.   return __builtin_altivec_vmaxsw(__a, __b);
  5036. }
  5037.  
  5038. static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector bool int __a,
  5039.                                                      vector int __b) {
  5040.   return __builtin_altivec_vmaxsw((vector int)__a, __b);
  5041. }
  5042.  
  5043. static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
  5044.                                                      vector bool int __b) {
  5045.   return __builtin_altivec_vmaxsw(__a, (vector int)__b);
  5046. }
  5047.  
  5048. /* vec_vmaxuw */
  5049.  
  5050. static __inline__ vector unsigned int __ATTRS_o_ai
  5051. vec_vmaxuw(vector unsigned int __a, vector unsigned int __b) {
  5052.   return __builtin_altivec_vmaxuw(__a, __b);
  5053. }
  5054.  
  5055. static __inline__ vector unsigned int __ATTRS_o_ai
  5056. vec_vmaxuw(vector bool int __a, vector unsigned int __b) {
  5057.   return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
  5058. }
  5059.  
  5060. static __inline__ vector unsigned int __ATTRS_o_ai
  5061. vec_vmaxuw(vector unsigned int __a, vector bool int __b) {
  5062.   return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
  5063. }
  5064.  
  5065. /* vec_vmaxfp */
  5066.  
  5067. static __inline__ vector float __attribute__((__always_inline__))
  5068. vec_vmaxfp(vector float __a, vector float __b) {
  5069. #ifdef __VSX__
  5070.   return __builtin_vsx_xvmaxsp(__a, __b);
  5071. #else
  5072.   return __builtin_altivec_vmaxfp(__a, __b);
  5073. #endif
  5074. }
  5075.  
  5076. /* vec_mergeh */
  5077.  
  5078. static __inline__ vector signed char __ATTRS_o_ai
  5079. vec_mergeh(vector signed char __a, vector signed char __b) {
  5080.   return vec_perm(__a, __b,
  5081.                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
  5082.                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
  5083.                                          0x06, 0x16, 0x07, 0x17));
  5084. }
  5085.  
  5086. static __inline__ vector unsigned char __ATTRS_o_ai
  5087. vec_mergeh(vector unsigned char __a, vector unsigned char __b) {
  5088.   return vec_perm(__a, __b,
  5089.                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
  5090.                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
  5091.                                          0x06, 0x16, 0x07, 0x17));
  5092. }
  5093.  
  5094. static __inline__ vector bool char __ATTRS_o_ai
  5095. vec_mergeh(vector bool char __a, vector bool char __b) {
  5096.   return vec_perm(__a, __b,
  5097.                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
  5098.                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
  5099.                                          0x06, 0x16, 0x07, 0x17));
  5100. }
  5101.  
  5102. static __inline__ vector short __ATTRS_o_ai vec_mergeh(vector short __a,
  5103.                                                        vector short __b) {
  5104.   return vec_perm(__a, __b,
  5105.                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
  5106.                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
  5107.                                          0x06, 0x07, 0x16, 0x17));
  5108. }
  5109.  
  5110. static __inline__ vector unsigned short __ATTRS_o_ai
  5111. vec_mergeh(vector unsigned short __a, vector unsigned short __b) {
  5112.   return vec_perm(__a, __b,
  5113.                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
  5114.                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
  5115.                                          0x06, 0x07, 0x16, 0x17));
  5116. }
  5117.  
  5118. static __inline__ vector bool short __ATTRS_o_ai
  5119. vec_mergeh(vector bool short __a, vector bool short __b) {
  5120.   return vec_perm(__a, __b,
  5121.                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
  5122.                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
  5123.                                          0x06, 0x07, 0x16, 0x17));
  5124. }
  5125.  
  5126. static __inline__ vector pixel __ATTRS_o_ai vec_mergeh(vector pixel __a,
  5127.                                                        vector pixel __b) {
  5128.   return vec_perm(__a, __b,
  5129.                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
  5130.                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
  5131.                                          0x06, 0x07, 0x16, 0x17));
  5132. }
  5133.  
  5134. static __inline__ vector int __ATTRS_o_ai vec_mergeh(vector int __a,
  5135.                                                      vector int __b) {
  5136.   return vec_perm(__a, __b,
  5137.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
  5138.                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
  5139.                                          0x14, 0x15, 0x16, 0x17));
  5140. }
  5141.  
  5142. static __inline__ vector unsigned int __ATTRS_o_ai
  5143. vec_mergeh(vector unsigned int __a, vector unsigned int __b) {
  5144.   return vec_perm(__a, __b,
  5145.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
  5146.                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
  5147.                                          0x14, 0x15, 0x16, 0x17));
  5148. }
  5149.  
  5150. static __inline__ vector bool int __ATTRS_o_ai vec_mergeh(vector bool int __a,
  5151.                                                           vector bool int __b) {
  5152.   return vec_perm(__a, __b,
  5153.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
  5154.                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
  5155.                                          0x14, 0x15, 0x16, 0x17));
  5156. }
  5157.  
  5158. static __inline__ vector float __ATTRS_o_ai vec_mergeh(vector float __a,
  5159.                                                        vector float __b) {
  5160.   return vec_perm(__a, __b,
  5161.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
  5162.                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
  5163.                                          0x14, 0x15, 0x16, 0x17));
  5164. }
  5165.  
  5166. #ifdef __VSX__
  5167. static __inline__ vector signed long long __ATTRS_o_ai
  5168. vec_mergeh(vector signed long long __a, vector signed long long __b) {
  5169.   return vec_perm(__a, __b,
  5170.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
  5171.                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
  5172.                                          0x14, 0x15, 0x16, 0x17));
  5173. }
  5174.  
  5175. static __inline__ vector signed long long __ATTRS_o_ai
  5176. vec_mergeh(vector signed long long __a, vector bool long long __b) {
  5177.   return vec_perm(__a, (vector signed long long)__b,
  5178.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
  5179.                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
  5180.                                          0x14, 0x15, 0x16, 0x17));
  5181. }
  5182.  
  5183. static __inline__ vector signed long long __ATTRS_o_ai
  5184. vec_mergeh(vector bool long long __a, vector signed long long __b) {
  5185.   return vec_perm((vector signed long long)__a, __b,
  5186.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
  5187.                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
  5188.                                          0x14, 0x15, 0x16, 0x17));
  5189. }
  5190.  
  5191. static __inline__ vector unsigned long long __ATTRS_o_ai
  5192. vec_mergeh(vector unsigned long long __a, vector unsigned long long __b) {
  5193.   return vec_perm(__a, __b,
  5194.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
  5195.                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
  5196.                                          0x14, 0x15, 0x16, 0x17));
  5197. }
  5198.  
  5199. static __inline__ vector unsigned long long __ATTRS_o_ai
  5200. vec_mergeh(vector unsigned long long __a, vector bool long long __b) {
  5201.   return vec_perm(__a, (vector unsigned long long)__b,
  5202.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
  5203.                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
  5204.                                          0x14, 0x15, 0x16, 0x17));
  5205. }
  5206.  
  5207. static __inline__ vector unsigned long long __ATTRS_o_ai
  5208. vec_mergeh(vector bool long long __a, vector unsigned long long __b) {
  5209.   return vec_perm((vector unsigned long long)__a, __b,
  5210.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
  5211.                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
  5212.                                          0x14, 0x15, 0x16, 0x17));
  5213. }
  5214.  
  5215. static __inline__ vector bool long long __ATTRS_o_ai
  5216. vec_mergeh(vector bool long long __a, vector bool long long __b) {
  5217.   return vec_perm(__a, __b,
  5218.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
  5219.                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
  5220.                                          0x14, 0x15, 0x16, 0x17));
  5221. }
  5222.  
  5223. static __inline__ vector double __ATTRS_o_ai vec_mergeh(vector double __a,
  5224.                                                         vector double __b) {
  5225.   return vec_perm(__a, __b,
  5226.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
  5227.                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
  5228.                                          0x14, 0x15, 0x16, 0x17));
  5229. }
  5230. static __inline__ vector double __ATTRS_o_ai
  5231. vec_mergeh(vector double __a, vector bool long long __b) {
  5232.   return vec_perm(__a, (vector double)__b,
  5233.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
  5234.                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
  5235.                                          0x14, 0x15, 0x16, 0x17));
  5236. }
  5237. static __inline__ vector double __ATTRS_o_ai
  5238. vec_mergeh(vector bool long long __a, vector double __b) {
  5239.   return vec_perm((vector double)__a, __b,
  5240.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
  5241.                                          0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
  5242.                                          0x14, 0x15, 0x16, 0x17));
  5243. }
  5244. #endif
  5245.  
  5246. /* vec_vmrghb */
  5247.  
  5248. #define __builtin_altivec_vmrghb vec_vmrghb
  5249.  
  5250. static __inline__ vector signed char __ATTRS_o_ai
  5251. vec_vmrghb(vector signed char __a, vector signed char __b) {
  5252.   return vec_perm(__a, __b,
  5253.                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
  5254.                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
  5255.                                          0x06, 0x16, 0x07, 0x17));
  5256. }
  5257.  
  5258. static __inline__ vector unsigned char __ATTRS_o_ai
  5259. vec_vmrghb(vector unsigned char __a, vector unsigned char __b) {
  5260.   return vec_perm(__a, __b,
  5261.                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
  5262.                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
  5263.                                          0x06, 0x16, 0x07, 0x17));
  5264. }
  5265.  
  5266. static __inline__ vector bool char __ATTRS_o_ai
  5267. vec_vmrghb(vector bool char __a, vector bool char __b) {
  5268.   return vec_perm(__a, __b,
  5269.                   (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
  5270.                                          0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
  5271.                                          0x06, 0x16, 0x07, 0x17));
  5272. }
  5273.  
  5274. /* vec_vmrghh */
  5275.  
  5276. #define __builtin_altivec_vmrghh vec_vmrghh
  5277.  
  5278. static __inline__ vector short __ATTRS_o_ai vec_vmrghh(vector short __a,
  5279.                                                        vector short __b) {
  5280.   return vec_perm(__a, __b,
  5281.                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
  5282.                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
  5283.                                          0x06, 0x07, 0x16, 0x17));
  5284. }
  5285.  
  5286. static __inline__ vector unsigned short __ATTRS_o_ai
  5287. vec_vmrghh(vector unsigned short __a, vector unsigned short __b) {
  5288.   return vec_perm(__a, __b,
  5289.                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
  5290.                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
  5291.                                          0x06, 0x07, 0x16, 0x17));
  5292. }
  5293.  
  5294. static __inline__ vector bool short __ATTRS_o_ai
  5295. vec_vmrghh(vector bool short __a, vector bool short __b) {
  5296.   return vec_perm(__a, __b,
  5297.                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
  5298.                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
  5299.                                          0x06, 0x07, 0x16, 0x17));
  5300. }
  5301.  
  5302. static __inline__ vector pixel __ATTRS_o_ai vec_vmrghh(vector pixel __a,
  5303.                                                        vector pixel __b) {
  5304.   return vec_perm(__a, __b,
  5305.                   (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
  5306.                                          0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
  5307.                                          0x06, 0x07, 0x16, 0x17));
  5308. }
  5309.  
  5310. /* vec_vmrghw */
  5311.  
  5312. #define __builtin_altivec_vmrghw vec_vmrghw
  5313.  
  5314. static __inline__ vector int __ATTRS_o_ai vec_vmrghw(vector int __a,
  5315.                                                      vector int __b) {
  5316.   return vec_perm(__a, __b,
  5317.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
  5318.                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
  5319.                                          0x14, 0x15, 0x16, 0x17));
  5320. }
  5321.  
  5322. static __inline__ vector unsigned int __ATTRS_o_ai
  5323. vec_vmrghw(vector unsigned int __a, vector unsigned int __b) {
  5324.   return vec_perm(__a, __b,
  5325.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
  5326.                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
  5327.                                          0x14, 0x15, 0x16, 0x17));
  5328. }
  5329.  
  5330. static __inline__ vector bool int __ATTRS_o_ai vec_vmrghw(vector bool int __a,
  5331.                                                           vector bool int __b) {
  5332.   return vec_perm(__a, __b,
  5333.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
  5334.                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
  5335.                                          0x14, 0x15, 0x16, 0x17));
  5336. }
  5337.  
  5338. static __inline__ vector float __ATTRS_o_ai vec_vmrghw(vector float __a,
  5339.                                                        vector float __b) {
  5340.   return vec_perm(__a, __b,
  5341.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
  5342.                                          0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
  5343.                                          0x14, 0x15, 0x16, 0x17));
  5344. }
  5345.  
  5346. /* vec_mergel */
  5347.  
  5348. static __inline__ vector signed char __ATTRS_o_ai
  5349. vec_mergel(vector signed char __a, vector signed char __b) {
  5350.   return vec_perm(__a, __b,
  5351.                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
  5352.                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
  5353.                                          0x0E, 0x1E, 0x0F, 0x1F));
  5354. }
  5355.  
  5356. static __inline__ vector unsigned char __ATTRS_o_ai
  5357. vec_mergel(vector unsigned char __a, vector unsigned char __b) {
  5358.   return vec_perm(__a, __b,
  5359.                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
  5360.                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
  5361.                                          0x0E, 0x1E, 0x0F, 0x1F));
  5362. }
  5363.  
  5364. static __inline__ vector bool char __ATTRS_o_ai
  5365. vec_mergel(vector bool char __a, vector bool char __b) {
  5366.   return vec_perm(__a, __b,
  5367.                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
  5368.                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
  5369.                                          0x0E, 0x1E, 0x0F, 0x1F));
  5370. }
  5371.  
  5372. static __inline__ vector short __ATTRS_o_ai vec_mergel(vector short __a,
  5373.                                                        vector short __b) {
  5374.   return vec_perm(__a, __b,
  5375.                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
  5376.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
  5377.                                          0x0E, 0x0F, 0x1E, 0x1F));
  5378. }
  5379.  
  5380. static __inline__ vector unsigned short __ATTRS_o_ai
  5381. vec_mergel(vector unsigned short __a, vector unsigned short __b) {
  5382.   return vec_perm(__a, __b,
  5383.                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
  5384.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
  5385.                                          0x0E, 0x0F, 0x1E, 0x1F));
  5386. }
  5387.  
  5388. static __inline__ vector bool short __ATTRS_o_ai
  5389. vec_mergel(vector bool short __a, vector bool short __b) {
  5390.   return vec_perm(__a, __b,
  5391.                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
  5392.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
  5393.                                          0x0E, 0x0F, 0x1E, 0x1F));
  5394. }
  5395.  
  5396. static __inline__ vector pixel __ATTRS_o_ai vec_mergel(vector pixel __a,
  5397.                                                        vector pixel __b) {
  5398.   return vec_perm(__a, __b,
  5399.                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
  5400.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
  5401.                                          0x0E, 0x0F, 0x1E, 0x1F));
  5402. }
  5403.  
  5404. static __inline__ vector int __ATTRS_o_ai vec_mergel(vector int __a,
  5405.                                                      vector int __b) {
  5406.   return vec_perm(__a, __b,
  5407.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
  5408.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
  5409.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5410. }
  5411.  
  5412. static __inline__ vector unsigned int __ATTRS_o_ai
  5413. vec_mergel(vector unsigned int __a, vector unsigned int __b) {
  5414.   return vec_perm(__a, __b,
  5415.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
  5416.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
  5417.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5418. }
  5419.  
  5420. static __inline__ vector bool int __ATTRS_o_ai vec_mergel(vector bool int __a,
  5421.                                                           vector bool int __b) {
  5422.   return vec_perm(__a, __b,
  5423.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
  5424.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
  5425.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5426. }
  5427.  
  5428. static __inline__ vector float __ATTRS_o_ai vec_mergel(vector float __a,
  5429.                                                        vector float __b) {
  5430.   return vec_perm(__a, __b,
  5431.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
  5432.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
  5433.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5434. }
  5435.  
  5436. #ifdef __VSX__
  5437. static __inline__ vector signed long long __ATTRS_o_ai
  5438. vec_mergel(vector signed long long __a, vector signed long long __b) {
  5439.   return vec_perm(__a, __b,
  5440.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
  5441.                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
  5442.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5443. }
  5444. static __inline__ vector signed long long __ATTRS_o_ai
  5445. vec_mergel(vector signed long long __a, vector bool long long __b) {
  5446.   return vec_perm(__a, (vector signed long long)__b,
  5447.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
  5448.                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
  5449.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5450. }
  5451. static __inline__ vector signed long long __ATTRS_o_ai
  5452. vec_mergel(vector bool long long __a, vector signed long long __b) {
  5453.   return vec_perm((vector signed long long)__a, __b,
  5454.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
  5455.                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
  5456.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5457. }
  5458. static __inline__ vector unsigned long long __ATTRS_o_ai
  5459. vec_mergel(vector unsigned long long __a, vector unsigned long long __b) {
  5460.   return vec_perm(__a, __b,
  5461.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
  5462.                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
  5463.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5464. }
  5465. static __inline__ vector unsigned long long __ATTRS_o_ai
  5466. vec_mergel(vector unsigned long long __a, vector bool long long __b) {
  5467.   return vec_perm(__a, (vector unsigned long long)__b,
  5468.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
  5469.                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
  5470.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5471. }
  5472. static __inline__ vector unsigned long long __ATTRS_o_ai
  5473. vec_mergel(vector bool long long __a, vector unsigned long long __b) {
  5474.   return vec_perm((vector unsigned long long)__a, __b,
  5475.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
  5476.                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
  5477.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5478. }
  5479. static __inline__ vector bool long long __ATTRS_o_ai
  5480. vec_mergel(vector bool long long __a, vector bool long long __b) {
  5481.   return vec_perm(__a, __b,
  5482.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
  5483.                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
  5484.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5485. }
  5486. static __inline__ vector double __ATTRS_o_ai vec_mergel(vector double __a,
  5487.                                                         vector double __b) {
  5488.   return vec_perm(__a, __b,
  5489.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
  5490.                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
  5491.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5492. }
  5493. static __inline__ vector double __ATTRS_o_ai
  5494. vec_mergel(vector double __a, vector bool long long __b) {
  5495.   return vec_perm(__a, (vector double)__b,
  5496.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
  5497.                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
  5498.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5499. }
  5500. static __inline__ vector double __ATTRS_o_ai
  5501. vec_mergel(vector bool long long __a, vector double __b) {
  5502.   return vec_perm((vector double)__a, __b,
  5503.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
  5504.                                          0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
  5505.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5506. }
  5507. #endif
  5508.  
  5509. /* vec_vmrglb */
  5510.  
  5511. #define __builtin_altivec_vmrglb vec_vmrglb
  5512.  
  5513. static __inline__ vector signed char __ATTRS_o_ai
  5514. vec_vmrglb(vector signed char __a, vector signed char __b) {
  5515.   return vec_perm(__a, __b,
  5516.                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
  5517.                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
  5518.                                          0x0E, 0x1E, 0x0F, 0x1F));
  5519. }
  5520.  
  5521. static __inline__ vector unsigned char __ATTRS_o_ai
  5522. vec_vmrglb(vector unsigned char __a, vector unsigned char __b) {
  5523.   return vec_perm(__a, __b,
  5524.                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
  5525.                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
  5526.                                          0x0E, 0x1E, 0x0F, 0x1F));
  5527. }
  5528.  
  5529. static __inline__ vector bool char __ATTRS_o_ai
  5530. vec_vmrglb(vector bool char __a, vector bool char __b) {
  5531.   return vec_perm(__a, __b,
  5532.                   (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
  5533.                                          0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
  5534.                                          0x0E, 0x1E, 0x0F, 0x1F));
  5535. }
  5536.  
  5537. /* vec_vmrglh */
  5538.  
  5539. #define __builtin_altivec_vmrglh vec_vmrglh
  5540.  
  5541. static __inline__ vector short __ATTRS_o_ai vec_vmrglh(vector short __a,
  5542.                                                        vector short __b) {
  5543.   return vec_perm(__a, __b,
  5544.                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
  5545.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
  5546.                                          0x0E, 0x0F, 0x1E, 0x1F));
  5547. }
  5548.  
  5549. static __inline__ vector unsigned short __ATTRS_o_ai
  5550. vec_vmrglh(vector unsigned short __a, vector unsigned short __b) {
  5551.   return vec_perm(__a, __b,
  5552.                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
  5553.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
  5554.                                          0x0E, 0x0F, 0x1E, 0x1F));
  5555. }
  5556.  
  5557. static __inline__ vector bool short __ATTRS_o_ai
  5558. vec_vmrglh(vector bool short __a, vector bool short __b) {
  5559.   return vec_perm(__a, __b,
  5560.                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
  5561.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
  5562.                                          0x0E, 0x0F, 0x1E, 0x1F));
  5563. }
  5564.  
  5565. static __inline__ vector pixel __ATTRS_o_ai vec_vmrglh(vector pixel __a,
  5566.                                                        vector pixel __b) {
  5567.   return vec_perm(__a, __b,
  5568.                   (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
  5569.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
  5570.                                          0x0E, 0x0F, 0x1E, 0x1F));
  5571. }
  5572.  
  5573. /* vec_vmrglw */
  5574.  
  5575. #define __builtin_altivec_vmrglw vec_vmrglw
  5576.  
  5577. static __inline__ vector int __ATTRS_o_ai vec_vmrglw(vector int __a,
  5578.                                                      vector int __b) {
  5579.   return vec_perm(__a, __b,
  5580.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
  5581.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
  5582.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5583. }
  5584.  
  5585. static __inline__ vector unsigned int __ATTRS_o_ai
  5586. vec_vmrglw(vector unsigned int __a, vector unsigned int __b) {
  5587.   return vec_perm(__a, __b,
  5588.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
  5589.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
  5590.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5591. }
  5592.  
  5593. static __inline__ vector bool int __ATTRS_o_ai vec_vmrglw(vector bool int __a,
  5594.                                                           vector bool int __b) {
  5595.   return vec_perm(__a, __b,
  5596.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
  5597.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
  5598.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5599. }
  5600.  
  5601. static __inline__ vector float __ATTRS_o_ai vec_vmrglw(vector float __a,
  5602.                                                        vector float __b) {
  5603.   return vec_perm(__a, __b,
  5604.                   (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
  5605.                                          0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
  5606.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5607. }
  5608.  
  5609. #ifdef __POWER8_VECTOR__
  5610. /* vec_mergee */
  5611.  
  5612. static __inline__ vector bool int __ATTRS_o_ai vec_mergee(vector bool int __a,
  5613.                                                           vector bool int __b) {
  5614.   return vec_perm(__a, __b,
  5615.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
  5616.                                          0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
  5617.                                          0x18, 0x19, 0x1A, 0x1B));
  5618. }
  5619.  
  5620. static __inline__ vector signed int __ATTRS_o_ai
  5621. vec_mergee(vector signed int __a, vector signed int __b) {
  5622.   return vec_perm(__a, __b,
  5623.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
  5624.                                          0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
  5625.                                          0x18, 0x19, 0x1A, 0x1B));
  5626. }
  5627.  
  5628. static __inline__ vector unsigned int __ATTRS_o_ai
  5629. vec_mergee(vector unsigned int __a, vector unsigned int __b) {
  5630.   return vec_perm(__a, __b,
  5631.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
  5632.                                          0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
  5633.                                          0x18, 0x19, 0x1A, 0x1B));
  5634. }
  5635.  
  5636. static __inline__ vector bool long long __ATTRS_o_ai
  5637. vec_mergee(vector bool long long __a, vector bool long long __b) {
  5638.   return vec_mergeh(__a, __b);
  5639. }
  5640.  
  5641. static __inline__ vector signed long long __ATTRS_o_ai
  5642. vec_mergee(vector signed long long __a, vector signed long long __b) {
  5643.   return vec_mergeh(__a, __b);
  5644. }
  5645.  
  5646. static __inline__ vector unsigned long long __ATTRS_o_ai
  5647. vec_mergee(vector unsigned long long __a, vector unsigned long long __b) {
  5648.   return vec_mergeh(__a, __b);
  5649. }
  5650.  
  5651. static __inline__ vector float __ATTRS_o_ai
  5652. vec_mergee(vector float __a, vector float __b) {
  5653.   return vec_perm(__a, __b,
  5654.                   (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
  5655.                                          0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
  5656.                                          0x18, 0x19, 0x1A, 0x1B));
  5657. }
  5658.  
  5659. static __inline__ vector double __ATTRS_o_ai
  5660. vec_mergee(vector double __a, vector double __b) {
  5661.   return vec_mergeh(__a, __b);
  5662. }
  5663.  
  5664. /* vec_mergeo */
  5665.  
  5666. static __inline__ vector bool int __ATTRS_o_ai vec_mergeo(vector bool int __a,
  5667.                                                           vector bool int __b) {
  5668.   return vec_perm(__a, __b,
  5669.                   (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
  5670.                                          0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
  5671.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5672. }
  5673.  
  5674. static __inline__ vector signed int __ATTRS_o_ai
  5675. vec_mergeo(vector signed int __a, vector signed int __b) {
  5676.   return vec_perm(__a, __b,
  5677.                   (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
  5678.                                          0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
  5679.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5680. }
  5681.  
  5682. static __inline__ vector unsigned int __ATTRS_o_ai
  5683. vec_mergeo(vector unsigned int __a, vector unsigned int __b) {
  5684.   return vec_perm(__a, __b,
  5685.                   (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
  5686.                                          0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
  5687.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5688. }
  5689.  
  5690. static __inline__ vector bool long long __ATTRS_o_ai
  5691. vec_mergeo(vector bool long long __a, vector bool long long __b) {
  5692.   return vec_mergel(__a, __b);
  5693. }
  5694.  
  5695. static __inline__ vector signed long long __ATTRS_o_ai
  5696. vec_mergeo(vector signed long long __a, vector signed long long __b) {
  5697.   return vec_mergel(__a, __b);
  5698. }
  5699.  
  5700. static __inline__ vector unsigned long long __ATTRS_o_ai
  5701. vec_mergeo(vector unsigned long long __a, vector unsigned long long __b) {
  5702.   return vec_mergel(__a, __b);
  5703. }
  5704.  
  5705. static __inline__ vector float __ATTRS_o_ai
  5706. vec_mergeo(vector float __a, vector float __b) {
  5707.   return vec_perm(__a, __b,
  5708.                   (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
  5709.                                          0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
  5710.                                          0x1C, 0x1D, 0x1E, 0x1F));
  5711. }
  5712.  
  5713. static __inline__ vector double __ATTRS_o_ai
  5714. vec_mergeo(vector double __a, vector double __b) {
  5715.   return vec_mergel(__a, __b);
  5716. }
  5717.  
  5718. #endif
  5719.  
  5720. /* vec_mfvscr */
  5721.  
  5722. static __inline__ vector unsigned short __attribute__((__always_inline__))
  5723. vec_mfvscr(void) {
  5724.   return __builtin_altivec_mfvscr();
  5725. }
  5726.  
  5727. /* vec_min */
  5728.  
  5729. static __inline__ vector signed char __ATTRS_o_ai
  5730. vec_min(vector signed char __a, vector signed char __b) {
  5731.   return __builtin_altivec_vminsb(__a, __b);
  5732. }
  5733.  
  5734. static __inline__ vector signed char __ATTRS_o_ai
  5735. vec_min(vector bool char __a, vector signed char __b) {
  5736.   return __builtin_altivec_vminsb((vector signed char)__a, __b);
  5737. }
  5738.  
  5739. static __inline__ vector signed char __ATTRS_o_ai
  5740. vec_min(vector signed char __a, vector bool char __b) {
  5741.   return __builtin_altivec_vminsb(__a, (vector signed char)__b);
  5742. }
  5743.  
  5744. static __inline__ vector unsigned char __ATTRS_o_ai
  5745. vec_min(vector unsigned char __a, vector unsigned char __b) {
  5746.   return __builtin_altivec_vminub(__a, __b);
  5747. }
  5748.  
  5749. static __inline__ vector unsigned char __ATTRS_o_ai
  5750. vec_min(vector bool char __a, vector unsigned char __b) {
  5751.   return __builtin_altivec_vminub((vector unsigned char)__a, __b);
  5752. }
  5753.  
  5754. static __inline__ vector unsigned char __ATTRS_o_ai
  5755. vec_min(vector unsigned char __a, vector bool char __b) {
  5756.   return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
  5757. }
  5758.  
  5759. static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
  5760.                                                     vector short __b) {
  5761.   return __builtin_altivec_vminsh(__a, __b);
  5762. }
  5763.  
  5764. static __inline__ vector short __ATTRS_o_ai vec_min(vector bool short __a,
  5765.                                                     vector short __b) {
  5766.   return __builtin_altivec_vminsh((vector short)__a, __b);
  5767. }
  5768.  
  5769. static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
  5770.                                                     vector bool short __b) {
  5771.   return __builtin_altivec_vminsh(__a, (vector short)__b);
  5772. }
  5773.  
  5774. static __inline__ vector unsigned short __ATTRS_o_ai
  5775. vec_min(vector unsigned short __a, vector unsigned short __b) {
  5776.   return __builtin_altivec_vminuh(__a, __b);
  5777. }
  5778.  
  5779. static __inline__ vector unsigned short __ATTRS_o_ai
  5780. vec_min(vector bool short __a, vector unsigned short __b) {
  5781.   return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
  5782. }
  5783.  
  5784. static __inline__ vector unsigned short __ATTRS_o_ai
  5785. vec_min(vector unsigned short __a, vector bool short __b) {
  5786.   return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
  5787. }
  5788.  
  5789. static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
  5790.                                                   vector int __b) {
  5791.   return __builtin_altivec_vminsw(__a, __b);
  5792. }
  5793.  
  5794. static __inline__ vector int __ATTRS_o_ai vec_min(vector bool int __a,
  5795.                                                   vector int __b) {
  5796.   return __builtin_altivec_vminsw((vector int)__a, __b);
  5797. }
  5798.  
  5799. static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
  5800.                                                   vector bool int __b) {
  5801.   return __builtin_altivec_vminsw(__a, (vector int)__b);
  5802. }
  5803.  
  5804. static __inline__ vector unsigned int __ATTRS_o_ai
  5805. vec_min(vector unsigned int __a, vector unsigned int __b) {
  5806.   return __builtin_altivec_vminuw(__a, __b);
  5807. }
  5808.  
  5809. static __inline__ vector unsigned int __ATTRS_o_ai
  5810. vec_min(vector bool int __a, vector unsigned int __b) {
  5811.   return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
  5812. }
  5813.  
  5814. static __inline__ vector unsigned int __ATTRS_o_ai
  5815. vec_min(vector unsigned int __a, vector bool int __b) {
  5816.   return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
  5817. }
  5818.  
  5819. #ifdef __POWER8_VECTOR__
  5820. static __inline__ vector signed long long __ATTRS_o_ai
  5821. vec_min(vector signed long long __a, vector signed long long __b) {
  5822.   return __builtin_altivec_vminsd(__a, __b);
  5823. }
  5824.  
  5825. static __inline__ vector signed long long __ATTRS_o_ai
  5826. vec_min(vector bool long long __a, vector signed long long __b) {
  5827.   return __builtin_altivec_vminsd((vector signed long long)__a, __b);
  5828. }
  5829.  
  5830. static __inline__ vector signed long long __ATTRS_o_ai
  5831. vec_min(vector signed long long __a, vector bool long long __b) {
  5832.   return __builtin_altivec_vminsd(__a, (vector signed long long)__b);
  5833. }
  5834.  
  5835. static __inline__ vector unsigned long long __ATTRS_o_ai
  5836. vec_min(vector unsigned long long __a, vector unsigned long long __b) {
  5837.   return __builtin_altivec_vminud(__a, __b);
  5838. }
  5839.  
  5840. static __inline__ vector unsigned long long __ATTRS_o_ai
  5841. vec_min(vector bool long long __a, vector unsigned long long __b) {
  5842.   return __builtin_altivec_vminud((vector unsigned long long)__a, __b);
  5843. }
  5844.  
  5845. static __inline__ vector unsigned long long __ATTRS_o_ai
  5846. vec_min(vector unsigned long long __a, vector bool long long __b) {
  5847.   return __builtin_altivec_vminud(__a, (vector unsigned long long)__b);
  5848. }
  5849. #endif
  5850.  
  5851. static __inline__ vector float __ATTRS_o_ai vec_min(vector float __a,
  5852.                                                     vector float __b) {
  5853. #ifdef __VSX__
  5854.   return __builtin_vsx_xvminsp(__a, __b);
  5855. #else
  5856.   return __builtin_altivec_vminfp(__a, __b);
  5857. #endif
  5858. }
  5859.  
  5860. #ifdef __VSX__
  5861. static __inline__ vector double __ATTRS_o_ai vec_min(vector double __a,
  5862.                                                      vector double __b) {
  5863.   return __builtin_vsx_xvmindp(__a, __b);
  5864. }
  5865. #endif
  5866.  
  5867. /* vec_vminsb */
  5868.  
  5869. static __inline__ vector signed char __ATTRS_o_ai
  5870. vec_vminsb(vector signed char __a, vector signed char __b) {
  5871.   return __builtin_altivec_vminsb(__a, __b);
  5872. }
  5873.  
  5874. static __inline__ vector signed char __ATTRS_o_ai
  5875. vec_vminsb(vector bool char __a, vector signed char __b) {
  5876.   return __builtin_altivec_vminsb((vector signed char)__a, __b);
  5877. }
  5878.  
  5879. static __inline__ vector signed char __ATTRS_o_ai
  5880. vec_vminsb(vector signed char __a, vector bool char __b) {
  5881.   return __builtin_altivec_vminsb(__a, (vector signed char)__b);
  5882. }
  5883.  
  5884. /* vec_vminub */
  5885.  
  5886. static __inline__ vector unsigned char __ATTRS_o_ai
  5887. vec_vminub(vector unsigned char __a, vector unsigned char __b) {
  5888.   return __builtin_altivec_vminub(__a, __b);
  5889. }
  5890.  
  5891. static __inline__ vector unsigned char __ATTRS_o_ai
  5892. vec_vminub(vector bool char __a, vector unsigned char __b) {
  5893.   return __builtin_altivec_vminub((vector unsigned char)__a, __b);
  5894. }
  5895.  
  5896. static __inline__ vector unsigned char __ATTRS_o_ai
  5897. vec_vminub(vector unsigned char __a, vector bool char __b) {
  5898.   return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
  5899. }
  5900.  
  5901. /* vec_vminsh */
  5902.  
  5903. static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
  5904.                                                        vector short __b) {
  5905.   return __builtin_altivec_vminsh(__a, __b);
  5906. }
  5907.  
  5908. static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector bool short __a,
  5909.                                                        vector short __b) {
  5910.   return __builtin_altivec_vminsh((vector short)__a, __b);
  5911. }
  5912.  
  5913. static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
  5914.                                                        vector bool short __b) {
  5915.   return __builtin_altivec_vminsh(__a, (vector short)__b);
  5916. }
  5917.  
  5918. /* vec_vminuh */
  5919.  
  5920. static __inline__ vector unsigned short __ATTRS_o_ai
  5921. vec_vminuh(vector unsigned short __a, vector unsigned short __b) {
  5922.   return __builtin_altivec_vminuh(__a, __b);
  5923. }
  5924.  
  5925. static __inline__ vector unsigned short __ATTRS_o_ai
  5926. vec_vminuh(vector bool short __a, vector unsigned short __b) {
  5927.   return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
  5928. }
  5929.  
  5930. static __inline__ vector unsigned short __ATTRS_o_ai
  5931. vec_vminuh(vector unsigned short __a, vector bool short __b) {
  5932.   return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
  5933. }
  5934.  
  5935. /* vec_vminsw */
  5936.  
  5937. static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
  5938.                                                      vector int __b) {
  5939.   return __builtin_altivec_vminsw(__a, __b);
  5940. }
  5941.  
  5942. static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector bool int __a,
  5943.                                                      vector int __b) {
  5944.   return __builtin_altivec_vminsw((vector int)__a, __b);
  5945. }
  5946.  
  5947. static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
  5948.                                                      vector bool int __b) {
  5949.   return __builtin_altivec_vminsw(__a, (vector int)__b);
  5950. }
  5951.  
  5952. /* vec_vminuw */
  5953.  
  5954. static __inline__ vector unsigned int __ATTRS_o_ai
  5955. vec_vminuw(vector unsigned int __a, vector unsigned int __b) {
  5956.   return __builtin_altivec_vminuw(__a, __b);
  5957. }
  5958.  
  5959. static __inline__ vector unsigned int __ATTRS_o_ai
  5960. vec_vminuw(vector bool int __a, vector unsigned int __b) {
  5961.   return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
  5962. }
  5963.  
  5964. static __inline__ vector unsigned int __ATTRS_o_ai
  5965. vec_vminuw(vector unsigned int __a, vector bool int __b) {
  5966.   return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
  5967. }
  5968.  
  5969. /* vec_vminfp */
  5970.  
  5971. static __inline__ vector float __attribute__((__always_inline__))
  5972. vec_vminfp(vector float __a, vector float __b) {
  5973. #ifdef __VSX__
  5974.   return __builtin_vsx_xvminsp(__a, __b);
  5975. #else
  5976.   return __builtin_altivec_vminfp(__a, __b);
  5977. #endif
  5978. }
  5979.  
  5980. /* vec_mladd */
  5981.  
  5982. #define __builtin_altivec_vmladduhm vec_mladd
  5983.  
  5984. static __inline__ vector short __ATTRS_o_ai vec_mladd(vector short __a,
  5985.                                                       vector short __b,
  5986.                                                       vector short __c) {
  5987.   return __a * __b + __c;
  5988. }
  5989.  
  5990. static __inline__ vector short __ATTRS_o_ai vec_mladd(
  5991.     vector short __a, vector unsigned short __b, vector unsigned short __c) {
  5992.   return __a * (vector short)__b + (vector short)__c;
  5993. }
  5994.  
  5995. static __inline__ vector short __ATTRS_o_ai vec_mladd(vector unsigned short __a,
  5996.                                                       vector short __b,
  5997.                                                       vector short __c) {
  5998.   return (vector short)__a * __b + __c;
  5999. }
  6000.  
  6001. static __inline__ vector unsigned short __ATTRS_o_ai
  6002. vec_mladd(vector unsigned short __a, vector unsigned short __b,
  6003.           vector unsigned short __c) {
  6004.   return __a * __b + __c;
  6005. }
  6006.  
  6007. /* vec_vmladduhm */
  6008.  
  6009. static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(vector short __a,
  6010.                                                           vector short __b,
  6011.                                                           vector short __c) {
  6012.   return __a * __b + __c;
  6013. }
  6014.  
  6015. static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(
  6016.     vector short __a, vector unsigned short __b, vector unsigned short __c) {
  6017.   return __a * (vector short)__b + (vector short)__c;
  6018. }
  6019.  
  6020. static __inline__ vector short __ATTRS_o_ai
  6021. vec_vmladduhm(vector unsigned short __a, vector short __b, vector short __c) {
  6022.   return (vector short)__a * __b + __c;
  6023. }
  6024.  
  6025. static __inline__ vector unsigned short __ATTRS_o_ai
  6026. vec_vmladduhm(vector unsigned short __a, vector unsigned short __b,
  6027.               vector unsigned short __c) {
  6028.   return __a * __b + __c;
  6029. }
  6030.  
  6031. /* vec_mradds */
  6032.  
  6033. static __inline__ vector short __attribute__((__always_inline__))
  6034. vec_mradds(vector short __a, vector short __b, vector short __c) {
  6035.   return __builtin_altivec_vmhraddshs(__a, __b, __c);
  6036. }
  6037.  
  6038. /* vec_vmhraddshs */
  6039.  
  6040. static __inline__ vector short __attribute__((__always_inline__))
  6041. vec_vmhraddshs(vector short __a, vector short __b, vector short __c) {
  6042.   return __builtin_altivec_vmhraddshs(__a, __b, __c);
  6043. }
  6044.  
  6045. /* vec_msum */
  6046.  
  6047. static __inline__ vector int __ATTRS_o_ai vec_msum(vector signed char __a,
  6048.                                                    vector unsigned char __b,
  6049.                                                    vector int __c) {
  6050.   return __builtin_altivec_vmsummbm(__a, __b, __c);
  6051. }
  6052.  
  6053. static __inline__ vector unsigned int __ATTRS_o_ai
  6054. vec_msum(vector unsigned char __a, vector unsigned char __b,
  6055.          vector unsigned int __c) {
  6056.   return __builtin_altivec_vmsumubm(__a, __b, __c);
  6057. }
  6058.  
  6059. static __inline__ vector int __ATTRS_o_ai vec_msum(vector short __a,
  6060.                                                    vector short __b,
  6061.                                                    vector int __c) {
  6062.   return __builtin_altivec_vmsumshm(__a, __b, __c);
  6063. }
  6064.  
  6065. static __inline__ vector unsigned int __ATTRS_o_ai
  6066. vec_msum(vector unsigned short __a, vector unsigned short __b,
  6067.          vector unsigned int __c) {
  6068.   return __builtin_altivec_vmsumuhm(__a, __b, __c);
  6069. }
  6070.  
  6071. /* vec_msumc */
  6072.  
  6073. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  6074. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  6075. vec_msumc(vector unsigned long long __a, vector unsigned long long __b,
  6076.           vector unsigned __int128 __c) {
  6077.   return __builtin_altivec_vmsumcud(__a, __b, __c);
  6078. }
  6079. #endif
  6080.  
  6081. /* vec_vmsummbm */
  6082.  
  6083. static __inline__ vector int __attribute__((__always_inline__))
  6084. vec_vmsummbm(vector signed char __a, vector unsigned char __b, vector int __c) {
  6085.   return __builtin_altivec_vmsummbm(__a, __b, __c);
  6086. }
  6087.  
  6088. /* vec_vmsumubm */
  6089.  
  6090. static __inline__ vector unsigned int __attribute__((__always_inline__))
  6091. vec_vmsumubm(vector unsigned char __a, vector unsigned char __b,
  6092.              vector unsigned int __c) {
  6093.   return __builtin_altivec_vmsumubm(__a, __b, __c);
  6094. }
  6095.  
  6096. /* vec_vmsumshm */
  6097.  
  6098. static __inline__ vector int __attribute__((__always_inline__))
  6099. vec_vmsumshm(vector short __a, vector short __b, vector int __c) {
  6100.   return __builtin_altivec_vmsumshm(__a, __b, __c);
  6101. }
  6102.  
  6103. /* vec_vmsumuhm */
  6104.  
  6105. static __inline__ vector unsigned int __attribute__((__always_inline__))
  6106. vec_vmsumuhm(vector unsigned short __a, vector unsigned short __b,
  6107.              vector unsigned int __c) {
  6108.   return __builtin_altivec_vmsumuhm(__a, __b, __c);
  6109. }
  6110.  
  6111. /* vec_msums */
  6112.  
  6113. static __inline__ vector int __ATTRS_o_ai vec_msums(vector short __a,
  6114.                                                     vector short __b,
  6115.                                                     vector int __c) {
  6116.   return __builtin_altivec_vmsumshs(__a, __b, __c);
  6117. }
  6118.  
  6119. static __inline__ vector unsigned int __ATTRS_o_ai
  6120. vec_msums(vector unsigned short __a, vector unsigned short __b,
  6121.           vector unsigned int __c) {
  6122.   return __builtin_altivec_vmsumuhs(__a, __b, __c);
  6123. }
  6124.  
  6125. /* vec_vmsumshs */
  6126.  
  6127. static __inline__ vector int __attribute__((__always_inline__))
  6128. vec_vmsumshs(vector short __a, vector short __b, vector int __c) {
  6129.   return __builtin_altivec_vmsumshs(__a, __b, __c);
  6130. }
  6131.  
  6132. /* vec_vmsumuhs */
  6133.  
  6134. static __inline__ vector unsigned int __attribute__((__always_inline__))
  6135. vec_vmsumuhs(vector unsigned short __a, vector unsigned short __b,
  6136.              vector unsigned int __c) {
  6137.   return __builtin_altivec_vmsumuhs(__a, __b, __c);
  6138. }
  6139.  
  6140. /* vec_mtvscr */
  6141.  
  6142. static __inline__ void __ATTRS_o_ai vec_mtvscr(vector signed char __a) {
  6143.   __builtin_altivec_mtvscr((vector int)__a);
  6144. }
  6145.  
  6146. static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned char __a) {
  6147.   __builtin_altivec_mtvscr((vector int)__a);
  6148. }
  6149.  
  6150. static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool char __a) {
  6151.   __builtin_altivec_mtvscr((vector int)__a);
  6152. }
  6153.  
  6154. static __inline__ void __ATTRS_o_ai vec_mtvscr(vector short __a) {
  6155.   __builtin_altivec_mtvscr((vector int)__a);
  6156. }
  6157.  
  6158. static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned short __a) {
  6159.   __builtin_altivec_mtvscr((vector int)__a);
  6160. }
  6161.  
  6162. static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool short __a) {
  6163.   __builtin_altivec_mtvscr((vector int)__a);
  6164. }
  6165.  
  6166. static __inline__ void __ATTRS_o_ai vec_mtvscr(vector pixel __a) {
  6167.   __builtin_altivec_mtvscr((vector int)__a);
  6168. }
  6169.  
  6170. static __inline__ void __ATTRS_o_ai vec_mtvscr(vector int __a) {
  6171.   __builtin_altivec_mtvscr((vector int)__a);
  6172. }
  6173.  
  6174. static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned int __a) {
  6175.   __builtin_altivec_mtvscr((vector int)__a);
  6176. }
  6177.  
  6178. static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool int __a) {
  6179.   __builtin_altivec_mtvscr((vector int)__a);
  6180. }
  6181.  
  6182. static __inline__ void __ATTRS_o_ai vec_mtvscr(vector float __a) {
  6183.   __builtin_altivec_mtvscr((vector int)__a);
  6184. }
  6185.  
  6186. /* vec_mul */
  6187.  
  6188. /* Integer vector multiplication will involve multiplication of the odd/even
  6189.    elements separately, then truncating the results and moving to the
  6190.    result vector.
  6191. */
  6192. static __inline__ vector signed char __ATTRS_o_ai
  6193. vec_mul(vector signed char __a, vector signed char __b) {
  6194.   return __a * __b;
  6195. }
  6196.  
  6197. static __inline__ vector unsigned char __ATTRS_o_ai
  6198. vec_mul(vector unsigned char __a, vector unsigned char __b) {
  6199.   return __a * __b;
  6200. }
  6201.  
  6202. static __inline__ vector signed short __ATTRS_o_ai
  6203. vec_mul(vector signed short __a, vector signed short __b) {
  6204.   return __a * __b;
  6205. }
  6206.  
  6207. static __inline__ vector unsigned short __ATTRS_o_ai
  6208. vec_mul(vector unsigned short __a, vector unsigned short __b) {
  6209.   return __a * __b;
  6210. }
  6211.  
  6212. static __inline__ vector signed int __ATTRS_o_ai
  6213. vec_mul(vector signed int __a, vector signed int __b) {
  6214.   return __a * __b;
  6215. }
  6216.  
  6217. static __inline__ vector unsigned int __ATTRS_o_ai
  6218. vec_mul(vector unsigned int __a, vector unsigned int __b) {
  6219.   return __a * __b;
  6220. }
  6221.  
  6222. #ifdef __VSX__
  6223. static __inline__ vector signed long long __ATTRS_o_ai
  6224. vec_mul(vector signed long long __a, vector signed long long __b) {
  6225.   return __a * __b;
  6226. }
  6227.  
  6228. static __inline__ vector unsigned long long __ATTRS_o_ai
  6229. vec_mul(vector unsigned long long __a, vector unsigned long long __b) {
  6230.   return __a * __b;
  6231. }
  6232. #endif
  6233.  
  6234. static __inline__ vector float __ATTRS_o_ai vec_mul(vector float __a,
  6235.                                                     vector float __b) {
  6236.   return __a * __b;
  6237. }
  6238.  
  6239. #ifdef __VSX__
  6240. static __inline__ vector double __ATTRS_o_ai vec_mul(vector double __a,
  6241.                                                      vector double __b) {
  6242.   return __a * __b;
  6243. }
  6244. #endif
  6245.  
  6246. /* The vmulos* and vmules* instructions have a big endian bias, so
  6247.    we must reverse the meaning of "even" and "odd" for little endian.  */
  6248.  
  6249. /* vec_mule */
  6250.  
  6251. static __inline__ vector short __ATTRS_o_ai vec_mule(vector signed char __a,
  6252.                                                      vector signed char __b) {
  6253. #ifdef __LITTLE_ENDIAN__
  6254.   return __builtin_altivec_vmulosb(__a, __b);
  6255. #else
  6256.   return __builtin_altivec_vmulesb(__a, __b);
  6257. #endif
  6258. }
  6259.  
  6260. static __inline__ vector unsigned short __ATTRS_o_ai
  6261. vec_mule(vector unsigned char __a, vector unsigned char __b) {
  6262. #ifdef __LITTLE_ENDIAN__
  6263.   return __builtin_altivec_vmuloub(__a, __b);
  6264. #else
  6265.   return __builtin_altivec_vmuleub(__a, __b);
  6266. #endif
  6267. }
  6268.  
  6269. static __inline__ vector int __ATTRS_o_ai vec_mule(vector short __a,
  6270.                                                    vector short __b) {
  6271. #ifdef __LITTLE_ENDIAN__
  6272.   return __builtin_altivec_vmulosh(__a, __b);
  6273. #else
  6274.   return __builtin_altivec_vmulesh(__a, __b);
  6275. #endif
  6276. }
  6277.  
  6278. static __inline__ vector unsigned int __ATTRS_o_ai
  6279. vec_mule(vector unsigned short __a, vector unsigned short __b) {
  6280. #ifdef __LITTLE_ENDIAN__
  6281.   return __builtin_altivec_vmulouh(__a, __b);
  6282. #else
  6283.   return __builtin_altivec_vmuleuh(__a, __b);
  6284. #endif
  6285. }
  6286.  
  6287. #ifdef __POWER8_VECTOR__
  6288. static __inline__ vector signed long long __ATTRS_o_ai
  6289. vec_mule(vector signed int __a, vector signed int __b) {
  6290. #ifdef __LITTLE_ENDIAN__
  6291.   return __builtin_altivec_vmulosw(__a, __b);
  6292. #else
  6293.   return __builtin_altivec_vmulesw(__a, __b);
  6294. #endif
  6295. }
  6296.  
  6297. static __inline__ vector unsigned long long __ATTRS_o_ai
  6298. vec_mule(vector unsigned int __a, vector unsigned int __b) {
  6299. #ifdef __LITTLE_ENDIAN__
  6300.   return __builtin_altivec_vmulouw(__a, __b);
  6301. #else
  6302.   return __builtin_altivec_vmuleuw(__a, __b);
  6303. #endif
  6304. }
  6305. #endif
  6306.  
  6307. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  6308. static __inline__ vector signed __int128 __ATTRS_o_ai
  6309. vec_mule(vector signed long long __a, vector signed long long __b) {
  6310. #ifdef __LITTLE_ENDIAN__
  6311.   return __builtin_altivec_vmulosd(__a, __b);
  6312. #else
  6313.   return __builtin_altivec_vmulesd(__a, __b);
  6314. #endif
  6315. }
  6316.  
  6317. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  6318. vec_mule(vector unsigned long long __a, vector unsigned long long __b) {
  6319. #ifdef __LITTLE_ENDIAN__
  6320.   return __builtin_altivec_vmuloud(__a, __b);
  6321. #else
  6322.   return __builtin_altivec_vmuleud(__a, __b);
  6323. #endif
  6324. }
  6325. #endif
  6326.  
  6327. /* vec_vmulesb */
  6328.  
  6329. static __inline__ vector short __attribute__((__always_inline__))
  6330. vec_vmulesb(vector signed char __a, vector signed char __b) {
  6331. #ifdef __LITTLE_ENDIAN__
  6332.   return __builtin_altivec_vmulosb(__a, __b);
  6333. #else
  6334.   return __builtin_altivec_vmulesb(__a, __b);
  6335. #endif
  6336. }
  6337.  
  6338. /* vec_vmuleub */
  6339.  
  6340. static __inline__ vector unsigned short __attribute__((__always_inline__))
  6341. vec_vmuleub(vector unsigned char __a, vector unsigned char __b) {
  6342. #ifdef __LITTLE_ENDIAN__
  6343.   return __builtin_altivec_vmuloub(__a, __b);
  6344. #else
  6345.   return __builtin_altivec_vmuleub(__a, __b);
  6346. #endif
  6347. }
  6348.  
  6349. /* vec_vmulesh */
  6350.  
  6351. static __inline__ vector int __attribute__((__always_inline__))
  6352. vec_vmulesh(vector short __a, vector short __b) {
  6353. #ifdef __LITTLE_ENDIAN__
  6354.   return __builtin_altivec_vmulosh(__a, __b);
  6355. #else
  6356.   return __builtin_altivec_vmulesh(__a, __b);
  6357. #endif
  6358. }
  6359.  
  6360. /* vec_vmuleuh */
  6361.  
  6362. static __inline__ vector unsigned int __attribute__((__always_inline__))
  6363. vec_vmuleuh(vector unsigned short __a, vector unsigned short __b) {
  6364. #ifdef __LITTLE_ENDIAN__
  6365.   return __builtin_altivec_vmulouh(__a, __b);
  6366. #else
  6367.   return __builtin_altivec_vmuleuh(__a, __b);
  6368. #endif
  6369. }
  6370.  
  6371. /* vec_mulh */
  6372.  
  6373. #ifdef __POWER10_VECTOR__
  6374. static __inline__ vector signed int __ATTRS_o_ai
  6375. vec_mulh(vector signed int __a, vector signed int __b) {
  6376.   return __builtin_altivec_vmulhsw(__a, __b);
  6377. }
  6378.  
  6379. static __inline__ vector unsigned int __ATTRS_o_ai
  6380. vec_mulh(vector unsigned int __a, vector unsigned int __b) {
  6381.   return __builtin_altivec_vmulhuw(__a, __b);
  6382. }
  6383.  
  6384. static __inline__ vector signed long long __ATTRS_o_ai
  6385. vec_mulh(vector signed long long __a, vector signed long long __b) {
  6386.   return __builtin_altivec_vmulhsd(__a, __b);
  6387. }
  6388.  
  6389. static __inline__ vector unsigned long long __ATTRS_o_ai
  6390. vec_mulh(vector unsigned long long __a, vector unsigned long long __b) {
  6391.   return __builtin_altivec_vmulhud(__a, __b);
  6392. }
  6393. #endif
  6394.  
  6395. /* vec_mulo */
  6396.  
  6397. static __inline__ vector short __ATTRS_o_ai vec_mulo(vector signed char __a,
  6398.                                                      vector signed char __b) {
  6399. #ifdef __LITTLE_ENDIAN__
  6400.   return __builtin_altivec_vmulesb(__a, __b);
  6401. #else
  6402.   return __builtin_altivec_vmulosb(__a, __b);
  6403. #endif
  6404. }
  6405.  
  6406. static __inline__ vector unsigned short __ATTRS_o_ai
  6407. vec_mulo(vector unsigned char __a, vector unsigned char __b) {
  6408. #ifdef __LITTLE_ENDIAN__
  6409.   return __builtin_altivec_vmuleub(__a, __b);
  6410. #else
  6411.   return __builtin_altivec_vmuloub(__a, __b);
  6412. #endif
  6413. }
  6414.  
  6415. static __inline__ vector int __ATTRS_o_ai vec_mulo(vector short __a,
  6416.                                                    vector short __b) {
  6417. #ifdef __LITTLE_ENDIAN__
  6418.   return __builtin_altivec_vmulesh(__a, __b);
  6419. #else
  6420.   return __builtin_altivec_vmulosh(__a, __b);
  6421. #endif
  6422. }
  6423.  
  6424. static __inline__ vector unsigned int __ATTRS_o_ai
  6425. vec_mulo(vector unsigned short __a, vector unsigned short __b) {
  6426. #ifdef __LITTLE_ENDIAN__
  6427.   return __builtin_altivec_vmuleuh(__a, __b);
  6428. #else
  6429.   return __builtin_altivec_vmulouh(__a, __b);
  6430. #endif
  6431. }
  6432.  
  6433. #ifdef __POWER8_VECTOR__
  6434. static __inline__ vector signed long long __ATTRS_o_ai
  6435. vec_mulo(vector signed int __a, vector signed int __b) {
  6436. #ifdef __LITTLE_ENDIAN__
  6437.   return __builtin_altivec_vmulesw(__a, __b);
  6438. #else
  6439.   return __builtin_altivec_vmulosw(__a, __b);
  6440. #endif
  6441. }
  6442.  
  6443. static __inline__ vector unsigned long long __ATTRS_o_ai
  6444. vec_mulo(vector unsigned int __a, vector unsigned int __b) {
  6445. #ifdef __LITTLE_ENDIAN__
  6446.   return __builtin_altivec_vmuleuw(__a, __b);
  6447. #else
  6448.   return __builtin_altivec_vmulouw(__a, __b);
  6449. #endif
  6450. }
  6451. #endif
  6452.  
  6453. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  6454. static __inline__ vector signed __int128 __ATTRS_o_ai
  6455. vec_mulo(vector signed long long __a, vector signed long long __b) {
  6456. #ifdef __LITTLE_ENDIAN__
  6457.   return __builtin_altivec_vmulesd(__a, __b);
  6458. #else
  6459.   return __builtin_altivec_vmulosd(__a, __b);
  6460. #endif
  6461. }
  6462.  
  6463. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  6464. vec_mulo(vector unsigned long long __a, vector unsigned long long __b) {
  6465. #ifdef __LITTLE_ENDIAN__
  6466.   return __builtin_altivec_vmuleud(__a, __b);
  6467. #else
  6468.   return __builtin_altivec_vmuloud(__a, __b);
  6469. #endif
  6470. }
  6471. #endif
  6472.  
  6473. /* vec_vmulosb */
  6474.  
  6475. static __inline__ vector short __attribute__((__always_inline__))
  6476. vec_vmulosb(vector signed char __a, vector signed char __b) {
  6477. #ifdef __LITTLE_ENDIAN__
  6478.   return __builtin_altivec_vmulesb(__a, __b);
  6479. #else
  6480.   return __builtin_altivec_vmulosb(__a, __b);
  6481. #endif
  6482. }
  6483.  
  6484. /* vec_vmuloub */
  6485.  
  6486. static __inline__ vector unsigned short __attribute__((__always_inline__))
  6487. vec_vmuloub(vector unsigned char __a, vector unsigned char __b) {
  6488. #ifdef __LITTLE_ENDIAN__
  6489.   return __builtin_altivec_vmuleub(__a, __b);
  6490. #else
  6491.   return __builtin_altivec_vmuloub(__a, __b);
  6492. #endif
  6493. }
  6494.  
  6495. /* vec_vmulosh */
  6496.  
  6497. static __inline__ vector int __attribute__((__always_inline__))
  6498. vec_vmulosh(vector short __a, vector short __b) {
  6499. #ifdef __LITTLE_ENDIAN__
  6500.   return __builtin_altivec_vmulesh(__a, __b);
  6501. #else
  6502.   return __builtin_altivec_vmulosh(__a, __b);
  6503. #endif
  6504. }
  6505.  
  6506. /* vec_vmulouh */
  6507.  
  6508. static __inline__ vector unsigned int __attribute__((__always_inline__))
  6509. vec_vmulouh(vector unsigned short __a, vector unsigned short __b) {
  6510. #ifdef __LITTLE_ENDIAN__
  6511.   return __builtin_altivec_vmuleuh(__a, __b);
  6512. #else
  6513.   return __builtin_altivec_vmulouh(__a, __b);
  6514. #endif
  6515. }
  6516.  
  6517. /*  vec_nand */
  6518.  
  6519. #ifdef __POWER8_VECTOR__
  6520. static __inline__ vector signed char __ATTRS_o_ai
  6521. vec_nand(vector signed char __a, vector signed char __b) {
  6522.   return ~(__a & __b);
  6523. }
  6524.  
  6525. static __inline__ vector signed char __ATTRS_o_ai
  6526. vec_nand(vector signed char __a, vector bool char __b) {
  6527.   return ~(__a & (vector signed char)__b);
  6528. }
  6529.  
  6530. static __inline__ vector signed char __ATTRS_o_ai
  6531. vec_nand(vector bool char __a, vector signed char __b) {
  6532.   return (vector signed char)~(__a & (vector bool char)__b);
  6533. }
  6534.  
  6535. static __inline__ vector unsigned char __ATTRS_o_ai
  6536. vec_nand(vector unsigned char __a, vector unsigned char __b) {
  6537.   return ~(__a & __b);
  6538. }
  6539.  
  6540. static __inline__ vector unsigned char __ATTRS_o_ai
  6541. vec_nand(vector unsigned char __a, vector bool char __b) {
  6542.   return ~(__a & (vector unsigned char)__b);
  6543. }
  6544.  
  6545. static __inline__ vector unsigned char __ATTRS_o_ai
  6546. vec_nand(vector bool char __a, vector unsigned char __b) {
  6547.   return (vector unsigned char)~(__a & (vector bool char)__b);
  6548. }
  6549.  
  6550. static __inline__ vector bool char __ATTRS_o_ai vec_nand(vector bool char __a,
  6551.                                                          vector bool char __b) {
  6552.   return ~(__a & __b);
  6553. }
  6554.  
  6555. static __inline__ vector signed short __ATTRS_o_ai
  6556. vec_nand(vector signed short __a, vector signed short __b) {
  6557.   return ~(__a & __b);
  6558. }
  6559.  
  6560. static __inline__ vector signed short __ATTRS_o_ai
  6561. vec_nand(vector signed short __a, vector bool short __b) {
  6562.   return ~(__a & (vector signed short)__b);
  6563. }
  6564.  
  6565. static __inline__ vector signed short __ATTRS_o_ai
  6566. vec_nand(vector bool short __a, vector signed short __b) {
  6567.   return (vector signed short)~(__a & (vector bool short)__b);
  6568. }
  6569.  
  6570. static __inline__ vector unsigned short __ATTRS_o_ai
  6571. vec_nand(vector unsigned short __a, vector unsigned short __b) {
  6572.   return ~(__a & __b);
  6573. }
  6574.  
  6575. static __inline__ vector unsigned short __ATTRS_o_ai
  6576. vec_nand(vector unsigned short __a, vector bool short __b) {
  6577.   return ~(__a & (vector unsigned short)__b);
  6578. }
  6579.  
  6580. static __inline__ vector bool short __ATTRS_o_ai
  6581. vec_nand(vector bool short __a, vector bool short __b) {
  6582.   return ~(__a & __b);
  6583. }
  6584.  
  6585. static __inline__ vector signed int __ATTRS_o_ai
  6586. vec_nand(vector signed int __a, vector signed int __b) {
  6587.   return ~(__a & __b);
  6588. }
  6589.  
  6590. static __inline__ vector signed int __ATTRS_o_ai vec_nand(vector signed int __a,
  6591.                                                           vector bool int __b) {
  6592.   return ~(__a & (vector signed int)__b);
  6593. }
  6594.  
  6595. static __inline__ vector signed int __ATTRS_o_ai
  6596. vec_nand(vector bool int __a, vector signed int __b) {
  6597.   return (vector signed int)~(__a & (vector bool int)__b);
  6598. }
  6599.  
  6600. static __inline__ vector unsigned int __ATTRS_o_ai
  6601. vec_nand(vector unsigned int __a, vector unsigned int __b) {
  6602.   return ~(__a & __b);
  6603. }
  6604.  
  6605. static __inline__ vector unsigned int __ATTRS_o_ai
  6606. vec_nand(vector unsigned int __a, vector bool int __b) {
  6607.   return ~(__a & (vector unsigned int)__b);
  6608. }
  6609.  
  6610. static __inline__ vector unsigned int __ATTRS_o_ai
  6611. vec_nand(vector bool int __a, vector unsigned int __b) {
  6612.   return (vector unsigned int)~(__a & (vector bool int)__b);
  6613. }
  6614.  
  6615. static __inline__ vector bool int __ATTRS_o_ai vec_nand(vector bool int __a,
  6616.                                                         vector bool int __b) {
  6617.   return ~(__a & __b);
  6618. }
  6619.  
  6620. static __inline__ vector float __ATTRS_o_ai
  6621. vec_nand(vector float __a, vector float __b) {
  6622.   return (vector float)(~((vector unsigned int)__a &
  6623.                           (vector unsigned int)__b));
  6624. }
  6625.  
  6626. static __inline__ vector signed long long __ATTRS_o_ai
  6627. vec_nand(vector signed long long __a, vector signed long long __b) {
  6628.   return ~(__a & __b);
  6629. }
  6630.  
  6631. static __inline__ vector signed long long __ATTRS_o_ai
  6632. vec_nand(vector signed long long __a, vector bool long long __b) {
  6633.   return ~(__a & (vector signed long long)__b);
  6634. }
  6635.  
  6636. static __inline__ vector signed long long __ATTRS_o_ai
  6637. vec_nand(vector bool long long __a, vector signed long long __b) {
  6638.   return (vector signed long long)~(__a & (vector bool long long)__b);
  6639. }
  6640.  
  6641. static __inline__ vector unsigned long long __ATTRS_o_ai
  6642. vec_nand(vector unsigned long long __a, vector unsigned long long __b) {
  6643.   return ~(__a & __b);
  6644. }
  6645.  
  6646. static __inline__ vector unsigned long long __ATTRS_o_ai
  6647. vec_nand(vector unsigned long long __a, vector bool long long __b) {
  6648.   return ~(__a & (vector unsigned long long)__b);
  6649. }
  6650.  
  6651. static __inline__ vector unsigned long long __ATTRS_o_ai
  6652. vec_nand(vector bool long long __a, vector unsigned long long __b) {
  6653.   return (vector unsigned long long)~(__a & (vector bool long long)__b);
  6654. }
  6655.  
  6656. static __inline__ vector bool long long __ATTRS_o_ai
  6657. vec_nand(vector bool long long __a, vector bool long long __b) {
  6658.   return ~(__a & __b);
  6659. }
  6660.  
  6661. static __inline__ vector double __ATTRS_o_ai
  6662. vec_nand(vector double __a, vector double __b) {
  6663.   return (vector double)(~((vector unsigned long long)__a &
  6664.                            (vector unsigned long long)__b));
  6665. }
  6666.  
  6667. #endif
  6668.  
  6669. /* vec_nmadd */
  6670.  
  6671. #ifdef __VSX__
  6672. static __inline__ vector float __ATTRS_o_ai vec_nmadd(vector float __a,
  6673.                                                       vector float __b,
  6674.                                                       vector float __c) {
  6675.   return __builtin_vsx_xvnmaddasp(__a, __b, __c);
  6676. }
  6677.  
  6678. static __inline__ vector double __ATTRS_o_ai vec_nmadd(vector double __a,
  6679.                                                        vector double __b,
  6680.                                                        vector double __c) {
  6681.   return __builtin_vsx_xvnmaddadp(__a, __b, __c);
  6682. }
  6683. #endif
  6684.  
  6685. /* vec_nmsub */
  6686.  
  6687. static __inline__ vector float __ATTRS_o_ai vec_nmsub(vector float __a,
  6688.                                                       vector float __b,
  6689.                                                       vector float __c) {
  6690. #ifdef __VSX__
  6691.   return __builtin_vsx_xvnmsubasp(__a, __b, __c);
  6692. #else
  6693.   return __builtin_altivec_vnmsubfp(__a, __b, __c);
  6694. #endif
  6695. }
  6696.  
  6697. #ifdef __VSX__
  6698. static __inline__ vector double __ATTRS_o_ai vec_nmsub(vector double __a,
  6699.                                                        vector double __b,
  6700.                                                        vector double __c) {
  6701.   return __builtin_vsx_xvnmsubadp(__a, __b, __c);
  6702. }
  6703. #endif
  6704.  
  6705. /* vec_vnmsubfp */
  6706.  
  6707. static __inline__ vector float __attribute__((__always_inline__))
  6708. vec_vnmsubfp(vector float __a, vector float __b, vector float __c) {
  6709.   return __builtin_altivec_vnmsubfp(__a, __b, __c);
  6710. }
  6711.  
  6712. /* vec_nor */
  6713.  
  6714. #define __builtin_altivec_vnor vec_nor
  6715.  
  6716. static __inline__ vector signed char __ATTRS_o_ai
  6717. vec_nor(vector signed char __a, vector signed char __b) {
  6718.   return ~(__a | __b);
  6719. }
  6720.  
  6721. static __inline__ vector unsigned char __ATTRS_o_ai
  6722. vec_nor(vector unsigned char __a, vector unsigned char __b) {
  6723.   return ~(__a | __b);
  6724. }
  6725.  
  6726. static __inline__ vector bool char __ATTRS_o_ai vec_nor(vector bool char __a,
  6727.                                                         vector bool char __b) {
  6728.   return ~(__a | __b);
  6729. }
  6730.  
  6731. static __inline__ vector short __ATTRS_o_ai vec_nor(vector short __a,
  6732.                                                     vector short __b) {
  6733.   return ~(__a | __b);
  6734. }
  6735.  
  6736. static __inline__ vector unsigned short __ATTRS_o_ai
  6737. vec_nor(vector unsigned short __a, vector unsigned short __b) {
  6738.   return ~(__a | __b);
  6739. }
  6740.  
  6741. static __inline__ vector bool short __ATTRS_o_ai
  6742. vec_nor(vector bool short __a, vector bool short __b) {
  6743.   return ~(__a | __b);
  6744. }
  6745.  
  6746. static __inline__ vector int __ATTRS_o_ai vec_nor(vector int __a,
  6747.                                                   vector int __b) {
  6748.   return ~(__a | __b);
  6749. }
  6750.  
  6751. static __inline__ vector unsigned int __ATTRS_o_ai
  6752. vec_nor(vector unsigned int __a, vector unsigned int __b) {
  6753.   return ~(__a | __b);
  6754. }
  6755.  
  6756. static __inline__ vector bool int __ATTRS_o_ai vec_nor(vector bool int __a,
  6757.                                                        vector bool int __b) {
  6758.   return ~(__a | __b);
  6759. }
  6760.  
  6761. static __inline__ vector float __ATTRS_o_ai vec_nor(vector float __a,
  6762.                                                     vector float __b) {
  6763.   vector unsigned int __res =
  6764.       ~((vector unsigned int)__a | (vector unsigned int)__b);
  6765.   return (vector float)__res;
  6766. }
  6767.  
  6768. #ifdef __VSX__
  6769. static __inline__ vector double __ATTRS_o_ai vec_nor(vector double __a,
  6770.                                                      vector double __b) {
  6771.   vector unsigned long long __res =
  6772.       ~((vector unsigned long long)__a | (vector unsigned long long)__b);
  6773.   return (vector double)__res;
  6774. }
  6775. #endif
  6776.  
  6777. /* vec_vnor */
  6778.  
  6779. static __inline__ vector signed char __ATTRS_o_ai
  6780. vec_vnor(vector signed char __a, vector signed char __b) {
  6781.   return ~(__a | __b);
  6782. }
  6783.  
  6784. static __inline__ vector unsigned char __ATTRS_o_ai
  6785. vec_vnor(vector unsigned char __a, vector unsigned char __b) {
  6786.   return ~(__a | __b);
  6787. }
  6788.  
  6789. static __inline__ vector bool char __ATTRS_o_ai vec_vnor(vector bool char __a,
  6790.                                                          vector bool char __b) {
  6791.   return ~(__a | __b);
  6792. }
  6793.  
  6794. static __inline__ vector short __ATTRS_o_ai vec_vnor(vector short __a,
  6795.                                                      vector short __b) {
  6796.   return ~(__a | __b);
  6797. }
  6798.  
  6799. static __inline__ vector unsigned short __ATTRS_o_ai
  6800. vec_vnor(vector unsigned short __a, vector unsigned short __b) {
  6801.   return ~(__a | __b);
  6802. }
  6803.  
  6804. static __inline__ vector bool short __ATTRS_o_ai
  6805. vec_vnor(vector bool short __a, vector bool short __b) {
  6806.   return ~(__a | __b);
  6807. }
  6808.  
  6809. static __inline__ vector int __ATTRS_o_ai vec_vnor(vector int __a,
  6810.                                                    vector int __b) {
  6811.   return ~(__a | __b);
  6812. }
  6813.  
  6814. static __inline__ vector unsigned int __ATTRS_o_ai
  6815. vec_vnor(vector unsigned int __a, vector unsigned int __b) {
  6816.   return ~(__a | __b);
  6817. }
  6818.  
  6819. static __inline__ vector bool int __ATTRS_o_ai vec_vnor(vector bool int __a,
  6820.                                                         vector bool int __b) {
  6821.   return ~(__a | __b);
  6822. }
  6823.  
  6824. static __inline__ vector float __ATTRS_o_ai vec_vnor(vector float __a,
  6825.                                                      vector float __b) {
  6826.   vector unsigned int __res =
  6827.       ~((vector unsigned int)__a | (vector unsigned int)__b);
  6828.   return (vector float)__res;
  6829. }
  6830.  
  6831. #ifdef __VSX__
  6832. static __inline__ vector signed long long __ATTRS_o_ai
  6833. vec_nor(vector signed long long __a, vector signed long long __b) {
  6834.   return ~(__a | __b);
  6835. }
  6836.  
  6837. static __inline__ vector unsigned long long __ATTRS_o_ai
  6838. vec_nor(vector unsigned long long __a, vector unsigned long long __b) {
  6839.   return ~(__a | __b);
  6840. }
  6841.  
  6842. static __inline__ vector bool long long __ATTRS_o_ai
  6843. vec_nor(vector bool long long __a, vector bool long long __b) {
  6844.   return ~(__a | __b);
  6845. }
  6846. #endif
  6847.  
  6848. /* vec_or */
  6849.  
  6850. #define __builtin_altivec_vor vec_or
  6851.  
  6852. static __inline__ vector signed char __ATTRS_o_ai
  6853. vec_or(vector signed char __a, vector signed char __b) {
  6854.   return __a | __b;
  6855. }
  6856.  
  6857. static __inline__ vector signed char __ATTRS_o_ai
  6858. vec_or(vector bool char __a, vector signed char __b) {
  6859.   return (vector signed char)__a | __b;
  6860. }
  6861.  
  6862. static __inline__ vector signed char __ATTRS_o_ai vec_or(vector signed char __a,
  6863.                                                          vector bool char __b) {
  6864.   return __a | (vector signed char)__b;
  6865. }
  6866.  
  6867. static __inline__ vector unsigned char __ATTRS_o_ai
  6868. vec_or(vector unsigned char __a, vector unsigned char __b) {
  6869.   return __a | __b;
  6870. }
  6871.  
  6872. static __inline__ vector unsigned char __ATTRS_o_ai
  6873. vec_or(vector bool char __a, vector unsigned char __b) {
  6874.   return (vector unsigned char)__a | __b;
  6875. }
  6876.  
  6877. static __inline__ vector unsigned char __ATTRS_o_ai
  6878. vec_or(vector unsigned char __a, vector bool char __b) {
  6879.   return __a | (vector unsigned char)__b;
  6880. }
  6881.  
  6882. static __inline__ vector bool char __ATTRS_o_ai vec_or(vector bool char __a,
  6883.                                                        vector bool char __b) {
  6884.   return __a | __b;
  6885. }
  6886.  
  6887. static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
  6888.                                                    vector short __b) {
  6889.   return __a | __b;
  6890. }
  6891.  
  6892. static __inline__ vector short __ATTRS_o_ai vec_or(vector bool short __a,
  6893.                                                    vector short __b) {
  6894.   return (vector short)__a | __b;
  6895. }
  6896.  
  6897. static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
  6898.                                                    vector bool short __b) {
  6899.   return __a | (vector short)__b;
  6900. }
  6901.  
  6902. static __inline__ vector unsigned short __ATTRS_o_ai
  6903. vec_or(vector unsigned short __a, vector unsigned short __b) {
  6904.   return __a | __b;
  6905. }
  6906.  
  6907. static __inline__ vector unsigned short __ATTRS_o_ai
  6908. vec_or(vector bool short __a, vector unsigned short __b) {
  6909.   return (vector unsigned short)__a | __b;
  6910. }
  6911.  
  6912. static __inline__ vector unsigned short __ATTRS_o_ai
  6913. vec_or(vector unsigned short __a, vector bool short __b) {
  6914.   return __a | (vector unsigned short)__b;
  6915. }
  6916.  
  6917. static __inline__ vector bool short __ATTRS_o_ai vec_or(vector bool short __a,
  6918.                                                         vector bool short __b) {
  6919.   return __a | __b;
  6920. }
  6921.  
  6922. static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
  6923.                                                  vector int __b) {
  6924.   return __a | __b;
  6925. }
  6926.  
  6927. static __inline__ vector int __ATTRS_o_ai vec_or(vector bool int __a,
  6928.                                                  vector int __b) {
  6929.   return (vector int)__a | __b;
  6930. }
  6931.  
  6932. static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
  6933.                                                  vector bool int __b) {
  6934.   return __a | (vector int)__b;
  6935. }
  6936.  
  6937. static __inline__ vector unsigned int __ATTRS_o_ai
  6938. vec_or(vector unsigned int __a, vector unsigned int __b) {
  6939.   return __a | __b;
  6940. }
  6941.  
  6942. static __inline__ vector unsigned int __ATTRS_o_ai
  6943. vec_or(vector bool int __a, vector unsigned int __b) {
  6944.   return (vector unsigned int)__a | __b;
  6945. }
  6946.  
  6947. static __inline__ vector unsigned int __ATTRS_o_ai
  6948. vec_or(vector unsigned int __a, vector bool int __b) {
  6949.   return __a | (vector unsigned int)__b;
  6950. }
  6951.  
  6952. static __inline__ vector bool int __ATTRS_o_ai vec_or(vector bool int __a,
  6953.                                                       vector bool int __b) {
  6954.   return __a | __b;
  6955. }
  6956.  
  6957. static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
  6958.                                                    vector float __b) {
  6959.   vector unsigned int __res =
  6960.       (vector unsigned int)__a | (vector unsigned int)__b;
  6961.   return (vector float)__res;
  6962. }
  6963.  
  6964. static __inline__ vector float __ATTRS_o_ai vec_or(vector bool int __a,
  6965.                                                    vector float __b) {
  6966.   vector unsigned int __res =
  6967.       (vector unsigned int)__a | (vector unsigned int)__b;
  6968.   return (vector float)__res;
  6969. }
  6970.  
  6971. static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
  6972.                                                    vector bool int __b) {
  6973.   vector unsigned int __res =
  6974.       (vector unsigned int)__a | (vector unsigned int)__b;
  6975.   return (vector float)__res;
  6976. }
  6977.  
  6978. #ifdef __VSX__
  6979. static __inline__ vector double __ATTRS_o_ai vec_or(vector bool long long __a,
  6980.                                                     vector double __b) {
  6981.   return (vector double)((vector unsigned long long)__a |
  6982.                          (vector unsigned long long)__b);
  6983. }
  6984.  
  6985. static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,
  6986.                                                     vector bool long long __b) {
  6987.   return (vector double)((vector unsigned long long)__a |
  6988.                          (vector unsigned long long)__b);
  6989. }
  6990.  
  6991. static __inline__ vector double __ATTRS_o_ai vec_or(vector double __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 signed long long __ATTRS_o_ai
  6998. vec_or(vector signed long long __a, vector signed long long __b) {
  6999.   return __a | __b;
  7000. }
  7001.  
  7002. static __inline__ vector signed long long __ATTRS_o_ai
  7003. vec_or(vector bool long long __a, vector signed long long __b) {
  7004.   return (vector signed long long)__a | __b;
  7005. }
  7006.  
  7007. static __inline__ vector signed long long __ATTRS_o_ai
  7008. vec_or(vector signed long long __a, vector bool long long __b) {
  7009.   return __a | (vector signed long long)__b;
  7010. }
  7011.  
  7012. static __inline__ vector unsigned long long __ATTRS_o_ai
  7013. vec_or(vector unsigned long long __a, vector unsigned long long __b) {
  7014.   return __a | __b;
  7015. }
  7016.  
  7017. static __inline__ vector unsigned long long __ATTRS_o_ai
  7018. vec_or(vector bool long long __a, vector unsigned long long __b) {
  7019.   return (vector unsigned long long)__a | __b;
  7020. }
  7021.  
  7022. static __inline__ vector unsigned long long __ATTRS_o_ai
  7023. vec_or(vector unsigned long long __a, vector bool long long __b) {
  7024.   return __a | (vector unsigned long long)__b;
  7025. }
  7026.  
  7027. static __inline__ vector bool long long __ATTRS_o_ai
  7028. vec_or(vector bool long long __a, vector bool long long __b) {
  7029.   return __a | __b;
  7030. }
  7031. #endif
  7032.  
  7033. #ifdef __POWER8_VECTOR__
  7034. static __inline__ vector signed char __ATTRS_o_ai
  7035. vec_orc(vector signed char __a, vector signed char __b) {
  7036.   return __a | ~__b;
  7037. }
  7038.  
  7039. static __inline__ vector signed char __ATTRS_o_ai
  7040. vec_orc(vector signed char __a, vector bool char __b) {
  7041.   return __a | (vector signed char)~__b;
  7042. }
  7043.  
  7044. static __inline__ vector signed char __ATTRS_o_ai
  7045. vec_orc(vector bool char __a, vector signed char __b) {
  7046.   return (vector signed char)(__a | (vector bool char)~__b);
  7047. }
  7048.  
  7049. static __inline__ vector unsigned char __ATTRS_o_ai
  7050. vec_orc(vector unsigned char __a, vector unsigned char __b) {
  7051.   return __a | ~__b;
  7052. }
  7053.  
  7054. static __inline__ vector unsigned char __ATTRS_o_ai
  7055. vec_orc(vector unsigned char __a, vector bool char __b) {
  7056.   return __a | (vector unsigned char)~__b;
  7057. }
  7058.  
  7059. static __inline__ vector unsigned char __ATTRS_o_ai
  7060. vec_orc(vector bool char __a, vector unsigned char __b) {
  7061.   return (vector unsigned char)(__a | (vector bool char)~__b);
  7062. }
  7063.  
  7064. static __inline__ vector bool char __ATTRS_o_ai vec_orc(vector bool char __a,
  7065.                                                         vector bool char __b) {
  7066.   return __a | ~__b;
  7067. }
  7068.  
  7069. static __inline__ vector signed short __ATTRS_o_ai
  7070. vec_orc(vector signed short __a, vector signed short __b) {
  7071.   return __a | ~__b;
  7072. }
  7073.  
  7074. static __inline__ vector signed short __ATTRS_o_ai
  7075. vec_orc(vector signed short __a, vector bool short __b) {
  7076.   return __a | (vector signed short)~__b;
  7077. }
  7078.  
  7079. static __inline__ vector signed short __ATTRS_o_ai
  7080. vec_orc(vector bool short __a, vector signed short __b) {
  7081.   return (vector signed short)(__a | (vector bool short)~__b);
  7082. }
  7083.  
  7084. static __inline__ vector unsigned short __ATTRS_o_ai
  7085. vec_orc(vector unsigned short __a, vector unsigned short __b) {
  7086.   return __a | ~__b;
  7087. }
  7088.  
  7089. static __inline__ vector unsigned short __ATTRS_o_ai
  7090. vec_orc(vector unsigned short __a, vector bool short __b) {
  7091.   return __a | (vector unsigned short)~__b;
  7092. }
  7093.  
  7094. static __inline__ vector unsigned short __ATTRS_o_ai
  7095. vec_orc(vector bool short __a, vector unsigned short __b) {
  7096.   return (vector unsigned short)(__a | (vector bool short)~__b);
  7097. }
  7098.  
  7099. static __inline__ vector bool short __ATTRS_o_ai
  7100. vec_orc(vector bool short __a, vector bool short __b) {
  7101.   return __a | ~__b;
  7102. }
  7103.  
  7104. static __inline__ vector signed int __ATTRS_o_ai
  7105. vec_orc(vector signed int __a, vector signed int __b) {
  7106.   return __a | ~__b;
  7107. }
  7108.  
  7109. static __inline__ vector signed int __ATTRS_o_ai vec_orc(vector signed int __a,
  7110.                                                          vector bool int __b) {
  7111.   return __a | (vector signed int)~__b;
  7112. }
  7113.  
  7114. static __inline__ vector signed int __ATTRS_o_ai
  7115. vec_orc(vector bool int __a, vector signed int __b) {
  7116.   return (vector signed int)(__a | (vector bool int)~__b);
  7117. }
  7118.  
  7119. static __inline__ vector unsigned int __ATTRS_o_ai
  7120. vec_orc(vector unsigned int __a, vector unsigned int __b) {
  7121.   return __a | ~__b;
  7122. }
  7123.  
  7124. static __inline__ vector unsigned int __ATTRS_o_ai
  7125. vec_orc(vector unsigned int __a, vector bool int __b) {
  7126.   return __a | (vector unsigned int)~__b;
  7127. }
  7128.  
  7129. static __inline__ vector unsigned int __ATTRS_o_ai
  7130. vec_orc(vector bool int __a, vector unsigned int __b) {
  7131.   return (vector unsigned int)(__a | (vector bool int)~__b);
  7132. }
  7133.  
  7134. static __inline__ vector bool int __ATTRS_o_ai vec_orc(vector bool int __a,
  7135.                                                        vector bool int __b) {
  7136.   return __a | ~__b;
  7137. }
  7138.  
  7139. static __inline__ vector float __ATTRS_o_ai
  7140. vec_orc(vector bool int __a, vector float __b) {
  7141.   return (vector float)(__a | ~(vector bool int)__b);
  7142. }
  7143.  
  7144. static __inline__ vector float __ATTRS_o_ai
  7145. vec_orc(vector float __a, vector bool int __b) {
  7146.   return (vector float)((vector bool int)__a | ~__b);
  7147. }
  7148.  
  7149. static __inline__ vector float __ATTRS_o_ai vec_orc(vector float __a,
  7150.                                                     vector float __b) {
  7151.   return (vector float)((vector unsigned int)__a | ~(vector unsigned int)__b);
  7152. }
  7153.  
  7154. static __inline__ vector signed long long __ATTRS_o_ai
  7155. vec_orc(vector signed long long __a, vector signed long long __b) {
  7156.   return __a | ~__b;
  7157. }
  7158.  
  7159. static __inline__ vector signed long long __ATTRS_o_ai
  7160. vec_orc(vector signed long long __a, vector bool long long __b) {
  7161.   return __a | (vector signed long long)~__b;
  7162. }
  7163.  
  7164. static __inline__ vector signed long long __ATTRS_o_ai
  7165. vec_orc(vector bool long long __a, vector signed long long __b) {
  7166.   return (vector signed long long)(__a | (vector bool long long)~__b);
  7167. }
  7168.  
  7169. static __inline__ vector unsigned long long __ATTRS_o_ai
  7170. vec_orc(vector unsigned long long __a, vector unsigned long long __b) {
  7171.   return __a | ~__b;
  7172. }
  7173.  
  7174. static __inline__ vector unsigned long long __ATTRS_o_ai
  7175. vec_orc(vector unsigned long long __a, vector bool long long __b) {
  7176.   return __a | (vector unsigned long long)~__b;
  7177. }
  7178.  
  7179. static __inline__ vector unsigned long long __ATTRS_o_ai
  7180. vec_orc(vector bool long long __a, vector unsigned long long __b) {
  7181.   return (vector unsigned long long)(__a | (vector bool long long)~__b);
  7182. }
  7183.  
  7184. static __inline__ vector bool long long __ATTRS_o_ai
  7185. vec_orc(vector bool long long __a, vector bool long long __b) {
  7186.   return __a | ~__b;
  7187. }
  7188.  
  7189. static __inline__ vector double __ATTRS_o_ai
  7190. vec_orc(vector double __a, vector bool long long __b) {
  7191.   return (vector double)((vector bool long long)__a | ~__b);
  7192. }
  7193.  
  7194. static __inline__ vector double __ATTRS_o_ai
  7195. vec_orc(vector bool long long __a, vector double __b) {
  7196.   return (vector double)(__a | ~(vector bool long long)__b);
  7197. }
  7198.  
  7199. static __inline__ vector double __ATTRS_o_ai vec_orc(vector double __a,
  7200.                                                      vector double __b) {
  7201.   return (vector double)((vector unsigned long long)__a |
  7202.                          ~(vector unsigned long long)__b);
  7203. }
  7204. #endif
  7205.  
  7206. /* vec_vor */
  7207.  
  7208. static __inline__ vector signed char __ATTRS_o_ai
  7209. vec_vor(vector signed char __a, vector signed char __b) {
  7210.   return __a | __b;
  7211. }
  7212.  
  7213. static __inline__ vector signed char __ATTRS_o_ai
  7214. vec_vor(vector bool char __a, vector signed char __b) {
  7215.   return (vector signed char)__a | __b;
  7216. }
  7217.  
  7218. static __inline__ vector signed char __ATTRS_o_ai
  7219. vec_vor(vector signed char __a, vector bool char __b) {
  7220.   return __a | (vector signed char)__b;
  7221. }
  7222.  
  7223. static __inline__ vector unsigned char __ATTRS_o_ai
  7224. vec_vor(vector unsigned char __a, vector unsigned char __b) {
  7225.   return __a | __b;
  7226. }
  7227.  
  7228. static __inline__ vector unsigned char __ATTRS_o_ai
  7229. vec_vor(vector bool char __a, vector unsigned char __b) {
  7230.   return (vector unsigned char)__a | __b;
  7231. }
  7232.  
  7233. static __inline__ vector unsigned char __ATTRS_o_ai
  7234. vec_vor(vector unsigned char __a, vector bool char __b) {
  7235.   return __a | (vector unsigned char)__b;
  7236. }
  7237.  
  7238. static __inline__ vector bool char __ATTRS_o_ai vec_vor(vector bool char __a,
  7239.                                                         vector bool char __b) {
  7240.   return __a | __b;
  7241. }
  7242.  
  7243. static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
  7244.                                                     vector short __b) {
  7245.   return __a | __b;
  7246. }
  7247.  
  7248. static __inline__ vector short __ATTRS_o_ai vec_vor(vector bool short __a,
  7249.                                                     vector short __b) {
  7250.   return (vector short)__a | __b;
  7251. }
  7252.  
  7253. static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
  7254.                                                     vector bool short __b) {
  7255.   return __a | (vector short)__b;
  7256. }
  7257.  
  7258. static __inline__ vector unsigned short __ATTRS_o_ai
  7259. vec_vor(vector unsigned short __a, vector unsigned short __b) {
  7260.   return __a | __b;
  7261. }
  7262.  
  7263. static __inline__ vector unsigned short __ATTRS_o_ai
  7264. vec_vor(vector bool short __a, vector unsigned short __b) {
  7265.   return (vector unsigned short)__a | __b;
  7266. }
  7267.  
  7268. static __inline__ vector unsigned short __ATTRS_o_ai
  7269. vec_vor(vector unsigned short __a, vector bool short __b) {
  7270.   return __a | (vector unsigned short)__b;
  7271. }
  7272.  
  7273. static __inline__ vector bool short __ATTRS_o_ai
  7274. vec_vor(vector bool short __a, vector bool short __b) {
  7275.   return __a | __b;
  7276. }
  7277.  
  7278. static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
  7279.                                                   vector int __b) {
  7280.   return __a | __b;
  7281. }
  7282.  
  7283. static __inline__ vector int __ATTRS_o_ai vec_vor(vector bool int __a,
  7284.                                                   vector int __b) {
  7285.   return (vector int)__a | __b;
  7286. }
  7287.  
  7288. static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
  7289.                                                   vector bool int __b) {
  7290.   return __a | (vector int)__b;
  7291. }
  7292.  
  7293. static __inline__ vector unsigned int __ATTRS_o_ai
  7294. vec_vor(vector unsigned int __a, vector unsigned int __b) {
  7295.   return __a | __b;
  7296. }
  7297.  
  7298. static __inline__ vector unsigned int __ATTRS_o_ai
  7299. vec_vor(vector bool int __a, vector unsigned int __b) {
  7300.   return (vector unsigned int)__a | __b;
  7301. }
  7302.  
  7303. static __inline__ vector unsigned int __ATTRS_o_ai
  7304. vec_vor(vector unsigned int __a, vector bool int __b) {
  7305.   return __a | (vector unsigned int)__b;
  7306. }
  7307.  
  7308. static __inline__ vector bool int __ATTRS_o_ai vec_vor(vector bool int __a,
  7309.                                                        vector bool int __b) {
  7310.   return __a | __b;
  7311. }
  7312.  
  7313. static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
  7314.                                                     vector float __b) {
  7315.   vector unsigned int __res =
  7316.       (vector unsigned int)__a | (vector unsigned int)__b;
  7317.   return (vector float)__res;
  7318. }
  7319.  
  7320. static __inline__ vector float __ATTRS_o_ai vec_vor(vector bool int __a,
  7321.                                                     vector float __b) {
  7322.   vector unsigned int __res =
  7323.       (vector unsigned int)__a | (vector unsigned int)__b;
  7324.   return (vector float)__res;
  7325. }
  7326.  
  7327. static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
  7328.                                                     vector bool int __b) {
  7329.   vector unsigned int __res =
  7330.       (vector unsigned int)__a | (vector unsigned int)__b;
  7331.   return (vector float)__res;
  7332. }
  7333.  
  7334. #ifdef __VSX__
  7335. static __inline__ vector signed long long __ATTRS_o_ai
  7336. vec_vor(vector signed long long __a, vector signed long long __b) {
  7337.   return __a | __b;
  7338. }
  7339.  
  7340. static __inline__ vector signed long long __ATTRS_o_ai
  7341. vec_vor(vector bool long long __a, vector signed long long __b) {
  7342.   return (vector signed long long)__a | __b;
  7343. }
  7344.  
  7345. static __inline__ vector signed long long __ATTRS_o_ai
  7346. vec_vor(vector signed long long __a, vector bool long long __b) {
  7347.   return __a | (vector signed long long)__b;
  7348. }
  7349.  
  7350. static __inline__ vector unsigned long long __ATTRS_o_ai
  7351. vec_vor(vector unsigned long long __a, vector unsigned long long __b) {
  7352.   return __a | __b;
  7353. }
  7354.  
  7355. static __inline__ vector unsigned long long __ATTRS_o_ai
  7356. vec_vor(vector bool long long __a, vector unsigned long long __b) {
  7357.   return (vector unsigned long long)__a | __b;
  7358. }
  7359.  
  7360. static __inline__ vector unsigned long long __ATTRS_o_ai
  7361. vec_vor(vector unsigned long long __a, vector bool long long __b) {
  7362.   return __a | (vector unsigned long long)__b;
  7363. }
  7364.  
  7365. static __inline__ vector bool long long __ATTRS_o_ai
  7366. vec_vor(vector bool long long __a, vector bool long long __b) {
  7367.   return __a | __b;
  7368. }
  7369. #endif
  7370.  
  7371. /* vec_pack */
  7372.  
  7373. /* The various vector pack instructions have a big-endian bias, so for
  7374.    little endian we must handle reversed element numbering.  */
  7375.  
  7376. static __inline__ vector signed char __ATTRS_o_ai
  7377. vec_pack(vector signed short __a, vector signed short __b) {
  7378. #ifdef __LITTLE_ENDIAN__
  7379.   return (vector signed char)vec_perm(
  7380.       __a, __b,
  7381.       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
  7382.                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
  7383. #else
  7384.   return (vector signed char)vec_perm(
  7385.       __a, __b,
  7386.       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
  7387.                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
  7388. #endif
  7389. }
  7390.  
  7391. static __inline__ vector unsigned char __ATTRS_o_ai
  7392. vec_pack(vector unsigned short __a, vector unsigned short __b) {
  7393. #ifdef __LITTLE_ENDIAN__
  7394.   return (vector unsigned char)vec_perm(
  7395.       __a, __b,
  7396.       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
  7397.                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
  7398. #else
  7399.   return (vector unsigned char)vec_perm(
  7400.       __a, __b,
  7401.       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
  7402.                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
  7403. #endif
  7404. }
  7405.  
  7406. static __inline__ vector bool char __ATTRS_o_ai
  7407. vec_pack(vector bool short __a, vector bool short __b) {
  7408. #ifdef __LITTLE_ENDIAN__
  7409.   return (vector bool char)vec_perm(
  7410.       __a, __b,
  7411.       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
  7412.                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
  7413. #else
  7414.   return (vector bool char)vec_perm(
  7415.       __a, __b,
  7416.       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
  7417.                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
  7418. #endif
  7419. }
  7420.  
  7421. static __inline__ vector short __ATTRS_o_ai vec_pack(vector int __a,
  7422.                                                      vector int __b) {
  7423. #ifdef __LITTLE_ENDIAN__
  7424.   return (vector short)vec_perm(
  7425.       __a, __b,
  7426.       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
  7427.                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
  7428. #else
  7429.   return (vector short)vec_perm(
  7430.       __a, __b,
  7431.       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
  7432.                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
  7433. #endif
  7434. }
  7435.  
  7436. static __inline__ vector unsigned short __ATTRS_o_ai
  7437. vec_pack(vector unsigned int __a, vector unsigned int __b) {
  7438. #ifdef __LITTLE_ENDIAN__
  7439.   return (vector unsigned short)vec_perm(
  7440.       __a, __b,
  7441.       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
  7442.                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
  7443. #else
  7444.   return (vector unsigned short)vec_perm(
  7445.       __a, __b,
  7446.       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
  7447.                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
  7448. #endif
  7449. }
  7450.  
  7451. static __inline__ vector bool short __ATTRS_o_ai vec_pack(vector bool int __a,
  7452.                                                           vector bool int __b) {
  7453. #ifdef __LITTLE_ENDIAN__
  7454.   return (vector bool short)vec_perm(
  7455.       __a, __b,
  7456.       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
  7457.                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
  7458. #else
  7459.   return (vector bool short)vec_perm(
  7460.       __a, __b,
  7461.       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
  7462.                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
  7463. #endif
  7464. }
  7465.  
  7466. #ifdef __VSX__
  7467. static __inline__ vector signed int __ATTRS_o_ai
  7468. vec_pack(vector signed long long __a, vector signed long long __b) {
  7469. #ifdef __LITTLE_ENDIAN__
  7470.   return (vector signed int)vec_perm(
  7471.       __a, __b,
  7472.       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
  7473.                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
  7474. #else
  7475.   return (vector signed int)vec_perm(
  7476.       __a, __b,
  7477.       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
  7478.                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
  7479. #endif
  7480. }
  7481. static __inline__ vector unsigned int __ATTRS_o_ai
  7482. vec_pack(vector unsigned long long __a, vector unsigned long long __b) {
  7483. #ifdef __LITTLE_ENDIAN__
  7484.   return (vector unsigned int)vec_perm(
  7485.       __a, __b,
  7486.       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
  7487.                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
  7488. #else
  7489.   return (vector unsigned int)vec_perm(
  7490.       __a, __b,
  7491.       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
  7492.                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
  7493. #endif
  7494. }
  7495.  
  7496. static __inline__ vector bool int __ATTRS_o_ai
  7497. vec_pack(vector bool long long __a, vector bool long long __b) {
  7498. #ifdef __LITTLE_ENDIAN__
  7499.   return (vector bool int)vec_perm(
  7500.       __a, __b,
  7501.       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
  7502.                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
  7503. #else
  7504.   return (vector bool int)vec_perm(
  7505.       __a, __b,
  7506.       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
  7507.                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
  7508. #endif
  7509. }
  7510.  
  7511. static __inline__ vector float __ATTRS_o_ai
  7512. vec_pack(vector double __a, vector double __b) {
  7513.   return (vector float) (__a[0], __a[1], __b[0], __b[1]);
  7514. }
  7515. #endif
  7516.  
  7517. #ifdef __POWER9_VECTOR__
  7518. static __inline__ vector unsigned short __ATTRS_o_ai
  7519. vec_pack_to_short_fp32(vector float __a, vector float __b) {
  7520.   vector float __resa = __builtin_vsx_xvcvsphp(__a);
  7521.   vector float __resb = __builtin_vsx_xvcvsphp(__b);
  7522. #ifdef __LITTLE_ENDIAN__
  7523.   return (vector unsigned short)vec_mergee(__resa, __resb);
  7524. #else
  7525.   return (vector unsigned short)vec_mergeo(__resa, __resb);
  7526. #endif
  7527. }
  7528.  
  7529. #endif
  7530. /* vec_vpkuhum */
  7531.  
  7532. #define __builtin_altivec_vpkuhum vec_vpkuhum
  7533.  
  7534. static __inline__ vector signed char __ATTRS_o_ai
  7535. vec_vpkuhum(vector signed short __a, vector signed short __b) {
  7536. #ifdef __LITTLE_ENDIAN__
  7537.   return (vector signed char)vec_perm(
  7538.       __a, __b,
  7539.       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
  7540.                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
  7541. #else
  7542.   return (vector signed char)vec_perm(
  7543.       __a, __b,
  7544.       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
  7545.                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
  7546. #endif
  7547. }
  7548.  
  7549. static __inline__ vector unsigned char __ATTRS_o_ai
  7550. vec_vpkuhum(vector unsigned short __a, vector unsigned short __b) {
  7551. #ifdef __LITTLE_ENDIAN__
  7552.   return (vector unsigned char)vec_perm(
  7553.       __a, __b,
  7554.       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
  7555.                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
  7556. #else
  7557.   return (vector unsigned char)vec_perm(
  7558.       __a, __b,
  7559.       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
  7560.                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
  7561. #endif
  7562. }
  7563.  
  7564. static __inline__ vector bool char __ATTRS_o_ai
  7565. vec_vpkuhum(vector bool short __a, vector bool short __b) {
  7566. #ifdef __LITTLE_ENDIAN__
  7567.   return (vector bool char)vec_perm(
  7568.       __a, __b,
  7569.       (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
  7570.                              0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
  7571. #else
  7572.   return (vector bool char)vec_perm(
  7573.       __a, __b,
  7574.       (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
  7575.                              0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
  7576. #endif
  7577. }
  7578.  
  7579. /* vec_vpkuwum */
  7580.  
  7581. #define __builtin_altivec_vpkuwum vec_vpkuwum
  7582.  
  7583. static __inline__ vector short __ATTRS_o_ai vec_vpkuwum(vector int __a,
  7584.                                                         vector int __b) {
  7585. #ifdef __LITTLE_ENDIAN__
  7586.   return (vector short)vec_perm(
  7587.       __a, __b,
  7588.       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
  7589.                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
  7590. #else
  7591.   return (vector short)vec_perm(
  7592.       __a, __b,
  7593.       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
  7594.                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
  7595. #endif
  7596. }
  7597.  
  7598. static __inline__ vector unsigned short __ATTRS_o_ai
  7599. vec_vpkuwum(vector unsigned int __a, vector unsigned int __b) {
  7600. #ifdef __LITTLE_ENDIAN__
  7601.   return (vector unsigned short)vec_perm(
  7602.       __a, __b,
  7603.       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
  7604.                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
  7605. #else
  7606.   return (vector unsigned short)vec_perm(
  7607.       __a, __b,
  7608.       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
  7609.                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
  7610. #endif
  7611. }
  7612.  
  7613. static __inline__ vector bool short __ATTRS_o_ai
  7614. vec_vpkuwum(vector bool int __a, vector bool int __b) {
  7615. #ifdef __LITTLE_ENDIAN__
  7616.   return (vector bool short)vec_perm(
  7617.       __a, __b,
  7618.       (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
  7619.                              0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
  7620. #else
  7621.   return (vector bool short)vec_perm(
  7622.       __a, __b,
  7623.       (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
  7624.                              0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
  7625. #endif
  7626. }
  7627.  
  7628. /* vec_vpkudum */
  7629.  
  7630. #ifdef __POWER8_VECTOR__
  7631. #define __builtin_altivec_vpkudum vec_vpkudum
  7632.  
  7633. static __inline__ vector int __ATTRS_o_ai vec_vpkudum(vector long long __a,
  7634.                                                       vector long long __b) {
  7635. #ifdef __LITTLE_ENDIAN__
  7636.   return (vector int)vec_perm(
  7637.       __a, __b,
  7638.       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
  7639.                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
  7640. #else
  7641.   return (vector int)vec_perm(
  7642.       __a, __b,
  7643.       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
  7644.                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
  7645. #endif
  7646. }
  7647.  
  7648. static __inline__ vector unsigned int __ATTRS_o_ai
  7649. vec_vpkudum(vector unsigned long long __a, vector unsigned long long __b) {
  7650. #ifdef __LITTLE_ENDIAN__
  7651.   return (vector unsigned int)vec_perm(
  7652.       __a, __b,
  7653.       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
  7654.                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
  7655. #else
  7656.   return (vector unsigned int)vec_perm(
  7657.       __a, __b,
  7658.       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
  7659.                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
  7660. #endif
  7661. }
  7662.  
  7663. static __inline__ vector bool int __ATTRS_o_ai
  7664. vec_vpkudum(vector bool long long __a, vector bool long long __b) {
  7665. #ifdef __LITTLE_ENDIAN__
  7666.   return (vector bool int)vec_perm(
  7667.       (vector long long)__a, (vector long long)__b,
  7668.       (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
  7669.                              0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
  7670. #else
  7671.   return (vector bool int)vec_perm(
  7672.       (vector long long)__a, (vector long long)__b,
  7673.       (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
  7674.                              0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
  7675. #endif
  7676. }
  7677. #endif
  7678.  
  7679. /* vec_packpx */
  7680.  
  7681. static __inline__ vector pixel __attribute__((__always_inline__))
  7682. vec_packpx(vector unsigned int __a, vector unsigned int __b) {
  7683. #ifdef __LITTLE_ENDIAN__
  7684.   return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
  7685. #else
  7686.   return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
  7687. #endif
  7688. }
  7689.  
  7690. /* vec_vpkpx */
  7691.  
  7692. static __inline__ vector pixel __attribute__((__always_inline__))
  7693. vec_vpkpx(vector unsigned int __a, vector unsigned int __b) {
  7694. #ifdef __LITTLE_ENDIAN__
  7695.   return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
  7696. #else
  7697.   return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
  7698. #endif
  7699. }
  7700.  
  7701. /* vec_packs */
  7702.  
  7703. static __inline__ vector signed char __ATTRS_o_ai vec_packs(vector short __a,
  7704.                                                             vector short __b) {
  7705. #ifdef __LITTLE_ENDIAN__
  7706.   return __builtin_altivec_vpkshss(__b, __a);
  7707. #else
  7708.   return __builtin_altivec_vpkshss(__a, __b);
  7709. #endif
  7710. }
  7711.  
  7712. static __inline__ vector unsigned char __ATTRS_o_ai
  7713. vec_packs(vector unsigned short __a, vector unsigned short __b) {
  7714. #ifdef __LITTLE_ENDIAN__
  7715.   return __builtin_altivec_vpkuhus(__b, __a);
  7716. #else
  7717.   return __builtin_altivec_vpkuhus(__a, __b);
  7718. #endif
  7719. }
  7720.  
  7721. static __inline__ vector signed short __ATTRS_o_ai vec_packs(vector int __a,
  7722.                                                              vector int __b) {
  7723. #ifdef __LITTLE_ENDIAN__
  7724.   return __builtin_altivec_vpkswss(__b, __a);
  7725. #else
  7726.   return __builtin_altivec_vpkswss(__a, __b);
  7727. #endif
  7728. }
  7729.  
  7730. static __inline__ vector unsigned short __ATTRS_o_ai
  7731. vec_packs(vector unsigned int __a, vector unsigned int __b) {
  7732. #ifdef __LITTLE_ENDIAN__
  7733.   return __builtin_altivec_vpkuwus(__b, __a);
  7734. #else
  7735.   return __builtin_altivec_vpkuwus(__a, __b);
  7736. #endif
  7737. }
  7738.  
  7739. #ifdef __POWER8_VECTOR__
  7740. static __inline__ vector int __ATTRS_o_ai vec_packs(vector long long __a,
  7741.                                                     vector long long __b) {
  7742. #ifdef __LITTLE_ENDIAN__
  7743.   return __builtin_altivec_vpksdss(__b, __a);
  7744. #else
  7745.   return __builtin_altivec_vpksdss(__a, __b);
  7746. #endif
  7747. }
  7748.  
  7749. static __inline__ vector unsigned int __ATTRS_o_ai
  7750. vec_packs(vector unsigned long long __a, vector unsigned long long __b) {
  7751. #ifdef __LITTLE_ENDIAN__
  7752.   return __builtin_altivec_vpkudus(__b, __a);
  7753. #else
  7754.   return __builtin_altivec_vpkudus(__a, __b);
  7755. #endif
  7756. }
  7757. #endif
  7758.  
  7759. /* vec_vpkshss */
  7760.  
  7761. static __inline__ vector signed char __attribute__((__always_inline__))
  7762. vec_vpkshss(vector short __a, vector short __b) {
  7763. #ifdef __LITTLE_ENDIAN__
  7764.   return __builtin_altivec_vpkshss(__b, __a);
  7765. #else
  7766.   return __builtin_altivec_vpkshss(__a, __b);
  7767. #endif
  7768. }
  7769.  
  7770. /* vec_vpksdss */
  7771.  
  7772. #ifdef __POWER8_VECTOR__
  7773. static __inline__ vector int __ATTRS_o_ai vec_vpksdss(vector long long __a,
  7774.                                                       vector long long __b) {
  7775. #ifdef __LITTLE_ENDIAN__
  7776.   return __builtin_altivec_vpksdss(__b, __a);
  7777. #else
  7778.   return __builtin_altivec_vpksdss(__a, __b);
  7779. #endif
  7780. }
  7781. #endif
  7782.  
  7783. /* vec_vpkuhus */
  7784.  
  7785. static __inline__ vector unsigned char __attribute__((__always_inline__))
  7786. vec_vpkuhus(vector unsigned short __a, vector unsigned short __b) {
  7787. #ifdef __LITTLE_ENDIAN__
  7788.   return __builtin_altivec_vpkuhus(__b, __a);
  7789. #else
  7790.   return __builtin_altivec_vpkuhus(__a, __b);
  7791. #endif
  7792. }
  7793.  
  7794. /* vec_vpkudus */
  7795.  
  7796. #ifdef __POWER8_VECTOR__
  7797. static __inline__ vector unsigned int __attribute__((__always_inline__))
  7798. vec_vpkudus(vector unsigned long long __a, vector unsigned long long __b) {
  7799. #ifdef __LITTLE_ENDIAN__
  7800.   return __builtin_altivec_vpkudus(__b, __a);
  7801. #else
  7802.   return __builtin_altivec_vpkudus(__a, __b);
  7803. #endif
  7804. }
  7805. #endif
  7806.  
  7807. /* vec_vpkswss */
  7808.  
  7809. static __inline__ vector signed short __attribute__((__always_inline__))
  7810. vec_vpkswss(vector int __a, vector int __b) {
  7811. #ifdef __LITTLE_ENDIAN__
  7812.   return __builtin_altivec_vpkswss(__b, __a);
  7813. #else
  7814.   return __builtin_altivec_vpkswss(__a, __b);
  7815. #endif
  7816. }
  7817.  
  7818. /* vec_vpkuwus */
  7819.  
  7820. static __inline__ vector unsigned short __attribute__((__always_inline__))
  7821. vec_vpkuwus(vector unsigned int __a, vector unsigned int __b) {
  7822. #ifdef __LITTLE_ENDIAN__
  7823.   return __builtin_altivec_vpkuwus(__b, __a);
  7824. #else
  7825.   return __builtin_altivec_vpkuwus(__a, __b);
  7826. #endif
  7827. }
  7828.  
  7829. /* vec_packsu */
  7830.  
  7831. static __inline__ vector unsigned char __ATTRS_o_ai
  7832. vec_packsu(vector short __a, vector short __b) {
  7833. #ifdef __LITTLE_ENDIAN__
  7834.   return __builtin_altivec_vpkshus(__b, __a);
  7835. #else
  7836.   return __builtin_altivec_vpkshus(__a, __b);
  7837. #endif
  7838. }
  7839.  
  7840. static __inline__ vector unsigned char __ATTRS_o_ai
  7841. vec_packsu(vector unsigned short __a, vector unsigned short __b) {
  7842. #ifdef __LITTLE_ENDIAN__
  7843.   return __builtin_altivec_vpkuhus(__b, __a);
  7844. #else
  7845.   return __builtin_altivec_vpkuhus(__a, __b);
  7846. #endif
  7847. }
  7848.  
  7849. static __inline__ vector unsigned short __ATTRS_o_ai
  7850. vec_packsu(vector int __a, vector int __b) {
  7851. #ifdef __LITTLE_ENDIAN__
  7852.   return __builtin_altivec_vpkswus(__b, __a);
  7853. #else
  7854.   return __builtin_altivec_vpkswus(__a, __b);
  7855. #endif
  7856. }
  7857.  
  7858. static __inline__ vector unsigned short __ATTRS_o_ai
  7859. vec_packsu(vector unsigned int __a, vector unsigned int __b) {
  7860. #ifdef __LITTLE_ENDIAN__
  7861.   return __builtin_altivec_vpkuwus(__b, __a);
  7862. #else
  7863.   return __builtin_altivec_vpkuwus(__a, __b);
  7864. #endif
  7865. }
  7866.  
  7867. #ifdef __POWER8_VECTOR__
  7868. static __inline__ vector unsigned int __ATTRS_o_ai
  7869. vec_packsu(vector long long __a, vector long long __b) {
  7870. #ifdef __LITTLE_ENDIAN__
  7871.   return __builtin_altivec_vpksdus(__b, __a);
  7872. #else
  7873.   return __builtin_altivec_vpksdus(__a, __b);
  7874. #endif
  7875. }
  7876.  
  7877. static __inline__ vector unsigned int __ATTRS_o_ai
  7878. vec_packsu(vector unsigned long long __a, vector unsigned long long __b) {
  7879. #ifdef __LITTLE_ENDIAN__
  7880.   return __builtin_altivec_vpkudus(__b, __a);
  7881. #else
  7882.   return __builtin_altivec_vpkudus(__a, __b);
  7883. #endif
  7884. }
  7885. #endif
  7886.  
  7887. /* vec_vpkshus */
  7888.  
  7889. static __inline__ vector unsigned char __ATTRS_o_ai
  7890. vec_vpkshus(vector short __a, vector short __b) {
  7891. #ifdef __LITTLE_ENDIAN__
  7892.   return __builtin_altivec_vpkshus(__b, __a);
  7893. #else
  7894.   return __builtin_altivec_vpkshus(__a, __b);
  7895. #endif
  7896. }
  7897.  
  7898. static __inline__ vector unsigned char __ATTRS_o_ai
  7899. vec_vpkshus(vector unsigned short __a, vector unsigned short __b) {
  7900. #ifdef __LITTLE_ENDIAN__
  7901.   return __builtin_altivec_vpkuhus(__b, __a);
  7902. #else
  7903.   return __builtin_altivec_vpkuhus(__a, __b);
  7904. #endif
  7905. }
  7906.  
  7907. /* vec_vpkswus */
  7908.  
  7909. static __inline__ vector unsigned short __ATTRS_o_ai
  7910. vec_vpkswus(vector int __a, vector int __b) {
  7911. #ifdef __LITTLE_ENDIAN__
  7912.   return __builtin_altivec_vpkswus(__b, __a);
  7913. #else
  7914.   return __builtin_altivec_vpkswus(__a, __b);
  7915. #endif
  7916. }
  7917.  
  7918. static __inline__ vector unsigned short __ATTRS_o_ai
  7919. vec_vpkswus(vector unsigned int __a, vector unsigned int __b) {
  7920. #ifdef __LITTLE_ENDIAN__
  7921.   return __builtin_altivec_vpkuwus(__b, __a);
  7922. #else
  7923.   return __builtin_altivec_vpkuwus(__a, __b);
  7924. #endif
  7925. }
  7926.  
  7927. /* vec_vpksdus */
  7928.  
  7929. #ifdef __POWER8_VECTOR__
  7930. static __inline__ vector unsigned int __ATTRS_o_ai
  7931. vec_vpksdus(vector long long __a, vector long long __b) {
  7932. #ifdef __LITTLE_ENDIAN__
  7933.   return __builtin_altivec_vpksdus(__b, __a);
  7934. #else
  7935.   return __builtin_altivec_vpksdus(__a, __b);
  7936. #endif
  7937. }
  7938. #endif
  7939.  
  7940. /* vec_perm */
  7941.  
  7942. // The vperm instruction is defined architecturally with a big-endian bias.
  7943. // For little endian, we swap the input operands and invert the permute
  7944. // control vector.  Only the rightmost 5 bits matter, so we could use
  7945. // a vector of all 31s instead of all 255s to perform the inversion.
  7946. // However, when the PCV is not a constant, using 255 has an advantage
  7947. // in that the vec_xor can be recognized as a vec_nor (and for P8 and
  7948. // later, possibly a vec_nand).
  7949.  
  7950. static __inline__ vector signed char __ATTRS_o_ai vec_perm(
  7951.     vector signed char __a, vector signed char __b, vector unsigned char __c) {
  7952. #ifdef __LITTLE_ENDIAN__
  7953.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  7954.                               255, 255, 255, 255, 255, 255, 255, 255};
  7955.   __d = vec_xor(__c, __d);
  7956.   return (vector signed char)__builtin_altivec_vperm_4si((vector int)__b,
  7957.                                                          (vector int)__a, __d);
  7958. #else
  7959.   return (vector signed char)__builtin_altivec_vperm_4si((vector int)__a,
  7960.                                                          (vector int)__b, __c);
  7961. #endif
  7962. }
  7963.  
  7964. static __inline__ vector unsigned char __ATTRS_o_ai
  7965. vec_perm(vector unsigned char __a, vector unsigned char __b,
  7966.          vector unsigned char __c) {
  7967. #ifdef __LITTLE_ENDIAN__
  7968.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  7969.                               255, 255, 255, 255, 255, 255, 255, 255};
  7970.   __d = vec_xor(__c, __d);
  7971.   return (vector unsigned char)__builtin_altivec_vperm_4si(
  7972.       (vector int)__b, (vector int)__a, __d);
  7973. #else
  7974.   return (vector unsigned char)__builtin_altivec_vperm_4si(
  7975.       (vector int)__a, (vector int)__b, __c);
  7976. #endif
  7977. }
  7978.  
  7979. static __inline__ vector bool char __ATTRS_o_ai
  7980. vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c) {
  7981. #ifdef __LITTLE_ENDIAN__
  7982.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  7983.                               255, 255, 255, 255, 255, 255, 255, 255};
  7984.   __d = vec_xor(__c, __d);
  7985.   return (vector bool char)__builtin_altivec_vperm_4si((vector int)__b,
  7986.                                                        (vector int)__a, __d);
  7987. #else
  7988.   return (vector bool char)__builtin_altivec_vperm_4si((vector int)__a,
  7989.                                                        (vector int)__b, __c);
  7990. #endif
  7991. }
  7992.  
  7993. static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
  7994.                                                      vector signed short __b,
  7995.                                                      vector unsigned char __c) {
  7996. #ifdef __LITTLE_ENDIAN__
  7997.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  7998.                               255, 255, 255, 255, 255, 255, 255, 255};
  7999.   __d = vec_xor(__c, __d);
  8000.   return (vector signed short)__builtin_altivec_vperm_4si((vector int)__b,
  8001.                                                           (vector int)__a, __d);
  8002. #else
  8003.   return (vector signed short)__builtin_altivec_vperm_4si((vector int)__a,
  8004.                                                           (vector int)__b, __c);
  8005. #endif
  8006. }
  8007.  
  8008. static __inline__ vector unsigned short __ATTRS_o_ai
  8009. vec_perm(vector unsigned short __a, vector unsigned short __b,
  8010.          vector unsigned char __c) {
  8011. #ifdef __LITTLE_ENDIAN__
  8012.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  8013.                               255, 255, 255, 255, 255, 255, 255, 255};
  8014.   __d = vec_xor(__c, __d);
  8015.   return (vector unsigned short)__builtin_altivec_vperm_4si(
  8016.       (vector int)__b, (vector int)__a, __d);
  8017. #else
  8018.   return (vector unsigned short)__builtin_altivec_vperm_4si(
  8019.       (vector int)__a, (vector int)__b, __c);
  8020. #endif
  8021. }
  8022.  
  8023. static __inline__ vector bool short __ATTRS_o_ai vec_perm(
  8024.     vector bool short __a, vector bool short __b, vector unsigned char __c) {
  8025. #ifdef __LITTLE_ENDIAN__
  8026.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  8027.                               255, 255, 255, 255, 255, 255, 255, 255};
  8028.   __d = vec_xor(__c, __d);
  8029.   return (vector bool short)__builtin_altivec_vperm_4si((vector int)__b,
  8030.                                                         (vector int)__a, __d);
  8031. #else
  8032.   return (vector bool short)__builtin_altivec_vperm_4si((vector int)__a,
  8033.                                                         (vector int)__b, __c);
  8034. #endif
  8035. }
  8036.  
  8037. static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
  8038.                                                      vector pixel __b,
  8039.                                                      vector unsigned char __c) {
  8040. #ifdef __LITTLE_ENDIAN__
  8041.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  8042.                               255, 255, 255, 255, 255, 255, 255, 255};
  8043.   __d = vec_xor(__c, __d);
  8044.   return (vector pixel)__builtin_altivec_vperm_4si((vector int)__b,
  8045.                                                    (vector int)__a, __d);
  8046. #else
  8047.   return (vector pixel)__builtin_altivec_vperm_4si((vector int)__a,
  8048.                                                    (vector int)__b, __c);
  8049. #endif
  8050. }
  8051.  
  8052. static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
  8053.                                                    vector signed int __b,
  8054.                                                    vector unsigned char __c) {
  8055. #ifdef __LITTLE_ENDIAN__
  8056.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  8057.                               255, 255, 255, 255, 255, 255, 255, 255};
  8058.   __d = vec_xor(__c, __d);
  8059.   return (vector signed int)__builtin_altivec_vperm_4si(__b, __a, __d);
  8060. #else
  8061.   return (vector signed int)__builtin_altivec_vperm_4si(__a, __b, __c);
  8062. #endif
  8063. }
  8064.  
  8065. static __inline__ vector unsigned int __ATTRS_o_ai
  8066. vec_perm(vector unsigned int __a, vector unsigned int __b,
  8067.          vector unsigned char __c) {
  8068. #ifdef __LITTLE_ENDIAN__
  8069.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  8070.                               255, 255, 255, 255, 255, 255, 255, 255};
  8071.   __d = vec_xor(__c, __d);
  8072.   return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__b,
  8073.                                                           (vector int)__a, __d);
  8074. #else
  8075.   return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__a,
  8076.                                                           (vector int)__b, __c);
  8077. #endif
  8078. }
  8079.  
  8080. static __inline__ vector bool int __ATTRS_o_ai
  8081. vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
  8082. #ifdef __LITTLE_ENDIAN__
  8083.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  8084.                               255, 255, 255, 255, 255, 255, 255, 255};
  8085.   __d = vec_xor(__c, __d);
  8086.   return (vector bool int)__builtin_altivec_vperm_4si((vector int)__b,
  8087.                                                       (vector int)__a, __d);
  8088. #else
  8089.   return (vector bool int)__builtin_altivec_vperm_4si((vector int)__a,
  8090.                                                       (vector int)__b, __c);
  8091. #endif
  8092. }
  8093.  
  8094. static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
  8095.                                                      vector float __b,
  8096.                                                      vector unsigned char __c) {
  8097. #ifdef __LITTLE_ENDIAN__
  8098.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  8099.                               255, 255, 255, 255, 255, 255, 255, 255};
  8100.   __d = vec_xor(__c, __d);
  8101.   return (vector float)__builtin_altivec_vperm_4si((vector int)__b,
  8102.                                                    (vector int)__a, __d);
  8103. #else
  8104.   return (vector float)__builtin_altivec_vperm_4si((vector int)__a,
  8105.                                                    (vector int)__b, __c);
  8106. #endif
  8107. }
  8108.  
  8109. #ifdef __VSX__
  8110. static __inline__ vector long long __ATTRS_o_ai
  8111. vec_perm(vector signed long long __a, vector signed long long __b,
  8112.          vector unsigned char __c) {
  8113. #ifdef __LITTLE_ENDIAN__
  8114.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  8115.                               255, 255, 255, 255, 255, 255, 255, 255};
  8116.   __d = vec_xor(__c, __d);
  8117.   return (vector signed long long)__builtin_altivec_vperm_4si(
  8118.       (vector int)__b, (vector int)__a, __d);
  8119. #else
  8120.   return (vector signed long long)__builtin_altivec_vperm_4si(
  8121.       (vector int)__a, (vector int)__b, __c);
  8122. #endif
  8123. }
  8124.  
  8125. static __inline__ vector unsigned long long __ATTRS_o_ai
  8126. vec_perm(vector unsigned long long __a, vector unsigned long long __b,
  8127.          vector unsigned char __c) {
  8128. #ifdef __LITTLE_ENDIAN__
  8129.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  8130.                               255, 255, 255, 255, 255, 255, 255, 255};
  8131.   __d = vec_xor(__c, __d);
  8132.   return (vector unsigned long long)__builtin_altivec_vperm_4si(
  8133.       (vector int)__b, (vector int)__a, __d);
  8134. #else
  8135.   return (vector unsigned long long)__builtin_altivec_vperm_4si(
  8136.       (vector int)__a, (vector int)__b, __c);
  8137. #endif
  8138. }
  8139.  
  8140. static __inline__ vector bool long long __ATTRS_o_ai
  8141. vec_perm(vector bool long long __a, vector bool long long __b,
  8142.          vector unsigned char __c) {
  8143. #ifdef __LITTLE_ENDIAN__
  8144.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  8145.                               255, 255, 255, 255, 255, 255, 255, 255};
  8146.   __d = vec_xor(__c, __d);
  8147.   return (vector bool long long)__builtin_altivec_vperm_4si(
  8148.       (vector int)__b, (vector int)__a, __d);
  8149. #else
  8150.   return (vector bool long long)__builtin_altivec_vperm_4si(
  8151.       (vector int)__a, (vector int)__b, __c);
  8152. #endif
  8153. }
  8154.  
  8155. static __inline__ vector double __ATTRS_o_ai
  8156. vec_perm(vector double __a, vector double __b, vector unsigned char __c) {
  8157. #ifdef __LITTLE_ENDIAN__
  8158.   vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
  8159.                               255, 255, 255, 255, 255, 255, 255, 255};
  8160.   __d = vec_xor(__c, __d);
  8161.   return (vector double)__builtin_altivec_vperm_4si((vector int)__b,
  8162.                                                     (vector int)__a, __d);
  8163. #else
  8164.   return (vector double)__builtin_altivec_vperm_4si((vector int)__a,
  8165.                                                     (vector int)__b, __c);
  8166. #endif
  8167. }
  8168. #endif
  8169.  
  8170. /* vec_vperm */
  8171.  
  8172. static __inline__ vector signed char __ATTRS_o_ai vec_vperm(
  8173.     vector signed char __a, vector signed char __b, vector unsigned char __c) {
  8174.   return vec_perm(__a, __b, __c);
  8175. }
  8176.  
  8177. static __inline__ vector unsigned char __ATTRS_o_ai
  8178. vec_vperm(vector unsigned char __a, vector unsigned char __b,
  8179.           vector unsigned char __c) {
  8180.   return vec_perm(__a, __b, __c);
  8181. }
  8182.  
  8183. static __inline__ vector bool char __ATTRS_o_ai vec_vperm(
  8184.     vector bool char __a, vector bool char __b, vector unsigned char __c) {
  8185.   return vec_perm(__a, __b, __c);
  8186. }
  8187.  
  8188. static __inline__ vector short __ATTRS_o_ai
  8189. vec_vperm(vector short __a, vector short __b, vector unsigned char __c) {
  8190.   return vec_perm(__a, __b, __c);
  8191. }
  8192.  
  8193. static __inline__ vector unsigned short __ATTRS_o_ai
  8194. vec_vperm(vector unsigned short __a, vector unsigned short __b,
  8195.           vector unsigned char __c) {
  8196.   return vec_perm(__a, __b, __c);
  8197. }
  8198.  
  8199. static __inline__ vector bool short __ATTRS_o_ai vec_vperm(
  8200.     vector bool short __a, vector bool short __b, vector unsigned char __c) {
  8201.   return vec_perm(__a, __b, __c);
  8202. }
  8203.  
  8204. static __inline__ vector pixel __ATTRS_o_ai
  8205. vec_vperm(vector pixel __a, vector pixel __b, vector unsigned char __c) {
  8206.   return vec_perm(__a, __b, __c);
  8207. }
  8208.  
  8209. static __inline__ vector int __ATTRS_o_ai vec_vperm(vector int __a,
  8210.                                                     vector int __b,
  8211.                                                     vector unsigned char __c) {
  8212.   return vec_perm(__a, __b, __c);
  8213. }
  8214.  
  8215. static __inline__ vector unsigned int __ATTRS_o_ai
  8216. vec_vperm(vector unsigned int __a, vector unsigned int __b,
  8217.           vector unsigned char __c) {
  8218.   return vec_perm(__a, __b, __c);
  8219. }
  8220.  
  8221. static __inline__ vector bool int __ATTRS_o_ai
  8222. vec_vperm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
  8223.   return vec_perm(__a, __b, __c);
  8224. }
  8225.  
  8226. static __inline__ vector float __ATTRS_o_ai
  8227. vec_vperm(vector float __a, vector float __b, vector unsigned char __c) {
  8228.   return vec_perm(__a, __b, __c);
  8229. }
  8230.  
  8231. #ifdef __VSX__
  8232. static __inline__ vector long long __ATTRS_o_ai vec_vperm(
  8233.     vector long long __a, vector long long __b, vector unsigned char __c) {
  8234.   return vec_perm(__a, __b, __c);
  8235. }
  8236.  
  8237. static __inline__ vector unsigned long long __ATTRS_o_ai
  8238. vec_vperm(vector unsigned long long __a, vector unsigned long long __b,
  8239.           vector unsigned char __c) {
  8240.   return vec_perm(__a, __b, __c);
  8241. }
  8242.  
  8243. static __inline__ vector double __ATTRS_o_ai
  8244. vec_vperm(vector double __a, vector double __b, vector unsigned char __c) {
  8245.   return vec_perm(__a, __b, __c);
  8246. }
  8247. #endif
  8248.  
  8249. /* vec_re */
  8250.  
  8251. static __inline__ vector float __ATTRS_o_ai vec_re(vector float __a) {
  8252. #ifdef __VSX__
  8253.   return __builtin_vsx_xvresp(__a);
  8254. #else
  8255.   return __builtin_altivec_vrefp(__a);
  8256. #endif
  8257. }
  8258.  
  8259. #ifdef __VSX__
  8260. static __inline__ vector double __ATTRS_o_ai vec_re(vector double __a) {
  8261.   return __builtin_vsx_xvredp(__a);
  8262. }
  8263. #endif
  8264.  
  8265. /* vec_vrefp */
  8266.  
  8267. static __inline__ vector float __attribute__((__always_inline__))
  8268. vec_vrefp(vector float __a) {
  8269.   return __builtin_altivec_vrefp(__a);
  8270. }
  8271.  
  8272. /* vec_rl */
  8273.  
  8274. static __inline__ vector signed char __ATTRS_o_ai
  8275. vec_rl(vector signed char __a, vector unsigned char __b) {
  8276.   return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
  8277. }
  8278.  
  8279. static __inline__ vector unsigned char __ATTRS_o_ai
  8280. vec_rl(vector unsigned char __a, vector unsigned char __b) {
  8281.   return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
  8282. }
  8283.  
  8284. static __inline__ vector short __ATTRS_o_ai vec_rl(vector short __a,
  8285.                                                    vector unsigned short __b) {
  8286.   return __builtin_altivec_vrlh(__a, __b);
  8287. }
  8288.  
  8289. static __inline__ vector unsigned short __ATTRS_o_ai
  8290. vec_rl(vector unsigned short __a, vector unsigned short __b) {
  8291.   return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
  8292. }
  8293.  
  8294. static __inline__ vector int __ATTRS_o_ai vec_rl(vector int __a,
  8295.                                                  vector unsigned int __b) {
  8296.   return __builtin_altivec_vrlw(__a, __b);
  8297. }
  8298.  
  8299. static __inline__ vector unsigned int __ATTRS_o_ai
  8300. vec_rl(vector unsigned int __a, vector unsigned int __b) {
  8301.   return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
  8302. }
  8303.  
  8304. #ifdef __POWER8_VECTOR__
  8305. static __inline__ vector signed long long __ATTRS_o_ai
  8306. vec_rl(vector signed long long __a, vector unsigned long long __b) {
  8307.   return __builtin_altivec_vrld(__a, __b);
  8308. }
  8309.  
  8310. static __inline__ vector unsigned long long __ATTRS_o_ai
  8311. vec_rl(vector unsigned long long __a, vector unsigned long long __b) {
  8312.   return (vector unsigned long long)__builtin_altivec_vrld(
  8313.       (vector long long)__a, __b);
  8314. }
  8315. #endif
  8316.  
  8317. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  8318. static __inline__ vector signed __int128 __ATTRS_o_ai
  8319. vec_rl(vector signed __int128 __a, vector unsigned __int128 __b) {
  8320.   return (vector signed __int128)(((vector unsigned __int128)__b
  8321.                                    << (vector unsigned __int128)__a) |
  8322.                                   ((vector unsigned __int128)__b >>
  8323.                                    ((__CHAR_BIT__ *
  8324.                                      sizeof(vector unsigned __int128)) -
  8325.                                     (vector unsigned __int128)__a)));
  8326. }
  8327.  
  8328. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  8329. vec_rl(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  8330.   return (__b << __a)|(__b >> ((__CHAR_BIT__ * sizeof(vector unsigned __int128)) - __a));
  8331. }
  8332. #endif
  8333.  
  8334. /* vec_rlmi */
  8335. #ifdef __POWER9_VECTOR__
  8336. static __inline__ vector unsigned int __ATTRS_o_ai
  8337. vec_rlmi(vector unsigned int __a, vector unsigned int __b,
  8338.          vector unsigned int __c) {
  8339.   return __builtin_altivec_vrlwmi(__a, __c, __b);
  8340. }
  8341.  
  8342. static __inline__ vector unsigned long long __ATTRS_o_ai
  8343. vec_rlmi(vector unsigned long long __a, vector unsigned long long __b,
  8344.          vector unsigned long long __c) {
  8345.   return __builtin_altivec_vrldmi(__a, __c, __b);
  8346. }
  8347. #endif
  8348.  
  8349. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  8350. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  8351. vec_rlmi(vector unsigned __int128 __a, vector unsigned __int128 __b,
  8352.          vector unsigned __int128 __c) {
  8353.   return __builtin_altivec_vrlqmi(__a, __c, __b);
  8354. }
  8355.  
  8356. static __inline__ vector signed __int128 __ATTRS_o_ai
  8357. vec_rlmi(vector signed __int128 __a, vector signed __int128 __b,
  8358.          vector signed __int128 __c) {
  8359.   return (vector signed __int128)__builtin_altivec_vrlqmi(
  8360.       (vector unsigned __int128)__a, (vector unsigned __int128)__c,
  8361.       (vector unsigned __int128)__b);
  8362. }
  8363. #endif
  8364.  
  8365. /* vec_rlnm */
  8366. #ifdef __POWER9_VECTOR__
  8367. static __inline__ vector unsigned int __ATTRS_o_ai
  8368. vec_rlnm(vector unsigned int __a, vector unsigned int __b,
  8369.          vector unsigned int __c) {
  8370.   vector unsigned int OneByte = { 0x8, 0x8, 0x8, 0x8 };
  8371.   return __builtin_altivec_vrlwnm(__a, ((__c << OneByte) | __b));
  8372. }
  8373.  
  8374. static __inline__ vector unsigned long long __ATTRS_o_ai
  8375. vec_rlnm(vector unsigned long long __a, vector unsigned long long __b,
  8376.          vector unsigned long long __c) {
  8377.   vector unsigned long long OneByte = { 0x8, 0x8 };
  8378.   return __builtin_altivec_vrldnm(__a, ((__c << OneByte) | __b));
  8379. }
  8380. #endif
  8381.  
  8382. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  8383. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  8384. vec_rlnm(vector unsigned __int128 __a, vector unsigned __int128 __b,
  8385.          vector unsigned __int128 __c) {
  8386.   // Merge __b and __c using an appropriate shuffle.
  8387.   vector unsigned char TmpB = (vector unsigned char)__b;
  8388.   vector unsigned char TmpC = (vector unsigned char)__c;
  8389.   vector unsigned char MaskAndShift =
  8390. #ifdef __LITTLE_ENDIAN__
  8391.       __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, -1, -1, -1, 16, 0,
  8392.                               1, -1, -1, -1, -1, -1);
  8393. #else
  8394.       __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, 31, 30, 15, -1,
  8395.                               -1, -1, -1, -1, -1, -1, -1);
  8396. #endif
  8397.    return __builtin_altivec_vrlqnm(__a, (vector unsigned __int128) MaskAndShift);
  8398. }
  8399.  
  8400. static __inline__ vector signed __int128 __ATTRS_o_ai
  8401. vec_rlnm(vector signed __int128 __a, vector signed __int128 __b,
  8402.          vector signed __int128 __c) {
  8403.   // Merge __b and __c using an appropriate shuffle.
  8404.   vector unsigned char TmpB = (vector unsigned char)__b;
  8405.   vector unsigned char TmpC = (vector unsigned char)__c;
  8406.   vector unsigned char MaskAndShift =
  8407. #ifdef __LITTLE_ENDIAN__
  8408.       __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, -1, -1, -1, 16, 0,
  8409.                               1, -1, -1, -1, -1, -1);
  8410. #else
  8411.       __builtin_shufflevector(TmpB, TmpC, -1, -1, -1, -1, -1, 31, 30, 15, -1,
  8412.                               -1, -1, -1, -1, -1, -1, -1);
  8413. #endif
  8414.   return (vector signed __int128)__builtin_altivec_vrlqnm(
  8415.       (vector unsigned __int128)__a, (vector unsigned __int128)MaskAndShift);
  8416. }
  8417. #endif
  8418.  
  8419. /* vec_vrlb */
  8420.  
  8421. static __inline__ vector signed char __ATTRS_o_ai
  8422. vec_vrlb(vector signed char __a, vector unsigned char __b) {
  8423.   return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
  8424. }
  8425.  
  8426. static __inline__ vector unsigned char __ATTRS_o_ai
  8427. vec_vrlb(vector unsigned char __a, vector unsigned char __b) {
  8428.   return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
  8429. }
  8430.  
  8431. /* vec_vrlh */
  8432.  
  8433. static __inline__ vector short __ATTRS_o_ai
  8434. vec_vrlh(vector short __a, vector unsigned short __b) {
  8435.   return __builtin_altivec_vrlh(__a, __b);
  8436. }
  8437.  
  8438. static __inline__ vector unsigned short __ATTRS_o_ai
  8439. vec_vrlh(vector unsigned short __a, vector unsigned short __b) {
  8440.   return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
  8441. }
  8442.  
  8443. /* vec_vrlw */
  8444.  
  8445. static __inline__ vector int __ATTRS_o_ai vec_vrlw(vector int __a,
  8446.                                                    vector unsigned int __b) {
  8447.   return __builtin_altivec_vrlw(__a, __b);
  8448. }
  8449.  
  8450. static __inline__ vector unsigned int __ATTRS_o_ai
  8451. vec_vrlw(vector unsigned int __a, vector unsigned int __b) {
  8452.   return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
  8453. }
  8454.  
  8455. /* vec_round */
  8456.  
  8457. static __inline__ vector float __ATTRS_o_ai vec_round(vector float __a) {
  8458.   return __builtin_altivec_vrfin(__a);
  8459. }
  8460.  
  8461. #ifdef __VSX__
  8462. #ifdef __XL_COMPAT_ALTIVEC__
  8463. static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a);
  8464. static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) {
  8465.   double __fpscr = __builtin_readflm();
  8466.   __builtin_setrnd(0);
  8467.   vector double __rounded = vec_rint(__a);
  8468.   __builtin_setflm(__fpscr);
  8469.   return __rounded;
  8470. }
  8471. #else
  8472. static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) {
  8473.   return __builtin_vsx_xvrdpi(__a);
  8474. }
  8475. #endif
  8476.  
  8477. /* vec_rint */
  8478.  
  8479. static __inline__ vector float __ATTRS_o_ai vec_rint(vector float __a) {
  8480.   return __builtin_vsx_xvrspic(__a);
  8481. }
  8482.  
  8483. static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a) {
  8484.   return __builtin_vsx_xvrdpic(__a);
  8485. }
  8486.  
  8487. /* vec_roundc */
  8488.  
  8489. static __inline__ vector float __ATTRS_o_ai vec_roundc(vector float __a) {
  8490.   return __builtin_vsx_xvrspic(__a);
  8491. }
  8492.  
  8493. static __inline__ vector double __ATTRS_o_ai vec_roundc(vector double __a) {
  8494.   return __builtin_vsx_xvrdpic(__a);
  8495. }
  8496.  
  8497. /* vec_nearbyint */
  8498.  
  8499. static __inline__ vector float __ATTRS_o_ai vec_nearbyint(vector float __a) {
  8500.   return __builtin_vsx_xvrspi(__a);
  8501. }
  8502.  
  8503. static __inline__ vector double __ATTRS_o_ai vec_nearbyint(vector double __a) {
  8504.   return __builtin_vsx_xvrdpi(__a);
  8505. }
  8506. #endif
  8507.  
  8508. /* vec_vrfin */
  8509.  
  8510. static __inline__ vector float __attribute__((__always_inline__))
  8511. vec_vrfin(vector float __a) {
  8512.   return __builtin_altivec_vrfin(__a);
  8513. }
  8514.  
  8515. /* vec_sqrt */
  8516.  
  8517. #ifdef __VSX__
  8518. static __inline__ vector float __ATTRS_o_ai vec_sqrt(vector float __a) {
  8519.   return __builtin_vsx_xvsqrtsp(__a);
  8520. }
  8521.  
  8522. static __inline__ vector double __ATTRS_o_ai vec_sqrt(vector double __a) {
  8523.   return __builtin_vsx_xvsqrtdp(__a);
  8524. }
  8525. #endif
  8526.  
  8527. /* vec_rsqrte */
  8528.  
  8529. static __inline__ vector float __ATTRS_o_ai vec_rsqrte(vector float __a) {
  8530. #ifdef __VSX__
  8531.   return __builtin_vsx_xvrsqrtesp(__a);
  8532. #else
  8533.   return __builtin_altivec_vrsqrtefp(__a);
  8534. #endif
  8535. }
  8536.  
  8537. #ifdef __VSX__
  8538. static __inline__ vector double __ATTRS_o_ai vec_rsqrte(vector double __a) {
  8539.   return __builtin_vsx_xvrsqrtedp(__a);
  8540. }
  8541. #endif
  8542.  
  8543. static vector float __ATTRS_o_ai vec_rsqrt(vector float __a) {
  8544.   return __builtin_ppc_rsqrtf(__a);
  8545. }
  8546.  
  8547. #ifdef __VSX__
  8548. static vector double __ATTRS_o_ai vec_rsqrt(vector double __a) {
  8549.   return __builtin_ppc_rsqrtd(__a);
  8550. }
  8551. #endif
  8552.  
  8553. /* vec_vrsqrtefp */
  8554.  
  8555. static __inline__ __vector float __attribute__((__always_inline__))
  8556. vec_vrsqrtefp(vector float __a) {
  8557.   return __builtin_altivec_vrsqrtefp(__a);
  8558. }
  8559.  
  8560. /* vec_xvtsqrt */
  8561.  
  8562. #ifdef __VSX__
  8563. static __inline__ int __ATTRS_o_ai vec_test_swsqrt(vector double __a) {
  8564.   return __builtin_vsx_xvtsqrtdp(__a);
  8565. }
  8566.  
  8567. static __inline__ int __ATTRS_o_ai vec_test_swsqrts(vector float __a) {
  8568.   return __builtin_vsx_xvtsqrtsp(__a);
  8569. }
  8570. #endif
  8571.  
  8572. /* vec_sel */
  8573.  
  8574. #define __builtin_altivec_vsel_4si vec_sel
  8575.  
  8576. static __inline__ vector signed char __ATTRS_o_ai vec_sel(
  8577.     vector signed char __a, vector signed char __b, vector unsigned char __c) {
  8578.   return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
  8579. }
  8580.  
  8581. static __inline__ vector signed char __ATTRS_o_ai
  8582. vec_sel(vector signed char __a, vector signed char __b, vector bool char __c) {
  8583.   return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
  8584. }
  8585.  
  8586. static __inline__ vector unsigned char __ATTRS_o_ai
  8587. vec_sel(vector unsigned char __a, vector unsigned char __b,
  8588.         vector unsigned char __c) {
  8589.   return (__a & ~__c) | (__b & __c);
  8590. }
  8591.  
  8592. static __inline__ vector unsigned char __ATTRS_o_ai vec_sel(
  8593.     vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
  8594.   return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
  8595. }
  8596.  
  8597. static __inline__ vector bool char __ATTRS_o_ai
  8598. vec_sel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
  8599.   return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
  8600. }
  8601.  
  8602. static __inline__ vector bool char __ATTRS_o_ai vec_sel(vector bool char __a,
  8603.                                                         vector bool char __b,
  8604.                                                         vector bool char __c) {
  8605.   return (__a & ~__c) | (__b & __c);
  8606. }
  8607.  
  8608. static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
  8609.                                                     vector short __b,
  8610.                                                     vector unsigned short __c) {
  8611.   return (__a & ~(vector short)__c) | (__b & (vector short)__c);
  8612. }
  8613.  
  8614. static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
  8615.                                                     vector short __b,
  8616.                                                     vector bool short __c) {
  8617.   return (__a & ~(vector short)__c) | (__b & (vector short)__c);
  8618. }
  8619.  
  8620. static __inline__ vector unsigned short __ATTRS_o_ai
  8621. vec_sel(vector unsigned short __a, vector unsigned short __b,
  8622.         vector unsigned short __c) {
  8623.   return (__a & ~__c) | (__b & __c);
  8624. }
  8625.  
  8626. static __inline__ vector unsigned short __ATTRS_o_ai
  8627. vec_sel(vector unsigned short __a, vector unsigned short __b,
  8628.         vector bool short __c) {
  8629.   return (__a & ~(vector unsigned short)__c) |
  8630.          (__b & (vector unsigned short)__c);
  8631. }
  8632.  
  8633. static __inline__ vector bool short __ATTRS_o_ai vec_sel(
  8634.     vector bool short __a, vector bool short __b, vector unsigned short __c) {
  8635.   return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
  8636. }
  8637.  
  8638. static __inline__ vector bool short __ATTRS_o_ai
  8639. vec_sel(vector bool short __a, vector bool short __b, vector bool short __c) {
  8640.   return (__a & ~__c) | (__b & __c);
  8641. }
  8642.  
  8643. static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
  8644.                                                   vector int __b,
  8645.                                                   vector unsigned int __c) {
  8646.   return (__a & ~(vector int)__c) | (__b & (vector int)__c);
  8647. }
  8648.  
  8649. static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
  8650.                                                   vector int __b,
  8651.                                                   vector bool int __c) {
  8652.   return (__a & ~(vector int)__c) | (__b & (vector int)__c);
  8653. }
  8654.  
  8655. static __inline__ vector unsigned int __ATTRS_o_ai vec_sel(
  8656.     vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
  8657.   return (__a & ~__c) | (__b & __c);
  8658. }
  8659.  
  8660. static __inline__ vector unsigned int __ATTRS_o_ai
  8661. vec_sel(vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
  8662.   return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
  8663. }
  8664.  
  8665. static __inline__ vector bool int __ATTRS_o_ai
  8666. vec_sel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
  8667.   return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
  8668. }
  8669.  
  8670. static __inline__ vector bool int __ATTRS_o_ai vec_sel(vector bool int __a,
  8671.                                                        vector bool int __b,
  8672.                                                        vector bool int __c) {
  8673.   return (__a & ~__c) | (__b & __c);
  8674. }
  8675.  
  8676. static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
  8677.                                                     vector float __b,
  8678.                                                     vector unsigned int __c) {
  8679.   vector int __res = ((vector int)__a & ~(vector int)__c) |
  8680.                      ((vector int)__b & (vector int)__c);
  8681.   return (vector float)__res;
  8682. }
  8683.  
  8684. static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
  8685.                                                     vector float __b,
  8686.                                                     vector bool int __c) {
  8687.   vector int __res = ((vector int)__a & ~(vector int)__c) |
  8688.                      ((vector int)__b & (vector int)__c);
  8689.   return (vector float)__res;
  8690. }
  8691.  
  8692. #ifdef __VSX__
  8693. static __inline__ vector double __ATTRS_o_ai
  8694. vec_sel(vector double __a, vector double __b, vector bool long long __c) {
  8695.   vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
  8696.                            ((vector long long)__b & (vector long long)__c);
  8697.   return (vector double)__res;
  8698. }
  8699.  
  8700. static __inline__ vector double __ATTRS_o_ai
  8701. vec_sel(vector double __a, vector double __b, vector unsigned long long __c) {
  8702.   vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
  8703.                            ((vector long long)__b & (vector long long)__c);
  8704.   return (vector double)__res;
  8705. }
  8706.  
  8707. static __inline__ vector bool long long __ATTRS_o_ai
  8708. vec_sel(vector bool long long __a, vector bool long long __b,
  8709.         vector bool long long __c) {
  8710.   return (__a & ~__c) | (__b & __c);
  8711. }
  8712.  
  8713. static __inline__ vector bool long long __ATTRS_o_ai
  8714. vec_sel(vector bool long long __a, vector bool long long __b,
  8715.         vector unsigned long long __c) {
  8716.   return (__a & ~(vector bool long long)__c) |
  8717.          (__b & (vector bool long long)__c);
  8718. }
  8719.  
  8720. static __inline__ vector signed long long __ATTRS_o_ai
  8721. vec_sel(vector signed long long __a, vector signed long long __b,
  8722.         vector bool long long __c) {
  8723.   return (__a & ~(vector signed long long)__c) |
  8724.          (__b & (vector signed long long)__c);
  8725. }
  8726.  
  8727. static __inline__ vector signed long long __ATTRS_o_ai
  8728. vec_sel(vector signed long long __a, vector signed long long __b,
  8729.         vector unsigned long long __c) {
  8730.   return (__a & ~(vector signed long long)__c) |
  8731.          (__b & (vector signed long long)__c);
  8732. }
  8733.  
  8734. static __inline__ vector unsigned long long __ATTRS_o_ai
  8735. vec_sel(vector unsigned long long __a, vector unsigned long long __b,
  8736.         vector bool long long __c) {
  8737.   return (__a & ~(vector unsigned long long)__c) |
  8738.          (__b & (vector unsigned long long)__c);
  8739. }
  8740.  
  8741. static __inline__ vector unsigned long long __ATTRS_o_ai
  8742. vec_sel(vector unsigned long long __a, vector unsigned long long __b,
  8743.         vector unsigned long long __c) {
  8744.   return (__a & ~__c) | (__b & __c);
  8745. }
  8746. #endif
  8747.  
  8748. /* vec_vsel */
  8749.  
  8750. static __inline__ vector signed char __ATTRS_o_ai vec_vsel(
  8751.     vector signed char __a, vector signed char __b, vector unsigned char __c) {
  8752.   return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
  8753. }
  8754.  
  8755. static __inline__ vector signed char __ATTRS_o_ai
  8756. vec_vsel(vector signed char __a, vector signed char __b, vector bool char __c) {
  8757.   return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
  8758. }
  8759.  
  8760. static __inline__ vector unsigned char __ATTRS_o_ai
  8761. vec_vsel(vector unsigned char __a, vector unsigned char __b,
  8762.          vector unsigned char __c) {
  8763.   return (__a & ~__c) | (__b & __c);
  8764. }
  8765.  
  8766. static __inline__ vector unsigned char __ATTRS_o_ai vec_vsel(
  8767.     vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
  8768.   return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
  8769. }
  8770.  
  8771. static __inline__ vector bool char __ATTRS_o_ai
  8772. vec_vsel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
  8773.   return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
  8774. }
  8775.  
  8776. static __inline__ vector bool char __ATTRS_o_ai vec_vsel(vector bool char __a,
  8777.                                                          vector bool char __b,
  8778.                                                          vector bool char __c) {
  8779.   return (__a & ~__c) | (__b & __c);
  8780. }
  8781.  
  8782. static __inline__ vector short __ATTRS_o_ai
  8783. vec_vsel(vector short __a, vector short __b, vector unsigned short __c) {
  8784.   return (__a & ~(vector short)__c) | (__b & (vector short)__c);
  8785. }
  8786.  
  8787. static __inline__ vector short __ATTRS_o_ai vec_vsel(vector short __a,
  8788.                                                      vector short __b,
  8789.                                                      vector bool short __c) {
  8790.   return (__a & ~(vector short)__c) | (__b & (vector short)__c);
  8791. }
  8792.  
  8793. static __inline__ vector unsigned short __ATTRS_o_ai
  8794. vec_vsel(vector unsigned short __a, vector unsigned short __b,
  8795.          vector unsigned short __c) {
  8796.   return (__a & ~__c) | (__b & __c);
  8797. }
  8798.  
  8799. static __inline__ vector unsigned short __ATTRS_o_ai
  8800. vec_vsel(vector unsigned short __a, vector unsigned short __b,
  8801.          vector bool short __c) {
  8802.   return (__a & ~(vector unsigned short)__c) |
  8803.          (__b & (vector unsigned short)__c);
  8804. }
  8805.  
  8806. static __inline__ vector bool short __ATTRS_o_ai vec_vsel(
  8807.     vector bool short __a, vector bool short __b, vector unsigned short __c) {
  8808.   return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
  8809. }
  8810.  
  8811. static __inline__ vector bool short __ATTRS_o_ai
  8812. vec_vsel(vector bool short __a, vector bool short __b, vector bool short __c) {
  8813.   return (__a & ~__c) | (__b & __c);
  8814. }
  8815.  
  8816. static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
  8817.                                                    vector int __b,
  8818.                                                    vector unsigned int __c) {
  8819.   return (__a & ~(vector int)__c) | (__b & (vector int)__c);
  8820. }
  8821.  
  8822. static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
  8823.                                                    vector int __b,
  8824.                                                    vector bool int __c) {
  8825.   return (__a & ~(vector int)__c) | (__b & (vector int)__c);
  8826. }
  8827.  
  8828. static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
  8829.     vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
  8830.   return (__a & ~__c) | (__b & __c);
  8831. }
  8832.  
  8833. static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
  8834.     vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
  8835.   return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
  8836. }
  8837.  
  8838. static __inline__ vector bool int __ATTRS_o_ai
  8839. vec_vsel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
  8840.   return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
  8841. }
  8842.  
  8843. static __inline__ vector bool int __ATTRS_o_ai vec_vsel(vector bool int __a,
  8844.                                                         vector bool int __b,
  8845.                                                         vector bool int __c) {
  8846.   return (__a & ~__c) | (__b & __c);
  8847. }
  8848.  
  8849. static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
  8850.                                                      vector float __b,
  8851.                                                      vector unsigned int __c) {
  8852.   vector int __res = ((vector int)__a & ~(vector int)__c) |
  8853.                      ((vector int)__b & (vector int)__c);
  8854.   return (vector float)__res;
  8855. }
  8856.  
  8857. static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
  8858.                                                      vector float __b,
  8859.                                                      vector bool int __c) {
  8860.   vector int __res = ((vector int)__a & ~(vector int)__c) |
  8861.                      ((vector int)__b & (vector int)__c);
  8862.   return (vector float)__res;
  8863. }
  8864.  
  8865. /* vec_sl */
  8866.  
  8867. // vec_sl does modulo arithmetic on __b first, so __b is allowed to be more
  8868. // than the length of __a.
  8869. static __inline__ vector unsigned char __ATTRS_o_ai
  8870. vec_sl(vector unsigned char __a, vector unsigned char __b) {
  8871.   return __a << (__b %
  8872.                  (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));
  8873. }
  8874.  
  8875. static __inline__ vector signed char __ATTRS_o_ai
  8876. vec_sl(vector signed char __a, vector unsigned char __b) {
  8877.   return (vector signed char)vec_sl((vector unsigned char)__a, __b);
  8878. }
  8879.  
  8880. static __inline__ vector unsigned short __ATTRS_o_ai
  8881. vec_sl(vector unsigned short __a, vector unsigned short __b) {
  8882.   return __a << (__b % (vector unsigned short)(sizeof(unsigned short) *
  8883.                                                __CHAR_BIT__));
  8884. }
  8885.  
  8886. static __inline__ vector short __ATTRS_o_ai vec_sl(vector short __a,
  8887.                                                    vector unsigned short __b) {
  8888.   return (vector short)vec_sl((vector unsigned short)__a, __b);
  8889. }
  8890.  
  8891. static __inline__ vector unsigned int __ATTRS_o_ai
  8892. vec_sl(vector unsigned int __a, vector unsigned int __b) {
  8893.   return __a << (__b %
  8894.                  (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));
  8895. }
  8896.  
  8897. static __inline__ vector int __ATTRS_o_ai vec_sl(vector int __a,
  8898.                                                  vector unsigned int __b) {
  8899.   return (vector int)vec_sl((vector unsigned int)__a, __b);
  8900. }
  8901.  
  8902. #ifdef __POWER8_VECTOR__
  8903. static __inline__ vector unsigned long long __ATTRS_o_ai
  8904. vec_sl(vector unsigned long long __a, vector unsigned long long __b) {
  8905.   return __a << (__b % (vector unsigned long long)(sizeof(unsigned long long) *
  8906.                                                    __CHAR_BIT__));
  8907. }
  8908.  
  8909. static __inline__ vector long long __ATTRS_o_ai
  8910. vec_sl(vector long long __a, vector unsigned long long __b) {
  8911.   return (vector long long)vec_sl((vector unsigned long long)__a, __b);
  8912. }
  8913. #elif defined(__VSX__)
  8914. static __inline__ vector unsigned char __ATTRS_o_ai
  8915. vec_vspltb(vector unsigned char __a, unsigned char __b);
  8916. static __inline__ vector unsigned long long __ATTRS_o_ai
  8917. vec_sl(vector unsigned long long __a, vector unsigned long long __b) {
  8918.   __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
  8919.  
  8920.   // Big endian element one (the right doubleword) can be left shifted as-is.
  8921.   // The other element needs to be swapped into the right doubleword and
  8922.   // shifted. Then the right doublewords of the two result vectors are merged.
  8923.   vector signed long long __rightelt =
  8924.       (vector signed long long)__builtin_altivec_vslo((vector signed int)__a,
  8925.                                                       (vector signed int)__b);
  8926. #ifdef __LITTLE_ENDIAN__
  8927.   __rightelt = (vector signed long long)__builtin_altivec_vsl(
  8928.       (vector signed int)__rightelt,
  8929.       (vector signed int)vec_vspltb((vector unsigned char)__b, 0));
  8930. #else
  8931.   __rightelt = (vector signed long long)__builtin_altivec_vsl(
  8932.       (vector signed int)__rightelt,
  8933.       (vector signed int)vec_vspltb((vector unsigned char)__b, 15));
  8934. #endif
  8935.   __a = __builtin_shufflevector(__a, __a, 1, 0);
  8936.   __b = __builtin_shufflevector(__b, __b, 1, 0);
  8937.   vector signed long long __leftelt =
  8938.       (vector signed long long)__builtin_altivec_vslo((vector signed int)__a,
  8939.                                                       (vector signed int)__b);
  8940. #ifdef __LITTLE_ENDIAN__
  8941.   __leftelt = (vector signed long long)__builtin_altivec_vsl(
  8942.       (vector signed int)__leftelt,
  8943.       (vector signed int)vec_vspltb((vector unsigned char)__b, 0));
  8944.   return (vector unsigned long long)__builtin_shufflevector(__rightelt,
  8945.                                                             __leftelt, 0, 2);
  8946. #else
  8947.   __leftelt = (vector signed long long)__builtin_altivec_vsl(
  8948.       (vector signed int)__leftelt,
  8949.       (vector signed int)vec_vspltb((vector unsigned char)__b, 15));
  8950.   return (vector unsigned long long)__builtin_shufflevector(__leftelt,
  8951.                                                             __rightelt, 1, 3);
  8952. #endif
  8953. }
  8954.  
  8955. static __inline__ vector long long __ATTRS_o_ai
  8956. vec_sl(vector long long __a, vector unsigned long long __b) {
  8957.   return (vector long long)vec_sl((vector unsigned long long)__a, __b);
  8958. }
  8959. #endif /* __VSX__ */
  8960.  
  8961. /* vec_vslb */
  8962.  
  8963. #define __builtin_altivec_vslb vec_vslb
  8964.  
  8965. static __inline__ vector signed char __ATTRS_o_ai
  8966. vec_vslb(vector signed char __a, vector unsigned char __b) {
  8967.   return vec_sl(__a, __b);
  8968. }
  8969.  
  8970. static __inline__ vector unsigned char __ATTRS_o_ai
  8971. vec_vslb(vector unsigned char __a, vector unsigned char __b) {
  8972.   return vec_sl(__a, __b);
  8973. }
  8974.  
  8975. /* vec_vslh */
  8976.  
  8977. #define __builtin_altivec_vslh vec_vslh
  8978.  
  8979. static __inline__ vector short __ATTRS_o_ai
  8980. vec_vslh(vector short __a, vector unsigned short __b) {
  8981.   return vec_sl(__a, __b);
  8982. }
  8983.  
  8984. static __inline__ vector unsigned short __ATTRS_o_ai
  8985. vec_vslh(vector unsigned short __a, vector unsigned short __b) {
  8986.   return vec_sl(__a, __b);
  8987. }
  8988.  
  8989. /* vec_vslw */
  8990.  
  8991. #define __builtin_altivec_vslw vec_vslw
  8992.  
  8993. static __inline__ vector int __ATTRS_o_ai vec_vslw(vector int __a,
  8994.                                                    vector unsigned int __b) {
  8995.   return vec_sl(__a, __b);
  8996. }
  8997.  
  8998. static __inline__ vector unsigned int __ATTRS_o_ai
  8999. vec_vslw(vector unsigned int __a, vector unsigned int __b) {
  9000.   return vec_sl(__a, __b);
  9001. }
  9002.  
  9003. /* vec_sld */
  9004.  
  9005. #define __builtin_altivec_vsldoi_4si vec_sld
  9006.  
  9007. static __inline__ vector signed char __ATTRS_o_ai vec_sld(
  9008.     vector signed char __a, vector signed char __b, unsigned const int __c) {
  9009.   unsigned char __d = __c & 0x0F;
  9010. #ifdef __LITTLE_ENDIAN__
  9011.   return vec_perm(
  9012.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9013.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9014.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9015.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9016. #else
  9017.   return vec_perm(
  9018.       __a, __b,
  9019.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9020.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9021.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9022. #endif
  9023. }
  9024.  
  9025. static __inline__ vector unsigned char __ATTRS_o_ai
  9026. vec_sld(vector unsigned char __a, vector unsigned char __b,
  9027.         unsigned const int __c) {
  9028.   unsigned char __d = __c & 0x0F;
  9029. #ifdef __LITTLE_ENDIAN__
  9030.   return vec_perm(
  9031.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9032.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9033.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9034.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9035. #else
  9036.   return vec_perm(
  9037.       __a, __b,
  9038.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9039.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9040.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9041. #endif
  9042. }
  9043.  
  9044. static __inline__ vector bool char __ATTRS_o_ai
  9045. vec_sld(vector bool char __a, vector bool char __b, unsigned const int __c) {
  9046.   unsigned char __d = __c & 0x0F;
  9047. #ifdef __LITTLE_ENDIAN__
  9048.   return vec_perm(
  9049.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9050.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9051.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9052.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9053. #else
  9054.   return vec_perm(
  9055.       __a, __b,
  9056.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9057.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9058.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9059. #endif
  9060. }
  9061.  
  9062. static __inline__ vector signed short __ATTRS_o_ai vec_sld(
  9063.     vector signed short __a, vector signed short __b, unsigned const int __c) {
  9064.   unsigned char __d = __c & 0x0F;
  9065. #ifdef __LITTLE_ENDIAN__
  9066.   return vec_perm(
  9067.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9068.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9069.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9070.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9071. #else
  9072.   return vec_perm(
  9073.       __a, __b,
  9074.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9075.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9076.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9077. #endif
  9078. }
  9079.  
  9080. static __inline__ vector unsigned short __ATTRS_o_ai
  9081. vec_sld(vector unsigned short __a, vector unsigned short __b,
  9082.         unsigned const int __c) {
  9083.   unsigned char __d = __c & 0x0F;
  9084. #ifdef __LITTLE_ENDIAN__
  9085.   return vec_perm(
  9086.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9087.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9088.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9089.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9090. #else
  9091.   return vec_perm(
  9092.       __a, __b,
  9093.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9094.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9095.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9096. #endif
  9097. }
  9098.  
  9099. static __inline__ vector bool short __ATTRS_o_ai
  9100. vec_sld(vector bool short __a, vector bool short __b, unsigned const int __c) {
  9101.   unsigned char __d = __c & 0x0F;
  9102. #ifdef __LITTLE_ENDIAN__
  9103.   return vec_perm(
  9104.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9105.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9106.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9107.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9108. #else
  9109.   return vec_perm(
  9110.       __a, __b,
  9111.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9112.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9113.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9114. #endif
  9115. }
  9116.  
  9117. static __inline__ vector pixel __ATTRS_o_ai vec_sld(vector pixel __a,
  9118.                                                     vector pixel __b,
  9119.                                                     unsigned const int __c) {
  9120.   unsigned char __d = __c & 0x0F;
  9121. #ifdef __LITTLE_ENDIAN__
  9122.   return vec_perm(
  9123.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9124.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9125.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9126.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9127. #else
  9128.   return vec_perm(
  9129.       __a, __b,
  9130.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9131.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9132.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9133. #endif
  9134. }
  9135.  
  9136. static __inline__ vector signed int __ATTRS_o_ai
  9137. vec_sld(vector signed int __a, vector signed int __b, unsigned const int __c) {
  9138.   unsigned char __d = __c & 0x0F;
  9139. #ifdef __LITTLE_ENDIAN__
  9140.   return vec_perm(
  9141.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9142.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9143.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9144.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9145. #else
  9146.   return vec_perm(
  9147.       __a, __b,
  9148.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9149.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9150.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9151. #endif
  9152. }
  9153.  
  9154. static __inline__ vector unsigned int __ATTRS_o_ai vec_sld(
  9155.     vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {
  9156.   unsigned char __d = __c & 0x0F;
  9157. #ifdef __LITTLE_ENDIAN__
  9158.   return vec_perm(
  9159.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9160.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9161.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9162.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9163. #else
  9164.   return vec_perm(
  9165.       __a, __b,
  9166.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9167.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9168.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9169. #endif
  9170. }
  9171.  
  9172. static __inline__ vector bool int __ATTRS_o_ai vec_sld(vector bool int __a,
  9173.                                                        vector bool int __b,
  9174.                                                        unsigned const int __c) {
  9175.   unsigned char __d = __c & 0x0F;
  9176. #ifdef __LITTLE_ENDIAN__
  9177.   return vec_perm(
  9178.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9179.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9180.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9181.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9182. #else
  9183.   return vec_perm(
  9184.       __a, __b,
  9185.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9186.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9187.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9188. #endif
  9189. }
  9190.  
  9191. static __inline__ vector float __ATTRS_o_ai vec_sld(vector float __a,
  9192.                                                     vector float __b,
  9193.                                                     unsigned const int __c) {
  9194.   unsigned char __d = __c & 0x0F;
  9195. #ifdef __LITTLE_ENDIAN__
  9196.   return vec_perm(
  9197.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9198.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9199.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9200.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9201. #else
  9202.   return vec_perm(
  9203.       __a, __b,
  9204.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9205.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9206.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9207. #endif
  9208. }
  9209.  
  9210. #ifdef __VSX__
  9211. static __inline__ vector bool long long __ATTRS_o_ai
  9212. vec_sld(vector bool long long __a, vector bool long long __b,
  9213.         unsigned const int __c) {
  9214.   unsigned char __d = __c & 0x0F;
  9215. #ifdef __LITTLE_ENDIAN__
  9216.   return vec_perm(
  9217.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9218.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9219.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9220.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9221. #else
  9222.   return vec_perm(
  9223.       __a, __b,
  9224.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9225.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9226.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9227. #endif
  9228. }
  9229.  
  9230. static __inline__ vector signed long long __ATTRS_o_ai
  9231. vec_sld(vector signed long long __a, vector signed long long __b,
  9232.         unsigned const int __c) {
  9233.   unsigned char __d = __c & 0x0F;
  9234. #ifdef __LITTLE_ENDIAN__
  9235.   return vec_perm(
  9236.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9237.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9238.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9239.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9240. #else
  9241.   return vec_perm(
  9242.       __a, __b,
  9243.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9244.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9245.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9246. #endif
  9247. }
  9248.  
  9249. static __inline__ vector unsigned long long __ATTRS_o_ai
  9250. vec_sld(vector unsigned long long __a, vector unsigned long long __b,
  9251.         unsigned const int __c) {
  9252.   unsigned char __d = __c & 0x0F;
  9253. #ifdef __LITTLE_ENDIAN__
  9254.   return vec_perm(
  9255.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9256.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9257.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9258.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9259. #else
  9260.   return vec_perm(
  9261.       __a, __b,
  9262.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9263.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9264.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9265. #endif
  9266. }
  9267.  
  9268. static __inline__ vector double __ATTRS_o_ai vec_sld(vector double __a,
  9269.                                                      vector double __b,
  9270.                                                      unsigned const int __c) {
  9271.   unsigned char __d = __c & 0x0F;
  9272. #ifdef __LITTLE_ENDIAN__
  9273.   return vec_perm(
  9274.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9275.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9276.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9277.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9278. #else
  9279.   return vec_perm(
  9280.       __a, __b,
  9281.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9282.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9283.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9284. #endif
  9285. }
  9286. #endif
  9287.  
  9288. /* vec_sldw */
  9289. static __inline__ vector signed char __ATTRS_o_ai vec_sldw(
  9290.     vector signed char __a, vector signed char __b, unsigned const int __c) {
  9291.   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
  9292. }
  9293.  
  9294. static __inline__ vector unsigned char __ATTRS_o_ai
  9295. vec_sldw(vector unsigned char __a, vector unsigned char __b,
  9296.          unsigned const int __c) {
  9297.   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
  9298. }
  9299.  
  9300. static __inline__ vector signed short __ATTRS_o_ai vec_sldw(
  9301.     vector signed short __a, vector signed short __b, unsigned const int __c) {
  9302.   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
  9303. }
  9304.  
  9305. static __inline__ vector unsigned short __ATTRS_o_ai
  9306. vec_sldw(vector unsigned short __a, vector unsigned short __b,
  9307.          unsigned const int __c) {
  9308.   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
  9309. }
  9310.  
  9311. static __inline__ vector signed int __ATTRS_o_ai
  9312. vec_sldw(vector signed int __a, vector signed int __b, unsigned const int __c) {
  9313.   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
  9314. }
  9315.  
  9316. static __inline__ vector unsigned int __ATTRS_o_ai vec_sldw(
  9317.     vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {
  9318.   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
  9319. }
  9320.  
  9321. static __inline__ vector float __ATTRS_o_ai vec_sldw(
  9322.     vector float __a, vector float __b, unsigned const int __c) {
  9323.   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
  9324. }
  9325.  
  9326. #ifdef __VSX__
  9327. static __inline__ vector signed long long __ATTRS_o_ai
  9328. vec_sldw(vector signed long long __a, vector signed long long __b,
  9329.          unsigned const int __c) {
  9330.   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
  9331. }
  9332.  
  9333. static __inline__ vector unsigned long long __ATTRS_o_ai
  9334. vec_sldw(vector unsigned long long __a, vector unsigned long long __b,
  9335.          unsigned const int __c) {
  9336.   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
  9337. }
  9338.  
  9339. static __inline__ vector double __ATTRS_o_ai vec_sldw(
  9340.     vector double __a, vector double __b, unsigned const int __c) {
  9341.   return vec_sld(__a, __b, ((__c << 2) & 0x0F));
  9342. }
  9343. #endif
  9344.  
  9345. #ifdef __POWER9_VECTOR__
  9346. /* vec_slv */
  9347. static __inline__ vector unsigned char __ATTRS_o_ai
  9348. vec_slv(vector unsigned char __a, vector unsigned char __b) {
  9349.   return __builtin_altivec_vslv(__a, __b);
  9350. }
  9351.  
  9352. /* vec_srv */
  9353. static __inline__ vector unsigned char __ATTRS_o_ai
  9354. vec_srv(vector unsigned char __a, vector unsigned char __b) {
  9355.   return __builtin_altivec_vsrv(__a, __b);
  9356. }
  9357. #endif
  9358.  
  9359. /* vec_vsldoi */
  9360.  
  9361. static __inline__ vector signed char __ATTRS_o_ai
  9362. vec_vsldoi(vector signed char __a, vector signed char __b, unsigned char __c) {
  9363.   unsigned char __d = __c & 0x0F;
  9364. #ifdef __LITTLE_ENDIAN__
  9365.   return vec_perm(
  9366.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9367.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9368.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9369.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9370. #else
  9371.   return vec_perm(
  9372.       __a, __b,
  9373.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9374.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9375.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9376. #endif
  9377. }
  9378.  
  9379. static __inline__ vector unsigned char __ATTRS_o_ai vec_vsldoi(
  9380.     vector unsigned char __a, vector unsigned char __b, unsigned char __c) {
  9381.   unsigned char __d = __c & 0x0F;
  9382. #ifdef __LITTLE_ENDIAN__
  9383.   return vec_perm(
  9384.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9385.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9386.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9387.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9388. #else
  9389.   return vec_perm(
  9390.       __a, __b,
  9391.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9392.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9393.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9394. #endif
  9395. }
  9396.  
  9397. static __inline__ vector short __ATTRS_o_ai vec_vsldoi(vector short __a,
  9398.                                                        vector short __b,
  9399.                                                        unsigned char __c) {
  9400.   unsigned char __d = __c & 0x0F;
  9401. #ifdef __LITTLE_ENDIAN__
  9402.   return vec_perm(
  9403.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9404.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9405.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9406.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9407. #else
  9408.   return vec_perm(
  9409.       __a, __b,
  9410.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9411.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9412.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9413. #endif
  9414. }
  9415.  
  9416. static __inline__ vector unsigned short __ATTRS_o_ai vec_vsldoi(
  9417.     vector unsigned short __a, vector unsigned short __b, unsigned char __c) {
  9418.   unsigned char __d = __c & 0x0F;
  9419. #ifdef __LITTLE_ENDIAN__
  9420.   return vec_perm(
  9421.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9422.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9423.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9424.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9425. #else
  9426.   return vec_perm(
  9427.       __a, __b,
  9428.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9429.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9430.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9431. #endif
  9432. }
  9433.  
  9434. static __inline__ vector pixel __ATTRS_o_ai vec_vsldoi(vector pixel __a,
  9435.                                                        vector pixel __b,
  9436.                                                        unsigned char __c) {
  9437.   unsigned char __d = __c & 0x0F;
  9438. #ifdef __LITTLE_ENDIAN__
  9439.   return vec_perm(
  9440.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9441.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9442.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9443.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9444. #else
  9445.   return vec_perm(
  9446.       __a, __b,
  9447.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9448.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9449.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9450. #endif
  9451. }
  9452.  
  9453. static __inline__ vector int __ATTRS_o_ai vec_vsldoi(vector int __a,
  9454.                                                      vector int __b,
  9455.                                                      unsigned char __c) {
  9456.   unsigned char __d = __c & 0x0F;
  9457. #ifdef __LITTLE_ENDIAN__
  9458.   return vec_perm(
  9459.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9460.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9461.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9462.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9463. #else
  9464.   return vec_perm(
  9465.       __a, __b,
  9466.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9467.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9468.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9469. #endif
  9470. }
  9471.  
  9472. static __inline__ vector unsigned int __ATTRS_o_ai vec_vsldoi(
  9473.     vector unsigned int __a, vector unsigned int __b, unsigned char __c) {
  9474.   unsigned char __d = __c & 0x0F;
  9475. #ifdef __LITTLE_ENDIAN__
  9476.   return vec_perm(
  9477.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9478.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9479.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9480.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9481. #else
  9482.   return vec_perm(
  9483.       __a, __b,
  9484.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9485.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9486.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9487. #endif
  9488. }
  9489.  
  9490. static __inline__ vector float __ATTRS_o_ai vec_vsldoi(vector float __a,
  9491.                                                        vector float __b,
  9492.                                                        unsigned char __c) {
  9493.   unsigned char __d = __c & 0x0F;
  9494. #ifdef __LITTLE_ENDIAN__
  9495.   return vec_perm(
  9496.       __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
  9497.                                        20 - __d, 21 - __d, 22 - __d, 23 - __d,
  9498.                                        24 - __d, 25 - __d, 26 - __d, 27 - __d,
  9499.                                        28 - __d, 29 - __d, 30 - __d, 31 - __d));
  9500. #else
  9501.   return vec_perm(
  9502.       __a, __b,
  9503.       (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
  9504.                              __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
  9505.                              __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
  9506. #endif
  9507. }
  9508.  
  9509. /* vec_sll */
  9510.  
  9511. static __inline__ vector signed char __ATTRS_o_ai
  9512. vec_sll(vector signed char __a, vector unsigned char __b) {
  9513.   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
  9514.                                                    (vector int)__b);
  9515. }
  9516.  
  9517. static __inline__ vector signed char __ATTRS_o_ai
  9518. vec_sll(vector signed char __a, vector unsigned short __b) {
  9519.   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
  9520.                                                    (vector int)__b);
  9521. }
  9522.  
  9523. static __inline__ vector signed char __ATTRS_o_ai
  9524. vec_sll(vector signed char __a, vector unsigned int __b) {
  9525.   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
  9526.                                                    (vector int)__b);
  9527. }
  9528.  
  9529. static __inline__ vector unsigned char __ATTRS_o_ai
  9530. vec_sll(vector unsigned char __a, vector unsigned char __b) {
  9531.   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
  9532.                                                      (vector int)__b);
  9533. }
  9534.  
  9535. static __inline__ vector unsigned char __ATTRS_o_ai
  9536. vec_sll(vector unsigned char __a, vector unsigned short __b) {
  9537.   return (vector unsigned 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 int __b) {
  9543.   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
  9544.                                                      (vector int)__b);
  9545. }
  9546.  
  9547. static __inline__ vector bool char __ATTRS_o_ai
  9548. vec_sll(vector bool char __a, vector unsigned char __b) {
  9549.   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
  9550.                                                  (vector int)__b);
  9551. }
  9552.  
  9553. static __inline__ vector bool char __ATTRS_o_ai
  9554. vec_sll(vector bool char __a, vector unsigned short __b) {
  9555.   return (vector bool 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 int __b) {
  9561.   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
  9562.                                                  (vector int)__b);
  9563. }
  9564.  
  9565. static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
  9566.                                                     vector unsigned char __b) {
  9567.   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
  9568. }
  9569.  
  9570. static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
  9571.                                                     vector unsigned short __b) {
  9572.   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
  9573. }
  9574.  
  9575. static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
  9576.                                                     vector unsigned int __b) {
  9577.   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
  9578. }
  9579.  
  9580. static __inline__ vector unsigned short __ATTRS_o_ai
  9581. vec_sll(vector unsigned short __a, vector unsigned char __b) {
  9582.   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
  9583.                                                       (vector int)__b);
  9584. }
  9585.  
  9586. static __inline__ vector unsigned short __ATTRS_o_ai
  9587. vec_sll(vector unsigned short __a, vector unsigned short __b) {
  9588.   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
  9589.                                                       (vector int)__b);
  9590. }
  9591.  
  9592. static __inline__ vector unsigned short __ATTRS_o_ai
  9593. vec_sll(vector unsigned short __a, vector unsigned int __b) {
  9594.   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
  9595.                                                       (vector int)__b);
  9596. }
  9597.  
  9598. static __inline__ vector bool short __ATTRS_o_ai
  9599. vec_sll(vector bool short __a, vector unsigned char __b) {
  9600.   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
  9601.                                                   (vector int)__b);
  9602. }
  9603.  
  9604. static __inline__ vector bool short __ATTRS_o_ai
  9605. vec_sll(vector bool short __a, vector unsigned short __b) {
  9606.   return (vector bool 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 int __b) {
  9612.   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
  9613.                                                   (vector int)__b);
  9614. }
  9615.  
  9616. static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
  9617.                                                     vector unsigned char __b) {
  9618.   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
  9619. }
  9620.  
  9621. static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
  9622.                                                     vector unsigned short __b) {
  9623.   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
  9624. }
  9625.  
  9626. static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
  9627.                                                     vector unsigned int __b) {
  9628.   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
  9629. }
  9630.  
  9631. static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
  9632.                                                   vector unsigned char __b) {
  9633.   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
  9634. }
  9635.  
  9636. static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
  9637.                                                   vector unsigned short __b) {
  9638.   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
  9639. }
  9640.  
  9641. static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
  9642.                                                   vector unsigned int __b) {
  9643.   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
  9644. }
  9645.  
  9646. static __inline__ vector unsigned int __ATTRS_o_ai
  9647. vec_sll(vector unsigned int __a, vector unsigned char __b) {
  9648.   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
  9649.                                                     (vector int)__b);
  9650. }
  9651.  
  9652. static __inline__ vector unsigned int __ATTRS_o_ai
  9653. vec_sll(vector unsigned int __a, vector unsigned short __b) {
  9654.   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
  9655.                                                     (vector int)__b);
  9656. }
  9657.  
  9658. static __inline__ vector unsigned int __ATTRS_o_ai
  9659. vec_sll(vector unsigned int __a, vector unsigned int __b) {
  9660.   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
  9661.                                                     (vector int)__b);
  9662. }
  9663.  
  9664. static __inline__ vector bool int __ATTRS_o_ai
  9665. vec_sll(vector bool int __a, vector unsigned char __b) {
  9666.   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
  9667.                                                 (vector int)__b);
  9668. }
  9669.  
  9670. static __inline__ vector bool int __ATTRS_o_ai
  9671. vec_sll(vector bool int __a, vector unsigned short __b) {
  9672.   return (vector bool 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 int __b) {
  9678.   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
  9679.                                                 (vector int)__b);
  9680. }
  9681.  
  9682. #ifdef __VSX__
  9683. static __inline__ vector signed long long __ATTRS_o_ai
  9684. vec_sll(vector signed long long __a, vector unsigned char __b) {
  9685.   return (vector signed long long)__builtin_altivec_vsl((vector int)__a,
  9686.                                                         (vector int)__b);
  9687. }
  9688.  
  9689. static __inline__ vector unsigned long long __ATTRS_o_ai
  9690. vec_sll(vector unsigned long long __a, vector unsigned char __b) {
  9691.   return (vector unsigned long long)__builtin_altivec_vsl((vector int)__a,
  9692.                                                           (vector int)__b);
  9693. }
  9694. #endif
  9695.  
  9696. /* vec_vsl */
  9697.  
  9698. static __inline__ vector signed char __ATTRS_o_ai
  9699. vec_vsl(vector signed char __a, vector unsigned char __b) {
  9700.   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
  9701.                                                    (vector int)__b);
  9702. }
  9703.  
  9704. static __inline__ vector signed char __ATTRS_o_ai
  9705. vec_vsl(vector signed char __a, vector unsigned short __b) {
  9706.   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
  9707.                                                    (vector int)__b);
  9708. }
  9709.  
  9710. static __inline__ vector signed char __ATTRS_o_ai
  9711. vec_vsl(vector signed char __a, vector unsigned int __b) {
  9712.   return (vector signed char)__builtin_altivec_vsl((vector int)__a,
  9713.                                                    (vector int)__b);
  9714. }
  9715.  
  9716. static __inline__ vector unsigned char __ATTRS_o_ai
  9717. vec_vsl(vector unsigned char __a, vector unsigned char __b) {
  9718.   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
  9719.                                                      (vector int)__b);
  9720. }
  9721.  
  9722. static __inline__ vector unsigned char __ATTRS_o_ai
  9723. vec_vsl(vector unsigned char __a, vector unsigned short __b) {
  9724.   return (vector unsigned 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 int __b) {
  9730.   return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
  9731.                                                      (vector int)__b);
  9732. }
  9733.  
  9734. static __inline__ vector bool char __ATTRS_o_ai
  9735. vec_vsl(vector bool char __a, vector unsigned char __b) {
  9736.   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
  9737.                                                  (vector int)__b);
  9738. }
  9739.  
  9740. static __inline__ vector bool char __ATTRS_o_ai
  9741. vec_vsl(vector bool char __a, vector unsigned short __b) {
  9742.   return (vector bool 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 int __b) {
  9748.   return (vector bool char)__builtin_altivec_vsl((vector int)__a,
  9749.                                                  (vector int)__b);
  9750. }
  9751.  
  9752. static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
  9753.                                                     vector unsigned char __b) {
  9754.   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
  9755. }
  9756.  
  9757. static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
  9758.                                                     vector unsigned short __b) {
  9759.   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
  9760. }
  9761.  
  9762. static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
  9763.                                                     vector unsigned int __b) {
  9764.   return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
  9765. }
  9766.  
  9767. static __inline__ vector unsigned short __ATTRS_o_ai
  9768. vec_vsl(vector unsigned short __a, vector unsigned char __b) {
  9769.   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
  9770.                                                       (vector int)__b);
  9771. }
  9772.  
  9773. static __inline__ vector unsigned short __ATTRS_o_ai
  9774. vec_vsl(vector unsigned short __a, vector unsigned short __b) {
  9775.   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
  9776.                                                       (vector int)__b);
  9777. }
  9778.  
  9779. static __inline__ vector unsigned short __ATTRS_o_ai
  9780. vec_vsl(vector unsigned short __a, vector unsigned int __b) {
  9781.   return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
  9782.                                                       (vector int)__b);
  9783. }
  9784.  
  9785. static __inline__ vector bool short __ATTRS_o_ai
  9786. vec_vsl(vector bool short __a, vector unsigned char __b) {
  9787.   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
  9788.                                                   (vector int)__b);
  9789. }
  9790.  
  9791. static __inline__ vector bool short __ATTRS_o_ai
  9792. vec_vsl(vector bool short __a, vector unsigned short __b) {
  9793.   return (vector bool 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 int __b) {
  9799.   return (vector bool short)__builtin_altivec_vsl((vector int)__a,
  9800.                                                   (vector int)__b);
  9801. }
  9802.  
  9803. static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
  9804.                                                     vector unsigned char __b) {
  9805.   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
  9806. }
  9807.  
  9808. static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
  9809.                                                     vector unsigned short __b) {
  9810.   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
  9811. }
  9812.  
  9813. static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
  9814.                                                     vector unsigned int __b) {
  9815.   return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
  9816. }
  9817.  
  9818. static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
  9819.                                                   vector unsigned char __b) {
  9820.   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
  9821. }
  9822.  
  9823. static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
  9824.                                                   vector unsigned short __b) {
  9825.   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
  9826. }
  9827.  
  9828. static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
  9829.                                                   vector unsigned int __b) {
  9830.   return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
  9831. }
  9832.  
  9833. static __inline__ vector unsigned int __ATTRS_o_ai
  9834. vec_vsl(vector unsigned int __a, vector unsigned char __b) {
  9835.   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
  9836.                                                     (vector int)__b);
  9837. }
  9838.  
  9839. static __inline__ vector unsigned int __ATTRS_o_ai
  9840. vec_vsl(vector unsigned int __a, vector unsigned short __b) {
  9841.   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
  9842.                                                     (vector int)__b);
  9843. }
  9844.  
  9845. static __inline__ vector unsigned int __ATTRS_o_ai
  9846. vec_vsl(vector unsigned int __a, vector unsigned int __b) {
  9847.   return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
  9848.                                                     (vector int)__b);
  9849. }
  9850.  
  9851. static __inline__ vector bool int __ATTRS_o_ai
  9852. vec_vsl(vector bool int __a, vector unsigned char __b) {
  9853.   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
  9854.                                                 (vector int)__b);
  9855. }
  9856.  
  9857. static __inline__ vector bool int __ATTRS_o_ai
  9858. vec_vsl(vector bool int __a, vector unsigned short __b) {
  9859.   return (vector bool 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 int __b) {
  9865.   return (vector bool int)__builtin_altivec_vsl((vector int)__a,
  9866.                                                 (vector int)__b);
  9867. }
  9868.  
  9869. /* vec_slo */
  9870.  
  9871. static __inline__ vector signed char __ATTRS_o_ai
  9872. vec_slo(vector signed char __a, vector signed char __b) {
  9873.   return (vector signed char)__builtin_altivec_vslo((vector int)__a,
  9874.                                                     (vector int)__b);
  9875. }
  9876.  
  9877. static __inline__ vector signed char __ATTRS_o_ai
  9878. vec_slo(vector signed char __a, vector unsigned char __b) {
  9879.   return (vector signed char)__builtin_altivec_vslo((vector int)__a,
  9880.                                                     (vector int)__b);
  9881. }
  9882.  
  9883. static __inline__ vector unsigned char __ATTRS_o_ai
  9884. vec_slo(vector unsigned char __a, vector signed char __b) {
  9885.   return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
  9886.                                                       (vector int)__b);
  9887. }
  9888.  
  9889. static __inline__ vector unsigned char __ATTRS_o_ai
  9890. vec_slo(vector unsigned char __a, vector unsigned char __b) {
  9891.   return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
  9892.                                                       (vector int)__b);
  9893. }
  9894.  
  9895. static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
  9896.                                                     vector signed char __b) {
  9897.   return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  9898. }
  9899.  
  9900. static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
  9901.                                                     vector unsigned char __b) {
  9902.   return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  9903. }
  9904.  
  9905. static __inline__ vector unsigned short __ATTRS_o_ai
  9906. vec_slo(vector unsigned short __a, vector signed char __b) {
  9907.   return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
  9908.                                                        (vector int)__b);
  9909. }
  9910.  
  9911. static __inline__ vector unsigned short __ATTRS_o_ai
  9912. vec_slo(vector unsigned short __a, vector unsigned char __b) {
  9913.   return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
  9914.                                                        (vector int)__b);
  9915. }
  9916.  
  9917. static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
  9918.                                                     vector signed char __b) {
  9919.   return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  9920. }
  9921.  
  9922. static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
  9923.                                                     vector unsigned char __b) {
  9924.   return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  9925. }
  9926.  
  9927. static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
  9928.                                                   vector signed char __b) {
  9929.   return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
  9930. }
  9931.  
  9932. static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
  9933.                                                   vector unsigned char __b) {
  9934.   return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
  9935. }
  9936.  
  9937. static __inline__ vector unsigned int __ATTRS_o_ai
  9938. vec_slo(vector unsigned int __a, vector signed char __b) {
  9939.   return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
  9940.                                                      (vector int)__b);
  9941. }
  9942.  
  9943. static __inline__ vector unsigned int __ATTRS_o_ai
  9944. vec_slo(vector unsigned int __a, vector unsigned char __b) {
  9945.   return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
  9946.                                                      (vector int)__b);
  9947. }
  9948.  
  9949. static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
  9950.                                                     vector signed char __b) {
  9951.   return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  9952. }
  9953.  
  9954. static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
  9955.                                                     vector unsigned char __b) {
  9956.   return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  9957. }
  9958.  
  9959. #ifdef __VSX__
  9960. static __inline__ vector signed long long __ATTRS_o_ai
  9961. vec_slo(vector signed long long __a, vector signed char __b) {
  9962.   return (vector signed long long)__builtin_altivec_vslo((vector int)__a,
  9963.                                                          (vector int)__b);
  9964. }
  9965.  
  9966. static __inline__ vector signed long long __ATTRS_o_ai
  9967. vec_slo(vector signed long long __a, vector unsigned char __b) {
  9968.   return (vector signed long long)__builtin_altivec_vslo((vector int)__a,
  9969.                                                          (vector int)__b);
  9970. }
  9971.  
  9972. static __inline__ vector unsigned long long __ATTRS_o_ai
  9973. vec_slo(vector unsigned long long __a, vector signed char __b) {
  9974.   return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,
  9975.                                                            (vector int)__b);
  9976. }
  9977.  
  9978. static __inline__ vector unsigned long long __ATTRS_o_ai
  9979. vec_slo(vector unsigned long long __a, vector unsigned char __b) {
  9980.   return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,
  9981.                                                            (vector int)__b);
  9982. }
  9983. #endif
  9984.  
  9985. /* vec_vslo */
  9986.  
  9987. static __inline__ vector signed char __ATTRS_o_ai
  9988. vec_vslo(vector signed char __a, vector signed char __b) {
  9989.   return (vector signed char)__builtin_altivec_vslo((vector int)__a,
  9990.                                                     (vector int)__b);
  9991. }
  9992.  
  9993. static __inline__ vector signed char __ATTRS_o_ai
  9994. vec_vslo(vector signed char __a, vector unsigned char __b) {
  9995.   return (vector signed char)__builtin_altivec_vslo((vector int)__a,
  9996.                                                     (vector int)__b);
  9997. }
  9998.  
  9999. static __inline__ vector unsigned char __ATTRS_o_ai
  10000. vec_vslo(vector unsigned char __a, vector signed char __b) {
  10001.   return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
  10002.                                                       (vector int)__b);
  10003. }
  10004.  
  10005. static __inline__ vector unsigned char __ATTRS_o_ai
  10006. vec_vslo(vector unsigned char __a, vector unsigned char __b) {
  10007.   return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
  10008.                                                       (vector int)__b);
  10009. }
  10010.  
  10011. static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
  10012.                                                      vector signed char __b) {
  10013.   return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  10014. }
  10015.  
  10016. static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
  10017.                                                      vector unsigned char __b) {
  10018.   return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  10019. }
  10020.  
  10021. static __inline__ vector unsigned short __ATTRS_o_ai
  10022. vec_vslo(vector unsigned short __a, vector signed char __b) {
  10023.   return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
  10024.                                                        (vector int)__b);
  10025. }
  10026.  
  10027. static __inline__ vector unsigned short __ATTRS_o_ai
  10028. vec_vslo(vector unsigned short __a, vector unsigned char __b) {
  10029.   return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
  10030.                                                        (vector int)__b);
  10031. }
  10032.  
  10033. static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
  10034.                                                      vector signed char __b) {
  10035.   return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  10036. }
  10037.  
  10038. static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
  10039.                                                      vector unsigned char __b) {
  10040.   return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  10041. }
  10042.  
  10043. static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
  10044.                                                    vector signed char __b) {
  10045.   return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
  10046. }
  10047.  
  10048. static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
  10049.                                                    vector unsigned char __b) {
  10050.   return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
  10051. }
  10052.  
  10053. static __inline__ vector unsigned int __ATTRS_o_ai
  10054. vec_vslo(vector unsigned int __a, vector signed char __b) {
  10055.   return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
  10056.                                                      (vector int)__b);
  10057. }
  10058.  
  10059. static __inline__ vector unsigned int __ATTRS_o_ai
  10060. vec_vslo(vector unsigned int __a, vector unsigned char __b) {
  10061.   return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
  10062.                                                      (vector int)__b);
  10063. }
  10064.  
  10065. static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
  10066.                                                      vector signed char __b) {
  10067.   return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  10068. }
  10069.  
  10070. static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
  10071.                                                      vector unsigned char __b) {
  10072.   return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
  10073. }
  10074.  
  10075. /* vec_splat */
  10076.  
  10077. static __inline__ vector signed char __ATTRS_o_ai
  10078. vec_splat(vector signed char __a, unsigned const int __b) {
  10079.   return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
  10080. }
  10081.  
  10082. static __inline__ vector unsigned char __ATTRS_o_ai
  10083. vec_splat(vector unsigned char __a, unsigned const int __b) {
  10084.   return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
  10085. }
  10086.  
  10087. static __inline__ vector bool char __ATTRS_o_ai
  10088. vec_splat(vector bool char __a, unsigned const int __b) {
  10089.   return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
  10090. }
  10091.  
  10092. static __inline__ vector signed short __ATTRS_o_ai
  10093. vec_splat(vector signed short __a, unsigned const int __b) {
  10094.   unsigned char b0 = (__b & 0x07) * 2;
  10095.   unsigned char b1 = b0 + 1;
  10096.   return vec_perm(__a, __a,
  10097.                   (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
  10098.                                          b0, b1, b0, b1, b0, b1));
  10099. }
  10100.  
  10101. static __inline__ vector unsigned short __ATTRS_o_ai
  10102. vec_splat(vector unsigned short __a, unsigned const int __b) {
  10103.   unsigned char b0 = (__b & 0x07) * 2;
  10104.   unsigned char b1 = b0 + 1;
  10105.   return vec_perm(__a, __a,
  10106.                   (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
  10107.                                          b0, b1, b0, b1, b0, b1));
  10108. }
  10109.  
  10110. static __inline__ vector bool short __ATTRS_o_ai
  10111. vec_splat(vector bool short __a, unsigned const int __b) {
  10112.   unsigned char b0 = (__b & 0x07) * 2;
  10113.   unsigned char b1 = b0 + 1;
  10114.   return vec_perm(__a, __a,
  10115.                   (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
  10116.                                          b0, b1, b0, b1, b0, b1));
  10117. }
  10118.  
  10119. static __inline__ vector pixel __ATTRS_o_ai vec_splat(vector pixel __a,
  10120.                                                       unsigned const int __b) {
  10121.   unsigned char b0 = (__b & 0x07) * 2;
  10122.   unsigned char b1 = b0 + 1;
  10123.   return vec_perm(__a, __a,
  10124.                   (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
  10125.                                          b0, b1, b0, b1, b0, b1));
  10126. }
  10127.  
  10128. static __inline__ vector signed int __ATTRS_o_ai
  10129. vec_splat(vector signed int __a, unsigned const int __b) {
  10130.   unsigned char b0 = (__b & 0x03) * 4;
  10131.   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
  10132.   return vec_perm(__a, __a,
  10133.                   (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
  10134.                                          b2, b3, b0, b1, b2, b3));
  10135. }
  10136.  
  10137. static __inline__ vector unsigned int __ATTRS_o_ai
  10138. vec_splat(vector unsigned int __a, unsigned const int __b) {
  10139.   unsigned char b0 = (__b & 0x03) * 4;
  10140.   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
  10141.   return vec_perm(__a, __a,
  10142.                   (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
  10143.                                          b2, b3, b0, b1, b2, b3));
  10144. }
  10145.  
  10146. static __inline__ vector bool int __ATTRS_o_ai
  10147. vec_splat(vector bool int __a, unsigned const int __b) {
  10148.   unsigned char b0 = (__b & 0x03) * 4;
  10149.   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
  10150.   return vec_perm(__a, __a,
  10151.                   (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
  10152.                                          b2, b3, b0, b1, b2, b3));
  10153. }
  10154.  
  10155. static __inline__ vector float __ATTRS_o_ai vec_splat(vector float __a,
  10156.                                                       unsigned const int __b) {
  10157.   unsigned char b0 = (__b & 0x03) * 4;
  10158.   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
  10159.   return vec_perm(__a, __a,
  10160.                   (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
  10161.                                          b2, b3, b0, b1, b2, b3));
  10162. }
  10163.  
  10164. #ifdef __VSX__
  10165. static __inline__ vector double __ATTRS_o_ai vec_splat(vector double __a,
  10166.                                                        unsigned const int __b) {
  10167.   unsigned char b0 = (__b & 0x01) * 8;
  10168.   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
  10169.                 b6 = b0 + 6, b7 = b0 + 7;
  10170.   return vec_perm(__a, __a,
  10171.                   (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
  10172.                                          b2, b3, b4, b5, b6, b7));
  10173. }
  10174. static __inline__ vector bool long long __ATTRS_o_ai
  10175. vec_splat(vector bool long long __a, unsigned const int __b) {
  10176.   unsigned char b0 = (__b & 0x01) * 8;
  10177.   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
  10178.                 b6 = b0 + 6, b7 = b0 + 7;
  10179.   return vec_perm(__a, __a,
  10180.                   (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
  10181.                                          b2, b3, b4, b5, b6, b7));
  10182. }
  10183. static __inline__ vector signed long long __ATTRS_o_ai
  10184. vec_splat(vector signed long long __a, unsigned const int __b) {
  10185.   unsigned char b0 = (__b & 0x01) * 8;
  10186.   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
  10187.                 b6 = b0 + 6, b7 = b0 + 7;
  10188.   return vec_perm(__a, __a,
  10189.                   (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
  10190.                                          b2, b3, b4, b5, b6, b7));
  10191. }
  10192. static __inline__ vector unsigned long long __ATTRS_o_ai
  10193. vec_splat(vector unsigned long long __a, unsigned const int __b) {
  10194.   unsigned char b0 = (__b & 0x01) * 8;
  10195.   unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
  10196.                 b6 = b0 + 6, b7 = b0 + 7;
  10197.   return vec_perm(__a, __a,
  10198.                   (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
  10199.                                          b2, b3, b4, b5, b6, b7));
  10200. }
  10201. #endif
  10202.  
  10203. /* vec_vspltb */
  10204.  
  10205. #define __builtin_altivec_vspltb vec_vspltb
  10206.  
  10207. static __inline__ vector signed char __ATTRS_o_ai
  10208. vec_vspltb(vector signed char __a, unsigned char __b) {
  10209.   return vec_perm(__a, __a, (vector unsigned char)(__b));
  10210. }
  10211.  
  10212. static __inline__ vector unsigned char __ATTRS_o_ai
  10213. vec_vspltb(vector unsigned char __a, unsigned char __b) {
  10214.   return vec_perm(__a, __a, (vector unsigned char)(__b));
  10215. }
  10216.  
  10217. static __inline__ vector bool char __ATTRS_o_ai vec_vspltb(vector bool char __a,
  10218.                                                            unsigned char __b) {
  10219.   return vec_perm(__a, __a, (vector unsigned char)(__b));
  10220. }
  10221.  
  10222. /* vec_vsplth */
  10223.  
  10224. #define __builtin_altivec_vsplth vec_vsplth
  10225.  
  10226. static __inline__ vector short __ATTRS_o_ai vec_vsplth(vector short __a,
  10227.                                                        unsigned char __b) {
  10228.   __b *= 2;
  10229.   unsigned char b1 = __b + 1;
  10230.   return vec_perm(__a, __a,
  10231.                   (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
  10232.                                          __b, b1, __b, b1, __b, b1, __b, b1));
  10233. }
  10234.  
  10235. static __inline__ vector unsigned short __ATTRS_o_ai
  10236. vec_vsplth(vector unsigned short __a, unsigned char __b) {
  10237.   __b *= 2;
  10238.   unsigned char b1 = __b + 1;
  10239.   return vec_perm(__a, __a,
  10240.                   (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
  10241.                                          __b, b1, __b, b1, __b, b1, __b, b1));
  10242. }
  10243.  
  10244. static __inline__ vector bool short __ATTRS_o_ai
  10245. vec_vsplth(vector bool short __a, unsigned char __b) {
  10246.   __b *= 2;
  10247.   unsigned char b1 = __b + 1;
  10248.   return vec_perm(__a, __a,
  10249.                   (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
  10250.                                          __b, b1, __b, b1, __b, b1, __b, b1));
  10251. }
  10252.  
  10253. static __inline__ vector pixel __ATTRS_o_ai vec_vsplth(vector pixel __a,
  10254.                                                        unsigned char __b) {
  10255.   __b *= 2;
  10256.   unsigned char b1 = __b + 1;
  10257.   return vec_perm(__a, __a,
  10258.                   (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
  10259.                                          __b, b1, __b, b1, __b, b1, __b, b1));
  10260. }
  10261.  
  10262. /* vec_vspltw */
  10263.  
  10264. #define __builtin_altivec_vspltw vec_vspltw
  10265.  
  10266. static __inline__ vector int __ATTRS_o_ai vec_vspltw(vector int __a,
  10267.                                                      unsigned char __b) {
  10268.   __b *= 4;
  10269.   unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
  10270.   return vec_perm(__a, __a,
  10271.                   (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
  10272.                                          b1, b2, b3, __b, b1, b2, b3));
  10273. }
  10274.  
  10275. static __inline__ vector unsigned int __ATTRS_o_ai
  10276. vec_vspltw(vector unsigned int __a, unsigned char __b) {
  10277.   __b *= 4;
  10278.   unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
  10279.   return vec_perm(__a, __a,
  10280.                   (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
  10281.                                          b1, b2, b3, __b, b1, b2, b3));
  10282. }
  10283.  
  10284. static __inline__ vector bool int __ATTRS_o_ai vec_vspltw(vector bool int __a,
  10285.                                                           unsigned char __b) {
  10286.   __b *= 4;
  10287.   unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
  10288.   return vec_perm(__a, __a,
  10289.                   (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
  10290.                                          b1, b2, b3, __b, b1, b2, b3));
  10291. }
  10292.  
  10293. static __inline__ vector float __ATTRS_o_ai vec_vspltw(vector float __a,
  10294.                                                        unsigned char __b) {
  10295.   __b *= 4;
  10296.   unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
  10297.   return vec_perm(__a, __a,
  10298.                   (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
  10299.                                          b1, b2, b3, __b, b1, b2, b3));
  10300. }
  10301.  
  10302. /* vec_splat_s8 */
  10303.  
  10304. #define __builtin_altivec_vspltisb vec_splat_s8
  10305.  
  10306. // FIXME: parameter should be treated as 5-bit signed literal
  10307. static __inline__ vector signed char __ATTRS_o_ai
  10308. vec_splat_s8(signed char __a) {
  10309.   return (vector signed char)(__a);
  10310. }
  10311.  
  10312. /* vec_vspltisb */
  10313.  
  10314. // FIXME: parameter should be treated as 5-bit signed literal
  10315. static __inline__ vector signed char __ATTRS_o_ai
  10316. vec_vspltisb(signed char __a) {
  10317.   return (vector signed char)(__a);
  10318. }
  10319.  
  10320. /* vec_splat_s16 */
  10321.  
  10322. #define __builtin_altivec_vspltish vec_splat_s16
  10323.  
  10324. // FIXME: parameter should be treated as 5-bit signed literal
  10325. static __inline__ vector short __ATTRS_o_ai vec_splat_s16(signed char __a) {
  10326.   return (vector short)(__a);
  10327. }
  10328.  
  10329. /* vec_vspltish */
  10330.  
  10331. // FIXME: parameter should be treated as 5-bit signed literal
  10332. static __inline__ vector short __ATTRS_o_ai vec_vspltish(signed char __a) {
  10333.   return (vector short)(__a);
  10334. }
  10335.  
  10336. /* vec_splat_s32 */
  10337.  
  10338. #define __builtin_altivec_vspltisw vec_splat_s32
  10339.  
  10340. // FIXME: parameter should be treated as 5-bit signed literal
  10341. static __inline__ vector int __ATTRS_o_ai vec_splat_s32(signed char __a) {
  10342.   return (vector int)(__a);
  10343. }
  10344.  
  10345. /* vec_vspltisw */
  10346.  
  10347. // FIXME: parameter should be treated as 5-bit signed literal
  10348. static __inline__ vector int __ATTRS_o_ai vec_vspltisw(signed char __a) {
  10349.   return (vector int)(__a);
  10350. }
  10351.  
  10352. /* vec_splat_u8 */
  10353.  
  10354. // FIXME: parameter should be treated as 5-bit signed literal
  10355. static __inline__ vector unsigned char __ATTRS_o_ai
  10356. vec_splat_u8(unsigned char __a) {
  10357.   return (vector unsigned char)(__a);
  10358. }
  10359.  
  10360. /* vec_splat_u16 */
  10361.  
  10362. // FIXME: parameter should be treated as 5-bit signed literal
  10363. static __inline__ vector unsigned short __ATTRS_o_ai
  10364. vec_splat_u16(signed char __a) {
  10365.   return (vector unsigned short)(__a);
  10366. }
  10367.  
  10368. /* vec_splat_u32 */
  10369.  
  10370. // FIXME: parameter should be treated as 5-bit signed literal
  10371. static __inline__ vector unsigned int __ATTRS_o_ai
  10372. vec_splat_u32(signed char __a) {
  10373.   return (vector unsigned int)(__a);
  10374. }
  10375.  
  10376. /* vec_sr */
  10377.  
  10378. // vec_sr does modulo arithmetic on __b first, so __b is allowed to be more
  10379. // than the length of __a.
  10380. static __inline__ vector unsigned char __ATTRS_o_ai
  10381. vec_sr(vector unsigned char __a, vector unsigned char __b) {
  10382.   return __a >>
  10383.          (__b % (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));
  10384. }
  10385.  
  10386. static __inline__ vector signed char __ATTRS_o_ai
  10387. vec_sr(vector signed char __a, vector unsigned char __b) {
  10388.   return (vector signed char)vec_sr((vector unsigned char)__a, __b);
  10389. }
  10390.  
  10391. static __inline__ vector unsigned short __ATTRS_o_ai
  10392. vec_sr(vector unsigned short __a, vector unsigned short __b) {
  10393.   return __a >>
  10394.          (__b % (vector unsigned short)(sizeof(unsigned short) * __CHAR_BIT__));
  10395. }
  10396.  
  10397. static __inline__ vector short __ATTRS_o_ai vec_sr(vector short __a,
  10398.                                                    vector unsigned short __b) {
  10399.   return (vector short)vec_sr((vector unsigned short)__a, __b);
  10400. }
  10401.  
  10402. static __inline__ vector unsigned int __ATTRS_o_ai
  10403. vec_sr(vector unsigned int __a, vector unsigned int __b) {
  10404.   return __a >>
  10405.          (__b % (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));
  10406. }
  10407.  
  10408. static __inline__ vector int __ATTRS_o_ai vec_sr(vector int __a,
  10409.                                                  vector unsigned int __b) {
  10410.   return (vector int)vec_sr((vector unsigned int)__a, __b);
  10411. }
  10412.  
  10413. #ifdef __POWER8_VECTOR__
  10414. static __inline__ vector unsigned long long __ATTRS_o_ai
  10415. vec_sr(vector unsigned long long __a, vector unsigned long long __b) {
  10416.   return __a >> (__b % (vector unsigned long long)(sizeof(unsigned long long) *
  10417.                                                    __CHAR_BIT__));
  10418. }
  10419.  
  10420. static __inline__ vector long long __ATTRS_o_ai
  10421. vec_sr(vector long long __a, vector unsigned long long __b) {
  10422.   return (vector long long)vec_sr((vector unsigned long long)__a, __b);
  10423. }
  10424. #elif defined(__VSX__)
  10425. static __inline__ vector unsigned long long __ATTRS_o_ai
  10426. vec_sr(vector unsigned long long __a, vector unsigned long long __b) {
  10427.   __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
  10428.  
  10429.   // Big endian element zero (the left doubleword) can be right shifted as-is.
  10430.   // However the shift amount must be in the right doubleword.
  10431.   // The other element needs to be swapped into the left doubleword and
  10432.   // shifted. Then the left doublewords of the two result vectors are merged.
  10433.   vector unsigned long long __swapshift =
  10434.       __builtin_shufflevector(__b, __b, 1, 0);
  10435.   vector unsigned long long __leftelt =
  10436.       (vector unsigned long long)__builtin_altivec_vsro(
  10437.           (vector signed int)__a, (vector signed int)__swapshift);
  10438. #ifdef __LITTLE_ENDIAN__
  10439.   __leftelt = (vector unsigned long long)__builtin_altivec_vsr(
  10440.       (vector signed int)__leftelt,
  10441.       (vector signed int)vec_vspltb((vector unsigned char)__swapshift, 0));
  10442. #else
  10443.   __leftelt = (vector unsigned long long)__builtin_altivec_vsr(
  10444.       (vector signed int)__leftelt,
  10445.       (vector signed int)vec_vspltb((vector unsigned char)__swapshift, 15));
  10446. #endif
  10447.   __a = __builtin_shufflevector(__a, __a, 1, 0);
  10448.   vector unsigned long long __rightelt =
  10449.       (vector unsigned long long)__builtin_altivec_vsro((vector signed int)__a,
  10450.                                                         (vector signed int)__b);
  10451. #ifdef __LITTLE_ENDIAN__
  10452.   __rightelt = (vector unsigned long long)__builtin_altivec_vsr(
  10453.       (vector signed int)__rightelt,
  10454.       (vector signed int)vec_vspltb((vector unsigned char)__b, 0));
  10455.   return __builtin_shufflevector(__rightelt, __leftelt, 1, 3);
  10456. #else
  10457.   __rightelt = (vector unsigned long long)__builtin_altivec_vsr(
  10458.       (vector signed int)__rightelt,
  10459.       (vector signed int)vec_vspltb((vector unsigned char)__b, 15));
  10460.   return __builtin_shufflevector(__leftelt, __rightelt, 0, 2);
  10461. #endif
  10462. }
  10463.  
  10464. static __inline__ vector long long __ATTRS_o_ai
  10465. vec_sr(vector long long __a, vector unsigned long long __b) {
  10466.   return (vector long long)vec_sr((vector unsigned long long)__a, __b);
  10467. }
  10468. #endif /* __VSX__ */
  10469.  
  10470. /* vec_vsrb */
  10471.  
  10472. #define __builtin_altivec_vsrb vec_vsrb
  10473.  
  10474. static __inline__ vector signed char __ATTRS_o_ai
  10475. vec_vsrb(vector signed char __a, vector unsigned char __b) {
  10476.   return vec_sr(__a, __b);
  10477. }
  10478.  
  10479. static __inline__ vector unsigned char __ATTRS_o_ai
  10480. vec_vsrb(vector unsigned char __a, vector unsigned char __b) {
  10481.   return vec_sr(__a, __b);
  10482. }
  10483.  
  10484. /* vec_vsrh */
  10485.  
  10486. #define __builtin_altivec_vsrh vec_vsrh
  10487.  
  10488. static __inline__ vector short __ATTRS_o_ai
  10489. vec_vsrh(vector short __a, vector unsigned short __b) {
  10490.   return vec_sr(__a, __b);
  10491. }
  10492.  
  10493. static __inline__ vector unsigned short __ATTRS_o_ai
  10494. vec_vsrh(vector unsigned short __a, vector unsigned short __b) {
  10495.   return vec_sr(__a, __b);
  10496. }
  10497.  
  10498. /* vec_vsrw */
  10499.  
  10500. #define __builtin_altivec_vsrw vec_vsrw
  10501.  
  10502. static __inline__ vector int __ATTRS_o_ai vec_vsrw(vector int __a,
  10503.                                                    vector unsigned int __b) {
  10504.   return vec_sr(__a, __b);
  10505. }
  10506.  
  10507. static __inline__ vector unsigned int __ATTRS_o_ai
  10508. vec_vsrw(vector unsigned int __a, vector unsigned int __b) {
  10509.   return vec_sr(__a, __b);
  10510. }
  10511.  
  10512. /* vec_sra */
  10513.  
  10514. static __inline__ vector signed char __ATTRS_o_ai
  10515. vec_sra(vector signed char __a, vector unsigned char __b) {
  10516.   return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
  10517. }
  10518.  
  10519. static __inline__ vector unsigned char __ATTRS_o_ai
  10520. vec_sra(vector unsigned char __a, vector unsigned char __b) {
  10521.   return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
  10522. }
  10523.  
  10524. static __inline__ vector short __ATTRS_o_ai vec_sra(vector short __a,
  10525.                                                     vector unsigned short __b) {
  10526.   return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
  10527. }
  10528.  
  10529. static __inline__ vector unsigned short __ATTRS_o_ai
  10530. vec_sra(vector unsigned short __a, vector unsigned short __b) {
  10531.   return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
  10532. }
  10533.  
  10534. static __inline__ vector int __ATTRS_o_ai vec_sra(vector int __a,
  10535.                                                   vector unsigned int __b) {
  10536.   return __builtin_altivec_vsraw(__a, __b);
  10537. }
  10538.  
  10539. static __inline__ vector unsigned int __ATTRS_o_ai
  10540. vec_sra(vector unsigned int __a, vector unsigned int __b) {
  10541.   return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
  10542. }
  10543.  
  10544. #ifdef __POWER8_VECTOR__
  10545. static __inline__ vector signed long long __ATTRS_o_ai
  10546. vec_sra(vector signed long long __a, vector unsigned long long __b) {
  10547.   return __a >> __b;
  10548. }
  10549.  
  10550. static __inline__ vector unsigned long long __ATTRS_o_ai
  10551. vec_sra(vector unsigned long long __a, vector unsigned long long __b) {
  10552.   return (vector unsigned long long)((vector signed long long)__a >> __b);
  10553. }
  10554. #elif defined(__VSX__)
  10555. static __inline__ vector signed long long __ATTRS_o_ai
  10556. vec_sra(vector signed long long __a, vector unsigned long long __b) {
  10557.   __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
  10558.   return __a >> __b;
  10559. }
  10560.  
  10561. static __inline__ vector unsigned long long __ATTRS_o_ai
  10562. vec_sra(vector unsigned long long __a, vector unsigned long long __b) {
  10563.   __b %= (vector unsigned long long)(sizeof(unsigned long long) * __CHAR_BIT__);
  10564.   return (vector unsigned long long)((vector signed long long)__a >> __b);
  10565. }
  10566. #endif /* __VSX__ */
  10567.  
  10568. /* vec_vsrab */
  10569.  
  10570. static __inline__ vector signed char __ATTRS_o_ai
  10571. vec_vsrab(vector signed char __a, vector unsigned char __b) {
  10572.   return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
  10573. }
  10574.  
  10575. static __inline__ vector unsigned char __ATTRS_o_ai
  10576. vec_vsrab(vector unsigned char __a, vector unsigned char __b) {
  10577.   return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
  10578. }
  10579.  
  10580. /* vec_vsrah */
  10581.  
  10582. static __inline__ vector short __ATTRS_o_ai
  10583. vec_vsrah(vector short __a, vector unsigned short __b) {
  10584.   return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
  10585. }
  10586.  
  10587. static __inline__ vector unsigned short __ATTRS_o_ai
  10588. vec_vsrah(vector unsigned short __a, vector unsigned short __b) {
  10589.   return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
  10590. }
  10591.  
  10592. /* vec_vsraw */
  10593.  
  10594. static __inline__ vector int __ATTRS_o_ai vec_vsraw(vector int __a,
  10595.                                                     vector unsigned int __b) {
  10596.   return __builtin_altivec_vsraw(__a, __b);
  10597. }
  10598.  
  10599. static __inline__ vector unsigned int __ATTRS_o_ai
  10600. vec_vsraw(vector unsigned int __a, vector unsigned int __b) {
  10601.   return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
  10602. }
  10603.  
  10604. /* vec_srl */
  10605.  
  10606. static __inline__ vector signed char __ATTRS_o_ai
  10607. vec_srl(vector signed char __a, vector unsigned char __b) {
  10608.   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
  10609.                                                    (vector int)__b);
  10610. }
  10611.  
  10612. static __inline__ vector signed char __ATTRS_o_ai
  10613. vec_srl(vector signed char __a, vector unsigned short __b) {
  10614.   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
  10615.                                                    (vector int)__b);
  10616. }
  10617.  
  10618. static __inline__ vector signed char __ATTRS_o_ai
  10619. vec_srl(vector signed char __a, vector unsigned int __b) {
  10620.   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
  10621.                                                    (vector int)__b);
  10622. }
  10623.  
  10624. static __inline__ vector unsigned char __ATTRS_o_ai
  10625. vec_srl(vector unsigned char __a, vector unsigned char __b) {
  10626.   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
  10627.                                                      (vector int)__b);
  10628. }
  10629.  
  10630. static __inline__ vector unsigned char __ATTRS_o_ai
  10631. vec_srl(vector unsigned char __a, vector unsigned short __b) {
  10632.   return (vector unsigned 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 int __b) {
  10638.   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
  10639.                                                      (vector int)__b);
  10640. }
  10641.  
  10642. static __inline__ vector bool char __ATTRS_o_ai
  10643. vec_srl(vector bool char __a, vector unsigned char __b) {
  10644.   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
  10645.                                                  (vector int)__b);
  10646. }
  10647.  
  10648. static __inline__ vector bool char __ATTRS_o_ai
  10649. vec_srl(vector bool char __a, vector unsigned short __b) {
  10650.   return (vector bool 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 int __b) {
  10656.   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
  10657.                                                  (vector int)__b);
  10658. }
  10659.  
  10660. static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
  10661.                                                     vector unsigned char __b) {
  10662.   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10663. }
  10664.  
  10665. static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
  10666.                                                     vector unsigned short __b) {
  10667.   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10668. }
  10669.  
  10670. static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
  10671.                                                     vector unsigned int __b) {
  10672.   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10673. }
  10674.  
  10675. static __inline__ vector unsigned short __ATTRS_o_ai
  10676. vec_srl(vector unsigned short __a, vector unsigned char __b) {
  10677.   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
  10678.                                                       (vector int)__b);
  10679. }
  10680.  
  10681. static __inline__ vector unsigned short __ATTRS_o_ai
  10682. vec_srl(vector unsigned short __a, vector unsigned short __b) {
  10683.   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
  10684.                                                       (vector int)__b);
  10685. }
  10686.  
  10687. static __inline__ vector unsigned short __ATTRS_o_ai
  10688. vec_srl(vector unsigned short __a, vector unsigned int __b) {
  10689.   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
  10690.                                                       (vector int)__b);
  10691. }
  10692.  
  10693. static __inline__ vector bool short __ATTRS_o_ai
  10694. vec_srl(vector bool short __a, vector unsigned char __b) {
  10695.   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
  10696.                                                   (vector int)__b);
  10697. }
  10698.  
  10699. static __inline__ vector bool short __ATTRS_o_ai
  10700. vec_srl(vector bool short __a, vector unsigned short __b) {
  10701.   return (vector bool 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 int __b) {
  10707.   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
  10708.                                                   (vector int)__b);
  10709. }
  10710.  
  10711. static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
  10712.                                                     vector unsigned char __b) {
  10713.   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10714. }
  10715.  
  10716. static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
  10717.                                                     vector unsigned short __b) {
  10718.   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10719. }
  10720.  
  10721. static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
  10722.                                                     vector unsigned int __b) {
  10723.   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10724. }
  10725.  
  10726. static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
  10727.                                                   vector unsigned char __b) {
  10728.   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
  10729. }
  10730.  
  10731. static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
  10732.                                                   vector unsigned short __b) {
  10733.   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
  10734. }
  10735.  
  10736. static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
  10737.                                                   vector unsigned int __b) {
  10738.   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
  10739. }
  10740.  
  10741. static __inline__ vector unsigned int __ATTRS_o_ai
  10742. vec_srl(vector unsigned int __a, vector unsigned char __b) {
  10743.   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
  10744.                                                     (vector int)__b);
  10745. }
  10746.  
  10747. static __inline__ vector unsigned int __ATTRS_o_ai
  10748. vec_srl(vector unsigned int __a, vector unsigned short __b) {
  10749.   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
  10750.                                                     (vector int)__b);
  10751. }
  10752.  
  10753. static __inline__ vector unsigned int __ATTRS_o_ai
  10754. vec_srl(vector unsigned int __a, vector unsigned int __b) {
  10755.   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
  10756.                                                     (vector int)__b);
  10757. }
  10758.  
  10759. static __inline__ vector bool int __ATTRS_o_ai
  10760. vec_srl(vector bool int __a, vector unsigned char __b) {
  10761.   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
  10762.                                                 (vector int)__b);
  10763. }
  10764.  
  10765. static __inline__ vector bool int __ATTRS_o_ai
  10766. vec_srl(vector bool int __a, vector unsigned short __b) {
  10767.   return (vector bool 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 int __b) {
  10773.   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
  10774.                                                 (vector int)__b);
  10775. }
  10776.  
  10777. #ifdef __VSX__
  10778. static __inline__ vector signed long long __ATTRS_o_ai
  10779. vec_srl(vector signed long long __a, vector unsigned char __b) {
  10780.   return (vector signed long long)__builtin_altivec_vsr((vector int)__a,
  10781.                                                         (vector int)__b);
  10782. }
  10783.  
  10784. static __inline__ vector unsigned long long __ATTRS_o_ai
  10785. vec_srl(vector unsigned long long __a, vector unsigned char __b) {
  10786.   return (vector unsigned long long)__builtin_altivec_vsr((vector int)__a,
  10787.                                                           (vector int)__b);
  10788. }
  10789. #endif
  10790.  
  10791. /* vec_vsr */
  10792.  
  10793. static __inline__ vector signed char __ATTRS_o_ai
  10794. vec_vsr(vector signed char __a, vector unsigned char __b) {
  10795.   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
  10796.                                                    (vector int)__b);
  10797. }
  10798.  
  10799. static __inline__ vector signed char __ATTRS_o_ai
  10800. vec_vsr(vector signed char __a, vector unsigned short __b) {
  10801.   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
  10802.                                                    (vector int)__b);
  10803. }
  10804.  
  10805. static __inline__ vector signed char __ATTRS_o_ai
  10806. vec_vsr(vector signed char __a, vector unsigned int __b) {
  10807.   return (vector signed char)__builtin_altivec_vsr((vector int)__a,
  10808.                                                    (vector int)__b);
  10809. }
  10810.  
  10811. static __inline__ vector unsigned char __ATTRS_o_ai
  10812. vec_vsr(vector unsigned char __a, vector unsigned char __b) {
  10813.   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
  10814.                                                      (vector int)__b);
  10815. }
  10816.  
  10817. static __inline__ vector unsigned char __ATTRS_o_ai
  10818. vec_vsr(vector unsigned char __a, vector unsigned short __b) {
  10819.   return (vector unsigned 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 int __b) {
  10825.   return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
  10826.                                                      (vector int)__b);
  10827. }
  10828.  
  10829. static __inline__ vector bool char __ATTRS_o_ai
  10830. vec_vsr(vector bool char __a, vector unsigned char __b) {
  10831.   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
  10832.                                                  (vector int)__b);
  10833. }
  10834.  
  10835. static __inline__ vector bool char __ATTRS_o_ai
  10836. vec_vsr(vector bool char __a, vector unsigned short __b) {
  10837.   return (vector bool 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 int __b) {
  10843.   return (vector bool char)__builtin_altivec_vsr((vector int)__a,
  10844.                                                  (vector int)__b);
  10845. }
  10846.  
  10847. static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
  10848.                                                     vector unsigned char __b) {
  10849.   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10850. }
  10851.  
  10852. static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
  10853.                                                     vector unsigned short __b) {
  10854.   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10855. }
  10856.  
  10857. static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
  10858.                                                     vector unsigned int __b) {
  10859.   return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10860. }
  10861.  
  10862. static __inline__ vector unsigned short __ATTRS_o_ai
  10863. vec_vsr(vector unsigned short __a, vector unsigned char __b) {
  10864.   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
  10865.                                                       (vector int)__b);
  10866. }
  10867.  
  10868. static __inline__ vector unsigned short __ATTRS_o_ai
  10869. vec_vsr(vector unsigned short __a, vector unsigned short __b) {
  10870.   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
  10871.                                                       (vector int)__b);
  10872. }
  10873.  
  10874. static __inline__ vector unsigned short __ATTRS_o_ai
  10875. vec_vsr(vector unsigned short __a, vector unsigned int __b) {
  10876.   return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
  10877.                                                       (vector int)__b);
  10878. }
  10879.  
  10880. static __inline__ vector bool short __ATTRS_o_ai
  10881. vec_vsr(vector bool short __a, vector unsigned char __b) {
  10882.   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
  10883.                                                   (vector int)__b);
  10884. }
  10885.  
  10886. static __inline__ vector bool short __ATTRS_o_ai
  10887. vec_vsr(vector bool short __a, vector unsigned short __b) {
  10888.   return (vector bool 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 int __b) {
  10894.   return (vector bool short)__builtin_altivec_vsr((vector int)__a,
  10895.                                                   (vector int)__b);
  10896. }
  10897.  
  10898. static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
  10899.                                                     vector unsigned char __b) {
  10900.   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10901. }
  10902.  
  10903. static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
  10904.                                                     vector unsigned short __b) {
  10905.   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10906. }
  10907.  
  10908. static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
  10909.                                                     vector unsigned int __b) {
  10910.   return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
  10911. }
  10912.  
  10913. static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
  10914.                                                   vector unsigned char __b) {
  10915.   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
  10916. }
  10917.  
  10918. static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
  10919.                                                   vector unsigned short __b) {
  10920.   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
  10921. }
  10922.  
  10923. static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
  10924.                                                   vector unsigned int __b) {
  10925.   return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
  10926. }
  10927.  
  10928. static __inline__ vector unsigned int __ATTRS_o_ai
  10929. vec_vsr(vector unsigned int __a, vector unsigned char __b) {
  10930.   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
  10931.                                                     (vector int)__b);
  10932. }
  10933.  
  10934. static __inline__ vector unsigned int __ATTRS_o_ai
  10935. vec_vsr(vector unsigned int __a, vector unsigned short __b) {
  10936.   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
  10937.                                                     (vector int)__b);
  10938. }
  10939.  
  10940. static __inline__ vector unsigned int __ATTRS_o_ai
  10941. vec_vsr(vector unsigned int __a, vector unsigned int __b) {
  10942.   return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
  10943.                                                     (vector int)__b);
  10944. }
  10945.  
  10946. static __inline__ vector bool int __ATTRS_o_ai
  10947. vec_vsr(vector bool int __a, vector unsigned char __b) {
  10948.   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
  10949.                                                 (vector int)__b);
  10950. }
  10951.  
  10952. static __inline__ vector bool int __ATTRS_o_ai
  10953. vec_vsr(vector bool int __a, vector unsigned short __b) {
  10954.   return (vector bool 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 int __b) {
  10960.   return (vector bool int)__builtin_altivec_vsr((vector int)__a,
  10961.                                                 (vector int)__b);
  10962. }
  10963.  
  10964. /* vec_sro */
  10965.  
  10966. static __inline__ vector signed char __ATTRS_o_ai
  10967. vec_sro(vector signed char __a, vector signed char __b) {
  10968.   return (vector signed char)__builtin_altivec_vsro((vector int)__a,
  10969.                                                     (vector int)__b);
  10970. }
  10971.  
  10972. static __inline__ vector signed char __ATTRS_o_ai
  10973. vec_sro(vector signed char __a, vector unsigned char __b) {
  10974.   return (vector signed char)__builtin_altivec_vsro((vector int)__a,
  10975.                                                     (vector int)__b);
  10976. }
  10977.  
  10978. static __inline__ vector unsigned char __ATTRS_o_ai
  10979. vec_sro(vector unsigned char __a, vector signed char __b) {
  10980.   return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
  10981.                                                       (vector int)__b);
  10982. }
  10983.  
  10984. static __inline__ vector unsigned char __ATTRS_o_ai
  10985. vec_sro(vector unsigned char __a, vector unsigned char __b) {
  10986.   return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
  10987.                                                       (vector int)__b);
  10988. }
  10989.  
  10990. static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
  10991.                                                     vector signed char __b) {
  10992.   return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  10993. }
  10994.  
  10995. static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
  10996.                                                     vector unsigned char __b) {
  10997.   return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  10998. }
  10999.  
  11000. static __inline__ vector unsigned short __ATTRS_o_ai
  11001. vec_sro(vector unsigned short __a, vector signed char __b) {
  11002.   return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
  11003.                                                        (vector int)__b);
  11004. }
  11005.  
  11006. static __inline__ vector unsigned short __ATTRS_o_ai
  11007. vec_sro(vector unsigned short __a, vector unsigned char __b) {
  11008.   return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
  11009.                                                        (vector int)__b);
  11010. }
  11011.  
  11012. static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
  11013.                                                     vector signed char __b) {
  11014.   return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11015. }
  11016.  
  11017. static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
  11018.                                                     vector unsigned char __b) {
  11019.   return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11020. }
  11021.  
  11022. static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
  11023.                                                   vector signed char __b) {
  11024.   return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
  11025. }
  11026.  
  11027. static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
  11028.                                                   vector unsigned char __b) {
  11029.   return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
  11030. }
  11031.  
  11032. static __inline__ vector unsigned int __ATTRS_o_ai
  11033. vec_sro(vector unsigned int __a, vector signed char __b) {
  11034.   return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
  11035.                                                      (vector int)__b);
  11036. }
  11037.  
  11038. static __inline__ vector unsigned int __ATTRS_o_ai
  11039. vec_sro(vector unsigned int __a, vector unsigned char __b) {
  11040.   return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
  11041.                                                      (vector int)__b);
  11042. }
  11043.  
  11044. static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
  11045.                                                     vector signed char __b) {
  11046.   return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11047. }
  11048.  
  11049. static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
  11050.                                                     vector unsigned char __b) {
  11051.   return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11052. }
  11053.  
  11054. #ifdef __VSX__
  11055. static __inline__ vector signed long long __ATTRS_o_ai
  11056. vec_sro(vector signed long long __a, vector signed char __b) {
  11057.   return (vector signed long long)__builtin_altivec_vsro((vector int)__a,
  11058.                                                          (vector int)__b);
  11059. }
  11060.  
  11061. static __inline__ vector signed long long __ATTRS_o_ai
  11062. vec_sro(vector signed long long __a, vector unsigned char __b) {
  11063.   return (vector signed long long)__builtin_altivec_vsro((vector int)__a,
  11064.                                                          (vector int)__b);
  11065. }
  11066.  
  11067. static __inline__ vector unsigned long long __ATTRS_o_ai
  11068. vec_sro(vector unsigned long long __a, vector signed char __b) {
  11069.   return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,
  11070.                                                            (vector int)__b);
  11071. }
  11072.  
  11073. static __inline__ vector unsigned long long __ATTRS_o_ai
  11074. vec_sro(vector unsigned long long __a, vector unsigned char __b) {
  11075.   return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,
  11076.                                                            (vector int)__b);
  11077. }
  11078. #endif
  11079.  
  11080. /* vec_vsro */
  11081.  
  11082. static __inline__ vector signed char __ATTRS_o_ai
  11083. vec_vsro(vector signed char __a, vector signed char __b) {
  11084.   return (vector signed char)__builtin_altivec_vsro((vector int)__a,
  11085.                                                     (vector int)__b);
  11086. }
  11087.  
  11088. static __inline__ vector signed char __ATTRS_o_ai
  11089. vec_vsro(vector signed char __a, vector unsigned char __b) {
  11090.   return (vector signed char)__builtin_altivec_vsro((vector int)__a,
  11091.                                                     (vector int)__b);
  11092. }
  11093.  
  11094. static __inline__ vector unsigned char __ATTRS_o_ai
  11095. vec_vsro(vector unsigned char __a, vector signed char __b) {
  11096.   return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
  11097.                                                       (vector int)__b);
  11098. }
  11099.  
  11100. static __inline__ vector unsigned char __ATTRS_o_ai
  11101. vec_vsro(vector unsigned char __a, vector unsigned char __b) {
  11102.   return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
  11103.                                                       (vector int)__b);
  11104. }
  11105.  
  11106. static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
  11107.                                                      vector signed char __b) {
  11108.   return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11109. }
  11110.  
  11111. static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
  11112.                                                      vector unsigned char __b) {
  11113.   return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11114. }
  11115.  
  11116. static __inline__ vector unsigned short __ATTRS_o_ai
  11117. vec_vsro(vector unsigned short __a, vector signed char __b) {
  11118.   return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
  11119.                                                        (vector int)__b);
  11120. }
  11121.  
  11122. static __inline__ vector unsigned short __ATTRS_o_ai
  11123. vec_vsro(vector unsigned short __a, vector unsigned char __b) {
  11124.   return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
  11125.                                                        (vector int)__b);
  11126. }
  11127.  
  11128. static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
  11129.                                                      vector signed char __b) {
  11130.   return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11131. }
  11132.  
  11133. static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
  11134.                                                      vector unsigned char __b) {
  11135.   return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11136. }
  11137.  
  11138. static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
  11139.                                                    vector signed char __b) {
  11140.   return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
  11141. }
  11142.  
  11143. static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
  11144.                                                    vector unsigned char __b) {
  11145.   return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
  11146. }
  11147.  
  11148. static __inline__ vector unsigned int __ATTRS_o_ai
  11149. vec_vsro(vector unsigned int __a, vector signed char __b) {
  11150.   return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
  11151.                                                      (vector int)__b);
  11152. }
  11153.  
  11154. static __inline__ vector unsigned int __ATTRS_o_ai
  11155. vec_vsro(vector unsigned int __a, vector unsigned char __b) {
  11156.   return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
  11157.                                                      (vector int)__b);
  11158. }
  11159.  
  11160. static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
  11161.                                                      vector signed char __b) {
  11162.   return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11163. }
  11164.  
  11165. static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
  11166.                                                      vector unsigned char __b) {
  11167.   return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
  11168. }
  11169.  
  11170. /* vec_st */
  11171.  
  11172. static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, long __b,
  11173.                                            vector signed char *__c) {
  11174.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11175. }
  11176.  
  11177. static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, long __b,
  11178.                                            signed char *__c) {
  11179.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11180. }
  11181.  
  11182. static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, long __b,
  11183.                                            vector unsigned char *__c) {
  11184.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11185. }
  11186.  
  11187. static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, long __b,
  11188.                                            unsigned char *__c) {
  11189.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11190. }
  11191.  
  11192. static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
  11193.                                            signed char *__c) {
  11194.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11195. }
  11196.  
  11197. static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
  11198.                                            unsigned char *__c) {
  11199.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11200. }
  11201.  
  11202. static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, long __b,
  11203.                                            vector bool char *__c) {
  11204.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11205. }
  11206.  
  11207. static __inline__ void __ATTRS_o_ai vec_st(vector short __a, long __b,
  11208.                                            vector short *__c) {
  11209.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11210. }
  11211.  
  11212. static __inline__ void __ATTRS_o_ai vec_st(vector short __a, long __b,
  11213.                                            short *__c) {
  11214.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11215. }
  11216.  
  11217. static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, long __b,
  11218.                                            vector unsigned short *__c) {
  11219.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11220. }
  11221.  
  11222. static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, long __b,
  11223.                                            unsigned short *__c) {
  11224.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11225. }
  11226.  
  11227. static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
  11228.                                            short *__c) {
  11229.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11230. }
  11231.  
  11232. static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
  11233.                                            unsigned short *__c) {
  11234.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11235. }
  11236.  
  11237. static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, long __b,
  11238.                                            vector bool short *__c) {
  11239.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11240. }
  11241.  
  11242. static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
  11243.                                            short *__c) {
  11244.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11245. }
  11246.  
  11247. static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
  11248.                                            unsigned short *__c) {
  11249.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11250. }
  11251.  
  11252. static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, long __b,
  11253.                                            vector pixel *__c) {
  11254.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11255. }
  11256.  
  11257. static __inline__ void __ATTRS_o_ai vec_st(vector int __a, long __b,
  11258.                                            vector int *__c) {
  11259.   __builtin_altivec_stvx(__a, __b, __c);
  11260. }
  11261.  
  11262. static __inline__ void __ATTRS_o_ai vec_st(vector int __a, long __b, int *__c) {
  11263.   __builtin_altivec_stvx(__a, __b, __c);
  11264. }
  11265.  
  11266. static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, long __b,
  11267.                                            vector unsigned int *__c) {
  11268.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11269. }
  11270.  
  11271. static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, long __b,
  11272.                                            unsigned int *__c) {
  11273.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11274. }
  11275.  
  11276. static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
  11277.                                            int *__c) {
  11278.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11279. }
  11280.  
  11281. static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
  11282.                                            unsigned int *__c) {
  11283.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11284. }
  11285.  
  11286. static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, long __b,
  11287.                                            vector bool int *__c) {
  11288.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11289. }
  11290.  
  11291. static __inline__ void __ATTRS_o_ai vec_st(vector float __a, long __b,
  11292.                                            vector float *__c) {
  11293.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11294. }
  11295.  
  11296. static __inline__ void __ATTRS_o_ai vec_st(vector float __a, long __b,
  11297.                                            float *__c) {
  11298.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11299. }
  11300.  
  11301. /* vec_stvx */
  11302.  
  11303. static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, long __b,
  11304.                                              vector signed char *__c) {
  11305.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11306. }
  11307.  
  11308. static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, long __b,
  11309.                                              signed char *__c) {
  11310.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11311. }
  11312.  
  11313. static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, long __b,
  11314.                                              vector unsigned char *__c) {
  11315.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11316. }
  11317.  
  11318. static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, long __b,
  11319.                                              unsigned char *__c) {
  11320.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11321. }
  11322.  
  11323. static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
  11324.                                              signed char *__c) {
  11325.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11326. }
  11327.  
  11328. static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
  11329.                                              unsigned char *__c) {
  11330.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11331. }
  11332.  
  11333. static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, long __b,
  11334.                                              vector bool char *__c) {
  11335.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11336. }
  11337.  
  11338. static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, long __b,
  11339.                                              vector short *__c) {
  11340.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11341. }
  11342.  
  11343. static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, long __b,
  11344.                                              short *__c) {
  11345.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11346. }
  11347.  
  11348. static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, long __b,
  11349.                                              vector unsigned short *__c) {
  11350.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11351. }
  11352.  
  11353. static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, long __b,
  11354.                                              unsigned short *__c) {
  11355.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11356. }
  11357.  
  11358. static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
  11359.                                              short *__c) {
  11360.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11361. }
  11362.  
  11363. static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
  11364.                                              unsigned short *__c) {
  11365.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11366. }
  11367.  
  11368. static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, long __b,
  11369.                                              vector bool short *__c) {
  11370.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11371. }
  11372.  
  11373. static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
  11374.                                              short *__c) {
  11375.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11376. }
  11377.  
  11378. static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
  11379.                                              unsigned short *__c) {
  11380.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11381. }
  11382.  
  11383. static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, long __b,
  11384.                                              vector pixel *__c) {
  11385.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11386. }
  11387.  
  11388. static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, long __b,
  11389.                                              vector int *__c) {
  11390.   __builtin_altivec_stvx(__a, __b, __c);
  11391. }
  11392.  
  11393. static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, long __b,
  11394.                                              int *__c) {
  11395.   __builtin_altivec_stvx(__a, __b, __c);
  11396. }
  11397.  
  11398. static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, long __b,
  11399.                                              vector unsigned int *__c) {
  11400.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11401. }
  11402.  
  11403. static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, long __b,
  11404.                                              unsigned int *__c) {
  11405.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11406. }
  11407.  
  11408. static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
  11409.                                              int *__c) {
  11410.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11411. }
  11412.  
  11413. static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
  11414.                                              unsigned int *__c) {
  11415.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11416. }
  11417.  
  11418. static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, long __b,
  11419.                                              vector bool int *__c) {
  11420.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11421. }
  11422.  
  11423. static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, long __b,
  11424.                                              vector float *__c) {
  11425.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11426. }
  11427.  
  11428. static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, long __b,
  11429.                                              float *__c) {
  11430.   __builtin_altivec_stvx((vector int)__a, __b, __c);
  11431. }
  11432.  
  11433. /* vec_ste */
  11434.  
  11435. static __inline__ void __ATTRS_o_ai vec_ste(vector signed char __a, long __b,
  11436.                                             signed char *__c) {
  11437.   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11438. }
  11439.  
  11440. static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned char __a, long __b,
  11441.                                             unsigned char *__c) {
  11442.   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11443. }
  11444.  
  11445. static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, long __b,
  11446.                                             signed char *__c) {
  11447.   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11448. }
  11449.  
  11450. static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, long __b,
  11451.                                             unsigned char *__c) {
  11452.   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11453. }
  11454.  
  11455. static __inline__ void __ATTRS_o_ai vec_ste(vector short __a, long __b,
  11456.                                             short *__c) {
  11457.   __builtin_altivec_stvehx(__a, __b, __c);
  11458. }
  11459.  
  11460. static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned short __a, long __b,
  11461.                                             unsigned short *__c) {
  11462.   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11463. }
  11464.  
  11465. static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, long __b,
  11466.                                             short *__c) {
  11467.   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11468. }
  11469.  
  11470. static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, long __b,
  11471.                                             unsigned short *__c) {
  11472.   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11473. }
  11474.  
  11475. static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, long __b,
  11476.                                             short *__c) {
  11477.   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11478. }
  11479.  
  11480. static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, long __b,
  11481.                                             unsigned short *__c) {
  11482.   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11483. }
  11484.  
  11485. static __inline__ void __ATTRS_o_ai vec_ste(vector int __a, long __b, int *__c) {
  11486.   __builtin_altivec_stvewx(__a, __b, __c);
  11487. }
  11488.  
  11489. static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned int __a, long __b,
  11490.                                             unsigned int *__c) {
  11491.   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11492. }
  11493.  
  11494. static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, long __b,
  11495.                                             int *__c) {
  11496.   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11497. }
  11498.  
  11499. static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, long __b,
  11500.                                             unsigned int *__c) {
  11501.   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11502. }
  11503.  
  11504. static __inline__ void __ATTRS_o_ai vec_ste(vector float __a, long __b,
  11505.                                             float *__c) {
  11506.   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11507. }
  11508.  
  11509. /* vec_stvebx */
  11510.  
  11511. static __inline__ void __ATTRS_o_ai vec_stvebx(vector signed char __a, long __b,
  11512.                                                signed char *__c) {
  11513.   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11514. }
  11515.  
  11516. static __inline__ void __ATTRS_o_ai vec_stvebx(vector unsigned char __a,
  11517.                                                long __b, unsigned char *__c) {
  11518.   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11519. }
  11520.  
  11521. static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, long __b,
  11522.                                                signed char *__c) {
  11523.   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11524. }
  11525.  
  11526. static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, long __b,
  11527.                                                unsigned char *__c) {
  11528.   __builtin_altivec_stvebx((vector char)__a, __b, __c);
  11529. }
  11530.  
  11531. /* vec_stvehx */
  11532.  
  11533. static __inline__ void __ATTRS_o_ai vec_stvehx(vector short __a, long __b,
  11534.                                                short *__c) {
  11535.   __builtin_altivec_stvehx(__a, __b, __c);
  11536. }
  11537.  
  11538. static __inline__ void __ATTRS_o_ai vec_stvehx(vector unsigned short __a,
  11539.                                                long __b, unsigned short *__c) {
  11540.   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11541. }
  11542.  
  11543. static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, long __b,
  11544.                                                short *__c) {
  11545.   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11546. }
  11547.  
  11548. static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, long __b,
  11549.                                                unsigned short *__c) {
  11550.   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11551. }
  11552.  
  11553. static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, long __b,
  11554.                                                short *__c) {
  11555.   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11556. }
  11557.  
  11558. static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, long __b,
  11559.                                                unsigned short *__c) {
  11560.   __builtin_altivec_stvehx((vector short)__a, __b, __c);
  11561. }
  11562.  
  11563. /* vec_stvewx */
  11564.  
  11565. static __inline__ void __ATTRS_o_ai vec_stvewx(vector int __a, long __b,
  11566.                                                int *__c) {
  11567.   __builtin_altivec_stvewx(__a, __b, __c);
  11568. }
  11569.  
  11570. static __inline__ void __ATTRS_o_ai vec_stvewx(vector unsigned int __a, long __b,
  11571.                                                unsigned int *__c) {
  11572.   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11573. }
  11574.  
  11575. static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, long __b,
  11576.                                                int *__c) {
  11577.   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11578. }
  11579.  
  11580. static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, long __b,
  11581.                                                unsigned int *__c) {
  11582.   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11583. }
  11584.  
  11585. static __inline__ void __ATTRS_o_ai vec_stvewx(vector float __a, long __b,
  11586.                                                float *__c) {
  11587.   __builtin_altivec_stvewx((vector int)__a, __b, __c);
  11588. }
  11589.  
  11590. /* vec_stl */
  11591.  
  11592. static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
  11593.                                             vector signed char *__c) {
  11594.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11595. }
  11596.  
  11597. static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
  11598.                                             signed char *__c) {
  11599.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11600. }
  11601.  
  11602. static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
  11603.                                             vector unsigned char *__c) {
  11604.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11605. }
  11606.  
  11607. static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
  11608.                                             unsigned char *__c) {
  11609.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11610. }
  11611.  
  11612. static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
  11613.                                             signed char *__c) {
  11614.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11615. }
  11616.  
  11617. static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
  11618.                                             unsigned char *__c) {
  11619.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11620. }
  11621.  
  11622. static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
  11623.                                             vector bool char *__c) {
  11624.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11625. }
  11626.  
  11627. static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
  11628.                                             vector short *__c) {
  11629.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11630. }
  11631.  
  11632. static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
  11633.                                             short *__c) {
  11634.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11635. }
  11636.  
  11637. static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
  11638.                                             vector unsigned short *__c) {
  11639.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11640. }
  11641.  
  11642. static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
  11643.                                             unsigned short *__c) {
  11644.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11645. }
  11646.  
  11647. static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
  11648.                                             short *__c) {
  11649.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11650. }
  11651.  
  11652. static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
  11653.                                             unsigned short *__c) {
  11654.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11655. }
  11656.  
  11657. static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
  11658.                                             vector bool short *__c) {
  11659.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11660. }
  11661.  
  11662. static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
  11663.                                             short *__c) {
  11664.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11665. }
  11666.  
  11667. static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
  11668.                                             unsigned short *__c) {
  11669.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11670. }
  11671.  
  11672. static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
  11673.                                             vector pixel *__c) {
  11674.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11675. }
  11676.  
  11677. static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b,
  11678.                                             vector int *__c) {
  11679.   __builtin_altivec_stvxl(__a, __b, __c);
  11680. }
  11681.  
  11682. static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b, int *__c) {
  11683.   __builtin_altivec_stvxl(__a, __b, __c);
  11684. }
  11685.  
  11686. static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
  11687.                                             vector unsigned int *__c) {
  11688.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11689. }
  11690.  
  11691. static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
  11692.                                             unsigned int *__c) {
  11693.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11694. }
  11695.  
  11696. static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
  11697.                                             int *__c) {
  11698.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11699. }
  11700.  
  11701. static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
  11702.                                             unsigned int *__c) {
  11703.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11704. }
  11705.  
  11706. static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
  11707.                                             vector bool int *__c) {
  11708.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11709. }
  11710.  
  11711. static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
  11712.                                             vector float *__c) {
  11713.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11714. }
  11715.  
  11716. static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
  11717.                                             float *__c) {
  11718.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11719. }
  11720.  
  11721. /* vec_stvxl */
  11722.  
  11723. static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
  11724.                                               vector signed char *__c) {
  11725.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11726. }
  11727.  
  11728. static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
  11729.                                               signed char *__c) {
  11730.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11731. }
  11732.  
  11733. static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
  11734.                                               vector unsigned char *__c) {
  11735.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11736. }
  11737.  
  11738. static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
  11739.                                               unsigned char *__c) {
  11740.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11741. }
  11742.  
  11743. static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
  11744.                                               signed char *__c) {
  11745.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11746. }
  11747.  
  11748. static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
  11749.                                               unsigned char *__c) {
  11750.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11751. }
  11752.  
  11753. static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
  11754.                                               vector bool char *__c) {
  11755.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11756. }
  11757.  
  11758. static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
  11759.                                               vector short *__c) {
  11760.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11761. }
  11762.  
  11763. static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
  11764.                                               short *__c) {
  11765.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11766. }
  11767.  
  11768. static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
  11769.                                               int __b,
  11770.                                               vector unsigned short *__c) {
  11771.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11772. }
  11773.  
  11774. static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
  11775.                                               int __b, unsigned short *__c) {
  11776.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11777. }
  11778.  
  11779. static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
  11780.                                               short *__c) {
  11781.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11782. }
  11783.  
  11784. static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
  11785.                                               unsigned short *__c) {
  11786.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11787. }
  11788.  
  11789. static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
  11790.                                               vector bool short *__c) {
  11791.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11792. }
  11793.  
  11794. static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
  11795.                                               short *__c) {
  11796.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11797. }
  11798.  
  11799. static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
  11800.                                               unsigned short *__c) {
  11801.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11802. }
  11803.  
  11804. static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
  11805.                                               vector pixel *__c) {
  11806.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11807. }
  11808.  
  11809. static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
  11810.                                               vector int *__c) {
  11811.   __builtin_altivec_stvxl(__a, __b, __c);
  11812. }
  11813.  
  11814. static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
  11815.                                               int *__c) {
  11816.   __builtin_altivec_stvxl(__a, __b, __c);
  11817. }
  11818.  
  11819. static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
  11820.                                               vector unsigned int *__c) {
  11821.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11822. }
  11823.  
  11824. static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
  11825.                                               unsigned int *__c) {
  11826.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11827. }
  11828.  
  11829. static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
  11830.                                               int *__c) {
  11831.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11832. }
  11833.  
  11834. static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
  11835.                                               unsigned int *__c) {
  11836.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11837. }
  11838.  
  11839. static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
  11840.                                               vector bool int *__c) {
  11841.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11842. }
  11843.  
  11844. static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
  11845.                                               vector float *__c) {
  11846.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11847. }
  11848.  
  11849. static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
  11850.                                               float *__c) {
  11851.   __builtin_altivec_stvxl((vector int)__a, __b, __c);
  11852. }
  11853.  
  11854. /* vec_sub */
  11855.  
  11856. static __inline__ vector signed char __ATTRS_o_ai
  11857. vec_sub(vector signed char __a, vector signed char __b) {
  11858.   return __a - __b;
  11859. }
  11860.  
  11861. static __inline__ vector signed char __ATTRS_o_ai
  11862. vec_sub(vector bool char __a, vector signed char __b) {
  11863.   return (vector signed char)__a - __b;
  11864. }
  11865.  
  11866. static __inline__ vector signed char __ATTRS_o_ai
  11867. vec_sub(vector signed char __a, vector bool char __b) {
  11868.   return __a - (vector signed char)__b;
  11869. }
  11870.  
  11871. static __inline__ vector unsigned char __ATTRS_o_ai
  11872. vec_sub(vector unsigned char __a, vector unsigned char __b) {
  11873.   return __a - __b;
  11874. }
  11875.  
  11876. static __inline__ vector unsigned char __ATTRS_o_ai
  11877. vec_sub(vector bool char __a, vector unsigned char __b) {
  11878.   return (vector unsigned char)__a - __b;
  11879. }
  11880.  
  11881. static __inline__ vector unsigned char __ATTRS_o_ai
  11882. vec_sub(vector unsigned char __a, vector bool char __b) {
  11883.   return __a - (vector unsigned char)__b;
  11884. }
  11885.  
  11886. static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
  11887.                                                     vector short __b) {
  11888.   return __a - __b;
  11889. }
  11890.  
  11891. static __inline__ vector short __ATTRS_o_ai vec_sub(vector bool short __a,
  11892.                                                     vector short __b) {
  11893.   return (vector short)__a - __b;
  11894. }
  11895.  
  11896. static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
  11897.                                                     vector bool short __b) {
  11898.   return __a - (vector short)__b;
  11899. }
  11900.  
  11901. static __inline__ vector unsigned short __ATTRS_o_ai
  11902. vec_sub(vector unsigned short __a, vector unsigned short __b) {
  11903.   return __a - __b;
  11904. }
  11905.  
  11906. static __inline__ vector unsigned short __ATTRS_o_ai
  11907. vec_sub(vector bool short __a, vector unsigned short __b) {
  11908.   return (vector unsigned short)__a - __b;
  11909. }
  11910.  
  11911. static __inline__ vector unsigned short __ATTRS_o_ai
  11912. vec_sub(vector unsigned short __a, vector bool short __b) {
  11913.   return __a - (vector unsigned short)__b;
  11914. }
  11915.  
  11916. static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
  11917.                                                   vector int __b) {
  11918.   return __a - __b;
  11919. }
  11920.  
  11921. static __inline__ vector int __ATTRS_o_ai vec_sub(vector bool int __a,
  11922.                                                   vector int __b) {
  11923.   return (vector int)__a - __b;
  11924. }
  11925.  
  11926. static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
  11927.                                                   vector bool int __b) {
  11928.   return __a - (vector int)__b;
  11929. }
  11930.  
  11931. static __inline__ vector unsigned int __ATTRS_o_ai
  11932. vec_sub(vector unsigned int __a, vector unsigned int __b) {
  11933.   return __a - __b;
  11934. }
  11935.  
  11936. static __inline__ vector unsigned int __ATTRS_o_ai
  11937. vec_sub(vector bool int __a, vector unsigned int __b) {
  11938.   return (vector unsigned int)__a - __b;
  11939. }
  11940.  
  11941. static __inline__ vector unsigned int __ATTRS_o_ai
  11942. vec_sub(vector unsigned int __a, vector bool int __b) {
  11943.   return __a - (vector unsigned int)__b;
  11944. }
  11945.  
  11946. #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  11947.     defined(__SIZEOF_INT128__)
  11948. static __inline__ vector signed __int128 __ATTRS_o_ai
  11949. vec_sub(vector signed __int128 __a, vector signed __int128 __b) {
  11950.   return __a - __b;
  11951. }
  11952.  
  11953. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  11954. vec_sub(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  11955.   return __a - __b;
  11956. }
  11957. #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&
  11958.        // defined(__SIZEOF_INT128__)
  11959.  
  11960. #ifdef __VSX__
  11961. static __inline__ vector signed long long __ATTRS_o_ai
  11962. vec_sub(vector signed long long __a, vector signed long long __b) {
  11963.   return __a - __b;
  11964. }
  11965.  
  11966. static __inline__ vector unsigned long long __ATTRS_o_ai
  11967. vec_sub(vector unsigned long long __a, vector unsigned long long __b) {
  11968.   return __a - __b;
  11969. }
  11970.  
  11971. static __inline__ vector double __ATTRS_o_ai vec_sub(vector double __a,
  11972.                                                      vector double __b) {
  11973.   return __a - __b;
  11974. }
  11975. #endif
  11976.  
  11977. static __inline__ vector float __ATTRS_o_ai vec_sub(vector float __a,
  11978.                                                     vector float __b) {
  11979.   return __a - __b;
  11980. }
  11981.  
  11982. /* vec_vsububm */
  11983.  
  11984. #define __builtin_altivec_vsububm vec_vsububm
  11985.  
  11986. static __inline__ vector signed char __ATTRS_o_ai
  11987. vec_vsububm(vector signed char __a, vector signed char __b) {
  11988.   return __a - __b;
  11989. }
  11990.  
  11991. static __inline__ vector signed char __ATTRS_o_ai
  11992. vec_vsububm(vector bool char __a, vector signed char __b) {
  11993.   return (vector signed char)__a - __b;
  11994. }
  11995.  
  11996. static __inline__ vector signed char __ATTRS_o_ai
  11997. vec_vsububm(vector signed char __a, vector bool char __b) {
  11998.   return __a - (vector signed char)__b;
  11999. }
  12000.  
  12001. static __inline__ vector unsigned char __ATTRS_o_ai
  12002. vec_vsububm(vector unsigned char __a, vector unsigned char __b) {
  12003.   return __a - __b;
  12004. }
  12005.  
  12006. static __inline__ vector unsigned char __ATTRS_o_ai
  12007. vec_vsububm(vector bool char __a, vector unsigned char __b) {
  12008.   return (vector unsigned char)__a - __b;
  12009. }
  12010.  
  12011. static __inline__ vector unsigned char __ATTRS_o_ai
  12012. vec_vsububm(vector unsigned char __a, vector bool char __b) {
  12013.   return __a - (vector unsigned char)__b;
  12014. }
  12015.  
  12016. /* vec_vsubuhm */
  12017.  
  12018. #define __builtin_altivec_vsubuhm vec_vsubuhm
  12019.  
  12020. static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
  12021.                                                         vector short __b) {
  12022.   return __a - __b;
  12023. }
  12024.  
  12025. static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector bool short __a,
  12026.                                                         vector short __b) {
  12027.   return (vector short)__a - __b;
  12028. }
  12029.  
  12030. static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
  12031.                                                         vector bool short __b) {
  12032.   return __a - (vector short)__b;
  12033. }
  12034.  
  12035. static __inline__ vector unsigned short __ATTRS_o_ai
  12036. vec_vsubuhm(vector unsigned short __a, vector unsigned short __b) {
  12037.   return __a - __b;
  12038. }
  12039.  
  12040. static __inline__ vector unsigned short __ATTRS_o_ai
  12041. vec_vsubuhm(vector bool short __a, vector unsigned short __b) {
  12042.   return (vector unsigned short)__a - __b;
  12043. }
  12044.  
  12045. static __inline__ vector unsigned short __ATTRS_o_ai
  12046. vec_vsubuhm(vector unsigned short __a, vector bool short __b) {
  12047.   return __a - (vector unsigned short)__b;
  12048. }
  12049.  
  12050. /* vec_vsubuwm */
  12051.  
  12052. #define __builtin_altivec_vsubuwm vec_vsubuwm
  12053.  
  12054. static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
  12055.                                                       vector int __b) {
  12056.   return __a - __b;
  12057. }
  12058.  
  12059. static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector bool int __a,
  12060.                                                       vector int __b) {
  12061.   return (vector int)__a - __b;
  12062. }
  12063.  
  12064. static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
  12065.                                                       vector bool int __b) {
  12066.   return __a - (vector int)__b;
  12067. }
  12068.  
  12069. static __inline__ vector unsigned int __ATTRS_o_ai
  12070. vec_vsubuwm(vector unsigned int __a, vector unsigned int __b) {
  12071.   return __a - __b;
  12072. }
  12073.  
  12074. static __inline__ vector unsigned int __ATTRS_o_ai
  12075. vec_vsubuwm(vector bool int __a, vector unsigned int __b) {
  12076.   return (vector unsigned int)__a - __b;
  12077. }
  12078.  
  12079. static __inline__ vector unsigned int __ATTRS_o_ai
  12080. vec_vsubuwm(vector unsigned int __a, vector bool int __b) {
  12081.   return __a - (vector unsigned int)__b;
  12082. }
  12083.  
  12084. /* vec_vsubfp */
  12085.  
  12086. #define __builtin_altivec_vsubfp vec_vsubfp
  12087.  
  12088. static __inline__ vector float __attribute__((__always_inline__))
  12089. vec_vsubfp(vector float __a, vector float __b) {
  12090.   return __a - __b;
  12091. }
  12092.  
  12093. /* vec_subc */
  12094.  
  12095. static __inline__ vector signed int __ATTRS_o_ai
  12096. vec_subc(vector signed int __a, vector signed int __b) {
  12097.   return (vector signed int)__builtin_altivec_vsubcuw((vector unsigned int)__a,
  12098.                                                       (vector unsigned int) __b);
  12099. }
  12100.  
  12101. static __inline__ vector unsigned int __ATTRS_o_ai
  12102. vec_subc(vector unsigned int __a, vector unsigned int __b) {
  12103.   return __builtin_altivec_vsubcuw(__a, __b);
  12104. }
  12105.  
  12106. #ifdef __POWER8_VECTOR__
  12107. #ifdef __SIZEOF_INT128__
  12108. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12109. vec_subc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  12110.   return __builtin_altivec_vsubcuq(__a, __b);
  12111. }
  12112.  
  12113. static __inline__ vector signed __int128 __ATTRS_o_ai
  12114. vec_subc(vector signed __int128 __a, vector signed __int128 __b) {
  12115.   return (vector signed __int128)__builtin_altivec_vsubcuq(
  12116.       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
  12117. }
  12118. #endif
  12119.  
  12120. static __inline__ vector unsigned char __attribute__((__always_inline__))
  12121. vec_subc_u128(vector unsigned char __a, vector unsigned char __b) {
  12122.   return (vector unsigned char)__builtin_altivec_vsubcuq_c(
  12123.       (vector unsigned char)__a, (vector unsigned char)__b);
  12124. }
  12125. #endif // __POWER8_VECTOR__
  12126.  
  12127. /* vec_vsubcuw */
  12128.  
  12129. static __inline__ vector unsigned int __attribute__((__always_inline__))
  12130. vec_vsubcuw(vector unsigned int __a, vector unsigned int __b) {
  12131.   return __builtin_altivec_vsubcuw(__a, __b);
  12132. }
  12133.  
  12134. /* vec_subs */
  12135.  
  12136. static __inline__ vector signed char __ATTRS_o_ai
  12137. vec_subs(vector signed char __a, vector signed char __b) {
  12138.   return __builtin_altivec_vsubsbs(__a, __b);
  12139. }
  12140.  
  12141. static __inline__ vector signed char __ATTRS_o_ai
  12142. vec_subs(vector bool char __a, vector signed char __b) {
  12143.   return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
  12144. }
  12145.  
  12146. static __inline__ vector signed char __ATTRS_o_ai
  12147. vec_subs(vector signed char __a, vector bool char __b) {
  12148.   return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
  12149. }
  12150.  
  12151. static __inline__ vector unsigned char __ATTRS_o_ai
  12152. vec_subs(vector unsigned char __a, vector unsigned char __b) {
  12153.   return __builtin_altivec_vsububs(__a, __b);
  12154. }
  12155.  
  12156. static __inline__ vector unsigned char __ATTRS_o_ai
  12157. vec_subs(vector bool char __a, vector unsigned char __b) {
  12158.   return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
  12159. }
  12160.  
  12161. static __inline__ vector unsigned char __ATTRS_o_ai
  12162. vec_subs(vector unsigned char __a, vector bool char __b) {
  12163.   return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
  12164. }
  12165.  
  12166. static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
  12167.                                                      vector short __b) {
  12168.   return __builtin_altivec_vsubshs(__a, __b);
  12169. }
  12170.  
  12171. static __inline__ vector short __ATTRS_o_ai vec_subs(vector bool short __a,
  12172.                                                      vector short __b) {
  12173.   return __builtin_altivec_vsubshs((vector short)__a, __b);
  12174. }
  12175.  
  12176. static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
  12177.                                                      vector bool short __b) {
  12178.   return __builtin_altivec_vsubshs(__a, (vector short)__b);
  12179. }
  12180.  
  12181. static __inline__ vector unsigned short __ATTRS_o_ai
  12182. vec_subs(vector unsigned short __a, vector unsigned short __b) {
  12183.   return __builtin_altivec_vsubuhs(__a, __b);
  12184. }
  12185.  
  12186. static __inline__ vector unsigned short __ATTRS_o_ai
  12187. vec_subs(vector bool short __a, vector unsigned short __b) {
  12188.   return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
  12189. }
  12190.  
  12191. static __inline__ vector unsigned short __ATTRS_o_ai
  12192. vec_subs(vector unsigned short __a, vector bool short __b) {
  12193.   return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
  12194. }
  12195.  
  12196. static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
  12197.                                                    vector int __b) {
  12198.   return __builtin_altivec_vsubsws(__a, __b);
  12199. }
  12200.  
  12201. static __inline__ vector int __ATTRS_o_ai vec_subs(vector bool int __a,
  12202.                                                    vector int __b) {
  12203.   return __builtin_altivec_vsubsws((vector int)__a, __b);
  12204. }
  12205.  
  12206. static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
  12207.                                                    vector bool int __b) {
  12208.   return __builtin_altivec_vsubsws(__a, (vector int)__b);
  12209. }
  12210.  
  12211. static __inline__ vector unsigned int __ATTRS_o_ai
  12212. vec_subs(vector unsigned int __a, vector unsigned int __b) {
  12213.   return __builtin_altivec_vsubuws(__a, __b);
  12214. }
  12215.  
  12216. static __inline__ vector unsigned int __ATTRS_o_ai
  12217. vec_subs(vector bool int __a, vector unsigned int __b) {
  12218.   return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
  12219. }
  12220.  
  12221. static __inline__ vector unsigned int __ATTRS_o_ai
  12222. vec_subs(vector unsigned int __a, vector bool int __b) {
  12223.   return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
  12224. }
  12225.  
  12226. /* vec_vsubsbs */
  12227.  
  12228. static __inline__ vector signed char __ATTRS_o_ai
  12229. vec_vsubsbs(vector signed char __a, vector signed char __b) {
  12230.   return __builtin_altivec_vsubsbs(__a, __b);
  12231. }
  12232.  
  12233. static __inline__ vector signed char __ATTRS_o_ai
  12234. vec_vsubsbs(vector bool char __a, vector signed char __b) {
  12235.   return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
  12236. }
  12237.  
  12238. static __inline__ vector signed char __ATTRS_o_ai
  12239. vec_vsubsbs(vector signed char __a, vector bool char __b) {
  12240.   return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
  12241. }
  12242.  
  12243. /* vec_vsububs */
  12244.  
  12245. static __inline__ vector unsigned char __ATTRS_o_ai
  12246. vec_vsububs(vector unsigned char __a, vector unsigned char __b) {
  12247.   return __builtin_altivec_vsububs(__a, __b);
  12248. }
  12249.  
  12250. static __inline__ vector unsigned char __ATTRS_o_ai
  12251. vec_vsububs(vector bool char __a, vector unsigned char __b) {
  12252.   return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
  12253. }
  12254.  
  12255. static __inline__ vector unsigned char __ATTRS_o_ai
  12256. vec_vsububs(vector unsigned char __a, vector bool char __b) {
  12257.   return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
  12258. }
  12259.  
  12260. /* vec_vsubshs */
  12261.  
  12262. static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
  12263.                                                         vector short __b) {
  12264.   return __builtin_altivec_vsubshs(__a, __b);
  12265. }
  12266.  
  12267. static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector bool short __a,
  12268.                                                         vector short __b) {
  12269.   return __builtin_altivec_vsubshs((vector short)__a, __b);
  12270. }
  12271.  
  12272. static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
  12273.                                                         vector bool short __b) {
  12274.   return __builtin_altivec_vsubshs(__a, (vector short)__b);
  12275. }
  12276.  
  12277. /* vec_vsubuhs */
  12278.  
  12279. static __inline__ vector unsigned short __ATTRS_o_ai
  12280. vec_vsubuhs(vector unsigned short __a, vector unsigned short __b) {
  12281.   return __builtin_altivec_vsubuhs(__a, __b);
  12282. }
  12283.  
  12284. static __inline__ vector unsigned short __ATTRS_o_ai
  12285. vec_vsubuhs(vector bool short __a, vector unsigned short __b) {
  12286.   return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
  12287. }
  12288.  
  12289. static __inline__ vector unsigned short __ATTRS_o_ai
  12290. vec_vsubuhs(vector unsigned short __a, vector bool short __b) {
  12291.   return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
  12292. }
  12293.  
  12294. /* vec_vsubsws */
  12295.  
  12296. static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
  12297.                                                       vector int __b) {
  12298.   return __builtin_altivec_vsubsws(__a, __b);
  12299. }
  12300.  
  12301. static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector bool int __a,
  12302.                                                       vector int __b) {
  12303.   return __builtin_altivec_vsubsws((vector int)__a, __b);
  12304. }
  12305.  
  12306. static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
  12307.                                                       vector bool int __b) {
  12308.   return __builtin_altivec_vsubsws(__a, (vector int)__b);
  12309. }
  12310.  
  12311. /* vec_vsubuws */
  12312.  
  12313. static __inline__ vector unsigned int __ATTRS_o_ai
  12314. vec_vsubuws(vector unsigned int __a, vector unsigned int __b) {
  12315.   return __builtin_altivec_vsubuws(__a, __b);
  12316. }
  12317.  
  12318. static __inline__ vector unsigned int __ATTRS_o_ai
  12319. vec_vsubuws(vector bool int __a, vector unsigned int __b) {
  12320.   return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
  12321. }
  12322.  
  12323. static __inline__ vector unsigned int __ATTRS_o_ai
  12324. vec_vsubuws(vector unsigned int __a, vector bool int __b) {
  12325.   return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
  12326. }
  12327.  
  12328. #ifdef __POWER8_VECTOR__
  12329. /* vec_vsubuqm */
  12330.  
  12331. #ifdef __SIZEOF_INT128__
  12332. static __inline__ vector signed __int128 __ATTRS_o_ai
  12333. vec_vsubuqm(vector signed __int128 __a, vector signed __int128 __b) {
  12334.   return __a - __b;
  12335. }
  12336.  
  12337. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12338. vec_vsubuqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  12339.   return __a - __b;
  12340. }
  12341. #endif
  12342.  
  12343. static __inline__ vector unsigned char __attribute__((__always_inline__))
  12344. vec_sub_u128(vector unsigned char __a, vector unsigned char __b) {
  12345.   return (vector unsigned char)__builtin_altivec_vsubuqm(__a, __b);
  12346. }
  12347.  
  12348. /* vec_vsubeuqm */
  12349.  
  12350. #ifdef __SIZEOF_INT128__
  12351. static __inline__ vector signed __int128 __ATTRS_o_ai
  12352. vec_vsubeuqm(vector signed __int128 __a, vector signed __int128 __b,
  12353.              vector signed __int128 __c) {
  12354.   return (vector signed __int128)__builtin_altivec_vsubeuqm(
  12355.       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
  12356.       (vector unsigned __int128)__c);
  12357. }
  12358.  
  12359. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12360. vec_vsubeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
  12361.              vector unsigned __int128 __c) {
  12362.   return __builtin_altivec_vsubeuqm(__a, __b, __c);
  12363. }
  12364.  
  12365. static __inline__ vector signed __int128 __ATTRS_o_ai
  12366. vec_sube(vector signed __int128 __a, vector signed __int128 __b,
  12367.              vector signed __int128 __c) {
  12368.   return (vector signed __int128)__builtin_altivec_vsubeuqm(
  12369.       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
  12370.       (vector unsigned __int128)__c);
  12371. }
  12372.  
  12373. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12374. vec_sube(vector unsigned __int128 __a, vector unsigned __int128 __b,
  12375.              vector unsigned __int128 __c) {
  12376.   return __builtin_altivec_vsubeuqm(__a, __b, __c);
  12377. }
  12378. #endif
  12379.  
  12380. static __inline__ vector unsigned char __attribute__((__always_inline__))
  12381. vec_sube_u128(vector unsigned char __a, vector unsigned char __b,
  12382.               vector unsigned char __c) {
  12383.   return (vector unsigned char)__builtin_altivec_vsubeuqm_c(
  12384.       (vector unsigned char)__a, (vector unsigned char)__b,
  12385.       (vector unsigned char)__c);
  12386. }
  12387.  
  12388. /* vec_vsubcuq */
  12389.  
  12390. #ifdef __SIZEOF_INT128__
  12391. static __inline__ vector signed __int128 __ATTRS_o_ai
  12392. vec_vsubcuq(vector signed __int128 __a, vector signed __int128 __b) {
  12393.   return (vector signed __int128)__builtin_altivec_vsubcuq(
  12394.       (vector unsigned __int128)__a, (vector unsigned __int128)__b);
  12395. }
  12396.  
  12397. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12398. vec_vsubcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  12399.   return __builtin_altivec_vsubcuq(__a, __b);
  12400. }
  12401.  
  12402. /* vec_vsubecuq */
  12403.  
  12404. static __inline__ vector signed __int128 __ATTRS_o_ai
  12405. vec_vsubecuq(vector signed __int128 __a, vector signed __int128 __b,
  12406.              vector signed __int128 __c) {
  12407.   return (vector signed __int128)__builtin_altivec_vsubecuq(
  12408.       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
  12409.       (vector unsigned __int128)__c);
  12410. }
  12411.  
  12412. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12413. vec_vsubecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
  12414.              vector unsigned __int128 __c) {
  12415.   return __builtin_altivec_vsubecuq(__a, __b, __c);
  12416. }
  12417. #endif
  12418.  
  12419. #ifdef __powerpc64__
  12420. static __inline__ vector signed int __ATTRS_o_ai
  12421. vec_subec(vector signed int __a, vector signed int __b,
  12422.              vector signed int __c) {
  12423.   return vec_addec(__a, ~__b, __c);
  12424. }
  12425.  
  12426. static __inline__ vector unsigned int __ATTRS_o_ai
  12427. vec_subec(vector unsigned int __a, vector unsigned int __b,
  12428.              vector unsigned int __c) {
  12429.   return vec_addec(__a, ~__b, __c);
  12430. }
  12431. #endif
  12432.  
  12433. #ifdef __SIZEOF_INT128__
  12434. static __inline__ vector signed __int128 __ATTRS_o_ai
  12435. vec_subec(vector signed __int128 __a, vector signed __int128 __b,
  12436.              vector signed __int128 __c) {
  12437.   return (vector signed __int128)__builtin_altivec_vsubecuq(
  12438.       (vector unsigned __int128)__a, (vector unsigned __int128)__b,
  12439.       (vector unsigned __int128)__c);
  12440. }
  12441.  
  12442. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  12443. vec_subec(vector unsigned __int128 __a, vector unsigned __int128 __b,
  12444.              vector unsigned __int128 __c) {
  12445.   return __builtin_altivec_vsubecuq(__a, __b, __c);
  12446. }
  12447. #endif
  12448.  
  12449. static __inline__ vector unsigned char __attribute__((__always_inline__))
  12450. vec_subec_u128(vector unsigned char __a, vector unsigned char __b,
  12451.                vector unsigned char __c) {
  12452.   return (vector unsigned char)__builtin_altivec_vsubecuq_c(
  12453.       (vector unsigned char)__a, (vector unsigned char)__b,
  12454.       (vector unsigned char)__c);
  12455. }
  12456. #endif // __POWER8_VECTOR__
  12457.  
  12458. static __inline__ vector signed int __ATTRS_o_ai
  12459. vec_sube(vector signed int __a, vector signed int __b,
  12460.          vector signed int __c) {
  12461.   vector signed int __mask = {1, 1, 1, 1};
  12462.   vector signed int __carry = __c & __mask;
  12463.   return vec_adde(__a, ~__b, __carry);
  12464. }
  12465.  
  12466. static __inline__ vector unsigned int __ATTRS_o_ai
  12467. vec_sube(vector unsigned int __a, vector unsigned int __b,
  12468.          vector unsigned int __c) {
  12469.   vector unsigned int __mask = {1, 1, 1, 1};
  12470.   vector unsigned int __carry = __c & __mask;
  12471.   return vec_adde(__a, ~__b, __carry);
  12472. }
  12473. /* vec_sum4s */
  12474.  
  12475. static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed char __a,
  12476.                                                     vector int __b) {
  12477.   return __builtin_altivec_vsum4sbs(__a, __b);
  12478. }
  12479.  
  12480. static __inline__ vector unsigned int __ATTRS_o_ai
  12481. vec_sum4s(vector unsigned char __a, vector unsigned int __b) {
  12482.   return __builtin_altivec_vsum4ubs(__a, __b);
  12483. }
  12484.  
  12485. static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed short __a,
  12486.                                                     vector int __b) {
  12487.   return __builtin_altivec_vsum4shs(__a, __b);
  12488. }
  12489.  
  12490. /* vec_vsum4sbs */
  12491.  
  12492. static __inline__ vector int __attribute__((__always_inline__))
  12493. vec_vsum4sbs(vector signed char __a, vector int __b) {
  12494.   return __builtin_altivec_vsum4sbs(__a, __b);
  12495. }
  12496.  
  12497. /* vec_vsum4ubs */
  12498.  
  12499. static __inline__ vector unsigned int __attribute__((__always_inline__))
  12500. vec_vsum4ubs(vector unsigned char __a, vector unsigned int __b) {
  12501.   return __builtin_altivec_vsum4ubs(__a, __b);
  12502. }
  12503.  
  12504. /* vec_vsum4shs */
  12505.  
  12506. static __inline__ vector int __attribute__((__always_inline__))
  12507. vec_vsum4shs(vector signed short __a, vector int __b) {
  12508.   return __builtin_altivec_vsum4shs(__a, __b);
  12509. }
  12510.  
  12511. /* vec_sum2s */
  12512.  
  12513. /* The vsum2sws instruction has a big-endian bias, so that the second
  12514.    input vector and the result always reference big-endian elements
  12515.    1 and 3 (little-endian element 0 and 2).  For ease of porting the
  12516.    programmer wants elements 1 and 3 in both cases, so for little
  12517.    endian we must perform some permutes.  */
  12518.  
  12519. static __inline__ vector signed int __attribute__((__always_inline__))
  12520. vec_sum2s(vector int __a, vector int __b) {
  12521. #ifdef __LITTLE_ENDIAN__
  12522.   vector int __c = (vector signed int)vec_perm(
  12523.       __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
  12524.                                        8, 9, 10, 11));
  12525.   __c = __builtin_altivec_vsum2sws(__a, __c);
  12526.   return (vector signed int)vec_perm(
  12527.       __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
  12528.                                        8, 9, 10, 11));
  12529. #else
  12530.   return __builtin_altivec_vsum2sws(__a, __b);
  12531. #endif
  12532. }
  12533.  
  12534. /* vec_vsum2sws */
  12535.  
  12536. static __inline__ vector signed int __attribute__((__always_inline__))
  12537. vec_vsum2sws(vector int __a, vector int __b) {
  12538. #ifdef __LITTLE_ENDIAN__
  12539.   vector int __c = (vector signed int)vec_perm(
  12540.       __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
  12541.                                        8, 9, 10, 11));
  12542.   __c = __builtin_altivec_vsum2sws(__a, __c);
  12543.   return (vector signed int)vec_perm(
  12544.       __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
  12545.                                        8, 9, 10, 11));
  12546. #else
  12547.   return __builtin_altivec_vsum2sws(__a, __b);
  12548. #endif
  12549. }
  12550.  
  12551. /* vec_sums */
  12552.  
  12553. /* The vsumsws instruction has a big-endian bias, so that the second
  12554.    input vector and the result always reference big-endian element 3
  12555.    (little-endian element 0).  For ease of porting the programmer
  12556.    wants element 3 in both cases, so for little endian we must perform
  12557.    some permutes.  */
  12558.  
  12559. static __inline__ vector signed int __attribute__((__always_inline__))
  12560. vec_sums(vector signed int __a, vector signed int __b) {
  12561. #ifdef __LITTLE_ENDIAN__
  12562.   __b = (vector signed int)vec_splat(__b, 3);
  12563.   __b = __builtin_altivec_vsumsws(__a, __b);
  12564.   return (vector signed int)(0, 0, 0, __b[0]);
  12565. #else
  12566.   return __builtin_altivec_vsumsws(__a, __b);
  12567. #endif
  12568. }
  12569.  
  12570. /* vec_vsumsws */
  12571.  
  12572. static __inline__ vector signed int __attribute__((__always_inline__))
  12573. vec_vsumsws(vector signed int __a, vector signed int __b) {
  12574. #ifdef __LITTLE_ENDIAN__
  12575.   __b = (vector signed int)vec_splat(__b, 3);
  12576.   __b = __builtin_altivec_vsumsws(__a, __b);
  12577.   return (vector signed int)(0, 0, 0, __b[0]);
  12578. #else
  12579.   return __builtin_altivec_vsumsws(__a, __b);
  12580. #endif
  12581. }
  12582.  
  12583. /* vec_trunc */
  12584.  
  12585. static __inline__ vector float __ATTRS_o_ai vec_trunc(vector float __a) {
  12586. #ifdef __VSX__
  12587.   return __builtin_vsx_xvrspiz(__a);
  12588. #else
  12589.   return __builtin_altivec_vrfiz(__a);
  12590. #endif
  12591. }
  12592.  
  12593. #ifdef __VSX__
  12594. static __inline__ vector double __ATTRS_o_ai vec_trunc(vector double __a) {
  12595.   return __builtin_vsx_xvrdpiz(__a);
  12596. }
  12597. #endif
  12598.  
  12599. /* vec_roundz */
  12600. static __inline__ vector float __ATTRS_o_ai vec_roundz(vector float __a) {
  12601.   return vec_trunc(__a);
  12602. }
  12603.  
  12604. #ifdef __VSX__
  12605. static __inline__ vector double __ATTRS_o_ai vec_roundz(vector double __a) {
  12606.   return vec_trunc(__a);
  12607. }
  12608. #endif
  12609.  
  12610. /* vec_vrfiz */
  12611.  
  12612. static __inline__ vector float __attribute__((__always_inline__))
  12613. vec_vrfiz(vector float __a) {
  12614.   return __builtin_altivec_vrfiz(__a);
  12615. }
  12616.  
  12617. /* vec_unpackh */
  12618.  
  12619. /* The vector unpack instructions all have a big-endian bias, so for
  12620.    little endian we must reverse the meanings of "high" and "low."  */
  12621. #ifdef __LITTLE_ENDIAN__
  12622. #define vec_vupkhpx(__a) __builtin_altivec_vupklpx((vector short)(__a))
  12623. #define vec_vupklpx(__a) __builtin_altivec_vupkhpx((vector short)(__a))
  12624. #else
  12625. #define vec_vupkhpx(__a) __builtin_altivec_vupkhpx((vector short)(__a))
  12626. #define vec_vupklpx(__a) __builtin_altivec_vupklpx((vector short)(__a))
  12627. #endif
  12628.  
  12629. static __inline__ vector short __ATTRS_o_ai
  12630. vec_unpackh(vector signed char __a) {
  12631. #ifdef __LITTLE_ENDIAN__
  12632.   return __builtin_altivec_vupklsb((vector char)__a);
  12633. #else
  12634.   return __builtin_altivec_vupkhsb((vector char)__a);
  12635. #endif
  12636. }
  12637.  
  12638. static __inline__ vector bool short __ATTRS_o_ai
  12639. vec_unpackh(vector bool char __a) {
  12640. #ifdef __LITTLE_ENDIAN__
  12641.   return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
  12642. #else
  12643.   return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
  12644. #endif
  12645. }
  12646.  
  12647. static __inline__ vector int __ATTRS_o_ai vec_unpackh(vector short __a) {
  12648. #ifdef __LITTLE_ENDIAN__
  12649.   return __builtin_altivec_vupklsh(__a);
  12650. #else
  12651.   return __builtin_altivec_vupkhsh(__a);
  12652. #endif
  12653. }
  12654.  
  12655. static __inline__ vector bool int __ATTRS_o_ai
  12656. vec_unpackh(vector bool short __a) {
  12657. #ifdef __LITTLE_ENDIAN__
  12658.   return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
  12659. #else
  12660.   return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
  12661. #endif
  12662. }
  12663.  
  12664. static __inline__ vector unsigned int __ATTRS_o_ai
  12665. vec_unpackh(vector pixel __a) {
  12666. #ifdef __LITTLE_ENDIAN__
  12667.   return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
  12668. #else
  12669.   return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
  12670. #endif
  12671. }
  12672.  
  12673. #ifdef __POWER8_VECTOR__
  12674. static __inline__ vector long long __ATTRS_o_ai vec_unpackh(vector int __a) {
  12675. #ifdef __LITTLE_ENDIAN__
  12676.   return __builtin_altivec_vupklsw(__a);
  12677. #else
  12678.   return __builtin_altivec_vupkhsw(__a);
  12679. #endif
  12680. }
  12681.  
  12682. static __inline__ vector bool long long __ATTRS_o_ai
  12683. vec_unpackh(vector bool int __a) {
  12684. #ifdef __LITTLE_ENDIAN__
  12685.   return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
  12686. #else
  12687.   return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
  12688. #endif
  12689. }
  12690.  
  12691. static __inline__ vector double __ATTRS_o_ai
  12692. vec_unpackh(vector float __a) {
  12693.   return (vector double)(__a[0], __a[1]);
  12694. }
  12695. #endif
  12696.  
  12697. /* vec_vupkhsb */
  12698.  
  12699. static __inline__ vector short __ATTRS_o_ai
  12700. vec_vupkhsb(vector signed char __a) {
  12701. #ifdef __LITTLE_ENDIAN__
  12702.   return __builtin_altivec_vupklsb((vector char)__a);
  12703. #else
  12704.   return __builtin_altivec_vupkhsb((vector char)__a);
  12705. #endif
  12706. }
  12707.  
  12708. static __inline__ vector bool short __ATTRS_o_ai
  12709. vec_vupkhsb(vector bool char __a) {
  12710. #ifdef __LITTLE_ENDIAN__
  12711.   return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
  12712. #else
  12713.   return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
  12714. #endif
  12715. }
  12716.  
  12717. /* vec_vupkhsh */
  12718.  
  12719. static __inline__ vector int __ATTRS_o_ai vec_vupkhsh(vector short __a) {
  12720. #ifdef __LITTLE_ENDIAN__
  12721.   return __builtin_altivec_vupklsh(__a);
  12722. #else
  12723.   return __builtin_altivec_vupkhsh(__a);
  12724. #endif
  12725. }
  12726.  
  12727. static __inline__ vector bool int __ATTRS_o_ai
  12728. vec_vupkhsh(vector bool short __a) {
  12729. #ifdef __LITTLE_ENDIAN__
  12730.   return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
  12731. #else
  12732.   return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
  12733. #endif
  12734. }
  12735.  
  12736. static __inline__ vector unsigned int __ATTRS_o_ai
  12737. vec_vupkhsh(vector pixel __a) {
  12738. #ifdef __LITTLE_ENDIAN__
  12739.   return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
  12740. #else
  12741.   return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
  12742. #endif
  12743. }
  12744.  
  12745. /* vec_vupkhsw */
  12746.  
  12747. #ifdef __POWER8_VECTOR__
  12748. static __inline__ vector long long __ATTRS_o_ai vec_vupkhsw(vector int __a) {
  12749. #ifdef __LITTLE_ENDIAN__
  12750.   return __builtin_altivec_vupklsw(__a);
  12751. #else
  12752.   return __builtin_altivec_vupkhsw(__a);
  12753. #endif
  12754. }
  12755.  
  12756. static __inline__ vector bool long long __ATTRS_o_ai
  12757. vec_vupkhsw(vector bool int __a) {
  12758. #ifdef __LITTLE_ENDIAN__
  12759.   return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
  12760. #else
  12761.   return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
  12762. #endif
  12763. }
  12764. #endif
  12765.  
  12766. /* vec_unpackl */
  12767.  
  12768. static __inline__ vector short __ATTRS_o_ai
  12769. vec_unpackl(vector signed char __a) {
  12770. #ifdef __LITTLE_ENDIAN__
  12771.   return __builtin_altivec_vupkhsb((vector char)__a);
  12772. #else
  12773.   return __builtin_altivec_vupklsb((vector char)__a);
  12774. #endif
  12775. }
  12776.  
  12777. static __inline__ vector bool short __ATTRS_o_ai
  12778. vec_unpackl(vector bool char __a) {
  12779. #ifdef __LITTLE_ENDIAN__
  12780.   return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
  12781. #else
  12782.   return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
  12783. #endif
  12784. }
  12785.  
  12786. static __inline__ vector int __ATTRS_o_ai vec_unpackl(vector short __a) {
  12787. #ifdef __LITTLE_ENDIAN__
  12788.   return __builtin_altivec_vupkhsh(__a);
  12789. #else
  12790.   return __builtin_altivec_vupklsh(__a);
  12791. #endif
  12792. }
  12793.  
  12794. static __inline__ vector bool int __ATTRS_o_ai
  12795. vec_unpackl(vector bool short __a) {
  12796. #ifdef __LITTLE_ENDIAN__
  12797.   return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
  12798. #else
  12799.   return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
  12800. #endif
  12801. }
  12802.  
  12803. static __inline__ vector unsigned int __ATTRS_o_ai
  12804. vec_unpackl(vector pixel __a) {
  12805. #ifdef __LITTLE_ENDIAN__
  12806.   return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
  12807. #else
  12808.   return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
  12809. #endif
  12810. }
  12811.  
  12812. #ifdef __POWER8_VECTOR__
  12813. static __inline__ vector long long __ATTRS_o_ai vec_unpackl(vector int __a) {
  12814. #ifdef __LITTLE_ENDIAN__
  12815.   return __builtin_altivec_vupkhsw(__a);
  12816. #else
  12817.   return __builtin_altivec_vupklsw(__a);
  12818. #endif
  12819. }
  12820.  
  12821. static __inline__ vector bool long long __ATTRS_o_ai
  12822. vec_unpackl(vector bool int __a) {
  12823. #ifdef __LITTLE_ENDIAN__
  12824.   return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
  12825. #else
  12826.   return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
  12827. #endif
  12828. }
  12829.  
  12830. static __inline__ vector double __ATTRS_o_ai
  12831. vec_unpackl(vector float __a) {
  12832.   return (vector double)(__a[2], __a[3]);
  12833. }
  12834. #endif
  12835.  
  12836. /* vec_vupklsb */
  12837.  
  12838. static __inline__ vector short __ATTRS_o_ai
  12839. vec_vupklsb(vector signed char __a) {
  12840. #ifdef __LITTLE_ENDIAN__
  12841.   return __builtin_altivec_vupkhsb((vector char)__a);
  12842. #else
  12843.   return __builtin_altivec_vupklsb((vector char)__a);
  12844. #endif
  12845. }
  12846.  
  12847. static __inline__ vector bool short __ATTRS_o_ai
  12848. vec_vupklsb(vector bool char __a) {
  12849. #ifdef __LITTLE_ENDIAN__
  12850.   return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
  12851. #else
  12852.   return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
  12853. #endif
  12854. }
  12855.  
  12856. /* vec_vupklsh */
  12857.  
  12858. static __inline__ vector int __ATTRS_o_ai vec_vupklsh(vector short __a) {
  12859. #ifdef __LITTLE_ENDIAN__
  12860.   return __builtin_altivec_vupkhsh(__a);
  12861. #else
  12862.   return __builtin_altivec_vupklsh(__a);
  12863. #endif
  12864. }
  12865.  
  12866. static __inline__ vector bool int __ATTRS_o_ai
  12867. vec_vupklsh(vector bool short __a) {
  12868. #ifdef __LITTLE_ENDIAN__
  12869.   return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
  12870. #else
  12871.   return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
  12872. #endif
  12873. }
  12874.  
  12875. static __inline__ vector unsigned int __ATTRS_o_ai
  12876. vec_vupklsh(vector pixel __a) {
  12877. #ifdef __LITTLE_ENDIAN__
  12878.   return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
  12879. #else
  12880.   return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
  12881. #endif
  12882. }
  12883.  
  12884. /* vec_vupklsw */
  12885.  
  12886. #ifdef __POWER8_VECTOR__
  12887. static __inline__ vector long long __ATTRS_o_ai vec_vupklsw(vector int __a) {
  12888. #ifdef __LITTLE_ENDIAN__
  12889.   return __builtin_altivec_vupkhsw(__a);
  12890. #else
  12891.   return __builtin_altivec_vupklsw(__a);
  12892. #endif
  12893. }
  12894.  
  12895. static __inline__ vector bool long long __ATTRS_o_ai
  12896. vec_vupklsw(vector bool int __a) {
  12897. #ifdef __LITTLE_ENDIAN__
  12898.   return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
  12899. #else
  12900.   return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
  12901. #endif
  12902. }
  12903. #endif
  12904.  
  12905. /* vec_vsx_ld */
  12906.  
  12907. #ifdef __VSX__
  12908.  
  12909. static __inline__ vector bool int __ATTRS_o_ai
  12910. vec_vsx_ld(int __a, const vector bool int *__b) {
  12911.   return (vector bool int)__builtin_vsx_lxvw4x(__a, __b);
  12912. }
  12913.  
  12914. static __inline__ vector signed int __ATTRS_o_ai
  12915. vec_vsx_ld(int __a, const vector signed int *__b) {
  12916.   return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
  12917. }
  12918.  
  12919. static __inline__ vector signed int __ATTRS_o_ai
  12920. vec_vsx_ld(int __a, const signed int *__b) {
  12921.   return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
  12922. }
  12923.  
  12924. static __inline__ vector unsigned int __ATTRS_o_ai
  12925. vec_vsx_ld(int __a, const vector unsigned int *__b) {
  12926.   return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
  12927. }
  12928.  
  12929. static __inline__ vector unsigned int __ATTRS_o_ai
  12930. vec_vsx_ld(int __a, const unsigned int *__b) {
  12931.   return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
  12932. }
  12933.  
  12934. static __inline__ vector float __ATTRS_o_ai
  12935. vec_vsx_ld(int __a, const vector float *__b) {
  12936.   return (vector float)__builtin_vsx_lxvw4x(__a, __b);
  12937. }
  12938.  
  12939. static __inline__ vector float __ATTRS_o_ai vec_vsx_ld(int __a,
  12940.                                                        const float *__b) {
  12941.   return (vector float)__builtin_vsx_lxvw4x(__a, __b);
  12942. }
  12943.  
  12944. static __inline__ vector signed long long __ATTRS_o_ai
  12945. vec_vsx_ld(int __a, const vector signed long long *__b) {
  12946.   return (vector signed long long)__builtin_vsx_lxvd2x(__a, __b);
  12947. }
  12948.  
  12949. static __inline__ vector unsigned long long __ATTRS_o_ai
  12950. vec_vsx_ld(int __a, const vector unsigned long long *__b) {
  12951.   return (vector unsigned long long)__builtin_vsx_lxvd2x(__a, __b);
  12952. }
  12953.  
  12954. static __inline__ vector double __ATTRS_o_ai
  12955. vec_vsx_ld(int __a, const vector double *__b) {
  12956.   return (vector double)__builtin_vsx_lxvd2x(__a, __b);
  12957. }
  12958.  
  12959. static __inline__ vector double __ATTRS_o_ai
  12960. vec_vsx_ld(int __a, const double *__b) {
  12961.   return (vector double)__builtin_vsx_lxvd2x(__a, __b);
  12962. }
  12963.  
  12964. static __inline__ vector bool short __ATTRS_o_ai
  12965. vec_vsx_ld(int __a, const vector bool short *__b) {
  12966.   return (vector bool short)__builtin_vsx_lxvw4x(__a, __b);
  12967. }
  12968.  
  12969. static __inline__ vector signed short __ATTRS_o_ai
  12970. vec_vsx_ld(int __a, const vector signed short *__b) {
  12971.   return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
  12972. }
  12973.  
  12974. static __inline__ vector signed short __ATTRS_o_ai
  12975. vec_vsx_ld(int __a, const signed short *__b) {
  12976.   return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
  12977. }
  12978.  
  12979. static __inline__ vector unsigned short __ATTRS_o_ai
  12980. vec_vsx_ld(int __a, const vector unsigned short *__b) {
  12981.   return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
  12982. }
  12983.  
  12984. static __inline__ vector unsigned short __ATTRS_o_ai
  12985. vec_vsx_ld(int __a, const unsigned short *__b) {
  12986.   return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
  12987. }
  12988.  
  12989. static __inline__ vector bool char __ATTRS_o_ai
  12990. vec_vsx_ld(int __a, const vector bool char *__b) {
  12991.   return (vector bool char)__builtin_vsx_lxvw4x(__a, __b);
  12992. }
  12993.  
  12994. static __inline__ vector signed char __ATTRS_o_ai
  12995. vec_vsx_ld(int __a, const vector signed char *__b) {
  12996.   return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
  12997. }
  12998.  
  12999. static __inline__ vector signed char __ATTRS_o_ai
  13000. vec_vsx_ld(int __a, const signed char *__b) {
  13001.   return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
  13002. }
  13003.  
  13004. static __inline__ vector unsigned char __ATTRS_o_ai
  13005. vec_vsx_ld(int __a, const vector unsigned char *__b) {
  13006.   return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
  13007. }
  13008.  
  13009. static __inline__ vector unsigned char __ATTRS_o_ai
  13010. vec_vsx_ld(int __a, const unsigned char *__b) {
  13011.   return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
  13012. }
  13013.  
  13014. #endif
  13015.  
  13016. /* vec_vsx_st */
  13017.  
  13018. #ifdef __VSX__
  13019.  
  13020. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
  13021.                                                vector bool int *__c) {
  13022.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13023. }
  13024.  
  13025. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
  13026.                                                signed int *__c) {
  13027.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13028. }
  13029.  
  13030. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
  13031.                                                unsigned int *__c) {
  13032.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13033. }
  13034.  
  13035. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
  13036.                                                vector signed int *__c) {
  13037.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13038. }
  13039.  
  13040. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
  13041.                                                signed int *__c) {
  13042.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13043. }
  13044.  
  13045. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
  13046.                                                vector unsigned int *__c) {
  13047.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13048. }
  13049.  
  13050. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
  13051.                                                unsigned int *__c) {
  13052.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13053. }
  13054.  
  13055. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
  13056.                                                vector float *__c) {
  13057.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13058. }
  13059.  
  13060. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
  13061.                                                float *__c) {
  13062.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13063. }
  13064.  
  13065. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed long long __a,
  13066.                                                int __b,
  13067.                                                vector signed long long *__c) {
  13068.   __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
  13069. }
  13070.  
  13071. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned long long __a,
  13072.                                                int __b,
  13073.                                                vector unsigned long long *__c) {
  13074.   __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
  13075. }
  13076.  
  13077. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
  13078.                                                vector double *__c) {
  13079.   __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
  13080. }
  13081.  
  13082. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
  13083.                                                double *__c) {
  13084.   __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
  13085. }
  13086.  
  13087. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
  13088.                                                vector bool short *__c) {
  13089.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13090. }
  13091.  
  13092. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
  13093.                                                signed short *__c) {
  13094.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13095. }
  13096.  
  13097. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
  13098.                                                unsigned short *__c) {
  13099.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13100. }
  13101. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
  13102.                                                vector signed short *__c) {
  13103.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13104. }
  13105.  
  13106. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
  13107.                                                signed short *__c) {
  13108.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13109. }
  13110.  
  13111. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
  13112.                                                int __b,
  13113.                                                vector unsigned short *__c) {
  13114.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13115. }
  13116.  
  13117. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
  13118.                                                int __b, unsigned short *__c) {
  13119.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13120. }
  13121.  
  13122. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
  13123.                                                vector bool char *__c) {
  13124.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13125. }
  13126.  
  13127. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
  13128.                                                signed char *__c) {
  13129.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13130. }
  13131.  
  13132. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
  13133.                                                unsigned char *__c) {
  13134.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13135. }
  13136.  
  13137. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
  13138.                                                vector signed char *__c) {
  13139.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13140. }
  13141.  
  13142. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
  13143.                                                signed char *__c) {
  13144.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13145. }
  13146.  
  13147. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
  13148.                                                int __b,
  13149.                                                vector unsigned char *__c) {
  13150.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13151. }
  13152.  
  13153. static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
  13154.                                                int __b, unsigned char *__c) {
  13155.   __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
  13156. }
  13157.  
  13158. #endif
  13159.  
  13160. #ifdef __VSX__
  13161. #define vec_xxpermdi __builtin_vsx_xxpermdi
  13162. #define vec_xxsldwi __builtin_vsx_xxsldwi
  13163. #define vec_permi(__a, __b, __c)                                               \
  13164.   _Generic((__a), vector signed long long                                      \
  13165.            : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1),       \
  13166.                                      (((__c)&0x1) + 2)),                       \
  13167.              vector unsigned long long                                         \
  13168.            : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1),       \
  13169.                                      (((__c)&0x1) + 2)),                       \
  13170.              vector double                                                     \
  13171.            : __builtin_shufflevector((__a), (__b), (((__c) >> 1) & 0x1),       \
  13172.                                      (((__c)&0x1) + 2)))
  13173. #endif
  13174.  
  13175. /* vec_xor */
  13176.  
  13177. #define __builtin_altivec_vxor vec_xor
  13178.  
  13179. static __inline__ vector signed char __ATTRS_o_ai
  13180. vec_xor(vector signed char __a, vector signed char __b) {
  13181.   return __a ^ __b;
  13182. }
  13183.  
  13184. static __inline__ vector signed char __ATTRS_o_ai
  13185. vec_xor(vector bool char __a, vector signed char __b) {
  13186.   return (vector signed char)__a ^ __b;
  13187. }
  13188.  
  13189. static __inline__ vector signed char __ATTRS_o_ai
  13190. vec_xor(vector signed char __a, vector bool char __b) {
  13191.   return __a ^ (vector signed char)__b;
  13192. }
  13193.  
  13194. static __inline__ vector unsigned char __ATTRS_o_ai
  13195. vec_xor(vector unsigned char __a, vector unsigned char __b) {
  13196.   return __a ^ __b;
  13197. }
  13198.  
  13199. static __inline__ vector unsigned char __ATTRS_o_ai
  13200. vec_xor(vector bool char __a, vector unsigned char __b) {
  13201.   return (vector unsigned char)__a ^ __b;
  13202. }
  13203.  
  13204. static __inline__ vector unsigned char __ATTRS_o_ai
  13205. vec_xor(vector unsigned char __a, vector bool char __b) {
  13206.   return __a ^ (vector unsigned char)__b;
  13207. }
  13208.  
  13209. static __inline__ vector bool char __ATTRS_o_ai vec_xor(vector bool char __a,
  13210.                                                         vector bool char __b) {
  13211.   return __a ^ __b;
  13212. }
  13213.  
  13214. static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
  13215.                                                     vector short __b) {
  13216.   return __a ^ __b;
  13217. }
  13218.  
  13219. static __inline__ vector short __ATTRS_o_ai vec_xor(vector bool short __a,
  13220.                                                     vector short __b) {
  13221.   return (vector short)__a ^ __b;
  13222. }
  13223.  
  13224. static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
  13225.                                                     vector bool short __b) {
  13226.   return __a ^ (vector short)__b;
  13227. }
  13228.  
  13229. static __inline__ vector unsigned short __ATTRS_o_ai
  13230. vec_xor(vector unsigned short __a, vector unsigned short __b) {
  13231.   return __a ^ __b;
  13232. }
  13233.  
  13234. static __inline__ vector unsigned short __ATTRS_o_ai
  13235. vec_xor(vector bool short __a, vector unsigned short __b) {
  13236.   return (vector unsigned short)__a ^ __b;
  13237. }
  13238.  
  13239. static __inline__ vector unsigned short __ATTRS_o_ai
  13240. vec_xor(vector unsigned short __a, vector bool short __b) {
  13241.   return __a ^ (vector unsigned short)__b;
  13242. }
  13243.  
  13244. static __inline__ vector bool short __ATTRS_o_ai
  13245. vec_xor(vector bool short __a, vector bool short __b) {
  13246.   return __a ^ __b;
  13247. }
  13248.  
  13249. static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
  13250.                                                   vector int __b) {
  13251.   return __a ^ __b;
  13252. }
  13253.  
  13254. static __inline__ vector int __ATTRS_o_ai vec_xor(vector bool int __a,
  13255.                                                   vector int __b) {
  13256.   return (vector int)__a ^ __b;
  13257. }
  13258.  
  13259. static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
  13260.                                                   vector bool int __b) {
  13261.   return __a ^ (vector int)__b;
  13262. }
  13263.  
  13264. static __inline__ vector unsigned int __ATTRS_o_ai
  13265. vec_xor(vector unsigned int __a, vector unsigned int __b) {
  13266.   return __a ^ __b;
  13267. }
  13268.  
  13269. static __inline__ vector unsigned int __ATTRS_o_ai
  13270. vec_xor(vector bool int __a, vector unsigned int __b) {
  13271.   return (vector unsigned int)__a ^ __b;
  13272. }
  13273.  
  13274. static __inline__ vector unsigned int __ATTRS_o_ai
  13275. vec_xor(vector unsigned int __a, vector bool int __b) {
  13276.   return __a ^ (vector unsigned int)__b;
  13277. }
  13278.  
  13279. static __inline__ vector bool int __ATTRS_o_ai vec_xor(vector bool int __a,
  13280.                                                        vector bool int __b) {
  13281.   return __a ^ __b;
  13282. }
  13283.  
  13284. static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
  13285.                                                     vector float __b) {
  13286.   vector unsigned int __res =
  13287.       (vector unsigned int)__a ^ (vector unsigned int)__b;
  13288.   return (vector float)__res;
  13289. }
  13290.  
  13291. static __inline__ vector float __ATTRS_o_ai vec_xor(vector bool int __a,
  13292.                                                     vector float __b) {
  13293.   vector unsigned int __res =
  13294.       (vector unsigned int)__a ^ (vector unsigned int)__b;
  13295.   return (vector float)__res;
  13296. }
  13297.  
  13298. static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
  13299.                                                     vector bool int __b) {
  13300.   vector unsigned int __res =
  13301.       (vector unsigned int)__a ^ (vector unsigned int)__b;
  13302.   return (vector float)__res;
  13303. }
  13304.  
  13305. #ifdef __VSX__
  13306. static __inline__ vector signed long long __ATTRS_o_ai
  13307. vec_xor(vector signed long long __a, vector signed long long __b) {
  13308.   return __a ^ __b;
  13309. }
  13310.  
  13311. static __inline__ vector signed long long __ATTRS_o_ai
  13312. vec_xor(vector bool long long __a, vector signed long long __b) {
  13313.   return (vector signed long long)__a ^ __b;
  13314. }
  13315.  
  13316. static __inline__ vector signed long long __ATTRS_o_ai
  13317. vec_xor(vector signed long long __a, vector bool long long __b) {
  13318.   return __a ^ (vector signed long long)__b;
  13319. }
  13320.  
  13321. static __inline__ vector unsigned long long __ATTRS_o_ai
  13322. vec_xor(vector unsigned long long __a, vector unsigned long long __b) {
  13323.   return __a ^ __b;
  13324. }
  13325.  
  13326. static __inline__ vector unsigned long long __ATTRS_o_ai
  13327. vec_xor(vector bool long long __a, vector unsigned long long __b) {
  13328.   return (vector unsigned long long)__a ^ __b;
  13329. }
  13330.  
  13331. static __inline__ vector unsigned long long __ATTRS_o_ai
  13332. vec_xor(vector unsigned long long __a, vector bool long long __b) {
  13333.   return __a ^ (vector unsigned long long)__b;
  13334. }
  13335.  
  13336. static __inline__ vector bool long long __ATTRS_o_ai
  13337. vec_xor(vector bool long long __a, vector bool long long __b) {
  13338.   return __a ^ __b;
  13339. }
  13340.  
  13341. static __inline__ vector double __ATTRS_o_ai vec_xor(vector double __a,
  13342.                                                      vector double __b) {
  13343.   return (vector double)((vector unsigned long long)__a ^
  13344.                          (vector unsigned long long)__b);
  13345. }
  13346.  
  13347. static __inline__ vector double __ATTRS_o_ai
  13348. vec_xor(vector double __a, vector bool long long __b) {
  13349.   return (vector double)((vector unsigned long long)__a ^
  13350.                          (vector unsigned long long)__b);
  13351. }
  13352.  
  13353. static __inline__ vector double __ATTRS_o_ai vec_xor(vector bool long long __a,
  13354.                                                      vector double __b) {
  13355.   return (vector double)((vector unsigned long long)__a ^
  13356.                          (vector unsigned long long)__b);
  13357. }
  13358. #endif
  13359.  
  13360. /* vec_vxor */
  13361.  
  13362. static __inline__ vector signed char __ATTRS_o_ai
  13363. vec_vxor(vector signed char __a, vector signed char __b) {
  13364.   return __a ^ __b;
  13365. }
  13366.  
  13367. static __inline__ vector signed char __ATTRS_o_ai
  13368. vec_vxor(vector bool char __a, vector signed char __b) {
  13369.   return (vector signed char)__a ^ __b;
  13370. }
  13371.  
  13372. static __inline__ vector signed char __ATTRS_o_ai
  13373. vec_vxor(vector signed char __a, vector bool char __b) {
  13374.   return __a ^ (vector signed char)__b;
  13375. }
  13376.  
  13377. static __inline__ vector unsigned char __ATTRS_o_ai
  13378. vec_vxor(vector unsigned char __a, vector unsigned char __b) {
  13379.   return __a ^ __b;
  13380. }
  13381.  
  13382. static __inline__ vector unsigned char __ATTRS_o_ai
  13383. vec_vxor(vector bool char __a, vector unsigned char __b) {
  13384.   return (vector unsigned char)__a ^ __b;
  13385. }
  13386.  
  13387. static __inline__ vector unsigned char __ATTRS_o_ai
  13388. vec_vxor(vector unsigned char __a, vector bool char __b) {
  13389.   return __a ^ (vector unsigned char)__b;
  13390. }
  13391.  
  13392. static __inline__ vector bool char __ATTRS_o_ai vec_vxor(vector bool char __a,
  13393.                                                          vector bool char __b) {
  13394.   return __a ^ __b;
  13395. }
  13396.  
  13397. static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
  13398.                                                      vector short __b) {
  13399.   return __a ^ __b;
  13400. }
  13401.  
  13402. static __inline__ vector short __ATTRS_o_ai vec_vxor(vector bool short __a,
  13403.                                                      vector short __b) {
  13404.   return (vector short)__a ^ __b;
  13405. }
  13406.  
  13407. static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
  13408.                                                      vector bool short __b) {
  13409.   return __a ^ (vector short)__b;
  13410. }
  13411.  
  13412. static __inline__ vector unsigned short __ATTRS_o_ai
  13413. vec_vxor(vector unsigned short __a, vector unsigned short __b) {
  13414.   return __a ^ __b;
  13415. }
  13416.  
  13417. static __inline__ vector unsigned short __ATTRS_o_ai
  13418. vec_vxor(vector bool short __a, vector unsigned short __b) {
  13419.   return (vector unsigned short)__a ^ __b;
  13420. }
  13421.  
  13422. static __inline__ vector unsigned short __ATTRS_o_ai
  13423. vec_vxor(vector unsigned short __a, vector bool short __b) {
  13424.   return __a ^ (vector unsigned short)__b;
  13425. }
  13426.  
  13427. static __inline__ vector bool short __ATTRS_o_ai
  13428. vec_vxor(vector bool short __a, vector bool short __b) {
  13429.   return __a ^ __b;
  13430. }
  13431.  
  13432. static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
  13433.                                                    vector int __b) {
  13434.   return __a ^ __b;
  13435. }
  13436.  
  13437. static __inline__ vector int __ATTRS_o_ai vec_vxor(vector bool int __a,
  13438.                                                    vector int __b) {
  13439.   return (vector int)__a ^ __b;
  13440. }
  13441.  
  13442. static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
  13443.                                                    vector bool int __b) {
  13444.   return __a ^ (vector int)__b;
  13445. }
  13446.  
  13447. static __inline__ vector unsigned int __ATTRS_o_ai
  13448. vec_vxor(vector unsigned int __a, vector unsigned int __b) {
  13449.   return __a ^ __b;
  13450. }
  13451.  
  13452. static __inline__ vector unsigned int __ATTRS_o_ai
  13453. vec_vxor(vector bool int __a, vector unsigned int __b) {
  13454.   return (vector unsigned int)__a ^ __b;
  13455. }
  13456.  
  13457. static __inline__ vector unsigned int __ATTRS_o_ai
  13458. vec_vxor(vector unsigned int __a, vector bool int __b) {
  13459.   return __a ^ (vector unsigned int)__b;
  13460. }
  13461.  
  13462. static __inline__ vector bool int __ATTRS_o_ai vec_vxor(vector bool int __a,
  13463.                                                         vector bool int __b) {
  13464.   return __a ^ __b;
  13465. }
  13466.  
  13467. static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
  13468.                                                      vector float __b) {
  13469.   vector unsigned int __res =
  13470.       (vector unsigned int)__a ^ (vector unsigned int)__b;
  13471.   return (vector float)__res;
  13472. }
  13473.  
  13474. static __inline__ vector float __ATTRS_o_ai vec_vxor(vector bool int __a,
  13475.                                                      vector float __b) {
  13476.   vector unsigned int __res =
  13477.       (vector unsigned int)__a ^ (vector unsigned int)__b;
  13478.   return (vector float)__res;
  13479. }
  13480.  
  13481. static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
  13482.                                                      vector bool int __b) {
  13483.   vector unsigned int __res =
  13484.       (vector unsigned int)__a ^ (vector unsigned int)__b;
  13485.   return (vector float)__res;
  13486. }
  13487.  
  13488. #ifdef __VSX__
  13489. static __inline__ vector signed long long __ATTRS_o_ai
  13490. vec_vxor(vector signed long long __a, vector signed long long __b) {
  13491.   return __a ^ __b;
  13492. }
  13493.  
  13494. static __inline__ vector signed long long __ATTRS_o_ai
  13495. vec_vxor(vector bool long long __a, vector signed long long __b) {
  13496.   return (vector signed long long)__a ^ __b;
  13497. }
  13498.  
  13499. static __inline__ vector signed long long __ATTRS_o_ai
  13500. vec_vxor(vector signed long long __a, vector bool long long __b) {
  13501.   return __a ^ (vector signed long long)__b;
  13502. }
  13503.  
  13504. static __inline__ vector unsigned long long __ATTRS_o_ai
  13505. vec_vxor(vector unsigned long long __a, vector unsigned long long __b) {
  13506.   return __a ^ __b;
  13507. }
  13508.  
  13509. static __inline__ vector unsigned long long __ATTRS_o_ai
  13510. vec_vxor(vector bool long long __a, vector unsigned long long __b) {
  13511.   return (vector unsigned long long)__a ^ __b;
  13512. }
  13513.  
  13514. static __inline__ vector unsigned long long __ATTRS_o_ai
  13515. vec_vxor(vector unsigned long long __a, vector bool long long __b) {
  13516.   return __a ^ (vector unsigned long long)__b;
  13517. }
  13518.  
  13519. static __inline__ vector bool long long __ATTRS_o_ai
  13520. vec_vxor(vector bool long long __a, vector bool long long __b) {
  13521.   return __a ^ __b;
  13522. }
  13523. #endif
  13524.  
  13525. /* ------------------------ extensions for CBEA ----------------------------- */
  13526.  
  13527. /* vec_extract */
  13528.  
  13529. static __inline__ signed char __ATTRS_o_ai vec_extract(vector signed char __a,
  13530.                                                        signed int __b) {
  13531.   return __a[__b & 0xf];
  13532. }
  13533.  
  13534. static __inline__ unsigned char __ATTRS_o_ai
  13535. vec_extract(vector unsigned char __a, signed int __b) {
  13536.   return __a[__b & 0xf];
  13537. }
  13538.  
  13539. static __inline__ unsigned char __ATTRS_o_ai vec_extract(vector bool char __a,
  13540.                                                          signed int __b) {
  13541.   return __a[__b & 0xf];
  13542. }
  13543.  
  13544. static __inline__ signed short __ATTRS_o_ai vec_extract(vector signed short __a,
  13545.                                                         signed int __b) {
  13546.   return __a[__b & 0x7];
  13547. }
  13548.  
  13549. static __inline__ unsigned short __ATTRS_o_ai
  13550. vec_extract(vector unsigned short __a, signed int __b) {
  13551.   return __a[__b & 0x7];
  13552. }
  13553.  
  13554. static __inline__ unsigned short __ATTRS_o_ai vec_extract(vector bool short __a,
  13555.                                                           signed int __b) {
  13556.   return __a[__b & 0x7];
  13557. }
  13558.  
  13559. static __inline__ signed int __ATTRS_o_ai vec_extract(vector signed int __a,
  13560.                                                       signed int __b) {
  13561.   return __a[__b & 0x3];
  13562. }
  13563.  
  13564. static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector unsigned int __a,
  13565.                                                         signed int __b) {
  13566.   return __a[__b & 0x3];
  13567. }
  13568.  
  13569. static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector bool int __a,
  13570.                                                         signed int __b) {
  13571.   return __a[__b & 0x3];
  13572. }
  13573.  
  13574. #ifdef __VSX__
  13575. static __inline__ signed long long __ATTRS_o_ai
  13576. vec_extract(vector signed long long __a, signed int __b) {
  13577.   return __a[__b & 0x1];
  13578. }
  13579.  
  13580. static __inline__ unsigned long long __ATTRS_o_ai
  13581. vec_extract(vector unsigned long long __a, signed int __b) {
  13582.   return __a[__b & 0x1];
  13583. }
  13584.  
  13585. static __inline__ unsigned long long __ATTRS_o_ai
  13586. vec_extract(vector bool long long __a, signed int __b) {
  13587.   return __a[__b & 0x1];
  13588. }
  13589.  
  13590. static __inline__ double __ATTRS_o_ai vec_extract(vector double __a,
  13591.                                                   signed int __b) {
  13592.   return __a[__b & 0x1];
  13593. }
  13594. #endif
  13595.  
  13596. static __inline__ float __ATTRS_o_ai vec_extract(vector float __a,
  13597.                                                  signed int __b) {
  13598.   return __a[__b & 0x3];
  13599. }
  13600.  
  13601. #ifdef __POWER9_VECTOR__
  13602.  
  13603. #define vec_insert4b __builtin_vsx_insertword
  13604. #define vec_extract4b __builtin_vsx_extractuword
  13605.  
  13606. /* vec_extract_exp */
  13607.  
  13608. static __inline__ vector unsigned int __ATTRS_o_ai
  13609. vec_extract_exp(vector float __a) {
  13610.   return __builtin_vsx_xvxexpsp(__a);
  13611. }
  13612.  
  13613. static __inline__ vector unsigned long long __ATTRS_o_ai
  13614. vec_extract_exp(vector double __a) {
  13615.   return __builtin_vsx_xvxexpdp(__a);
  13616. }
  13617.  
  13618. /* vec_extract_sig */
  13619.  
  13620. static __inline__ vector unsigned int __ATTRS_o_ai
  13621. vec_extract_sig(vector float __a) {
  13622.   return __builtin_vsx_xvxsigsp(__a);
  13623. }
  13624.  
  13625. static __inline__ vector unsigned long long __ATTRS_o_ai
  13626. vec_extract_sig (vector double __a) {
  13627.   return __builtin_vsx_xvxsigdp(__a);
  13628. }
  13629.  
  13630. static __inline__ vector float __ATTRS_o_ai
  13631. vec_extract_fp32_from_shorth(vector unsigned short __a) {
  13632.   vector unsigned short __b =
  13633. #ifdef __LITTLE_ENDIAN__
  13634.             __builtin_shufflevector(__a, __a, 0, -1, 1, -1, 2, -1, 3, -1);
  13635. #else
  13636.             __builtin_shufflevector(__a, __a, -1, 0, -1, 1, -1, 2, -1, 3);
  13637. #endif
  13638.   return __builtin_vsx_xvcvhpsp(__b);
  13639. }
  13640.  
  13641. static __inline__ vector float __ATTRS_o_ai
  13642. vec_extract_fp32_from_shortl(vector unsigned short __a) {
  13643.   vector unsigned short __b =
  13644. #ifdef __LITTLE_ENDIAN__
  13645.             __builtin_shufflevector(__a, __a, 4, -1, 5, -1, 6, -1, 7, -1);
  13646. #else
  13647.             __builtin_shufflevector(__a, __a, -1, 4, -1, 5, -1, 6, -1, 7);
  13648. #endif
  13649.   return __builtin_vsx_xvcvhpsp(__b);
  13650. }
  13651. #endif /* __POWER9_VECTOR__ */
  13652.  
  13653. /* vec_insert */
  13654.  
  13655. static __inline__ vector signed char __ATTRS_o_ai
  13656. vec_insert(signed char __a, vector signed char __b, int __c) {
  13657.   __b[__c & 0xF] = __a;
  13658.   return __b;
  13659. }
  13660.  
  13661. static __inline__ vector unsigned char __ATTRS_o_ai
  13662. vec_insert(unsigned char __a, vector unsigned char __b, int __c) {
  13663.   __b[__c & 0xF] = __a;
  13664.   return __b;
  13665. }
  13666.  
  13667. static __inline__ vector bool char __ATTRS_o_ai vec_insert(unsigned char __a,
  13668.                                                            vector bool char __b,
  13669.                                                            int __c) {
  13670.   __b[__c & 0xF] = __a;
  13671.   return __b;
  13672. }
  13673.  
  13674. static __inline__ vector signed short __ATTRS_o_ai
  13675. vec_insert(signed short __a, vector signed short __b, int __c) {
  13676.   __b[__c & 0x7] = __a;
  13677.   return __b;
  13678. }
  13679.  
  13680. static __inline__ vector unsigned short __ATTRS_o_ai
  13681. vec_insert(unsigned short __a, vector unsigned short __b, int __c) {
  13682.   __b[__c & 0x7] = __a;
  13683.   return __b;
  13684. }
  13685.  
  13686. static __inline__ vector bool short __ATTRS_o_ai
  13687. vec_insert(unsigned short __a, vector bool short __b, int __c) {
  13688.   __b[__c & 0x7] = __a;
  13689.   return __b;
  13690. }
  13691.  
  13692. static __inline__ vector signed int __ATTRS_o_ai
  13693. vec_insert(signed int __a, vector signed int __b, int __c) {
  13694.   __b[__c & 0x3] = __a;
  13695.   return __b;
  13696. }
  13697.  
  13698. static __inline__ vector unsigned int __ATTRS_o_ai
  13699. vec_insert(unsigned int __a, vector unsigned int __b, int __c) {
  13700.   __b[__c & 0x3] = __a;
  13701.   return __b;
  13702. }
  13703.  
  13704. static __inline__ vector bool int __ATTRS_o_ai vec_insert(unsigned int __a,
  13705.                                                           vector bool int __b,
  13706.                                                           int __c) {
  13707.   __b[__c & 0x3] = __a;
  13708.   return __b;
  13709. }
  13710.  
  13711. #ifdef __VSX__
  13712. static __inline__ vector signed long long __ATTRS_o_ai
  13713. vec_insert(signed long long __a, vector signed long long __b, int __c) {
  13714.   __b[__c & 0x1] = __a;
  13715.   return __b;
  13716. }
  13717.  
  13718. static __inline__ vector unsigned long long __ATTRS_o_ai
  13719. vec_insert(unsigned long long __a, vector unsigned long long __b, int __c) {
  13720.   __b[__c & 0x1] = __a;
  13721.   return __b;
  13722. }
  13723.  
  13724. static __inline__ vector bool long long __ATTRS_o_ai
  13725. vec_insert(unsigned long long __a, vector bool long long __b, int __c) {
  13726.   __b[__c & 0x1] = __a;
  13727.   return __b;
  13728. }
  13729. static __inline__ vector double __ATTRS_o_ai vec_insert(double __a,
  13730.                                                         vector double __b,
  13731.                                                         int __c) {
  13732.   __b[__c & 0x1] = __a;
  13733.   return __b;
  13734. }
  13735. #endif
  13736.  
  13737. static __inline__ vector float __ATTRS_o_ai vec_insert(float __a,
  13738.                                                        vector float __b,
  13739.                                                        int __c) {
  13740.   __b[__c & 0x3] = __a;
  13741.   return __b;
  13742. }
  13743.  
  13744. /* vec_lvlx */
  13745.  
  13746. static __inline__ vector signed char __ATTRS_o_ai
  13747. vec_lvlx(int __a, const signed char *__b) {
  13748.   return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
  13749.                   vec_lvsl(__a, __b));
  13750. }
  13751.  
  13752. static __inline__ vector signed char __ATTRS_o_ai
  13753. vec_lvlx(int __a, const vector signed char *__b) {
  13754.   return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
  13755.                   vec_lvsl(__a, (unsigned char *)__b));
  13756. }
  13757.  
  13758. static __inline__ vector unsigned char __ATTRS_o_ai
  13759. vec_lvlx(int __a, const unsigned char *__b) {
  13760.   return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
  13761.                   vec_lvsl(__a, __b));
  13762. }
  13763.  
  13764. static __inline__ vector unsigned char __ATTRS_o_ai
  13765. vec_lvlx(int __a, const vector unsigned char *__b) {
  13766.   return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
  13767.                   vec_lvsl(__a, (unsigned char *)__b));
  13768. }
  13769.  
  13770. static __inline__ vector bool char __ATTRS_o_ai
  13771. vec_lvlx(int __a, const vector bool char *__b) {
  13772.   return vec_perm(vec_ld(__a, __b), (vector bool char)(0),
  13773.                   vec_lvsl(__a, (unsigned char *)__b));
  13774. }
  13775.  
  13776. static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
  13777.                                                      const short *__b) {
  13778.   return vec_perm(vec_ld(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
  13779. }
  13780.  
  13781. static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
  13782.                                                      const vector short *__b) {
  13783.   return vec_perm(vec_ld(__a, __b), (vector short)(0),
  13784.                   vec_lvsl(__a, (unsigned char *)__b));
  13785. }
  13786.  
  13787. static __inline__ vector unsigned short __ATTRS_o_ai
  13788. vec_lvlx(int __a, const unsigned short *__b) {
  13789.   return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
  13790.                   vec_lvsl(__a, __b));
  13791. }
  13792.  
  13793. static __inline__ vector unsigned short __ATTRS_o_ai
  13794. vec_lvlx(int __a, const vector unsigned short *__b) {
  13795.   return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
  13796.                   vec_lvsl(__a, (unsigned char *)__b));
  13797. }
  13798.  
  13799. static __inline__ vector bool short __ATTRS_o_ai
  13800. vec_lvlx(int __a, const vector bool short *__b) {
  13801.   return vec_perm(vec_ld(__a, __b), (vector bool short)(0),
  13802.                   vec_lvsl(__a, (unsigned char *)__b));
  13803. }
  13804.  
  13805. static __inline__ vector pixel __ATTRS_o_ai vec_lvlx(int __a,
  13806.                                                      const vector pixel *__b) {
  13807.   return vec_perm(vec_ld(__a, __b), (vector pixel)(0),
  13808.                   vec_lvsl(__a, (unsigned char *)__b));
  13809. }
  13810.  
  13811. static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a, const int *__b) {
  13812.   return vec_perm(vec_ld(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
  13813. }
  13814.  
  13815. static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a,
  13816.                                                    const vector int *__b) {
  13817.   return vec_perm(vec_ld(__a, __b), (vector int)(0),
  13818.                   vec_lvsl(__a, (unsigned char *)__b));
  13819. }
  13820.  
  13821. static __inline__ vector unsigned int __ATTRS_o_ai
  13822. vec_lvlx(int __a, const unsigned int *__b) {
  13823.   return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
  13824.                   vec_lvsl(__a, __b));
  13825. }
  13826.  
  13827. static __inline__ vector unsigned int __ATTRS_o_ai
  13828. vec_lvlx(int __a, const vector unsigned int *__b) {
  13829.   return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
  13830.                   vec_lvsl(__a, (unsigned char *)__b));
  13831. }
  13832.  
  13833. static __inline__ vector bool int __ATTRS_o_ai
  13834. vec_lvlx(int __a, const vector bool int *__b) {
  13835.   return vec_perm(vec_ld(__a, __b), (vector bool int)(0),
  13836.                   vec_lvsl(__a, (unsigned char *)__b));
  13837. }
  13838.  
  13839. static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
  13840.                                                      const float *__b) {
  13841.   return vec_perm(vec_ld(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
  13842. }
  13843.  
  13844. static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
  13845.                                                      const vector float *__b) {
  13846.   return vec_perm(vec_ld(__a, __b), (vector float)(0),
  13847.                   vec_lvsl(__a, (unsigned char *)__b));
  13848. }
  13849.  
  13850. /* vec_lvlxl */
  13851.  
  13852. static __inline__ vector signed char __ATTRS_o_ai
  13853. vec_lvlxl(int __a, const signed char *__b) {
  13854.   return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
  13855.                   vec_lvsl(__a, __b));
  13856. }
  13857.  
  13858. static __inline__ vector signed char __ATTRS_o_ai
  13859. vec_lvlxl(int __a, const vector signed char *__b) {
  13860.   return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
  13861.                   vec_lvsl(__a, (unsigned char *)__b));
  13862. }
  13863.  
  13864. static __inline__ vector unsigned char __ATTRS_o_ai
  13865. vec_lvlxl(int __a, const unsigned char *__b) {
  13866.   return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
  13867.                   vec_lvsl(__a, __b));
  13868. }
  13869.  
  13870. static __inline__ vector unsigned char __ATTRS_o_ai
  13871. vec_lvlxl(int __a, const vector unsigned char *__b) {
  13872.   return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
  13873.                   vec_lvsl(__a, (unsigned char *)__b));
  13874. }
  13875.  
  13876. static __inline__ vector bool char __ATTRS_o_ai
  13877. vec_lvlxl(int __a, const vector bool char *__b) {
  13878.   return vec_perm(vec_ldl(__a, __b), (vector bool char)(0),
  13879.                   vec_lvsl(__a, (unsigned char *)__b));
  13880. }
  13881.  
  13882. static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
  13883.                                                       const short *__b) {
  13884.   return vec_perm(vec_ldl(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
  13885. }
  13886.  
  13887. static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
  13888.                                                       const vector short *__b) {
  13889.   return vec_perm(vec_ldl(__a, __b), (vector short)(0),
  13890.                   vec_lvsl(__a, (unsigned char *)__b));
  13891. }
  13892.  
  13893. static __inline__ vector unsigned short __ATTRS_o_ai
  13894. vec_lvlxl(int __a, const unsigned short *__b) {
  13895.   return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
  13896.                   vec_lvsl(__a, __b));
  13897. }
  13898.  
  13899. static __inline__ vector unsigned short __ATTRS_o_ai
  13900. vec_lvlxl(int __a, const vector unsigned short *__b) {
  13901.   return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
  13902.                   vec_lvsl(__a, (unsigned char *)__b));
  13903. }
  13904.  
  13905. static __inline__ vector bool short __ATTRS_o_ai
  13906. vec_lvlxl(int __a, const vector bool short *__b) {
  13907.   return vec_perm(vec_ldl(__a, __b), (vector bool short)(0),
  13908.                   vec_lvsl(__a, (unsigned char *)__b));
  13909. }
  13910.  
  13911. static __inline__ vector pixel __ATTRS_o_ai vec_lvlxl(int __a,
  13912.                                                       const vector pixel *__b) {
  13913.   return vec_perm(vec_ldl(__a, __b), (vector pixel)(0),
  13914.                   vec_lvsl(__a, (unsigned char *)__b));
  13915. }
  13916.  
  13917. static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a, const int *__b) {
  13918.   return vec_perm(vec_ldl(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
  13919. }
  13920.  
  13921. static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a,
  13922.                                                     const vector int *__b) {
  13923.   return vec_perm(vec_ldl(__a, __b), (vector int)(0),
  13924.                   vec_lvsl(__a, (unsigned char *)__b));
  13925. }
  13926.  
  13927. static __inline__ vector unsigned int __ATTRS_o_ai
  13928. vec_lvlxl(int __a, const unsigned int *__b) {
  13929.   return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
  13930.                   vec_lvsl(__a, __b));
  13931. }
  13932.  
  13933. static __inline__ vector unsigned int __ATTRS_o_ai
  13934. vec_lvlxl(int __a, const vector unsigned int *__b) {
  13935.   return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
  13936.                   vec_lvsl(__a, (unsigned char *)__b));
  13937. }
  13938.  
  13939. static __inline__ vector bool int __ATTRS_o_ai
  13940. vec_lvlxl(int __a, const vector bool int *__b) {
  13941.   return vec_perm(vec_ldl(__a, __b), (vector bool int)(0),
  13942.                   vec_lvsl(__a, (unsigned char *)__b));
  13943. }
  13944.  
  13945. static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
  13946.                                                       const float *__b) {
  13947.   return vec_perm(vec_ldl(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
  13948. }
  13949.  
  13950. static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
  13951.                                                       vector float *__b) {
  13952.   return vec_perm(vec_ldl(__a, __b), (vector float)(0),
  13953.                   vec_lvsl(__a, (unsigned char *)__b));
  13954. }
  13955.  
  13956. /* vec_lvrx */
  13957.  
  13958. static __inline__ vector signed char __ATTRS_o_ai
  13959. vec_lvrx(int __a, const signed char *__b) {
  13960.   return vec_perm((vector signed char)(0), vec_ld(__a, __b),
  13961.                   vec_lvsl(__a, __b));
  13962. }
  13963.  
  13964. static __inline__ vector signed char __ATTRS_o_ai
  13965. vec_lvrx(int __a, const vector signed char *__b) {
  13966.   return vec_perm((vector signed char)(0), vec_ld(__a, __b),
  13967.                   vec_lvsl(__a, (unsigned char *)__b));
  13968. }
  13969.  
  13970. static __inline__ vector unsigned char __ATTRS_o_ai
  13971. vec_lvrx(int __a, const unsigned char *__b) {
  13972.   return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
  13973.                   vec_lvsl(__a, __b));
  13974. }
  13975.  
  13976. static __inline__ vector unsigned char __ATTRS_o_ai
  13977. vec_lvrx(int __a, const vector unsigned char *__b) {
  13978.   return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
  13979.                   vec_lvsl(__a, (unsigned char *)__b));
  13980. }
  13981.  
  13982. static __inline__ vector bool char __ATTRS_o_ai
  13983. vec_lvrx(int __a, const vector bool char *__b) {
  13984.   return vec_perm((vector bool char)(0), vec_ld(__a, __b),
  13985.                   vec_lvsl(__a, (unsigned char *)__b));
  13986. }
  13987.  
  13988. static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
  13989.                                                      const short *__b) {
  13990.   return vec_perm((vector short)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
  13991. }
  13992.  
  13993. static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
  13994.                                                      const vector short *__b) {
  13995.   return vec_perm((vector short)(0), vec_ld(__a, __b),
  13996.                   vec_lvsl(__a, (unsigned char *)__b));
  13997. }
  13998.  
  13999. static __inline__ vector unsigned short __ATTRS_o_ai
  14000. vec_lvrx(int __a, const unsigned short *__b) {
  14001.   return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
  14002.                   vec_lvsl(__a, __b));
  14003. }
  14004.  
  14005. static __inline__ vector unsigned short __ATTRS_o_ai
  14006. vec_lvrx(int __a, const vector unsigned short *__b) {
  14007.   return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
  14008.                   vec_lvsl(__a, (unsigned char *)__b));
  14009. }
  14010.  
  14011. static __inline__ vector bool short __ATTRS_o_ai
  14012. vec_lvrx(int __a, const vector bool short *__b) {
  14013.   return vec_perm((vector bool short)(0), vec_ld(__a, __b),
  14014.                   vec_lvsl(__a, (unsigned char *)__b));
  14015. }
  14016.  
  14017. static __inline__ vector pixel __ATTRS_o_ai vec_lvrx(int __a,
  14018.                                                      const vector pixel *__b) {
  14019.   return vec_perm((vector pixel)(0), vec_ld(__a, __b),
  14020.                   vec_lvsl(__a, (unsigned char *)__b));
  14021. }
  14022.  
  14023. static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a, const int *__b) {
  14024.   return vec_perm((vector int)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
  14025. }
  14026.  
  14027. static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a,
  14028.                                                    const vector int *__b) {
  14029.   return vec_perm((vector int)(0), vec_ld(__a, __b),
  14030.                   vec_lvsl(__a, (unsigned char *)__b));
  14031. }
  14032.  
  14033. static __inline__ vector unsigned int __ATTRS_o_ai
  14034. vec_lvrx(int __a, const unsigned int *__b) {
  14035.   return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
  14036.                   vec_lvsl(__a, __b));
  14037. }
  14038.  
  14039. static __inline__ vector unsigned int __ATTRS_o_ai
  14040. vec_lvrx(int __a, const vector unsigned int *__b) {
  14041.   return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
  14042.                   vec_lvsl(__a, (unsigned char *)__b));
  14043. }
  14044.  
  14045. static __inline__ vector bool int __ATTRS_o_ai
  14046. vec_lvrx(int __a, const vector bool int *__b) {
  14047.   return vec_perm((vector bool int)(0), vec_ld(__a, __b),
  14048.                   vec_lvsl(__a, (unsigned char *)__b));
  14049. }
  14050.  
  14051. static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
  14052.                                                      const float *__b) {
  14053.   return vec_perm((vector float)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
  14054. }
  14055.  
  14056. static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
  14057.                                                      const vector float *__b) {
  14058.   return vec_perm((vector float)(0), vec_ld(__a, __b),
  14059.                   vec_lvsl(__a, (unsigned char *)__b));
  14060. }
  14061.  
  14062. /* vec_lvrxl */
  14063.  
  14064. static __inline__ vector signed char __ATTRS_o_ai
  14065. vec_lvrxl(int __a, const signed char *__b) {
  14066.   return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
  14067.                   vec_lvsl(__a, __b));
  14068. }
  14069.  
  14070. static __inline__ vector signed char __ATTRS_o_ai
  14071. vec_lvrxl(int __a, const vector signed char *__b) {
  14072.   return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
  14073.                   vec_lvsl(__a, (unsigned char *)__b));
  14074. }
  14075.  
  14076. static __inline__ vector unsigned char __ATTRS_o_ai
  14077. vec_lvrxl(int __a, const unsigned char *__b) {
  14078.   return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
  14079.                   vec_lvsl(__a, __b));
  14080. }
  14081.  
  14082. static __inline__ vector unsigned char __ATTRS_o_ai
  14083. vec_lvrxl(int __a, const vector unsigned char *__b) {
  14084.   return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
  14085.                   vec_lvsl(__a, (unsigned char *)__b));
  14086. }
  14087.  
  14088. static __inline__ vector bool char __ATTRS_o_ai
  14089. vec_lvrxl(int __a, const vector bool char *__b) {
  14090.   return vec_perm((vector bool char)(0), vec_ldl(__a, __b),
  14091.                   vec_lvsl(__a, (unsigned char *)__b));
  14092. }
  14093.  
  14094. static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
  14095.                                                       const short *__b) {
  14096.   return vec_perm((vector short)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
  14097. }
  14098.  
  14099. static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
  14100.                                                       const vector short *__b) {
  14101.   return vec_perm((vector short)(0), vec_ldl(__a, __b),
  14102.                   vec_lvsl(__a, (unsigned char *)__b));
  14103. }
  14104.  
  14105. static __inline__ vector unsigned short __ATTRS_o_ai
  14106. vec_lvrxl(int __a, const unsigned short *__b) {
  14107.   return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
  14108.                   vec_lvsl(__a, __b));
  14109. }
  14110.  
  14111. static __inline__ vector unsigned short __ATTRS_o_ai
  14112. vec_lvrxl(int __a, const vector unsigned short *__b) {
  14113.   return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
  14114.                   vec_lvsl(__a, (unsigned char *)__b));
  14115. }
  14116.  
  14117. static __inline__ vector bool short __ATTRS_o_ai
  14118. vec_lvrxl(int __a, const vector bool short *__b) {
  14119.   return vec_perm((vector bool short)(0), vec_ldl(__a, __b),
  14120.                   vec_lvsl(__a, (unsigned char *)__b));
  14121. }
  14122.  
  14123. static __inline__ vector pixel __ATTRS_o_ai vec_lvrxl(int __a,
  14124.                                                       const vector pixel *__b) {
  14125.   return vec_perm((vector pixel)(0), vec_ldl(__a, __b),
  14126.                   vec_lvsl(__a, (unsigned char *)__b));
  14127. }
  14128.  
  14129. static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a, const int *__b) {
  14130.   return vec_perm((vector int)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
  14131. }
  14132.  
  14133. static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a,
  14134.                                                     const vector int *__b) {
  14135.   return vec_perm((vector int)(0), vec_ldl(__a, __b),
  14136.                   vec_lvsl(__a, (unsigned char *)__b));
  14137. }
  14138.  
  14139. static __inline__ vector unsigned int __ATTRS_o_ai
  14140. vec_lvrxl(int __a, const unsigned int *__b) {
  14141.   return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
  14142.                   vec_lvsl(__a, __b));
  14143. }
  14144.  
  14145. static __inline__ vector unsigned int __ATTRS_o_ai
  14146. vec_lvrxl(int __a, const vector unsigned int *__b) {
  14147.   return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
  14148.                   vec_lvsl(__a, (unsigned char *)__b));
  14149. }
  14150.  
  14151. static __inline__ vector bool int __ATTRS_o_ai
  14152. vec_lvrxl(int __a, const vector bool int *__b) {
  14153.   return vec_perm((vector bool int)(0), vec_ldl(__a, __b),
  14154.                   vec_lvsl(__a, (unsigned char *)__b));
  14155. }
  14156.  
  14157. static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
  14158.                                                       const float *__b) {
  14159.   return vec_perm((vector float)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
  14160. }
  14161.  
  14162. static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
  14163.                                                       const vector float *__b) {
  14164.   return vec_perm((vector float)(0), vec_ldl(__a, __b),
  14165.                   vec_lvsl(__a, (unsigned char *)__b));
  14166. }
  14167.  
  14168. /* vec_stvlx */
  14169.  
  14170. static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
  14171.                                               signed char *__c) {
  14172.   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14173.                 __c);
  14174. }
  14175.  
  14176. static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
  14177.                                               vector signed char *__c) {
  14178.   return vec_st(
  14179.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14180.       __b, __c);
  14181. }
  14182.  
  14183. static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
  14184.                                               unsigned char *__c) {
  14185.   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14186.                 __c);
  14187. }
  14188.  
  14189. static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
  14190.                                               vector unsigned char *__c) {
  14191.   return vec_st(
  14192.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14193.       __b, __c);
  14194. }
  14195.  
  14196. static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool char __a, int __b,
  14197.                                               vector bool char *__c) {
  14198.   return vec_st(
  14199.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14200.       __b, __c);
  14201. }
  14202.  
  14203. static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
  14204.                                               short *__c) {
  14205.   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14206.                 __c);
  14207. }
  14208.  
  14209. static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
  14210.                                               vector short *__c) {
  14211.   return vec_st(
  14212.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14213.       __b, __c);
  14214. }
  14215.  
  14216. static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
  14217.                                               int __b, unsigned short *__c) {
  14218.   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14219.                 __c);
  14220. }
  14221.  
  14222. static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
  14223.                                               int __b,
  14224.                                               vector unsigned short *__c) {
  14225.   return vec_st(
  14226.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14227.       __b, __c);
  14228. }
  14229.  
  14230. static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool short __a, int __b,
  14231.                                               vector bool short *__c) {
  14232.   return vec_st(
  14233.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14234.       __b, __c);
  14235. }
  14236.  
  14237. static __inline__ void __ATTRS_o_ai vec_stvlx(vector pixel __a, int __b,
  14238.                                               vector pixel *__c) {
  14239.   return vec_st(
  14240.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14241.       __b, __c);
  14242. }
  14243.  
  14244. static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
  14245.                                               int *__c) {
  14246.   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14247.                 __c);
  14248. }
  14249.  
  14250. static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
  14251.                                               vector int *__c) {
  14252.   return vec_st(
  14253.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14254.       __b, __c);
  14255. }
  14256.  
  14257. static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
  14258.                                               unsigned int *__c) {
  14259.   return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14260.                 __c);
  14261. }
  14262.  
  14263. static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
  14264.                                               vector unsigned int *__c) {
  14265.   return vec_st(
  14266.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14267.       __b, __c);
  14268. }
  14269.  
  14270. static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool int __a, int __b,
  14271.                                               vector bool int *__c) {
  14272.   return vec_st(
  14273.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14274.       __b, __c);
  14275. }
  14276.  
  14277. static __inline__ void __ATTRS_o_ai vec_stvlx(vector float __a, int __b,
  14278.                                               vector float *__c) {
  14279.   return vec_st(
  14280.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14281.       __b, __c);
  14282. }
  14283.  
  14284. /* vec_stvlxl */
  14285.  
  14286. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
  14287.                                                signed char *__c) {
  14288.   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14289.                  __c);
  14290. }
  14291.  
  14292. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
  14293.                                                vector signed char *__c) {
  14294.   return vec_stl(
  14295.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14296.       __b, __c);
  14297. }
  14298.  
  14299. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
  14300.                                                int __b, unsigned char *__c) {
  14301.   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14302.                  __c);
  14303. }
  14304.  
  14305. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
  14306.                                                int __b,
  14307.                                                vector unsigned char *__c) {
  14308.   return vec_stl(
  14309.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14310.       __b, __c);
  14311. }
  14312.  
  14313. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool char __a, int __b,
  14314.                                                vector bool char *__c) {
  14315.   return vec_stl(
  14316.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14317.       __b, __c);
  14318. }
  14319.  
  14320. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
  14321.                                                short *__c) {
  14322.   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14323.                  __c);
  14324. }
  14325.  
  14326. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
  14327.                                                vector short *__c) {
  14328.   return vec_stl(
  14329.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14330.       __b, __c);
  14331. }
  14332.  
  14333. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
  14334.                                                int __b, unsigned short *__c) {
  14335.   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14336.                  __c);
  14337. }
  14338.  
  14339. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
  14340.                                                int __b,
  14341.                                                vector unsigned short *__c) {
  14342.   return vec_stl(
  14343.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14344.       __b, __c);
  14345. }
  14346.  
  14347. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool short __a, int __b,
  14348.                                                vector bool short *__c) {
  14349.   return vec_stl(
  14350.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14351.       __b, __c);
  14352. }
  14353.  
  14354. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector pixel __a, int __b,
  14355.                                                vector pixel *__c) {
  14356.   return vec_stl(
  14357.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14358.       __b, __c);
  14359. }
  14360.  
  14361. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
  14362.                                                int *__c) {
  14363.   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14364.                  __c);
  14365. }
  14366.  
  14367. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
  14368.                                                vector int *__c) {
  14369.   return vec_stl(
  14370.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14371.       __b, __c);
  14372. }
  14373.  
  14374. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
  14375.                                                unsigned int *__c) {
  14376.   return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
  14377.                  __c);
  14378. }
  14379.  
  14380. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
  14381.                                                vector unsigned int *__c) {
  14382.   return vec_stl(
  14383.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14384.       __b, __c);
  14385. }
  14386.  
  14387. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool int __a, int __b,
  14388.                                                vector bool int *__c) {
  14389.   return vec_stl(
  14390.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14391.       __b, __c);
  14392. }
  14393.  
  14394. static __inline__ void __ATTRS_o_ai vec_stvlxl(vector float __a, int __b,
  14395.                                                vector float *__c) {
  14396.   return vec_stl(
  14397.       vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
  14398.       __b, __c);
  14399. }
  14400.  
  14401. /* vec_stvrx */
  14402.  
  14403. static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
  14404.                                               signed char *__c) {
  14405.   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14406.                 __c);
  14407. }
  14408.  
  14409. static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
  14410.                                               vector signed char *__c) {
  14411.   return vec_st(
  14412.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14413.       __b, __c);
  14414. }
  14415.  
  14416. static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
  14417.                                               unsigned char *__c) {
  14418.   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14419.                 __c);
  14420. }
  14421.  
  14422. static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
  14423.                                               vector unsigned char *__c) {
  14424.   return vec_st(
  14425.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14426.       __b, __c);
  14427. }
  14428.  
  14429. static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool char __a, int __b,
  14430.                                               vector bool char *__c) {
  14431.   return vec_st(
  14432.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14433.       __b, __c);
  14434. }
  14435.  
  14436. static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
  14437.                                               short *__c) {
  14438.   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14439.                 __c);
  14440. }
  14441.  
  14442. static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
  14443.                                               vector short *__c) {
  14444.   return vec_st(
  14445.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14446.       __b, __c);
  14447. }
  14448.  
  14449. static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
  14450.                                               int __b, unsigned short *__c) {
  14451.   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14452.                 __c);
  14453. }
  14454.  
  14455. static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
  14456.                                               int __b,
  14457.                                               vector unsigned short *__c) {
  14458.   return vec_st(
  14459.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14460.       __b, __c);
  14461. }
  14462.  
  14463. static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool short __a, int __b,
  14464.                                               vector bool short *__c) {
  14465.   return vec_st(
  14466.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14467.       __b, __c);
  14468. }
  14469.  
  14470. static __inline__ void __ATTRS_o_ai vec_stvrx(vector pixel __a, int __b,
  14471.                                               vector pixel *__c) {
  14472.   return vec_st(
  14473.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14474.       __b, __c);
  14475. }
  14476.  
  14477. static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
  14478.                                               int *__c) {
  14479.   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14480.                 __c);
  14481. }
  14482.  
  14483. static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
  14484.                                               vector int *__c) {
  14485.   return vec_st(
  14486.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14487.       __b, __c);
  14488. }
  14489.  
  14490. static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
  14491.                                               unsigned int *__c) {
  14492.   return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14493.                 __c);
  14494. }
  14495.  
  14496. static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
  14497.                                               vector unsigned int *__c) {
  14498.   return vec_st(
  14499.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14500.       __b, __c);
  14501. }
  14502.  
  14503. static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool int __a, int __b,
  14504.                                               vector bool int *__c) {
  14505.   return vec_st(
  14506.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14507.       __b, __c);
  14508. }
  14509.  
  14510. static __inline__ void __ATTRS_o_ai vec_stvrx(vector float __a, int __b,
  14511.                                               vector float *__c) {
  14512.   return vec_st(
  14513.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14514.       __b, __c);
  14515. }
  14516.  
  14517. /* vec_stvrxl */
  14518.  
  14519. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
  14520.                                                signed char *__c) {
  14521.   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14522.                  __c);
  14523. }
  14524.  
  14525. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
  14526.                                                vector signed char *__c) {
  14527.   return vec_stl(
  14528.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14529.       __b, __c);
  14530. }
  14531.  
  14532. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
  14533.                                                int __b, unsigned char *__c) {
  14534.   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14535.                  __c);
  14536. }
  14537.  
  14538. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
  14539.                                                int __b,
  14540.                                                vector unsigned char *__c) {
  14541.   return vec_stl(
  14542.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14543.       __b, __c);
  14544. }
  14545.  
  14546. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool char __a, int __b,
  14547.                                                vector bool char *__c) {
  14548.   return vec_stl(
  14549.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14550.       __b, __c);
  14551. }
  14552.  
  14553. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
  14554.                                                short *__c) {
  14555.   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14556.                  __c);
  14557. }
  14558.  
  14559. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
  14560.                                                vector short *__c) {
  14561.   return vec_stl(
  14562.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14563.       __b, __c);
  14564. }
  14565.  
  14566. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
  14567.                                                int __b, unsigned short *__c) {
  14568.   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14569.                  __c);
  14570. }
  14571.  
  14572. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
  14573.                                                int __b,
  14574.                                                vector unsigned short *__c) {
  14575.   return vec_stl(
  14576.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14577.       __b, __c);
  14578. }
  14579.  
  14580. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool short __a, int __b,
  14581.                                                vector bool short *__c) {
  14582.   return vec_stl(
  14583.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14584.       __b, __c);
  14585. }
  14586.  
  14587. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector pixel __a, int __b,
  14588.                                                vector pixel *__c) {
  14589.   return vec_stl(
  14590.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14591.       __b, __c);
  14592. }
  14593.  
  14594. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
  14595.                                                int *__c) {
  14596.   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14597.                  __c);
  14598. }
  14599.  
  14600. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
  14601.                                                vector int *__c) {
  14602.   return vec_stl(
  14603.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14604.       __b, __c);
  14605. }
  14606.  
  14607. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
  14608.                                                unsigned int *__c) {
  14609.   return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
  14610.                  __c);
  14611. }
  14612.  
  14613. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
  14614.                                                vector unsigned int *__c) {
  14615.   return vec_stl(
  14616.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14617.       __b, __c);
  14618. }
  14619.  
  14620. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool int __a, int __b,
  14621.                                                vector bool int *__c) {
  14622.   return vec_stl(
  14623.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14624.       __b, __c);
  14625. }
  14626.  
  14627. static __inline__ void __ATTRS_o_ai vec_stvrxl(vector float __a, int __b,
  14628.                                                vector float *__c) {
  14629.   return vec_stl(
  14630.       vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
  14631.       __b, __c);
  14632. }
  14633.  
  14634. /* vec_promote */
  14635.  
  14636. static __inline__ vector signed char __ATTRS_o_ai vec_promote(signed char __a,
  14637.                                                               int __b) {
  14638.   vector signed char __res = (vector signed char)(0);
  14639.   __res[__b & 0x7] = __a;
  14640.   return __res;
  14641. }
  14642.  
  14643. static __inline__ vector unsigned char __ATTRS_o_ai
  14644. vec_promote(unsigned char __a, int __b) {
  14645.   vector unsigned char __res = (vector unsigned char)(0);
  14646.   __res[__b & 0x7] = __a;
  14647.   return __res;
  14648. }
  14649.  
  14650. static __inline__ vector short __ATTRS_o_ai vec_promote(short __a, int __b) {
  14651.   vector short __res = (vector short)(0);
  14652.   __res[__b & 0x7] = __a;
  14653.   return __res;
  14654. }
  14655.  
  14656. static __inline__ vector unsigned short __ATTRS_o_ai
  14657. vec_promote(unsigned short __a, int __b) {
  14658.   vector unsigned short __res = (vector unsigned short)(0);
  14659.   __res[__b & 0x7] = __a;
  14660.   return __res;
  14661. }
  14662.  
  14663. static __inline__ vector int __ATTRS_o_ai vec_promote(int __a, int __b) {
  14664.   vector int __res = (vector int)(0);
  14665.   __res[__b & 0x3] = __a;
  14666.   return __res;
  14667. }
  14668.  
  14669. static __inline__ vector unsigned int __ATTRS_o_ai vec_promote(unsigned int __a,
  14670.                                                                int __b) {
  14671.   vector unsigned int __res = (vector unsigned int)(0);
  14672.   __res[__b & 0x3] = __a;
  14673.   return __res;
  14674. }
  14675.  
  14676. static __inline__ vector float __ATTRS_o_ai vec_promote(float __a, int __b) {
  14677.   vector float __res = (vector float)(0);
  14678.   __res[__b & 0x3] = __a;
  14679.   return __res;
  14680. }
  14681.  
  14682. #ifdef __VSX__
  14683. static __inline__ vector double __ATTRS_o_ai vec_promote(double __a, int __b) {
  14684.   vector double __res = (vector double)(0);
  14685.   __res[__b & 0x1] = __a;
  14686.   return __res;
  14687. }
  14688.  
  14689. static __inline__ vector signed long long __ATTRS_o_ai
  14690. vec_promote(signed long long __a, int __b) {
  14691.   vector signed long long __res = (vector signed long long)(0);
  14692.   __res[__b & 0x1] = __a;
  14693.   return __res;
  14694. }
  14695.  
  14696. static __inline__ vector unsigned long long __ATTRS_o_ai
  14697. vec_promote(unsigned long long __a, int __b) {
  14698.   vector unsigned long long __res = (vector unsigned long long)(0);
  14699.   __res[__b & 0x1] = __a;
  14700.   return __res;
  14701. }
  14702. #endif
  14703.  
  14704. /* vec_splats */
  14705.  
  14706. static __inline__ vector signed char __ATTRS_o_ai vec_splats(signed char __a) {
  14707.   return (vector signed char)(__a);
  14708. }
  14709.  
  14710. static __inline__ vector unsigned char __ATTRS_o_ai
  14711. vec_splats(unsigned char __a) {
  14712.   return (vector unsigned char)(__a);
  14713. }
  14714.  
  14715. static __inline__ vector short __ATTRS_o_ai vec_splats(short __a) {
  14716.   return (vector short)(__a);
  14717. }
  14718.  
  14719. static __inline__ vector unsigned short __ATTRS_o_ai
  14720. vec_splats(unsigned short __a) {
  14721.   return (vector unsigned short)(__a);
  14722. }
  14723.  
  14724. static __inline__ vector int __ATTRS_o_ai vec_splats(int __a) {
  14725.   return (vector int)(__a);
  14726. }
  14727.  
  14728. static __inline__ vector unsigned int __ATTRS_o_ai
  14729. vec_splats(unsigned int __a) {
  14730.   return (vector unsigned int)(__a);
  14731. }
  14732.  
  14733. #ifdef __VSX__
  14734. static __inline__ vector signed long long __ATTRS_o_ai
  14735. vec_splats(signed long long __a) {
  14736.   return (vector signed long long)(__a);
  14737. }
  14738.  
  14739. static __inline__ vector unsigned long long __ATTRS_o_ai
  14740. vec_splats(unsigned long long __a) {
  14741.   return (vector unsigned long long)(__a);
  14742. }
  14743.  
  14744. #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  14745.     defined(__SIZEOF_INT128__)
  14746. static __inline__ vector signed __int128 __ATTRS_o_ai
  14747. vec_splats(signed __int128 __a) {
  14748.   return (vector signed __int128)(__a);
  14749. }
  14750.  
  14751. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  14752. vec_splats(unsigned __int128 __a) {
  14753.   return (vector unsigned __int128)(__a);
  14754. }
  14755.  
  14756. #endif
  14757.  
  14758. static __inline__ vector double __ATTRS_o_ai vec_splats(double __a) {
  14759.   return (vector double)(__a);
  14760. }
  14761. #endif
  14762.  
  14763. static __inline__ vector float __ATTRS_o_ai vec_splats(float __a) {
  14764.   return (vector float)(__a);
  14765. }
  14766.  
  14767. /* ----------------------------- predicates --------------------------------- */
  14768.  
  14769. /* vec_all_eq */
  14770.  
  14771. static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
  14772.                                               vector signed char __b) {
  14773.   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14774.                                       (vector char)__b);
  14775. }
  14776.  
  14777. static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
  14778.                                               vector bool char __b) {
  14779.   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14780.                                       (vector char)__b);
  14781. }
  14782.  
  14783. static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
  14784.                                               vector unsigned char __b) {
  14785.   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14786.                                       (vector char)__b);
  14787. }
  14788.  
  14789. static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
  14790.                                               vector bool char __b) {
  14791.   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14792.                                       (vector char)__b);
  14793. }
  14794.  
  14795. static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
  14796.                                               vector signed char __b) {
  14797.   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14798.                                       (vector char)__b);
  14799. }
  14800.  
  14801. static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
  14802.                                               vector unsigned char __b) {
  14803.   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14804.                                       (vector char)__b);
  14805. }
  14806.  
  14807. static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
  14808.                                               vector bool char __b) {
  14809.   return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
  14810.                                       (vector char)__b);
  14811. }
  14812.  
  14813. static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
  14814.                                               vector short __b) {
  14815.   return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, __b);
  14816. }
  14817.  
  14818. static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
  14819.                                               vector bool short __b) {
  14820.   return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, (vector short)__b);
  14821. }
  14822.  
  14823. static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
  14824.                                               vector unsigned short __b) {
  14825.   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
  14826.                                       (vector short)__b);
  14827. }
  14828.  
  14829. static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
  14830.                                               vector bool short __b) {
  14831.   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
  14832.                                       (vector short)__b);
  14833. }
  14834.  
  14835. static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
  14836.                                               vector short __b) {
  14837.   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
  14838.                                       (vector short)__b);
  14839. }
  14840.  
  14841. static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
  14842.                                               vector unsigned short __b) {
  14843.   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
  14844.                                       (vector short)__b);
  14845. }
  14846.  
  14847. static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
  14848.                                               vector bool short __b) {
  14849.   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
  14850.                                       (vector short)__b);
  14851. }
  14852.  
  14853. static __inline__ int __ATTRS_o_ai vec_all_eq(vector pixel __a,
  14854.                                               vector pixel __b) {
  14855.   return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
  14856.                                       (vector short)__b);
  14857. }
  14858.  
  14859. static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a, vector int __b) {
  14860.   return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, __b);
  14861. }
  14862.  
  14863. static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a,
  14864.                                               vector bool int __b) {
  14865.   return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, (vector int)__b);
  14866. }
  14867.  
  14868. static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
  14869.                                               vector unsigned int __b) {
  14870.   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
  14871.                                       (vector int)__b);
  14872. }
  14873.  
  14874. static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
  14875.                                               vector bool int __b) {
  14876.   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
  14877.                                       (vector int)__b);
  14878. }
  14879.  
  14880. static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
  14881.                                               vector int __b) {
  14882.   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
  14883.                                       (vector int)__b);
  14884. }
  14885.  
  14886. static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
  14887.                                               vector unsigned int __b) {
  14888.   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
  14889.                                       (vector int)__b);
  14890. }
  14891.  
  14892. static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
  14893.                                               vector bool int __b) {
  14894.   return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
  14895.                                       (vector int)__b);
  14896. }
  14897.  
  14898. #ifdef __VSX__
  14899. static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed long long __a,
  14900.                                               vector signed long long __b) {
  14901. #ifdef __POWER8_VECTOR__
  14902.   return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, __b);
  14903. #else
  14904.   // No vcmpequd on Power7 so we xor the two vectors and compare against zero as
  14905.   // 32-bit elements.
  14906.   return vec_all_eq((vector signed int)vec_xor(__a, __b), (vector signed int)0);
  14907. #endif
  14908. }
  14909.  
  14910. static __inline__ int __ATTRS_o_ai vec_all_eq(vector long long __a,
  14911.                                               vector bool long long __b) {
  14912.   return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
  14913. }
  14914.  
  14915. static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
  14916.                                               vector unsigned long long __b) {
  14917.   return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
  14918. }
  14919.  
  14920. static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
  14921.                                               vector bool long long __b) {
  14922.   return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
  14923. }
  14924.  
  14925. static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
  14926.                                               vector long long __b) {
  14927.   return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
  14928. }
  14929.  
  14930. static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
  14931.                                               vector unsigned long long __b) {
  14932.   return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
  14933. }
  14934.  
  14935. static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
  14936.                                               vector bool long long __b) {
  14937.   return vec_all_eq((vector signed long long)__a, (vector signed long long)__b);
  14938. }
  14939. #endif
  14940.  
  14941. static __inline__ int __ATTRS_o_ai vec_all_eq(vector float __a,
  14942.                                               vector float __b) {
  14943. #ifdef __VSX__
  14944.   return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __b);
  14945. #else
  14946.   return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __b);
  14947. #endif
  14948. }
  14949.  
  14950. #ifdef __VSX__
  14951. static __inline__ int __ATTRS_o_ai vec_all_eq(vector double __a,
  14952.                                               vector double __b) {
  14953.   return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __b);
  14954. }
  14955. #endif
  14956.  
  14957. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  14958. static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed __int128 __a,
  14959.                                               vector signed __int128 __b) {
  14960.   return __builtin_altivec_vcmpequq_p(__CR6_LT, (vector unsigned __int128)__a,
  14961.                                       (vector signed __int128)__b);
  14962. }
  14963.  
  14964. static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned __int128 __a,
  14965.                                               vector unsigned __int128 __b) {
  14966.   return __builtin_altivec_vcmpequq_p(__CR6_LT, __a,
  14967.                                       (vector signed __int128)__b);
  14968. }
  14969.  
  14970. static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool __int128 __a,
  14971.                                               vector bool __int128 __b) {
  14972.   return __builtin_altivec_vcmpequq_p(__CR6_LT, (vector unsigned __int128)__a,
  14973.                                       (vector signed __int128)__b);
  14974. }
  14975. #endif
  14976.  
  14977. /* vec_all_ge */
  14978.  
  14979. static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
  14980.                                               vector signed char __b) {
  14981.   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, __a);
  14982. }
  14983.  
  14984. static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
  14985.                                               vector bool char __b) {
  14986.   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__b, __a);
  14987. }
  14988.  
  14989. static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
  14990.                                               vector unsigned char __b) {
  14991.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, __a);
  14992. }
  14993.  
  14994. static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
  14995.                                               vector bool char __b) {
  14996.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, __a);
  14997. }
  14998.  
  14999. static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
  15000.                                               vector signed char __b) {
  15001.   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, (vector signed char)__a);
  15002. }
  15003.  
  15004. static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
  15005.                                               vector unsigned char __b) {
  15006.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, (vector unsigned char)__a);
  15007. }
  15008.  
  15009. static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
  15010.                                               vector bool char __b) {
  15011.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b,
  15012.                                       (vector unsigned char)__a);
  15013. }
  15014.  
  15015. static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
  15016.                                               vector short __b) {
  15017.   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, __a);
  15018. }
  15019.  
  15020. static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
  15021.                                               vector bool short __b) {
  15022.   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector short)__b, __a);
  15023. }
  15024.  
  15025. static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
  15026.                                               vector unsigned short __b) {
  15027.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, __a);
  15028. }
  15029.  
  15030. static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
  15031.                                               vector bool short __b) {
  15032.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
  15033.                                       __a);
  15034. }
  15035.  
  15036. static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
  15037.                                               vector short __b) {
  15038.   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, (vector signed short)__a);
  15039. }
  15040.  
  15041. static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
  15042.                                               vector unsigned short __b) {
  15043.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b,
  15044.                                       (vector unsigned short)__a);
  15045. }
  15046.  
  15047. static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
  15048.                                               vector bool short __b) {
  15049.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
  15050.                                       (vector unsigned short)__a);
  15051. }
  15052.  
  15053. static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a, vector int __b) {
  15054.   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, __a);
  15055. }
  15056.  
  15057. static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a,
  15058.                                               vector bool int __b) {
  15059.   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector int)__b, __a);
  15060. }
  15061.  
  15062. static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
  15063.                                               vector unsigned int __b) {
  15064.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, __a);
  15065. }
  15066.  
  15067. static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
  15068.                                               vector bool int __b) {
  15069.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, __a);
  15070. }
  15071.  
  15072. static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
  15073.                                               vector int __b) {
  15074.   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, (vector signed int)__a);
  15075. }
  15076.  
  15077. static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
  15078.                                               vector unsigned int __b) {
  15079.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, (vector unsigned int)__a);
  15080. }
  15081.  
  15082. static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
  15083.                                               vector bool int __b) {
  15084.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b,
  15085.                                       (vector unsigned int)__a);
  15086. }
  15087.  
  15088. #ifdef __VSX__
  15089. static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
  15090.                                               vector signed long long __b) {
  15091.   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b, __a);
  15092. }
  15093. static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
  15094.                                               vector bool long long __b) {
  15095.   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__b,
  15096.                                       __a);
  15097. }
  15098.  
  15099. static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
  15100.                                               vector unsigned long long __b) {
  15101.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b, __a);
  15102. }
  15103.  
  15104. static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
  15105.                                               vector bool long long __b) {
  15106.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
  15107.                                       __a);
  15108. }
  15109.  
  15110. static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
  15111.                                               vector signed long long __b) {
  15112.   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b,
  15113.                                       (vector signed long long)__a);
  15114. }
  15115.  
  15116. static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
  15117.                                               vector unsigned long long __b) {
  15118.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b,
  15119.                                       (vector unsigned long long)__a);
  15120. }
  15121.  
  15122. static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
  15123.                                               vector bool long long __b) {
  15124.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
  15125.                                       (vector unsigned long long)__a);
  15126. }
  15127. #endif
  15128.  
  15129. static __inline__ int __ATTRS_o_ai vec_all_ge(vector float __a,
  15130.                                               vector float __b) {
  15131. #ifdef __VSX__
  15132.   return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __a, __b);
  15133. #else
  15134.   return __builtin_altivec_vcmpgefp_p(__CR6_LT, __a, __b);
  15135. #endif
  15136. }
  15137.  
  15138. #ifdef __VSX__
  15139. static __inline__ int __ATTRS_o_ai vec_all_ge(vector double __a,
  15140.                                               vector double __b) {
  15141.   return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __a, __b);
  15142. }
  15143. #endif
  15144.  
  15145. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  15146. static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed __int128 __a,
  15147.                                               vector signed __int128 __b) {
  15148.   return __builtin_altivec_vcmpgtsq_p(__CR6_EQ, __b, __a);
  15149. }
  15150.  
  15151. static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned __int128 __a,
  15152.                                               vector unsigned __int128 __b) {
  15153.   return __builtin_altivec_vcmpgtuq_p(__CR6_EQ, __b, __a);
  15154. }
  15155. #endif
  15156.  
  15157. /* vec_all_gt */
  15158.  
  15159. static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
  15160.                                               vector signed char __b) {
  15161.   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, __b);
  15162. }
  15163.  
  15164. static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
  15165.                                               vector bool char __b) {
  15166.   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, (vector signed char)__b);
  15167. }
  15168.  
  15169. static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
  15170.                                               vector unsigned char __b) {
  15171.   return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, __b);
  15172. }
  15173.  
  15174. static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
  15175.                                               vector bool char __b) {
  15176.   return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, (vector unsigned char)__b);
  15177. }
  15178.  
  15179. static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
  15180.                                               vector signed char __b) {
  15181.   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__a, __b);
  15182. }
  15183.  
  15184. static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
  15185.                                               vector unsigned char __b) {
  15186.   return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, __b);
  15187. }
  15188.  
  15189. static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
  15190.                                               vector bool char __b) {
  15191.   return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a,
  15192.                                       (vector unsigned char)__b);
  15193. }
  15194.  
  15195. static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
  15196.                                               vector short __b) {
  15197.   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, __b);
  15198. }
  15199.  
  15200. static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
  15201.                                               vector bool short __b) {
  15202.   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, (vector short)__b);
  15203. }
  15204.  
  15205. static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
  15206.                                               vector unsigned short __b) {
  15207.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, __b);
  15208. }
  15209.  
  15210. static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
  15211.                                               vector bool short __b) {
  15212.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a,
  15213.                                       (vector unsigned short)__b);
  15214. }
  15215.  
  15216. static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
  15217.                                               vector short __b) {
  15218.   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector signed short)__a, __b);
  15219. }
  15220.  
  15221. static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
  15222.                                               vector unsigned short __b) {
  15223.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
  15224.                                       __b);
  15225. }
  15226.  
  15227. static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
  15228.                                               vector bool short __b) {
  15229.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
  15230.                                       (vector unsigned short)__b);
  15231. }
  15232.  
  15233. static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a, vector int __b) {
  15234.   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, __b);
  15235. }
  15236.  
  15237. static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a,
  15238.                                               vector bool int __b) {
  15239.   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, (vector int)__b);
  15240. }
  15241.  
  15242. static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
  15243.                                               vector unsigned int __b) {
  15244.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, __b);
  15245. }
  15246.  
  15247. static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
  15248.                                               vector bool int __b) {
  15249.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, (vector unsigned int)__b);
  15250. }
  15251.  
  15252. static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
  15253.                                               vector int __b) {
  15254.   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector signed int)__a, __b);
  15255. }
  15256.  
  15257. static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
  15258.                                               vector unsigned int __b) {
  15259.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, __b);
  15260. }
  15261.  
  15262. static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
  15263.                                               vector bool int __b) {
  15264.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a,
  15265.                                       (vector unsigned int)__b);
  15266. }
  15267.  
  15268. #ifdef __VSX__
  15269. static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
  15270.                                               vector signed long long __b) {
  15271.   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a, __b);
  15272. }
  15273. static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
  15274.                                               vector bool long long __b) {
  15275.   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a,
  15276.                                       (vector signed long long)__b);
  15277. }
  15278.  
  15279. static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
  15280.                                               vector unsigned long long __b) {
  15281.   return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a, __b);
  15282. }
  15283.  
  15284. static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
  15285.                                               vector bool long long __b) {
  15286.   return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a,
  15287.                                       (vector unsigned long long)__b);
  15288. }
  15289.  
  15290. static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
  15291.                                               vector signed long long __b) {
  15292.   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__a,
  15293.                                       __b);
  15294. }
  15295.  
  15296. static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
  15297.                                               vector unsigned long long __b) {
  15298.   return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
  15299.                                       __b);
  15300. }
  15301.  
  15302. static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
  15303.                                               vector bool long long __b) {
  15304.   return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
  15305.                                       (vector unsigned long long)__b);
  15306. }
  15307. #endif
  15308.  
  15309. static __inline__ int __ATTRS_o_ai vec_all_gt(vector float __a,
  15310.                                               vector float __b) {
  15311. #ifdef __VSX__
  15312.   return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __a, __b);
  15313. #else
  15314.   return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __a, __b);
  15315. #endif
  15316. }
  15317.  
  15318. #ifdef __VSX__
  15319. static __inline__ int __ATTRS_o_ai vec_all_gt(vector double __a,
  15320.                                               vector double __b) {
  15321.   return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __a, __b);
  15322. }
  15323. #endif
  15324.  
  15325. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  15326. static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed __int128 __a,
  15327.                                               vector signed __int128 __b) {
  15328.   return __builtin_altivec_vcmpgtsq_p(__CR6_LT, __a, __b);
  15329. }
  15330.  
  15331. static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned __int128 __a,
  15332.                                               vector unsigned __int128 __b) {
  15333.   return __builtin_altivec_vcmpgtuq_p(__CR6_LT, __a, __b);
  15334. }
  15335. #endif
  15336.  
  15337. /* vec_all_in */
  15338.  
  15339. static __inline__ int __attribute__((__always_inline__))
  15340. vec_all_in(vector float __a, vector float __b) {
  15341.   return __builtin_altivec_vcmpbfp_p(__CR6_EQ, __a, __b);
  15342. }
  15343.  
  15344. /* vec_all_le */
  15345.  
  15346. static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
  15347.                                               vector signed char __b) {
  15348.   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, __b);
  15349. }
  15350.  
  15351. static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
  15352.                                               vector bool char __b) {
  15353.   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, (vector signed char)__b);
  15354. }
  15355.  
  15356. static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
  15357.                                               vector unsigned char __b) {
  15358.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, __b);
  15359. }
  15360.  
  15361. static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
  15362.                                               vector bool char __b) {
  15363.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, (vector unsigned char)__b);
  15364. }
  15365.  
  15366. static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
  15367.                                               vector signed char __b) {
  15368.   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__a, __b);
  15369. }
  15370.  
  15371. static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
  15372.                                               vector unsigned char __b) {
  15373.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, __b);
  15374. }
  15375.  
  15376. static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
  15377.                                               vector bool char __b) {
  15378.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a,
  15379.                                       (vector unsigned char)__b);
  15380. }
  15381.  
  15382. static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
  15383.                                               vector short __b) {
  15384.   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, __b);
  15385. }
  15386.  
  15387. static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
  15388.                                               vector bool short __b) {
  15389.   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, (vector short)__b);
  15390. }
  15391.  
  15392. static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
  15393.                                               vector unsigned short __b) {
  15394.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, __b);
  15395. }
  15396.  
  15397. static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
  15398.                                               vector bool short __b) {
  15399.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a,
  15400.                                       (vector unsigned short)__b);
  15401. }
  15402.  
  15403. static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
  15404.                                               vector short __b) {
  15405.   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector signed short)__a, __b);
  15406. }
  15407.  
  15408. static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
  15409.                                               vector unsigned short __b) {
  15410.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
  15411.                                       __b);
  15412. }
  15413.  
  15414. static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
  15415.                                               vector bool short __b) {
  15416.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
  15417.                                       (vector unsigned short)__b);
  15418. }
  15419.  
  15420. static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a, vector int __b) {
  15421.   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, __b);
  15422. }
  15423.  
  15424. static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a,
  15425.                                               vector bool int __b) {
  15426.   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, (vector int)__b);
  15427. }
  15428.  
  15429. static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
  15430.                                               vector unsigned int __b) {
  15431.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, __b);
  15432. }
  15433.  
  15434. static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
  15435.                                               vector bool int __b) {
  15436.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, (vector unsigned int)__b);
  15437. }
  15438.  
  15439. static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
  15440.                                               vector int __b) {
  15441.   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector signed int)__a, __b);
  15442. }
  15443.  
  15444. static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
  15445.                                               vector unsigned int __b) {
  15446.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, __b);
  15447. }
  15448.  
  15449. static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
  15450.                                               vector bool int __b) {
  15451.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a,
  15452.                                       (vector unsigned int)__b);
  15453. }
  15454.  
  15455. #ifdef __VSX__
  15456. static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
  15457.                                               vector signed long long __b) {
  15458.   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a, __b);
  15459. }
  15460.  
  15461. static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
  15462.                                               vector unsigned long long __b) {
  15463.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a, __b);
  15464. }
  15465.  
  15466. static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
  15467.                                               vector bool long long __b) {
  15468.   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a,
  15469.                                       (vector signed long long)__b);
  15470. }
  15471.  
  15472. static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
  15473.                                               vector bool long long __b) {
  15474.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a,
  15475.                                       (vector unsigned long long)__b);
  15476. }
  15477.  
  15478. static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
  15479.                                               vector signed long long __b) {
  15480.   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__a,
  15481.                                       __b);
  15482. }
  15483.  
  15484. static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
  15485.                                               vector unsigned long long __b) {
  15486.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
  15487.                                       __b);
  15488. }
  15489.  
  15490. static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
  15491.                                               vector bool long long __b) {
  15492.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
  15493.                                       (vector unsigned long long)__b);
  15494. }
  15495. #endif
  15496.  
  15497. static __inline__ int __ATTRS_o_ai vec_all_le(vector float __a,
  15498.                                               vector float __b) {
  15499. #ifdef __VSX__
  15500.   return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __b, __a);
  15501. #else
  15502.   return __builtin_altivec_vcmpgefp_p(__CR6_LT, __b, __a);
  15503. #endif
  15504. }
  15505.  
  15506. #ifdef __VSX__
  15507. static __inline__ int __ATTRS_o_ai vec_all_le(vector double __a,
  15508.                                               vector double __b) {
  15509.   return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __b, __a);
  15510. }
  15511. #endif
  15512.  
  15513. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  15514. static __inline__ int __ATTRS_o_ai vec_all_le(vector signed __int128 __a,
  15515.                                               vector signed __int128 __b) {
  15516.   return __builtin_altivec_vcmpgtsq_p(__CR6_EQ, __a, __b);
  15517. }
  15518.  
  15519. static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned __int128 __a,
  15520.                                               vector unsigned __int128 __b) {
  15521.   return __builtin_altivec_vcmpgtuq_p(__CR6_EQ, __a, __b);
  15522. }
  15523. #endif
  15524.  
  15525. /* vec_all_lt */
  15526.  
  15527. static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
  15528.                                               vector signed char __b) {
  15529.   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, __a);
  15530. }
  15531.  
  15532. static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
  15533.                                               vector bool char __b) {
  15534.   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__b, __a);
  15535. }
  15536.  
  15537. static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
  15538.                                               vector unsigned char __b) {
  15539.   return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, __a);
  15540. }
  15541.  
  15542. static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
  15543.                                               vector bool char __b) {
  15544.   return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, __a);
  15545. }
  15546.  
  15547. static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
  15548.                                               vector signed char __b) {
  15549.   return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, (vector signed char)__a);
  15550. }
  15551.  
  15552. static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
  15553.                                               vector unsigned char __b) {
  15554.   return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, (vector unsigned char)__a);
  15555. }
  15556.  
  15557. static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
  15558.                                               vector bool char __b) {
  15559.   return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b,
  15560.                                       (vector unsigned char)__a);
  15561. }
  15562.  
  15563. static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
  15564.                                               vector short __b) {
  15565.   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, __a);
  15566. }
  15567.  
  15568. static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
  15569.                                               vector bool short __b) {
  15570.   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector short)__b, __a);
  15571. }
  15572.  
  15573. static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
  15574.                                               vector unsigned short __b) {
  15575.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, __a);
  15576. }
  15577.  
  15578. static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
  15579.                                               vector bool short __b) {
  15580.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
  15581.                                       __a);
  15582. }
  15583.  
  15584. static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
  15585.                                               vector short __b) {
  15586.   return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, (vector signed short)__a);
  15587. }
  15588.  
  15589. static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
  15590.                                               vector unsigned short __b) {
  15591.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b,
  15592.                                       (vector unsigned short)__a);
  15593. }
  15594.  
  15595. static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
  15596.                                               vector bool short __b) {
  15597.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
  15598.                                       (vector unsigned short)__a);
  15599. }
  15600.  
  15601. static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a, vector int __b) {
  15602.   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, __a);
  15603. }
  15604.  
  15605. static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a,
  15606.                                               vector bool int __b) {
  15607.   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector int)__b, __a);
  15608. }
  15609.  
  15610. static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
  15611.                                               vector unsigned int __b) {
  15612.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, __a);
  15613. }
  15614.  
  15615. static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
  15616.                                               vector bool int __b) {
  15617.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, __a);
  15618. }
  15619.  
  15620. static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
  15621.                                               vector int __b) {
  15622.   return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, (vector signed int)__a);
  15623. }
  15624.  
  15625. static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
  15626.                                               vector unsigned int __b) {
  15627.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, (vector unsigned int)__a);
  15628. }
  15629.  
  15630. static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
  15631.                                               vector bool int __b) {
  15632.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b,
  15633.                                       (vector unsigned int)__a);
  15634. }
  15635.  
  15636. #ifdef __VSX__
  15637. static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
  15638.                                               vector signed long long __b) {
  15639.   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b, __a);
  15640. }
  15641.  
  15642. static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
  15643.                                               vector unsigned long long __b) {
  15644.   return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b, __a);
  15645. }
  15646.  
  15647. static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
  15648.                                               vector bool long long __b) {
  15649.   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__b,
  15650.                                       __a);
  15651. }
  15652.  
  15653. static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
  15654.                                               vector bool long long __b) {
  15655.   return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
  15656.                                       __a);
  15657. }
  15658.  
  15659. static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
  15660.                                               vector signed long long __b) {
  15661.   return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b,
  15662.                                       (vector signed long long)__a);
  15663. }
  15664.  
  15665. static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
  15666.                                               vector unsigned long long __b) {
  15667.   return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b,
  15668.                                       (vector unsigned long long)__a);
  15669. }
  15670.  
  15671. static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
  15672.                                               vector bool long long __b) {
  15673.   return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
  15674.                                       (vector unsigned long long)__a);
  15675. }
  15676. #endif
  15677.  
  15678. static __inline__ int __ATTRS_o_ai vec_all_lt(vector float __a,
  15679.                                               vector float __b) {
  15680. #ifdef __VSX__
  15681.   return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __b, __a);
  15682. #else
  15683.   return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __b, __a);
  15684. #endif
  15685. }
  15686.  
  15687. #ifdef __VSX__
  15688. static __inline__ int __ATTRS_o_ai vec_all_lt(vector double __a,
  15689.                                               vector double __b) {
  15690.   return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __b, __a);
  15691. }
  15692. #endif
  15693.  
  15694. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  15695. static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed __int128 __a,
  15696.                                               vector signed __int128 __b) {
  15697.   return __builtin_altivec_vcmpgtsq_p(__CR6_LT, __b, __a);
  15698. }
  15699.  
  15700. static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned __int128 __a,
  15701.                                               vector unsigned __int128 __b) {
  15702.   return __builtin_altivec_vcmpgtuq_p(__CR6_LT, __b, __a);
  15703. }
  15704. #endif
  15705.  
  15706. /* vec_all_nan */
  15707.  
  15708. static __inline__ int __ATTRS_o_ai vec_all_nan(vector float __a) {
  15709. #ifdef __VSX__
  15710.   return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __a);
  15711. #else
  15712.   return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __a);
  15713. #endif
  15714. }
  15715.  
  15716. #ifdef __VSX__
  15717. static __inline__ int __ATTRS_o_ai vec_all_nan(vector double __a) {
  15718.   return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __a);
  15719. }
  15720. #endif
  15721.  
  15722. /* vec_all_ne */
  15723.  
  15724. static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
  15725.                                               vector signed char __b) {
  15726.   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15727.                                       (vector char)__b);
  15728. }
  15729.  
  15730. static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
  15731.                                               vector bool char __b) {
  15732.   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15733.                                       (vector char)__b);
  15734. }
  15735.  
  15736. static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
  15737.                                               vector unsigned char __b) {
  15738.   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15739.                                       (vector char)__b);
  15740. }
  15741.  
  15742. static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
  15743.                                               vector bool char __b) {
  15744.   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15745.                                       (vector char)__b);
  15746. }
  15747.  
  15748. static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
  15749.                                               vector signed char __b) {
  15750.   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15751.                                       (vector char)__b);
  15752. }
  15753.  
  15754. static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
  15755.                                               vector unsigned char __b) {
  15756.   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15757.                                       (vector char)__b);
  15758. }
  15759.  
  15760. static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
  15761.                                               vector bool char __b) {
  15762.   return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
  15763.                                       (vector char)__b);
  15764. }
  15765.  
  15766. static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
  15767.                                               vector short __b) {
  15768.   return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, __b);
  15769. }
  15770.  
  15771. static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
  15772.                                               vector bool short __b) {
  15773.   return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, (vector short)__b);
  15774. }
  15775.  
  15776. static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
  15777.                                               vector unsigned short __b) {
  15778.   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
  15779.                                       (vector short)__b);
  15780. }
  15781.  
  15782. static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
  15783.                                               vector bool short __b) {
  15784.   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
  15785.                                       (vector short)__b);
  15786. }
  15787.  
  15788. static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
  15789.                                               vector short __b) {
  15790.   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
  15791.                                       (vector short)__b);
  15792. }
  15793.  
  15794. static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
  15795.                                               vector unsigned short __b) {
  15796.   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
  15797.                                       (vector short)__b);
  15798. }
  15799.  
  15800. static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
  15801.                                               vector bool short __b) {
  15802.   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
  15803.                                       (vector short)__b);
  15804. }
  15805.  
  15806. static __inline__ int __ATTRS_o_ai vec_all_ne(vector pixel __a,
  15807.                                               vector pixel __b) {
  15808.   return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
  15809.                                       (vector short)__b);
  15810. }
  15811.  
  15812. static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a, vector int __b) {
  15813.   return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, __b);
  15814. }
  15815.  
  15816. static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a,
  15817.                                               vector bool int __b) {
  15818.   return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, (vector int)__b);
  15819. }
  15820.  
  15821. static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
  15822.                                               vector unsigned int __b) {
  15823.   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
  15824.                                       (vector int)__b);
  15825. }
  15826.  
  15827. static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
  15828.                                               vector bool int __b) {
  15829.   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
  15830.                                       (vector int)__b);
  15831. }
  15832.  
  15833. static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
  15834.                                               vector int __b) {
  15835.   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
  15836.                                       (vector int)__b);
  15837. }
  15838.  
  15839. static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
  15840.                                               vector unsigned int __b) {
  15841.   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
  15842.                                       (vector int)__b);
  15843. }
  15844.  
  15845. static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
  15846.                                               vector bool int __b) {
  15847.   return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
  15848.                                       (vector int)__b);
  15849. }
  15850.  
  15851. #ifdef __VSX__
  15852. static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
  15853.                                               vector signed long long __b) {
  15854.   return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a, __b);
  15855. }
  15856.  
  15857. static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
  15858.                                               vector unsigned long long __b) {
  15859.   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector long long)__a,
  15860.                                       (vector long long)__b);
  15861. }
  15862.  
  15863. static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
  15864.                                               vector bool long long __b) {
  15865.   return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a,
  15866.                                       (vector signed long long)__b);
  15867. }
  15868.  
  15869. static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
  15870.                                               vector bool long long __b) {
  15871.   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
  15872.                                       (vector signed long long)__b);
  15873. }
  15874.  
  15875. static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
  15876.                                               vector signed long long __b) {
  15877.   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
  15878.                                       (vector signed long long)__b);
  15879. }
  15880.  
  15881. static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
  15882.                                               vector unsigned long long __b) {
  15883.   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
  15884.                                       (vector signed long long)__b);
  15885. }
  15886.  
  15887. static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
  15888.                                               vector bool long long __b) {
  15889.   return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
  15890.                                       (vector signed long long)__b);
  15891. }
  15892. #endif
  15893.  
  15894. static __inline__ int __ATTRS_o_ai vec_all_ne(vector float __a,
  15895.                                               vector float __b) {
  15896. #ifdef __VSX__
  15897.   return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __b);
  15898. #else
  15899.   return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __b);
  15900. #endif
  15901. }
  15902.  
  15903. #ifdef __VSX__
  15904. static __inline__ int __ATTRS_o_ai vec_all_ne(vector double __a,
  15905.                                               vector double __b) {
  15906.   return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __b);
  15907. }
  15908. #endif
  15909.  
  15910. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  15911. static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed __int128 __a,
  15912.                                               vector signed __int128 __b) {
  15913.   return __builtin_altivec_vcmpequq_p(__CR6_EQ, (vector unsigned __int128)__a,
  15914.                                       __b);
  15915. }
  15916.  
  15917. static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned __int128 __a,
  15918.                                               vector unsigned __int128 __b) {
  15919.   return __builtin_altivec_vcmpequq_p(__CR6_EQ, __a,
  15920.                                       (vector signed __int128)__b);
  15921. }
  15922.  
  15923. static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool __int128 __a,
  15924.                                               vector bool __int128 __b) {
  15925.   return __builtin_altivec_vcmpequq_p(__CR6_EQ, (vector unsigned __int128)__a,
  15926.                                       (vector signed __int128)__b);
  15927. }
  15928. #endif
  15929.  
  15930. /* vec_all_nge */
  15931.  
  15932. static __inline__ int __ATTRS_o_ai vec_all_nge(vector float __a,
  15933.                                                vector float __b) {
  15934. #ifdef __VSX__
  15935.   return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __a, __b);
  15936. #else
  15937.   return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __a, __b);
  15938. #endif
  15939. }
  15940.  
  15941. #ifdef __VSX__
  15942. static __inline__ int __ATTRS_o_ai vec_all_nge(vector double __a,
  15943.                                                vector double __b) {
  15944.   return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __a, __b);
  15945. }
  15946. #endif
  15947.  
  15948. /* vec_all_ngt */
  15949.  
  15950. static __inline__ int __ATTRS_o_ai vec_all_ngt(vector float __a,
  15951.                                                vector float __b) {
  15952. #ifdef __VSX__
  15953.   return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __a, __b);
  15954. #else
  15955.   return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __a, __b);
  15956. #endif
  15957. }
  15958.  
  15959. #ifdef __VSX__
  15960. static __inline__ int __ATTRS_o_ai vec_all_ngt(vector double __a,
  15961.                                                vector double __b) {
  15962.   return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __a, __b);
  15963. }
  15964. #endif
  15965.  
  15966. /* vec_all_nle */
  15967.  
  15968. static __inline__ int __ATTRS_o_ai
  15969. vec_all_nle(vector float __a, vector float __b) {
  15970. #ifdef __VSX__
  15971.   return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __b, __a);
  15972. #else
  15973.   return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __b, __a);
  15974. #endif
  15975. }
  15976.  
  15977. #ifdef __VSX__
  15978. static __inline__ int __ATTRS_o_ai vec_all_nle(vector double __a,
  15979.                                                vector double __b) {
  15980.   return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __b, __a);
  15981. }
  15982. #endif
  15983.  
  15984. /* vec_all_nlt */
  15985.  
  15986. static __inline__ int __ATTRS_o_ai
  15987. vec_all_nlt(vector float __a, vector float __b) {
  15988. #ifdef __VSX__
  15989.   return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __b, __a);
  15990. #else
  15991.   return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __b, __a);
  15992. #endif
  15993. }
  15994.  
  15995. #ifdef __VSX__
  15996. static __inline__ int __ATTRS_o_ai vec_all_nlt(vector double __a,
  15997.                                                vector double __b) {
  15998.   return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __b, __a);
  15999. }
  16000. #endif
  16001.  
  16002. /* vec_all_numeric */
  16003.  
  16004. static __inline__ int __ATTRS_o_ai
  16005. vec_all_numeric(vector float __a) {
  16006. #ifdef __VSX__
  16007.   return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __a);
  16008. #else
  16009.   return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __a);
  16010. #endif
  16011. }
  16012.  
  16013. #ifdef __VSX__
  16014. static __inline__ int __ATTRS_o_ai vec_all_numeric(vector double __a) {
  16015.   return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __a);
  16016. }
  16017. #endif
  16018.  
  16019. /* vec_any_eq */
  16020.  
  16021. static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
  16022.                                               vector signed char __b) {
  16023.   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16024.                                       (vector char)__b);
  16025. }
  16026.  
  16027. static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
  16028.                                               vector bool char __b) {
  16029.   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16030.                                       (vector char)__b);
  16031. }
  16032.  
  16033. static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
  16034.                                               vector unsigned char __b) {
  16035.   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16036.                                       (vector char)__b);
  16037. }
  16038.  
  16039. static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
  16040.                                               vector bool char __b) {
  16041.   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16042.                                       (vector char)__b);
  16043. }
  16044.  
  16045. static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
  16046.                                               vector signed char __b) {
  16047.   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16048.                                       (vector char)__b);
  16049. }
  16050.  
  16051. static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
  16052.                                               vector unsigned char __b) {
  16053.   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16054.                                       (vector char)__b);
  16055. }
  16056.  
  16057. static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
  16058.                                               vector bool char __b) {
  16059.   return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
  16060.                                       (vector char)__b);
  16061. }
  16062.  
  16063. static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
  16064.                                               vector short __b) {
  16065.   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, __b);
  16066. }
  16067.  
  16068. static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
  16069.                                               vector bool short __b) {
  16070.   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, (vector short)__b);
  16071. }
  16072.  
  16073. static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
  16074.                                               vector unsigned short __b) {
  16075.   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
  16076.                                       (vector short)__b);
  16077. }
  16078.  
  16079. static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
  16080.                                               vector bool short __b) {
  16081.   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
  16082.                                       (vector short)__b);
  16083. }
  16084.  
  16085. static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
  16086.                                               vector short __b) {
  16087.   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
  16088.                                       (vector short)__b);
  16089. }
  16090.  
  16091. static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
  16092.                                               vector unsigned short __b) {
  16093.   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
  16094.                                       (vector short)__b);
  16095. }
  16096.  
  16097. static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
  16098.                                               vector bool short __b) {
  16099.   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
  16100.                                       (vector short)__b);
  16101. }
  16102.  
  16103. static __inline__ int __ATTRS_o_ai vec_any_eq(vector pixel __a,
  16104.                                               vector pixel __b) {
  16105.   return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
  16106.                                       (vector short)__b);
  16107. }
  16108.  
  16109. static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a, vector int __b) {
  16110.   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, __b);
  16111. }
  16112.  
  16113. static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a,
  16114.                                               vector bool int __b) {
  16115.   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, (vector int)__b);
  16116. }
  16117.  
  16118. static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
  16119.                                               vector unsigned int __b) {
  16120.   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
  16121.                                       (vector int)__b);
  16122. }
  16123.  
  16124. static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
  16125.                                               vector bool int __b) {
  16126.   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
  16127.                                       (vector int)__b);
  16128. }
  16129.  
  16130. static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
  16131.                                               vector int __b) {
  16132.   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
  16133.                                       (vector int)__b);
  16134. }
  16135.  
  16136. static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
  16137.                                               vector unsigned int __b) {
  16138.   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
  16139.                                       (vector int)__b);
  16140. }
  16141.  
  16142. static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
  16143.                                               vector bool int __b) {
  16144.   return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
  16145.                                       (vector int)__b);
  16146. }
  16147.  
  16148. #ifdef __VSX__
  16149. static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
  16150.                                               vector signed long long __b) {
  16151.   return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a, __b);
  16152. }
  16153.  
  16154. static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
  16155.                                               vector unsigned long long __b) {
  16156.   return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector long long)__a,
  16157.                                       (vector long long)__b);
  16158. }
  16159.  
  16160. static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
  16161.                                               vector bool long long __b) {
  16162.   return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a,
  16163.                                       (vector signed long long)__b);
  16164. }
  16165.  
  16166. static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
  16167.                                               vector bool long long __b) {
  16168.   return __builtin_altivec_vcmpequd_p(
  16169.       __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
  16170. }
  16171.  
  16172. static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
  16173.                                               vector signed long long __b) {
  16174.   return __builtin_altivec_vcmpequd_p(
  16175.       __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
  16176. }
  16177.  
  16178. static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
  16179.                                               vector unsigned long long __b) {
  16180.   return __builtin_altivec_vcmpequd_p(
  16181.       __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
  16182. }
  16183.  
  16184. static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
  16185.                                               vector bool long long __b) {
  16186.   return __builtin_altivec_vcmpequd_p(
  16187.       __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
  16188. }
  16189. #endif
  16190.  
  16191. static __inline__ int __ATTRS_o_ai vec_any_eq(vector float __a,
  16192.                                               vector float __b) {
  16193. #ifdef __VSX__
  16194.   return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __b);
  16195. #else
  16196.   return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __b);
  16197. #endif
  16198. }
  16199.  
  16200. #ifdef __VSX__
  16201. static __inline__ int __ATTRS_o_ai vec_any_eq(vector double __a,
  16202.                                               vector double __b) {
  16203.   return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __b);
  16204. }
  16205. #endif
  16206.  
  16207. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  16208. static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed __int128 __a,
  16209.                                               vector signed __int128 __b) {
  16210.   return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV,
  16211.                                       (vector unsigned __int128)__a, __b);
  16212. }
  16213.  
  16214. static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned __int128 __a,
  16215.                                               vector unsigned __int128 __b) {
  16216.   return __builtin_altivec_vcmpequq_p(__CR6_EQ_REV, __a,
  16217.                                       (vector signed __int128)__b);
  16218. }
  16219.  
  16220. static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool __int128 __a,
  16221.                                               vector bool __int128 __b) {
  16222.   return __builtin_altivec_vcmpequq_p(
  16223.       __CR6_EQ_REV, (vector unsigned __int128)__a, (vector signed __int128)__b);
  16224. }
  16225. #endif
  16226.  
  16227. /* vec_any_ge */
  16228.  
  16229. static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
  16230.                                               vector signed char __b) {
  16231.   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b, __a);
  16232. }
  16233.  
  16234. static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
  16235.                                               vector bool char __b) {
  16236.   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__b,
  16237.                                       __a);
  16238. }
  16239.  
  16240. static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
  16241.                                               vector unsigned char __b) {
  16242.   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, __a);
  16243. }
  16244.  
  16245. static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
  16246.                                               vector bool char __b) {
  16247.   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
  16248.                                       __a);
  16249. }
  16250.  
  16251. static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
  16252.                                               vector signed char __b) {
  16253.   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b,
  16254.                                       (vector signed char)__a);
  16255. }
  16256.  
  16257. static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
  16258.                                               vector unsigned char __b) {
  16259.   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b,
  16260.                                       (vector unsigned char)__a);
  16261. }
  16262.  
  16263. static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
  16264.                                               vector bool char __b) {
  16265.   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
  16266.                                       (vector unsigned char)__a);
  16267. }
  16268.  
  16269. static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
  16270.                                               vector short __b) {
  16271.   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b, __a);
  16272. }
  16273.  
  16274. static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
  16275.                                               vector bool short __b) {
  16276.   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector short)__b, __a);
  16277. }
  16278.  
  16279. static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
  16280.                                               vector unsigned short __b) {
  16281.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, __a);
  16282. }
  16283.  
  16284. static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
  16285.                                               vector bool short __b) {
  16286.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
  16287.                                       __a);
  16288. }
  16289.  
  16290. static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
  16291.                                               vector short __b) {
  16292.   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b,
  16293.                                       (vector signed short)__a);
  16294. }
  16295.  
  16296. static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
  16297.                                               vector unsigned short __b) {
  16298.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b,
  16299.                                       (vector unsigned short)__a);
  16300. }
  16301.  
  16302. static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
  16303.                                               vector bool short __b) {
  16304.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
  16305.                                       (vector unsigned short)__a);
  16306. }
  16307.  
  16308. static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a, vector int __b) {
  16309.   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b, __a);
  16310. }
  16311.  
  16312. static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a,
  16313.                                               vector bool int __b) {
  16314.   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector int)__b, __a);
  16315. }
  16316.  
  16317. static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
  16318.                                               vector unsigned int __b) {
  16319.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, __a);
  16320. }
  16321.  
  16322. static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
  16323.                                               vector bool int __b) {
  16324.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
  16325.                                       __a);
  16326. }
  16327.  
  16328. static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
  16329.                                               vector int __b) {
  16330.   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b,
  16331.                                       (vector signed int)__a);
  16332. }
  16333.  
  16334. static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
  16335.                                               vector unsigned int __b) {
  16336.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b,
  16337.                                       (vector unsigned int)__a);
  16338. }
  16339.  
  16340. static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
  16341.                                               vector bool int __b) {
  16342.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
  16343.                                       (vector unsigned int)__a);
  16344. }
  16345.  
  16346. #ifdef __VSX__
  16347. static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
  16348.                                               vector signed long long __b) {
  16349.   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b, __a);
  16350. }
  16351.  
  16352. static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
  16353.                                               vector unsigned long long __b) {
  16354.   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b, __a);
  16355. }
  16356.  
  16357. static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
  16358.                                               vector bool long long __b) {
  16359.   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,
  16360.                                       (vector signed long long)__b, __a);
  16361. }
  16362.  
  16363. static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
  16364.                                               vector bool long long __b) {
  16365.   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
  16366.                                       (vector unsigned long long)__b, __a);
  16367. }
  16368.  
  16369. static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
  16370.                                               vector signed long long __b) {
  16371.   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b,
  16372.                                       (vector signed long long)__a);
  16373. }
  16374.  
  16375. static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
  16376.                                               vector unsigned long long __b) {
  16377.   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b,
  16378.                                       (vector unsigned long long)__a);
  16379. }
  16380.  
  16381. static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
  16382.                                               vector bool long long __b) {
  16383.   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
  16384.                                       (vector unsigned long long)__b,
  16385.                                       (vector unsigned long long)__a);
  16386. }
  16387. #endif
  16388.  
  16389. static __inline__ int __ATTRS_o_ai vec_any_ge(vector float __a,
  16390.                                               vector float __b) {
  16391. #ifdef __VSX__
  16392.   return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __a, __b);
  16393. #else
  16394.   return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __a, __b);
  16395. #endif
  16396. }
  16397.  
  16398. #ifdef __VSX__
  16399. static __inline__ int __ATTRS_o_ai vec_any_ge(vector double __a,
  16400.                                               vector double __b) {
  16401.   return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __a, __b);
  16402. }
  16403. #endif
  16404.  
  16405. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  16406. static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed __int128 __a,
  16407.                                               vector signed __int128 __b) {
  16408.   return __builtin_altivec_vcmpgtsq_p(__CR6_LT_REV, __b, __a);
  16409. }
  16410.  
  16411. static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned __int128 __a,
  16412.                                               vector unsigned __int128 __b) {
  16413.   return __builtin_altivec_vcmpgtuq_p(__CR6_LT_REV, __b, __a);
  16414. }
  16415. #endif
  16416.  
  16417. /* vec_any_gt */
  16418.  
  16419. static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
  16420.                                               vector signed char __b) {
  16421.   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, __b);
  16422. }
  16423.  
  16424. static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
  16425.                                               vector bool char __b) {
  16426.   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a,
  16427.                                       (vector signed char)__b);
  16428. }
  16429.  
  16430. static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
  16431.                                               vector unsigned char __b) {
  16432.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, __b);
  16433. }
  16434.  
  16435. static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
  16436.                                               vector bool char __b) {
  16437.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a,
  16438.                                       (vector unsigned char)__b);
  16439. }
  16440.  
  16441. static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
  16442.                                               vector signed char __b) {
  16443.   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__a,
  16444.                                       __b);
  16445. }
  16446.  
  16447. static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
  16448.                                               vector unsigned char __b) {
  16449.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
  16450.                                       __b);
  16451. }
  16452.  
  16453. static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
  16454.                                               vector bool char __b) {
  16455.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
  16456.                                       (vector unsigned char)__b);
  16457. }
  16458.  
  16459. static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
  16460.                                               vector short __b) {
  16461.   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, __b);
  16462. }
  16463.  
  16464. static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
  16465.                                               vector bool short __b) {
  16466.   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, (vector short)__b);
  16467. }
  16468.  
  16469. static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
  16470.                                               vector unsigned short __b) {
  16471.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, __b);
  16472. }
  16473.  
  16474. static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
  16475.                                               vector bool short __b) {
  16476.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a,
  16477.                                       (vector unsigned short)__b);
  16478. }
  16479.  
  16480. static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
  16481.                                               vector short __b) {
  16482.   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector signed short)__a,
  16483.                                       __b);
  16484. }
  16485.  
  16486. static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
  16487.                                               vector unsigned short __b) {
  16488.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
  16489.                                       __b);
  16490. }
  16491.  
  16492. static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
  16493.                                               vector bool short __b) {
  16494.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
  16495.                                       (vector unsigned short)__b);
  16496. }
  16497.  
  16498. static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a, vector int __b) {
  16499.   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, __b);
  16500. }
  16501.  
  16502. static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a,
  16503.                                               vector bool int __b) {
  16504.   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, (vector int)__b);
  16505. }
  16506.  
  16507. static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
  16508.                                               vector unsigned int __b) {
  16509.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, __b);
  16510. }
  16511.  
  16512. static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
  16513.                                               vector bool int __b) {
  16514.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a,
  16515.                                       (vector unsigned int)__b);
  16516. }
  16517.  
  16518. static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
  16519.                                               vector int __b) {
  16520.   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector signed int)__a,
  16521.                                       __b);
  16522. }
  16523.  
  16524. static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
  16525.                                               vector unsigned int __b) {
  16526.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
  16527.                                       __b);
  16528. }
  16529.  
  16530. static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
  16531.                                               vector bool int __b) {
  16532.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
  16533.                                       (vector unsigned int)__b);
  16534. }
  16535.  
  16536. #ifdef __VSX__
  16537. static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
  16538.                                               vector signed long long __b) {
  16539.   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a, __b);
  16540. }
  16541.  
  16542. static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
  16543.                                               vector unsigned long long __b) {
  16544.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a, __b);
  16545. }
  16546.  
  16547. static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
  16548.                                               vector bool long long __b) {
  16549.   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a,
  16550.                                       (vector signed long long)__b);
  16551. }
  16552.  
  16553. static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
  16554.                                               vector bool long long __b) {
  16555.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a,
  16556.                                       (vector unsigned long long)__b);
  16557. }
  16558.  
  16559. static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
  16560.                                               vector signed long long __b) {
  16561.   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,
  16562.                                       (vector signed long long)__a, __b);
  16563. }
  16564.  
  16565. static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
  16566.                                               vector unsigned long long __b) {
  16567.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
  16568.                                       (vector unsigned long long)__a, __b);
  16569. }
  16570.  
  16571. static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
  16572.                                               vector bool long long __b) {
  16573.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
  16574.                                       (vector unsigned long long)__a,
  16575.                                       (vector unsigned long long)__b);
  16576. }
  16577. #endif
  16578.  
  16579. static __inline__ int __ATTRS_o_ai vec_any_gt(vector float __a,
  16580.                                               vector float __b) {
  16581. #ifdef __VSX__
  16582.   return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __a, __b);
  16583. #else
  16584.   return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __a, __b);
  16585. #endif
  16586. }
  16587.  
  16588. #ifdef __VSX__
  16589. static __inline__ int __ATTRS_o_ai vec_any_gt(vector double __a,
  16590.                                               vector double __b) {
  16591.   return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __a, __b);
  16592. }
  16593. #endif
  16594.  
  16595. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  16596. static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed __int128 __a,
  16597.                                               vector signed __int128 __b) {
  16598.   return __builtin_altivec_vcmpgtsq_p(__CR6_EQ_REV, __a, __b);
  16599. }
  16600.  
  16601. static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned __int128 __a,
  16602.                                               vector unsigned __int128 __b) {
  16603.   return __builtin_altivec_vcmpgtuq_p(__CR6_EQ_REV, __a, __b);
  16604. }
  16605. #endif
  16606.  
  16607. /* vec_any_le */
  16608.  
  16609. static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
  16610.                                               vector signed char __b) {
  16611.   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, __b);
  16612. }
  16613.  
  16614. static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
  16615.                                               vector bool char __b) {
  16616.   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a,
  16617.                                       (vector signed char)__b);
  16618. }
  16619.  
  16620. static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
  16621.                                               vector unsigned char __b) {
  16622.   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, __b);
  16623. }
  16624.  
  16625. static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
  16626.                                               vector bool char __b) {
  16627.   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a,
  16628.                                       (vector unsigned char)__b);
  16629. }
  16630.  
  16631. static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
  16632.                                               vector signed char __b) {
  16633.   return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__a,
  16634.                                       __b);
  16635. }
  16636.  
  16637. static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
  16638.                                               vector unsigned char __b) {
  16639.   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
  16640.                                       __b);
  16641. }
  16642.  
  16643. static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
  16644.                                               vector bool char __b) {
  16645.   return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
  16646.                                       (vector unsigned char)__b);
  16647. }
  16648.  
  16649. static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
  16650.                                               vector short __b) {
  16651.   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, __b);
  16652. }
  16653.  
  16654. static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
  16655.                                               vector bool short __b) {
  16656.   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, (vector short)__b);
  16657. }
  16658.  
  16659. static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
  16660.                                               vector unsigned short __b) {
  16661.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, __b);
  16662. }
  16663.  
  16664. static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
  16665.                                               vector bool short __b) {
  16666.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a,
  16667.                                       (vector unsigned short)__b);
  16668. }
  16669.  
  16670. static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
  16671.                                               vector short __b) {
  16672.   return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector signed short)__a,
  16673.                                       __b);
  16674. }
  16675.  
  16676. static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
  16677.                                               vector unsigned short __b) {
  16678.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
  16679.                                       __b);
  16680. }
  16681.  
  16682. static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
  16683.                                               vector bool short __b) {
  16684.   return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
  16685.                                       (vector unsigned short)__b);
  16686. }
  16687.  
  16688. static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a, vector int __b) {
  16689.   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, __b);
  16690. }
  16691.  
  16692. static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a,
  16693.                                               vector bool int __b) {
  16694.   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, (vector int)__b);
  16695. }
  16696.  
  16697. static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
  16698.                                               vector unsigned int __b) {
  16699.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, __b);
  16700. }
  16701.  
  16702. static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
  16703.                                               vector bool int __b) {
  16704.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a,
  16705.                                       (vector unsigned int)__b);
  16706. }
  16707.  
  16708. static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
  16709.                                               vector int __b) {
  16710.   return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector signed int)__a,
  16711.                                       __b);
  16712. }
  16713.  
  16714. static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
  16715.                                               vector unsigned int __b) {
  16716.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
  16717.                                       __b);
  16718. }
  16719.  
  16720. static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
  16721.                                               vector bool int __b) {
  16722.   return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
  16723.                                       (vector unsigned int)__b);
  16724. }
  16725.  
  16726. #ifdef __VSX__
  16727. static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
  16728.                                               vector signed long long __b) {
  16729.   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a, __b);
  16730. }
  16731.  
  16732. static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
  16733.                                               vector unsigned long long __b) {
  16734.   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a, __b);
  16735. }
  16736.  
  16737. static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
  16738.                                               vector bool long long __b) {
  16739.   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a,
  16740.                                       (vector signed long long)__b);
  16741. }
  16742.  
  16743. static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
  16744.                                               vector bool long long __b) {
  16745.   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a,
  16746.                                       (vector unsigned long long)__b);
  16747. }
  16748.  
  16749. static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
  16750.                                               vector signed long long __b) {
  16751.   return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,
  16752.                                       (vector signed long long)__a, __b);
  16753. }
  16754.  
  16755. static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
  16756.                                               vector unsigned long long __b) {
  16757.   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
  16758.                                       (vector unsigned long long)__a, __b);
  16759. }
  16760.  
  16761. static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
  16762.                                               vector bool long long __b) {
  16763.   return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
  16764.                                       (vector unsigned long long)__a,
  16765.                                       (vector unsigned long long)__b);
  16766. }
  16767. #endif
  16768.  
  16769. static __inline__ int __ATTRS_o_ai vec_any_le(vector float __a,
  16770.                                               vector float __b) {
  16771. #ifdef __VSX__
  16772.   return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __b, __a);
  16773. #else
  16774.   return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __b, __a);
  16775. #endif
  16776. }
  16777.  
  16778. #ifdef __VSX__
  16779. static __inline__ int __ATTRS_o_ai vec_any_le(vector double __a,
  16780.                                               vector double __b) {
  16781.   return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __b, __a);
  16782. }
  16783. #endif
  16784.  
  16785. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  16786. static __inline__ int __ATTRS_o_ai vec_any_le(vector signed __int128 __a,
  16787.                                               vector signed __int128 __b) {
  16788.   return __builtin_altivec_vcmpgtsq_p(__CR6_LT_REV, __a, __b);
  16789. }
  16790.  
  16791. static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned __int128 __a,
  16792.                                               vector unsigned __int128 __b) {
  16793.   return __builtin_altivec_vcmpgtuq_p(__CR6_LT_REV, __a, __b);
  16794. }
  16795. #endif
  16796.  
  16797. /* vec_any_lt */
  16798.  
  16799. static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
  16800.                                               vector signed char __b) {
  16801.   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b, __a);
  16802. }
  16803.  
  16804. static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
  16805.                                               vector bool char __b) {
  16806.   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__b,
  16807.                                       __a);
  16808. }
  16809.  
  16810. static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
  16811.                                               vector unsigned char __b) {
  16812.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, __a);
  16813. }
  16814.  
  16815. static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
  16816.                                               vector bool char __b) {
  16817.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
  16818.                                       __a);
  16819. }
  16820.  
  16821. static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
  16822.                                               vector signed char __b) {
  16823.   return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b,
  16824.                                       (vector signed char)__a);
  16825. }
  16826.  
  16827. static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
  16828.                                               vector unsigned char __b) {
  16829.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b,
  16830.                                       (vector unsigned char)__a);
  16831. }
  16832.  
  16833. static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
  16834.                                               vector bool char __b) {
  16835.   return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
  16836.                                       (vector unsigned char)__a);
  16837. }
  16838.  
  16839. static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
  16840.                                               vector short __b) {
  16841.   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b, __a);
  16842. }
  16843.  
  16844. static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
  16845.                                               vector bool short __b) {
  16846.   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector short)__b, __a);
  16847. }
  16848.  
  16849. static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
  16850.                                               vector unsigned short __b) {
  16851.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, __a);
  16852. }
  16853.  
  16854. static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
  16855.                                               vector bool short __b) {
  16856.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
  16857.                                       __a);
  16858. }
  16859.  
  16860. static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
  16861.                                               vector short __b) {
  16862.   return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b,
  16863.                                       (vector signed short)__a);
  16864. }
  16865.  
  16866. static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
  16867.                                               vector unsigned short __b) {
  16868.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b,
  16869.                                       (vector unsigned short)__a);
  16870. }
  16871.  
  16872. static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
  16873.                                               vector bool short __b) {
  16874.   return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
  16875.                                       (vector unsigned short)__a);
  16876. }
  16877.  
  16878. static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a, vector int __b) {
  16879.   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b, __a);
  16880. }
  16881.  
  16882. static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a,
  16883.                                               vector bool int __b) {
  16884.   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector int)__b, __a);
  16885. }
  16886.  
  16887. static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
  16888.                                               vector unsigned int __b) {
  16889.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, __a);
  16890. }
  16891.  
  16892. static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
  16893.                                               vector bool int __b) {
  16894.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
  16895.                                       __a);
  16896. }
  16897.  
  16898. static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
  16899.                                               vector int __b) {
  16900.   return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b,
  16901.                                       (vector signed int)__a);
  16902. }
  16903.  
  16904. static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
  16905.                                               vector unsigned int __b) {
  16906.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b,
  16907.                                       (vector unsigned int)__a);
  16908. }
  16909.  
  16910. static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
  16911.                                               vector bool int __b) {
  16912.   return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
  16913.                                       (vector unsigned int)__a);
  16914. }
  16915.  
  16916. #ifdef __VSX__
  16917. static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
  16918.                                               vector signed long long __b) {
  16919.   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b, __a);
  16920. }
  16921.  
  16922. static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
  16923.                                               vector unsigned long long __b) {
  16924.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b, __a);
  16925. }
  16926.  
  16927. static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
  16928.                                               vector bool long long __b) {
  16929.   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,
  16930.                                       (vector signed long long)__b, __a);
  16931. }
  16932.  
  16933. static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
  16934.                                               vector bool long long __b) {
  16935.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
  16936.                                       (vector unsigned long long)__b, __a);
  16937. }
  16938.  
  16939. static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
  16940.                                               vector signed long long __b) {
  16941.   return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b,
  16942.                                       (vector signed long long)__a);
  16943. }
  16944.  
  16945. static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
  16946.                                               vector unsigned long long __b) {
  16947.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b,
  16948.                                       (vector unsigned long long)__a);
  16949. }
  16950.  
  16951. static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
  16952.                                               vector bool long long __b) {
  16953.   return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
  16954.                                       (vector unsigned long long)__b,
  16955.                                       (vector unsigned long long)__a);
  16956. }
  16957. #endif
  16958.  
  16959. static __inline__ int __ATTRS_o_ai vec_any_lt(vector float __a,
  16960.                                               vector float __b) {
  16961. #ifdef __VSX__
  16962.   return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __b, __a);
  16963. #else
  16964.   return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __b, __a);
  16965. #endif
  16966. }
  16967.  
  16968. #ifdef __VSX__
  16969. static __inline__ int __ATTRS_o_ai vec_any_lt(vector double __a,
  16970.                                               vector double __b) {
  16971.   return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __b, __a);
  16972. }
  16973. #endif
  16974.  
  16975. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  16976. static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed __int128 __a,
  16977.                                               vector signed __int128 __b) {
  16978.   return __builtin_altivec_vcmpgtsq_p(__CR6_EQ_REV, __b, __a);
  16979. }
  16980.  
  16981. static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned __int128 __a,
  16982.                                               vector unsigned __int128 __b) {
  16983.   return __builtin_altivec_vcmpgtuq_p(__CR6_EQ_REV, __b, __a);
  16984. }
  16985. #endif
  16986.  
  16987. /* vec_any_nan */
  16988.  
  16989. static __inline__ int __ATTRS_o_ai vec_any_nan(vector float __a) {
  16990. #ifdef __VSX__
  16991.   return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __a);
  16992. #else
  16993.   return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __a);
  16994. #endif
  16995. }
  16996. #ifdef __VSX__
  16997. static __inline__ int __ATTRS_o_ai vec_any_nan(vector double __a) {
  16998.   return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __a);
  16999. }
  17000. #endif
  17001.  
  17002. /* vec_any_ne */
  17003.  
  17004. static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
  17005.                                               vector signed char __b) {
  17006.   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17007.                                       (vector char)__b);
  17008. }
  17009.  
  17010. static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
  17011.                                               vector bool char __b) {
  17012.   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17013.                                       (vector char)__b);
  17014. }
  17015.  
  17016. static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
  17017.                                               vector unsigned char __b) {
  17018.   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17019.                                       (vector char)__b);
  17020. }
  17021.  
  17022. static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
  17023.                                               vector bool char __b) {
  17024.   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17025.                                       (vector char)__b);
  17026. }
  17027.  
  17028. static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
  17029.                                               vector signed char __b) {
  17030.   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17031.                                       (vector char)__b);
  17032. }
  17033.  
  17034. static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
  17035.                                               vector unsigned char __b) {
  17036.   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17037.                                       (vector char)__b);
  17038. }
  17039.  
  17040. static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
  17041.                                               vector bool char __b) {
  17042.   return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
  17043.                                       (vector char)__b);
  17044. }
  17045.  
  17046. static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
  17047.                                               vector short __b) {
  17048.   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, __b);
  17049. }
  17050.  
  17051. static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
  17052.                                               vector bool short __b) {
  17053.   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, (vector short)__b);
  17054. }
  17055.  
  17056. static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
  17057.                                               vector unsigned short __b) {
  17058.   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
  17059.                                       (vector short)__b);
  17060. }
  17061.  
  17062. static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
  17063.                                               vector bool short __b) {
  17064.   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
  17065.                                       (vector short)__b);
  17066. }
  17067.  
  17068. static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
  17069.                                               vector short __b) {
  17070.   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
  17071.                                       (vector short)__b);
  17072. }
  17073.  
  17074. static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
  17075.                                               vector unsigned short __b) {
  17076.   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
  17077.                                       (vector short)__b);
  17078. }
  17079.  
  17080. static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
  17081.                                               vector bool short __b) {
  17082.   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
  17083.                                       (vector short)__b);
  17084. }
  17085.  
  17086. static __inline__ int __ATTRS_o_ai vec_any_ne(vector pixel __a,
  17087.                                               vector pixel __b) {
  17088.   return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
  17089.                                       (vector short)__b);
  17090. }
  17091.  
  17092. static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a, vector int __b) {
  17093.   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, __b);
  17094. }
  17095.  
  17096. static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a,
  17097.                                               vector bool int __b) {
  17098.   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, (vector int)__b);
  17099. }
  17100.  
  17101. static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
  17102.                                               vector unsigned int __b) {
  17103.   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
  17104.                                       (vector int)__b);
  17105. }
  17106.  
  17107. static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
  17108.                                               vector bool int __b) {
  17109.   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
  17110.                                       (vector int)__b);
  17111. }
  17112.  
  17113. static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
  17114.                                               vector int __b) {
  17115.   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
  17116.                                       (vector int)__b);
  17117. }
  17118.  
  17119. static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
  17120.                                               vector unsigned int __b) {
  17121.   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
  17122.                                       (vector int)__b);
  17123. }
  17124.  
  17125. static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
  17126.                                               vector bool int __b) {
  17127.   return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
  17128.                                       (vector int)__b);
  17129. }
  17130.  
  17131. #ifdef __VSX__
  17132. static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
  17133.                                               vector signed long long __b) {
  17134. #ifdef __POWER8_VECTOR__
  17135.   return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a, __b);
  17136. #else
  17137.   // Take advantage of the optimized sequence for vec_all_eq when vcmpequd is
  17138.   // not available.
  17139.   return !vec_all_eq(__a, __b);
  17140. #endif
  17141. }
  17142.  
  17143. static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
  17144.                                               vector unsigned long long __b) {
  17145.   return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
  17146. }
  17147.  
  17148. static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
  17149.                                               vector bool long long __b) {
  17150.   return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
  17151. }
  17152.  
  17153. static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
  17154.                                               vector bool long long __b) {
  17155.   return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
  17156. }
  17157.  
  17158. static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
  17159.                                               vector signed long long __b) {
  17160.   return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
  17161. }
  17162.  
  17163. static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
  17164.                                               vector unsigned long long __b) {
  17165.   return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
  17166. }
  17167.  
  17168. static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
  17169.                                               vector bool long long __b) {
  17170.   return vec_any_ne((vector signed long long)__a, (vector signed long long)__b);
  17171. }
  17172. #endif
  17173.  
  17174. static __inline__ int __ATTRS_o_ai vec_any_ne(vector float __a,
  17175.                                               vector float __b) {
  17176. #ifdef __VSX__
  17177.   return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __b);
  17178. #else
  17179.   return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __b);
  17180. #endif
  17181. }
  17182.  
  17183. #ifdef __VSX__
  17184. static __inline__ int __ATTRS_o_ai vec_any_ne(vector double __a,
  17185.                                               vector double __b) {
  17186.   return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __b);
  17187. }
  17188. #endif
  17189.  
  17190. #if defined(__POWER10_VECTOR__) && defined(__SIZEOF_INT128__)
  17191. static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed __int128 __a,
  17192.                                               vector signed __int128 __b) {
  17193.   return __builtin_altivec_vcmpequq_p(__CR6_LT_REV,
  17194.                                       (vector unsigned __int128)__a, __b);
  17195. }
  17196.  
  17197. static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned __int128 __a,
  17198.                                               vector unsigned __int128 __b) {
  17199.   return __builtin_altivec_vcmpequq_p(__CR6_LT_REV, __a,
  17200.                                       (vector signed __int128)__b);
  17201. }
  17202.  
  17203. static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool __int128 __a,
  17204.                                               vector bool __int128 __b) {
  17205.   return __builtin_altivec_vcmpequq_p(
  17206.       __CR6_LT_REV, (vector unsigned __int128)__a, (vector signed __int128)__b);
  17207. }
  17208. #endif
  17209.  
  17210. /* vec_any_nge */
  17211.  
  17212. static __inline__ int __ATTRS_o_ai vec_any_nge(vector float __a,
  17213.                                                vector float __b) {
  17214. #ifdef __VSX__
  17215.   return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __a, __b);
  17216. #else
  17217.   return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __a, __b);
  17218. #endif
  17219. }
  17220.  
  17221. #ifdef __VSX__
  17222. static __inline__ int __ATTRS_o_ai vec_any_nge(vector double __a,
  17223.                                                vector double __b) {
  17224.   return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __a, __b);
  17225. }
  17226. #endif
  17227.  
  17228. /* vec_any_ngt */
  17229.  
  17230. static __inline__ int __ATTRS_o_ai vec_any_ngt(vector float __a,
  17231.                                                vector float __b) {
  17232. #ifdef __VSX__
  17233.   return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __a, __b);
  17234. #else
  17235.   return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __a, __b);
  17236. #endif
  17237. }
  17238.  
  17239. #ifdef __VSX__
  17240. static __inline__ int __ATTRS_o_ai vec_any_ngt(vector double __a,
  17241.                                                vector double __b) {
  17242.   return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __a, __b);
  17243. }
  17244. #endif
  17245.  
  17246. /* vec_any_nle */
  17247.  
  17248. static __inline__ int __ATTRS_o_ai vec_any_nle(vector float __a,
  17249.                                                vector float __b) {
  17250. #ifdef __VSX__
  17251.   return __builtin_vsx_xvcmpgesp_p(__CR6_LT_REV, __b, __a);
  17252. #else
  17253.   return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __b, __a);
  17254. #endif
  17255. }
  17256.  
  17257. #ifdef __VSX__
  17258. static __inline__ int __ATTRS_o_ai vec_any_nle(vector double __a,
  17259.                                                vector double __b) {
  17260.   return __builtin_vsx_xvcmpgedp_p(__CR6_LT_REV, __b, __a);
  17261. }
  17262. #endif
  17263.  
  17264. /* vec_any_nlt */
  17265.  
  17266. static __inline__ int __ATTRS_o_ai vec_any_nlt(vector float __a,
  17267.                                                vector float __b) {
  17268. #ifdef __VSX__
  17269.   return __builtin_vsx_xvcmpgtsp_p(__CR6_LT_REV, __b, __a);
  17270. #else
  17271.   return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __b, __a);
  17272. #endif
  17273. }
  17274.  
  17275. #ifdef __VSX__
  17276. static __inline__ int __ATTRS_o_ai vec_any_nlt(vector double __a,
  17277.                                                vector double __b) {
  17278.   return __builtin_vsx_xvcmpgtdp_p(__CR6_LT_REV, __b, __a);
  17279. }
  17280. #endif
  17281.  
  17282. /* vec_any_numeric */
  17283.  
  17284. static __inline__ int __ATTRS_o_ai vec_any_numeric(vector float __a) {
  17285. #ifdef __VSX__
  17286.   return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __a);
  17287. #else
  17288.   return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __a);
  17289. #endif
  17290. }
  17291.  
  17292. #ifdef __VSX__
  17293. static __inline__ int __ATTRS_o_ai vec_any_numeric(vector double __a) {
  17294.   return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __a);
  17295. }
  17296. #endif
  17297.  
  17298. /* vec_any_out */
  17299.  
  17300. static __inline__ int __attribute__((__always_inline__))
  17301. vec_any_out(vector float __a, vector float __b) {
  17302.   return __builtin_altivec_vcmpbfp_p(__CR6_EQ_REV, __a, __b);
  17303. }
  17304.  
  17305. /* Power 8 Crypto functions
  17306. Note: We diverge from the current GCC implementation with regard
  17307. to cryptography and related functions as follows:
  17308. - Only the SHA and AES instructions and builtins are disabled by -mno-crypto
  17309. - The remaining ones are only available on Power8 and up so
  17310.   require -mpower8-vector
  17311. The justification for this is that export requirements require that
  17312. Category:Vector.Crypto is optional (i.e. compliant hardware may not provide
  17313. support). As a result, we need to be able to turn off support for those.
  17314. The remaining ones (currently controlled by -mcrypto for GCC) still
  17315. need to be provided on compliant hardware even if Vector.Crypto is not
  17316. provided.
  17317. */
  17318. #ifdef __CRYPTO__
  17319. #define vec_sbox_be __builtin_altivec_crypto_vsbox
  17320. #define vec_cipher_be __builtin_altivec_crypto_vcipher
  17321. #define vec_cipherlast_be __builtin_altivec_crypto_vcipherlast
  17322. #define vec_ncipher_be __builtin_altivec_crypto_vncipher
  17323. #define vec_ncipherlast_be __builtin_altivec_crypto_vncipherlast
  17324.  
  17325. #ifdef __VSX__
  17326. static __inline__ vector unsigned char __attribute__((__always_inline__))
  17327. __builtin_crypto_vsbox(vector unsigned char __a) {
  17328.   return __builtin_altivec_crypto_vsbox(__a);
  17329. }
  17330.  
  17331. static __inline__ vector unsigned char __attribute__((__always_inline__))
  17332. __builtin_crypto_vcipher(vector unsigned char __a,
  17333.                          vector unsigned char __b) {
  17334.   return __builtin_altivec_crypto_vcipher(__a, __b);
  17335. }
  17336.  
  17337. static __inline__ vector unsigned char __attribute__((__always_inline__))
  17338. __builtin_crypto_vcipherlast(vector unsigned char __a,
  17339.                              vector unsigned char __b) {
  17340.   return __builtin_altivec_crypto_vcipherlast(__a, __b);
  17341. }
  17342.  
  17343. static __inline__ vector unsigned char __attribute__((__always_inline__))
  17344. __builtin_crypto_vncipher(vector unsigned char __a,
  17345.                           vector unsigned char __b) {
  17346.   return __builtin_altivec_crypto_vncipher(__a, __b);
  17347. }
  17348.  
  17349. static __inline__ vector unsigned char  __attribute__((__always_inline__))
  17350. __builtin_crypto_vncipherlast(vector unsigned char __a,
  17351.                               vector unsigned char __b) {
  17352.   return __builtin_altivec_crypto_vncipherlast(__a, __b);
  17353. }
  17354. #endif /* __VSX__ */
  17355.  
  17356. #define __builtin_crypto_vshasigmad __builtin_altivec_crypto_vshasigmad
  17357. #define __builtin_crypto_vshasigmaw __builtin_altivec_crypto_vshasigmaw
  17358.  
  17359. #define vec_shasigma_be(X, Y, Z)                                               \
  17360.   _Generic((X), vector unsigned int                                            \
  17361.            : __builtin_crypto_vshasigmaw, vector unsigned long long            \
  17362.            : __builtin_crypto_vshasigmad)((X), (Y), (Z))
  17363. #endif
  17364.  
  17365. #ifdef __POWER8_VECTOR__
  17366. static __inline__ vector bool char __ATTRS_o_ai
  17367. vec_permxor(vector bool char __a, vector bool char __b,
  17368.             vector bool char __c) {
  17369.   return (vector bool char)__builtin_altivec_crypto_vpermxor(
  17370.       (vector unsigned char)__a, (vector unsigned char)__b,
  17371.       (vector unsigned char)__c);
  17372. }
  17373.  
  17374. static __inline__ vector signed char __ATTRS_o_ai
  17375. vec_permxor(vector signed char __a, vector signed char __b,
  17376.             vector signed char __c) {
  17377.   return (vector signed char)__builtin_altivec_crypto_vpermxor(
  17378.       (vector unsigned char)__a, (vector unsigned char)__b,
  17379.       (vector unsigned char)__c);
  17380. }
  17381.  
  17382. static __inline__ vector unsigned char __ATTRS_o_ai
  17383. vec_permxor(vector unsigned char __a, vector unsigned char __b,
  17384.             vector unsigned char __c) {
  17385.   return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
  17386. }
  17387.  
  17388. static __inline__ vector unsigned char __ATTRS_o_ai
  17389. __builtin_crypto_vpermxor(vector unsigned char __a, vector unsigned char __b,
  17390.                           vector unsigned char __c) {
  17391.   return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
  17392. }
  17393.  
  17394. static __inline__ vector unsigned short __ATTRS_o_ai
  17395. __builtin_crypto_vpermxor(vector unsigned short __a, vector unsigned short __b,
  17396.                           vector unsigned short __c) {
  17397.   return (vector unsigned short)__builtin_altivec_crypto_vpermxor(
  17398.       (vector unsigned char)__a, (vector unsigned char)__b,
  17399.       (vector unsigned char)__c);
  17400. }
  17401.  
  17402. static __inline__ vector unsigned int __ATTRS_o_ai __builtin_crypto_vpermxor(
  17403.     vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
  17404.   return (vector unsigned int)__builtin_altivec_crypto_vpermxor(
  17405.       (vector unsigned char)__a, (vector unsigned char)__b,
  17406.       (vector unsigned char)__c);
  17407. }
  17408.  
  17409. static __inline__ vector unsigned long long __ATTRS_o_ai
  17410. __builtin_crypto_vpermxor(vector unsigned long long __a,
  17411.                           vector unsigned long long __b,
  17412.                           vector unsigned long long __c) {
  17413.   return (vector unsigned long long)__builtin_altivec_crypto_vpermxor(
  17414.       (vector unsigned char)__a, (vector unsigned char)__b,
  17415.       (vector unsigned char)__c);
  17416. }
  17417.  
  17418. static __inline__ vector unsigned char __ATTRS_o_ai
  17419. __builtin_crypto_vpmsumb(vector unsigned char __a, vector unsigned char __b) {
  17420.   return __builtin_altivec_crypto_vpmsumb(__a, __b);
  17421. }
  17422.  
  17423. static __inline__ vector unsigned short __ATTRS_o_ai
  17424. __builtin_crypto_vpmsumb(vector unsigned short __a, vector unsigned short __b) {
  17425.   return __builtin_altivec_crypto_vpmsumh(__a, __b);
  17426. }
  17427.  
  17428. static __inline__ vector unsigned int __ATTRS_o_ai
  17429. __builtin_crypto_vpmsumb(vector unsigned int __a, vector unsigned int __b) {
  17430.   return __builtin_altivec_crypto_vpmsumw(__a, __b);
  17431. }
  17432.  
  17433. static __inline__ vector unsigned long long __ATTRS_o_ai
  17434. __builtin_crypto_vpmsumb(vector unsigned long long __a,
  17435.                          vector unsigned long long __b) {
  17436.   return __builtin_altivec_crypto_vpmsumd(__a, __b);
  17437. }
  17438.  
  17439. static __inline__ vector signed char __ATTRS_o_ai
  17440. vec_vgbbd(vector signed char __a) {
  17441.   return (vector signed char)__builtin_altivec_vgbbd((vector unsigned char)__a);
  17442. }
  17443.  
  17444. #define vec_pmsum_be __builtin_crypto_vpmsumb
  17445. #define vec_gb __builtin_altivec_vgbbd
  17446.  
  17447. static __inline__ vector unsigned char __ATTRS_o_ai
  17448. vec_vgbbd(vector unsigned char __a) {
  17449.   return __builtin_altivec_vgbbd(__a);
  17450. }
  17451.  
  17452. static __inline__ vector signed long long __ATTRS_o_ai
  17453. vec_gbb(vector signed long long __a) {
  17454.   return (vector signed long long)__builtin_altivec_vgbbd(
  17455.       (vector unsigned char)__a);
  17456. }
  17457.  
  17458. static __inline__ vector unsigned long long __ATTRS_o_ai
  17459. vec_gbb(vector unsigned long long __a) {
  17460.   return (vector unsigned long long)__builtin_altivec_vgbbd(
  17461.       (vector unsigned char)__a);
  17462. }
  17463.  
  17464. static __inline__ vector long long __ATTRS_o_ai
  17465. vec_vbpermq(vector signed char __a, vector signed char __b) {
  17466.   return (vector long long)__builtin_altivec_vbpermq((vector unsigned char)__a,
  17467.                                                      (vector unsigned char)__b);
  17468. }
  17469.  
  17470. static __inline__ vector long long __ATTRS_o_ai
  17471. vec_vbpermq(vector unsigned char __a, vector unsigned char __b) {
  17472.   return (vector long long)__builtin_altivec_vbpermq(__a, __b);
  17473. }
  17474.  
  17475. #if defined(__powerpc64__) && defined(__SIZEOF_INT128__)
  17476. static __inline__ vector unsigned long long __ATTRS_o_ai
  17477. vec_bperm(vector unsigned __int128 __a, vector unsigned char __b) {
  17478.   return __builtin_altivec_vbpermq((vector unsigned char)__a,
  17479.                                    (vector unsigned char)__b);
  17480. }
  17481. #endif
  17482. static __inline__ vector unsigned char __ATTRS_o_ai
  17483. vec_bperm(vector unsigned char __a, vector unsigned char __b) {
  17484.   return (vector unsigned char)__builtin_altivec_vbpermq(__a, __b);
  17485. }
  17486. #endif // __POWER8_VECTOR__
  17487. #ifdef __POWER9_VECTOR__
  17488. static __inline__ vector unsigned long long __ATTRS_o_ai
  17489. vec_bperm(vector unsigned long long __a, vector unsigned char __b) {
  17490.   return __builtin_altivec_vbpermd(__a, __b);
  17491. }
  17492. #endif
  17493.  
  17494.  
  17495. /* vec_reve */
  17496.  
  17497. static inline __ATTRS_o_ai vector bool char vec_reve(vector bool char __a) {
  17498.   return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
  17499.                                  5, 4, 3, 2, 1, 0);
  17500. }
  17501.  
  17502. static inline __ATTRS_o_ai vector signed char vec_reve(vector signed char __a) {
  17503.   return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
  17504.                                  5, 4, 3, 2, 1, 0);
  17505. }
  17506.  
  17507. static inline __ATTRS_o_ai vector unsigned char
  17508. vec_reve(vector unsigned char __a) {
  17509.   return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
  17510.                                  5, 4, 3, 2, 1, 0);
  17511. }
  17512.  
  17513. static inline __ATTRS_o_ai vector bool int vec_reve(vector bool int __a) {
  17514.   return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
  17515. }
  17516.  
  17517. static inline __ATTRS_o_ai vector signed int vec_reve(vector signed int __a) {
  17518.   return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
  17519. }
  17520.  
  17521. static inline __ATTRS_o_ai vector unsigned int
  17522. vec_reve(vector unsigned int __a) {
  17523.   return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
  17524. }
  17525.  
  17526. static inline __ATTRS_o_ai vector bool short vec_reve(vector bool short __a) {
  17527.   return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
  17528. }
  17529.  
  17530. static inline __ATTRS_o_ai vector signed short
  17531. vec_reve(vector signed short __a) {
  17532.   return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
  17533. }
  17534.  
  17535. static inline __ATTRS_o_ai vector unsigned short
  17536. vec_reve(vector unsigned short __a) {
  17537.   return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
  17538. }
  17539.  
  17540. static inline __ATTRS_o_ai vector float vec_reve(vector float __a) {
  17541.   return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
  17542. }
  17543.  
  17544. #ifdef __VSX__
  17545. static inline __ATTRS_o_ai vector bool long long
  17546. vec_reve(vector bool long long __a) {
  17547.   return __builtin_shufflevector(__a, __a, 1, 0);
  17548. }
  17549.  
  17550. static inline __ATTRS_o_ai vector signed long long
  17551. vec_reve(vector signed long long __a) {
  17552.   return __builtin_shufflevector(__a, __a, 1, 0);
  17553. }
  17554.  
  17555. static inline __ATTRS_o_ai vector unsigned long long
  17556. vec_reve(vector unsigned long long __a) {
  17557.   return __builtin_shufflevector(__a, __a, 1, 0);
  17558. }
  17559.  
  17560. static inline __ATTRS_o_ai vector double vec_reve(vector double __a) {
  17561.   return __builtin_shufflevector(__a, __a, 1, 0);
  17562. }
  17563. #endif
  17564.  
  17565. /* vec_revb */
  17566. static __inline__ vector bool char __ATTRS_o_ai
  17567. vec_revb(vector bool char __a) {
  17568.   return __a;
  17569. }
  17570.  
  17571. static __inline__ vector signed char __ATTRS_o_ai
  17572. vec_revb(vector signed char __a) {
  17573.   return __a;
  17574. }
  17575.  
  17576. static __inline__ vector unsigned char __ATTRS_o_ai
  17577. vec_revb(vector unsigned char __a) {
  17578.   return __a;
  17579. }
  17580.  
  17581. static __inline__ vector bool short __ATTRS_o_ai
  17582. vec_revb(vector bool short __a) {
  17583.   vector unsigned char __indices =
  17584.       { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
  17585.   return vec_perm(__a, __a, __indices);
  17586. }
  17587.  
  17588. static __inline__ vector signed short __ATTRS_o_ai
  17589. vec_revb(vector signed short __a) {
  17590.   vector unsigned char __indices =
  17591.       { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
  17592.   return vec_perm(__a, __a, __indices);
  17593. }
  17594.  
  17595. static __inline__ vector unsigned short __ATTRS_o_ai
  17596. vec_revb(vector unsigned short __a) {
  17597.   vector unsigned char __indices =
  17598.      { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
  17599.   return vec_perm(__a, __a, __indices);
  17600. }
  17601.  
  17602. static __inline__ vector bool int __ATTRS_o_ai
  17603. vec_revb(vector bool int __a) {
  17604.   vector unsigned char __indices =
  17605.       { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
  17606.   return vec_perm(__a, __a, __indices);
  17607. }
  17608.  
  17609. static __inline__ vector signed int __ATTRS_o_ai
  17610. vec_revb(vector signed int __a) {
  17611.   vector unsigned char __indices =
  17612.       { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
  17613.   return vec_perm(__a, __a, __indices);
  17614. }
  17615.  
  17616. static __inline__ vector unsigned int __ATTRS_o_ai
  17617. vec_revb(vector unsigned int __a) {
  17618.   vector unsigned char __indices =
  17619.       { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
  17620.   return vec_perm(__a, __a, __indices);
  17621. }
  17622.  
  17623. static __inline__ vector float __ATTRS_o_ai
  17624. vec_revb(vector float __a) {
  17625.  vector unsigned char __indices =
  17626.       { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
  17627.  return vec_perm(__a, __a, __indices);
  17628. }
  17629.  
  17630. #ifdef __VSX__
  17631. static __inline__ vector bool long long __ATTRS_o_ai
  17632. vec_revb(vector bool long long __a) {
  17633.   vector unsigned char __indices =
  17634.       { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
  17635.   return vec_perm(__a, __a, __indices);
  17636. }
  17637.  
  17638. static __inline__ vector signed long long __ATTRS_o_ai
  17639. vec_revb(vector signed long long __a) {
  17640.   vector unsigned char __indices =
  17641.       { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
  17642.   return vec_perm(__a, __a, __indices);
  17643. }
  17644.  
  17645. static __inline__ vector unsigned long long __ATTRS_o_ai
  17646. vec_revb(vector unsigned long long __a) {
  17647.   vector unsigned char __indices =
  17648.       { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
  17649.   return vec_perm(__a, __a, __indices);
  17650. }
  17651.  
  17652. static __inline__ vector double __ATTRS_o_ai
  17653. vec_revb(vector double __a) {
  17654.   vector unsigned char __indices =
  17655.       { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
  17656.   return vec_perm(__a, __a, __indices);
  17657. }
  17658. #endif /* End __VSX__ */
  17659.  
  17660. #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  17661.     defined(__SIZEOF_INT128__)
  17662. static __inline__ vector signed __int128 __ATTRS_o_ai
  17663. vec_revb(vector signed __int128 __a) {
  17664.   vector unsigned char __indices =
  17665.       { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
  17666.   return (vector signed __int128)vec_perm((vector signed int)__a,
  17667.                                           (vector signed int)__a,
  17668.                                            __indices);
  17669. }
  17670.  
  17671. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  17672. vec_revb(vector unsigned __int128 __a) {
  17673.   vector unsigned char __indices =
  17674.       { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
  17675.   return (vector unsigned __int128)vec_perm((vector signed int)__a,
  17676.                                             (vector signed int)__a,
  17677.                                              __indices);
  17678. }
  17679. #endif /* END __POWER8_VECTOR__ && __powerpc64__ */
  17680.  
  17681. /* vec_xl */
  17682.  
  17683. #define vec_xld2 vec_xl
  17684. #define vec_xlw4 vec_xl
  17685. typedef vector signed char unaligned_vec_schar __attribute__((aligned(1)));
  17686. typedef vector unsigned char unaligned_vec_uchar __attribute__((aligned(1)));
  17687. typedef vector signed short unaligned_vec_sshort __attribute__((aligned(1)));
  17688. typedef vector unsigned short unaligned_vec_ushort __attribute__((aligned(1)));
  17689. typedef vector signed int unaligned_vec_sint __attribute__((aligned(1)));
  17690. typedef vector unsigned int unaligned_vec_uint __attribute__((aligned(1)));
  17691. typedef vector float unaligned_vec_float __attribute__((aligned(1)));
  17692.  
  17693. static inline __ATTRS_o_ai vector signed char vec_xl(ptrdiff_t __offset,
  17694.                                                      const signed char *__ptr) {
  17695.   return *(unaligned_vec_schar *)(__ptr + __offset);
  17696. }
  17697.  
  17698. static inline __ATTRS_o_ai vector unsigned char
  17699. vec_xl(ptrdiff_t __offset, const unsigned char *__ptr) {
  17700.   return *(unaligned_vec_uchar*)(__ptr + __offset);
  17701. }
  17702.  
  17703. static inline __ATTRS_o_ai vector signed short
  17704. vec_xl(ptrdiff_t __offset, const signed short *__ptr) {
  17705.   signed char *__addr = (signed char *)__ptr + __offset;
  17706.   return *(unaligned_vec_sshort *)__addr;
  17707. }
  17708.  
  17709. static inline __ATTRS_o_ai vector unsigned short
  17710. vec_xl(ptrdiff_t __offset, const unsigned short *__ptr) {
  17711.   signed char *__addr = (signed char *)__ptr + __offset;
  17712.   return *(unaligned_vec_ushort *)__addr;
  17713. }
  17714.  
  17715. static inline __ATTRS_o_ai vector signed int vec_xl(ptrdiff_t __offset,
  17716.                                                     const signed int *__ptr) {
  17717.   signed char *__addr = (signed char *)__ptr + __offset;
  17718.   return *(unaligned_vec_sint *)__addr;
  17719. }
  17720.  
  17721. static inline __ATTRS_o_ai vector unsigned int
  17722. vec_xl(ptrdiff_t __offset, const unsigned int *__ptr) {
  17723.   signed char *__addr = (signed char *)__ptr + __offset;
  17724.   return *(unaligned_vec_uint *)__addr;
  17725. }
  17726.  
  17727. static inline __ATTRS_o_ai vector float vec_xl(ptrdiff_t __offset,
  17728.                                                const float *__ptr) {
  17729.   signed char *__addr = (signed char *)__ptr + __offset;
  17730.   return *(unaligned_vec_float *)__addr;
  17731. }
  17732.  
  17733. #ifdef __VSX__
  17734. typedef vector signed long long unaligned_vec_sll __attribute__((aligned(1)));
  17735. typedef vector unsigned long long unaligned_vec_ull __attribute__((aligned(1)));
  17736. typedef vector double unaligned_vec_double __attribute__((aligned(1)));
  17737.  
  17738. static inline __ATTRS_o_ai vector signed long long
  17739. vec_xl(ptrdiff_t __offset, const signed long long *__ptr) {
  17740.   signed char *__addr = (signed char *)__ptr + __offset;
  17741.   return *(unaligned_vec_sll *)__addr;
  17742. }
  17743.  
  17744. static inline __ATTRS_o_ai vector unsigned long long
  17745. vec_xl(ptrdiff_t __offset, const unsigned long long *__ptr) {
  17746.   signed char *__addr = (signed char *)__ptr + __offset;
  17747.   return *(unaligned_vec_ull *)__addr;
  17748. }
  17749.  
  17750. static inline __ATTRS_o_ai vector double vec_xl(ptrdiff_t __offset,
  17751.                                                 const double *__ptr) {
  17752.   signed char *__addr = (signed char *)__ptr + __offset;
  17753.   return *(unaligned_vec_double *)__addr;
  17754. }
  17755. #endif
  17756.  
  17757. #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  17758.     defined(__SIZEOF_INT128__)
  17759. typedef vector signed __int128 unaligned_vec_si128 __attribute__((aligned(1)));
  17760. typedef vector unsigned __int128 unaligned_vec_ui128
  17761.     __attribute__((aligned(1)));
  17762. static inline __ATTRS_o_ai vector signed __int128
  17763. vec_xl(ptrdiff_t __offset, const signed __int128 *__ptr) {
  17764.   signed char *__addr = (signed char *)__ptr + __offset;
  17765.   return *(unaligned_vec_si128 *)__addr;
  17766. }
  17767.  
  17768. static inline __ATTRS_o_ai vector unsigned __int128
  17769. vec_xl(ptrdiff_t __offset, const unsigned __int128 *__ptr) {
  17770.   signed char *__addr = (signed char *)__ptr + __offset;
  17771.   return *(unaligned_vec_ui128 *)__addr;
  17772. }
  17773. #endif
  17774.  
  17775. /* vec_xl_be */
  17776.  
  17777. #ifdef __LITTLE_ENDIAN__
  17778. static __inline__ vector signed char __ATTRS_o_ai
  17779. vec_xl_be(ptrdiff_t __offset, const signed char *__ptr) {
  17780.   vector signed char __vec = (vector signed char)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17781.   return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
  17782.                                  13, 12, 11, 10, 9, 8);
  17783. }
  17784.  
  17785. static __inline__ vector unsigned char __ATTRS_o_ai
  17786. vec_xl_be(ptrdiff_t __offset, const unsigned char *__ptr) {
  17787.   vector unsigned char __vec = (vector unsigned char)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17788.   return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
  17789.                                  13, 12, 11, 10, 9, 8);
  17790. }
  17791.  
  17792. static __inline__ vector signed short __ATTRS_o_ai
  17793. vec_xl_be(ptrdiff_t __offset, const signed short *__ptr) {
  17794.   vector signed short __vec = (vector signed short)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17795.   return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
  17796. }
  17797.  
  17798. static __inline__ vector unsigned short __ATTRS_o_ai
  17799. vec_xl_be(ptrdiff_t __offset, const unsigned short *__ptr) {
  17800.   vector unsigned short __vec = (vector unsigned short)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17801.   return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
  17802. }
  17803.  
  17804. static __inline__ vector signed int __ATTRS_o_ai
  17805. vec_xl_be(signed long long  __offset, const signed int *__ptr) {
  17806.   return (vector signed int)__builtin_vsx_lxvw4x_be(__offset, __ptr);
  17807. }
  17808.  
  17809. static __inline__ vector unsigned int __ATTRS_o_ai
  17810. vec_xl_be(signed long long  __offset, const unsigned int *__ptr) {
  17811.   return (vector unsigned int)__builtin_vsx_lxvw4x_be(__offset, __ptr);
  17812. }
  17813.  
  17814. static __inline__ vector float __ATTRS_o_ai
  17815. vec_xl_be(signed long long  __offset, const float *__ptr) {
  17816.   return (vector float)__builtin_vsx_lxvw4x_be(__offset, __ptr);
  17817. }
  17818.  
  17819. #ifdef __VSX__
  17820. static __inline__ vector signed long long __ATTRS_o_ai
  17821. vec_xl_be(signed long long  __offset, const signed long long *__ptr) {
  17822.   return (vector signed long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17823. }
  17824.  
  17825. static __inline__ vector unsigned long long __ATTRS_o_ai
  17826. vec_xl_be(signed long long  __offset, const unsigned long long *__ptr) {
  17827.   return (vector unsigned long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17828. }
  17829.  
  17830. static __inline__ vector double __ATTRS_o_ai
  17831. vec_xl_be(signed long long  __offset, const double *__ptr) {
  17832.   return (vector double)__builtin_vsx_lxvd2x_be(__offset, __ptr);
  17833. }
  17834. #endif
  17835.  
  17836. #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  17837.     defined(__SIZEOF_INT128__)
  17838. static __inline__ vector signed __int128 __ATTRS_o_ai
  17839. vec_xl_be(signed long long  __offset, const signed __int128 *__ptr) {
  17840.   return vec_xl(__offset, __ptr);
  17841. }
  17842.  
  17843. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  17844. vec_xl_be(signed long long  __offset, const unsigned __int128 *__ptr) {
  17845.   return vec_xl(__offset, __ptr);
  17846. }
  17847. #endif
  17848. #else
  17849.   #define vec_xl_be vec_xl
  17850. #endif
  17851.  
  17852. #if defined(__POWER10_VECTOR__) && defined(__VSX__) &&                         \
  17853.     defined(__SIZEOF_INT128__)
  17854.  
  17855. /* vec_xl_sext */
  17856.  
  17857. static __inline__ vector signed __int128 __ATTRS_o_ai
  17858. vec_xl_sext(ptrdiff_t __offset, const signed char *__pointer) {
  17859.   return (vector signed __int128)*(__pointer + __offset);
  17860. }
  17861.  
  17862. static __inline__ vector signed __int128 __ATTRS_o_ai
  17863. vec_xl_sext(ptrdiff_t __offset, const signed short *__pointer) {
  17864.   return (vector signed __int128)*(__pointer + __offset);
  17865. }
  17866.  
  17867. static __inline__ vector signed __int128 __ATTRS_o_ai
  17868. vec_xl_sext(ptrdiff_t __offset, const signed int *__pointer) {
  17869.   return (vector signed __int128)*(__pointer + __offset);
  17870. }
  17871.  
  17872. static __inline__ vector signed __int128 __ATTRS_o_ai
  17873. vec_xl_sext(ptrdiff_t __offset, const signed long long *__pointer) {
  17874.   return (vector signed __int128)*(__pointer + __offset);
  17875. }
  17876.  
  17877. /* vec_xl_zext */
  17878.  
  17879. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  17880. vec_xl_zext(ptrdiff_t __offset, const unsigned char *__pointer) {
  17881.   return (vector unsigned __int128)*(__pointer + __offset);
  17882. }
  17883.  
  17884. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  17885. vec_xl_zext(ptrdiff_t __offset, const unsigned short *__pointer) {
  17886.   return (vector unsigned __int128)*(__pointer + __offset);
  17887. }
  17888.  
  17889. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  17890. vec_xl_zext(ptrdiff_t __offset, const unsigned int *__pointer) {
  17891.   return (vector unsigned __int128)*(__pointer + __offset);
  17892. }
  17893.  
  17894. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  17895. vec_xl_zext(ptrdiff_t __offset, const unsigned long long *__pointer) {
  17896.   return (vector unsigned __int128)*(__pointer + __offset);
  17897. }
  17898.  
  17899. #endif
  17900.  
  17901. /* vec_xlds */
  17902. #ifdef __VSX__
  17903. static __inline__ vector signed long long __ATTRS_o_ai
  17904. vec_xlds(ptrdiff_t __offset, const signed long long *__ptr) {
  17905.   signed long long *__addr = (signed long long*)((signed char *)__ptr + __offset);
  17906.   return (vector signed long long) *__addr;
  17907. }
  17908.  
  17909. static __inline__ vector unsigned long long __ATTRS_o_ai
  17910. vec_xlds(ptrdiff_t __offset, const unsigned long long *__ptr) {
  17911.   unsigned long long *__addr = (unsigned long long *)((signed char *)__ptr + __offset);
  17912.   return (unaligned_vec_ull) *__addr;
  17913. }
  17914.  
  17915. static __inline__ vector double __ATTRS_o_ai vec_xlds(ptrdiff_t __offset,
  17916.                                                       const double *__ptr) {
  17917.   double *__addr = (double*)((signed char *)__ptr + __offset);
  17918.   return (unaligned_vec_double) *__addr;
  17919. }
  17920.  
  17921. /* vec_load_splats */
  17922. static __inline__ vector signed int __ATTRS_o_ai
  17923. vec_load_splats(signed long long __offset, const signed int *__ptr) {
  17924.   signed int *__addr = (signed int*)((signed char *)__ptr + __offset);
  17925.   return (vector signed int)*__addr;
  17926. }
  17927.  
  17928. static __inline__ vector signed int __ATTRS_o_ai
  17929. vec_load_splats(unsigned long long __offset, const signed int *__ptr) {
  17930.   signed int *__addr = (signed int*)((signed char *)__ptr + __offset);
  17931.   return (vector signed int)*__addr;
  17932. }
  17933.  
  17934. static __inline__ vector unsigned int __ATTRS_o_ai
  17935. vec_load_splats(signed long long __offset, const unsigned int *__ptr) {
  17936.   unsigned int *__addr = (unsigned int*)((signed char *)__ptr + __offset);
  17937.   return (vector unsigned int)*__addr;
  17938. }
  17939.  
  17940. static __inline__ vector unsigned int __ATTRS_o_ai
  17941. vec_load_splats(unsigned long long __offset, const unsigned int *__ptr) {
  17942.   unsigned int *__addr = (unsigned int*)((signed char *)__ptr + __offset);
  17943.   return (vector unsigned int)*__addr;
  17944. }
  17945.  
  17946. static __inline__ vector float __ATTRS_o_ai
  17947. vec_load_splats(signed long long __offset, const float *__ptr) {
  17948.   float *__addr = (float*)((signed char *)__ptr + __offset);
  17949.   return (vector float)*__addr;
  17950. }
  17951.  
  17952. static __inline__ vector float __ATTRS_o_ai
  17953. vec_load_splats(unsigned long long __offset, const float *__ptr) {
  17954.   float *__addr = (float*)((signed char *)__ptr + __offset);
  17955.   return (vector float)*__addr;
  17956. }
  17957. #endif
  17958.  
  17959. /* vec_xst */
  17960.  
  17961. #define vec_xstd2 vec_xst
  17962. #define vec_xstw4 vec_xst
  17963. static inline __ATTRS_o_ai void
  17964. vec_xst(vector signed char __vec, ptrdiff_t __offset, signed char *__ptr) {
  17965.   *(unaligned_vec_schar *)(__ptr + __offset) = __vec;
  17966. }
  17967.  
  17968. static inline __ATTRS_o_ai void
  17969. vec_xst(vector unsigned char __vec, ptrdiff_t __offset, unsigned char *__ptr) {
  17970.   *(unaligned_vec_uchar *)(__ptr + __offset) = __vec;
  17971. }
  17972.  
  17973. static inline __ATTRS_o_ai void
  17974. vec_xst(vector signed short __vec, ptrdiff_t __offset, signed short *__ptr) {
  17975.   signed char *__addr = (signed char *)__ptr + __offset;
  17976.   *(unaligned_vec_sshort *)__addr = __vec;
  17977. }
  17978.  
  17979. static inline __ATTRS_o_ai void vec_xst(vector unsigned short __vec,
  17980.                                         ptrdiff_t __offset,
  17981.                                         unsigned short *__ptr) {
  17982.   signed char *__addr = (signed char *)__ptr + __offset;
  17983.   *(unaligned_vec_ushort *)__addr = __vec;
  17984. }
  17985.  
  17986. static inline __ATTRS_o_ai void vec_xst(vector signed int __vec,
  17987.                                         ptrdiff_t __offset, signed int *__ptr) {
  17988.   signed char *__addr = (signed char *)__ptr + __offset;
  17989.   *(unaligned_vec_sint *)__addr = __vec;
  17990. }
  17991.  
  17992. static inline __ATTRS_o_ai void
  17993. vec_xst(vector unsigned int __vec, ptrdiff_t __offset, unsigned int *__ptr) {
  17994.   signed char *__addr = (signed char *)__ptr + __offset;
  17995.   *(unaligned_vec_uint *)__addr = __vec;
  17996. }
  17997.  
  17998. static inline __ATTRS_o_ai void vec_xst(vector float __vec, ptrdiff_t __offset,
  17999.                                         float *__ptr) {
  18000.   signed char *__addr = (signed char *)__ptr + __offset;
  18001.   *(unaligned_vec_float *)__addr = __vec;
  18002. }
  18003.  
  18004. #ifdef __VSX__
  18005. static inline __ATTRS_o_ai void vec_xst(vector signed long long __vec,
  18006.                                         ptrdiff_t __offset,
  18007.                                         signed long long *__ptr) {
  18008.   signed char *__addr = (signed char *)__ptr + __offset;
  18009.   *(unaligned_vec_sll *)__addr = __vec;
  18010. }
  18011.  
  18012. static inline __ATTRS_o_ai void vec_xst(vector unsigned long long __vec,
  18013.                                         ptrdiff_t __offset,
  18014.                                         unsigned long long *__ptr) {
  18015.   signed char *__addr = (signed char *)__ptr + __offset;
  18016.   *(unaligned_vec_ull *)__addr = __vec;
  18017. }
  18018.  
  18019. static inline __ATTRS_o_ai void vec_xst(vector double __vec, ptrdiff_t __offset,
  18020.                                         double *__ptr) {
  18021.   signed char *__addr = (signed char *)__ptr + __offset;
  18022.   *(unaligned_vec_double *)__addr = __vec;
  18023. }
  18024. #endif
  18025.  
  18026. #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  18027.     defined(__SIZEOF_INT128__)
  18028. static inline __ATTRS_o_ai void vec_xst(vector signed __int128 __vec,
  18029.                                         ptrdiff_t __offset,
  18030.                                         signed __int128 *__ptr) {
  18031.   signed char *__addr = (signed char *)__ptr + __offset;
  18032.   *(unaligned_vec_si128 *)__addr = __vec;
  18033. }
  18034.  
  18035. static inline __ATTRS_o_ai void vec_xst(vector unsigned __int128 __vec,
  18036.                                         ptrdiff_t __offset,
  18037.                                         unsigned __int128 *__ptr) {
  18038.   signed char *__addr = (signed char *)__ptr + __offset;
  18039.   *(unaligned_vec_ui128 *)__addr = __vec;
  18040. }
  18041. #endif
  18042.  
  18043. /* vec_xst_trunc */
  18044.  
  18045. #if defined(__POWER10_VECTOR__) && defined(__VSX__) &&                         \
  18046.     defined(__SIZEOF_INT128__)
  18047. static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
  18048.                                               ptrdiff_t __offset,
  18049.                                               signed char *__ptr) {
  18050.   *(__ptr + __offset) = (signed char)__vec[0];
  18051. }
  18052.  
  18053. static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
  18054.                                               ptrdiff_t __offset,
  18055.                                               unsigned char *__ptr) {
  18056.   *(__ptr + __offset) = (unsigned char)__vec[0];
  18057. }
  18058.  
  18059. static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
  18060.                                               ptrdiff_t __offset,
  18061.                                               signed short *__ptr) {
  18062.   *(__ptr + __offset) = (signed short)__vec[0];
  18063. }
  18064.  
  18065. static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
  18066.                                               ptrdiff_t __offset,
  18067.                                               unsigned short *__ptr) {
  18068.   *(__ptr + __offset) = (unsigned short)__vec[0];
  18069. }
  18070.  
  18071. static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
  18072.                                               ptrdiff_t __offset,
  18073.                                               signed int *__ptr) {
  18074.   *(__ptr + __offset) = (signed int)__vec[0];
  18075. }
  18076.  
  18077. static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
  18078.                                               ptrdiff_t __offset,
  18079.                                               unsigned int *__ptr) {
  18080.   *(__ptr + __offset) = (unsigned int)__vec[0];
  18081. }
  18082.  
  18083. static inline __ATTRS_o_ai void vec_xst_trunc(vector signed __int128 __vec,
  18084.                                               ptrdiff_t __offset,
  18085.                                               signed long long *__ptr) {
  18086.   *(__ptr + __offset) = (signed long long)__vec[0];
  18087. }
  18088.  
  18089. static inline __ATTRS_o_ai void vec_xst_trunc(vector unsigned __int128 __vec,
  18090.                                               ptrdiff_t __offset,
  18091.                                               unsigned long long *__ptr) {
  18092.   *(__ptr + __offset) = (unsigned long long)__vec[0];
  18093. }
  18094. #endif
  18095.  
  18096. /* vec_xst_be */
  18097.  
  18098. #ifdef __LITTLE_ENDIAN__
  18099. static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed char __vec,
  18100.                                                signed long long  __offset,
  18101.                                                signed char *__ptr) {
  18102.   vector signed char __tmp =
  18103.      __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
  18104.                              13, 12, 11, 10, 9, 8);
  18105.   typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
  18106.   __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
  18107. }
  18108.  
  18109. static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned char __vec,
  18110.                                                signed long long  __offset,
  18111.                                                unsigned char *__ptr) {
  18112.   vector unsigned char __tmp =
  18113.      __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
  18114.                              13, 12, 11, 10, 9, 8);
  18115.   typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
  18116.   __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
  18117. }
  18118.  
  18119. static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed short __vec,
  18120.                                                signed long long  __offset,
  18121.                                                signed short *__ptr) {
  18122.   vector signed short __tmp =
  18123.      __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
  18124.   typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
  18125.   __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
  18126. }
  18127.  
  18128. static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned short __vec,
  18129.                                                signed long long  __offset,
  18130.                                                unsigned short *__ptr) {
  18131.   vector unsigned short __tmp =
  18132.      __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
  18133.   typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
  18134.   __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
  18135. }
  18136.  
  18137. static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed int __vec,
  18138.                                                signed long long  __offset,
  18139.                                                signed int *__ptr) {
  18140.   __builtin_vsx_stxvw4x_be(__vec, __offset, __ptr);
  18141. }
  18142.  
  18143. static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned int __vec,
  18144.                                                signed long long  __offset,
  18145.                                                unsigned int *__ptr) {
  18146.   __builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);
  18147. }
  18148.  
  18149. static __inline__ void __ATTRS_o_ai vec_xst_be(vector float __vec,
  18150.                                                signed long long  __offset,
  18151.                                                float *__ptr) {
  18152.   __builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);
  18153. }
  18154.  
  18155. #ifdef __VSX__
  18156. static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed long long __vec,
  18157.                                                signed long long  __offset,
  18158.                                                signed long long *__ptr) {
  18159.   __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
  18160. }
  18161.  
  18162. static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned long long __vec,
  18163.                                                signed long long  __offset,
  18164.                                                unsigned long long *__ptr) {
  18165.   __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
  18166. }
  18167.  
  18168. static __inline__ void __ATTRS_o_ai vec_xst_be(vector double __vec,
  18169.                                                signed long long  __offset,
  18170.                                                double *__ptr) {
  18171.   __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
  18172. }
  18173. #endif
  18174.  
  18175. #if defined(__POWER8_VECTOR__) && defined(__powerpc64__) &&                    \
  18176.     defined(__SIZEOF_INT128__)
  18177. static __inline__ void __ATTRS_o_ai vec_xst_be(vector signed __int128 __vec,
  18178.                                                signed long long  __offset,
  18179.                                                signed __int128 *__ptr) {
  18180.   vec_xst(__vec, __offset, __ptr);
  18181. }
  18182.  
  18183. static __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned __int128 __vec,
  18184.                                                signed long long  __offset,
  18185.                                                unsigned __int128 *__ptr) {
  18186.   vec_xst(__vec, __offset, __ptr);
  18187. }
  18188. #endif
  18189. #else
  18190.   #define vec_xst_be vec_xst
  18191. #endif
  18192.  
  18193. #ifdef __POWER9_VECTOR__
  18194. #define vec_test_data_class(__a, __b)                                          \
  18195.   _Generic(                                                                    \
  18196.       (__a), vector float                                                      \
  18197.       : (vector bool int)__builtin_vsx_xvtstdcsp((vector float)(__a), (__b)),  \
  18198.         vector double                                                          \
  18199.       : (vector bool long long)__builtin_vsx_xvtstdcdp((vector double)(__a),   \
  18200.                                                        (__b)))
  18201.  
  18202. #endif /* #ifdef __POWER9_VECTOR__ */
  18203.  
  18204. static vector float __ATTRS_o_ai vec_neg(vector float __a) {
  18205.   return -__a;
  18206. }
  18207.  
  18208. #ifdef __VSX__
  18209. static vector double __ATTRS_o_ai vec_neg(vector double __a) {
  18210.   return -__a;
  18211. }
  18212.  
  18213. #endif
  18214.  
  18215. #ifdef __VSX__
  18216. static vector long long __ATTRS_o_ai vec_neg(vector long long __a) {
  18217.   return -__a;
  18218. }
  18219. #endif
  18220.  
  18221. static vector signed int __ATTRS_o_ai vec_neg(vector signed int __a) {
  18222.   return -__a;
  18223. }
  18224.  
  18225. static vector signed short __ATTRS_o_ai vec_neg(vector signed short __a) {
  18226.   return -__a;
  18227. }
  18228.  
  18229. static vector signed char __ATTRS_o_ai vec_neg(vector signed char __a) {
  18230.   return -__a;
  18231. }
  18232.  
  18233. static vector float __ATTRS_o_ai vec_nabs(vector float __a) {
  18234.   return - vec_abs(__a);
  18235. }
  18236.  
  18237. #ifdef __VSX__
  18238. static vector double __ATTRS_o_ai vec_nabs(vector double __a) {
  18239.   return - vec_abs(__a);
  18240. }
  18241.  
  18242. #endif
  18243.  
  18244. #ifdef __POWER8_VECTOR__
  18245. static vector long long __ATTRS_o_ai vec_nabs(vector long long __a) {
  18246.   return __builtin_altivec_vminsd(__a, -__a);
  18247. }
  18248. #endif
  18249.  
  18250. static vector signed int __ATTRS_o_ai vec_nabs(vector signed int __a) {
  18251.   return __builtin_altivec_vminsw(__a, -__a);
  18252. }
  18253.  
  18254. static vector signed short __ATTRS_o_ai vec_nabs(vector signed short __a) {
  18255.   return __builtin_altivec_vminsh(__a, -__a);
  18256. }
  18257.  
  18258. static vector signed char __ATTRS_o_ai vec_nabs(vector signed char __a) {
  18259.   return __builtin_altivec_vminsb(__a, -__a);
  18260. }
  18261.  
  18262. static vector float __ATTRS_o_ai vec_recipdiv(vector float __a,
  18263.                                               vector float __b) {
  18264.   return __builtin_ppc_recipdivf(__a, __b);
  18265. }
  18266.  
  18267. #ifdef __VSX__
  18268. static vector double __ATTRS_o_ai vec_recipdiv(vector double __a,
  18269.                                                vector double __b) {
  18270.   return __builtin_ppc_recipdivd(__a, __b);
  18271. }
  18272. #endif
  18273.  
  18274. #ifdef __POWER10_VECTOR__
  18275.  
  18276. /* vec_extractm */
  18277.  
  18278. static __inline__ unsigned int __ATTRS_o_ai
  18279. vec_extractm(vector unsigned char __a) {
  18280.   return __builtin_altivec_vextractbm(__a);
  18281. }
  18282.  
  18283. static __inline__ unsigned int __ATTRS_o_ai
  18284. vec_extractm(vector unsigned short __a) {
  18285.   return __builtin_altivec_vextracthm(__a);
  18286. }
  18287.  
  18288. static __inline__ unsigned int __ATTRS_o_ai
  18289. vec_extractm(vector unsigned int __a) {
  18290.   return __builtin_altivec_vextractwm(__a);
  18291. }
  18292.  
  18293. static __inline__ unsigned int __ATTRS_o_ai
  18294. vec_extractm(vector unsigned long long __a) {
  18295.   return __builtin_altivec_vextractdm(__a);
  18296. }
  18297.  
  18298. #ifdef __SIZEOF_INT128__
  18299. static __inline__ unsigned int __ATTRS_o_ai
  18300. vec_extractm(vector unsigned __int128 __a) {
  18301.   return __builtin_altivec_vextractqm(__a);
  18302. }
  18303. #endif
  18304.  
  18305. /* vec_expandm */
  18306.  
  18307. static __inline__ vector unsigned char __ATTRS_o_ai
  18308. vec_expandm(vector unsigned char __a) {
  18309.   return __builtin_altivec_vexpandbm(__a);
  18310. }
  18311.  
  18312. static __inline__ vector unsigned short __ATTRS_o_ai
  18313. vec_expandm(vector unsigned short __a) {
  18314.   return __builtin_altivec_vexpandhm(__a);
  18315. }
  18316.  
  18317. static __inline__ vector unsigned int __ATTRS_o_ai
  18318. vec_expandm(vector unsigned int __a) {
  18319.   return __builtin_altivec_vexpandwm(__a);
  18320. }
  18321.  
  18322. static __inline__ vector unsigned long long __ATTRS_o_ai
  18323. vec_expandm(vector unsigned long long __a) {
  18324.   return __builtin_altivec_vexpanddm(__a);
  18325. }
  18326.  
  18327. #ifdef __SIZEOF_INT128__
  18328. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  18329. vec_expandm(vector unsigned __int128 __a) {
  18330.   return __builtin_altivec_vexpandqm(__a);
  18331. }
  18332. #endif
  18333.  
  18334. /* vec_cntm */
  18335.  
  18336. #define vec_cntm(__a, __mp)                                                    \
  18337.   _Generic((__a), vector unsigned char                                         \
  18338.            : __builtin_altivec_vcntmbb((vector unsigned char)(__a),            \
  18339.                                        (unsigned char)(__mp)),                 \
  18340.              vector unsigned short                                             \
  18341.            : __builtin_altivec_vcntmbh((vector unsigned short)(__a),           \
  18342.                                        (unsigned char)(__mp)),                 \
  18343.              vector unsigned int                                               \
  18344.            : __builtin_altivec_vcntmbw((vector unsigned int)(__a),             \
  18345.                                        (unsigned char)(__mp)),                 \
  18346.              vector unsigned long long                                         \
  18347.            : __builtin_altivec_vcntmbd((vector unsigned long long)(__a),       \
  18348.                                        (unsigned char)(__mp)))
  18349.  
  18350. /* vec_gen[b|h|w|d|q]m */
  18351.  
  18352. static __inline__ vector unsigned char __ATTRS_o_ai
  18353. vec_genbm(unsigned long long __bm) {
  18354.   return __builtin_altivec_mtvsrbm(__bm);
  18355. }
  18356.  
  18357. static __inline__ vector unsigned short __ATTRS_o_ai
  18358. vec_genhm(unsigned long long __bm) {
  18359.   return __builtin_altivec_mtvsrhm(__bm);
  18360. }
  18361.  
  18362. static __inline__ vector unsigned int __ATTRS_o_ai
  18363. vec_genwm(unsigned long long __bm) {
  18364.   return __builtin_altivec_mtvsrwm(__bm);
  18365. }
  18366.  
  18367. static __inline__ vector unsigned long long __ATTRS_o_ai
  18368. vec_gendm(unsigned long long __bm) {
  18369.   return __builtin_altivec_mtvsrdm(__bm);
  18370. }
  18371.  
  18372. #ifdef __SIZEOF_INT128__
  18373. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  18374. vec_genqm(unsigned long long __bm) {
  18375.   return __builtin_altivec_mtvsrqm(__bm);
  18376. }
  18377. #endif
  18378.  
  18379. /* vec_pdep */
  18380.  
  18381. static __inline__ vector unsigned long long __ATTRS_o_ai
  18382. vec_pdep(vector unsigned long long __a, vector unsigned long long __b) {
  18383.   return __builtin_altivec_vpdepd(__a, __b);
  18384. }
  18385.  
  18386. /* vec_pext */
  18387.  
  18388. static __inline__ vector unsigned long long __ATTRS_o_ai
  18389. vec_pext(vector unsigned long long __a, vector unsigned long long __b) {
  18390.   return __builtin_altivec_vpextd(__a, __b);
  18391. }
  18392.  
  18393. /* vec_cfuge */
  18394.  
  18395. static __inline__ vector unsigned long long __ATTRS_o_ai
  18396. vec_cfuge(vector unsigned long long __a, vector unsigned long long __b) {
  18397.   return __builtin_altivec_vcfuged(__a, __b);
  18398. }
  18399.  
  18400. /* vec_gnb */
  18401.  
  18402. #define vec_gnb(__a, __b) __builtin_altivec_vgnb(__a, __b)
  18403.  
  18404. /* vec_ternarylogic */
  18405. #ifdef __VSX__
  18406. #ifdef __SIZEOF_INT128__
  18407. #define vec_ternarylogic(__a, __b, __c, __imm)                                 \
  18408.   _Generic((__a), vector unsigned char                                         \
  18409.            : (vector unsigned char)__builtin_vsx_xxeval(                       \
  18410.                  (vector unsigned long long)(__a),                             \
  18411.                  (vector unsigned long long)(__b),                             \
  18412.                  (vector unsigned long long)(__c), (__imm)),                   \
  18413.              vector unsigned short                                             \
  18414.            : (vector unsigned short)__builtin_vsx_xxeval(                      \
  18415.                  (vector unsigned long long)(__a),                             \
  18416.                  (vector unsigned long long)(__b),                             \
  18417.                  (vector unsigned long long)(__c), (__imm)),                   \
  18418.              vector unsigned int                                               \
  18419.            : (vector unsigned int)__builtin_vsx_xxeval(                        \
  18420.                  (vector unsigned long long)(__a),                             \
  18421.                  (vector unsigned long long)(__b),                             \
  18422.                  (vector unsigned long long)(__c), (__imm)),                   \
  18423.              vector unsigned long long                                         \
  18424.            : (vector unsigned long long)__builtin_vsx_xxeval(                  \
  18425.                  (vector unsigned long long)(__a),                             \
  18426.                  (vector unsigned long long)(__b),                             \
  18427.                  (vector unsigned long long)(__c), (__imm)),                   \
  18428.              vector unsigned __int128                                          \
  18429.            : (vector unsigned __int128)__builtin_vsx_xxeval(                   \
  18430.                (vector unsigned long long)(__a),                               \
  18431.                (vector unsigned long long)(__b),                               \
  18432.                (vector unsigned long long)(__c), (__imm)))
  18433. #else
  18434. #define vec_ternarylogic(__a, __b, __c, __imm)                                 \
  18435.   _Generic((__a), vector unsigned char                                         \
  18436.            : (vector unsigned char)__builtin_vsx_xxeval(                       \
  18437.                  (vector unsigned long long)(__a),                             \
  18438.                  (vector unsigned long long)(__b),                             \
  18439.                  (vector unsigned long long)(__c), (__imm)),                   \
  18440.              vector unsigned short                                             \
  18441.            : (vector unsigned short)__builtin_vsx_xxeval(                      \
  18442.                  (vector unsigned long long)(__a),                             \
  18443.                  (vector unsigned long long)(__b),                             \
  18444.                  (vector unsigned long long)(__c), (__imm)),                   \
  18445.              vector unsigned int                                               \
  18446.            : (vector unsigned int)__builtin_vsx_xxeval(                        \
  18447.                  (vector unsigned long long)(__a),                             \
  18448.                  (vector unsigned long long)(__b),                             \
  18449.                  (vector unsigned long long)(__c), (__imm)),                   \
  18450.              vector unsigned long long                                         \
  18451.            : (vector unsigned long long)__builtin_vsx_xxeval(                  \
  18452.                (vector unsigned long long)(__a),                               \
  18453.                (vector unsigned long long)(__b),                               \
  18454.                (vector unsigned long long)(__c), (__imm)))
  18455. #endif /* __SIZEOF_INT128__ */
  18456. #endif /* __VSX__ */
  18457.  
  18458. /* vec_genpcvm */
  18459.  
  18460. #ifdef __VSX__
  18461. #define vec_genpcvm(__a, __imm)                                                \
  18462.   _Generic(                                                                    \
  18463.       (__a), vector unsigned char                                              \
  18464.       : __builtin_vsx_xxgenpcvbm((vector unsigned char)(__a), (int)(__imm)),   \
  18465.         vector unsigned short                                                  \
  18466.       : __builtin_vsx_xxgenpcvhm((vector unsigned short)(__a), (int)(__imm)),  \
  18467.         vector unsigned int                                                    \
  18468.       : __builtin_vsx_xxgenpcvwm((vector unsigned int)(__a), (int)(__imm)),    \
  18469.         vector unsigned long long                                              \
  18470.       : __builtin_vsx_xxgenpcvdm((vector unsigned long long)(__a),             \
  18471.                                  (int)(__imm)))
  18472. #endif /* __VSX__ */
  18473.  
  18474. /* vec_clr_first */
  18475.  
  18476. static __inline__ vector signed char __ATTRS_o_ai
  18477. vec_clr_first(vector signed char __a, unsigned int __n) {
  18478. #ifdef __LITTLE_ENDIAN__
  18479.   return (vector signed char)__builtin_altivec_vclrrb((vector unsigned char)__a,
  18480.                                                       __n);
  18481. #else
  18482.   return (vector signed char)__builtin_altivec_vclrlb((vector unsigned char)__a,
  18483.                                                       __n);
  18484. #endif
  18485. }
  18486.  
  18487. static __inline__ vector unsigned char __ATTRS_o_ai
  18488. vec_clr_first(vector unsigned char __a, unsigned int __n) {
  18489. #ifdef __LITTLE_ENDIAN__
  18490.   return (vector unsigned char)__builtin_altivec_vclrrb(
  18491.       (vector unsigned char)__a, __n);
  18492. #else
  18493.   return (vector unsigned char)__builtin_altivec_vclrlb(
  18494.       (vector unsigned char)__a, __n);
  18495. #endif
  18496. }
  18497.  
  18498. /* vec_clr_last */
  18499.  
  18500. static __inline__ vector signed char __ATTRS_o_ai
  18501. vec_clr_last(vector signed char __a, unsigned int __n) {
  18502. #ifdef __LITTLE_ENDIAN__
  18503.   return (vector signed char)__builtin_altivec_vclrlb((vector unsigned char)__a,
  18504.                                                       __n);
  18505. #else
  18506.   return (vector signed char)__builtin_altivec_vclrrb((vector unsigned char)__a,
  18507.                                                       __n);
  18508. #endif
  18509. }
  18510.  
  18511. static __inline__ vector unsigned char __ATTRS_o_ai
  18512. vec_clr_last(vector unsigned char __a, unsigned int __n) {
  18513. #ifdef __LITTLE_ENDIAN__
  18514.   return (vector unsigned char)__builtin_altivec_vclrlb(
  18515.       (vector unsigned char)__a, __n);
  18516. #else
  18517.   return (vector unsigned char)__builtin_altivec_vclrrb(
  18518.       (vector unsigned char)__a, __n);
  18519. #endif
  18520. }
  18521.  
  18522. /* vec_cntlzm */
  18523.  
  18524. static __inline__ vector unsigned long long __ATTRS_o_ai
  18525. vec_cntlzm(vector unsigned long long __a, vector unsigned long long __b) {
  18526.   return __builtin_altivec_vclzdm(__a, __b);
  18527. }
  18528.  
  18529. /* vec_cnttzm */
  18530.  
  18531. static __inline__ vector unsigned long long __ATTRS_o_ai
  18532. vec_cnttzm(vector unsigned long long __a, vector unsigned long long __b) {
  18533.   return __builtin_altivec_vctzdm(__a, __b);
  18534. }
  18535.  
  18536. /* vec_mod */
  18537.  
  18538. static __inline__ vector signed int __ATTRS_o_ai
  18539. vec_mod(vector signed int __a, vector signed int __b) {
  18540.   return __a % __b;
  18541. }
  18542.  
  18543. static __inline__ vector unsigned int __ATTRS_o_ai
  18544. vec_mod(vector unsigned int __a, vector unsigned int __b) {
  18545.   return __a % __b;
  18546. }
  18547.  
  18548. static __inline__ vector signed long long __ATTRS_o_ai
  18549. vec_mod(vector signed long long __a, vector signed long long __b) {
  18550.   return __a % __b;
  18551. }
  18552.  
  18553. static __inline__ vector unsigned long long __ATTRS_o_ai
  18554. vec_mod(vector unsigned long long __a, vector unsigned long long __b) {
  18555.   return __a % __b;
  18556. }
  18557.  
  18558. #ifdef __SIZEOF_INT128__
  18559. static __inline__ vector signed __int128 __ATTRS_o_ai
  18560. vec_mod(vector signed __int128 __a, vector signed __int128 __b) {
  18561.   return __a % __b;
  18562. }
  18563.  
  18564. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  18565. vec_mod(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  18566.   return  __a % __b;
  18567. }
  18568. #endif
  18569.  
  18570. /* vec_sldb */
  18571. #define vec_sldb(__a, __b, __c)                                                \
  18572.   _Generic(                                                                    \
  18573.       (__a), vector unsigned char                                              \
  18574.       : (vector unsigned char)__builtin_altivec_vsldbi(                        \
  18575.             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18576.             (__c & 0x7)),                                                      \
  18577.         vector signed char                                                     \
  18578.       : (vector signed char)__builtin_altivec_vsldbi(                          \
  18579.             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18580.             (__c & 0x7)),                                                      \
  18581.         vector unsigned short                                                  \
  18582.       : (vector unsigned short)__builtin_altivec_vsldbi(                       \
  18583.             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18584.             (__c & 0x7)),                                                      \
  18585.         vector signed short                                                    \
  18586.       : (vector signed short)__builtin_altivec_vsldbi(                         \
  18587.             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18588.             (__c & 0x7)),                                                      \
  18589.         vector unsigned int                                                    \
  18590.       : (vector unsigned int)__builtin_altivec_vsldbi(                         \
  18591.             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18592.             (__c & 0x7)),                                                      \
  18593.         vector signed int                                                      \
  18594.       : (vector signed int)__builtin_altivec_vsldbi((vector unsigned char)__a, \
  18595.                                                     (vector unsigned char)__b, \
  18596.                                                     (__c & 0x7)),              \
  18597.         vector unsigned long long                                              \
  18598.       : (vector unsigned long long)__builtin_altivec_vsldbi(                   \
  18599.             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18600.             (__c & 0x7)),                                                      \
  18601.         vector signed long long                                                \
  18602.       : (vector signed long long)__builtin_altivec_vsldbi(                     \
  18603.           (vector unsigned char)__a, (vector unsigned char)__b, (__c & 0x7)))
  18604.  
  18605. /* vec_srdb */
  18606. #define vec_srdb(__a, __b, __c)                                                \
  18607.   _Generic(                                                                    \
  18608.       (__a), vector unsigned char                                              \
  18609.       : (vector unsigned char)__builtin_altivec_vsrdbi(                        \
  18610.             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18611.             (__c & 0x7)),                                                      \
  18612.         vector signed char                                                     \
  18613.       : (vector signed char)__builtin_altivec_vsrdbi(                          \
  18614.             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18615.             (__c & 0x7)),                                                      \
  18616.         vector unsigned short                                                  \
  18617.       : (vector unsigned short)__builtin_altivec_vsrdbi(                       \
  18618.             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18619.             (__c & 0x7)),                                                      \
  18620.         vector signed short                                                    \
  18621.       : (vector signed short)__builtin_altivec_vsrdbi(                         \
  18622.             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18623.             (__c & 0x7)),                                                      \
  18624.         vector unsigned int                                                    \
  18625.       : (vector unsigned int)__builtin_altivec_vsrdbi(                         \
  18626.             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18627.             (__c & 0x7)),                                                      \
  18628.         vector signed int                                                      \
  18629.       : (vector signed int)__builtin_altivec_vsrdbi((vector unsigned char)__a, \
  18630.                                                     (vector unsigned char)__b, \
  18631.                                                     (__c & 0x7)),              \
  18632.         vector unsigned long long                                              \
  18633.       : (vector unsigned long long)__builtin_altivec_vsrdbi(                   \
  18634.             (vector unsigned char)__a, (vector unsigned char)__b,              \
  18635.             (__c & 0x7)),                                                      \
  18636.         vector signed long long                                                \
  18637.       : (vector signed long long)__builtin_altivec_vsrdbi(                     \
  18638.           (vector unsigned char)__a, (vector unsigned char)__b, (__c & 0x7)))
  18639.  
  18640. /* vec_insertl */
  18641.  
  18642. static __inline__ vector unsigned char __ATTRS_o_ai
  18643. vec_insertl(unsigned char __a, vector unsigned char __b, unsigned int __c) {
  18644. #ifdef __LITTLE_ENDIAN__
  18645.   return __builtin_altivec_vinsbrx(__b, __c, __a);
  18646. #else
  18647.   return __builtin_altivec_vinsblx(__b, __c, __a);
  18648. #endif
  18649. }
  18650.  
  18651. static __inline__ vector unsigned short __ATTRS_o_ai
  18652. vec_insertl(unsigned short __a, vector unsigned short __b, unsigned int __c) {
  18653. #ifdef __LITTLE_ENDIAN__
  18654.   return __builtin_altivec_vinshrx(__b, __c, __a);
  18655. #else
  18656.   return __builtin_altivec_vinshlx(__b, __c, __a);
  18657. #endif
  18658. }
  18659.  
  18660. static __inline__ vector unsigned int __ATTRS_o_ai
  18661. vec_insertl(unsigned int __a, vector unsigned int __b, unsigned int __c) {
  18662. #ifdef __LITTLE_ENDIAN__
  18663.   return __builtin_altivec_vinswrx(__b, __c, __a);
  18664. #else
  18665.   return __builtin_altivec_vinswlx(__b, __c, __a);
  18666. #endif
  18667. }
  18668.  
  18669. static __inline__ vector unsigned long long __ATTRS_o_ai
  18670. vec_insertl(unsigned long long __a, vector unsigned long long __b,
  18671.             unsigned int __c) {
  18672. #ifdef __LITTLE_ENDIAN__
  18673.   return __builtin_altivec_vinsdrx(__b, __c, __a);
  18674. #else
  18675.   return __builtin_altivec_vinsdlx(__b, __c, __a);
  18676. #endif
  18677. }
  18678.  
  18679. static __inline__ vector unsigned char __ATTRS_o_ai
  18680. vec_insertl(vector unsigned char __a, vector unsigned char __b,
  18681.             unsigned int __c) {
  18682. #ifdef __LITTLE_ENDIAN__
  18683.   return __builtin_altivec_vinsbvrx(__b, __c, __a);
  18684. #else
  18685.   return __builtin_altivec_vinsbvlx(__b, __c, __a);
  18686. #endif
  18687. }
  18688.  
  18689. static __inline__ vector unsigned short __ATTRS_o_ai
  18690. vec_insertl(vector unsigned short __a, vector unsigned short __b,
  18691.             unsigned int __c) {
  18692. #ifdef __LITTLE_ENDIAN__
  18693.   return __builtin_altivec_vinshvrx(__b, __c, __a);
  18694. #else
  18695.   return __builtin_altivec_vinshvlx(__b, __c, __a);
  18696. #endif
  18697. }
  18698.  
  18699. static __inline__ vector unsigned int __ATTRS_o_ai
  18700. vec_insertl(vector unsigned int __a, vector unsigned int __b,
  18701.             unsigned int __c) {
  18702. #ifdef __LITTLE_ENDIAN__
  18703.   return __builtin_altivec_vinswvrx(__b, __c, __a);
  18704. #else
  18705.   return __builtin_altivec_vinswvlx(__b, __c, __a);
  18706. #endif
  18707. }
  18708.  
  18709. /* vec_inserth */
  18710.  
  18711. static __inline__ vector unsigned char __ATTRS_o_ai
  18712. vec_inserth(unsigned char __a, vector unsigned char __b, unsigned int __c) {
  18713. #ifdef __LITTLE_ENDIAN__
  18714.   return __builtin_altivec_vinsblx(__b, __c, __a);
  18715. #else
  18716.   return __builtin_altivec_vinsbrx(__b, __c, __a);
  18717. #endif
  18718. }
  18719.  
  18720. static __inline__ vector unsigned short __ATTRS_o_ai
  18721. vec_inserth(unsigned short __a, vector unsigned short __b, unsigned int __c) {
  18722. #ifdef __LITTLE_ENDIAN__
  18723.   return __builtin_altivec_vinshlx(__b, __c, __a);
  18724. #else
  18725.   return __builtin_altivec_vinshrx(__b, __c, __a);
  18726. #endif
  18727. }
  18728.  
  18729. static __inline__ vector unsigned int __ATTRS_o_ai
  18730. vec_inserth(unsigned int __a, vector unsigned int __b, unsigned int __c) {
  18731. #ifdef __LITTLE_ENDIAN__
  18732.   return __builtin_altivec_vinswlx(__b, __c, __a);
  18733. #else
  18734.   return __builtin_altivec_vinswrx(__b, __c, __a);
  18735. #endif
  18736. }
  18737.  
  18738. static __inline__ vector unsigned long long __ATTRS_o_ai
  18739. vec_inserth(unsigned long long __a, vector unsigned long long __b,
  18740.             unsigned int __c) {
  18741. #ifdef __LITTLE_ENDIAN__
  18742.   return __builtin_altivec_vinsdlx(__b, __c, __a);
  18743. #else
  18744.   return __builtin_altivec_vinsdrx(__b, __c, __a);
  18745. #endif
  18746. }
  18747.  
  18748. static __inline__ vector unsigned char __ATTRS_o_ai
  18749. vec_inserth(vector unsigned char __a, vector unsigned char __b,
  18750.             unsigned int __c) {
  18751. #ifdef __LITTLE_ENDIAN__
  18752.   return __builtin_altivec_vinsbvlx(__b, __c, __a);
  18753. #else
  18754.   return __builtin_altivec_vinsbvrx(__b, __c, __a);
  18755. #endif
  18756. }
  18757.  
  18758. static __inline__ vector unsigned short __ATTRS_o_ai
  18759. vec_inserth(vector unsigned short __a, vector unsigned short __b,
  18760.             unsigned int __c) {
  18761. #ifdef __LITTLE_ENDIAN__
  18762.   return __builtin_altivec_vinshvlx(__b, __c, __a);
  18763. #else
  18764.   return __builtin_altivec_vinshvrx(__b, __c, __a);
  18765. #endif
  18766. }
  18767.  
  18768. static __inline__ vector unsigned int __ATTRS_o_ai
  18769. vec_inserth(vector unsigned int __a, vector unsigned int __b,
  18770.             unsigned int __c) {
  18771. #ifdef __LITTLE_ENDIAN__
  18772.   return __builtin_altivec_vinswvlx(__b, __c, __a);
  18773. #else
  18774.   return __builtin_altivec_vinswvrx(__b, __c, __a);
  18775. #endif
  18776. }
  18777.  
  18778. /* vec_extractl */
  18779.  
  18780. static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
  18781.     vector unsigned char __a, vector unsigned char __b, unsigned int __c) {
  18782. #ifdef __LITTLE_ENDIAN__
  18783.   return __builtin_altivec_vextdubvrx(__a, __b, __c);
  18784. #else
  18785.   vector unsigned long long __ret = __builtin_altivec_vextdubvlx(__a, __b, __c);
  18786.   return vec_sld(__ret, __ret, 8);
  18787. #endif
  18788. }
  18789.  
  18790. static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
  18791.     vector unsigned short __a, vector unsigned short __b, unsigned int __c) {
  18792. #ifdef __LITTLE_ENDIAN__
  18793.   return __builtin_altivec_vextduhvrx(__a, __b, __c);
  18794. #else
  18795.   vector unsigned long long __ret = __builtin_altivec_vextduhvlx(__a, __b, __c);
  18796.   return vec_sld(__ret, __ret, 8);
  18797. #endif
  18798. }
  18799.  
  18800. static __inline__ vector unsigned long long __ATTRS_o_ai vec_extractl(
  18801.     vector unsigned int __a, vector unsigned int __b, unsigned int __c) {
  18802. #ifdef __LITTLE_ENDIAN__
  18803.   return __builtin_altivec_vextduwvrx(__a, __b, __c);
  18804. #else
  18805.   vector unsigned long long __ret = __builtin_altivec_vextduwvlx(__a, __b, __c);
  18806.   return vec_sld(__ret, __ret, 8);
  18807. #endif
  18808. }
  18809.  
  18810. static __inline__ vector unsigned long long __ATTRS_o_ai
  18811. vec_extractl(vector unsigned long long __a, vector unsigned long long __b,
  18812.              unsigned int __c) {
  18813. #ifdef __LITTLE_ENDIAN__
  18814.   return __builtin_altivec_vextddvrx(__a, __b, __c);
  18815. #else
  18816.   vector unsigned long long __ret = __builtin_altivec_vextddvlx(__a, __b, __c);
  18817.   return vec_sld(__ret, __ret, 8);
  18818. #endif
  18819. }
  18820.  
  18821. /* vec_extracth */
  18822.  
  18823. static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
  18824.     vector unsigned char __a, vector unsigned char __b, unsigned int __c) {
  18825. #ifdef __LITTLE_ENDIAN__
  18826.   return __builtin_altivec_vextdubvlx(__a, __b, __c);
  18827. #else
  18828.   vector unsigned long long __ret = __builtin_altivec_vextdubvrx(__a, __b, __c);
  18829.   return vec_sld(__ret, __ret, 8);
  18830. #endif
  18831. }
  18832.  
  18833. static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
  18834.     vector unsigned short __a, vector unsigned short __b, unsigned int __c) {
  18835. #ifdef __LITTLE_ENDIAN__
  18836.   return __builtin_altivec_vextduhvlx(__a, __b, __c);
  18837. #else
  18838.   vector unsigned long long __ret = __builtin_altivec_vextduhvrx(__a, __b, __c);
  18839.   return vec_sld(__ret, __ret, 8);
  18840. #endif
  18841. }
  18842.  
  18843. static __inline__ vector unsigned long long __ATTRS_o_ai vec_extracth(
  18844.     vector unsigned int __a, vector unsigned int __b, unsigned int __c) {
  18845. #ifdef __LITTLE_ENDIAN__
  18846.   return __builtin_altivec_vextduwvlx(__a, __b, __c);
  18847. #else
  18848.   vector unsigned long long __ret = __builtin_altivec_vextduwvrx(__a, __b, __c);
  18849.   return vec_sld(__ret, __ret, 8);
  18850. #endif
  18851. }
  18852.  
  18853. static __inline__ vector unsigned long long __ATTRS_o_ai
  18854. vec_extracth(vector unsigned long long __a, vector unsigned long long __b,
  18855.              unsigned int __c) {
  18856. #ifdef __LITTLE_ENDIAN__
  18857.   return __builtin_altivec_vextddvlx(__a, __b, __c);
  18858. #else
  18859.   vector unsigned long long __ret = __builtin_altivec_vextddvrx(__a, __b, __c);
  18860.   return vec_sld(__ret, __ret, 8);
  18861. #endif
  18862. }
  18863.  
  18864. #ifdef __VSX__
  18865.  
  18866. /* vec_permx */
  18867. #define vec_permx(__a, __b, __c, __d)                                          \
  18868.   _Generic(                                                                    \
  18869.       (__a), vector unsigned char                                              \
  18870.       : (vector unsigned char)__builtin_vsx_xxpermx(                           \
  18871.             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18872.         vector signed char                                                     \
  18873.       : (vector signed char)__builtin_vsx_xxpermx(                             \
  18874.             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18875.         vector unsigned short                                                  \
  18876.       : (vector unsigned short)__builtin_vsx_xxpermx(                          \
  18877.             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18878.         vector signed short                                                    \
  18879.       : (vector signed short)__builtin_vsx_xxpermx(                            \
  18880.             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18881.         vector unsigned int                                                    \
  18882.       : (vector unsigned int)__builtin_vsx_xxpermx(                            \
  18883.             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18884.         vector signed int                                                      \
  18885.       : (vector signed int)__builtin_vsx_xxpermx(                              \
  18886.             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18887.         vector unsigned long long                                              \
  18888.       : (vector unsigned long long)__builtin_vsx_xxpermx(                      \
  18889.             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18890.         vector signed long long                                                \
  18891.       : (vector signed long long)__builtin_vsx_xxpermx(                        \
  18892.             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18893.         vector float                                                           \
  18894.       : (vector float)__builtin_vsx_xxpermx(                                   \
  18895.             (vector unsigned char)__a, (vector unsigned char)__b, __c, __d),   \
  18896.         vector double                                                          \
  18897.       : (vector double)__builtin_vsx_xxpermx(                                  \
  18898.           (vector unsigned char)__a, (vector unsigned char)__b, __c, __d))
  18899.  
  18900. /* vec_blendv */
  18901.  
  18902. static __inline__ vector signed char __ATTRS_o_ai
  18903. vec_blendv(vector signed char __a, vector signed char __b,
  18904.            vector unsigned char __c) {
  18905.   return (vector signed char)__builtin_vsx_xxblendvb(
  18906.       (vector unsigned char)__a, (vector unsigned char)__b, __c);
  18907. }
  18908.  
  18909. static __inline__ vector unsigned char __ATTRS_o_ai
  18910. vec_blendv(vector unsigned char __a, vector unsigned char __b,
  18911.            vector unsigned char __c) {
  18912.   return __builtin_vsx_xxblendvb(__a, __b, __c);
  18913. }
  18914.  
  18915. static __inline__ vector signed short __ATTRS_o_ai
  18916. vec_blendv(vector signed short __a, vector signed short __b,
  18917.            vector unsigned short __c) {
  18918.   return (vector signed short)__builtin_vsx_xxblendvh(
  18919.       (vector unsigned short)__a, (vector unsigned short)__b, __c);
  18920. }
  18921.  
  18922. static __inline__ vector unsigned short __ATTRS_o_ai
  18923. vec_blendv(vector unsigned short __a, vector unsigned short __b,
  18924.            vector unsigned short __c) {
  18925.   return __builtin_vsx_xxblendvh(__a, __b, __c);
  18926. }
  18927.  
  18928. static __inline__ vector signed int __ATTRS_o_ai
  18929. vec_blendv(vector signed int __a, vector signed int __b,
  18930.            vector unsigned int __c) {
  18931.   return (vector signed int)__builtin_vsx_xxblendvw(
  18932.       (vector unsigned int)__a, (vector unsigned int)__b, __c);
  18933. }
  18934.  
  18935. static __inline__ vector unsigned int __ATTRS_o_ai
  18936. vec_blendv(vector unsigned int __a, vector unsigned int __b,
  18937.            vector unsigned int __c) {
  18938.   return __builtin_vsx_xxblendvw(__a, __b, __c);
  18939. }
  18940.  
  18941. static __inline__ vector signed long long __ATTRS_o_ai
  18942. vec_blendv(vector signed long long __a, vector signed long long __b,
  18943.            vector unsigned long long __c) {
  18944.   return (vector signed long long)__builtin_vsx_xxblendvd(
  18945.       (vector unsigned long long)__a, (vector unsigned long long)__b, __c);
  18946. }
  18947.  
  18948. static __inline__ vector unsigned long long __ATTRS_o_ai
  18949. vec_blendv(vector unsigned long long __a, vector unsigned long long __b,
  18950.            vector unsigned long long __c) {
  18951.   return (vector unsigned long long)__builtin_vsx_xxblendvd(__a, __b, __c);
  18952. }
  18953.  
  18954. static __inline__ vector float __ATTRS_o_ai
  18955. vec_blendv(vector float __a, vector float __b, vector unsigned int __c) {
  18956.   return (vector float)__builtin_vsx_xxblendvw((vector unsigned int)__a,
  18957.                                                (vector unsigned int)__b, __c);
  18958. }
  18959.  
  18960. static __inline__ vector double __ATTRS_o_ai
  18961. vec_blendv(vector double __a, vector double __b,
  18962.            vector unsigned long long __c) {
  18963.   return (vector double)__builtin_vsx_xxblendvd(
  18964.       (vector unsigned long long)__a, (vector unsigned long long)__b, __c);
  18965. }
  18966.  
  18967. #define vec_replace_unaligned(__a, __b, __c)                                   \
  18968.   _Generic((__a), vector signed int                                            \
  18969.            : __builtin_altivec_vinsw((vector unsigned char)__a,                \
  18970.                                      (unsigned int)__b, __c),                  \
  18971.              vector unsigned int                                               \
  18972.            : __builtin_altivec_vinsw((vector unsigned char)__a,                \
  18973.                                      (unsigned int)__b, __c),                  \
  18974.              vector unsigned long long                                         \
  18975.            : __builtin_altivec_vinsd((vector unsigned char)__a,                \
  18976.                                      (unsigned long long)__b, __c),            \
  18977.              vector signed long long                                           \
  18978.            : __builtin_altivec_vinsd((vector unsigned char)__a,                \
  18979.                                      (unsigned long long)__b, __c),            \
  18980.              vector float                                                      \
  18981.            : __builtin_altivec_vinsw((vector unsigned char)__a,                \
  18982.                                      (unsigned int)__b, __c),                  \
  18983.              vector double                                                     \
  18984.            : __builtin_altivec_vinsd((vector unsigned char)__a,                \
  18985.                                      (unsigned long long)__b, __c))
  18986.  
  18987. #define vec_replace_elt(__a, __b, __c)                                         \
  18988.   _Generic((__a), vector signed int                                            \
  18989.            : (vector signed int)__builtin_altivec_vinsw_elt(                   \
  18990.                  (vector unsigned char)__a, (unsigned int)__b, __c),           \
  18991.              vector unsigned int                                               \
  18992.            : (vector unsigned int)__builtin_altivec_vinsw_elt(                 \
  18993.                  (vector unsigned char)__a, (unsigned int)__b, __c),           \
  18994.              vector unsigned long long                                         \
  18995.            : (vector unsigned long long)__builtin_altivec_vinsd_elt(           \
  18996.                  (vector unsigned char)__a, (unsigned long long)__b, __c),     \
  18997.              vector signed long long                                           \
  18998.            : (vector signed long long)__builtin_altivec_vinsd_elt(             \
  18999.                  (vector unsigned char)__a, (unsigned long long)__b, __c),     \
  19000.              vector float                                                      \
  19001.            : (vector float)__builtin_altivec_vinsw_elt(                        \
  19002.                  (vector unsigned char)__a, (unsigned int)__b, __c),           \
  19003.              vector double                                                     \
  19004.            : (vector double)__builtin_altivec_vinsd_elt(                       \
  19005.                (vector unsigned char)__a, (unsigned long long)__b, __c))
  19006.  
  19007. /* vec_splati */
  19008.  
  19009. #define vec_splati(__a)                                                        \
  19010.   _Generic((__a), signed int                                                   \
  19011.            : ((vector signed int)__a), unsigned int                            \
  19012.            : ((vector unsigned int)__a), float                                 \
  19013.            : ((vector float)__a))
  19014.  
  19015. /* vec_spatid */
  19016.  
  19017. static __inline__ vector double __ATTRS_o_ai vec_splatid(const float __a) {
  19018.   return ((vector double)((double)__a));
  19019. }
  19020.  
  19021. /* vec_splati_ins */
  19022.  
  19023. static __inline__ vector signed int __ATTRS_o_ai vec_splati_ins(
  19024.     vector signed int __a, const unsigned int __b, const signed int __c) {
  19025.   const unsigned int __d = __b & 0x01;
  19026. #ifdef __LITTLE_ENDIAN__
  19027.   __a[1 - __d] = __c;
  19028.   __a[3 - __d] = __c;
  19029. #else
  19030.   __a[__d] = __c;
  19031.   __a[2 + __d] = __c;
  19032. #endif
  19033.   return __a;
  19034. }
  19035.  
  19036. static __inline__ vector unsigned int __ATTRS_o_ai vec_splati_ins(
  19037.     vector unsigned int __a, const unsigned int __b, const unsigned int __c) {
  19038.   const unsigned int __d = __b & 0x01;
  19039. #ifdef __LITTLE_ENDIAN__
  19040.   __a[1 - __d] = __c;
  19041.   __a[3 - __d] = __c;
  19042. #else
  19043.   __a[__d] = __c;
  19044.   __a[2 + __d] = __c;
  19045. #endif
  19046.   return __a;
  19047. }
  19048.  
  19049. static __inline__ vector float __ATTRS_o_ai
  19050. vec_splati_ins(vector float __a, const unsigned int __b, const float __c) {
  19051.   const unsigned int __d = __b & 0x01;
  19052. #ifdef __LITTLE_ENDIAN__
  19053.   __a[1 - __d] = __c;
  19054.   __a[3 - __d] = __c;
  19055. #else
  19056.   __a[__d] = __c;
  19057.   __a[2 + __d] = __c;
  19058. #endif
  19059.   return __a;
  19060. }
  19061.  
  19062. /* vec_test_lsbb_all_ones */
  19063.  
  19064. static __inline__ int __ATTRS_o_ai
  19065. vec_test_lsbb_all_ones(vector unsigned char __a) {
  19066.   return __builtin_vsx_xvtlsbb(__a, 1);
  19067. }
  19068.  
  19069. /* vec_test_lsbb_all_zeros */
  19070.  
  19071. static __inline__ int __ATTRS_o_ai
  19072. vec_test_lsbb_all_zeros(vector unsigned char __a) {
  19073.   return __builtin_vsx_xvtlsbb(__a, 0);
  19074. }
  19075. #endif /* __VSX__ */
  19076.  
  19077. /* vec_stril */
  19078.  
  19079. static __inline__ vector unsigned char __ATTRS_o_ai
  19080. vec_stril(vector unsigned char __a) {
  19081. #ifdef __LITTLE_ENDIAN__
  19082.   return (vector unsigned char)__builtin_altivec_vstribr(
  19083.       (vector unsigned char)__a);
  19084. #else
  19085.   return (vector unsigned char)__builtin_altivec_vstribl(
  19086.       (vector unsigned char)__a);
  19087. #endif
  19088. }
  19089.  
  19090. static __inline__ vector signed char __ATTRS_o_ai
  19091. vec_stril(vector signed char __a) {
  19092. #ifdef __LITTLE_ENDIAN__
  19093.   return (vector signed char)__builtin_altivec_vstribr(
  19094.       (vector unsigned char)__a);
  19095. #else
  19096.   return (vector signed char)__builtin_altivec_vstribl(
  19097.       (vector unsigned char)__a);
  19098. #endif
  19099. }
  19100.  
  19101. static __inline__ vector unsigned short __ATTRS_o_ai
  19102. vec_stril(vector unsigned short __a) {
  19103. #ifdef __LITTLE_ENDIAN__
  19104.   return (vector unsigned short)__builtin_altivec_vstrihr(
  19105.       (vector signed short)__a);
  19106. #else
  19107.   return (vector unsigned short)__builtin_altivec_vstrihl(
  19108.       (vector signed short)__a);
  19109. #endif
  19110. }
  19111.  
  19112. static __inline__ vector signed short __ATTRS_o_ai
  19113. vec_stril(vector signed short __a) {
  19114. #ifdef __LITTLE_ENDIAN__
  19115.   return __builtin_altivec_vstrihr(__a);
  19116. #else
  19117.   return __builtin_altivec_vstrihl(__a);
  19118. #endif
  19119. }
  19120.  
  19121. /* vec_stril_p */
  19122.  
  19123. static __inline__ int __ATTRS_o_ai vec_stril_p(vector unsigned char __a) {
  19124. #ifdef __LITTLE_ENDIAN__
  19125.   return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
  19126. #else
  19127.   return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
  19128. #endif
  19129. }
  19130.  
  19131. static __inline__ int __ATTRS_o_ai vec_stril_p(vector signed char __a) {
  19132. #ifdef __LITTLE_ENDIAN__
  19133.   return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
  19134. #else
  19135.   return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
  19136. #endif
  19137. }
  19138.  
  19139. static __inline__ int __ATTRS_o_ai vec_stril_p(vector unsigned short __a) {
  19140. #ifdef __LITTLE_ENDIAN__
  19141.   return __builtin_altivec_vstrihr_p(__CR6_EQ, (vector signed short)__a);
  19142. #else
  19143.   return __builtin_altivec_vstrihl_p(__CR6_EQ, (vector signed short)__a);
  19144. #endif
  19145. }
  19146.  
  19147. static __inline__ int __ATTRS_o_ai vec_stril_p(vector signed short __a) {
  19148. #ifdef __LITTLE_ENDIAN__
  19149.   return __builtin_altivec_vstrihr_p(__CR6_EQ, __a);
  19150. #else
  19151.   return __builtin_altivec_vstrihl_p(__CR6_EQ, __a);
  19152. #endif
  19153. }
  19154.  
  19155. /* vec_strir */
  19156.  
  19157. static __inline__ vector unsigned char __ATTRS_o_ai
  19158. vec_strir(vector unsigned char __a) {
  19159. #ifdef __LITTLE_ENDIAN__
  19160.   return (vector unsigned char)__builtin_altivec_vstribl(
  19161.       (vector unsigned char)__a);
  19162. #else
  19163.   return (vector unsigned char)__builtin_altivec_vstribr(
  19164.       (vector unsigned char)__a);
  19165. #endif
  19166. }
  19167.  
  19168. static __inline__ vector signed char __ATTRS_o_ai
  19169. vec_strir(vector signed char __a) {
  19170. #ifdef __LITTLE_ENDIAN__
  19171.   return (vector signed char)__builtin_altivec_vstribl(
  19172.       (vector unsigned char)__a);
  19173. #else
  19174.   return (vector signed char)__builtin_altivec_vstribr(
  19175.       (vector unsigned char)__a);
  19176. #endif
  19177. }
  19178.  
  19179. static __inline__ vector unsigned short __ATTRS_o_ai
  19180. vec_strir(vector unsigned short __a) {
  19181. #ifdef __LITTLE_ENDIAN__
  19182.   return (vector unsigned short)__builtin_altivec_vstrihl(
  19183.       (vector signed short)__a);
  19184. #else
  19185.   return (vector unsigned short)__builtin_altivec_vstrihr(
  19186.       (vector signed short)__a);
  19187. #endif
  19188. }
  19189.  
  19190. static __inline__ vector signed short __ATTRS_o_ai
  19191. vec_strir(vector signed short __a) {
  19192. #ifdef __LITTLE_ENDIAN__
  19193.   return __builtin_altivec_vstrihl(__a);
  19194. #else
  19195.   return __builtin_altivec_vstrihr(__a);
  19196. #endif
  19197. }
  19198.  
  19199. /* vec_strir_p */
  19200.  
  19201. static __inline__ int __ATTRS_o_ai vec_strir_p(vector unsigned char __a) {
  19202. #ifdef __LITTLE_ENDIAN__
  19203.   return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
  19204. #else
  19205.   return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
  19206. #endif
  19207. }
  19208.  
  19209. static __inline__ int __ATTRS_o_ai vec_strir_p(vector signed char __a) {
  19210. #ifdef __LITTLE_ENDIAN__
  19211.   return __builtin_altivec_vstribl_p(__CR6_EQ, (vector unsigned char)__a);
  19212. #else
  19213.   return __builtin_altivec_vstribr_p(__CR6_EQ, (vector unsigned char)__a);
  19214. #endif
  19215. }
  19216.  
  19217. static __inline__ int __ATTRS_o_ai vec_strir_p(vector unsigned short __a) {
  19218. #ifdef __LITTLE_ENDIAN__
  19219.   return __builtin_altivec_vstrihl_p(__CR6_EQ, (vector signed short)__a);
  19220. #else
  19221.   return __builtin_altivec_vstrihr_p(__CR6_EQ, (vector signed short)__a);
  19222. #endif
  19223. }
  19224.  
  19225. static __inline__ int __ATTRS_o_ai vec_strir_p(vector signed short __a) {
  19226. #ifdef __LITTLE_ENDIAN__
  19227.   return __builtin_altivec_vstrihl_p(__CR6_EQ, __a);
  19228. #else
  19229.   return __builtin_altivec_vstrihr_p(__CR6_EQ, __a);
  19230. #endif
  19231. }
  19232.  
  19233. /* vs[l | r | ra] */
  19234.  
  19235. #ifdef __SIZEOF_INT128__
  19236. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  19237. vec_sl(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  19238.   return __a << (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
  19239.                                                   __CHAR_BIT__));
  19240. }
  19241.  
  19242. static __inline__ vector signed __int128 __ATTRS_o_ai
  19243. vec_sl(vector signed __int128 __a, vector unsigned __int128 __b) {
  19244.   return __a << (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
  19245.                                                   __CHAR_BIT__));
  19246. }
  19247.  
  19248. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  19249. vec_sr(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  19250.   return __a >> (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
  19251.                                                   __CHAR_BIT__));
  19252. }
  19253.  
  19254. static __inline__ vector signed __int128 __ATTRS_o_ai
  19255. vec_sr(vector signed __int128 __a, vector unsigned __int128 __b) {
  19256.   return (
  19257.       vector signed __int128)(((vector unsigned __int128)__a) >>
  19258.                               (__b %
  19259.                                (vector unsigned __int128)(sizeof(
  19260.                                                               unsigned __int128) *
  19261.                                                           __CHAR_BIT__)));
  19262. }
  19263.  
  19264. static __inline__ vector unsigned __int128 __ATTRS_o_ai
  19265. vec_sra(vector unsigned __int128 __a, vector unsigned __int128 __b) {
  19266.   return (
  19267.       vector unsigned __int128)(((vector signed __int128)__a) >>
  19268.                                 (__b %
  19269.                                  (vector unsigned __int128)(sizeof(
  19270.                                                                 unsigned __int128) *
  19271.                                                             __CHAR_BIT__)));
  19272. }
  19273.  
  19274. static __inline__ vector signed __int128 __ATTRS_o_ai
  19275. vec_sra(vector signed __int128 __a, vector unsigned __int128 __b) {
  19276.   return __a >> (__b % (vector unsigned __int128)(sizeof(unsigned __int128) *
  19277.                                                   __CHAR_BIT__));
  19278. }
  19279.  
  19280. #endif /* __SIZEOF_INT128__ */
  19281. #endif /* __POWER10_VECTOR__ */
  19282.  
  19283. #ifdef __POWER8_VECTOR__
  19284. #define __bcdadd(__a, __b, __ps) __builtin_ppc_bcdadd((__a), (__b), (__ps))
  19285. #define __bcdsub(__a, __b, __ps) __builtin_ppc_bcdsub((__a), (__b), (__ps))
  19286.  
  19287. static __inline__ long __bcdadd_ofl(vector unsigned char __a,
  19288.                                     vector unsigned char __b) {
  19289.   return __builtin_ppc_bcdadd_p(__CR6_SO, __a, __b);
  19290. }
  19291.  
  19292. static __inline__ long __bcdsub_ofl(vector unsigned char __a,
  19293.                                     vector unsigned char __b) {
  19294.   return __builtin_ppc_bcdsub_p(__CR6_SO, __a, __b);
  19295. }
  19296.  
  19297. static __inline__ long __bcd_invalid(vector unsigned char __a) {
  19298.   return __builtin_ppc_bcdsub_p(__CR6_SO, __a, __a);
  19299. }
  19300.  
  19301. static __inline__ long __bcdcmpeq(vector unsigned char __a,
  19302.                                   vector unsigned char __b) {
  19303.   return __builtin_ppc_bcdsub_p(__CR6_EQ, __a, __b);
  19304. }
  19305.  
  19306. static __inline__ long __bcdcmplt(vector unsigned char __a,
  19307.                                   vector unsigned char __b) {
  19308.   return __builtin_ppc_bcdsub_p(__CR6_LT, __a, __b);
  19309. }
  19310.  
  19311. static __inline__ long __bcdcmpgt(vector unsigned char __a,
  19312.                                   vector unsigned char __b) {
  19313.   return __builtin_ppc_bcdsub_p(__CR6_GT, __a, __b);
  19314. }
  19315.  
  19316. static __inline__ long __bcdcmple(vector unsigned char __a,
  19317.                                   vector unsigned char __b) {
  19318.   return __builtin_ppc_bcdsub_p(__CR6_GT_REV, __a, __b);
  19319. }
  19320.  
  19321. static __inline__ long __bcdcmpge(vector unsigned char __a,
  19322.                                   vector unsigned char __b) {
  19323.   return __builtin_ppc_bcdsub_p(__CR6_LT_REV, __a, __b);
  19324. }
  19325.  
  19326. #endif // __POWER8_VECTOR__
  19327.  
  19328. #undef __ATTRS_o_ai
  19329.  
  19330. #endif /* __ALTIVEC_H */
  19331.