1207619Srdivacky/*===---- altivec.h - Standard header for type generic math ---------------===*\
2207619Srdivacky *
3353358Sdim * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim * See https://llvm.org/LICENSE.txt for license information.
5353358Sdim * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6207619Srdivacky *
7207619Srdivacky\*===----------------------------------------------------------------------===*/
8207619Srdivacky
9207619Srdivacky#ifndef __ALTIVEC_H
10207619Srdivacky#define __ALTIVEC_H
11207619Srdivacky
12207619Srdivacky#ifndef __ALTIVEC__
13207619Srdivacky#error "AltiVec support not enabled"
14207619Srdivacky#endif
15207619Srdivacky
16296417Sdim/* Constants for mapping CR6 bits to predicate result. */
17207619Srdivacky
18288943Sdim#define __CR6_EQ 0
19207619Srdivacky#define __CR6_EQ_REV 1
20288943Sdim#define __CR6_LT 2
21207619Srdivacky#define __CR6_LT_REV 3
22207619Srdivacky
23314564Sdim/* Constants for vec_test_data_class */
24314564Sdim#define __VEC_CLASS_FP_SUBNORMAL_N (1 << 0)
25314564Sdim#define __VEC_CLASS_FP_SUBNORMAL_P (1 << 1)
26314564Sdim#define __VEC_CLASS_FP_SUBNORMAL (__VEC_CLASS_FP_SUBNORMAL_P | \
27314564Sdim                                  __VEC_CLASS_FP_SUBNORMAL_N)
28314564Sdim#define __VEC_CLASS_FP_ZERO_N (1<<2)
29314564Sdim#define __VEC_CLASS_FP_ZERO_P (1<<3)
30314564Sdim#define __VEC_CLASS_FP_ZERO (__VEC_CLASS_FP_ZERO_P           | \
31314564Sdim                             __VEC_CLASS_FP_ZERO_N)
32314564Sdim#define __VEC_CLASS_FP_INFINITY_N (1<<4)
33314564Sdim#define __VEC_CLASS_FP_INFINITY_P (1<<5)
34314564Sdim#define __VEC_CLASS_FP_INFINITY (__VEC_CLASS_FP_INFINITY_P   | \
35314564Sdim                                 __VEC_CLASS_FP_INFINITY_N)
36314564Sdim#define __VEC_CLASS_FP_NAN (1<<6)
37314564Sdim#define __VEC_CLASS_FP_NOT_NORMAL (__VEC_CLASS_FP_NAN        | \
38314564Sdim                                   __VEC_CLASS_FP_SUBNORMAL  | \
39314564Sdim                                   __VEC_CLASS_FP_ZERO       | \
40314564Sdim                                   __VEC_CLASS_FP_INFINITY)
41314564Sdim
42210299Sed#define __ATTRS_o_ai __attribute__((__overloadable__, __always_inline__))
43207619Srdivacky
44314564Sdim#ifdef __POWER9_VECTOR__
45314564Sdim#include <stddef.h>
46314564Sdim#endif
47314564Sdim
48309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai vec_perm(
49309124Sdim    vector signed char __a, vector signed char __b, vector unsigned char __c);
50210299Sed
51309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
52309124Sdimvec_perm(vector unsigned char __a, vector unsigned char __b,
53309124Sdim         vector unsigned char __c);
54210299Sed
55309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
56309124Sdimvec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c);
57212904Sdim
58309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
59309124Sdim                                                     vector signed short __b,
60309124Sdim                                                     vector unsigned char __c);
61210299Sed
62309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
63309124Sdimvec_perm(vector unsigned short __a, vector unsigned short __b,
64309124Sdim         vector unsigned char __c);
65210299Sed
66309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai vec_perm(
67309124Sdim    vector bool short __a, vector bool short __b, vector unsigned char __c);
68212904Sdim
69309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
70309124Sdim                                                     vector pixel __b,
71309124Sdim                                                     vector unsigned char __c);
72212904Sdim
73309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
74309124Sdim                                                   vector signed int __b,
75309124Sdim                                                   vector unsigned char __c);
76210299Sed
77309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai vec_perm(
78309124Sdim    vector unsigned int __a, vector unsigned int __b, vector unsigned char __c);
79210299Sed
80309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
81309124Sdimvec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c);
82212904Sdim
83309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
84309124Sdim                                                     vector float __b,
85309124Sdim                                                     vector unsigned char __c);
86210299Sed
87288943Sdim#ifdef __VSX__
88309124Sdimstatic __inline__ vector long long __ATTRS_o_ai
89309124Sdimvec_perm(vector signed long long __a, vector signed long long __b,
90309124Sdim         vector unsigned char __c);
91276479Sdim
92309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
93288943Sdimvec_perm(vector unsigned long long __a, vector unsigned long long __b,
94288943Sdim         vector unsigned char __c);
95288943Sdim
96309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
97288943Sdimvec_perm(vector bool long long __a, vector bool long long __b,
98288943Sdim         vector unsigned char __c);
99288943Sdim
100309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_perm(vector double __a,
101309124Sdim                                                      vector double __b,
102309124Sdim                                                      vector unsigned char __c);
103288943Sdim#endif
104288943Sdim
105309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
106309124Sdimvec_xor(vector unsigned char __a, vector unsigned char __b);
107288943Sdim
108207619Srdivacky/* vec_abs */
109207619Srdivacky
110207619Srdivacky#define __builtin_altivec_abs_v16qi vec_abs
111288943Sdim#define __builtin_altivec_abs_v8hi vec_abs
112288943Sdim#define __builtin_altivec_abs_v4si vec_abs
113207619Srdivacky
114309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
115309124Sdimvec_abs(vector signed char __a) {
116249423Sdim  return __builtin_altivec_vmaxsb(__a, -__a);
117207619Srdivacky}
118207619Srdivacky
119309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
120309124Sdimvec_abs(vector signed short __a) {
121249423Sdim  return __builtin_altivec_vmaxsh(__a, -__a);
122207619Srdivacky}
123207619Srdivacky
124309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
125309124Sdimvec_abs(vector signed int __a) {
126249423Sdim  return __builtin_altivec_vmaxsw(__a, -__a);
127207619Srdivacky}
128207619Srdivacky
129288943Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
130309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
131288943Sdimvec_abs(vector signed long long __a) {
132288943Sdim  return __builtin_altivec_vmaxsd(__a, -__a);
133288943Sdim}
134288943Sdim#endif
135288943Sdim
136309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_abs(vector float __a) {
137309124Sdim#ifdef __VSX__
138309124Sdim  return __builtin_vsx_xvabssp(__a);
139309124Sdim#else
140288943Sdim  vector unsigned int __res =
141288943Sdim      (vector unsigned int)__a & (vector unsigned int)(0x7FFFFFFF);
142249423Sdim  return (vector float)__res;
143309124Sdim#endif
144207619Srdivacky}
145207619Srdivacky
146314564Sdim#ifdef __VSX__
147309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_abs(vector double __a) {
148309124Sdim  return __builtin_vsx_xvabsdp(__a);
149288943Sdim}
150288943Sdim#endif
151207619Srdivacky
152296417Sdim/* vec_abss */
153207619Srdivacky#define __builtin_altivec_abss_v16qi vec_abss
154288943Sdim#define __builtin_altivec_abss_v8hi vec_abss
155288943Sdim#define __builtin_altivec_abss_v4si vec_abss
156207619Srdivacky
157309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
158309124Sdimvec_abss(vector signed char __a) {
159288943Sdim  return __builtin_altivec_vmaxsb(
160288943Sdim      __a, __builtin_altivec_vsubsbs((vector signed char)(0), __a));
161207619Srdivacky}
162207619Srdivacky
163309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
164309124Sdimvec_abss(vector signed short __a) {
165288943Sdim  return __builtin_altivec_vmaxsh(
166288943Sdim      __a, __builtin_altivec_vsubshs((vector signed short)(0), __a));
167207619Srdivacky}
168207619Srdivacky
169309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
170309124Sdimvec_abss(vector signed int __a) {
171288943Sdim  return __builtin_altivec_vmaxsw(
172288943Sdim      __a, __builtin_altivec_vsubsws((vector signed int)(0), __a));
173207619Srdivacky}
174207619Srdivacky
175314564Sdim/* vec_absd */
176314564Sdim#if defined(__POWER9_VECTOR__)
177314564Sdim
178314564Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
179314564Sdimvec_absd(vector unsigned char __a, vector unsigned char __b) {
180314564Sdim  return __builtin_altivec_vabsdub(__a, __b);
181314564Sdim}
182314564Sdim
183314564Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
184314564Sdimvec_absd(vector unsigned short __a, vector unsigned short __b) {
185314564Sdim  return __builtin_altivec_vabsduh(__a, __b);
186314564Sdim}
187314564Sdim
188314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
189314564Sdimvec_absd(vector unsigned int __a,  vector unsigned int __b) {
190314564Sdim  return __builtin_altivec_vabsduw(__a, __b);
191314564Sdim}
192314564Sdim
193314564Sdim#endif /* End __POWER9_VECTOR__ */
194314564Sdim
195207619Srdivacky/* vec_add */
196207619Srdivacky
197309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
198309124Sdimvec_add(vector signed char __a, vector signed char __b) {
199249423Sdim  return __a + __b;
200207619Srdivacky}
201207619Srdivacky
202309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
203309124Sdimvec_add(vector bool char __a, vector signed char __b) {
204249423Sdim  return (vector signed char)__a + __b;
205212904Sdim}
206212904Sdim
207309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
208309124Sdimvec_add(vector signed char __a, vector bool char __b) {
209249423Sdim  return __a + (vector signed char)__b;
210212904Sdim}
211212904Sdim
212309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
213309124Sdimvec_add(vector unsigned char __a, vector unsigned char __b) {
214249423Sdim  return __a + __b;
215207619Srdivacky}
216207619Srdivacky
217309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
218309124Sdimvec_add(vector bool char __a, vector unsigned char __b) {
219249423Sdim  return (vector unsigned char)__a + __b;
220212904Sdim}
221212904Sdim
222309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
223309124Sdimvec_add(vector unsigned char __a, vector bool char __b) {
224249423Sdim  return __a + (vector unsigned char)__b;
225212904Sdim}
226212904Sdim
227309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
228309124Sdim                                                    vector short __b) {
229249423Sdim  return __a + __b;
230207619Srdivacky}
231207619Srdivacky
232309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_add(vector bool short __a,
233309124Sdim                                                    vector short __b) {
234249423Sdim  return (vector short)__a + __b;
235212904Sdim}
236212904Sdim
237309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
238309124Sdim                                                    vector bool short __b) {
239249423Sdim  return __a + (vector short)__b;
240212904Sdim}
241212904Sdim
242309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
243309124Sdimvec_add(vector unsigned short __a, vector unsigned short __b) {
244249423Sdim  return __a + __b;
245207619Srdivacky}
246207619Srdivacky
247309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
248309124Sdimvec_add(vector bool short __a, vector unsigned short __b) {
249249423Sdim  return (vector unsigned short)__a + __b;
250212904Sdim}
251212904Sdim
252309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
253309124Sdimvec_add(vector unsigned short __a, vector bool short __b) {
254249423Sdim  return __a + (vector unsigned short)__b;
255212904Sdim}
256212904Sdim
257309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
258309124Sdim                                                  vector int __b) {
259249423Sdim  return __a + __b;
260207619Srdivacky}
261207619Srdivacky
262309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_add(vector bool int __a,
263309124Sdim                                                  vector int __b) {
264249423Sdim  return (vector int)__a + __b;
265212904Sdim}
266212904Sdim
267309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
268309124Sdim                                                  vector bool int __b) {
269249423Sdim  return __a + (vector int)__b;
270212904Sdim}
271212904Sdim
272309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
273309124Sdimvec_add(vector unsigned int __a, vector unsigned int __b) {
274249423Sdim  return __a + __b;
275207619Srdivacky}
276207619Srdivacky
277309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
278309124Sdimvec_add(vector bool int __a, vector unsigned int __b) {
279249423Sdim  return (vector unsigned int)__a + __b;
280212904Sdim}
281212904Sdim
282309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
283309124Sdimvec_add(vector unsigned int __a, vector bool int __b) {
284249423Sdim  return __a + (vector unsigned int)__b;
285212904Sdim}
286212904Sdim
287288943Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
288309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
289288943Sdimvec_add(vector signed long long __a, vector signed long long __b) {
290249423Sdim  return __a + __b;
291207619Srdivacky}
292207619Srdivacky
293309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
294288943Sdimvec_add(vector unsigned long long __a, vector unsigned long long __b) {
295288943Sdim  return __a + __b;
296288943Sdim}
297288943Sdim
298309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
299309124Sdimvec_add(vector signed __int128 __a, vector signed __int128 __b) {
300288943Sdim  return __a + __b;
301288943Sdim}
302288943Sdim
303309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
304288943Sdimvec_add(vector unsigned __int128 __a, vector unsigned __int128 __b) {
305288943Sdim  return __a + __b;
306288943Sdim}
307288943Sdim#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
308288943Sdim
309309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_add(vector float __a,
310309124Sdim                                                    vector float __b) {
311288943Sdim  return __a + __b;
312288943Sdim}
313288943Sdim
314288943Sdim#ifdef __VSX__
315309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_add(vector double __a,
316309124Sdim                                                     vector double __b) {
317288943Sdim  return __a + __b;
318288943Sdim}
319288943Sdim#endif // __VSX__
320288943Sdim
321296417Sdim/* vec_adde */
322296417Sdim
323296417Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
324309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
325296417Sdimvec_adde(vector signed __int128 __a, vector signed __int128 __b,
326296417Sdim         vector signed __int128 __c) {
327296417Sdim  return __builtin_altivec_vaddeuqm(__a, __b, __c);
328296417Sdim}
329296417Sdim
330309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
331296417Sdimvec_adde(vector unsigned __int128 __a, vector unsigned __int128 __b,
332296417Sdim         vector unsigned __int128 __c) {
333296417Sdim  return __builtin_altivec_vaddeuqm(__a, __b, __c);
334296417Sdim}
335296417Sdim#endif
336296417Sdim
337314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
338314564Sdimvec_adde(vector signed int __a, vector signed int __b,
339314564Sdim         vector signed int __c) {
340314564Sdim  vector signed int __mask = {1, 1, 1, 1};
341314564Sdim  vector signed int __carry = __c & __mask;
342314564Sdim  return vec_add(vec_add(__a, __b), __carry);
343314564Sdim}
344314564Sdim
345314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
346314564Sdimvec_adde(vector unsigned int __a, vector unsigned int __b,
347314564Sdim         vector unsigned int __c) {
348314564Sdim  vector unsigned int __mask = {1, 1, 1, 1};
349314564Sdim  vector unsigned int __carry = __c & __mask;
350314564Sdim  return vec_add(vec_add(__a, __b), __carry);
351314564Sdim}
352314564Sdim
353296417Sdim/* vec_addec */
354296417Sdim
355296417Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
356309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
357296417Sdimvec_addec(vector signed __int128 __a, vector signed __int128 __b,
358296417Sdim          vector signed __int128 __c) {
359296417Sdim  return __builtin_altivec_vaddecuq(__a, __b, __c);
360296417Sdim}
361296417Sdim
362309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
363296417Sdimvec_addec(vector unsigned __int128 __a, vector unsigned __int128 __b,
364296417Sdim          vector unsigned __int128 __c) {
365296417Sdim  return __builtin_altivec_vaddecuq(__a, __b, __c);
366296417Sdim}
367314564Sdim
368314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
369314564Sdimvec_addec(vector signed int __a, vector signed int __b,
370314564Sdim          vector signed int __c) {
371314564Sdim
372314564Sdim  signed int __result[4];
373314564Sdim  for (int i = 0; i < 4; i++) {
374314564Sdim    unsigned int __tempa = (unsigned int) __a[i];
375314564Sdim    unsigned int __tempb = (unsigned int) __b[i];
376314564Sdim    unsigned int __tempc = (unsigned int) __c[i];
377314564Sdim    __tempc = __tempc & 0x00000001;
378314564Sdim    unsigned long long __longa = (unsigned long long) __tempa;
379314564Sdim    unsigned long long __longb = (unsigned long long) __tempb;
380314564Sdim    unsigned long long __longc = (unsigned long long) __tempc;
381314564Sdim    unsigned long long __sum = __longa + __longb + __longc;
382314564Sdim    unsigned long long __res = (__sum >> 32) & 0x01;
383314564Sdim    unsigned long long __tempres = (unsigned int) __res;
384314564Sdim    __result[i] = (signed int) __tempres;
385314564Sdim  }
386314564Sdim
387314564Sdim  vector signed int ret = { __result[0], __result[1], __result[2], __result[3] };
388314564Sdim  return ret;
389314564Sdim}
390314564Sdim
391314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
392314564Sdimvec_addec(vector unsigned int __a, vector unsigned int __b,
393314564Sdim          vector unsigned int __c) {
394314564Sdim
395314564Sdim  unsigned int __result[4];
396314564Sdim  for (int i = 0; i < 4; i++) {
397314564Sdim    unsigned int __tempc = __c[i] & 1;
398314564Sdim    unsigned long long __longa = (unsigned long long) __a[i];
399314564Sdim    unsigned long long __longb = (unsigned long long) __b[i];
400314564Sdim    unsigned long long __longc = (unsigned long long) __tempc;
401314564Sdim    unsigned long long __sum = __longa + __longb + __longc;
402314564Sdim    unsigned long long __res = (__sum >> 32) & 0x01;
403314564Sdim    unsigned long long __tempres = (unsigned int) __res;
404314564Sdim    __result[i] = (signed int) __tempres;
405314564Sdim  }
406314564Sdim
407314564Sdim  vector unsigned int ret = { __result[0], __result[1], __result[2], __result[3] };
408314564Sdim  return ret;
409314564Sdim}
410314564Sdim
411296417Sdim#endif
412296417Sdim
413210299Sed/* vec_vaddubm */
414210299Sed
415210299Sed#define __builtin_altivec_vaddubm vec_vaddubm
416210299Sed
417309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
418309124Sdimvec_vaddubm(vector signed char __a, vector signed char __b) {
419249423Sdim  return __a + __b;
420210299Sed}
421210299Sed
422309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
423309124Sdimvec_vaddubm(vector bool char __a, vector signed char __b) {
424249423Sdim  return (vector signed char)__a + __b;
425212904Sdim}
426212904Sdim
427309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
428309124Sdimvec_vaddubm(vector signed char __a, vector bool char __b) {
429249423Sdim  return __a + (vector signed char)__b;
430212904Sdim}
431212904Sdim
432309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
433309124Sdimvec_vaddubm(vector unsigned char __a, vector unsigned char __b) {
434249423Sdim  return __a + __b;
435210299Sed}
436210299Sed
437309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
438309124Sdimvec_vaddubm(vector bool char __a, vector unsigned char __b) {
439249423Sdim  return (vector unsigned char)__a + __b;
440212904Sdim}
441212904Sdim
442309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
443309124Sdimvec_vaddubm(vector unsigned char __a, vector bool char __b) {
444249423Sdim  return __a + (vector unsigned char)__b;
445212904Sdim}
446212904Sdim
447210299Sed/* vec_vadduhm */
448210299Sed
449210299Sed#define __builtin_altivec_vadduhm vec_vadduhm
450210299Sed
451309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
452309124Sdim                                                        vector short __b) {
453249423Sdim  return __a + __b;
454210299Sed}
455210299Sed
456309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector bool short __a,
457309124Sdim                                                        vector short __b) {
458249423Sdim  return (vector short)__a + __b;
459212904Sdim}
460212904Sdim
461309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
462309124Sdim                                                        vector bool short __b) {
463249423Sdim  return __a + (vector short)__b;
464212904Sdim}
465212904Sdim
466309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
467288943Sdimvec_vadduhm(vector unsigned short __a, vector unsigned short __b) {
468249423Sdim  return __a + __b;
469210299Sed}
470210299Sed
471309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
472288943Sdimvec_vadduhm(vector bool short __a, vector unsigned short __b) {
473249423Sdim  return (vector unsigned short)__a + __b;
474212904Sdim}
475212904Sdim
476309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
477309124Sdimvec_vadduhm(vector unsigned short __a, vector bool short __b) {
478249423Sdim  return __a + (vector unsigned short)__b;
479212904Sdim}
480212904Sdim
481210299Sed/* vec_vadduwm */
482210299Sed
483210299Sed#define __builtin_altivec_vadduwm vec_vadduwm
484210299Sed
485309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
486309124Sdim                                                      vector int __b) {
487249423Sdim  return __a + __b;
488210299Sed}
489210299Sed
490309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector bool int __a,
491309124Sdim                                                      vector int __b) {
492249423Sdim  return (vector int)__a + __b;
493212904Sdim}
494212904Sdim
495309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
496309124Sdim                                                      vector bool int __b) {
497249423Sdim  return __a + (vector int)__b;
498212904Sdim}
499212904Sdim
500309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
501309124Sdimvec_vadduwm(vector unsigned int __a, vector unsigned int __b) {
502249423Sdim  return __a + __b;
503210299Sed}
504210299Sed
505309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
506309124Sdimvec_vadduwm(vector bool int __a, vector unsigned int __b) {
507249423Sdim  return (vector unsigned int)__a + __b;
508212904Sdim}
509212904Sdim
510309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
511309124Sdimvec_vadduwm(vector unsigned int __a, vector bool int __b) {
512249423Sdim  return __a + (vector unsigned int)__b;
513212904Sdim}
514212904Sdim
515210299Sed/* vec_vaddfp */
516210299Sed
517288943Sdim#define __builtin_altivec_vaddfp vec_vaddfp
518210299Sed
519309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
520288943Sdimvec_vaddfp(vector float __a, vector float __b) {
521249423Sdim  return __a + __b;
522210299Sed}
523210299Sed
524207619Srdivacky/* vec_addc */
525207619Srdivacky
526309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
527309124Sdimvec_addc(vector signed int __a, vector signed int __b) {
528296417Sdim  return (vector signed int)__builtin_altivec_vaddcuw((vector unsigned int)__a,
529296417Sdim                                                      (vector unsigned int)__b);
530296417Sdim}
531296417Sdim
532309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
533309124Sdimvec_addc(vector unsigned int __a, vector unsigned int __b) {
534249423Sdim  return __builtin_altivec_vaddcuw(__a, __b);
535210299Sed}
536207619Srdivacky
537288943Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
538309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
539288943Sdimvec_addc(vector signed __int128 __a, vector signed __int128 __b) {
540296417Sdim  return (vector signed __int128)__builtin_altivec_vaddcuq(
541309124Sdim      (vector unsigned __int128)__a, (vector unsigned __int128)__b);
542288943Sdim}
543288943Sdim
544309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
545288943Sdimvec_addc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
546288943Sdim  return __builtin_altivec_vaddcuq(__a, __b);
547288943Sdim}
548288943Sdim#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
549288943Sdim
550210299Sed/* vec_vaddcuw */
551210299Sed
552309124Sdimstatic __inline__ vector unsigned int __attribute__((__always_inline__))
553288943Sdimvec_vaddcuw(vector unsigned int __a, vector unsigned int __b) {
554249423Sdim  return __builtin_altivec_vaddcuw(__a, __b);
555210299Sed}
556210299Sed
557207619Srdivacky/* vec_adds */
558207619Srdivacky
559309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
560309124Sdimvec_adds(vector signed char __a, vector signed char __b) {
561249423Sdim  return __builtin_altivec_vaddsbs(__a, __b);
562207619Srdivacky}
563207619Srdivacky
564309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
565309124Sdimvec_adds(vector bool char __a, vector signed char __b) {
566249423Sdim  return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
567212904Sdim}
568212904Sdim
569309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
570309124Sdimvec_adds(vector signed char __a, vector bool char __b) {
571249423Sdim  return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
572212904Sdim}
573212904Sdim
574309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
575309124Sdimvec_adds(vector unsigned char __a, vector unsigned char __b) {
576249423Sdim  return __builtin_altivec_vaddubs(__a, __b);
577207619Srdivacky}
578207619Srdivacky
579309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
580309124Sdimvec_adds(vector bool char __a, vector unsigned char __b) {
581249423Sdim  return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
582212904Sdim}
583212904Sdim
584309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
585309124Sdimvec_adds(vector unsigned char __a, vector bool char __b) {
586249423Sdim  return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
587212904Sdim}
588212904Sdim
589309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
590309124Sdim                                                     vector short __b) {
591249423Sdim  return __builtin_altivec_vaddshs(__a, __b);
592207619Srdivacky}
593207619Srdivacky
594309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_adds(vector bool short __a,
595309124Sdim                                                     vector short __b) {
596249423Sdim  return __builtin_altivec_vaddshs((vector short)__a, __b);
597212904Sdim}
598212904Sdim
599309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
600309124Sdim                                                     vector bool short __b) {
601249423Sdim  return __builtin_altivec_vaddshs(__a, (vector short)__b);
602212904Sdim}
603212904Sdim
604309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
605309124Sdimvec_adds(vector unsigned short __a, vector unsigned short __b) {
606249423Sdim  return __builtin_altivec_vadduhs(__a, __b);
607207619Srdivacky}
608207619Srdivacky
609309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
610309124Sdimvec_adds(vector bool short __a, vector unsigned short __b) {
611249423Sdim  return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
612212904Sdim}
613212904Sdim
614309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
615309124Sdimvec_adds(vector unsigned short __a, vector bool short __b) {
616249423Sdim  return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
617212904Sdim}
618212904Sdim
619309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
620309124Sdim                                                   vector int __b) {
621249423Sdim  return __builtin_altivec_vaddsws(__a, __b);
622207619Srdivacky}
623207619Srdivacky
624309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_adds(vector bool int __a,
625309124Sdim                                                   vector int __b) {
626249423Sdim  return __builtin_altivec_vaddsws((vector int)__a, __b);
627212904Sdim}
628212904Sdim
629309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
630309124Sdim                                                   vector bool int __b) {
631249423Sdim  return __builtin_altivec_vaddsws(__a, (vector int)__b);
632212904Sdim}
633212904Sdim
634309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
635309124Sdimvec_adds(vector unsigned int __a, vector unsigned int __b) {
636249423Sdim  return __builtin_altivec_vadduws(__a, __b);
637207619Srdivacky}
638207619Srdivacky
639309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
640309124Sdimvec_adds(vector bool int __a, vector unsigned int __b) {
641249423Sdim  return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
642212904Sdim}
643212904Sdim
644309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
645309124Sdimvec_adds(vector unsigned int __a, vector bool int __b) {
646249423Sdim  return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
647212904Sdim}
648212904Sdim
649210299Sed/* vec_vaddsbs */
650207619Srdivacky
651309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
652309124Sdimvec_vaddsbs(vector signed char __a, vector signed char __b) {
653249423Sdim  return __builtin_altivec_vaddsbs(__a, __b);
654210299Sed}
655207619Srdivacky
656309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
657309124Sdimvec_vaddsbs(vector bool char __a, vector signed char __b) {
658249423Sdim  return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
659212904Sdim}
660212904Sdim
661309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
662309124Sdimvec_vaddsbs(vector signed char __a, vector bool char __b) {
663249423Sdim  return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
664212904Sdim}
665212904Sdim
666210299Sed/* vec_vaddubs */
667210299Sed
668309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
669309124Sdimvec_vaddubs(vector unsigned char __a, vector unsigned char __b) {
670249423Sdim  return __builtin_altivec_vaddubs(__a, __b);
671207619Srdivacky}
672207619Srdivacky
673309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
674309124Sdimvec_vaddubs(vector bool char __a, vector unsigned char __b) {
675249423Sdim  return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
676212904Sdim}
677212904Sdim
678309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
679309124Sdimvec_vaddubs(vector unsigned char __a, vector bool char __b) {
680249423Sdim  return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
681212904Sdim}
682212904Sdim
683210299Sed/* vec_vaddshs */
684210299Sed
685309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
686309124Sdim                                                        vector short __b) {
687249423Sdim  return __builtin_altivec_vaddshs(__a, __b);
688207619Srdivacky}
689207619Srdivacky
690309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector bool short __a,
691309124Sdim                                                        vector short __b) {
692249423Sdim  return __builtin_altivec_vaddshs((vector short)__a, __b);
693212904Sdim}
694212904Sdim
695309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
696309124Sdim                                                        vector bool short __b) {
697249423Sdim  return __builtin_altivec_vaddshs(__a, (vector short)__b);
698212904Sdim}
699212904Sdim
700210299Sed/* vec_vadduhs */
701210299Sed
702309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
703288943Sdimvec_vadduhs(vector unsigned short __a, vector unsigned short __b) {
704249423Sdim  return __builtin_altivec_vadduhs(__a, __b);
705207619Srdivacky}
706207619Srdivacky
707309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
708288943Sdimvec_vadduhs(vector bool short __a, vector unsigned short __b) {
709249423Sdim  return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
710212904Sdim}
711212904Sdim
712309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
713309124Sdimvec_vadduhs(vector unsigned short __a, vector bool short __b) {
714249423Sdim  return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
715212904Sdim}
716212904Sdim
717210299Sed/* vec_vaddsws */
718210299Sed
719309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
720309124Sdim                                                      vector int __b) {
721249423Sdim  return __builtin_altivec_vaddsws(__a, __b);
722207619Srdivacky}
723207619Srdivacky
724309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector bool int __a,
725309124Sdim                                                      vector int __b) {
726249423Sdim  return __builtin_altivec_vaddsws((vector int)__a, __b);
727212904Sdim}
728212904Sdim
729309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
730309124Sdim                                                      vector bool int __b) {
731249423Sdim  return __builtin_altivec_vaddsws(__a, (vector int)__b);
732212904Sdim}
733212904Sdim
734210299Sed/* vec_vadduws */
735210299Sed
736309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
737309124Sdimvec_vadduws(vector unsigned int __a, vector unsigned int __b) {
738249423Sdim  return __builtin_altivec_vadduws(__a, __b);
739207619Srdivacky}
740207619Srdivacky
741309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
742309124Sdimvec_vadduws(vector bool int __a, vector unsigned int __b) {
743249423Sdim  return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
744212904Sdim}
745212904Sdim
746309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
747309124Sdimvec_vadduws(vector unsigned int __a, vector bool int __b) {
748249423Sdim  return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
749212904Sdim}
750212904Sdim
751288943Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
752288943Sdim/* vec_vadduqm */
753288943Sdim
754309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
755288943Sdimvec_vadduqm(vector signed __int128 __a, vector signed __int128 __b) {
756288943Sdim  return __a + __b;
757288943Sdim}
758288943Sdim
759309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
760288943Sdimvec_vadduqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
761288943Sdim  return __a + __b;
762288943Sdim}
763288943Sdim
764288943Sdim/* vec_vaddeuqm */
765288943Sdim
766309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
767288943Sdimvec_vaddeuqm(vector signed __int128 __a, vector signed __int128 __b,
768288943Sdim             vector signed __int128 __c) {
769288943Sdim  return __builtin_altivec_vaddeuqm(__a, __b, __c);
770288943Sdim}
771288943Sdim
772309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
773288943Sdimvec_vaddeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
774288943Sdim             vector unsigned __int128 __c) {
775288943Sdim  return __builtin_altivec_vaddeuqm(__a, __b, __c);
776288943Sdim}
777288943Sdim
778288943Sdim/* vec_vaddcuq */
779288943Sdim
780309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
781288943Sdimvec_vaddcuq(vector signed __int128 __a, vector signed __int128 __b) {
782288943Sdim  return __builtin_altivec_vaddcuq(__a, __b);
783288943Sdim}
784288943Sdim
785309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
786288943Sdimvec_vaddcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
787288943Sdim  return __builtin_altivec_vaddcuq(__a, __b);
788288943Sdim}
789288943Sdim
790288943Sdim/* vec_vaddecuq */
791288943Sdim
792309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
793288943Sdimvec_vaddecuq(vector signed __int128 __a, vector signed __int128 __b,
794288943Sdim             vector signed __int128 __c) {
795288943Sdim  return __builtin_altivec_vaddecuq(__a, __b, __c);
796288943Sdim}
797288943Sdim
798309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
799288943Sdimvec_vaddecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
800288943Sdim             vector unsigned __int128 __c) {
801288943Sdim  return __builtin_altivec_vaddecuq(__a, __b, __c);
802288943Sdim}
803288943Sdim#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
804288943Sdim
805210299Sed/* vec_and */
806210299Sed
807210299Sed#define __builtin_altivec_vand vec_and
808210299Sed
809309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
810309124Sdimvec_and(vector signed char __a, vector signed char __b) {
811249423Sdim  return __a & __b;
812207619Srdivacky}
813207619Srdivacky
814309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
815309124Sdimvec_and(vector bool char __a, vector signed char __b) {
816249423Sdim  return (vector signed char)__a & __b;
817212904Sdim}
818212904Sdim
819309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
820309124Sdimvec_and(vector signed char __a, vector bool char __b) {
821249423Sdim  return __a & (vector signed char)__b;
822212904Sdim}
823212904Sdim
824309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
825309124Sdimvec_and(vector unsigned char __a, vector unsigned char __b) {
826249423Sdim  return __a & __b;
827207619Srdivacky}
828207619Srdivacky
829309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
830309124Sdimvec_and(vector bool char __a, vector unsigned char __b) {
831249423Sdim  return (vector unsigned char)__a & __b;
832212904Sdim}
833212904Sdim
834309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
835309124Sdimvec_and(vector unsigned char __a, vector bool char __b) {
836249423Sdim  return __a & (vector unsigned char)__b;
837212904Sdim}
838212904Sdim
839309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_and(vector bool char __a,
840309124Sdim                                                        vector bool char __b) {
841249423Sdim  return __a & __b;
842212904Sdim}
843212904Sdim
844309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
845309124Sdim                                                    vector short __b) {
846249423Sdim  return __a & __b;
847210299Sed}
848207619Srdivacky
849309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_and(vector bool short __a,
850309124Sdim                                                    vector short __b) {
851249423Sdim  return (vector short)__a & __b;
852212904Sdim}
853212904Sdim
854309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
855309124Sdim                                                    vector bool short __b) {
856249423Sdim  return __a & (vector short)__b;
857212904Sdim}
858212904Sdim
859309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
860309124Sdimvec_and(vector unsigned short __a, vector unsigned short __b) {
861249423Sdim  return __a & __b;
862210299Sed}
863207619Srdivacky
864309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
865309124Sdimvec_and(vector bool short __a, vector unsigned short __b) {
866249423Sdim  return (vector unsigned short)__a & __b;
867212904Sdim}
868212904Sdim
869309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
870309124Sdimvec_and(vector unsigned short __a, vector bool short __b) {
871249423Sdim  return __a & (vector unsigned short)__b;
872212904Sdim}
873212904Sdim
874309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
875309124Sdimvec_and(vector bool short __a, vector bool short __b) {
876249423Sdim  return __a & __b;
877212904Sdim}
878212904Sdim
879309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
880309124Sdim                                                  vector int __b) {
881249423Sdim  return __a & __b;
882207619Srdivacky}
883207619Srdivacky
884309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_and(vector bool int __a,
885309124Sdim                                                  vector int __b) {
886249423Sdim  return (vector int)__a & __b;
887212904Sdim}
888212904Sdim
889309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
890309124Sdim                                                  vector bool int __b) {
891249423Sdim  return __a & (vector int)__b;
892212904Sdim}
893212904Sdim
894309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
895309124Sdimvec_and(vector unsigned int __a, vector unsigned int __b) {
896249423Sdim  return __a & __b;
897207619Srdivacky}
898207619Srdivacky
899309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
900309124Sdimvec_and(vector bool int __a, vector unsigned int __b) {
901249423Sdim  return (vector unsigned int)__a & __b;
902212904Sdim}
903212904Sdim
904309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
905309124Sdimvec_and(vector unsigned int __a, vector bool int __b) {
906249423Sdim  return __a & (vector unsigned int)__b;
907212904Sdim}
908212904Sdim
909309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_and(vector bool int __a,
910309124Sdim                                                       vector bool int __b) {
911249423Sdim  return __a & __b;
912212904Sdim}
913212904Sdim
914309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
915309124Sdim                                                    vector float __b) {
916288943Sdim  vector unsigned int __res =
917288943Sdim      (vector unsigned int)__a & (vector unsigned int)__b;
918249423Sdim  return (vector float)__res;
919207619Srdivacky}
920207619Srdivacky
921309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_and(vector bool int __a,
922309124Sdim                                                    vector float __b) {
923288943Sdim  vector unsigned int __res =
924288943Sdim      (vector unsigned int)__a & (vector unsigned int)__b;
925249423Sdim  return (vector float)__res;
926212904Sdim}
927212904Sdim
928309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
929309124Sdim                                                    vector bool int __b) {
930288943Sdim  vector unsigned int __res =
931288943Sdim      (vector unsigned int)__a & (vector unsigned int)__b;
932249423Sdim  return (vector float)__res;
933212904Sdim}
934212904Sdim
935288943Sdim#ifdef __VSX__
936309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_and(vector bool long long __a,
937309124Sdim                                                     vector double __b) {
938288943Sdim  vector unsigned long long __res =
939288943Sdim      (vector unsigned long long)__a & (vector unsigned long long)__b;
940288943Sdim  return (vector double)__res;
941288943Sdim}
942288943Sdim
943309124Sdimstatic __inline__ vector double __ATTRS_o_ai
944309124Sdimvec_and(vector double __a, vector bool long long __b) {
945288943Sdim  vector unsigned long long __res =
946288943Sdim      (vector unsigned long long)__a & (vector unsigned long long)__b;
947288943Sdim  return (vector double)__res;
948288943Sdim}
949288943Sdim
950309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_and(vector double __a,
951309124Sdim                                                     vector double __b) {
952288943Sdim  vector unsigned long long __res =
953288943Sdim      (vector unsigned long long)__a & (vector unsigned long long)__b;
954288943Sdim  return (vector double)__res;
955288943Sdim}
956288943Sdim
957309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
958288943Sdimvec_and(vector signed long long __a, vector signed long long __b) {
959288943Sdim  return __a & __b;
960288943Sdim}
961288943Sdim
962309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
963288943Sdimvec_and(vector bool long long __a, vector signed long long __b) {
964288943Sdim  return (vector signed long long)__a & __b;
965288943Sdim}
966288943Sdim
967309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
968309124Sdimvec_and(vector signed long long __a, vector bool long long __b) {
969288943Sdim  return __a & (vector signed long long)__b;
970288943Sdim}
971288943Sdim
972309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
973288943Sdimvec_and(vector unsigned long long __a, vector unsigned long long __b) {
974288943Sdim  return __a & __b;
975288943Sdim}
976288943Sdim
977309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
978288943Sdimvec_and(vector bool long long __a, vector unsigned long long __b) {
979288943Sdim  return (vector unsigned long long)__a & __b;
980288943Sdim}
981288943Sdim
982309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
983288943Sdimvec_and(vector unsigned long long __a, vector bool long long __b) {
984288943Sdim  return __a & (vector unsigned long long)__b;
985288943Sdim}
986288943Sdim
987309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
988309124Sdimvec_and(vector bool long long __a, vector bool long long __b) {
989288943Sdim  return __a & __b;
990288943Sdim}
991288943Sdim#endif
992288943Sdim
993210299Sed/* vec_vand */
994210299Sed
995309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
996309124Sdimvec_vand(vector signed char __a, vector signed char __b) {
997249423Sdim  return __a & __b;
998207619Srdivacky}
999207619Srdivacky
1000309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
1001309124Sdimvec_vand(vector bool char __a, vector signed char __b) {
1002249423Sdim  return (vector signed char)__a & __b;
1003212904Sdim}
1004212904Sdim
1005309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
1006309124Sdimvec_vand(vector signed char __a, vector bool char __b) {
1007249423Sdim  return __a & (vector signed char)__b;
1008212904Sdim}
1009212904Sdim
1010309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
1011309124Sdimvec_vand(vector unsigned char __a, vector unsigned char __b) {
1012249423Sdim  return __a & __b;
1013207619Srdivacky}
1014207619Srdivacky
1015309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
1016309124Sdimvec_vand(vector bool char __a, vector unsigned char __b) {
1017249423Sdim  return (vector unsigned char)__a & __b;
1018212904Sdim}
1019212904Sdim
1020309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
1021309124Sdimvec_vand(vector unsigned char __a, vector bool char __b) {
1022249423Sdim  return __a & (vector unsigned char)__b;
1023212904Sdim}
1024212904Sdim
1025309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_vand(vector bool char __a,
1026309124Sdim                                                         vector bool char __b) {
1027249423Sdim  return __a & __b;
1028212904Sdim}
1029212904Sdim
1030309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
1031309124Sdim                                                     vector short __b) {
1032249423Sdim  return __a & __b;
1033207619Srdivacky}
1034207619Srdivacky
1035309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vand(vector bool short __a,
1036309124Sdim                                                     vector short __b) {
1037249423Sdim  return (vector short)__a & __b;
1038212904Sdim}
1039212904Sdim
1040309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
1041309124Sdim                                                     vector bool short __b) {
1042249423Sdim  return __a & (vector short)__b;
1043212904Sdim}
1044212904Sdim
1045309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
1046309124Sdimvec_vand(vector unsigned short __a, vector unsigned short __b) {
1047249423Sdim  return __a & __b;
1048210299Sed}
1049207619Srdivacky
1050309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
1051309124Sdimvec_vand(vector bool short __a, vector unsigned short __b) {
1052249423Sdim  return (vector unsigned short)__a & __b;
1053212904Sdim}
1054212904Sdim
1055309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
1056309124Sdimvec_vand(vector unsigned short __a, vector bool short __b) {
1057249423Sdim  return __a & (vector unsigned short)__b;
1058212904Sdim}
1059212904Sdim
1060309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
1061309124Sdimvec_vand(vector bool short __a, vector bool short __b) {
1062249423Sdim  return __a & __b;
1063212904Sdim}
1064212904Sdim
1065309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
1066309124Sdim                                                   vector int __b) {
1067249423Sdim  return __a & __b;
1068210299Sed}
1069207619Srdivacky
1070309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vand(vector bool int __a,
1071309124Sdim                                                   vector int __b) {
1072249423Sdim  return (vector int)__a & __b;
1073212904Sdim}
1074212904Sdim
1075309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
1076309124Sdim                                                   vector bool int __b) {
1077249423Sdim  return __a & (vector int)__b;
1078212904Sdim}
1079212904Sdim
1080309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
1081309124Sdimvec_vand(vector unsigned int __a, vector unsigned int __b) {
1082249423Sdim  return __a & __b;
1083207619Srdivacky}
1084207619Srdivacky
1085309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
1086309124Sdimvec_vand(vector bool int __a, vector unsigned int __b) {
1087249423Sdim  return (vector unsigned int)__a & __b;
1088212904Sdim}
1089212904Sdim
1090309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
1091309124Sdimvec_vand(vector unsigned int __a, vector bool int __b) {
1092249423Sdim  return __a & (vector unsigned int)__b;
1093212904Sdim}
1094212904Sdim
1095309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_vand(vector bool int __a,
1096309124Sdim                                                        vector bool int __b) {
1097249423Sdim  return __a & __b;
1098212904Sdim}
1099212904Sdim
1100309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
1101309124Sdim                                                     vector float __b) {
1102288943Sdim  vector unsigned int __res =
1103288943Sdim      (vector unsigned int)__a & (vector unsigned int)__b;
1104249423Sdim  return (vector float)__res;
1105207619Srdivacky}
1106207619Srdivacky
1107309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vand(vector bool int __a,
1108309124Sdim                                                     vector float __b) {
1109288943Sdim  vector unsigned int __res =
1110288943Sdim      (vector unsigned int)__a & (vector unsigned int)__b;
1111249423Sdim  return (vector float)__res;
1112212904Sdim}
1113212904Sdim
1114309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
1115309124Sdim                                                     vector bool int __b) {
1116288943Sdim  vector unsigned int __res =
1117288943Sdim      (vector unsigned int)__a & (vector unsigned int)__b;
1118249423Sdim  return (vector float)__res;
1119212904Sdim}
1120212904Sdim
1121288943Sdim#ifdef __VSX__
1122309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
1123288943Sdimvec_vand(vector signed long long __a, vector signed long long __b) {
1124288943Sdim  return __a & __b;
1125288943Sdim}
1126288943Sdim
1127309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
1128288943Sdimvec_vand(vector bool long long __a, vector signed long long __b) {
1129288943Sdim  return (vector signed long long)__a & __b;
1130288943Sdim}
1131288943Sdim
1132309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
1133288943Sdimvec_vand(vector signed long long __a, vector bool long long __b) {
1134288943Sdim  return __a & (vector signed long long)__b;
1135288943Sdim}
1136288943Sdim
1137309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
1138288943Sdimvec_vand(vector unsigned long long __a, vector unsigned long long __b) {
1139288943Sdim  return __a & __b;
1140288943Sdim}
1141288943Sdim
1142309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
1143288943Sdimvec_vand(vector bool long long __a, vector unsigned long long __b) {
1144288943Sdim  return (vector unsigned long long)__a & __b;
1145288943Sdim}
1146288943Sdim
1147309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
1148288943Sdimvec_vand(vector unsigned long long __a, vector bool long long __b) {
1149288943Sdim  return __a & (vector unsigned long long)__b;
1150288943Sdim}
1151288943Sdim
1152309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1153309124Sdimvec_vand(vector bool long long __a, vector bool long long __b) {
1154288943Sdim  return __a & __b;
1155288943Sdim}
1156288943Sdim#endif
1157288943Sdim
1158210299Sed/* vec_andc */
1159210299Sed
1160210299Sed#define __builtin_altivec_vandc vec_andc
1161210299Sed
1162309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
1163309124Sdimvec_andc(vector signed char __a, vector signed char __b) {
1164249423Sdim  return __a & ~__b;
1165207619Srdivacky}
1166207619Srdivacky
1167309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
1168309124Sdimvec_andc(vector bool char __a, vector signed char __b) {
1169249423Sdim  return (vector signed char)__a & ~__b;
1170212904Sdim}
1171212904Sdim
1172309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
1173309124Sdimvec_andc(vector signed char __a, vector bool char __b) {
1174249423Sdim  return __a & ~(vector signed char)__b;
1175212904Sdim}
1176212904Sdim
1177309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
1178309124Sdimvec_andc(vector unsigned char __a, vector unsigned char __b) {
1179249423Sdim  return __a & ~__b;
1180207619Srdivacky}
1181207619Srdivacky
1182309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
1183309124Sdimvec_andc(vector bool char __a, vector unsigned char __b) {
1184249423Sdim  return (vector unsigned char)__a & ~__b;
1185212904Sdim}
1186212904Sdim
1187309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
1188309124Sdimvec_andc(vector unsigned char __a, vector bool char __b) {
1189249423Sdim  return __a & ~(vector unsigned char)__b;
1190212904Sdim}
1191212904Sdim
1192309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_andc(vector bool char __a,
1193309124Sdim                                                         vector bool char __b) {
1194249423Sdim  return __a & ~__b;
1195212904Sdim}
1196212904Sdim
1197309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
1198309124Sdim                                                     vector short __b) {
1199249423Sdim  return __a & ~__b;
1200207619Srdivacky}
1201207619Srdivacky
1202309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_andc(vector bool short __a,
1203309124Sdim                                                     vector short __b) {
1204249423Sdim  return (vector short)__a & ~__b;
1205212904Sdim}
1206212904Sdim
1207309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
1208309124Sdim                                                     vector bool short __b) {
1209249423Sdim  return __a & ~(vector short)__b;
1210212904Sdim}
1211212904Sdim
1212309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
1213309124Sdimvec_andc(vector unsigned short __a, vector unsigned short __b) {
1214249423Sdim  return __a & ~__b;
1215207619Srdivacky}
1216207619Srdivacky
1217309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
1218309124Sdimvec_andc(vector bool short __a, vector unsigned short __b) {
1219249423Sdim  return (vector unsigned short)__a & ~__b;
1220212904Sdim}
1221212904Sdim
1222309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
1223309124Sdimvec_andc(vector unsigned short __a, vector bool short __b) {
1224249423Sdim  return __a & ~(vector unsigned short)__b;
1225212904Sdim}
1226212904Sdim
1227309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
1228309124Sdimvec_andc(vector bool short __a, vector bool short __b) {
1229249423Sdim  return __a & ~__b;
1230212904Sdim}
1231212904Sdim
1232309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
1233309124Sdim                                                   vector int __b) {
1234249423Sdim  return __a & ~__b;
1235210299Sed}
1236207619Srdivacky
1237309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_andc(vector bool int __a,
1238309124Sdim                                                   vector int __b) {
1239249423Sdim  return (vector int)__a & ~__b;
1240212904Sdim}
1241212904Sdim
1242309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
1243309124Sdim                                                   vector bool int __b) {
1244249423Sdim  return __a & ~(vector int)__b;
1245212904Sdim}
1246212904Sdim
1247309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
1248309124Sdimvec_andc(vector unsigned int __a, vector unsigned int __b) {
1249249423Sdim  return __a & ~__b;
1250210299Sed}
1251207619Srdivacky
1252309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
1253309124Sdimvec_andc(vector bool int __a, vector unsigned int __b) {
1254249423Sdim  return (vector unsigned int)__a & ~__b;
1255212904Sdim}
1256212904Sdim
1257309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
1258309124Sdimvec_andc(vector unsigned int __a, vector bool int __b) {
1259249423Sdim  return __a & ~(vector unsigned int)__b;
1260212904Sdim}
1261212904Sdim
1262309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_andc(vector bool int __a,
1263309124Sdim                                                        vector bool int __b) {
1264249423Sdim  return __a & ~__b;
1265212904Sdim}
1266212904Sdim
1267309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
1268309124Sdim                                                     vector float __b) {
1269288943Sdim  vector unsigned int __res =
1270288943Sdim      (vector unsigned int)__a & ~(vector unsigned int)__b;
1271249423Sdim  return (vector float)__res;
1272207619Srdivacky}
1273207619Srdivacky
1274309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_andc(vector bool int __a,
1275309124Sdim                                                     vector float __b) {
1276288943Sdim  vector unsigned int __res =
1277288943Sdim      (vector unsigned int)__a & ~(vector unsigned int)__b;
1278249423Sdim  return (vector float)__res;
1279212904Sdim}
1280212904Sdim
1281309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
1282309124Sdim                                                     vector bool int __b) {
1283288943Sdim  vector unsigned int __res =
1284288943Sdim      (vector unsigned int)__a & ~(vector unsigned int)__b;
1285249423Sdim  return (vector float)__res;
1286212904Sdim}
1287212904Sdim
1288288943Sdim#ifdef __VSX__
1289309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_andc(vector bool long long __a,
1290309124Sdim                                                      vector double __b) {
1291288943Sdim  vector unsigned long long __res =
1292288943Sdim      (vector unsigned long long)__a & ~(vector unsigned long long)__b;
1293288943Sdim  return (vector double)__res;
1294288943Sdim}
1295288943Sdim
1296309124Sdimstatic __inline__ vector double __ATTRS_o_ai
1297288943Sdimvec_andc(vector double __a, vector bool long long __b) {
1298288943Sdim  vector unsigned long long __res =
1299288943Sdim      (vector unsigned long long)__a & ~(vector unsigned long long)__b;
1300288943Sdim  return (vector double)__res;
1301288943Sdim}
1302288943Sdim
1303309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_andc(vector double __a,
1304309124Sdim                                                      vector double __b) {
1305288943Sdim  vector unsigned long long __res =
1306288943Sdim      (vector unsigned long long)__a & ~(vector unsigned long long)__b;
1307288943Sdim  return (vector double)__res;
1308288943Sdim}
1309288943Sdim
1310309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
1311288943Sdimvec_andc(vector signed long long __a, vector signed long long __b) {
1312288943Sdim  return __a & ~__b;
1313288943Sdim}
1314288943Sdim
1315309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
1316288943Sdimvec_andc(vector bool long long __a, vector signed long long __b) {
1317288943Sdim  return (vector signed long long)__a & ~__b;
1318288943Sdim}
1319288943Sdim
1320309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
1321288943Sdimvec_andc(vector signed long long __a, vector bool long long __b) {
1322288943Sdim  return __a & ~(vector signed long long)__b;
1323288943Sdim}
1324288943Sdim
1325309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
1326288943Sdimvec_andc(vector unsigned long long __a, vector unsigned long long __b) {
1327288943Sdim  return __a & ~__b;
1328288943Sdim}
1329288943Sdim
1330309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
1331288943Sdimvec_andc(vector bool long long __a, vector unsigned long long __b) {
1332288943Sdim  return (vector unsigned long long)__a & ~__b;
1333288943Sdim}
1334288943Sdim
1335309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
1336288943Sdimvec_andc(vector unsigned long long __a, vector bool long long __b) {
1337288943Sdim  return __a & ~(vector unsigned long long)__b;
1338288943Sdim}
1339288943Sdim
1340309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1341309124Sdimvec_andc(vector bool long long __a, vector bool long long __b) {
1342288943Sdim  return __a & ~__b;
1343288943Sdim}
1344288943Sdim#endif
1345288943Sdim
1346210299Sed/* vec_vandc */
1347210299Sed
1348309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
1349309124Sdimvec_vandc(vector signed char __a, vector signed char __b) {
1350249423Sdim  return __a & ~__b;
1351207619Srdivacky}
1352207619Srdivacky
1353309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
1354309124Sdimvec_vandc(vector bool char __a, vector signed char __b) {
1355249423Sdim  return (vector signed char)__a & ~__b;
1356212904Sdim}
1357212904Sdim
1358309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
1359309124Sdimvec_vandc(vector signed char __a, vector bool char __b) {
1360249423Sdim  return __a & ~(vector signed char)__b;
1361212904Sdim}
1362212904Sdim
1363309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
1364309124Sdimvec_vandc(vector unsigned char __a, vector unsigned char __b) {
1365249423Sdim  return __a & ~__b;
1366207619Srdivacky}
1367207619Srdivacky
1368309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
1369309124Sdimvec_vandc(vector bool char __a, vector unsigned char __b) {
1370249423Sdim  return (vector unsigned char)__a & ~__b;
1371212904Sdim}
1372212904Sdim
1373309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
1374309124Sdimvec_vandc(vector unsigned char __a, vector bool char __b) {
1375249423Sdim  return __a & ~(vector unsigned char)__b;
1376212904Sdim}
1377212904Sdim
1378309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
1379309124Sdimvec_vandc(vector bool char __a, vector bool char __b) {
1380249423Sdim  return __a & ~__b;
1381212904Sdim}
1382212904Sdim
1383309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
1384309124Sdim                                                      vector short __b) {
1385249423Sdim  return __a & ~__b;
1386207619Srdivacky}
1387207619Srdivacky
1388309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vandc(vector bool short __a,
1389309124Sdim                                                      vector short __b) {
1390249423Sdim  return (vector short)__a & ~__b;
1391212904Sdim}
1392212904Sdim
1393309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
1394309124Sdim                                                      vector bool short __b) {
1395249423Sdim  return __a & ~(vector short)__b;
1396212904Sdim}
1397212904Sdim
1398309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
1399309124Sdimvec_vandc(vector unsigned short __a, vector unsigned short __b) {
1400249423Sdim  return __a & ~__b;
1401207619Srdivacky}
1402207619Srdivacky
1403309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
1404309124Sdimvec_vandc(vector bool short __a, vector unsigned short __b) {
1405249423Sdim  return (vector unsigned short)__a & ~__b;
1406212904Sdim}
1407212904Sdim
1408309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
1409309124Sdimvec_vandc(vector unsigned short __a, vector bool short __b) {
1410249423Sdim  return __a & ~(vector unsigned short)__b;
1411212904Sdim}
1412212904Sdim
1413309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
1414309124Sdimvec_vandc(vector bool short __a, vector bool short __b) {
1415249423Sdim  return __a & ~__b;
1416212904Sdim}
1417212904Sdim
1418309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
1419309124Sdim                                                    vector int __b) {
1420249423Sdim  return __a & ~__b;
1421207619Srdivacky}
1422207619Srdivacky
1423309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vandc(vector bool int __a,
1424309124Sdim                                                    vector int __b) {
1425249423Sdim  return (vector int)__a & ~__b;
1426212904Sdim}
1427212904Sdim
1428309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
1429309124Sdim                                                    vector bool int __b) {
1430249423Sdim  return __a & ~(vector int)__b;
1431212904Sdim}
1432212904Sdim
1433309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
1434309124Sdimvec_vandc(vector unsigned int __a, vector unsigned int __b) {
1435249423Sdim  return __a & ~__b;
1436207619Srdivacky}
1437207619Srdivacky
1438309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
1439309124Sdimvec_vandc(vector bool int __a, vector unsigned int __b) {
1440249423Sdim  return (vector unsigned int)__a & ~__b;
1441212904Sdim}
1442212904Sdim
1443309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
1444309124Sdimvec_vandc(vector unsigned int __a, vector bool int __b) {
1445249423Sdim  return __a & ~(vector unsigned int)__b;
1446212904Sdim}
1447212904Sdim
1448309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_vandc(vector bool int __a,
1449309124Sdim                                                         vector bool int __b) {
1450249423Sdim  return __a & ~__b;
1451212904Sdim}
1452212904Sdim
1453309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
1454309124Sdim                                                      vector float __b) {
1455288943Sdim  vector unsigned int __res =
1456288943Sdim      (vector unsigned int)__a & ~(vector unsigned int)__b;
1457249423Sdim  return (vector float)__res;
1458210299Sed}
1459207619Srdivacky
1460309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vandc(vector bool int __a,
1461309124Sdim                                                      vector float __b) {
1462288943Sdim  vector unsigned int __res =
1463288943Sdim      (vector unsigned int)__a & ~(vector unsigned int)__b;
1464249423Sdim  return (vector float)__res;
1465212904Sdim}
1466212904Sdim
1467309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
1468309124Sdim                                                      vector bool int __b) {
1469288943Sdim  vector unsigned int __res =
1470288943Sdim      (vector unsigned int)__a & ~(vector unsigned int)__b;
1471249423Sdim  return (vector float)__res;
1472212904Sdim}
1473212904Sdim
1474288943Sdim#ifdef __VSX__
1475309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
1476288943Sdimvec_vandc(vector signed long long __a, vector signed long long __b) {
1477288943Sdim  return __a & ~__b;
1478288943Sdim}
1479288943Sdim
1480309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
1481288943Sdimvec_vandc(vector bool long long __a, vector signed long long __b) {
1482288943Sdim  return (vector signed long long)__a & ~__b;
1483288943Sdim}
1484288943Sdim
1485309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
1486288943Sdimvec_vandc(vector signed long long __a, vector bool long long __b) {
1487288943Sdim  return __a & ~(vector signed long long)__b;
1488288943Sdim}
1489288943Sdim
1490309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
1491288943Sdimvec_vandc(vector unsigned long long __a, vector unsigned long long __b) {
1492288943Sdim  return __a & ~__b;
1493288943Sdim}
1494288943Sdim
1495309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
1496288943Sdimvec_vandc(vector bool long long __a, vector unsigned long long __b) {
1497288943Sdim  return (vector unsigned long long)__a & ~__b;
1498288943Sdim}
1499288943Sdim
1500309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
1501288943Sdimvec_vandc(vector unsigned long long __a, vector bool long long __b) {
1502288943Sdim  return __a & ~(vector unsigned long long)__b;
1503288943Sdim}
1504288943Sdim
1505309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1506309124Sdimvec_vandc(vector bool long long __a, vector bool long long __b) {
1507288943Sdim  return __a & ~__b;
1508288943Sdim}
1509288943Sdim#endif
1510288943Sdim
1511210299Sed/* vec_avg */
1512207619Srdivacky
1513309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
1514309124Sdimvec_avg(vector signed char __a, vector signed char __b) {
1515249423Sdim  return __builtin_altivec_vavgsb(__a, __b);
1516207619Srdivacky}
1517207619Srdivacky
1518309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
1519309124Sdimvec_avg(vector unsigned char __a, vector unsigned char __b) {
1520249423Sdim  return __builtin_altivec_vavgub(__a, __b);
1521207619Srdivacky}
1522207619Srdivacky
1523309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_avg(vector short __a,
1524309124Sdim                                                    vector short __b) {
1525249423Sdim  return __builtin_altivec_vavgsh(__a, __b);
1526207619Srdivacky}
1527207619Srdivacky
1528309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
1529309124Sdimvec_avg(vector unsigned short __a, vector unsigned short __b) {
1530249423Sdim  return __builtin_altivec_vavguh(__a, __b);
1531207619Srdivacky}
1532207619Srdivacky
1533309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_avg(vector int __a,
1534309124Sdim                                                  vector int __b) {
1535249423Sdim  return __builtin_altivec_vavgsw(__a, __b);
1536207619Srdivacky}
1537207619Srdivacky
1538309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
1539309124Sdimvec_avg(vector unsigned int __a, vector unsigned int __b) {
1540249423Sdim  return __builtin_altivec_vavguw(__a, __b);
1541207619Srdivacky}
1542207619Srdivacky
1543210299Sed/* vec_vavgsb */
1544210299Sed
1545309124Sdimstatic __inline__ vector signed char __attribute__((__always_inline__))
1546288943Sdimvec_vavgsb(vector signed char __a, vector signed char __b) {
1547249423Sdim  return __builtin_altivec_vavgsb(__a, __b);
1548207619Srdivacky}
1549207619Srdivacky
1550210299Sed/* vec_vavgub */
1551207619Srdivacky
1552309124Sdimstatic __inline__ vector unsigned char __attribute__((__always_inline__))
1553288943Sdimvec_vavgub(vector unsigned char __a, vector unsigned char __b) {
1554249423Sdim  return __builtin_altivec_vavgub(__a, __b);
1555207619Srdivacky}
1556207619Srdivacky
1557210299Sed/* vec_vavgsh */
1558210299Sed
1559309124Sdimstatic __inline__ vector short __attribute__((__always_inline__))
1560288943Sdimvec_vavgsh(vector short __a, vector short __b) {
1561249423Sdim  return __builtin_altivec_vavgsh(__a, __b);
1562207619Srdivacky}
1563207619Srdivacky
1564210299Sed/* vec_vavguh */
1565210299Sed
1566309124Sdimstatic __inline__ vector unsigned short __attribute__((__always_inline__))
1567288943Sdimvec_vavguh(vector unsigned short __a, vector unsigned short __b) {
1568249423Sdim  return __builtin_altivec_vavguh(__a, __b);
1569207619Srdivacky}
1570207619Srdivacky
1571210299Sed/* vec_vavgsw */
1572210299Sed
1573309124Sdimstatic __inline__ vector int __attribute__((__always_inline__))
1574288943Sdimvec_vavgsw(vector int __a, vector int __b) {
1575249423Sdim  return __builtin_altivec_vavgsw(__a, __b);
1576207619Srdivacky}
1577207619Srdivacky
1578210299Sed/* vec_vavguw */
1579210299Sed
1580309124Sdimstatic __inline__ vector unsigned int __attribute__((__always_inline__))
1581288943Sdimvec_vavguw(vector unsigned int __a, vector unsigned int __b) {
1582249423Sdim  return __builtin_altivec_vavguw(__a, __b);
1583207619Srdivacky}
1584207619Srdivacky
1585210299Sed/* vec_ceil */
1586210299Sed
1587309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_ceil(vector float __a) {
1588288943Sdim#ifdef __VSX__
1589288943Sdim  return __builtin_vsx_xvrspip(__a);
1590288943Sdim#else
1591249423Sdim  return __builtin_altivec_vrfip(__a);
1592288943Sdim#endif
1593207619Srdivacky}
1594207619Srdivacky
1595288943Sdim#ifdef __VSX__
1596309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_ceil(vector double __a) {
1597288943Sdim  return __builtin_vsx_xvrdpip(__a);
1598288943Sdim}
1599288943Sdim#endif
1600288943Sdim
1601210299Sed/* vec_vrfip */
1602210299Sed
1603309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
1604288943Sdimvec_vrfip(vector float __a) {
1605249423Sdim  return __builtin_altivec_vrfip(__a);
1606207619Srdivacky}
1607207619Srdivacky
1608207619Srdivacky/* vec_cmpb */
1609207619Srdivacky
1610309124Sdimstatic __inline__ vector int __attribute__((__always_inline__))
1611288943Sdimvec_cmpb(vector float __a, vector float __b) {
1612249423Sdim  return __builtin_altivec_vcmpbfp(__a, __b);
1613210299Sed}
1614207619Srdivacky
1615210299Sed/* vec_vcmpbfp */
1616210299Sed
1617309124Sdimstatic __inline__ vector int __attribute__((__always_inline__))
1618288943Sdimvec_vcmpbfp(vector float __a, vector float __b) {
1619249423Sdim  return __builtin_altivec_vcmpbfp(__a, __b);
1620210299Sed}
1621210299Sed
1622207619Srdivacky/* vec_cmpeq */
1623207619Srdivacky
1624309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
1625309124Sdimvec_cmpeq(vector signed char __a, vector signed char __b) {
1626288943Sdim  return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1627288943Sdim                                                      (vector char)__b);
1628207619Srdivacky}
1629207619Srdivacky
1630309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
1631309124Sdimvec_cmpeq(vector unsigned char __a, vector unsigned char __b) {
1632288943Sdim  return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1633288943Sdim                                                      (vector char)__b);
1634207619Srdivacky}
1635207619Srdivacky
1636314564Sdimstatic __inline__ vector bool char __ATTRS_o_ai
1637314564Sdimvec_cmpeq(vector bool char __a, vector bool char __b) {
1638314564Sdim  return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1639314564Sdim                                                      (vector char)__b);
1640314564Sdim}
1641314564Sdim
1642309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai vec_cmpeq(vector short __a,
1643309124Sdim                                                           vector short __b) {
1644249423Sdim  return (vector bool short)__builtin_altivec_vcmpequh(__a, __b);
1645207619Srdivacky}
1646207619Srdivacky
1647309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
1648309124Sdimvec_cmpeq(vector unsigned short __a, vector unsigned short __b) {
1649288943Sdim  return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,
1650288943Sdim                                                       (vector short)__b);
1651207619Srdivacky}
1652207619Srdivacky
1653314564Sdimstatic __inline__ vector bool short __ATTRS_o_ai
1654314564Sdimvec_cmpeq(vector bool short __a, vector bool short __b) {
1655314564Sdim  return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,
1656314564Sdim                                                       (vector short)__b);
1657314564Sdim}
1658314564Sdim
1659309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector int __a,
1660309124Sdim                                                         vector int __b) {
1661249423Sdim  return (vector bool int)__builtin_altivec_vcmpequw(__a, __b);
1662207619Srdivacky}
1663207619Srdivacky
1664309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
1665309124Sdimvec_cmpeq(vector unsigned int __a, vector unsigned int __b) {
1666288943Sdim  return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,
1667288943Sdim                                                     (vector int)__b);
1668207619Srdivacky}
1669207619Srdivacky
1670314564Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector bool int __a,
1671314564Sdim                                                         vector bool int __b) {
1672314564Sdim  return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,
1673314564Sdim                                                     (vector int)__b);
1674314564Sdim}
1675314564Sdim
1676288943Sdim#ifdef __POWER8_VECTOR__
1677309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1678288943Sdimvec_cmpeq(vector signed long long __a, vector signed long long __b) {
1679288943Sdim  return (vector bool long long)__builtin_altivec_vcmpequd(__a, __b);
1680288943Sdim}
1681288943Sdim
1682309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1683288943Sdimvec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {
1684288943Sdim  return (vector bool long long)__builtin_altivec_vcmpequd(
1685288943Sdim      (vector long long)__a, (vector long long)__b);
1686288943Sdim}
1687314564Sdim
1688314564Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1689314564Sdimvec_cmpeq(vector bool long long __a, vector bool long long __b) {
1690314564Sdim  return (vector bool long long)__builtin_altivec_vcmpequd(
1691314564Sdim      (vector long long)__a, (vector long long)__b);
1692314564Sdim}
1693314564Sdim
1694288943Sdim#endif
1695288943Sdim
1696309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector float __a,
1697309124Sdim                                                         vector float __b) {
1698288943Sdim#ifdef __VSX__
1699288943Sdim  return (vector bool int)__builtin_vsx_xvcmpeqsp(__a, __b);
1700288943Sdim#else
1701249423Sdim  return (vector bool int)__builtin_altivec_vcmpeqfp(__a, __b);
1702288943Sdim#endif
1703207619Srdivacky}
1704207619Srdivacky
1705288943Sdim#ifdef __VSX__
1706309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1707288943Sdimvec_cmpeq(vector double __a, vector double __b) {
1708288943Sdim  return (vector bool long long)__builtin_vsx_xvcmpeqdp(__a, __b);
1709288943Sdim}
1710288943Sdim#endif
1711288943Sdim
1712314564Sdim#ifdef __POWER9_VECTOR__
1713314564Sdim/* vec_cmpne */
1714314564Sdim
1715314564Sdimstatic __inline__ vector bool char __ATTRS_o_ai
1716314564Sdimvec_cmpne(vector bool char __a, vector bool char __b) {
1717314564Sdim  return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
1718314564Sdim                                                     (vector char)__b);
1719314564Sdim}
1720314564Sdim
1721314564Sdimstatic __inline__ vector bool char __ATTRS_o_ai
1722314564Sdimvec_cmpne(vector signed char __a, vector signed char __b) {
1723314564Sdim  return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
1724314564Sdim                                                     (vector char)__b);
1725314564Sdim}
1726314564Sdim
1727314564Sdimstatic __inline__ vector bool char __ATTRS_o_ai
1728314564Sdimvec_cmpne(vector unsigned char __a, vector unsigned char __b) {
1729314564Sdim  return (vector bool char)__builtin_altivec_vcmpneb((vector char)__a,
1730314564Sdim                                                     (vector char)__b);
1731314564Sdim}
1732314564Sdim
1733314564Sdimstatic __inline__ vector bool short __ATTRS_o_ai
1734314564Sdimvec_cmpne(vector bool short __a, vector bool short __b) {
1735314564Sdim  return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
1736314564Sdim                                                      (vector short)__b);
1737314564Sdim}
1738314564Sdim
1739314564Sdimstatic __inline__ vector bool short __ATTRS_o_ai
1740314564Sdimvec_cmpne(vector signed short __a, vector signed short __b) {
1741314564Sdim  return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
1742314564Sdim                                                      (vector short)__b);
1743314564Sdim}
1744314564Sdim
1745314564Sdimstatic __inline__ vector bool short __ATTRS_o_ai
1746314564Sdimvec_cmpne(vector unsigned short __a, vector unsigned short __b) {
1747314564Sdim  return (vector bool short)__builtin_altivec_vcmpneh((vector short)__a,
1748314564Sdim                                                      (vector short)__b);
1749314564Sdim}
1750314564Sdim
1751314564Sdimstatic __inline__ vector bool int __ATTRS_o_ai
1752314564Sdimvec_cmpne(vector bool int __a, vector bool int __b) {
1753314564Sdim  return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1754314564Sdim                                                    (vector int)__b);
1755314564Sdim}
1756314564Sdim
1757314564Sdimstatic __inline__ vector bool int __ATTRS_o_ai
1758314564Sdimvec_cmpne(vector signed int __a, vector signed int __b) {
1759314564Sdim  return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1760314564Sdim                                                    (vector int)__b);
1761314564Sdim}
1762314564Sdim
1763314564Sdimstatic __inline__ vector bool int __ATTRS_o_ai
1764314564Sdimvec_cmpne(vector unsigned int __a, vector unsigned int __b) {
1765314564Sdim  return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1766314564Sdim                                                    (vector int)__b);
1767314564Sdim}
1768314564Sdim
1769314564Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1770314564Sdimvec_cmpne(vector bool long long __a, vector bool long long __b) {
1771314564Sdim  return (vector bool long long)
1772314564Sdim    ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
1773314564Sdim}
1774314564Sdim
1775314564Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1776314564Sdimvec_cmpne(vector signed long long __a, vector signed long long __b) {
1777314564Sdim  return (vector bool long long)
1778314564Sdim    ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
1779314564Sdim}
1780314564Sdim
1781314564Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1782314564Sdimvec_cmpne(vector unsigned long long __a, vector unsigned long long __b) {
1783314564Sdim  return (vector bool long long)
1784314564Sdim    ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
1785314564Sdim}
1786314564Sdim
1787314564Sdimstatic __inline__ vector bool int __ATTRS_o_ai
1788314564Sdimvec_cmpne(vector float __a, vector float __b) {
1789314564Sdim  return (vector bool int)__builtin_altivec_vcmpnew((vector int)__a,
1790314564Sdim                                                    (vector int)__b);
1791314564Sdim}
1792314564Sdim
1793314564Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1794314564Sdimvec_cmpne(vector double __a, vector double __b) {
1795314564Sdim  return (vector bool long long)
1796314564Sdim    ~(__builtin_altivec_vcmpequd((vector long long)__a, (vector long long)__b));
1797314564Sdim}
1798314564Sdim
1799314564Sdim/* vec_cmpnez */
1800314564Sdim
1801314564Sdimstatic __inline__ vector bool char __ATTRS_o_ai
1802314564Sdimvec_cmpnez(vector signed char __a, vector signed char __b) {
1803314564Sdim  return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,
1804314564Sdim                                                      (vector char)__b);
1805314564Sdim}
1806314564Sdim
1807314564Sdimstatic __inline__ vector bool char __ATTRS_o_ai
1808314564Sdimvec_cmpnez(vector unsigned char __a, vector unsigned char __b) {
1809314564Sdim  return (vector bool char)__builtin_altivec_vcmpnezb((vector char)__a,
1810314564Sdim                                                      (vector char)__b);
1811314564Sdim}
1812314564Sdim
1813314564Sdimstatic __inline__ vector bool short __ATTRS_o_ai
1814314564Sdimvec_cmpnez(vector signed short __a, vector signed short __b) {
1815314564Sdim  return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,
1816314564Sdim                                                       (vector short)__b);
1817314564Sdim}
1818314564Sdim
1819314564Sdimstatic __inline__ vector bool short __ATTRS_o_ai
1820314564Sdimvec_cmpnez(vector unsigned short __a, vector unsigned short __b) {
1821314564Sdim  return (vector bool short)__builtin_altivec_vcmpnezh((vector short)__a,
1822314564Sdim                                                       (vector short)__b);
1823314564Sdim}
1824314564Sdim
1825314564Sdimstatic __inline__ vector bool int __ATTRS_o_ai
1826314564Sdimvec_cmpnez(vector signed int __a, vector signed int __b) {
1827314564Sdim  return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,
1828314564Sdim                                                     (vector int)__b);
1829314564Sdim}
1830314564Sdim
1831314564Sdimstatic __inline__ vector bool int __ATTRS_o_ai
1832314564Sdimvec_cmpnez(vector unsigned int __a, vector unsigned int __b) {
1833314564Sdim  return (vector bool int)__builtin_altivec_vcmpnezw((vector int)__a,
1834314564Sdim                                                     (vector int)__b);
1835314564Sdim}
1836314564Sdim
1837314564Sdimstatic __inline__ signed int __ATTRS_o_ai
1838314564Sdimvec_cntlz_lsbb(vector signed char __a) {
1839314564Sdim#ifdef __LITTLE_ENDIAN__
1840314564Sdim  return __builtin_altivec_vctzlsbb(__a);
1841314564Sdim#else
1842314564Sdim  return __builtin_altivec_vclzlsbb(__a);
1843314564Sdim#endif
1844314564Sdim}
1845314564Sdim
1846314564Sdimstatic __inline__ signed int __ATTRS_o_ai
1847314564Sdimvec_cntlz_lsbb(vector unsigned char __a) {
1848314564Sdim#ifdef __LITTLE_ENDIAN__
1849314564Sdim  return __builtin_altivec_vctzlsbb(__a);
1850314564Sdim#else
1851314564Sdim  return __builtin_altivec_vclzlsbb(__a);
1852314564Sdim#endif
1853314564Sdim}
1854314564Sdim
1855314564Sdimstatic __inline__ signed int __ATTRS_o_ai
1856314564Sdimvec_cnttz_lsbb(vector signed char __a) {
1857314564Sdim#ifdef __LITTLE_ENDIAN__
1858314564Sdim  return __builtin_altivec_vclzlsbb(__a);
1859314564Sdim#else
1860314564Sdim  return __builtin_altivec_vctzlsbb(__a);
1861314564Sdim#endif
1862314564Sdim}
1863314564Sdim
1864314564Sdimstatic __inline__ signed int __ATTRS_o_ai
1865314564Sdimvec_cnttz_lsbb(vector unsigned char __a) {
1866314564Sdim#ifdef __LITTLE_ENDIAN__
1867314564Sdim  return __builtin_altivec_vclzlsbb(__a);
1868314564Sdim#else
1869314564Sdim  return __builtin_altivec_vctzlsbb(__a);
1870314564Sdim#endif
1871314564Sdim}
1872314564Sdim
1873314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
1874314564Sdimvec_parity_lsbb(vector unsigned int __a) {
1875314564Sdim  return __builtin_altivec_vprtybw(__a);
1876314564Sdim}
1877314564Sdim
1878314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
1879314564Sdimvec_parity_lsbb(vector signed int __a) {
1880314564Sdim  return __builtin_altivec_vprtybw(__a);
1881314564Sdim}
1882314564Sdim
1883314564Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
1884314564Sdimvec_parity_lsbb(vector unsigned __int128 __a) {
1885314564Sdim  return __builtin_altivec_vprtybq(__a);
1886314564Sdim}
1887314564Sdim
1888314564Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
1889314564Sdimvec_parity_lsbb(vector signed __int128 __a) {
1890314564Sdim  return __builtin_altivec_vprtybq(__a);
1891314564Sdim}
1892314564Sdim
1893314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
1894314564Sdimvec_parity_lsbb(vector unsigned long long __a) {
1895314564Sdim  return __builtin_altivec_vprtybd(__a);
1896314564Sdim}
1897314564Sdim
1898314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
1899314564Sdimvec_parity_lsbb(vector signed long long __a) {
1900314564Sdim  return __builtin_altivec_vprtybd(__a);
1901314564Sdim}
1902314564Sdim
1903314564Sdim#endif
1904314564Sdim
1905207619Srdivacky/* vec_cmpgt */
1906207619Srdivacky
1907309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
1908309124Sdimvec_cmpgt(vector signed char __a, vector signed char __b) {
1909249423Sdim  return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
1910207619Srdivacky}
1911207619Srdivacky
1912309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
1913309124Sdimvec_cmpgt(vector unsigned char __a, vector unsigned char __b) {
1914249423Sdim  return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
1915207619Srdivacky}
1916207619Srdivacky
1917309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai vec_cmpgt(vector short __a,
1918309124Sdim                                                           vector short __b) {
1919249423Sdim  return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
1920207619Srdivacky}
1921207619Srdivacky
1922309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
1923309124Sdimvec_cmpgt(vector unsigned short __a, vector unsigned short __b) {
1924249423Sdim  return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
1925207619Srdivacky}
1926207619Srdivacky
1927309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector int __a,
1928309124Sdim                                                         vector int __b) {
1929249423Sdim  return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
1930207619Srdivacky}
1931207619Srdivacky
1932309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
1933309124Sdimvec_cmpgt(vector unsigned int __a, vector unsigned int __b) {
1934249423Sdim  return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
1935207619Srdivacky}
1936207619Srdivacky
1937288943Sdim#ifdef __POWER8_VECTOR__
1938309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1939288943Sdimvec_cmpgt(vector signed long long __a, vector signed long long __b) {
1940288943Sdim  return (vector bool long long)__builtin_altivec_vcmpgtsd(__a, __b);
1941288943Sdim}
1942288943Sdim
1943309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1944288943Sdimvec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {
1945288943Sdim  return (vector bool long long)__builtin_altivec_vcmpgtud(__a, __b);
1946288943Sdim}
1947288943Sdim#endif
1948288943Sdim
1949309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector float __a,
1950309124Sdim                                                         vector float __b) {
1951288943Sdim#ifdef __VSX__
1952288943Sdim  return (vector bool int)__builtin_vsx_xvcmpgtsp(__a, __b);
1953288943Sdim#else
1954249423Sdim  return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
1955288943Sdim#endif
1956207619Srdivacky}
1957207619Srdivacky
1958288943Sdim#ifdef __VSX__
1959309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
1960288943Sdimvec_cmpgt(vector double __a, vector double __b) {
1961288943Sdim  return (vector bool long long)__builtin_vsx_xvcmpgtdp(__a, __b);
1962288943Sdim}
1963288943Sdim#endif
1964296417Sdim
1965296417Sdim/* vec_cmpge */
1966296417Sdim
1967309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
1968309124Sdimvec_cmpge(vector signed char __a, vector signed char __b) {
1969296417Sdim  return ~(vec_cmpgt(__b, __a));
1970296417Sdim}
1971296417Sdim
1972309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
1973309124Sdimvec_cmpge(vector unsigned char __a, vector unsigned char __b) {
1974296417Sdim  return ~(vec_cmpgt(__b, __a));
1975296417Sdim}
1976296417Sdim
1977309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
1978309124Sdimvec_cmpge(vector signed short __a, vector signed short __b) {
1979296417Sdim  return ~(vec_cmpgt(__b, __a));
1980296417Sdim}
1981296417Sdim
1982309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
1983309124Sdimvec_cmpge(vector unsigned short __a, vector unsigned short __b) {
1984296417Sdim  return ~(vec_cmpgt(__b, __a));
1985296417Sdim}
1986296417Sdim
1987309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
1988309124Sdimvec_cmpge(vector signed int __a, vector signed int __b) {
1989296417Sdim  return ~(vec_cmpgt(__b, __a));
1990296417Sdim}
1991296417Sdim
1992309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
1993309124Sdimvec_cmpge(vector unsigned int __a, vector unsigned int __b) {
1994296417Sdim  return ~(vec_cmpgt(__b, __a));
1995296417Sdim}
1996296417Sdim
1997309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_cmpge(vector float __a,
1998309124Sdim                                                         vector float __b) {
1999296417Sdim#ifdef __VSX__
2000296417Sdim  return (vector bool int)__builtin_vsx_xvcmpgesp(__a, __b);
2001296417Sdim#else
2002296417Sdim  return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
2003296417Sdim#endif
2004296417Sdim}
2005296417Sdim
2006296417Sdim#ifdef __VSX__
2007309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
2008296417Sdimvec_cmpge(vector double __a, vector double __b) {
2009296417Sdim  return (vector bool long long)__builtin_vsx_xvcmpgedp(__a, __b);
2010296417Sdim}
2011296417Sdim#endif
2012296417Sdim
2013296417Sdim#ifdef __POWER8_VECTOR__
2014309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
2015296417Sdimvec_cmpge(vector signed long long __a, vector signed long long __b) {
2016296417Sdim  return ~(vec_cmpgt(__b, __a));
2017296417Sdim}
2018296417Sdim
2019309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
2020296417Sdimvec_cmpge(vector unsigned long long __a, vector unsigned long long __b) {
2021296417Sdim  return ~(vec_cmpgt(__b, __a));
2022296417Sdim}
2023296417Sdim#endif
2024296417Sdim
2025296417Sdim/* vec_vcmpgefp */
2026296417Sdim
2027309124Sdimstatic __inline__ vector bool int __attribute__((__always_inline__))
2028296417Sdimvec_vcmpgefp(vector float __a, vector float __b) {
2029296417Sdim  return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
2030296417Sdim}
2031296417Sdim
2032210299Sed/* vec_vcmpgtsb */
2033207619Srdivacky
2034309124Sdimstatic __inline__ vector bool char __attribute__((__always_inline__))
2035288943Sdimvec_vcmpgtsb(vector signed char __a, vector signed char __b) {
2036249423Sdim  return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
2037210299Sed}
2038207619Srdivacky
2039210299Sed/* vec_vcmpgtub */
2040210299Sed
2041309124Sdimstatic __inline__ vector bool char __attribute__((__always_inline__))
2042288943Sdimvec_vcmpgtub(vector unsigned char __a, vector unsigned char __b) {
2043249423Sdim  return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
2044210299Sed}
2045210299Sed
2046210299Sed/* vec_vcmpgtsh */
2047210299Sed
2048309124Sdimstatic __inline__ vector bool short __attribute__((__always_inline__))
2049288943Sdimvec_vcmpgtsh(vector short __a, vector short __b) {
2050249423Sdim  return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
2051210299Sed}
2052210299Sed
2053210299Sed/* vec_vcmpgtuh */
2054210299Sed
2055309124Sdimstatic __inline__ vector bool short __attribute__((__always_inline__))
2056288943Sdimvec_vcmpgtuh(vector unsigned short __a, vector unsigned short __b) {
2057249423Sdim  return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
2058210299Sed}
2059210299Sed
2060210299Sed/* vec_vcmpgtsw */
2061210299Sed
2062309124Sdimstatic __inline__ vector bool int __attribute__((__always_inline__))
2063288943Sdimvec_vcmpgtsw(vector int __a, vector int __b) {
2064249423Sdim  return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
2065210299Sed}
2066210299Sed
2067210299Sed/* vec_vcmpgtuw */
2068210299Sed
2069309124Sdimstatic __inline__ vector bool int __attribute__((__always_inline__))
2070288943Sdimvec_vcmpgtuw(vector unsigned int __a, vector unsigned int __b) {
2071249423Sdim  return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
2072210299Sed}
2073210299Sed
2074210299Sed/* vec_vcmpgtfp */
2075210299Sed
2076309124Sdimstatic __inline__ vector bool int __attribute__((__always_inline__))
2077288943Sdimvec_vcmpgtfp(vector float __a, vector float __b) {
2078249423Sdim  return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
2079210299Sed}
2080210299Sed
2081210299Sed/* vec_cmple */
2082210299Sed
2083309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
2084309124Sdimvec_cmple(vector signed char __a, vector signed char __b) {
2085296417Sdim  return vec_cmpge(__b, __a);
2086296417Sdim}
2087296417Sdim
2088309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
2089309124Sdimvec_cmple(vector unsigned char __a, vector unsigned char __b) {
2090296417Sdim  return vec_cmpge(__b, __a);
2091296417Sdim}
2092296417Sdim
2093309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
2094309124Sdimvec_cmple(vector signed short __a, vector signed short __b) {
2095296417Sdim  return vec_cmpge(__b, __a);
2096296417Sdim}
2097296417Sdim
2098309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
2099309124Sdimvec_cmple(vector unsigned short __a, vector unsigned short __b) {
2100296417Sdim  return vec_cmpge(__b, __a);
2101296417Sdim}
2102296417Sdim
2103309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
2104309124Sdimvec_cmple(vector signed int __a, vector signed int __b) {
2105296417Sdim  return vec_cmpge(__b, __a);
2106296417Sdim}
2107296417Sdim
2108309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
2109309124Sdimvec_cmple(vector unsigned int __a, vector unsigned int __b) {
2110296417Sdim  return vec_cmpge(__b, __a);
2111296417Sdim}
2112296417Sdim
2113309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_cmple(vector float __a,
2114309124Sdim                                                         vector float __b) {
2115288943Sdim  return vec_cmpge(__b, __a);
2116207619Srdivacky}
2117207619Srdivacky
2118288943Sdim#ifdef __VSX__
2119309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
2120288943Sdimvec_cmple(vector double __a, vector double __b) {
2121288943Sdim  return vec_cmpge(__b, __a);
2122288943Sdim}
2123288943Sdim#endif
2124288943Sdim
2125288943Sdim#ifdef __POWER8_VECTOR__
2126309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
2127288943Sdimvec_cmple(vector signed long long __a, vector signed long long __b) {
2128288943Sdim  return vec_cmpge(__b, __a);
2129288943Sdim}
2130288943Sdim
2131309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
2132288943Sdimvec_cmple(vector unsigned long long __a, vector unsigned long long __b) {
2133288943Sdim  return vec_cmpge(__b, __a);
2134288943Sdim}
2135288943Sdim#endif
2136288943Sdim
2137207619Srdivacky/* vec_cmplt */
2138207619Srdivacky
2139309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
2140309124Sdimvec_cmplt(vector signed char __a, vector signed char __b) {
2141288943Sdim  return vec_cmpgt(__b, __a);
2142207619Srdivacky}
2143207619Srdivacky
2144309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
2145309124Sdimvec_cmplt(vector unsigned char __a, vector unsigned char __b) {
2146288943Sdim  return vec_cmpgt(__b, __a);
2147207619Srdivacky}
2148207619Srdivacky
2149309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai vec_cmplt(vector short __a,
2150309124Sdim                                                           vector short __b) {
2151288943Sdim  return vec_cmpgt(__b, __a);
2152207619Srdivacky}
2153207619Srdivacky
2154309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
2155309124Sdimvec_cmplt(vector unsigned short __a, vector unsigned short __b) {
2156288943Sdim  return vec_cmpgt(__b, __a);
2157207619Srdivacky}
2158207619Srdivacky
2159309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector int __a,
2160309124Sdim                                                         vector int __b) {
2161288943Sdim  return vec_cmpgt(__b, __a);
2162207619Srdivacky}
2163207619Srdivacky
2164309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
2165309124Sdimvec_cmplt(vector unsigned int __a, vector unsigned int __b) {
2166288943Sdim  return vec_cmpgt(__b, __a);
2167207619Srdivacky}
2168207619Srdivacky
2169309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector float __a,
2170309124Sdim                                                         vector float __b) {
2171288943Sdim  return vec_cmpgt(__b, __a);
2172207619Srdivacky}
2173207619Srdivacky
2174288943Sdim#ifdef __VSX__
2175309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
2176288943Sdimvec_cmplt(vector double __a, vector double __b) {
2177288943Sdim  return vec_cmpgt(__b, __a);
2178288943Sdim}
2179288943Sdim#endif
2180288943Sdim
2181288943Sdim#ifdef __POWER8_VECTOR__
2182309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
2183288943Sdimvec_cmplt(vector signed long long __a, vector signed long long __b) {
2184288943Sdim  return vec_cmpgt(__b, __a);
2185288943Sdim}
2186288943Sdim
2187309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
2188288943Sdimvec_cmplt(vector unsigned long long __a, vector unsigned long long __b) {
2189288943Sdim  return vec_cmpgt(__b, __a);
2190288943Sdim}
2191288943Sdim
2192314564Sdim/* vec_popcnt */
2193314564Sdim
2194314564Sdimstatic __inline__ vector signed char __ATTRS_o_ai
2195314564Sdimvec_popcnt(vector signed char __a) {
2196314564Sdim  return __builtin_altivec_vpopcntb(__a);
2197314564Sdim}
2198314564Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
2199314564Sdimvec_popcnt(vector unsigned char __a) {
2200314564Sdim  return __builtin_altivec_vpopcntb(__a);
2201314564Sdim}
2202314564Sdimstatic __inline__ vector signed short __ATTRS_o_ai
2203314564Sdimvec_popcnt(vector signed short __a) {
2204314564Sdim  return __builtin_altivec_vpopcnth(__a);
2205314564Sdim}
2206314564Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
2207314564Sdimvec_popcnt(vector unsigned short __a) {
2208314564Sdim  return __builtin_altivec_vpopcnth(__a);
2209314564Sdim}
2210314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
2211314564Sdimvec_popcnt(vector signed int __a) {
2212314564Sdim  return __builtin_altivec_vpopcntw(__a);
2213314564Sdim}
2214314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
2215314564Sdimvec_popcnt(vector unsigned int __a) {
2216314564Sdim  return __builtin_altivec_vpopcntw(__a);
2217314564Sdim}
2218314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
2219314564Sdimvec_popcnt(vector signed long long __a) {
2220314564Sdim  return __builtin_altivec_vpopcntd(__a);
2221314564Sdim}
2222314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
2223314564Sdimvec_popcnt(vector unsigned long long __a) {
2224314564Sdim  return __builtin_altivec_vpopcntd(__a);
2225314564Sdim}
2226314564Sdim
2227288943Sdim/* vec_cntlz */
2228288943Sdim
2229309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
2230309124Sdimvec_cntlz(vector signed char __a) {
2231288943Sdim  return __builtin_altivec_vclzb(__a);
2232288943Sdim}
2233309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
2234309124Sdimvec_cntlz(vector unsigned char __a) {
2235288943Sdim  return __builtin_altivec_vclzb(__a);
2236288943Sdim}
2237309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
2238309124Sdimvec_cntlz(vector signed short __a) {
2239288943Sdim  return __builtin_altivec_vclzh(__a);
2240288943Sdim}
2241309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
2242309124Sdimvec_cntlz(vector unsigned short __a) {
2243288943Sdim  return __builtin_altivec_vclzh(__a);
2244288943Sdim}
2245309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
2246309124Sdimvec_cntlz(vector signed int __a) {
2247288943Sdim  return __builtin_altivec_vclzw(__a);
2248288943Sdim}
2249309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
2250309124Sdimvec_cntlz(vector unsigned int __a) {
2251288943Sdim  return __builtin_altivec_vclzw(__a);
2252288943Sdim}
2253309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
2254288943Sdimvec_cntlz(vector signed long long __a) {
2255288943Sdim  return __builtin_altivec_vclzd(__a);
2256288943Sdim}
2257309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
2258288943Sdimvec_cntlz(vector unsigned long long __a) {
2259288943Sdim  return __builtin_altivec_vclzd(__a);
2260288943Sdim}
2261288943Sdim#endif
2262288943Sdim
2263314564Sdim#ifdef __POWER9_VECTOR__
2264314564Sdim
2265314564Sdim/* vec_cnttz */
2266314564Sdim
2267314564Sdimstatic __inline__ vector signed char __ATTRS_o_ai
2268314564Sdimvec_cnttz(vector signed char __a) {
2269314564Sdim  return __builtin_altivec_vctzb(__a);
2270314564Sdim}
2271314564Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
2272314564Sdimvec_cnttz(vector unsigned char __a) {
2273314564Sdim  return __builtin_altivec_vctzb(__a);
2274314564Sdim}
2275314564Sdimstatic __inline__ vector signed short __ATTRS_o_ai
2276314564Sdimvec_cnttz(vector signed short __a) {
2277314564Sdim  return __builtin_altivec_vctzh(__a);
2278314564Sdim}
2279314564Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
2280314564Sdimvec_cnttz(vector unsigned short __a) {
2281314564Sdim  return __builtin_altivec_vctzh(__a);
2282314564Sdim}
2283314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
2284314564Sdimvec_cnttz(vector signed int __a) {
2285314564Sdim  return __builtin_altivec_vctzw(__a);
2286314564Sdim}
2287314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
2288314564Sdimvec_cnttz(vector unsigned int __a) {
2289314564Sdim  return __builtin_altivec_vctzw(__a);
2290314564Sdim}
2291314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
2292314564Sdimvec_cnttz(vector signed long long __a) {
2293314564Sdim  return __builtin_altivec_vctzd(__a);
2294314564Sdim}
2295314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
2296314564Sdimvec_cnttz(vector unsigned long long __a) {
2297314564Sdim  return __builtin_altivec_vctzd(__a);
2298314564Sdim}
2299314564Sdim
2300314564Sdim/* vec_first_match_index */
2301314564Sdim
2302314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2303314564Sdimvec_first_match_index(vector signed char __a, vector signed char __b) {
2304314564Sdim  vector unsigned long long __res =
2305314564Sdim#ifdef __LITTLE_ENDIAN__
2306314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2307314564Sdim#else
2308314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2309314564Sdim#endif
2310314564Sdim  if (__res[0] == 64) {
2311314564Sdim    return (__res[1] + 64) >> 3;
2312314564Sdim  }
2313314564Sdim  return __res[0] >> 3;
2314314564Sdim}
2315314564Sdim
2316314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2317314564Sdimvec_first_match_index(vector unsigned char __a, vector unsigned char __b) {
2318314564Sdim  vector unsigned long long __res =
2319314564Sdim#ifdef __LITTLE_ENDIAN__
2320314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2321314564Sdim#else
2322314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2323314564Sdim#endif
2324314564Sdim  if (__res[0] == 64) {
2325314564Sdim    return (__res[1] + 64) >> 3;
2326314564Sdim  }
2327314564Sdim  return __res[0] >> 3;
2328314564Sdim}
2329314564Sdim
2330314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2331314564Sdimvec_first_match_index(vector signed short __a, vector signed short __b) {
2332314564Sdim  vector unsigned long long __res =
2333314564Sdim#ifdef __LITTLE_ENDIAN__
2334314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2335314564Sdim#else
2336314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2337314564Sdim#endif
2338314564Sdim  if (__res[0] == 64) {
2339314564Sdim    return (__res[1] + 64) >> 4;
2340314564Sdim  }
2341314564Sdim  return __res[0] >> 4;
2342314564Sdim}
2343314564Sdim
2344314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2345314564Sdimvec_first_match_index(vector unsigned short __a, vector unsigned short __b) {
2346314564Sdim  vector unsigned long long __res =
2347314564Sdim#ifdef __LITTLE_ENDIAN__
2348314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2349314564Sdim#else
2350314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2351314564Sdim#endif
2352314564Sdim  if (__res[0] == 64) {
2353314564Sdim    return (__res[1] + 64) >> 4;
2354314564Sdim  }
2355314564Sdim  return __res[0] >> 4;
2356314564Sdim}
2357314564Sdim
2358314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2359314564Sdimvec_first_match_index(vector signed int __a, vector signed int __b) {
2360314564Sdim  vector unsigned long long __res =
2361314564Sdim#ifdef __LITTLE_ENDIAN__
2362314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2363314564Sdim#else
2364314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2365314564Sdim#endif
2366314564Sdim  if (__res[0] == 64) {
2367314564Sdim    return (__res[1] + 64) >> 5;
2368314564Sdim  }
2369314564Sdim  return __res[0] >> 5;
2370314564Sdim}
2371314564Sdim
2372314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2373314564Sdimvec_first_match_index(vector unsigned int __a, vector unsigned int __b) {
2374314564Sdim  vector unsigned long long __res =
2375314564Sdim#ifdef __LITTLE_ENDIAN__
2376314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpeq(__a, __b));
2377314564Sdim#else
2378314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpeq(__a, __b));
2379314564Sdim#endif
2380314564Sdim  if (__res[0] == 64) {
2381314564Sdim    return (__res[1] + 64) >> 5;
2382314564Sdim  }
2383314564Sdim  return __res[0] >> 5;
2384314564Sdim}
2385314564Sdim
2386314564Sdim/* vec_first_match_or_eos_index */
2387314564Sdim
2388314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2389314564Sdimvec_first_match_or_eos_index(vector signed char __a, vector signed char __b) {
2390314564Sdim  /* Compare the result of the comparison of two vectors with either and OR the
2391314564Sdim     result. Either the elements are equal or one will equal the comparison
2392314564Sdim     result if either is zero.
2393314564Sdim  */
2394314564Sdim  vector bool char __tmp1 = vec_cmpeq(__a, __b);
2395314564Sdim  vector bool char __tmp2 = __tmp1 |
2396314564Sdim                            vec_cmpeq((vector signed char)__tmp1, __a) |
2397314564Sdim                            vec_cmpeq((vector signed char)__tmp1, __b);
2398314564Sdim
2399314564Sdim  vector unsigned long long __res =
2400314564Sdim#ifdef __LITTLE_ENDIAN__
2401314564Sdim      vec_cnttz((vector unsigned long long)__tmp2);
2402314564Sdim#else
2403314564Sdim      vec_cntlz((vector unsigned long long)__tmp2);
2404314564Sdim#endif
2405314564Sdim  if (__res[0] == 64) {
2406314564Sdim    return (__res[1] + 64) >> 3;
2407314564Sdim  }
2408314564Sdim  return __res[0] >> 3;
2409314564Sdim}
2410314564Sdim
2411314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2412314564Sdimvec_first_match_or_eos_index(vector unsigned char __a,
2413314564Sdim                             vector unsigned char __b) {
2414314564Sdim  vector bool char __tmp1 = vec_cmpeq(__a, __b);
2415314564Sdim  vector bool char __tmp2 = __tmp1 |
2416314564Sdim                            vec_cmpeq((vector unsigned char)__tmp1, __a) |
2417314564Sdim                            vec_cmpeq((vector unsigned char)__tmp1, __b);
2418314564Sdim
2419314564Sdim  vector unsigned long long __res =
2420314564Sdim#ifdef __LITTLE_ENDIAN__
2421314564Sdim      vec_cnttz((vector unsigned long long)__tmp2);
2422314564Sdim#else
2423314564Sdim      vec_cntlz((vector unsigned long long)__tmp2);
2424314564Sdim#endif
2425314564Sdim  if (__res[0] == 64) {
2426314564Sdim    return (__res[1] + 64) >> 3;
2427314564Sdim  }
2428314564Sdim  return __res[0] >> 3;
2429314564Sdim}
2430314564Sdim
2431314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2432314564Sdimvec_first_match_or_eos_index(vector signed short __a, vector signed short __b) {
2433314564Sdim  vector bool short __tmp1 = vec_cmpeq(__a, __b);
2434314564Sdim  vector bool short __tmp2 = __tmp1 |
2435314564Sdim                             vec_cmpeq((vector signed short)__tmp1, __a) |
2436314564Sdim                             vec_cmpeq((vector signed short)__tmp1, __b);
2437314564Sdim
2438314564Sdim  vector unsigned long long __res =
2439314564Sdim#ifdef __LITTLE_ENDIAN__
2440314564Sdim      vec_cnttz((vector unsigned long long)__tmp2);
2441314564Sdim#else
2442314564Sdim      vec_cntlz((vector unsigned long long)__tmp2);
2443314564Sdim#endif
2444314564Sdim  if (__res[0] == 64) {
2445314564Sdim    return (__res[1] + 64) >> 4;
2446314564Sdim  }
2447314564Sdim  return __res[0] >> 4;
2448314564Sdim}
2449314564Sdim
2450314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2451314564Sdimvec_first_match_or_eos_index(vector unsigned short __a,
2452314564Sdim                             vector unsigned short __b) {
2453314564Sdim  vector bool short __tmp1 = vec_cmpeq(__a, __b);
2454314564Sdim  vector bool short __tmp2 = __tmp1 |
2455314564Sdim                             vec_cmpeq((vector unsigned short)__tmp1, __a) |
2456314564Sdim                             vec_cmpeq((vector unsigned short)__tmp1, __b);
2457314564Sdim
2458314564Sdim  vector unsigned long long __res =
2459314564Sdim#ifdef __LITTLE_ENDIAN__
2460314564Sdim      vec_cnttz((vector unsigned long long)__tmp2);
2461314564Sdim#else
2462314564Sdim      vec_cntlz((vector unsigned long long)__tmp2);
2463314564Sdim#endif
2464314564Sdim  if (__res[0] == 64) {
2465314564Sdim    return (__res[1] + 64) >> 4;
2466314564Sdim  }
2467314564Sdim  return __res[0] >> 4;
2468314564Sdim}
2469314564Sdim
2470314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2471314564Sdimvec_first_match_or_eos_index(vector signed int __a, vector signed int __b) {
2472314564Sdim  vector bool int __tmp1 = vec_cmpeq(__a, __b);
2473314564Sdim  vector bool int __tmp2 = __tmp1 | vec_cmpeq((vector signed int)__tmp1, __a) |
2474314564Sdim                           vec_cmpeq((vector signed int)__tmp1, __b);
2475314564Sdim
2476314564Sdim  vector unsigned long long __res =
2477314564Sdim#ifdef __LITTLE_ENDIAN__
2478314564Sdim      vec_cnttz((vector unsigned long long)__tmp2);
2479314564Sdim#else
2480314564Sdim      vec_cntlz((vector unsigned long long)__tmp2);
2481314564Sdim#endif
2482314564Sdim  if (__res[0] == 64) {
2483314564Sdim    return (__res[1] + 64) >> 5;
2484314564Sdim  }
2485314564Sdim  return __res[0] >> 5;
2486314564Sdim}
2487314564Sdim
2488314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2489314564Sdimvec_first_match_or_eos_index(vector unsigned int __a, vector unsigned int __b) {
2490314564Sdim  vector bool int __tmp1 = vec_cmpeq(__a, __b);
2491314564Sdim  vector bool int __tmp2 = __tmp1 |
2492314564Sdim                           vec_cmpeq((vector unsigned int)__tmp1, __a) |
2493314564Sdim                           vec_cmpeq((vector unsigned int)__tmp1, __b);
2494314564Sdim
2495314564Sdim  vector unsigned long long __res =
2496314564Sdim#ifdef __LITTLE_ENDIAN__
2497314564Sdim    vec_cnttz((vector unsigned long long)__tmp2);
2498314564Sdim#else
2499314564Sdim    vec_cntlz((vector unsigned long long)__tmp2);
2500314564Sdim#endif
2501314564Sdim  if (__res[0] == 64) {
2502314564Sdim    return (__res[1] + 64) >> 5;
2503314564Sdim  }
2504314564Sdim  return __res[0] >> 5;
2505314564Sdim}
2506314564Sdim
2507314564Sdim/* vec_first_mismatch_index */
2508314564Sdim
2509314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2510314564Sdimvec_first_mismatch_index(vector signed char __a, vector signed char __b) {
2511314564Sdim  vector unsigned long long __res =
2512314564Sdim#ifdef __LITTLE_ENDIAN__
2513314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2514314564Sdim#else
2515314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2516314564Sdim#endif
2517314564Sdim  if (__res[0] == 64) {
2518314564Sdim    return (__res[1] + 64) >> 3;
2519314564Sdim  }
2520314564Sdim  return __res[0] >> 3;
2521314564Sdim}
2522314564Sdim
2523314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2524314564Sdimvec_first_mismatch_index(vector unsigned char __a, vector unsigned char __b) {
2525314564Sdim  vector unsigned long long __res =
2526314564Sdim#ifdef __LITTLE_ENDIAN__
2527314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2528314564Sdim#else
2529314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2530314564Sdim#endif
2531314564Sdim  if (__res[0] == 64) {
2532314564Sdim    return (__res[1] + 64) >> 3;
2533314564Sdim  }
2534314564Sdim  return __res[0] >> 3;
2535314564Sdim}
2536314564Sdim
2537314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2538314564Sdimvec_first_mismatch_index(vector signed short __a, vector signed short __b) {
2539314564Sdim  vector unsigned long long __res =
2540314564Sdim#ifdef __LITTLE_ENDIAN__
2541314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2542314564Sdim#else
2543314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2544314564Sdim#endif
2545314564Sdim  if (__res[0] == 64) {
2546314564Sdim    return (__res[1] + 64) >> 4;
2547314564Sdim  }
2548314564Sdim  return __res[0] >> 4;
2549314564Sdim}
2550314564Sdim
2551314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2552314564Sdimvec_first_mismatch_index(vector unsigned short __a, vector unsigned short __b) {
2553314564Sdim  vector unsigned long long __res =
2554314564Sdim#ifdef __LITTLE_ENDIAN__
2555314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2556314564Sdim#else
2557314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2558314564Sdim#endif
2559314564Sdim  if (__res[0] == 64) {
2560314564Sdim    return (__res[1] + 64) >> 4;
2561314564Sdim  }
2562314564Sdim  return __res[0] >> 4;
2563314564Sdim}
2564314564Sdim
2565314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2566314564Sdimvec_first_mismatch_index(vector signed int __a, vector signed int __b) {
2567314564Sdim  vector unsigned long long __res =
2568314564Sdim#ifdef __LITTLE_ENDIAN__
2569314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2570314564Sdim#else
2571314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2572314564Sdim#endif
2573314564Sdim  if (__res[0] == 64) {
2574314564Sdim    return (__res[1] + 64) >> 5;
2575314564Sdim  }
2576314564Sdim  return __res[0] >> 5;
2577314564Sdim}
2578314564Sdim
2579314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2580314564Sdimvec_first_mismatch_index(vector unsigned int __a, vector unsigned int __b) {
2581314564Sdim  vector unsigned long long __res =
2582314564Sdim#ifdef __LITTLE_ENDIAN__
2583314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpne(__a, __b));
2584314564Sdim#else
2585314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpne(__a, __b));
2586314564Sdim#endif
2587314564Sdim  if (__res[0] == 64) {
2588314564Sdim    return (__res[1] + 64) >> 5;
2589314564Sdim  }
2590314564Sdim  return __res[0] >> 5;
2591314564Sdim}
2592314564Sdim
2593314564Sdim/* vec_first_mismatch_or_eos_index */
2594314564Sdim
2595314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2596314564Sdimvec_first_mismatch_or_eos_index(vector signed char __a,
2597314564Sdim                                vector signed char __b) {
2598314564Sdim  vector unsigned long long __res =
2599314564Sdim#ifdef __LITTLE_ENDIAN__
2600314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2601314564Sdim#else
2602314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2603314564Sdim#endif
2604314564Sdim  if (__res[0] == 64) {
2605314564Sdim    return (__res[1] + 64) >> 3;
2606314564Sdim  }
2607314564Sdim  return __res[0] >> 3;
2608314564Sdim}
2609314564Sdim
2610314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2611314564Sdimvec_first_mismatch_or_eos_index(vector unsigned char __a,
2612314564Sdim                                vector unsigned char __b) {
2613314564Sdim  vector unsigned long long __res =
2614314564Sdim#ifdef __LITTLE_ENDIAN__
2615314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2616314564Sdim#else
2617314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2618314564Sdim#endif
2619314564Sdim  if (__res[0] == 64) {
2620314564Sdim    return (__res[1] + 64) >> 3;
2621314564Sdim  }
2622314564Sdim  return __res[0] >> 3;
2623314564Sdim}
2624314564Sdim
2625314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2626314564Sdimvec_first_mismatch_or_eos_index(vector signed short __a,
2627314564Sdim                                vector signed short __b) {
2628314564Sdim  vector unsigned long long __res =
2629314564Sdim#ifdef __LITTLE_ENDIAN__
2630314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2631314564Sdim#else
2632314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2633314564Sdim#endif
2634314564Sdim  if (__res[0] == 64) {
2635314564Sdim    return (__res[1] + 64) >> 4;
2636314564Sdim  }
2637314564Sdim  return __res[0] >> 4;
2638314564Sdim}
2639314564Sdim
2640314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2641314564Sdimvec_first_mismatch_or_eos_index(vector unsigned short __a,
2642314564Sdim                                vector unsigned short __b) {
2643314564Sdim  vector unsigned long long __res =
2644314564Sdim#ifdef __LITTLE_ENDIAN__
2645314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2646314564Sdim#else
2647314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2648314564Sdim#endif
2649314564Sdim  if (__res[0] == 64) {
2650314564Sdim    return (__res[1] + 64) >> 4;
2651314564Sdim  }
2652314564Sdim  return __res[0] >> 4;
2653314564Sdim}
2654314564Sdim
2655314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2656314564Sdimvec_first_mismatch_or_eos_index(vector signed int __a, vector signed int __b) {
2657314564Sdim  vector unsigned long long __res =
2658314564Sdim#ifdef __LITTLE_ENDIAN__
2659314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2660314564Sdim#else
2661314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2662314564Sdim#endif
2663314564Sdim  if (__res[0] == 64) {
2664314564Sdim    return (__res[1] + 64) >> 5;
2665314564Sdim  }
2666314564Sdim  return __res[0] >> 5;
2667314564Sdim}
2668314564Sdim
2669314564Sdimstatic __inline__ unsigned __ATTRS_o_ai
2670314564Sdimvec_first_mismatch_or_eos_index(vector unsigned int __a,
2671314564Sdim                                vector unsigned int __b) {
2672314564Sdim  vector unsigned long long __res =
2673314564Sdim#ifdef __LITTLE_ENDIAN__
2674314564Sdim    vec_cnttz((vector unsigned long long)vec_cmpnez(__a, __b));
2675314564Sdim#else
2676314564Sdim    vec_cntlz((vector unsigned long long)vec_cmpnez(__a, __b));
2677314564Sdim#endif
2678314564Sdim  if (__res[0] == 64) {
2679314564Sdim    return (__res[1] + 64) >> 5;
2680314564Sdim  }
2681314564Sdim  return __res[0] >> 5;
2682314564Sdim}
2683314564Sdim
2684314564Sdimstatic __inline__ vector double  __ATTRS_o_ai
2685314564Sdimvec_insert_exp(vector double __a, vector unsigned long long __b) {
2686314564Sdim  return __builtin_vsx_xviexpdp((vector unsigned long long)__a,__b);
2687314564Sdim}
2688314564Sdim
2689314564Sdimstatic __inline__ vector double  __ATTRS_o_ai
2690314564Sdimvec_insert_exp(vector unsigned long long __a, vector unsigned long long __b) {
2691314564Sdim  return __builtin_vsx_xviexpdp(__a,__b);
2692314564Sdim}
2693314564Sdim
2694314564Sdimstatic __inline__ vector float  __ATTRS_o_ai
2695314564Sdimvec_insert_exp(vector float __a, vector unsigned int __b) {
2696314564Sdim  return __builtin_vsx_xviexpsp((vector unsigned int)__a,__b);
2697314564Sdim}
2698314564Sdim
2699314564Sdimstatic __inline__ vector float  __ATTRS_o_ai
2700314564Sdimvec_insert_exp(vector unsigned int __a, vector unsigned int __b) {
2701314564Sdim  return __builtin_vsx_xviexpsp(__a,__b);
2702314564Sdim}
2703314564Sdim
2704314564Sdim#if defined(__powerpc64__)
2705314564Sdimstatic __inline__ vector signed char __ATTRS_o_ai vec_xl_len(signed char *__a,
2706314564Sdim                                                             size_t __b) {
2707314564Sdim  return (vector signed char)__builtin_vsx_lxvl(__a, (__b << 56));
2708314564Sdim}
2709314564Sdim
2710314564Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
2711314564Sdimvec_xl_len(unsigned char *__a, size_t __b) {
2712314564Sdim  return (vector unsigned char)__builtin_vsx_lxvl(__a, (__b << 56));
2713314564Sdim}
2714314564Sdim
2715314564Sdimstatic __inline__ vector signed short __ATTRS_o_ai vec_xl_len(signed short *__a,
2716314564Sdim                                                              size_t __b) {
2717314564Sdim  return (vector signed short)__builtin_vsx_lxvl(__a, (__b << 56));
2718314564Sdim}
2719314564Sdim
2720314564Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
2721314564Sdimvec_xl_len(unsigned short *__a, size_t __b) {
2722314564Sdim  return (vector unsigned short)__builtin_vsx_lxvl(__a, (__b << 56));
2723314564Sdim}
2724314564Sdim
2725314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai vec_xl_len(signed int *__a,
2726314564Sdim                                                            size_t __b) {
2727314564Sdim  return (vector signed int)__builtin_vsx_lxvl(__a, (__b << 56));
2728314564Sdim}
2729314564Sdim
2730314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai vec_xl_len(unsigned int *__a,
2731314564Sdim                                                              size_t __b) {
2732314564Sdim  return (vector unsigned int)__builtin_vsx_lxvl(__a, (__b << 56));
2733314564Sdim}
2734314564Sdim
2735314564Sdimstatic __inline__ vector float __ATTRS_o_ai vec_xl_len(float *__a, size_t __b) {
2736314564Sdim  return (vector float)__builtin_vsx_lxvl(__a, (__b << 56));
2737314564Sdim}
2738314564Sdim
2739314564Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
2740314564Sdimvec_xl_len(signed __int128 *__a, size_t __b) {
2741314564Sdim  return (vector signed __int128)__builtin_vsx_lxvl(__a, (__b << 56));
2742314564Sdim}
2743314564Sdim
2744314564Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
2745314564Sdimvec_xl_len(unsigned __int128 *__a, size_t __b) {
2746314564Sdim  return (vector unsigned __int128)__builtin_vsx_lxvl(__a, (__b << 56));
2747314564Sdim}
2748314564Sdim
2749314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
2750314564Sdimvec_xl_len(signed long long *__a, size_t __b) {
2751314564Sdim  return (vector signed long long)__builtin_vsx_lxvl(__a, (__b << 56));
2752314564Sdim}
2753314564Sdim
2754314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
2755314564Sdimvec_xl_len(unsigned long long *__a, size_t __b) {
2756314564Sdim  return (vector unsigned long long)__builtin_vsx_lxvl(__a, (__b << 56));
2757314564Sdim}
2758314564Sdim
2759314564Sdimstatic __inline__ vector double __ATTRS_o_ai vec_xl_len(double *__a,
2760314564Sdim                                                        size_t __b) {
2761314564Sdim  return (vector double)__builtin_vsx_lxvl(__a, (__b << 56));
2762314564Sdim}
2763314564Sdim
2764360784Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
2765360784Sdimvec_xl_len_r(unsigned char *__a, size_t __b) {
2766314564Sdim  vector unsigned char __res =
2767314564Sdim      (vector unsigned char)__builtin_vsx_lxvll(__a, (__b << 56));
2768314564Sdim#ifdef __LITTLE_ENDIAN__
2769314564Sdim  vector unsigned char __mask =
2770314564Sdim      (vector unsigned char)__builtin_altivec_lvsr(16 - __b, (int *)NULL);
2771314564Sdim  __res = (vector unsigned char)__builtin_altivec_vperm_4si(
2772314564Sdim      (vector int)__res, (vector int)__res, __mask);
2773314564Sdim#endif
2774314564Sdim  return __res;
2775314564Sdim}
2776314564Sdim
2777314564Sdim// vec_xst_len
2778314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned char __a,
2779314564Sdim                                                unsigned char *__b,
2780314564Sdim                                                size_t __c) {
2781314564Sdim  return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
2782314564Sdim}
2783314564Sdim
2784314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_len(vector signed char __a,
2785314564Sdim                                                signed char *__b, size_t __c) {
2786314564Sdim  return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
2787314564Sdim}
2788314564Sdim
2789314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_len(vector signed short __a,
2790314564Sdim                                                signed short *__b, size_t __c) {
2791314564Sdim  return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
2792314564Sdim}
2793314564Sdim
2794314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned short __a,
2795314564Sdim                                                unsigned short *__b,
2796314564Sdim                                                size_t __c) {
2797314564Sdim  return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
2798314564Sdim}
2799314564Sdim
2800314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_len(vector signed int __a,
2801314564Sdim                                                signed int *__b, size_t __c) {
2802314564Sdim  return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
2803314564Sdim}
2804314564Sdim
2805314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned int __a,
2806314564Sdim                                                unsigned int *__b, size_t __c) {
2807314564Sdim  return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
2808314564Sdim}
2809314564Sdim
2810314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_len(vector float __a, float *__b,
2811314564Sdim                                                size_t __c) {
2812314564Sdim  return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
2813314564Sdim}
2814314564Sdim
2815314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_len(vector signed __int128 __a,
2816314564Sdim                                                signed __int128 *__b,
2817314564Sdim                                                size_t __c) {
2818314564Sdim  return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
2819314564Sdim}
2820314564Sdim
2821314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned __int128 __a,
2822314564Sdim                                                unsigned __int128 *__b,
2823314564Sdim                                                size_t __c) {
2824314564Sdim  return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
2825314564Sdim}
2826314564Sdim
2827314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_len(vector signed long long __a,
2828314564Sdim                                                signed long long *__b,
2829314564Sdim                                                size_t __c) {
2830314564Sdim  return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
2831314564Sdim}
2832314564Sdim
2833314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_len(vector unsigned long long __a,
2834314564Sdim                                                unsigned long long *__b,
2835314564Sdim                                                size_t __c) {
2836314564Sdim  return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
2837314564Sdim}
2838314564Sdim
2839314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_len(vector double __a, double *__b,
2840314564Sdim                                                size_t __c) {
2841314564Sdim  return __builtin_vsx_stxvl((vector int)__a, __b, (__c << 56));
2842314564Sdim}
2843314564Sdim
2844314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_len_r(vector unsigned char __a,
2845314564Sdim                                                  unsigned char *__b,
2846314564Sdim                                                  size_t __c) {
2847314564Sdim#ifdef __LITTLE_ENDIAN__
2848314564Sdim  vector unsigned char __mask =
2849314564Sdim      (vector unsigned char)__builtin_altivec_lvsl(16 - __c, (int *)NULL);
2850314564Sdim  vector unsigned char __res =
2851314564Sdim      __builtin_altivec_vperm_4si((vector int)__a, (vector int)__a, __mask);
2852314564Sdim  return __builtin_vsx_stxvll((vector int)__res, __b, (__c << 56));
2853314564Sdim#else
2854314564Sdim  return __builtin_vsx_stxvll((vector int)__a, __b, (__c << 56));
2855314564Sdim#endif
2856314564Sdim}
2857314564Sdim#endif
2858314564Sdim#endif
2859314564Sdim
2860288943Sdim/* vec_cpsgn */
2861288943Sdim
2862288943Sdim#ifdef __VSX__
2863309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_cpsgn(vector float __a,
2864309124Sdim                                                      vector float __b) {
2865288943Sdim  return __builtin_vsx_xvcpsgnsp(__a, __b);
2866288943Sdim}
2867288943Sdim
2868309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_cpsgn(vector double __a,
2869309124Sdim                                                       vector double __b) {
2870288943Sdim  return __builtin_vsx_xvcpsgndp(__a, __b);
2871288943Sdim}
2872288943Sdim#endif
2873288943Sdim
2874210299Sed/* vec_ctf */
2875210299Sed
2876296417Sdim#ifdef __VSX__
2877321369Sdim#define vec_ctf(__a, __b)                                                      \
2878321369Sdim  _Generic((__a), vector int                                                   \
2879360784Sdim           : (vector float)__builtin_altivec_vcfsx((vector int)(__a), (__b)),  \
2880321369Sdim             vector unsigned int                                               \
2881360784Sdim           : (vector float)__builtin_altivec_vcfux((vector unsigned int)(__a), \
2882360784Sdim                                                   (__b)),                     \
2883321369Sdim             vector unsigned long long                                         \
2884321369Sdim           : (__builtin_convertvector((vector unsigned long long)(__a),        \
2885321369Sdim                                      vector double) *                         \
2886321369Sdim              (vector double)(vector unsigned long long)((0x3ffULL - (__b))    \
2887321369Sdim                                                         << 52)),              \
2888321369Sdim             vector signed long long                                           \
2889321369Sdim           : (__builtin_convertvector((vector signed long long)(__a),          \
2890321369Sdim                                      vector double) *                         \
2891321369Sdim              (vector double)(vector unsigned long long)((0x3ffULL - (__b))    \
2892321369Sdim                                                         << 52)))
2893321369Sdim#else
2894321369Sdim#define vec_ctf(__a, __b)                                                      \
2895321369Sdim  _Generic((__a), vector int                                                   \
2896360784Sdim           : (vector float)__builtin_altivec_vcfsx((vector int)(__a), (__b)),  \
2897321369Sdim             vector unsigned int                                               \
2898360784Sdim           : (vector float)__builtin_altivec_vcfux((vector unsigned int)(__a), \
2899360784Sdim                                                   (__b)))
2900296417Sdim#endif
2901296417Sdim
2902210299Sed/* vec_vcfsx */
2903210299Sed
2904321369Sdim#define vec_vcfux __builtin_altivec_vcfux
2905210299Sed
2906210299Sed/* vec_vcfux */
2907210299Sed
2908321369Sdim#define vec_vcfsx(__a, __b) __builtin_altivec_vcfsx((vector int)(__a), (__b))
2909210299Sed
2910210299Sed/* vec_cts */
2911210299Sed
2912296417Sdim#ifdef __VSX__
2913321369Sdim#define vec_cts(__a, __b)                                                      \
2914321369Sdim  _Generic((__a), vector float                                                 \
2915360784Sdim           : __builtin_altivec_vctsxs((vector float)(__a), (__b)),             \
2916360784Sdim             vector double                                                     \
2917321369Sdim           : __extension__({                                                   \
2918321369Sdim             vector double __ret =                                             \
2919360784Sdim                 (vector double)(__a) *                                        \
2920321369Sdim                 (vector double)(vector unsigned long long)((0x3ffULL + (__b)) \
2921321369Sdim                                                            << 52);            \
2922321369Sdim             __builtin_convertvector(__ret, vector signed long long);          \
2923321369Sdim           }))
2924321369Sdim#else
2925321369Sdim#define vec_cts __builtin_altivec_vctsxs
2926296417Sdim#endif
2927296417Sdim
2928210299Sed/* vec_vctsxs */
2929210299Sed
2930321369Sdim#define vec_vctsxs __builtin_altivec_vctsxs
2931210299Sed
2932210299Sed/* vec_ctu */
2933210299Sed
2934296417Sdim#ifdef __VSX__
2935321369Sdim#define vec_ctu(__a, __b)                                                      \
2936321369Sdim  _Generic((__a), vector float                                                 \
2937360784Sdim           : __builtin_altivec_vctuxs((vector float)(__a), (__b)),             \
2938360784Sdim             vector double                                                     \
2939321369Sdim           : __extension__({                                                   \
2940321369Sdim             vector double __ret =                                             \
2941360784Sdim                 (vector double)(__a) *                                        \
2942321369Sdim                 (vector double)(vector unsigned long long)((0x3ffULL + __b)   \
2943321369Sdim                                                            << 52);            \
2944321369Sdim             __builtin_convertvector(__ret, vector unsigned long long);        \
2945321369Sdim           }))
2946321369Sdim#else
2947321369Sdim#define vec_ctu __builtin_altivec_vctuxs
2948296417Sdim#endif
2949296417Sdim
2950210299Sed/* vec_vctuxs */
2951210299Sed
2952321369Sdim#define vec_vctuxs __builtin_altivec_vctuxs
2953210299Sed
2954314564Sdim/* vec_signed */
2955314564Sdim
2956314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
2957314564Sdimvec_sld(vector signed int, vector signed int, unsigned const int __c);
2958314564Sdim
2959314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
2960314564Sdimvec_signed(vector float __a) {
2961314564Sdim  return __builtin_convertvector(__a, vector signed int);
2962314564Sdim}
2963314564Sdim
2964314564Sdim#ifdef __VSX__
2965314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
2966314564Sdimvec_signed(vector double __a) {
2967314564Sdim  return __builtin_convertvector(__a, vector signed long long);
2968314564Sdim}
2969314564Sdim
2970314564Sdimstatic __inline__ vector signed int __attribute__((__always_inline__))
2971314564Sdimvec_signed2(vector double __a, vector double __b) {
2972314564Sdim  return (vector signed int) { __a[0], __a[1], __b[0], __b[1] };
2973314564Sdim}
2974314564Sdim
2975314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
2976314564Sdimvec_signede(vector double __a) {
2977314564Sdim#ifdef __LITTLE_ENDIAN__
2978314564Sdim  vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);
2979314564Sdim  return vec_sld(__ret, __ret, 12);
2980314564Sdim#else
2981314564Sdim  return __builtin_vsx_xvcvdpsxws(__a);
2982314564Sdim#endif
2983314564Sdim}
2984314564Sdim
2985314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
2986314564Sdimvec_signedo(vector double __a) {
2987314564Sdim#ifdef __LITTLE_ENDIAN__
2988314564Sdim  return __builtin_vsx_xvcvdpsxws(__a);
2989314564Sdim#else
2990314564Sdim  vector signed int __ret = __builtin_vsx_xvcvdpsxws(__a);
2991314564Sdim  return vec_sld(__ret, __ret, 12);
2992314564Sdim#endif
2993314564Sdim}
2994314564Sdim#endif
2995314564Sdim
2996314564Sdim/* vec_unsigned */
2997314564Sdim
2998314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
2999314564Sdimvec_sld(vector unsigned int, vector unsigned int, unsigned const int __c);
3000314564Sdim
3001314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3002314564Sdimvec_unsigned(vector float __a) {
3003314564Sdim  return __builtin_convertvector(__a, vector unsigned int);
3004314564Sdim}
3005314564Sdim
3006314564Sdim#ifdef __VSX__
3007314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
3008314564Sdimvec_unsigned(vector double __a) {
3009314564Sdim  return __builtin_convertvector(__a, vector unsigned long long);
3010314564Sdim}
3011314564Sdim
3012314564Sdimstatic __inline__ vector unsigned int __attribute__((__always_inline__))
3013314564Sdimvec_unsigned2(vector double __a, vector double __b) {
3014314564Sdim  return (vector unsigned int) { __a[0], __a[1], __b[0], __b[1] };
3015314564Sdim}
3016314564Sdim
3017314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3018314564Sdimvec_unsignede(vector double __a) {
3019314564Sdim#ifdef __LITTLE_ENDIAN__
3020314564Sdim  vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);
3021314564Sdim  return vec_sld(__ret, __ret, 12);
3022314564Sdim#else
3023314564Sdim  return __builtin_vsx_xvcvdpuxws(__a);
3024314564Sdim#endif
3025314564Sdim}
3026314564Sdim
3027314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3028314564Sdimvec_unsignedo(vector double __a) {
3029314564Sdim#ifdef __LITTLE_ENDIAN__
3030314564Sdim  return __builtin_vsx_xvcvdpuxws(__a);
3031314564Sdim#else
3032314564Sdim  vector unsigned int __ret = __builtin_vsx_xvcvdpuxws(__a);
3033314564Sdim  return vec_sld(__ret, __ret, 12);
3034314564Sdim#endif
3035314564Sdim}
3036314564Sdim#endif
3037314564Sdim
3038314564Sdim/* vec_float */
3039314564Sdim
3040314564Sdimstatic __inline__ vector float __ATTRS_o_ai
3041314564Sdimvec_sld(vector float, vector float, unsigned const int __c);
3042314564Sdim
3043314564Sdimstatic __inline__ vector float __ATTRS_o_ai
3044314564Sdimvec_float(vector signed int __a) {
3045314564Sdim  return __builtin_convertvector(__a, vector float);
3046314564Sdim}
3047314564Sdim
3048314564Sdimstatic __inline__ vector float __ATTRS_o_ai
3049314564Sdimvec_float(vector unsigned int __a) {
3050314564Sdim  return __builtin_convertvector(__a, vector float);
3051314564Sdim}
3052314564Sdim
3053314564Sdim#ifdef __VSX__
3054314564Sdimstatic __inline__ vector float __ATTRS_o_ai
3055314564Sdimvec_float2(vector signed long long __a, vector signed long long __b) {
3056314564Sdim  return (vector float) { __a[0], __a[1], __b[0], __b[1] };
3057314564Sdim}
3058314564Sdim
3059314564Sdimstatic __inline__ vector float __ATTRS_o_ai
3060314564Sdimvec_float2(vector unsigned long long __a, vector unsigned long long __b) {
3061314564Sdim  return (vector float) { __a[0], __a[1], __b[0], __b[1] };
3062314564Sdim}
3063314564Sdim
3064314564Sdimstatic __inline__ vector float __ATTRS_o_ai
3065314564Sdimvec_float2(vector double __a, vector double __b) {
3066314564Sdim  return (vector float) { __a[0], __a[1], __b[0], __b[1] };
3067314564Sdim}
3068314564Sdim
3069314564Sdimstatic __inline__ vector float __ATTRS_o_ai
3070314564Sdimvec_floate(vector signed long long __a) {
3071314564Sdim#ifdef __LITTLE_ENDIAN__
3072314564Sdim  vector float __ret = __builtin_vsx_xvcvsxdsp(__a);
3073314564Sdim  return vec_sld(__ret, __ret, 12);
3074314564Sdim#else
3075314564Sdim  return __builtin_vsx_xvcvsxdsp(__a);
3076314564Sdim#endif
3077314564Sdim}
3078314564Sdim
3079314564Sdimstatic __inline__ vector float __ATTRS_o_ai
3080314564Sdimvec_floate(vector unsigned long long __a) {
3081314564Sdim#ifdef __LITTLE_ENDIAN__
3082314564Sdim  vector float __ret = __builtin_vsx_xvcvuxdsp(__a);
3083314564Sdim  return vec_sld(__ret, __ret, 12);
3084314564Sdim#else
3085314564Sdim  return __builtin_vsx_xvcvuxdsp(__a);
3086314564Sdim#endif
3087314564Sdim}
3088314564Sdim
3089314564Sdimstatic __inline__ vector float __ATTRS_o_ai
3090314564Sdimvec_floate(vector double __a) {
3091314564Sdim#ifdef __LITTLE_ENDIAN__
3092314564Sdim  vector float __ret = __builtin_vsx_xvcvdpsp(__a);
3093314564Sdim  return vec_sld(__ret, __ret, 12);
3094314564Sdim#else
3095314564Sdim  return __builtin_vsx_xvcvdpsp(__a);
3096314564Sdim#endif
3097314564Sdim}
3098314564Sdim
3099314564Sdimstatic __inline__ vector float __ATTRS_o_ai
3100314564Sdimvec_floato(vector signed long long __a) {
3101314564Sdim#ifdef __LITTLE_ENDIAN__
3102314564Sdim  return __builtin_vsx_xvcvsxdsp(__a);
3103314564Sdim#else
3104314564Sdim  vector float __ret = __builtin_vsx_xvcvsxdsp(__a);
3105314564Sdim  return vec_sld(__ret, __ret, 12);
3106314564Sdim#endif
3107314564Sdim}
3108314564Sdim
3109314564Sdimstatic __inline__ vector float __ATTRS_o_ai
3110314564Sdimvec_floato(vector unsigned long long __a) {
3111314564Sdim#ifdef __LITTLE_ENDIAN__
3112314564Sdim  return __builtin_vsx_xvcvuxdsp(__a);
3113314564Sdim#else
3114314564Sdim  vector float __ret = __builtin_vsx_xvcvuxdsp(__a);
3115314564Sdim  return vec_sld(__ret, __ret, 12);
3116314564Sdim#endif
3117314564Sdim}
3118314564Sdim
3119314564Sdimstatic __inline__ vector float __ATTRS_o_ai
3120314564Sdimvec_floato(vector double __a) {
3121314564Sdim#ifdef __LITTLE_ENDIAN__
3122314564Sdim  return __builtin_vsx_xvcvdpsp(__a);
3123314564Sdim#else
3124314564Sdim  vector float __ret = __builtin_vsx_xvcvdpsp(__a);
3125314564Sdim  return vec_sld(__ret, __ret, 12);
3126314564Sdim#endif
3127314564Sdim}
3128314564Sdim#endif
3129314564Sdim
3130296417Sdim/* vec_double */
3131296417Sdim
3132296417Sdim#ifdef __VSX__
3133309124Sdimstatic __inline__ vector double __ATTRS_o_ai
3134309124Sdimvec_double(vector signed long long __a) {
3135314564Sdim  return __builtin_convertvector(__a, vector double);
3136314564Sdim}
3137314564Sdim
3138314564Sdimstatic __inline__ vector double __ATTRS_o_ai
3139314564Sdimvec_double(vector unsigned long long __a) {
3140314564Sdim  return __builtin_convertvector(__a, vector double);
3141314564Sdim}
3142314564Sdim
3143314564Sdimstatic __inline__ vector double __ATTRS_o_ai
3144314564Sdimvec_doublee(vector signed int __a) {
3145314564Sdim#ifdef __LITTLE_ENDIAN__
3146314564Sdim  return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));
3147314564Sdim#else
3148314564Sdim  return __builtin_vsx_xvcvsxwdp(__a);
3149314564Sdim#endif
3150314564Sdim}
3151314564Sdim
3152314564Sdimstatic __inline__ vector double __ATTRS_o_ai
3153314564Sdimvec_doublee(vector unsigned int __a) {
3154314564Sdim#ifdef __LITTLE_ENDIAN__
3155314564Sdim  return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));
3156314564Sdim#else
3157314564Sdim  return __builtin_vsx_xvcvuxwdp(__a);
3158314564Sdim#endif
3159314564Sdim}
3160314564Sdim
3161314564Sdimstatic __inline__ vector double __ATTRS_o_ai
3162314564Sdimvec_doublee(vector float __a) {
3163314564Sdim#ifdef __LITTLE_ENDIAN__
3164314564Sdim  return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));
3165314564Sdim#else
3166314564Sdim  return __builtin_vsx_xvcvspdp(__a);
3167314564Sdim#endif
3168314564Sdim}
3169314564Sdim
3170314564Sdimstatic __inline__ vector double __ATTRS_o_ai
3171314564Sdimvec_doubleh(vector signed int __a) {
3172309124Sdim  vector double __ret = {__a[0], __a[1]};
3173296417Sdim  return __ret;
3174296417Sdim}
3175296417Sdim
3176309124Sdimstatic __inline__ vector double __ATTRS_o_ai
3177314564Sdimvec_doubleh(vector unsigned int __a) {
3178309124Sdim  vector double __ret = {__a[0], __a[1]};
3179296417Sdim  return __ret;
3180296417Sdim}
3181314564Sdim
3182314564Sdimstatic __inline__ vector double __ATTRS_o_ai
3183314564Sdimvec_doubleh(vector float __a) {
3184314564Sdim  vector double __ret = {__a[0], __a[1]};
3185314564Sdim  return __ret;
3186314564Sdim}
3187314564Sdim
3188314564Sdimstatic __inline__ vector double __ATTRS_o_ai
3189314564Sdimvec_doublel(vector signed int __a) {
3190314564Sdim  vector double __ret = {__a[2], __a[3]};
3191314564Sdim  return __ret;
3192314564Sdim}
3193314564Sdim
3194314564Sdimstatic __inline__ vector double __ATTRS_o_ai
3195314564Sdimvec_doublel(vector unsigned int __a) {
3196314564Sdim  vector double __ret = {__a[2], __a[3]};
3197314564Sdim  return __ret;
3198314564Sdim}
3199314564Sdim
3200314564Sdimstatic __inline__ vector double __ATTRS_o_ai
3201314564Sdimvec_doublel(vector float __a) {
3202314564Sdim  vector double __ret = {__a[2], __a[3]};
3203314564Sdim  return __ret;
3204314564Sdim}
3205314564Sdim
3206314564Sdimstatic __inline__ vector double __ATTRS_o_ai
3207314564Sdimvec_doubleo(vector signed int __a) {
3208314564Sdim#ifdef __LITTLE_ENDIAN__
3209314564Sdim  return __builtin_vsx_xvcvsxwdp(__a);
3210314564Sdim#else
3211314564Sdim  return __builtin_vsx_xvcvsxwdp(vec_sld(__a, __a, 4));
3212296417Sdim#endif
3213314564Sdim}
3214296417Sdim
3215314564Sdimstatic __inline__ vector double __ATTRS_o_ai
3216314564Sdimvec_doubleo(vector unsigned int __a) {
3217314564Sdim#ifdef __LITTLE_ENDIAN__
3218314564Sdim  return __builtin_vsx_xvcvuxwdp(__a);
3219314564Sdim#else
3220314564Sdim  return __builtin_vsx_xvcvuxwdp(vec_sld(__a, __a, 4));
3221314564Sdim#endif
3222314564Sdim}
3223314564Sdim
3224314564Sdimstatic __inline__ vector double __ATTRS_o_ai
3225314564Sdimvec_doubleo(vector float __a) {
3226314564Sdim#ifdef __LITTLE_ENDIAN__
3227314564Sdim  return __builtin_vsx_xvcvspdp(__a);
3228314564Sdim#else
3229314564Sdim  return __builtin_vsx_xvcvspdp(vec_sld(__a, __a, 4));
3230314564Sdim#endif
3231314564Sdim}
3232314564Sdim#endif
3233314564Sdim
3234280031Sdim/* vec_div */
3235288943Sdim
3236288943Sdim/* Integer vector divides (vectors are scalarized, elements divided
3237288943Sdim   and the vectors reassembled).
3238288943Sdim*/
3239309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
3240309124Sdimvec_div(vector signed char __a, vector signed char __b) {
3241288943Sdim  return __a / __b;
3242288943Sdim}
3243288943Sdim
3244309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3245309124Sdimvec_div(vector unsigned char __a, vector unsigned char __b) {
3246288943Sdim  return __a / __b;
3247288943Sdim}
3248288943Sdim
3249309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
3250309124Sdimvec_div(vector signed short __a, vector signed short __b) {
3251288943Sdim  return __a / __b;
3252288943Sdim}
3253288943Sdim
3254309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
3255309124Sdimvec_div(vector unsigned short __a, vector unsigned short __b) {
3256288943Sdim  return __a / __b;
3257288943Sdim}
3258288943Sdim
3259309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
3260309124Sdimvec_div(vector signed int __a, vector signed int __b) {
3261288943Sdim  return __a / __b;
3262288943Sdim}
3263288943Sdim
3264309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3265309124Sdimvec_div(vector unsigned int __a, vector unsigned int __b) {
3266288943Sdim  return __a / __b;
3267288943Sdim}
3268288943Sdim
3269280031Sdim#ifdef __VSX__
3270309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
3271288943Sdimvec_div(vector signed long long __a, vector signed long long __b) {
3272288943Sdim  return __a / __b;
3273280031Sdim}
3274280031Sdim
3275309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
3276288943Sdimvec_div(vector unsigned long long __a, vector unsigned long long __b) {
3277288943Sdim  return __a / __b;
3278280031Sdim}
3279288943Sdim
3280309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_div(vector float __a,
3281309124Sdim                                                    vector float __b) {
3282288943Sdim  return __a / __b;
3283288943Sdim}
3284288943Sdim
3285309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_div(vector double __a,
3286309124Sdim                                                     vector double __b) {
3287288943Sdim  return __a / __b;
3288288943Sdim}
3289280031Sdim#endif
3290280031Sdim
3291210299Sed/* vec_dss */
3292210299Sed
3293360784Sdim#define vec_dss __builtin_altivec_dss
3294210299Sed
3295210299Sed/* vec_dssall */
3296210299Sed
3297309124Sdimstatic __inline__ void __attribute__((__always_inline__)) vec_dssall(void) {
3298210299Sed  __builtin_altivec_dssall();
3299210299Sed}
3300210299Sed
3301210299Sed/* vec_dst */
3302309124Sdim#define vec_dst(__PTR, __CW, __STR) \
3303309124Sdim  __extension__(                    \
3304309124Sdim      { __builtin_altivec_dst((const void *)(__PTR), (__CW), (__STR)); })
3305210299Sed
3306210299Sed/* vec_dstst */
3307309124Sdim#define vec_dstst(__PTR, __CW, __STR) \
3308309124Sdim  __extension__(                      \
3309309124Sdim      { __builtin_altivec_dstst((const void *)(__PTR), (__CW), (__STR)); })
3310210299Sed
3311210299Sed/* vec_dststt */
3312309124Sdim#define vec_dststt(__PTR, __CW, __STR) \
3313309124Sdim  __extension__(                       \
3314309124Sdim      { __builtin_altivec_dststt((const void *)(__PTR), (__CW), (__STR)); })
3315210299Sed
3316210299Sed/* vec_dstt */
3317309124Sdim#define vec_dstt(__PTR, __CW, __STR) \
3318309124Sdim  __extension__(                     \
3319309124Sdim      { __builtin_altivec_dstt((const void *)(__PTR), (__CW), (__STR)); })
3320210299Sed
3321288943Sdim/* vec_eqv */
3322288943Sdim
3323288943Sdim#ifdef __POWER8_VECTOR__
3324309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
3325309124Sdimvec_eqv(vector signed char __a, vector signed char __b) {
3326288943Sdim  return (vector signed char)__builtin_vsx_xxleqv((vector unsigned int)__a,
3327288943Sdim                                                  (vector unsigned int)__b);
3328288943Sdim}
3329288943Sdim
3330309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3331309124Sdimvec_eqv(vector unsigned char __a, vector unsigned char __b) {
3332288943Sdim  return (vector unsigned char)__builtin_vsx_xxleqv((vector unsigned int)__a,
3333288943Sdim                                                    (vector unsigned int)__b);
3334288943Sdim}
3335288943Sdim
3336309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_eqv(vector bool char __a,
3337309124Sdim                                                        vector bool char __b) {
3338296417Sdim  return (vector bool char)__builtin_vsx_xxleqv((vector unsigned int)__a,
3339296417Sdim                                                (vector unsigned int)__b);
3340288943Sdim}
3341288943Sdim
3342309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
3343309124Sdimvec_eqv(vector signed short __a, vector signed short __b) {
3344288943Sdim  return (vector signed short)__builtin_vsx_xxleqv((vector unsigned int)__a,
3345288943Sdim                                                   (vector unsigned int)__b);
3346288943Sdim}
3347288943Sdim
3348309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
3349309124Sdimvec_eqv(vector unsigned short __a, vector unsigned short __b) {
3350288943Sdim  return (vector unsigned short)__builtin_vsx_xxleqv((vector unsigned int)__a,
3351288943Sdim                                                     (vector unsigned int)__b);
3352288943Sdim}
3353288943Sdim
3354309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
3355309124Sdimvec_eqv(vector bool short __a, vector bool short __b) {
3356296417Sdim  return (vector bool short)__builtin_vsx_xxleqv((vector unsigned int)__a,
3357296417Sdim                                                 (vector unsigned int)__b);
3358288943Sdim}
3359288943Sdim
3360309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
3361309124Sdimvec_eqv(vector signed int __a, vector signed int __b) {
3362288943Sdim  return (vector signed int)__builtin_vsx_xxleqv((vector unsigned int)__a,
3363288943Sdim                                                 (vector unsigned int)__b);
3364288943Sdim}
3365288943Sdim
3366309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3367309124Sdimvec_eqv(vector unsigned int __a, vector unsigned int __b) {
3368296417Sdim  return __builtin_vsx_xxleqv(__a, __b);
3369288943Sdim}
3370288943Sdim
3371309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_eqv(vector bool int __a,
3372309124Sdim                                                       vector bool int __b) {
3373296417Sdim  return (vector bool int)__builtin_vsx_xxleqv((vector unsigned int)__a,
3374309124Sdim                                               (vector unsigned int)__b);
3375288943Sdim}
3376288943Sdim
3377309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
3378288943Sdimvec_eqv(vector signed long long __a, vector signed long long __b) {
3379309124Sdim  return (vector signed long long)__builtin_vsx_xxleqv(
3380309124Sdim      (vector unsigned int)__a, (vector unsigned int)__b);
3381288943Sdim}
3382288943Sdim
3383309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
3384288943Sdimvec_eqv(vector unsigned long long __a, vector unsigned long long __b) {
3385309124Sdim  return (vector unsigned long long)__builtin_vsx_xxleqv(
3386309124Sdim      (vector unsigned int)__a, (vector unsigned int)__b);
3387288943Sdim}
3388288943Sdim
3389309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
3390296417Sdimvec_eqv(vector bool long long __a, vector bool long long __b) {
3391309124Sdim  return (vector bool long long)__builtin_vsx_xxleqv((vector unsigned int)__a,
3392309124Sdim                                                     (vector unsigned int)__b);
3393288943Sdim}
3394288943Sdim
3395309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_eqv(vector float __a,
3396309124Sdim                                                    vector float __b) {
3397288943Sdim  return (vector float)__builtin_vsx_xxleqv((vector unsigned int)__a,
3398288943Sdim                                            (vector unsigned int)__b);
3399288943Sdim}
3400288943Sdim
3401309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_eqv(vector double __a,
3402309124Sdim                                                     vector double __b) {
3403288943Sdim  return (vector double)__builtin_vsx_xxleqv((vector unsigned int)__a,
3404288943Sdim                                             (vector unsigned int)__b);
3405288943Sdim}
3406288943Sdim#endif
3407288943Sdim
3408210299Sed/* vec_expte */
3409210299Sed
3410309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
3411288943Sdimvec_expte(vector float __a) {
3412249423Sdim  return __builtin_altivec_vexptefp(__a);
3413210299Sed}
3414210299Sed
3415210299Sed/* vec_vexptefp */
3416210299Sed
3417309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
3418288943Sdimvec_vexptefp(vector float __a) {
3419249423Sdim  return __builtin_altivec_vexptefp(__a);
3420210299Sed}
3421210299Sed
3422210299Sed/* vec_floor */
3423210299Sed
3424309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_floor(vector float __a) {
3425288943Sdim#ifdef __VSX__
3426288943Sdim  return __builtin_vsx_xvrspim(__a);
3427288943Sdim#else
3428249423Sdim  return __builtin_altivec_vrfim(__a);
3429288943Sdim#endif
3430210299Sed}
3431210299Sed
3432288943Sdim#ifdef __VSX__
3433309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_floor(vector double __a) {
3434288943Sdim  return __builtin_vsx_xvrdpim(__a);
3435288943Sdim}
3436288943Sdim#endif
3437288943Sdim
3438210299Sed/* vec_vrfim */
3439210299Sed
3440309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
3441288943Sdimvec_vrfim(vector float __a) {
3442249423Sdim  return __builtin_altivec_vrfim(__a);
3443210299Sed}
3444210299Sed
3445210299Sed/* vec_ld */
3446210299Sed
3447309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
3448309124Sdimvec_ld(int __a, const vector signed char *__b) {
3449249423Sdim  return (vector signed char)__builtin_altivec_lvx(__a, __b);
3450210299Sed}
3451210299Sed
3452309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
3453309124Sdimvec_ld(int __a, const signed char *__b) {
3454249423Sdim  return (vector signed char)__builtin_altivec_lvx(__a, __b);
3455210299Sed}
3456210299Sed
3457309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3458288943Sdimvec_ld(int __a, const vector unsigned char *__b) {
3459249423Sdim  return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
3460210299Sed}
3461210299Sed
3462309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3463309124Sdimvec_ld(int __a, const unsigned char *__b) {
3464249423Sdim  return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
3465210299Sed}
3466210299Sed
3467309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
3468309124Sdimvec_ld(int __a, const vector bool char *__b) {
3469249423Sdim  return (vector bool char)__builtin_altivec_lvx(__a, __b);
3470212904Sdim}
3471212904Sdim
3472309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_ld(int __a,
3473309124Sdim                                                   const vector short *__b) {
3474249423Sdim  return (vector short)__builtin_altivec_lvx(__a, __b);
3475210299Sed}
3476210299Sed
3477309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_ld(int __a, const short *__b) {
3478249423Sdim  return (vector short)__builtin_altivec_lvx(__a, __b);
3479210299Sed}
3480210299Sed
3481309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
3482288943Sdimvec_ld(int __a, const vector unsigned short *__b) {
3483249423Sdim  return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
3484210299Sed}
3485210299Sed
3486309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
3487309124Sdimvec_ld(int __a, const unsigned short *__b) {
3488249423Sdim  return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
3489210299Sed}
3490210299Sed
3491309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
3492309124Sdimvec_ld(int __a, const vector bool short *__b) {
3493249423Sdim  return (vector bool short)__builtin_altivec_lvx(__a, __b);
3494212904Sdim}
3495212904Sdim
3496309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_ld(int __a,
3497309124Sdim                                                   const vector pixel *__b) {
3498249423Sdim  return (vector pixel)__builtin_altivec_lvx(__a, __b);
3499212904Sdim}
3500212904Sdim
3501309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_ld(int __a,
3502309124Sdim                                                 const vector int *__b) {
3503249423Sdim  return (vector int)__builtin_altivec_lvx(__a, __b);
3504210299Sed}
3505210299Sed
3506309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_ld(int __a, const int *__b) {
3507249423Sdim  return (vector int)__builtin_altivec_lvx(__a, __b);
3508210299Sed}
3509210299Sed
3510309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3511309124Sdimvec_ld(int __a, const vector unsigned int *__b) {
3512249423Sdim  return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
3513210299Sed}
3514210299Sed
3515309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3516309124Sdimvec_ld(int __a, const unsigned int *__b) {
3517249423Sdim  return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
3518210299Sed}
3519210299Sed
3520309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
3521309124Sdimvec_ld(int __a, const vector bool int *__b) {
3522249423Sdim  return (vector bool int)__builtin_altivec_lvx(__a, __b);
3523212904Sdim}
3524212904Sdim
3525309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_ld(int __a,
3526309124Sdim                                                   const vector float *__b) {
3527249423Sdim  return (vector float)__builtin_altivec_lvx(__a, __b);
3528210299Sed}
3529210299Sed
3530309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_ld(int __a, const float *__b) {
3531249423Sdim  return (vector float)__builtin_altivec_lvx(__a, __b);
3532210299Sed}
3533210299Sed
3534210299Sed/* vec_lvx */
3535210299Sed
3536309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
3537309124Sdimvec_lvx(int __a, const vector signed char *__b) {
3538249423Sdim  return (vector signed char)__builtin_altivec_lvx(__a, __b);
3539210299Sed}
3540210299Sed
3541309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
3542309124Sdimvec_lvx(int __a, const signed char *__b) {
3543249423Sdim  return (vector signed char)__builtin_altivec_lvx(__a, __b);
3544210299Sed}
3545210299Sed
3546309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3547288943Sdimvec_lvx(int __a, const vector unsigned char *__b) {
3548249423Sdim  return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
3549210299Sed}
3550210299Sed
3551309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3552309124Sdimvec_lvx(int __a, const unsigned char *__b) {
3553249423Sdim  return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
3554210299Sed}
3555210299Sed
3556309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
3557309124Sdimvec_lvx(int __a, const vector bool char *__b) {
3558249423Sdim  return (vector bool char)__builtin_altivec_lvx(__a, __b);
3559212904Sdim}
3560212904Sdim
3561309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lvx(int __a,
3562309124Sdim                                                    const vector short *__b) {
3563249423Sdim  return (vector short)__builtin_altivec_lvx(__a, __b);
3564210299Sed}
3565210299Sed
3566309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lvx(int __a, const short *__b) {
3567249423Sdim  return (vector short)__builtin_altivec_lvx(__a, __b);
3568210299Sed}
3569210299Sed
3570309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
3571288943Sdimvec_lvx(int __a, const vector unsigned short *__b) {
3572249423Sdim  return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
3573210299Sed}
3574210299Sed
3575309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
3576309124Sdimvec_lvx(int __a, const unsigned short *__b) {
3577249423Sdim  return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
3578210299Sed}
3579210299Sed
3580309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
3581309124Sdimvec_lvx(int __a, const vector bool short *__b) {
3582249423Sdim  return (vector bool short)__builtin_altivec_lvx(__a, __b);
3583212904Sdim}
3584212904Sdim
3585309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_lvx(int __a,
3586309124Sdim                                                    const vector pixel *__b) {
3587249423Sdim  return (vector pixel)__builtin_altivec_lvx(__a, __b);
3588212904Sdim}
3589212904Sdim
3590309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lvx(int __a,
3591309124Sdim                                                  const vector int *__b) {
3592249423Sdim  return (vector int)__builtin_altivec_lvx(__a, __b);
3593210299Sed}
3594210299Sed
3595309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lvx(int __a, const int *__b) {
3596249423Sdim  return (vector int)__builtin_altivec_lvx(__a, __b);
3597210299Sed}
3598210299Sed
3599309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3600288943Sdimvec_lvx(int __a, const vector unsigned int *__b) {
3601249423Sdim  return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
3602210299Sed}
3603210299Sed
3604309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3605309124Sdimvec_lvx(int __a, const unsigned int *__b) {
3606249423Sdim  return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
3607210299Sed}
3608210299Sed
3609309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
3610309124Sdimvec_lvx(int __a, const vector bool int *__b) {
3611249423Sdim  return (vector bool int)__builtin_altivec_lvx(__a, __b);
3612212904Sdim}
3613212904Sdim
3614309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lvx(int __a,
3615309124Sdim                                                    const vector float *__b) {
3616249423Sdim  return (vector float)__builtin_altivec_lvx(__a, __b);
3617210299Sed}
3618210299Sed
3619309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lvx(int __a, const float *__b) {
3620249423Sdim  return (vector float)__builtin_altivec_lvx(__a, __b);
3621210299Sed}
3622210299Sed
3623210299Sed/* vec_lde */
3624210299Sed
3625309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
3626309124Sdimvec_lde(int __a, const signed char *__b) {
3627249423Sdim  return (vector signed char)__builtin_altivec_lvebx(__a, __b);
3628210299Sed}
3629210299Sed
3630309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3631309124Sdimvec_lde(int __a, const unsigned char *__b) {
3632249423Sdim  return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
3633210299Sed}
3634210299Sed
3635309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lde(int __a, const short *__b) {
3636249423Sdim  return (vector short)__builtin_altivec_lvehx(__a, __b);
3637210299Sed}
3638210299Sed
3639309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
3640309124Sdimvec_lde(int __a, const unsigned short *__b) {
3641249423Sdim  return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
3642210299Sed}
3643210299Sed
3644309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lde(int __a, const int *__b) {
3645249423Sdim  return (vector int)__builtin_altivec_lvewx(__a, __b);
3646210299Sed}
3647210299Sed
3648309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3649309124Sdimvec_lde(int __a, const unsigned int *__b) {
3650249423Sdim  return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
3651210299Sed}
3652210299Sed
3653309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lde(int __a, const float *__b) {
3654249423Sdim  return (vector float)__builtin_altivec_lvewx(__a, __b);
3655210299Sed}
3656210299Sed
3657210299Sed/* vec_lvebx */
3658210299Sed
3659309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
3660309124Sdimvec_lvebx(int __a, const signed char *__b) {
3661249423Sdim  return (vector signed char)__builtin_altivec_lvebx(__a, __b);
3662210299Sed}
3663210299Sed
3664309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3665309124Sdimvec_lvebx(int __a, const unsigned char *__b) {
3666249423Sdim  return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
3667210299Sed}
3668210299Sed
3669210299Sed/* vec_lvehx */
3670210299Sed
3671309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lvehx(int __a,
3672309124Sdim                                                      const short *__b) {
3673249423Sdim  return (vector short)__builtin_altivec_lvehx(__a, __b);
3674210299Sed}
3675210299Sed
3676309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
3677309124Sdimvec_lvehx(int __a, const unsigned short *__b) {
3678249423Sdim  return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
3679210299Sed}
3680210299Sed
3681210299Sed/* vec_lvewx */
3682210299Sed
3683309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lvewx(int __a, const int *__b) {
3684249423Sdim  return (vector int)__builtin_altivec_lvewx(__a, __b);
3685210299Sed}
3686210299Sed
3687309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3688309124Sdimvec_lvewx(int __a, const unsigned int *__b) {
3689249423Sdim  return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
3690210299Sed}
3691210299Sed
3692309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lvewx(int __a,
3693309124Sdim                                                      const float *__b) {
3694249423Sdim  return (vector float)__builtin_altivec_lvewx(__a, __b);
3695210299Sed}
3696210299Sed
3697210299Sed/* vec_ldl */
3698210299Sed
3699309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
3700309124Sdimvec_ldl(int __a, const vector signed char *__b) {
3701249423Sdim  return (vector signed char)__builtin_altivec_lvxl(__a, __b);
3702210299Sed}
3703210299Sed
3704309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
3705309124Sdimvec_ldl(int __a, const signed char *__b) {
3706249423Sdim  return (vector signed char)__builtin_altivec_lvxl(__a, __b);
3707210299Sed}
3708210299Sed
3709309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3710288943Sdimvec_ldl(int __a, const vector unsigned char *__b) {
3711249423Sdim  return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
3712210299Sed}
3713210299Sed
3714309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3715309124Sdimvec_ldl(int __a, const unsigned char *__b) {
3716249423Sdim  return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
3717210299Sed}
3718210299Sed
3719309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
3720309124Sdimvec_ldl(int __a, const vector bool char *__b) {
3721249423Sdim  return (vector bool char)__builtin_altivec_lvxl(__a, __b);
3722212904Sdim}
3723212904Sdim
3724309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_ldl(int __a,
3725309124Sdim                                                    const vector short *__b) {
3726249423Sdim  return (vector short)__builtin_altivec_lvxl(__a, __b);
3727210299Sed}
3728210299Sed
3729309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_ldl(int __a, const short *__b) {
3730249423Sdim  return (vector short)__builtin_altivec_lvxl(__a, __b);
3731210299Sed}
3732210299Sed
3733309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
3734288943Sdimvec_ldl(int __a, const vector unsigned short *__b) {
3735249423Sdim  return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
3736210299Sed}
3737210299Sed
3738309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
3739309124Sdimvec_ldl(int __a, const unsigned short *__b) {
3740249423Sdim  return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
3741210299Sed}
3742210299Sed
3743309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
3744309124Sdimvec_ldl(int __a, const vector bool short *__b) {
3745249423Sdim  return (vector bool short)__builtin_altivec_lvxl(__a, __b);
3746212904Sdim}
3747212904Sdim
3748309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_ldl(int __a,
3749309124Sdim                                                    const vector pixel *__b) {
3750249423Sdim  return (vector pixel short)__builtin_altivec_lvxl(__a, __b);
3751212904Sdim}
3752212904Sdim
3753309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_ldl(int __a,
3754309124Sdim                                                  const vector int *__b) {
3755249423Sdim  return (vector int)__builtin_altivec_lvxl(__a, __b);
3756210299Sed}
3757210299Sed
3758309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_ldl(int __a, const int *__b) {
3759249423Sdim  return (vector int)__builtin_altivec_lvxl(__a, __b);
3760210299Sed}
3761210299Sed
3762309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3763288943Sdimvec_ldl(int __a, const vector unsigned int *__b) {
3764249423Sdim  return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
3765210299Sed}
3766210299Sed
3767309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3768309124Sdimvec_ldl(int __a, const unsigned int *__b) {
3769249423Sdim  return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
3770210299Sed}
3771210299Sed
3772309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
3773309124Sdimvec_ldl(int __a, const vector bool int *__b) {
3774249423Sdim  return (vector bool int)__builtin_altivec_lvxl(__a, __b);
3775212904Sdim}
3776212904Sdim
3777309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_ldl(int __a,
3778309124Sdim                                                    const vector float *__b) {
3779249423Sdim  return (vector float)__builtin_altivec_lvxl(__a, __b);
3780210299Sed}
3781210299Sed
3782309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_ldl(int __a, const float *__b) {
3783249423Sdim  return (vector float)__builtin_altivec_lvxl(__a, __b);
3784210299Sed}
3785210299Sed
3786210299Sed/* vec_lvxl */
3787210299Sed
3788309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
3789309124Sdimvec_lvxl(int __a, const vector signed char *__b) {
3790249423Sdim  return (vector signed char)__builtin_altivec_lvxl(__a, __b);
3791210299Sed}
3792210299Sed
3793309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
3794309124Sdimvec_lvxl(int __a, const signed char *__b) {
3795249423Sdim  return (vector signed char)__builtin_altivec_lvxl(__a, __b);
3796210299Sed}
3797210299Sed
3798309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3799288943Sdimvec_lvxl(int __a, const vector unsigned char *__b) {
3800249423Sdim  return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
3801210299Sed}
3802210299Sed
3803309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3804309124Sdimvec_lvxl(int __a, const unsigned char *__b) {
3805249423Sdim  return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
3806210299Sed}
3807210299Sed
3808309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
3809309124Sdimvec_lvxl(int __a, const vector bool char *__b) {
3810249423Sdim  return (vector bool char)__builtin_altivec_lvxl(__a, __b);
3811212904Sdim}
3812212904Sdim
3813309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lvxl(int __a,
3814309124Sdim                                                     const vector short *__b) {
3815249423Sdim  return (vector short)__builtin_altivec_lvxl(__a, __b);
3816210299Sed}
3817210299Sed
3818309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lvxl(int __a,
3819309124Sdim                                                     const short *__b) {
3820249423Sdim  return (vector short)__builtin_altivec_lvxl(__a, __b);
3821210299Sed}
3822210299Sed
3823309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
3824288943Sdimvec_lvxl(int __a, const vector unsigned short *__b) {
3825249423Sdim  return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
3826210299Sed}
3827210299Sed
3828309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
3829309124Sdimvec_lvxl(int __a, const unsigned short *__b) {
3830249423Sdim  return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
3831210299Sed}
3832210299Sed
3833309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
3834309124Sdimvec_lvxl(int __a, const vector bool short *__b) {
3835249423Sdim  return (vector bool short)__builtin_altivec_lvxl(__a, __b);
3836212904Sdim}
3837212904Sdim
3838309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_lvxl(int __a,
3839309124Sdim                                                     const vector pixel *__b) {
3840249423Sdim  return (vector pixel)__builtin_altivec_lvxl(__a, __b);
3841212904Sdim}
3842212904Sdim
3843309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lvxl(int __a,
3844309124Sdim                                                   const vector int *__b) {
3845249423Sdim  return (vector int)__builtin_altivec_lvxl(__a, __b);
3846210299Sed}
3847210299Sed
3848309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lvxl(int __a, const int *__b) {
3849249423Sdim  return (vector int)__builtin_altivec_lvxl(__a, __b);
3850210299Sed}
3851210299Sed
3852309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3853288943Sdimvec_lvxl(int __a, const vector unsigned int *__b) {
3854249423Sdim  return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
3855210299Sed}
3856210299Sed
3857309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
3858309124Sdimvec_lvxl(int __a, const unsigned int *__b) {
3859249423Sdim  return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
3860210299Sed}
3861210299Sed
3862309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
3863309124Sdimvec_lvxl(int __a, const vector bool int *__b) {
3864249423Sdim  return (vector bool int)__builtin_altivec_lvxl(__a, __b);
3865212904Sdim}
3866212904Sdim
3867309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lvxl(int __a,
3868309124Sdim                                                     const vector float *__b) {
3869249423Sdim  return (vector float)__builtin_altivec_lvxl(__a, __b);
3870210299Sed}
3871210299Sed
3872309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lvxl(int __a,
3873309124Sdim                                                     const float *__b) {
3874249423Sdim  return (vector float)__builtin_altivec_lvxl(__a, __b);
3875210299Sed}
3876210299Sed
3877210299Sed/* vec_loge */
3878210299Sed
3879309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
3880288943Sdimvec_loge(vector float __a) {
3881249423Sdim  return __builtin_altivec_vlogefp(__a);
3882210299Sed}
3883210299Sed
3884210299Sed/* vec_vlogefp */
3885210299Sed
3886309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
3887288943Sdimvec_vlogefp(vector float __a) {
3888249423Sdim  return __builtin_altivec_vlogefp(__a);
3889210299Sed}
3890210299Sed
3891210299Sed/* vec_lvsl */
3892210299Sed
3893280031Sdim#ifdef __LITTLE_ENDIAN__
3894309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3895288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
3896288943Sdimloads/stores"))) vec_lvsl(int __a, const signed char *__b) {
3897288943Sdim  vector unsigned char mask =
3898288943Sdim      (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
3899288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
3900288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
3901280031Sdim  return vec_perm(mask, mask, reverse);
3902280031Sdim}
3903280031Sdim#else
3904309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3905309124Sdimvec_lvsl(int __a, const signed char *__b) {
3906249423Sdim  return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
3907210299Sed}
3908280031Sdim#endif
3909210299Sed
3910280031Sdim#ifdef __LITTLE_ENDIAN__
3911309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3912288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
3913288943Sdimloads/stores"))) vec_lvsl(int __a, const unsigned char *__b) {
3914280031Sdim  vector unsigned char mask =
3915288943Sdim      (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
3916288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
3917288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
3918280031Sdim  return vec_perm(mask, mask, reverse);
3919280031Sdim}
3920280031Sdim#else
3921309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3922309124Sdimvec_lvsl(int __a, const unsigned char *__b) {
3923249423Sdim  return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
3924210299Sed}
3925280031Sdim#endif
3926210299Sed
3927280031Sdim#ifdef __LITTLE_ENDIAN__
3928309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3929288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
3930288943Sdimloads/stores"))) vec_lvsl(int __a, const short *__b) {
3931280031Sdim  vector unsigned char mask =
3932288943Sdim      (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
3933288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
3934288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
3935280031Sdim  return vec_perm(mask, mask, reverse);
3936280031Sdim}
3937280031Sdim#else
3938309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
3939309124Sdim                                                             const short *__b) {
3940249423Sdim  return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
3941210299Sed}
3942280031Sdim#endif
3943210299Sed
3944280031Sdim#ifdef __LITTLE_ENDIAN__
3945309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3946288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
3947288943Sdimloads/stores"))) vec_lvsl(int __a, const unsigned short *__b) {
3948280031Sdim  vector unsigned char mask =
3949288943Sdim      (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
3950288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
3951288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
3952280031Sdim  return vec_perm(mask, mask, reverse);
3953280031Sdim}
3954280031Sdim#else
3955309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3956309124Sdimvec_lvsl(int __a, const unsigned short *__b) {
3957249423Sdim  return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
3958210299Sed}
3959280031Sdim#endif
3960210299Sed
3961280031Sdim#ifdef __LITTLE_ENDIAN__
3962309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3963288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
3964288943Sdimloads/stores"))) vec_lvsl(int __a, const int *__b) {
3965280031Sdim  vector unsigned char mask =
3966288943Sdim      (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
3967288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
3968288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
3969280031Sdim  return vec_perm(mask, mask, reverse);
3970280031Sdim}
3971280031Sdim#else
3972309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
3973309124Sdim                                                             const int *__b) {
3974249423Sdim  return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
3975210299Sed}
3976280031Sdim#endif
3977210299Sed
3978280031Sdim#ifdef __LITTLE_ENDIAN__
3979309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3980288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
3981288943Sdimloads/stores"))) vec_lvsl(int __a, const unsigned int *__b) {
3982280031Sdim  vector unsigned char mask =
3983288943Sdim      (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
3984288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
3985288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
3986280031Sdim  return vec_perm(mask, mask, reverse);
3987280031Sdim}
3988280031Sdim#else
3989309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3990309124Sdimvec_lvsl(int __a, const unsigned int *__b) {
3991249423Sdim  return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
3992210299Sed}
3993280031Sdim#endif
3994210299Sed
3995280031Sdim#ifdef __LITTLE_ENDIAN__
3996309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
3997288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
3998288943Sdimloads/stores"))) vec_lvsl(int __a, const float *__b) {
3999280031Sdim  vector unsigned char mask =
4000288943Sdim      (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4001288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4002288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
4003280031Sdim  return vec_perm(mask, mask, reverse);
4004280031Sdim}
4005280031Sdim#else
4006309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
4007309124Sdim                                                             const float *__b) {
4008249423Sdim  return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
4009210299Sed}
4010280031Sdim#endif
4011210299Sed
4012210299Sed/* vec_lvsr */
4013210299Sed
4014280031Sdim#ifdef __LITTLE_ENDIAN__
4015309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4016288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
4017288943Sdimloads/stores"))) vec_lvsr(int __a, const signed char *__b) {
4018280031Sdim  vector unsigned char mask =
4019288943Sdim      (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4020288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4021288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
4022280031Sdim  return vec_perm(mask, mask, reverse);
4023280031Sdim}
4024280031Sdim#else
4025309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4026309124Sdimvec_lvsr(int __a, const signed char *__b) {
4027249423Sdim  return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4028210299Sed}
4029280031Sdim#endif
4030210299Sed
4031280031Sdim#ifdef __LITTLE_ENDIAN__
4032309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4033288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
4034288943Sdimloads/stores"))) vec_lvsr(int __a, const unsigned char *__b) {
4035280031Sdim  vector unsigned char mask =
4036288943Sdim      (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4037288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4038288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
4039280031Sdim  return vec_perm(mask, mask, reverse);
4040280031Sdim}
4041280031Sdim#else
4042309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4043309124Sdimvec_lvsr(int __a, const unsigned char *__b) {
4044249423Sdim  return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4045210299Sed}
4046280031Sdim#endif
4047210299Sed
4048280031Sdim#ifdef __LITTLE_ENDIAN__
4049309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4050288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
4051288943Sdimloads/stores"))) vec_lvsr(int __a, const short *__b) {
4052280031Sdim  vector unsigned char mask =
4053288943Sdim      (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4054288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4055288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
4056280031Sdim  return vec_perm(mask, mask, reverse);
4057280031Sdim}
4058280031Sdim#else
4059309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
4060309124Sdim                                                             const short *__b) {
4061249423Sdim  return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4062210299Sed}
4063280031Sdim#endif
4064210299Sed
4065280031Sdim#ifdef __LITTLE_ENDIAN__
4066309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4067288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
4068288943Sdimloads/stores"))) vec_lvsr(int __a, const unsigned short *__b) {
4069280031Sdim  vector unsigned char mask =
4070288943Sdim      (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4071288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4072288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
4073280031Sdim  return vec_perm(mask, mask, reverse);
4074280031Sdim}
4075280031Sdim#else
4076309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4077309124Sdimvec_lvsr(int __a, const unsigned short *__b) {
4078249423Sdim  return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4079210299Sed}
4080280031Sdim#endif
4081210299Sed
4082280031Sdim#ifdef __LITTLE_ENDIAN__
4083309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4084288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
4085288943Sdimloads/stores"))) vec_lvsr(int __a, const int *__b) {
4086280031Sdim  vector unsigned char mask =
4087288943Sdim      (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4088288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4089288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
4090280031Sdim  return vec_perm(mask, mask, reverse);
4091280031Sdim}
4092280031Sdim#else
4093309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
4094309124Sdim                                                             const int *__b) {
4095249423Sdim  return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4096210299Sed}
4097280031Sdim#endif
4098210299Sed
4099280031Sdim#ifdef __LITTLE_ENDIAN__
4100309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4101288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
4102288943Sdimloads/stores"))) vec_lvsr(int __a, const unsigned int *__b) {
4103280031Sdim  vector unsigned char mask =
4104288943Sdim      (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4105288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4106288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
4107280031Sdim  return vec_perm(mask, mask, reverse);
4108280031Sdim}
4109280031Sdim#else
4110309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4111309124Sdimvec_lvsr(int __a, const unsigned int *__b) {
4112249423Sdim  return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4113210299Sed}
4114280031Sdim#endif
4115210299Sed
4116280031Sdim#ifdef __LITTLE_ENDIAN__
4117309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4118288943Sdim    __attribute__((__deprecated__("use assignment for unaligned little endian \
4119288943Sdimloads/stores"))) vec_lvsr(int __a, const float *__b) {
4120280031Sdim  vector unsigned char mask =
4121288943Sdim      (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4122288943Sdim  vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
4123288943Sdim                                  7,  6,  5,  4,  3,  2,  1, 0};
4124280031Sdim  return vec_perm(mask, mask, reverse);
4125280031Sdim}
4126280031Sdim#else
4127309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
4128309124Sdim                                                             const float *__b) {
4129249423Sdim  return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
4130210299Sed}
4131280031Sdim#endif
4132210299Sed
4133210299Sed/* vec_madd */
4134309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
4135296417Sdimvec_mladd(vector signed short, vector signed short, vector signed short);
4136309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
4137296417Sdimvec_mladd(vector signed short, vector unsigned short, vector unsigned short);
4138309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
4139296417Sdimvec_mladd(vector unsigned short, vector signed short, vector signed short);
4140309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
4141296417Sdimvec_mladd(vector unsigned short, vector unsigned short, vector unsigned short);
4142210299Sed
4143309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai vec_madd(
4144309124Sdim    vector signed short __a, vector signed short __b, vector signed short __c) {
4145309124Sdim  return vec_mladd(__a, __b, __c);
4146296417Sdim}
4147296417Sdim
4148309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
4149296417Sdimvec_madd(vector signed short __a, vector unsigned short __b,
4150296417Sdim         vector unsigned short __c) {
4151296417Sdim  return vec_mladd(__a, __b, __c);
4152296417Sdim}
4153296417Sdim
4154309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
4155296417Sdimvec_madd(vector unsigned short __a, vector signed short __b,
4156296417Sdim         vector signed short __c) {
4157296417Sdim  return vec_mladd(__a, __b, __c);
4158296417Sdim}
4159296417Sdim
4160309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
4161296417Sdimvec_madd(vector unsigned short __a, vector unsigned short __b,
4162296417Sdim         vector unsigned short __c) {
4163296417Sdim  return vec_mladd(__a, __b, __c);
4164296417Sdim}
4165296417Sdim
4166309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_madd(vector float __a,
4167309124Sdim                                                     vector float __b,
4168309124Sdim                                                     vector float __c) {
4169288943Sdim#ifdef __VSX__
4170288943Sdim  return __builtin_vsx_xvmaddasp(__a, __b, __c);
4171288943Sdim#else
4172249423Sdim  return __builtin_altivec_vmaddfp(__a, __b, __c);
4173288943Sdim#endif
4174210299Sed}
4175210299Sed
4176288943Sdim#ifdef __VSX__
4177309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_madd(vector double __a,
4178309124Sdim                                                      vector double __b,
4179309124Sdim                                                      vector double __c) {
4180288943Sdim  return __builtin_vsx_xvmaddadp(__a, __b, __c);
4181288943Sdim}
4182288943Sdim#endif
4183288943Sdim
4184210299Sed/* vec_vmaddfp */
4185210299Sed
4186309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
4187288943Sdimvec_vmaddfp(vector float __a, vector float __b, vector float __c) {
4188249423Sdim  return __builtin_altivec_vmaddfp(__a, __b, __c);
4189210299Sed}
4190210299Sed
4191210299Sed/* vec_madds */
4192210299Sed
4193309124Sdimstatic __inline__ vector signed short __attribute__((__always_inline__))
4194288943Sdimvec_madds(vector signed short __a, vector signed short __b,
4195288943Sdim          vector signed short __c) {
4196249423Sdim  return __builtin_altivec_vmhaddshs(__a, __b, __c);
4197210299Sed}
4198210299Sed
4199210299Sed/* vec_vmhaddshs */
4200309124Sdimstatic __inline__ vector signed short __attribute__((__always_inline__))
4201288943Sdimvec_vmhaddshs(vector signed short __a, vector signed short __b,
4202288943Sdim              vector signed short __c) {
4203249423Sdim  return __builtin_altivec_vmhaddshs(__a, __b, __c);
4204210299Sed}
4205210299Sed
4206288943Sdim/* vec_msub */
4207288943Sdim
4208288943Sdim#ifdef __VSX__
4209309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_msub(vector float __a,
4210309124Sdim                                                     vector float __b,
4211309124Sdim                                                     vector float __c) {
4212288943Sdim  return __builtin_vsx_xvmsubasp(__a, __b, __c);
4213288943Sdim}
4214288943Sdim
4215309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_msub(vector double __a,
4216309124Sdim                                                      vector double __b,
4217309124Sdim                                                      vector double __c) {
4218288943Sdim  return __builtin_vsx_xvmsubadp(__a, __b, __c);
4219288943Sdim}
4220288943Sdim#endif
4221288943Sdim
4222207619Srdivacky/* vec_max */
4223207619Srdivacky
4224309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
4225309124Sdimvec_max(vector signed char __a, vector signed char __b) {
4226249423Sdim  return __builtin_altivec_vmaxsb(__a, __b);
4227207619Srdivacky}
4228207619Srdivacky
4229309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
4230309124Sdimvec_max(vector bool char __a, vector signed char __b) {
4231249423Sdim  return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
4232212904Sdim}
4233212904Sdim
4234309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
4235309124Sdimvec_max(vector signed char __a, vector bool char __b) {
4236249423Sdim  return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
4237212904Sdim}
4238212904Sdim
4239309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4240309124Sdimvec_max(vector unsigned char __a, vector unsigned char __b) {
4241249423Sdim  return __builtin_altivec_vmaxub(__a, __b);
4242207619Srdivacky}
4243207619Srdivacky
4244309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4245309124Sdimvec_max(vector bool char __a, vector unsigned char __b) {
4246249423Sdim  return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
4247212904Sdim}
4248212904Sdim
4249309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4250309124Sdimvec_max(vector unsigned char __a, vector bool char __b) {
4251249423Sdim  return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
4252212904Sdim}
4253212904Sdim
4254309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
4255309124Sdim                                                    vector short __b) {
4256249423Sdim  return __builtin_altivec_vmaxsh(__a, __b);
4257207619Srdivacky}
4258207619Srdivacky
4259309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_max(vector bool short __a,
4260309124Sdim                                                    vector short __b) {
4261249423Sdim  return __builtin_altivec_vmaxsh((vector short)__a, __b);
4262212904Sdim}
4263212904Sdim
4264309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
4265309124Sdim                                                    vector bool short __b) {
4266249423Sdim  return __builtin_altivec_vmaxsh(__a, (vector short)__b);
4267212904Sdim}
4268212904Sdim
4269309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
4270309124Sdimvec_max(vector unsigned short __a, vector unsigned short __b) {
4271249423Sdim  return __builtin_altivec_vmaxuh(__a, __b);
4272207619Srdivacky}
4273207619Srdivacky
4274309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
4275309124Sdimvec_max(vector bool short __a, vector unsigned short __b) {
4276249423Sdim  return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
4277212904Sdim}
4278212904Sdim
4279309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
4280309124Sdimvec_max(vector unsigned short __a, vector bool short __b) {
4281249423Sdim  return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
4282212904Sdim}
4283212904Sdim
4284309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
4285309124Sdim                                                  vector int __b) {
4286249423Sdim  return __builtin_altivec_vmaxsw(__a, __b);
4287207619Srdivacky}
4288207619Srdivacky
4289309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_max(vector bool int __a,
4290309124Sdim                                                  vector int __b) {
4291249423Sdim  return __builtin_altivec_vmaxsw((vector int)__a, __b);
4292212904Sdim}
4293212904Sdim
4294309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
4295309124Sdim                                                  vector bool int __b) {
4296249423Sdim  return __builtin_altivec_vmaxsw(__a, (vector int)__b);
4297212904Sdim}
4298212904Sdim
4299309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
4300309124Sdimvec_max(vector unsigned int __a, vector unsigned int __b) {
4301249423Sdim  return __builtin_altivec_vmaxuw(__a, __b);
4302207619Srdivacky}
4303207619Srdivacky
4304309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
4305309124Sdimvec_max(vector bool int __a, vector unsigned int __b) {
4306249423Sdim  return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
4307212904Sdim}
4308212904Sdim
4309309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
4310309124Sdimvec_max(vector unsigned int __a, vector bool int __b) {
4311249423Sdim  return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
4312212904Sdim}
4313212904Sdim
4314288943Sdim#ifdef __POWER8_VECTOR__
4315309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
4316288943Sdimvec_max(vector signed long long __a, vector signed long long __b) {
4317288943Sdim  return __builtin_altivec_vmaxsd(__a, __b);
4318288943Sdim}
4319288943Sdim
4320309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
4321288943Sdimvec_max(vector bool long long __a, vector signed long long __b) {
4322288943Sdim  return __builtin_altivec_vmaxsd((vector signed long long)__a, __b);
4323288943Sdim}
4324288943Sdim
4325309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
4326309124Sdimvec_max(vector signed long long __a, vector bool long long __b) {
4327288943Sdim  return __builtin_altivec_vmaxsd(__a, (vector signed long long)__b);
4328288943Sdim}
4329288943Sdim
4330309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
4331288943Sdimvec_max(vector unsigned long long __a, vector unsigned long long __b) {
4332288943Sdim  return __builtin_altivec_vmaxud(__a, __b);
4333288943Sdim}
4334288943Sdim
4335309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
4336288943Sdimvec_max(vector bool long long __a, vector unsigned long long __b) {
4337288943Sdim  return __builtin_altivec_vmaxud((vector unsigned long long)__a, __b);
4338288943Sdim}
4339288943Sdim
4340309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
4341288943Sdimvec_max(vector unsigned long long __a, vector bool long long __b) {
4342288943Sdim  return __builtin_altivec_vmaxud(__a, (vector unsigned long long)__b);
4343288943Sdim}
4344288943Sdim#endif
4345288943Sdim
4346309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_max(vector float __a,
4347309124Sdim                                                    vector float __b) {
4348280031Sdim#ifdef __VSX__
4349280031Sdim  return __builtin_vsx_xvmaxsp(__a, __b);
4350280031Sdim#else
4351249423Sdim  return __builtin_altivec_vmaxfp(__a, __b);
4352280031Sdim#endif
4353207619Srdivacky}
4354207619Srdivacky
4355280031Sdim#ifdef __VSX__
4356309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_max(vector double __a,
4357309124Sdim                                                     vector double __b) {
4358280031Sdim  return __builtin_vsx_xvmaxdp(__a, __b);
4359280031Sdim}
4360280031Sdim#endif
4361280031Sdim
4362210299Sed/* vec_vmaxsb */
4363210299Sed
4364309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
4365309124Sdimvec_vmaxsb(vector signed char __a, vector signed char __b) {
4366249423Sdim  return __builtin_altivec_vmaxsb(__a, __b);
4367210299Sed}
4368210299Sed
4369309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
4370309124Sdimvec_vmaxsb(vector bool char __a, vector signed char __b) {
4371249423Sdim  return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
4372212904Sdim}
4373212904Sdim
4374309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
4375309124Sdimvec_vmaxsb(vector signed char __a, vector bool char __b) {
4376249423Sdim  return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
4377212904Sdim}
4378212904Sdim
4379210299Sed/* vec_vmaxub */
4380210299Sed
4381309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4382309124Sdimvec_vmaxub(vector unsigned char __a, vector unsigned char __b) {
4383249423Sdim  return __builtin_altivec_vmaxub(__a, __b);
4384210299Sed}
4385210299Sed
4386309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4387309124Sdimvec_vmaxub(vector bool char __a, vector unsigned char __b) {
4388249423Sdim  return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
4389212904Sdim}
4390212904Sdim
4391309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4392309124Sdimvec_vmaxub(vector unsigned char __a, vector bool char __b) {
4393249423Sdim  return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
4394212904Sdim}
4395212904Sdim
4396210299Sed/* vec_vmaxsh */
4397210299Sed
4398309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
4399309124Sdim                                                       vector short __b) {
4400249423Sdim  return __builtin_altivec_vmaxsh(__a, __b);
4401210299Sed}
4402210299Sed
4403309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector bool short __a,
4404309124Sdim                                                       vector short __b) {
4405249423Sdim  return __builtin_altivec_vmaxsh((vector short)__a, __b);
4406212904Sdim}
4407212904Sdim
4408309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
4409309124Sdim                                                       vector bool short __b) {
4410249423Sdim  return __builtin_altivec_vmaxsh(__a, (vector short)__b);
4411212904Sdim}
4412212904Sdim
4413210299Sed/* vec_vmaxuh */
4414210299Sed
4415309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
4416288943Sdimvec_vmaxuh(vector unsigned short __a, vector unsigned short __b) {
4417249423Sdim  return __builtin_altivec_vmaxuh(__a, __b);
4418210299Sed}
4419210299Sed
4420309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
4421288943Sdimvec_vmaxuh(vector bool short __a, vector unsigned short __b) {
4422249423Sdim  return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
4423212904Sdim}
4424212904Sdim
4425309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
4426309124Sdimvec_vmaxuh(vector unsigned short __a, vector bool short __b) {
4427249423Sdim  return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
4428212904Sdim}
4429212904Sdim
4430210299Sed/* vec_vmaxsw */
4431210299Sed
4432309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
4433309124Sdim                                                     vector int __b) {
4434249423Sdim  return __builtin_altivec_vmaxsw(__a, __b);
4435210299Sed}
4436210299Sed
4437309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector bool int __a,
4438309124Sdim                                                     vector int __b) {
4439249423Sdim  return __builtin_altivec_vmaxsw((vector int)__a, __b);
4440212904Sdim}
4441212904Sdim
4442309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
4443309124Sdim                                                     vector bool int __b) {
4444249423Sdim  return __builtin_altivec_vmaxsw(__a, (vector int)__b);
4445212904Sdim}
4446212904Sdim
4447210299Sed/* vec_vmaxuw */
4448210299Sed
4449309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
4450309124Sdimvec_vmaxuw(vector unsigned int __a, vector unsigned int __b) {
4451249423Sdim  return __builtin_altivec_vmaxuw(__a, __b);
4452210299Sed}
4453210299Sed
4454309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
4455309124Sdimvec_vmaxuw(vector bool int __a, vector unsigned int __b) {
4456249423Sdim  return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
4457212904Sdim}
4458212904Sdim
4459309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
4460309124Sdimvec_vmaxuw(vector unsigned int __a, vector bool int __b) {
4461249423Sdim  return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
4462212904Sdim}
4463212904Sdim
4464210299Sed/* vec_vmaxfp */
4465210299Sed
4466309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
4467288943Sdimvec_vmaxfp(vector float __a, vector float __b) {
4468280031Sdim#ifdef __VSX__
4469280031Sdim  return __builtin_vsx_xvmaxsp(__a, __b);
4470280031Sdim#else
4471249423Sdim  return __builtin_altivec_vmaxfp(__a, __b);
4472280031Sdim#endif
4473210299Sed}
4474210299Sed
4475210299Sed/* vec_mergeh */
4476210299Sed
4477309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
4478309124Sdimvec_mergeh(vector signed char __a, vector signed char __b) {
4479288943Sdim  return vec_perm(__a, __b,
4480288943Sdim                  (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
4481288943Sdim                                         0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
4482288943Sdim                                         0x06, 0x16, 0x07, 0x17));
4483210299Sed}
4484210299Sed
4485309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4486309124Sdimvec_mergeh(vector unsigned char __a, vector unsigned char __b) {
4487288943Sdim  return vec_perm(__a, __b,
4488288943Sdim                  (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
4489288943Sdim                                         0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
4490288943Sdim                                         0x06, 0x16, 0x07, 0x17));
4491210299Sed}
4492210299Sed
4493309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
4494309124Sdimvec_mergeh(vector bool char __a, vector bool char __b) {
4495288943Sdim  return vec_perm(__a, __b,
4496288943Sdim                  (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
4497288943Sdim                                         0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
4498288943Sdim                                         0x06, 0x16, 0x07, 0x17));
4499212904Sdim}
4500212904Sdim
4501309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_mergeh(vector short __a,
4502309124Sdim                                                       vector short __b) {
4503288943Sdim  return vec_perm(__a, __b,
4504288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
4505288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
4506288943Sdim                                         0x06, 0x07, 0x16, 0x17));
4507210299Sed}
4508210299Sed
4509309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
4510288943Sdimvec_mergeh(vector unsigned short __a, vector unsigned short __b) {
4511288943Sdim  return vec_perm(__a, __b,
4512288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
4513288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
4514288943Sdim                                         0x06, 0x07, 0x16, 0x17));
4515210299Sed}
4516210299Sed
4517309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
4518309124Sdimvec_mergeh(vector bool short __a, vector bool short __b) {
4519288943Sdim  return vec_perm(__a, __b,
4520288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
4521288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
4522288943Sdim                                         0x06, 0x07, 0x16, 0x17));
4523212904Sdim}
4524212904Sdim
4525309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_mergeh(vector pixel __a,
4526309124Sdim                                                       vector pixel __b) {
4527288943Sdim  return vec_perm(__a, __b,
4528288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
4529288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
4530288943Sdim                                         0x06, 0x07, 0x16, 0x17));
4531212904Sdim}
4532212904Sdim
4533309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_mergeh(vector int __a,
4534309124Sdim                                                     vector int __b) {
4535288943Sdim  return vec_perm(__a, __b,
4536288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
4537288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
4538288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4539210299Sed}
4540210299Sed
4541309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
4542309124Sdimvec_mergeh(vector unsigned int __a, vector unsigned int __b) {
4543288943Sdim  return vec_perm(__a, __b,
4544288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
4545288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
4546288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4547210299Sed}
4548210299Sed
4549309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_mergeh(vector bool int __a,
4550309124Sdim                                                          vector bool int __b) {
4551288943Sdim  return vec_perm(__a, __b,
4552288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
4553288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
4554288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4555212904Sdim}
4556212904Sdim
4557309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_mergeh(vector float __a,
4558309124Sdim                                                       vector float __b) {
4559288943Sdim  return vec_perm(__a, __b,
4560288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
4561288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
4562288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4563210299Sed}
4564210299Sed
4565288943Sdim#ifdef __VSX__
4566309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
4567288943Sdimvec_mergeh(vector signed long long __a, vector signed long long __b) {
4568288943Sdim  return vec_perm(__a, __b,
4569309124Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
4570309124Sdim                                         0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
4571288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4572288943Sdim}
4573288943Sdim
4574309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
4575288943Sdimvec_mergeh(vector signed long long __a, vector bool long long __b) {
4576288943Sdim  return vec_perm(__a, (vector signed long long)__b,
4577309124Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
4578309124Sdim                                         0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
4579288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4580288943Sdim}
4581288943Sdim
4582309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
4583288943Sdimvec_mergeh(vector bool long long __a, vector signed long long __b) {
4584288943Sdim  return vec_perm((vector signed long long)__a, __b,
4585309124Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
4586309124Sdim                                         0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
4587288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4588288943Sdim}
4589288943Sdim
4590309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
4591288943Sdimvec_mergeh(vector unsigned long long __a, vector unsigned long long __b) {
4592288943Sdim  return vec_perm(__a, __b,
4593309124Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
4594309124Sdim                                         0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
4595288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4596288943Sdim}
4597288943Sdim
4598309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
4599288943Sdimvec_mergeh(vector unsigned long long __a, vector bool long long __b) {
4600288943Sdim  return vec_perm(__a, (vector unsigned long long)__b,
4601309124Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
4602309124Sdim                                         0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
4603288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4604288943Sdim}
4605288943Sdim
4606309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
4607288943Sdimvec_mergeh(vector bool long long __a, vector unsigned long long __b) {
4608288943Sdim  return vec_perm((vector unsigned long long)__a, __b,
4609309124Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
4610309124Sdim                                         0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
4611288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4612288943Sdim}
4613296417Sdim
4614309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
4615296417Sdimvec_mergeh(vector bool long long __a, vector bool long long __b) {
4616296417Sdim  return vec_perm(__a, __b,
4617309124Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
4618309124Sdim                                         0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
4619309124Sdim                                         0x14, 0x15, 0x16, 0x17));
4620296417Sdim}
4621296417Sdim
4622309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_mergeh(vector double __a,
4623309124Sdim                                                        vector double __b) {
4624288943Sdim  return vec_perm(__a, __b,
4625309124Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
4626309124Sdim                                         0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
4627288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4628288943Sdim}
4629309124Sdimstatic __inline__ vector double __ATTRS_o_ai
4630309124Sdimvec_mergeh(vector double __a, vector bool long long __b) {
4631288943Sdim  return vec_perm(__a, (vector double)__b,
4632309124Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
4633309124Sdim                                         0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
4634288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4635288943Sdim}
4636309124Sdimstatic __inline__ vector double __ATTRS_o_ai
4637309124Sdimvec_mergeh(vector bool long long __a, vector double __b) {
4638288943Sdim  return vec_perm((vector double)__a, __b,
4639309124Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
4640309124Sdim                                         0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
4641288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4642288943Sdim}
4643288943Sdim#endif
4644288943Sdim
4645210299Sed/* vec_vmrghb */
4646210299Sed
4647210299Sed#define __builtin_altivec_vmrghb vec_vmrghb
4648210299Sed
4649309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
4650309124Sdimvec_vmrghb(vector signed char __a, vector signed char __b) {
4651288943Sdim  return vec_perm(__a, __b,
4652288943Sdim                  (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
4653288943Sdim                                         0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
4654288943Sdim                                         0x06, 0x16, 0x07, 0x17));
4655210299Sed}
4656210299Sed
4657309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4658309124Sdimvec_vmrghb(vector unsigned char __a, vector unsigned char __b) {
4659288943Sdim  return vec_perm(__a, __b,
4660288943Sdim                  (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
4661288943Sdim                                         0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
4662288943Sdim                                         0x06, 0x16, 0x07, 0x17));
4663210299Sed}
4664210299Sed
4665309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
4666309124Sdimvec_vmrghb(vector bool char __a, vector bool char __b) {
4667288943Sdim  return vec_perm(__a, __b,
4668288943Sdim                  (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
4669288943Sdim                                         0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
4670288943Sdim                                         0x06, 0x16, 0x07, 0x17));
4671212904Sdim}
4672212904Sdim
4673210299Sed/* vec_vmrghh */
4674210299Sed
4675210299Sed#define __builtin_altivec_vmrghh vec_vmrghh
4676210299Sed
4677309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vmrghh(vector short __a,
4678309124Sdim                                                       vector short __b) {
4679288943Sdim  return vec_perm(__a, __b,
4680288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
4681288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
4682288943Sdim                                         0x06, 0x07, 0x16, 0x17));
4683210299Sed}
4684210299Sed
4685309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
4686288943Sdimvec_vmrghh(vector unsigned short __a, vector unsigned short __b) {
4687288943Sdim  return vec_perm(__a, __b,
4688288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
4689288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
4690288943Sdim                                         0x06, 0x07, 0x16, 0x17));
4691210299Sed}
4692210299Sed
4693309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
4694309124Sdimvec_vmrghh(vector bool short __a, vector bool short __b) {
4695288943Sdim  return vec_perm(__a, __b,
4696288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
4697288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
4698288943Sdim                                         0x06, 0x07, 0x16, 0x17));
4699212904Sdim}
4700212904Sdim
4701309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vmrghh(vector pixel __a,
4702309124Sdim                                                       vector pixel __b) {
4703288943Sdim  return vec_perm(__a, __b,
4704288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
4705288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
4706288943Sdim                                         0x06, 0x07, 0x16, 0x17));
4707212904Sdim}
4708212904Sdim
4709210299Sed/* vec_vmrghw */
4710210299Sed
4711210299Sed#define __builtin_altivec_vmrghw vec_vmrghw
4712210299Sed
4713309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vmrghw(vector int __a,
4714309124Sdim                                                     vector int __b) {
4715288943Sdim  return vec_perm(__a, __b,
4716288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
4717288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
4718288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4719210299Sed}
4720210299Sed
4721309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
4722309124Sdimvec_vmrghw(vector unsigned int __a, vector unsigned int __b) {
4723288943Sdim  return vec_perm(__a, __b,
4724288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
4725288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
4726288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4727210299Sed}
4728210299Sed
4729309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_vmrghw(vector bool int __a,
4730309124Sdim                                                          vector bool int __b) {
4731288943Sdim  return vec_perm(__a, __b,
4732288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
4733288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
4734288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4735212904Sdim}
4736212904Sdim
4737309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vmrghw(vector float __a,
4738309124Sdim                                                       vector float __b) {
4739288943Sdim  return vec_perm(__a, __b,
4740288943Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
4741288943Sdim                                         0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
4742288943Sdim                                         0x14, 0x15, 0x16, 0x17));
4743210299Sed}
4744210299Sed
4745210299Sed/* vec_mergel */
4746210299Sed
4747309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
4748309124Sdimvec_mergel(vector signed char __a, vector signed char __b) {
4749288943Sdim  return vec_perm(__a, __b,
4750288943Sdim                  (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
4751288943Sdim                                         0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
4752288943Sdim                                         0x0E, 0x1E, 0x0F, 0x1F));
4753210299Sed}
4754210299Sed
4755309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4756309124Sdimvec_mergel(vector unsigned char __a, vector unsigned char __b) {
4757288943Sdim  return vec_perm(__a, __b,
4758288943Sdim                  (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
4759288943Sdim                                         0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
4760288943Sdim                                         0x0E, 0x1E, 0x0F, 0x1F));
4761210299Sed}
4762210299Sed
4763309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
4764309124Sdimvec_mergel(vector bool char __a, vector bool char __b) {
4765288943Sdim  return vec_perm(__a, __b,
4766288943Sdim                  (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
4767288943Sdim                                         0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
4768288943Sdim                                         0x0E, 0x1E, 0x0F, 0x1F));
4769212904Sdim}
4770212904Sdim
4771309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_mergel(vector short __a,
4772309124Sdim                                                       vector short __b) {
4773288943Sdim  return vec_perm(__a, __b,
4774288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
4775288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
4776288943Sdim                                         0x0E, 0x0F, 0x1E, 0x1F));
4777210299Sed}
4778210299Sed
4779309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
4780288943Sdimvec_mergel(vector unsigned short __a, vector unsigned short __b) {
4781288943Sdim  return vec_perm(__a, __b,
4782288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
4783288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
4784288943Sdim                                         0x0E, 0x0F, 0x1E, 0x1F));
4785210299Sed}
4786210299Sed
4787309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
4788309124Sdimvec_mergel(vector bool short __a, vector bool short __b) {
4789288943Sdim  return vec_perm(__a, __b,
4790288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
4791288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
4792288943Sdim                                         0x0E, 0x0F, 0x1E, 0x1F));
4793212904Sdim}
4794212904Sdim
4795309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_mergel(vector pixel __a,
4796309124Sdim                                                       vector pixel __b) {
4797288943Sdim  return vec_perm(__a, __b,
4798288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
4799288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
4800288943Sdim                                         0x0E, 0x0F, 0x1E, 0x1F));
4801212904Sdim}
4802212904Sdim
4803309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_mergel(vector int __a,
4804309124Sdim                                                     vector int __b) {
4805288943Sdim  return vec_perm(__a, __b,
4806288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
4807288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
4808288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4809210299Sed}
4810210299Sed
4811309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
4812309124Sdimvec_mergel(vector unsigned int __a, vector unsigned int __b) {
4813288943Sdim  return vec_perm(__a, __b,
4814288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
4815288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
4816288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4817210299Sed}
4818210299Sed
4819309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_mergel(vector bool int __a,
4820309124Sdim                                                          vector bool int __b) {
4821288943Sdim  return vec_perm(__a, __b,
4822288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
4823288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
4824288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4825212904Sdim}
4826212904Sdim
4827309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_mergel(vector float __a,
4828309124Sdim                                                       vector float __b) {
4829288943Sdim  return vec_perm(__a, __b,
4830288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
4831288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
4832288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4833210299Sed}
4834210299Sed
4835288943Sdim#ifdef __VSX__
4836309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
4837288943Sdimvec_mergel(vector signed long long __a, vector signed long long __b) {
4838288943Sdim  return vec_perm(__a, __b,
4839309124Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
4840309124Sdim                                         0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
4841288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4842288943Sdim}
4843309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
4844288943Sdimvec_mergel(vector signed long long __a, vector bool long long __b) {
4845288943Sdim  return vec_perm(__a, (vector signed long long)__b,
4846309124Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
4847309124Sdim                                         0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
4848288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4849288943Sdim}
4850309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
4851288943Sdimvec_mergel(vector bool long long __a, vector signed long long __b) {
4852288943Sdim  return vec_perm((vector signed long long)__a, __b,
4853309124Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
4854309124Sdim                                         0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
4855288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4856288943Sdim}
4857309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
4858288943Sdimvec_mergel(vector unsigned long long __a, vector unsigned long long __b) {
4859288943Sdim  return vec_perm(__a, __b,
4860309124Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
4861309124Sdim                                         0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
4862288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4863288943Sdim}
4864309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
4865288943Sdimvec_mergel(vector unsigned long long __a, vector bool long long __b) {
4866288943Sdim  return vec_perm(__a, (vector unsigned long long)__b,
4867309124Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
4868309124Sdim                                         0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
4869288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4870288943Sdim}
4871309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
4872288943Sdimvec_mergel(vector bool long long __a, vector unsigned long long __b) {
4873288943Sdim  return vec_perm((vector unsigned long long)__a, __b,
4874309124Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
4875309124Sdim                                         0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
4876288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4877288943Sdim}
4878309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
4879296417Sdimvec_mergel(vector bool long long __a, vector bool long long __b) {
4880296417Sdim  return vec_perm(__a, __b,
4881309124Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
4882309124Sdim                                         0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
4883296417Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4884296417Sdim}
4885309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_mergel(vector double __a,
4886309124Sdim                                                        vector double __b) {
4887288943Sdim  return vec_perm(__a, __b,
4888309124Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
4889309124Sdim                                         0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
4890288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4891288943Sdim}
4892309124Sdimstatic __inline__ vector double __ATTRS_o_ai
4893288943Sdimvec_mergel(vector double __a, vector bool long long __b) {
4894288943Sdim  return vec_perm(__a, (vector double)__b,
4895309124Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
4896309124Sdim                                         0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
4897288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4898288943Sdim}
4899309124Sdimstatic __inline__ vector double __ATTRS_o_ai
4900288943Sdimvec_mergel(vector bool long long __a, vector double __b) {
4901288943Sdim  return vec_perm((vector double)__a, __b,
4902309124Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
4903309124Sdim                                         0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
4904288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4905288943Sdim}
4906288943Sdim#endif
4907288943Sdim
4908210299Sed/* vec_vmrglb */
4909210299Sed
4910210299Sed#define __builtin_altivec_vmrglb vec_vmrglb
4911210299Sed
4912309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
4913309124Sdimvec_vmrglb(vector signed char __a, vector signed char __b) {
4914288943Sdim  return vec_perm(__a, __b,
4915288943Sdim                  (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
4916288943Sdim                                         0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
4917288943Sdim                                         0x0E, 0x1E, 0x0F, 0x1F));
4918210299Sed}
4919210299Sed
4920309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
4921309124Sdimvec_vmrglb(vector unsigned char __a, vector unsigned char __b) {
4922288943Sdim  return vec_perm(__a, __b,
4923288943Sdim                  (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
4924288943Sdim                                         0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
4925288943Sdim                                         0x0E, 0x1E, 0x0F, 0x1F));
4926210299Sed}
4927210299Sed
4928309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
4929309124Sdimvec_vmrglb(vector bool char __a, vector bool char __b) {
4930288943Sdim  return vec_perm(__a, __b,
4931288943Sdim                  (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
4932288943Sdim                                         0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
4933288943Sdim                                         0x0E, 0x1E, 0x0F, 0x1F));
4934212904Sdim}
4935212904Sdim
4936210299Sed/* vec_vmrglh */
4937210299Sed
4938210299Sed#define __builtin_altivec_vmrglh vec_vmrglh
4939210299Sed
4940309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vmrglh(vector short __a,
4941309124Sdim                                                       vector short __b) {
4942288943Sdim  return vec_perm(__a, __b,
4943288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
4944288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
4945288943Sdim                                         0x0E, 0x0F, 0x1E, 0x1F));
4946210299Sed}
4947210299Sed
4948309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
4949288943Sdimvec_vmrglh(vector unsigned short __a, vector unsigned short __b) {
4950288943Sdim  return vec_perm(__a, __b,
4951288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
4952288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
4953288943Sdim                                         0x0E, 0x0F, 0x1E, 0x1F));
4954210299Sed}
4955210299Sed
4956309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
4957309124Sdimvec_vmrglh(vector bool short __a, vector bool short __b) {
4958288943Sdim  return vec_perm(__a, __b,
4959288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
4960288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
4961288943Sdim                                         0x0E, 0x0F, 0x1E, 0x1F));
4962212904Sdim}
4963212904Sdim
4964309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vmrglh(vector pixel __a,
4965309124Sdim                                                       vector pixel __b) {
4966288943Sdim  return vec_perm(__a, __b,
4967288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
4968288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
4969288943Sdim                                         0x0E, 0x0F, 0x1E, 0x1F));
4970212904Sdim}
4971212904Sdim
4972210299Sed/* vec_vmrglw */
4973210299Sed
4974210299Sed#define __builtin_altivec_vmrglw vec_vmrglw
4975210299Sed
4976309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vmrglw(vector int __a,
4977309124Sdim                                                     vector int __b) {
4978288943Sdim  return vec_perm(__a, __b,
4979288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
4980288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
4981288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4982288943Sdim}
4983288943Sdim
4984309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
4985309124Sdimvec_vmrglw(vector unsigned int __a, vector unsigned int __b) {
4986288943Sdim  return vec_perm(__a, __b,
4987288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
4988288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
4989288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4990288943Sdim}
4991288943Sdim
4992309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_vmrglw(vector bool int __a,
4993309124Sdim                                                          vector bool int __b) {
4994288943Sdim  return vec_perm(__a, __b,
4995288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
4996288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
4997288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
4998288943Sdim}
4999288943Sdim
5000309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vmrglw(vector float __a,
5001309124Sdim                                                       vector float __b) {
5002288943Sdim  return vec_perm(__a, __b,
5003288943Sdim                  (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
5004288943Sdim                                         0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
5005288943Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
5006288943Sdim}
5007288943Sdim
5008288943Sdim#ifdef __POWER8_VECTOR__
5009288943Sdim/* vec_mergee */
5010288943Sdim
5011309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_mergee(vector bool int __a,
5012309124Sdim                                                          vector bool int __b) {
5013309124Sdim  return vec_perm(__a, __b,
5014309124Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5015309124Sdim                                         0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5016309124Sdim                                         0x18, 0x19, 0x1A, 0x1B));
5017210299Sed}
5018210299Sed
5019309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
5020288943Sdimvec_mergee(vector signed int __a, vector signed int __b) {
5021309124Sdim  return vec_perm(__a, __b,
5022309124Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5023309124Sdim                                         0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5024309124Sdim                                         0x18, 0x19, 0x1A, 0x1B));
5025288943Sdim}
5026288943Sdim
5027309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5028288943Sdimvec_mergee(vector unsigned int __a, vector unsigned int __b) {
5029309124Sdim  return vec_perm(__a, __b,
5030309124Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5031309124Sdim                                         0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5032309124Sdim                                         0x18, 0x19, 0x1A, 0x1B));
5033210299Sed}
5034210299Sed
5035314564Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
5036314564Sdimvec_mergee(vector bool long long __a, vector bool long long __b) {
5037314564Sdim  return vec_mergeh(__a, __b);
5038314564Sdim}
5039314564Sdim
5040314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
5041314564Sdimvec_mergee(vector signed long long __a, vector signed long long __b) {
5042314564Sdim  return vec_mergeh(__a, __b);
5043314564Sdim}
5044314564Sdim
5045314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
5046314564Sdimvec_mergee(vector unsigned long long __a, vector unsigned long long __b) {
5047314564Sdim  return vec_mergeh(__a, __b);
5048314564Sdim}
5049314564Sdim
5050314564Sdimstatic __inline__ vector float __ATTRS_o_ai
5051314564Sdimvec_mergee(vector float __a, vector float __b) {
5052314564Sdim  return vec_perm(__a, __b,
5053314564Sdim                  (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
5054314564Sdim                                         0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
5055314564Sdim                                         0x18, 0x19, 0x1A, 0x1B));
5056314564Sdim}
5057314564Sdim
5058314564Sdimstatic __inline__ vector double __ATTRS_o_ai
5059314564Sdimvec_mergee(vector double __a, vector double __b) {
5060314564Sdim  return vec_mergeh(__a, __b);
5061314564Sdim}
5062314564Sdim
5063288943Sdim/* vec_mergeo */
5064288943Sdim
5065309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_mergeo(vector bool int __a,
5066309124Sdim                                                          vector bool int __b) {
5067309124Sdim  return vec_perm(__a, __b,
5068309124Sdim                  (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5069309124Sdim                                         0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5070309124Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
5071212904Sdim}
5072212904Sdim
5073309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
5074288943Sdimvec_mergeo(vector signed int __a, vector signed int __b) {
5075309124Sdim  return vec_perm(__a, __b,
5076309124Sdim                  (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5077309124Sdim                                         0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5078309124Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
5079210299Sed}
5080210299Sed
5081309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5082288943Sdimvec_mergeo(vector unsigned int __a, vector unsigned int __b) {
5083309124Sdim  return vec_perm(__a, __b,
5084309124Sdim                  (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5085309124Sdim                                         0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5086309124Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
5087288943Sdim}
5088288943Sdim
5089314564Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
5090314564Sdimvec_mergeo(vector bool long long __a, vector bool long long __b) {
5091314564Sdim  return vec_mergel(__a, __b);
5092314564Sdim}
5093314564Sdim
5094314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
5095314564Sdimvec_mergeo(vector signed long long __a, vector signed long long __b) {
5096314564Sdim  return vec_mergel(__a, __b);
5097314564Sdim}
5098314564Sdim
5099314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
5100314564Sdimvec_mergeo(vector unsigned long long __a, vector unsigned long long __b) {
5101314564Sdim  return vec_mergel(__a, __b);
5102314564Sdim}
5103314564Sdim
5104314564Sdimstatic __inline__ vector float __ATTRS_o_ai
5105314564Sdimvec_mergeo(vector float __a, vector float __b) {
5106314564Sdim  return vec_perm(__a, __b,
5107314564Sdim                  (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
5108314564Sdim                                         0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
5109314564Sdim                                         0x1C, 0x1D, 0x1E, 0x1F));
5110314564Sdim}
5111314564Sdim
5112314564Sdimstatic __inline__ vector double __ATTRS_o_ai
5113314564Sdimvec_mergeo(vector double __a, vector double __b) {
5114314564Sdim  return vec_mergel(__a, __b);
5115314564Sdim}
5116314564Sdim
5117288943Sdim#endif
5118288943Sdim
5119207619Srdivacky/* vec_mfvscr */
5120207619Srdivacky
5121309124Sdimstatic __inline__ vector unsigned short __attribute__((__always_inline__))
5122288943Sdimvec_mfvscr(void) {
5123210299Sed  return __builtin_altivec_mfvscr();
5124210299Sed}
5125207619Srdivacky
5126207619Srdivacky/* vec_min */
5127207619Srdivacky
5128309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
5129309124Sdimvec_min(vector signed char __a, vector signed char __b) {
5130249423Sdim  return __builtin_altivec_vminsb(__a, __b);
5131207619Srdivacky}
5132207619Srdivacky
5133309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
5134309124Sdimvec_min(vector bool char __a, vector signed char __b) {
5135249423Sdim  return __builtin_altivec_vminsb((vector signed char)__a, __b);
5136212904Sdim}
5137212904Sdim
5138309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
5139309124Sdimvec_min(vector signed char __a, vector bool char __b) {
5140249423Sdim  return __builtin_altivec_vminsb(__a, (vector signed char)__b);
5141212904Sdim}
5142212904Sdim
5143309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
5144309124Sdimvec_min(vector unsigned char __a, vector unsigned char __b) {
5145249423Sdim  return __builtin_altivec_vminub(__a, __b);
5146207619Srdivacky}
5147207619Srdivacky
5148309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
5149309124Sdimvec_min(vector bool char __a, vector unsigned char __b) {
5150249423Sdim  return __builtin_altivec_vminub((vector unsigned char)__a, __b);
5151212904Sdim}
5152212904Sdim
5153309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
5154309124Sdimvec_min(vector unsigned char __a, vector bool char __b) {
5155249423Sdim  return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
5156212904Sdim}
5157212904Sdim
5158309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
5159309124Sdim                                                    vector short __b) {
5160249423Sdim  return __builtin_altivec_vminsh(__a, __b);
5161207619Srdivacky}
5162207619Srdivacky
5163309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_min(vector bool short __a,
5164309124Sdim                                                    vector short __b) {
5165249423Sdim  return __builtin_altivec_vminsh((vector short)__a, __b);
5166212904Sdim}
5167212904Sdim
5168309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
5169309124Sdim                                                    vector bool short __b) {
5170249423Sdim  return __builtin_altivec_vminsh(__a, (vector short)__b);
5171212904Sdim}
5172212904Sdim
5173309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
5174309124Sdimvec_min(vector unsigned short __a, vector unsigned short __b) {
5175249423Sdim  return __builtin_altivec_vminuh(__a, __b);
5176207619Srdivacky}
5177207619Srdivacky
5178309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
5179309124Sdimvec_min(vector bool short __a, vector unsigned short __b) {
5180249423Sdim  return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
5181212904Sdim}
5182212904Sdim
5183309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
5184309124Sdimvec_min(vector unsigned short __a, vector bool short __b) {
5185249423Sdim  return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
5186212904Sdim}
5187212904Sdim
5188309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
5189309124Sdim                                                  vector int __b) {
5190249423Sdim  return __builtin_altivec_vminsw(__a, __b);
5191207619Srdivacky}
5192207619Srdivacky
5193309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_min(vector bool int __a,
5194309124Sdim                                                  vector int __b) {
5195249423Sdim  return __builtin_altivec_vminsw((vector int)__a, __b);
5196212904Sdim}
5197212904Sdim
5198309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
5199309124Sdim                                                  vector bool int __b) {
5200249423Sdim  return __builtin_altivec_vminsw(__a, (vector int)__b);
5201212904Sdim}
5202212904Sdim
5203309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5204309124Sdimvec_min(vector unsigned int __a, vector unsigned int __b) {
5205249423Sdim  return __builtin_altivec_vminuw(__a, __b);
5206207619Srdivacky}
5207207619Srdivacky
5208309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5209309124Sdimvec_min(vector bool int __a, vector unsigned int __b) {
5210249423Sdim  return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
5211212904Sdim}
5212212904Sdim
5213309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5214309124Sdimvec_min(vector unsigned int __a, vector bool int __b) {
5215249423Sdim  return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
5216212904Sdim}
5217212904Sdim
5218288943Sdim#ifdef __POWER8_VECTOR__
5219309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
5220288943Sdimvec_min(vector signed long long __a, vector signed long long __b) {
5221288943Sdim  return __builtin_altivec_vminsd(__a, __b);
5222288943Sdim}
5223288943Sdim
5224309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
5225288943Sdimvec_min(vector bool long long __a, vector signed long long __b) {
5226288943Sdim  return __builtin_altivec_vminsd((vector signed long long)__a, __b);
5227288943Sdim}
5228288943Sdim
5229309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
5230309124Sdimvec_min(vector signed long long __a, vector bool long long __b) {
5231288943Sdim  return __builtin_altivec_vminsd(__a, (vector signed long long)__b);
5232288943Sdim}
5233288943Sdim
5234309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
5235288943Sdimvec_min(vector unsigned long long __a, vector unsigned long long __b) {
5236288943Sdim  return __builtin_altivec_vminud(__a, __b);
5237288943Sdim}
5238288943Sdim
5239309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
5240288943Sdimvec_min(vector bool long long __a, vector unsigned long long __b) {
5241288943Sdim  return __builtin_altivec_vminud((vector unsigned long long)__a, __b);
5242288943Sdim}
5243288943Sdim
5244309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
5245288943Sdimvec_min(vector unsigned long long __a, vector bool long long __b) {
5246288943Sdim  return __builtin_altivec_vminud(__a, (vector unsigned long long)__b);
5247288943Sdim}
5248288943Sdim#endif
5249288943Sdim
5250309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_min(vector float __a,
5251309124Sdim                                                    vector float __b) {
5252280031Sdim#ifdef __VSX__
5253280031Sdim  return __builtin_vsx_xvminsp(__a, __b);
5254280031Sdim#else
5255249423Sdim  return __builtin_altivec_vminfp(__a, __b);
5256280031Sdim#endif
5257207619Srdivacky}
5258207619Srdivacky
5259280031Sdim#ifdef __VSX__
5260309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_min(vector double __a,
5261309124Sdim                                                     vector double __b) {
5262280031Sdim  return __builtin_vsx_xvmindp(__a, __b);
5263280031Sdim}
5264280031Sdim#endif
5265280031Sdim
5266210299Sed/* vec_vminsb */
5267210299Sed
5268309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
5269309124Sdimvec_vminsb(vector signed char __a, vector signed char __b) {
5270249423Sdim  return __builtin_altivec_vminsb(__a, __b);
5271210299Sed}
5272210299Sed
5273309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
5274309124Sdimvec_vminsb(vector bool char __a, vector signed char __b) {
5275249423Sdim  return __builtin_altivec_vminsb((vector signed char)__a, __b);
5276212904Sdim}
5277212904Sdim
5278309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
5279309124Sdimvec_vminsb(vector signed char __a, vector bool char __b) {
5280249423Sdim  return __builtin_altivec_vminsb(__a, (vector signed char)__b);
5281212904Sdim}
5282212904Sdim
5283210299Sed/* vec_vminub */
5284210299Sed
5285309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
5286309124Sdimvec_vminub(vector unsigned char __a, vector unsigned char __b) {
5287249423Sdim  return __builtin_altivec_vminub(__a, __b);
5288210299Sed}
5289210299Sed
5290309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
5291309124Sdimvec_vminub(vector bool char __a, vector unsigned char __b) {
5292249423Sdim  return __builtin_altivec_vminub((vector unsigned char)__a, __b);
5293212904Sdim}
5294212904Sdim
5295309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
5296309124Sdimvec_vminub(vector unsigned char __a, vector bool char __b) {
5297249423Sdim  return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
5298212904Sdim}
5299212904Sdim
5300210299Sed/* vec_vminsh */
5301210299Sed
5302309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
5303309124Sdim                                                       vector short __b) {
5304249423Sdim  return __builtin_altivec_vminsh(__a, __b);
5305210299Sed}
5306210299Sed
5307309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vminsh(vector bool short __a,
5308309124Sdim                                                       vector short __b) {
5309249423Sdim  return __builtin_altivec_vminsh((vector short)__a, __b);
5310212904Sdim}
5311212904Sdim
5312309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
5313309124Sdim                                                       vector bool short __b) {
5314249423Sdim  return __builtin_altivec_vminsh(__a, (vector short)__b);
5315212904Sdim}
5316212904Sdim
5317210299Sed/* vec_vminuh */
5318210299Sed
5319309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
5320288943Sdimvec_vminuh(vector unsigned short __a, vector unsigned short __b) {
5321249423Sdim  return __builtin_altivec_vminuh(__a, __b);
5322210299Sed}
5323210299Sed
5324309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
5325288943Sdimvec_vminuh(vector bool short __a, vector unsigned short __b) {
5326249423Sdim  return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
5327212904Sdim}
5328212904Sdim
5329309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
5330309124Sdimvec_vminuh(vector unsigned short __a, vector bool short __b) {
5331249423Sdim  return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
5332212904Sdim}
5333212904Sdim
5334210299Sed/* vec_vminsw */
5335210299Sed
5336309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
5337309124Sdim                                                     vector int __b) {
5338249423Sdim  return __builtin_altivec_vminsw(__a, __b);
5339210299Sed}
5340210299Sed
5341309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vminsw(vector bool int __a,
5342309124Sdim                                                     vector int __b) {
5343249423Sdim  return __builtin_altivec_vminsw((vector int)__a, __b);
5344212904Sdim}
5345212904Sdim
5346309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
5347309124Sdim                                                     vector bool int __b) {
5348249423Sdim  return __builtin_altivec_vminsw(__a, (vector int)__b);
5349212904Sdim}
5350212904Sdim
5351210299Sed/* vec_vminuw */
5352210299Sed
5353309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5354309124Sdimvec_vminuw(vector unsigned int __a, vector unsigned int __b) {
5355249423Sdim  return __builtin_altivec_vminuw(__a, __b);
5356210299Sed}
5357210299Sed
5358309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5359309124Sdimvec_vminuw(vector bool int __a, vector unsigned int __b) {
5360249423Sdim  return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
5361212904Sdim}
5362212904Sdim
5363309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5364309124Sdimvec_vminuw(vector unsigned int __a, vector bool int __b) {
5365249423Sdim  return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
5366212904Sdim}
5367212904Sdim
5368210299Sed/* vec_vminfp */
5369210299Sed
5370309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
5371288943Sdimvec_vminfp(vector float __a, vector float __b) {
5372280031Sdim#ifdef __VSX__
5373280031Sdim  return __builtin_vsx_xvminsp(__a, __b);
5374280031Sdim#else
5375249423Sdim  return __builtin_altivec_vminfp(__a, __b);
5376280031Sdim#endif
5377210299Sed}
5378210299Sed
5379210299Sed/* vec_mladd */
5380210299Sed
5381210299Sed#define __builtin_altivec_vmladduhm vec_mladd
5382210299Sed
5383309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_mladd(vector short __a,
5384309124Sdim                                                      vector short __b,
5385309124Sdim                                                      vector short __c) {
5386249423Sdim  return __a * __b + __c;
5387210299Sed}
5388210299Sed
5389309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_mladd(
5390309124Sdim    vector short __a, vector unsigned short __b, vector unsigned short __c) {
5391249423Sdim  return __a * (vector short)__b + (vector short)__c;
5392210299Sed}
5393210299Sed
5394309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_mladd(vector unsigned short __a,
5395309124Sdim                                                      vector short __b,
5396309124Sdim                                                      vector short __c) {
5397249423Sdim  return (vector short)__a * __b + __c;
5398210299Sed}
5399210299Sed
5400309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
5401309124Sdimvec_mladd(vector unsigned short __a, vector unsigned short __b,
5402309124Sdim          vector unsigned short __c) {
5403249423Sdim  return __a * __b + __c;
5404210299Sed}
5405210299Sed
5406210299Sed/* vec_vmladduhm */
5407210299Sed
5408309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vmladduhm(vector short __a,
5409309124Sdim                                                          vector short __b,
5410309124Sdim                                                          vector short __c) {
5411249423Sdim  return __a * __b + __c;
5412210299Sed}
5413210299Sed
5414309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vmladduhm(
5415309124Sdim    vector short __a, vector unsigned short __b, vector unsigned short __c) {
5416249423Sdim  return __a * (vector short)__b + (vector short)__c;
5417210299Sed}
5418210299Sed
5419309124Sdimstatic __inline__ vector short __ATTRS_o_ai
5420309124Sdimvec_vmladduhm(vector unsigned short __a, vector short __b, vector short __c) {
5421249423Sdim  return (vector short)__a * __b + __c;
5422210299Sed}
5423210299Sed
5424309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
5425288943Sdimvec_vmladduhm(vector unsigned short __a, vector unsigned short __b,
5426288943Sdim              vector unsigned short __c) {
5427249423Sdim  return __a * __b + __c;
5428210299Sed}
5429210299Sed
5430210299Sed/* vec_mradds */
5431210299Sed
5432309124Sdimstatic __inline__ vector short __attribute__((__always_inline__))
5433288943Sdimvec_mradds(vector short __a, vector short __b, vector short __c) {
5434249423Sdim  return __builtin_altivec_vmhraddshs(__a, __b, __c);
5435210299Sed}
5436210299Sed
5437210299Sed/* vec_vmhraddshs */
5438210299Sed
5439309124Sdimstatic __inline__ vector short __attribute__((__always_inline__))
5440288943Sdimvec_vmhraddshs(vector short __a, vector short __b, vector short __c) {
5441249423Sdim  return __builtin_altivec_vmhraddshs(__a, __b, __c);
5442210299Sed}
5443210299Sed
5444210299Sed/* vec_msum */
5445210299Sed
5446309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_msum(vector signed char __a,
5447309124Sdim                                                   vector unsigned char __b,
5448309124Sdim                                                   vector int __c) {
5449249423Sdim  return __builtin_altivec_vmsummbm(__a, __b, __c);
5450210299Sed}
5451210299Sed
5452309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5453309124Sdimvec_msum(vector unsigned char __a, vector unsigned char __b,
5454309124Sdim         vector unsigned int __c) {
5455249423Sdim  return __builtin_altivec_vmsumubm(__a, __b, __c);
5456210299Sed}
5457210299Sed
5458309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_msum(vector short __a,
5459309124Sdim                                                   vector short __b,
5460309124Sdim                                                   vector int __c) {
5461249423Sdim  return __builtin_altivec_vmsumshm(__a, __b, __c);
5462210299Sed}
5463210299Sed
5464309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5465309124Sdimvec_msum(vector unsigned short __a, vector unsigned short __b,
5466309124Sdim         vector unsigned int __c) {
5467249423Sdim  return __builtin_altivec_vmsumuhm(__a, __b, __c);
5468210299Sed}
5469210299Sed
5470210299Sed/* vec_vmsummbm */
5471210299Sed
5472309124Sdimstatic __inline__ vector int __attribute__((__always_inline__))
5473288943Sdimvec_vmsummbm(vector signed char __a, vector unsigned char __b, vector int __c) {
5474249423Sdim  return __builtin_altivec_vmsummbm(__a, __b, __c);
5475210299Sed}
5476210299Sed
5477210299Sed/* vec_vmsumubm */
5478210299Sed
5479309124Sdimstatic __inline__ vector unsigned int __attribute__((__always_inline__))
5480288943Sdimvec_vmsumubm(vector unsigned char __a, vector unsigned char __b,
5481288943Sdim             vector unsigned int __c) {
5482249423Sdim  return __builtin_altivec_vmsumubm(__a, __b, __c);
5483210299Sed}
5484210299Sed
5485210299Sed/* vec_vmsumshm */
5486210299Sed
5487309124Sdimstatic __inline__ vector int __attribute__((__always_inline__))
5488288943Sdimvec_vmsumshm(vector short __a, vector short __b, vector int __c) {
5489249423Sdim  return __builtin_altivec_vmsumshm(__a, __b, __c);
5490210299Sed}
5491210299Sed
5492210299Sed/* vec_vmsumuhm */
5493210299Sed
5494309124Sdimstatic __inline__ vector unsigned int __attribute__((__always_inline__))
5495288943Sdimvec_vmsumuhm(vector unsigned short __a, vector unsigned short __b,
5496288943Sdim             vector unsigned int __c) {
5497249423Sdim  return __builtin_altivec_vmsumuhm(__a, __b, __c);
5498210299Sed}
5499210299Sed
5500210299Sed/* vec_msums */
5501210299Sed
5502309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_msums(vector short __a,
5503309124Sdim                                                    vector short __b,
5504309124Sdim                                                    vector int __c) {
5505249423Sdim  return __builtin_altivec_vmsumshs(__a, __b, __c);
5506210299Sed}
5507210299Sed
5508309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5509309124Sdimvec_msums(vector unsigned short __a, vector unsigned short __b,
5510309124Sdim          vector unsigned int __c) {
5511249423Sdim  return __builtin_altivec_vmsumuhs(__a, __b, __c);
5512210299Sed}
5513210299Sed
5514210299Sed/* vec_vmsumshs */
5515210299Sed
5516309124Sdimstatic __inline__ vector int __attribute__((__always_inline__))
5517288943Sdimvec_vmsumshs(vector short __a, vector short __b, vector int __c) {
5518249423Sdim  return __builtin_altivec_vmsumshs(__a, __b, __c);
5519210299Sed}
5520210299Sed
5521210299Sed/* vec_vmsumuhs */
5522210299Sed
5523309124Sdimstatic __inline__ vector unsigned int __attribute__((__always_inline__))
5524288943Sdimvec_vmsumuhs(vector unsigned short __a, vector unsigned short __b,
5525288943Sdim             vector unsigned int __c) {
5526249423Sdim  return __builtin_altivec_vmsumuhs(__a, __b, __c);
5527210299Sed}
5528210299Sed
5529207619Srdivacky/* vec_mtvscr */
5530207619Srdivacky
5531309124Sdimstatic __inline__ void __ATTRS_o_ai vec_mtvscr(vector signed char __a) {
5532249423Sdim  __builtin_altivec_mtvscr((vector int)__a);
5533210299Sed}
5534207619Srdivacky
5535309124Sdimstatic __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned char __a) {
5536249423Sdim  __builtin_altivec_mtvscr((vector int)__a);
5537210299Sed}
5538207619Srdivacky
5539309124Sdimstatic __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool char __a) {
5540249423Sdim  __builtin_altivec_mtvscr((vector int)__a);
5541212904Sdim}
5542212904Sdim
5543309124Sdimstatic __inline__ void __ATTRS_o_ai vec_mtvscr(vector short __a) {
5544249423Sdim  __builtin_altivec_mtvscr((vector int)__a);
5545207619Srdivacky}
5546207619Srdivacky
5547309124Sdimstatic __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned short __a) {
5548249423Sdim  __builtin_altivec_mtvscr((vector int)__a);
5549207619Srdivacky}
5550207619Srdivacky
5551309124Sdimstatic __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool short __a) {
5552249423Sdim  __builtin_altivec_mtvscr((vector int)__a);
5553212904Sdim}
5554212904Sdim
5555309124Sdimstatic __inline__ void __ATTRS_o_ai vec_mtvscr(vector pixel __a) {
5556249423Sdim  __builtin_altivec_mtvscr((vector int)__a);
5557212904Sdim}
5558212904Sdim
5559309124Sdimstatic __inline__ void __ATTRS_o_ai vec_mtvscr(vector int __a) {
5560249423Sdim  __builtin_altivec_mtvscr((vector int)__a);
5561207619Srdivacky}
5562207619Srdivacky
5563309124Sdimstatic __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned int __a) {
5564249423Sdim  __builtin_altivec_mtvscr((vector int)__a);
5565210299Sed}
5566210299Sed
5567309124Sdimstatic __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool int __a) {
5568249423Sdim  __builtin_altivec_mtvscr((vector int)__a);
5569212904Sdim}
5570212904Sdim
5571309124Sdimstatic __inline__ void __ATTRS_o_ai vec_mtvscr(vector float __a) {
5572249423Sdim  __builtin_altivec_mtvscr((vector int)__a);
5573210299Sed}
5574210299Sed
5575288943Sdim/* vec_mul */
5576288943Sdim
5577288943Sdim/* Integer vector multiplication will involve multiplication of the odd/even
5578288943Sdim   elements separately, then truncating the results and moving to the
5579288943Sdim   result vector.
5580288943Sdim*/
5581309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
5582309124Sdimvec_mul(vector signed char __a, vector signed char __b) {
5583288943Sdim  return __a * __b;
5584288943Sdim}
5585288943Sdim
5586309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
5587309124Sdimvec_mul(vector unsigned char __a, vector unsigned char __b) {
5588288943Sdim  return __a * __b;
5589288943Sdim}
5590288943Sdim
5591309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
5592309124Sdimvec_mul(vector signed short __a, vector signed short __b) {
5593288943Sdim  return __a * __b;
5594288943Sdim}
5595288943Sdim
5596309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
5597309124Sdimvec_mul(vector unsigned short __a, vector unsigned short __b) {
5598288943Sdim  return __a * __b;
5599288943Sdim}
5600288943Sdim
5601309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
5602309124Sdimvec_mul(vector signed int __a, vector signed int __b) {
5603288943Sdim  return __a * __b;
5604288943Sdim}
5605288943Sdim
5606309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5607309124Sdimvec_mul(vector unsigned int __a, vector unsigned int __b) {
5608288943Sdim  return __a * __b;
5609288943Sdim}
5610288943Sdim
5611288943Sdim#ifdef __VSX__
5612309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
5613288943Sdimvec_mul(vector signed long long __a, vector signed long long __b) {
5614288943Sdim  return __a * __b;
5615288943Sdim}
5616288943Sdim
5617309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
5618288943Sdimvec_mul(vector unsigned long long __a, vector unsigned long long __b) {
5619288943Sdim  return __a * __b;
5620288943Sdim}
5621288943Sdim#endif
5622288943Sdim
5623309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_mul(vector float __a,
5624309124Sdim                                                    vector float __b) {
5625288943Sdim  return __a * __b;
5626288943Sdim}
5627288943Sdim
5628288943Sdim#ifdef __VSX__
5629309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_mul(vector double __a,
5630309124Sdim                                                     vector double __b) {
5631288943Sdim  return __a * __b;
5632288943Sdim}
5633288943Sdim#endif
5634288943Sdim
5635276479Sdim/* The vmulos* and vmules* instructions have a big endian bias, so
5636276479Sdim   we must reverse the meaning of "even" and "odd" for little endian.  */
5637276479Sdim
5638210299Sed/* vec_mule */
5639210299Sed
5640309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_mule(vector signed char __a,
5641309124Sdim                                                     vector signed char __b) {
5642276479Sdim#ifdef __LITTLE_ENDIAN__
5643276479Sdim  return __builtin_altivec_vmulosb(__a, __b);
5644276479Sdim#else
5645249423Sdim  return __builtin_altivec_vmulesb(__a, __b);
5646276479Sdim#endif
5647210299Sed}
5648210299Sed
5649309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
5650309124Sdimvec_mule(vector unsigned char __a, vector unsigned char __b) {
5651276479Sdim#ifdef __LITTLE_ENDIAN__
5652276479Sdim  return __builtin_altivec_vmuloub(__a, __b);
5653276479Sdim#else
5654249423Sdim  return __builtin_altivec_vmuleub(__a, __b);
5655276479Sdim#endif
5656210299Sed}
5657210299Sed
5658309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_mule(vector short __a,
5659309124Sdim                                                   vector short __b) {
5660276479Sdim#ifdef __LITTLE_ENDIAN__
5661276479Sdim  return __builtin_altivec_vmulosh(__a, __b);
5662276479Sdim#else
5663249423Sdim  return __builtin_altivec_vmulesh(__a, __b);
5664276479Sdim#endif
5665210299Sed}
5666210299Sed
5667309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5668309124Sdimvec_mule(vector unsigned short __a, vector unsigned short __b) {
5669276479Sdim#ifdef __LITTLE_ENDIAN__
5670276479Sdim  return __builtin_altivec_vmulouh(__a, __b);
5671276479Sdim#else
5672249423Sdim  return __builtin_altivec_vmuleuh(__a, __b);
5673276479Sdim#endif
5674210299Sed}
5675210299Sed
5676288943Sdim#ifdef __POWER8_VECTOR__
5677309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
5678309124Sdimvec_mule(vector signed int __a, vector signed int __b) {
5679288943Sdim#ifdef __LITTLE_ENDIAN__
5680288943Sdim  return __builtin_altivec_vmulosw(__a, __b);
5681288943Sdim#else
5682288943Sdim  return __builtin_altivec_vmulesw(__a, __b);
5683288943Sdim#endif
5684288943Sdim}
5685288943Sdim
5686309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
5687288943Sdimvec_mule(vector unsigned int __a, vector unsigned int __b) {
5688288943Sdim#ifdef __LITTLE_ENDIAN__
5689288943Sdim  return __builtin_altivec_vmulouw(__a, __b);
5690288943Sdim#else
5691288943Sdim  return __builtin_altivec_vmuleuw(__a, __b);
5692288943Sdim#endif
5693288943Sdim}
5694288943Sdim#endif
5695288943Sdim
5696210299Sed/* vec_vmulesb */
5697210299Sed
5698309124Sdimstatic __inline__ vector short __attribute__((__always_inline__))
5699288943Sdimvec_vmulesb(vector signed char __a, vector signed char __b) {
5700276479Sdim#ifdef __LITTLE_ENDIAN__
5701276479Sdim  return __builtin_altivec_vmulosb(__a, __b);
5702276479Sdim#else
5703249423Sdim  return __builtin_altivec_vmulesb(__a, __b);
5704276479Sdim#endif
5705210299Sed}
5706210299Sed
5707210299Sed/* vec_vmuleub */
5708210299Sed
5709309124Sdimstatic __inline__ vector unsigned short __attribute__((__always_inline__))
5710288943Sdimvec_vmuleub(vector unsigned char __a, vector unsigned char __b) {
5711276479Sdim#ifdef __LITTLE_ENDIAN__
5712276479Sdim  return __builtin_altivec_vmuloub(__a, __b);
5713276479Sdim#else
5714249423Sdim  return __builtin_altivec_vmuleub(__a, __b);
5715276479Sdim#endif
5716210299Sed}
5717210299Sed
5718210299Sed/* vec_vmulesh */
5719210299Sed
5720309124Sdimstatic __inline__ vector int __attribute__((__always_inline__))
5721288943Sdimvec_vmulesh(vector short __a, vector short __b) {
5722276479Sdim#ifdef __LITTLE_ENDIAN__
5723276479Sdim  return __builtin_altivec_vmulosh(__a, __b);
5724276479Sdim#else
5725249423Sdim  return __builtin_altivec_vmulesh(__a, __b);
5726276479Sdim#endif
5727210299Sed}
5728210299Sed
5729210299Sed/* vec_vmuleuh */
5730210299Sed
5731309124Sdimstatic __inline__ vector unsigned int __attribute__((__always_inline__))
5732288943Sdimvec_vmuleuh(vector unsigned short __a, vector unsigned short __b) {
5733276479Sdim#ifdef __LITTLE_ENDIAN__
5734276479Sdim  return __builtin_altivec_vmulouh(__a, __b);
5735276479Sdim#else
5736249423Sdim  return __builtin_altivec_vmuleuh(__a, __b);
5737276479Sdim#endif
5738210299Sed}
5739210299Sed
5740210299Sed/* vec_mulo */
5741210299Sed
5742309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_mulo(vector signed char __a,
5743309124Sdim                                                     vector signed char __b) {
5744276479Sdim#ifdef __LITTLE_ENDIAN__
5745276479Sdim  return __builtin_altivec_vmulesb(__a, __b);
5746276479Sdim#else
5747249423Sdim  return __builtin_altivec_vmulosb(__a, __b);
5748276479Sdim#endif
5749210299Sed}
5750210299Sed
5751309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
5752309124Sdimvec_mulo(vector unsigned char __a, vector unsigned char __b) {
5753276479Sdim#ifdef __LITTLE_ENDIAN__
5754276479Sdim  return __builtin_altivec_vmuleub(__a, __b);
5755276479Sdim#else
5756249423Sdim  return __builtin_altivec_vmuloub(__a, __b);
5757276479Sdim#endif
5758210299Sed}
5759210299Sed
5760309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_mulo(vector short __a,
5761309124Sdim                                                   vector short __b) {
5762276479Sdim#ifdef __LITTLE_ENDIAN__
5763276479Sdim  return __builtin_altivec_vmulesh(__a, __b);
5764276479Sdim#else
5765249423Sdim  return __builtin_altivec_vmulosh(__a, __b);
5766276479Sdim#endif
5767210299Sed}
5768210299Sed
5769309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5770309124Sdimvec_mulo(vector unsigned short __a, vector unsigned short __b) {
5771276479Sdim#ifdef __LITTLE_ENDIAN__
5772276479Sdim  return __builtin_altivec_vmuleuh(__a, __b);
5773276479Sdim#else
5774249423Sdim  return __builtin_altivec_vmulouh(__a, __b);
5775276479Sdim#endif
5776210299Sed}
5777210299Sed
5778288943Sdim#ifdef __POWER8_VECTOR__
5779309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
5780309124Sdimvec_mulo(vector signed int __a, vector signed int __b) {
5781288943Sdim#ifdef __LITTLE_ENDIAN__
5782288943Sdim  return __builtin_altivec_vmulesw(__a, __b);
5783288943Sdim#else
5784288943Sdim  return __builtin_altivec_vmulosw(__a, __b);
5785288943Sdim#endif
5786288943Sdim}
5787288943Sdim
5788309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
5789288943Sdimvec_mulo(vector unsigned int __a, vector unsigned int __b) {
5790288943Sdim#ifdef __LITTLE_ENDIAN__
5791288943Sdim  return __builtin_altivec_vmuleuw(__a, __b);
5792288943Sdim#else
5793288943Sdim  return __builtin_altivec_vmulouw(__a, __b);
5794288943Sdim#endif
5795288943Sdim}
5796288943Sdim#endif
5797288943Sdim
5798210299Sed/* vec_vmulosb */
5799210299Sed
5800309124Sdimstatic __inline__ vector short __attribute__((__always_inline__))
5801288943Sdimvec_vmulosb(vector signed char __a, vector signed char __b) {
5802276479Sdim#ifdef __LITTLE_ENDIAN__
5803276479Sdim  return __builtin_altivec_vmulesb(__a, __b);
5804276479Sdim#else
5805249423Sdim  return __builtin_altivec_vmulosb(__a, __b);
5806276479Sdim#endif
5807210299Sed}
5808210299Sed
5809210299Sed/* vec_vmuloub */
5810210299Sed
5811309124Sdimstatic __inline__ vector unsigned short __attribute__((__always_inline__))
5812288943Sdimvec_vmuloub(vector unsigned char __a, vector unsigned char __b) {
5813276479Sdim#ifdef __LITTLE_ENDIAN__
5814276479Sdim  return __builtin_altivec_vmuleub(__a, __b);
5815276479Sdim#else
5816249423Sdim  return __builtin_altivec_vmuloub(__a, __b);
5817276479Sdim#endif
5818210299Sed}
5819210299Sed
5820210299Sed/* vec_vmulosh */
5821210299Sed
5822309124Sdimstatic __inline__ vector int __attribute__((__always_inline__))
5823288943Sdimvec_vmulosh(vector short __a, vector short __b) {
5824276479Sdim#ifdef __LITTLE_ENDIAN__
5825276479Sdim  return __builtin_altivec_vmulesh(__a, __b);
5826276479Sdim#else
5827249423Sdim  return __builtin_altivec_vmulosh(__a, __b);
5828276479Sdim#endif
5829210299Sed}
5830210299Sed
5831210299Sed/* vec_vmulouh */
5832210299Sed
5833309124Sdimstatic __inline__ vector unsigned int __attribute__((__always_inline__))
5834288943Sdimvec_vmulouh(vector unsigned short __a, vector unsigned short __b) {
5835276479Sdim#ifdef __LITTLE_ENDIAN__
5836276479Sdim  return __builtin_altivec_vmuleuh(__a, __b);
5837276479Sdim#else
5838249423Sdim  return __builtin_altivec_vmulouh(__a, __b);
5839276479Sdim#endif
5840210299Sed}
5841210299Sed
5842288943Sdim/*  vec_nand */
5843288943Sdim
5844288943Sdim#ifdef __POWER8_VECTOR__
5845309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
5846309124Sdimvec_nand(vector signed char __a, vector signed char __b) {
5847288943Sdim  return ~(__a & __b);
5848288943Sdim}
5849288943Sdim
5850309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
5851309124Sdimvec_nand(vector signed char __a, vector bool char __b) {
5852288943Sdim  return ~(__a & __b);
5853288943Sdim}
5854288943Sdim
5855309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
5856309124Sdimvec_nand(vector bool char __a, vector signed char __b) {
5857288943Sdim  return ~(__a & __b);
5858288943Sdim}
5859288943Sdim
5860309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
5861309124Sdimvec_nand(vector unsigned char __a, vector unsigned char __b) {
5862288943Sdim  return ~(__a & __b);
5863288943Sdim}
5864288943Sdim
5865309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
5866309124Sdimvec_nand(vector unsigned char __a, vector bool char __b) {
5867288943Sdim  return ~(__a & __b);
5868288943Sdim}
5869288943Sdim
5870309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
5871309124Sdimvec_nand(vector bool char __a, vector unsigned char __b) {
5872288943Sdim  return ~(__a & __b);
5873288943Sdim}
5874288943Sdim
5875309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_nand(vector bool char __a,
5876309124Sdim                                                         vector bool char __b) {
5877296417Sdim  return ~(__a & __b);
5878296417Sdim}
5879296417Sdim
5880309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
5881309124Sdimvec_nand(vector signed short __a, vector signed short __b) {
5882288943Sdim  return ~(__a & __b);
5883288943Sdim}
5884288943Sdim
5885309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
5886309124Sdimvec_nand(vector signed short __a, vector bool short __b) {
5887288943Sdim  return ~(__a & __b);
5888288943Sdim}
5889288943Sdim
5890309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
5891309124Sdimvec_nand(vector bool short __a, vector signed short __b) {
5892288943Sdim  return ~(__a & __b);
5893288943Sdim}
5894288943Sdim
5895309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
5896309124Sdimvec_nand(vector unsigned short __a, vector unsigned short __b) {
5897288943Sdim  return ~(__a & __b);
5898288943Sdim}
5899288943Sdim
5900309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
5901309124Sdimvec_nand(vector unsigned short __a, vector bool short __b) {
5902288943Sdim  return ~(__a & __b);
5903288943Sdim}
5904288943Sdim
5905309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
5906309124Sdimvec_nand(vector bool short __a, vector bool short __b) {
5907288943Sdim  return ~(__a & __b);
5908288943Sdim}
5909288943Sdim
5910309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
5911309124Sdimvec_nand(vector signed int __a, vector signed int __b) {
5912288943Sdim  return ~(__a & __b);
5913288943Sdim}
5914288943Sdim
5915309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai vec_nand(vector signed int __a,
5916309124Sdim                                                          vector bool int __b) {
5917288943Sdim  return ~(__a & __b);
5918288943Sdim}
5919288943Sdim
5920309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
5921309124Sdimvec_nand(vector bool int __a, vector signed int __b) {
5922288943Sdim  return ~(__a & __b);
5923288943Sdim}
5924288943Sdim
5925309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5926309124Sdimvec_nand(vector unsigned int __a, vector unsigned int __b) {
5927288943Sdim  return ~(__a & __b);
5928288943Sdim}
5929288943Sdim
5930309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5931309124Sdimvec_nand(vector unsigned int __a, vector bool int __b) {
5932288943Sdim  return ~(__a & __b);
5933288943Sdim}
5934288943Sdim
5935309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
5936309124Sdimvec_nand(vector bool int __a, vector unsigned int __b) {
5937288943Sdim  return ~(__a & __b);
5938288943Sdim}
5939288943Sdim
5940309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_nand(vector bool int __a,
5941309124Sdim                                                        vector bool int __b) {
5942296417Sdim  return ~(__a & __b);
5943296417Sdim}
5944296417Sdim
5945314564Sdimstatic __inline__ vector float __ATTRS_o_ai
5946314564Sdimvec_nand(vector float __a, vector float __b) {
5947314564Sdim  return (vector float)(~((vector unsigned int)__a &
5948314564Sdim                          (vector unsigned int)__b));
5949314564Sdim}
5950314564Sdim
5951309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
5952288943Sdimvec_nand(vector signed long long __a, vector signed long long __b) {
5953288943Sdim  return ~(__a & __b);
5954288943Sdim}
5955288943Sdim
5956309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
5957288943Sdimvec_nand(vector signed long long __a, vector bool long long __b) {
5958288943Sdim  return ~(__a & __b);
5959288943Sdim}
5960288943Sdim
5961309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
5962288943Sdimvec_nand(vector bool long long __a, vector signed long long __b) {
5963288943Sdim  return ~(__a & __b);
5964288943Sdim}
5965288943Sdim
5966309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
5967288943Sdimvec_nand(vector unsigned long long __a, vector unsigned long long __b) {
5968288943Sdim  return ~(__a & __b);
5969288943Sdim}
5970288943Sdim
5971309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
5972288943Sdimvec_nand(vector unsigned long long __a, vector bool long long __b) {
5973288943Sdim  return ~(__a & __b);
5974288943Sdim}
5975288943Sdim
5976309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
5977288943Sdimvec_nand(vector bool long long __a, vector unsigned long long __b) {
5978288943Sdim  return ~(__a & __b);
5979288943Sdim}
5980288943Sdim
5981309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
5982296417Sdimvec_nand(vector bool long long __a, vector bool long long __b) {
5983296417Sdim  return ~(__a & __b);
5984296417Sdim}
5985296417Sdim
5986314564Sdimstatic __inline__ vector double __ATTRS_o_ai
5987314564Sdimvec_nand(vector double __a, vector double __b) {
5988314564Sdim  return (vector double)(~((vector unsigned long long)__a &
5989314564Sdim                           (vector unsigned long long)__b));
5990314564Sdim}
5991314564Sdim
5992288943Sdim#endif
5993288943Sdim
5994288943Sdim/* vec_nmadd */
5995288943Sdim
5996288943Sdim#ifdef __VSX__
5997309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_nmadd(vector float __a,
5998309124Sdim                                                      vector float __b,
5999309124Sdim                                                      vector float __c) {
6000288943Sdim  return __builtin_vsx_xvnmaddasp(__a, __b, __c);
6001288943Sdim}
6002288943Sdim
6003309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_nmadd(vector double __a,
6004309124Sdim                                                       vector double __b,
6005309124Sdim                                                       vector double __c) {
6006288943Sdim  return __builtin_vsx_xvnmaddadp(__a, __b, __c);
6007288943Sdim}
6008288943Sdim#endif
6009288943Sdim
6010210299Sed/* vec_nmsub */
6011210299Sed
6012309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_nmsub(vector float __a,
6013309124Sdim                                                      vector float __b,
6014309124Sdim                                                      vector float __c) {
6015288943Sdim#ifdef __VSX__
6016288943Sdim  return __builtin_vsx_xvnmsubasp(__a, __b, __c);
6017288943Sdim#else
6018249423Sdim  return __builtin_altivec_vnmsubfp(__a, __b, __c);
6019288943Sdim#endif
6020210299Sed}
6021210299Sed
6022288943Sdim#ifdef __VSX__
6023309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_nmsub(vector double __a,
6024309124Sdim                                                       vector double __b,
6025309124Sdim                                                       vector double __c) {
6026288943Sdim  return __builtin_vsx_xvnmsubadp(__a, __b, __c);
6027288943Sdim}
6028288943Sdim#endif
6029288943Sdim
6030210299Sed/* vec_vnmsubfp */
6031210299Sed
6032309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
6033288943Sdimvec_vnmsubfp(vector float __a, vector float __b, vector float __c) {
6034249423Sdim  return __builtin_altivec_vnmsubfp(__a, __b, __c);
6035210299Sed}
6036210299Sed
6037210299Sed/* vec_nor */
6038210299Sed
6039210299Sed#define __builtin_altivec_vnor vec_nor
6040210299Sed
6041309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
6042309124Sdimvec_nor(vector signed char __a, vector signed char __b) {
6043249423Sdim  return ~(__a | __b);
6044210299Sed}
6045210299Sed
6046309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
6047309124Sdimvec_nor(vector unsigned char __a, vector unsigned char __b) {
6048249423Sdim  return ~(__a | __b);
6049210299Sed}
6050210299Sed
6051309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_nor(vector bool char __a,
6052309124Sdim                                                        vector bool char __b) {
6053249423Sdim  return ~(__a | __b);
6054212904Sdim}
6055212904Sdim
6056309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_nor(vector short __a,
6057309124Sdim                                                    vector short __b) {
6058249423Sdim  return ~(__a | __b);
6059210299Sed}
6060210299Sed
6061309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6062309124Sdimvec_nor(vector unsigned short __a, vector unsigned short __b) {
6063249423Sdim  return ~(__a | __b);
6064210299Sed}
6065210299Sed
6066309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
6067309124Sdimvec_nor(vector bool short __a, vector bool short __b) {
6068249423Sdim  return ~(__a | __b);
6069212904Sdim}
6070212904Sdim
6071309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_nor(vector int __a,
6072309124Sdim                                                  vector int __b) {
6073249423Sdim  return ~(__a | __b);
6074210299Sed}
6075210299Sed
6076309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
6077309124Sdimvec_nor(vector unsigned int __a, vector unsigned int __b) {
6078249423Sdim  return ~(__a | __b);
6079210299Sed}
6080210299Sed
6081309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_nor(vector bool int __a,
6082309124Sdim                                                       vector bool int __b) {
6083249423Sdim  return ~(__a | __b);
6084212904Sdim}
6085212904Sdim
6086309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_nor(vector float __a,
6087309124Sdim                                                    vector float __b) {
6088288943Sdim  vector unsigned int __res =
6089288943Sdim      ~((vector unsigned int)__a | (vector unsigned int)__b);
6090249423Sdim  return (vector float)__res;
6091210299Sed}
6092210299Sed
6093288943Sdim#ifdef __VSX__
6094309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_nor(vector double __a,
6095309124Sdim                                                     vector double __b) {
6096288943Sdim  vector unsigned long long __res =
6097288943Sdim      ~((vector unsigned long long)__a | (vector unsigned long long)__b);
6098288943Sdim  return (vector double)__res;
6099288943Sdim}
6100288943Sdim#endif
6101288943Sdim
6102210299Sed/* vec_vnor */
6103210299Sed
6104309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
6105309124Sdimvec_vnor(vector signed char __a, vector signed char __b) {
6106249423Sdim  return ~(__a | __b);
6107210299Sed}
6108210299Sed
6109309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
6110309124Sdimvec_vnor(vector unsigned char __a, vector unsigned char __b) {
6111249423Sdim  return ~(__a | __b);
6112210299Sed}
6113210299Sed
6114309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_vnor(vector bool char __a,
6115309124Sdim                                                         vector bool char __b) {
6116249423Sdim  return ~(__a | __b);
6117212904Sdim}
6118212904Sdim
6119309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vnor(vector short __a,
6120309124Sdim                                                     vector short __b) {
6121249423Sdim  return ~(__a | __b);
6122210299Sed}
6123210299Sed
6124309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6125309124Sdimvec_vnor(vector unsigned short __a, vector unsigned short __b) {
6126249423Sdim  return ~(__a | __b);
6127210299Sed}
6128210299Sed
6129309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
6130309124Sdimvec_vnor(vector bool short __a, vector bool short __b) {
6131249423Sdim  return ~(__a | __b);
6132212904Sdim}
6133212904Sdim
6134309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vnor(vector int __a,
6135309124Sdim                                                   vector int __b) {
6136249423Sdim  return ~(__a | __b);
6137210299Sed}
6138210299Sed
6139309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
6140309124Sdimvec_vnor(vector unsigned int __a, vector unsigned int __b) {
6141249423Sdim  return ~(__a | __b);
6142210299Sed}
6143210299Sed
6144309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_vnor(vector bool int __a,
6145309124Sdim                                                        vector bool int __b) {
6146249423Sdim  return ~(__a | __b);
6147212904Sdim}
6148212904Sdim
6149309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vnor(vector float __a,
6150309124Sdim                                                     vector float __b) {
6151288943Sdim  vector unsigned int __res =
6152288943Sdim      ~((vector unsigned int)__a | (vector unsigned int)__b);
6153249423Sdim  return (vector float)__res;
6154210299Sed}
6155210299Sed
6156288943Sdim#ifdef __VSX__
6157309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
6158288943Sdimvec_nor(vector signed long long __a, vector signed long long __b) {
6159288943Sdim  return ~(__a | __b);
6160288943Sdim}
6161288943Sdim
6162309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
6163288943Sdimvec_nor(vector unsigned long long __a, vector unsigned long long __b) {
6164288943Sdim  return ~(__a | __b);
6165288943Sdim}
6166288943Sdim
6167309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
6168309124Sdimvec_nor(vector bool long long __a, vector bool long long __b) {
6169288943Sdim  return ~(__a | __b);
6170288943Sdim}
6171288943Sdim#endif
6172288943Sdim
6173210299Sed/* vec_or */
6174210299Sed
6175210299Sed#define __builtin_altivec_vor vec_or
6176210299Sed
6177309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
6178309124Sdimvec_or(vector signed char __a, vector signed char __b) {
6179249423Sdim  return __a | __b;
6180210299Sed}
6181210299Sed
6182309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
6183309124Sdimvec_or(vector bool char __a, vector signed char __b) {
6184249423Sdim  return (vector signed char)__a | __b;
6185212904Sdim}
6186212904Sdim
6187309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai vec_or(vector signed char __a,
6188309124Sdim                                                         vector bool char __b) {
6189249423Sdim  return __a | (vector signed char)__b;
6190212904Sdim}
6191212904Sdim
6192309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
6193309124Sdimvec_or(vector unsigned char __a, vector unsigned char __b) {
6194249423Sdim  return __a | __b;
6195210299Sed}
6196210299Sed
6197309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
6198309124Sdimvec_or(vector bool char __a, vector unsigned char __b) {
6199249423Sdim  return (vector unsigned char)__a | __b;
6200212904Sdim}
6201212904Sdim
6202309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
6203309124Sdimvec_or(vector unsigned char __a, vector bool char __b) {
6204249423Sdim  return __a | (vector unsigned char)__b;
6205212904Sdim}
6206212904Sdim
6207309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_or(vector bool char __a,
6208309124Sdim                                                       vector bool char __b) {
6209249423Sdim  return __a | __b;
6210212904Sdim}
6211212904Sdim
6212309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
6213309124Sdim                                                   vector short __b) {
6214249423Sdim  return __a | __b;
6215210299Sed}
6216210299Sed
6217309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_or(vector bool short __a,
6218309124Sdim                                                   vector short __b) {
6219249423Sdim  return (vector short)__a | __b;
6220212904Sdim}
6221212904Sdim
6222309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
6223309124Sdim                                                   vector bool short __b) {
6224249423Sdim  return __a | (vector short)__b;
6225212904Sdim}
6226212904Sdim
6227309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6228309124Sdimvec_or(vector unsigned short __a, vector unsigned short __b) {
6229249423Sdim  return __a | __b;
6230210299Sed}
6231210299Sed
6232309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6233309124Sdimvec_or(vector bool short __a, vector unsigned short __b) {
6234249423Sdim  return (vector unsigned short)__a | __b;
6235212904Sdim}
6236212904Sdim
6237309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6238309124Sdimvec_or(vector unsigned short __a, vector bool short __b) {
6239249423Sdim  return __a | (vector unsigned short)__b;
6240212904Sdim}
6241212904Sdim
6242309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai vec_or(vector bool short __a,
6243309124Sdim                                                        vector bool short __b) {
6244249423Sdim  return __a | __b;
6245212904Sdim}
6246212904Sdim
6247309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
6248309124Sdim                                                 vector int __b) {
6249249423Sdim  return __a | __b;
6250210299Sed}
6251210299Sed
6252309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_or(vector bool int __a,
6253309124Sdim                                                 vector int __b) {
6254249423Sdim  return (vector int)__a | __b;
6255212904Sdim}
6256212904Sdim
6257309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
6258309124Sdim                                                 vector bool int __b) {
6259249423Sdim  return __a | (vector int)__b;
6260212904Sdim}
6261212904Sdim
6262309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
6263309124Sdimvec_or(vector unsigned int __a, vector unsigned int __b) {
6264249423Sdim  return __a | __b;
6265210299Sed}
6266210299Sed
6267309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
6268309124Sdimvec_or(vector bool int __a, vector unsigned int __b) {
6269249423Sdim  return (vector unsigned int)__a | __b;
6270212904Sdim}
6271212904Sdim
6272309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
6273309124Sdimvec_or(vector unsigned int __a, vector bool int __b) {
6274249423Sdim  return __a | (vector unsigned int)__b;
6275212904Sdim}
6276212904Sdim
6277309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_or(vector bool int __a,
6278309124Sdim                                                      vector bool int __b) {
6279249423Sdim  return __a | __b;
6280212904Sdim}
6281212904Sdim
6282309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
6283309124Sdim                                                   vector float __b) {
6284288943Sdim  vector unsigned int __res =
6285288943Sdim      (vector unsigned int)__a | (vector unsigned int)__b;
6286249423Sdim  return (vector float)__res;
6287210299Sed}
6288210299Sed
6289309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_or(vector bool int __a,
6290309124Sdim                                                   vector float __b) {
6291288943Sdim  vector unsigned int __res =
6292288943Sdim      (vector unsigned int)__a | (vector unsigned int)__b;
6293249423Sdim  return (vector float)__res;
6294212904Sdim}
6295212904Sdim
6296309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
6297309124Sdim                                                   vector bool int __b) {
6298288943Sdim  vector unsigned int __res =
6299288943Sdim      (vector unsigned int)__a | (vector unsigned int)__b;
6300249423Sdim  return (vector float)__res;
6301212904Sdim}
6302212904Sdim
6303288943Sdim#ifdef __VSX__
6304309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_or(vector bool long long __a,
6305309124Sdim                                                    vector double __b) {
6306360784Sdim  return (vector double)((vector unsigned long long)__a |
6307360784Sdim                         (vector unsigned long long)__b);
6308288943Sdim}
6309288943Sdim
6310309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,
6311309124Sdim                                                    vector bool long long __b) {
6312360784Sdim  return (vector double)((vector unsigned long long)__a |
6313360784Sdim                         (vector unsigned long long)__b);
6314288943Sdim}
6315288943Sdim
6316309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,
6317309124Sdim                                                    vector double __b) {
6318360784Sdim  return (vector double)((vector unsigned long long)__a |
6319360784Sdim                         (vector unsigned long long)__b);
6320288943Sdim}
6321288943Sdim
6322309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
6323288943Sdimvec_or(vector signed long long __a, vector signed long long __b) {
6324288943Sdim  return __a | __b;
6325288943Sdim}
6326288943Sdim
6327309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
6328288943Sdimvec_or(vector bool long long __a, vector signed long long __b) {
6329288943Sdim  return (vector signed long long)__a | __b;
6330288943Sdim}
6331288943Sdim
6332309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
6333309124Sdimvec_or(vector signed long long __a, vector bool long long __b) {
6334288943Sdim  return __a | (vector signed long long)__b;
6335288943Sdim}
6336288943Sdim
6337309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
6338288943Sdimvec_or(vector unsigned long long __a, vector unsigned long long __b) {
6339288943Sdim  return __a | __b;
6340288943Sdim}
6341288943Sdim
6342309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
6343288943Sdimvec_or(vector bool long long __a, vector unsigned long long __b) {
6344288943Sdim  return (vector unsigned long long)__a | __b;
6345288943Sdim}
6346288943Sdim
6347309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
6348288943Sdimvec_or(vector unsigned long long __a, vector bool long long __b) {
6349288943Sdim  return __a | (vector unsigned long long)__b;
6350288943Sdim}
6351288943Sdim
6352309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
6353309124Sdimvec_or(vector bool long long __a, vector bool long long __b) {
6354288943Sdim  return __a | __b;
6355288943Sdim}
6356288943Sdim#endif
6357288943Sdim
6358288943Sdim#ifdef __POWER8_VECTOR__
6359309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
6360309124Sdimvec_orc(vector signed char __a, vector signed char __b) {
6361288943Sdim  return __a | ~__b;
6362288943Sdim}
6363288943Sdim
6364309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
6365309124Sdimvec_orc(vector signed char __a, vector bool char __b) {
6366288943Sdim  return __a | ~__b;
6367288943Sdim}
6368288943Sdim
6369309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
6370309124Sdimvec_orc(vector bool char __a, vector signed char __b) {
6371288943Sdim  return __a | ~__b;
6372288943Sdim}
6373288943Sdim
6374309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
6375309124Sdimvec_orc(vector unsigned char __a, vector unsigned char __b) {
6376288943Sdim  return __a | ~__b;
6377288943Sdim}
6378288943Sdim
6379309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
6380309124Sdimvec_orc(vector unsigned char __a, vector bool char __b) {
6381288943Sdim  return __a | ~__b;
6382288943Sdim}
6383288943Sdim
6384309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
6385309124Sdimvec_orc(vector bool char __a, vector unsigned char __b) {
6386288943Sdim  return __a | ~__b;
6387288943Sdim}
6388288943Sdim
6389309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_orc(vector bool char __a,
6390309124Sdim                                                        vector bool char __b) {
6391296417Sdim  return __a | ~__b;
6392296417Sdim}
6393296417Sdim
6394309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
6395309124Sdimvec_orc(vector signed short __a, vector signed short __b) {
6396288943Sdim  return __a | ~__b;
6397288943Sdim}
6398288943Sdim
6399309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
6400309124Sdimvec_orc(vector signed short __a, vector bool short __b) {
6401288943Sdim  return __a | ~__b;
6402288943Sdim}
6403288943Sdim
6404309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
6405309124Sdimvec_orc(vector bool short __a, vector signed short __b) {
6406288943Sdim  return __a | ~__b;
6407288943Sdim}
6408288943Sdim
6409309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6410309124Sdimvec_orc(vector unsigned short __a, vector unsigned short __b) {
6411288943Sdim  return __a | ~__b;
6412288943Sdim}
6413288943Sdim
6414309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6415309124Sdimvec_orc(vector unsigned short __a, vector bool short __b) {
6416288943Sdim  return __a | ~__b;
6417288943Sdim}
6418288943Sdim
6419309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6420288943Sdimvec_orc(vector bool short __a, vector unsigned short __b) {
6421288943Sdim  return __a | ~__b;
6422288943Sdim}
6423288943Sdim
6424309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
6425309124Sdimvec_orc(vector bool short __a, vector bool short __b) {
6426296417Sdim  return __a | ~__b;
6427296417Sdim}
6428296417Sdim
6429309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
6430309124Sdimvec_orc(vector signed int __a, vector signed int __b) {
6431288943Sdim  return __a | ~__b;
6432288943Sdim}
6433288943Sdim
6434309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai vec_orc(vector signed int __a,
6435309124Sdim                                                         vector bool int __b) {
6436288943Sdim  return __a | ~__b;
6437288943Sdim}
6438288943Sdim
6439309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
6440309124Sdimvec_orc(vector bool int __a, vector signed int __b) {
6441288943Sdim  return __a | ~__b;
6442288943Sdim}
6443288943Sdim
6444309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
6445309124Sdimvec_orc(vector unsigned int __a, vector unsigned int __b) {
6446288943Sdim  return __a | ~__b;
6447288943Sdim}
6448288943Sdim
6449309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
6450309124Sdimvec_orc(vector unsigned int __a, vector bool int __b) {
6451288943Sdim  return __a | ~__b;
6452288943Sdim}
6453288943Sdim
6454309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
6455309124Sdimvec_orc(vector bool int __a, vector unsigned int __b) {
6456288943Sdim  return __a | ~__b;
6457288943Sdim}
6458288943Sdim
6459309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_orc(vector bool int __a,
6460309124Sdim                                                       vector bool int __b) {
6461296417Sdim  return __a | ~__b;
6462296417Sdim}
6463296417Sdim
6464314564Sdimstatic __inline__ vector float __ATTRS_o_ai
6465314564Sdimvec_orc(vector bool int __a, vector float __b) {
6466314564Sdim return (vector float)(__a | ~(vector unsigned int)__b);
6467314564Sdim}
6468314564Sdim
6469314564Sdimstatic __inline__ vector float __ATTRS_o_ai
6470314564Sdimvec_orc(vector float __a, vector bool int __b) {
6471314564Sdim  return (vector float)((vector unsigned int)__a | ~__b);
6472314564Sdim}
6473314564Sdim
6474309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
6475288943Sdimvec_orc(vector signed long long __a, vector signed long long __b) {
6476288943Sdim  return __a | ~__b;
6477288943Sdim}
6478288943Sdim
6479309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
6480309124Sdimvec_orc(vector signed long long __a, vector bool long long __b) {
6481288943Sdim  return __a | ~__b;
6482288943Sdim}
6483288943Sdim
6484309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
6485288943Sdimvec_orc(vector bool long long __a, vector signed long long __b) {
6486288943Sdim  return __a | ~__b;
6487288943Sdim}
6488288943Sdim
6489309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
6490288943Sdimvec_orc(vector unsigned long long __a, vector unsigned long long __b) {
6491288943Sdim  return __a | ~__b;
6492288943Sdim}
6493288943Sdim
6494309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
6495288943Sdimvec_orc(vector unsigned long long __a, vector bool long long __b) {
6496288943Sdim  return __a | ~__b;
6497288943Sdim}
6498288943Sdim
6499309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
6500288943Sdimvec_orc(vector bool long long __a, vector unsigned long long __b) {
6501288943Sdim  return __a | ~__b;
6502288943Sdim}
6503296417Sdim
6504309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
6505296417Sdimvec_orc(vector bool long long __a, vector bool long long __b) {
6506296417Sdim  return __a | ~__b;
6507296417Sdim}
6508314564Sdim
6509314564Sdimstatic __inline__ vector double __ATTRS_o_ai
6510314564Sdimvec_orc(vector double __a, vector bool long long __b) {
6511314564Sdim  return (vector double)((vector unsigned long long)__a | ~__b);
6512314564Sdim}
6513314564Sdim
6514314564Sdimstatic __inline__ vector double __ATTRS_o_ai
6515314564Sdimvec_orc(vector bool long long __a, vector double __b) {
6516314564Sdim  return (vector double)(__a | ~(vector unsigned long long)__b);
6517314564Sdim}
6518288943Sdim#endif
6519288943Sdim
6520210299Sed/* vec_vor */
6521210299Sed
6522309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
6523309124Sdimvec_vor(vector signed char __a, vector signed char __b) {
6524249423Sdim  return __a | __b;
6525210299Sed}
6526210299Sed
6527309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
6528309124Sdimvec_vor(vector bool char __a, vector signed char __b) {
6529249423Sdim  return (vector signed char)__a | __b;
6530212904Sdim}
6531212904Sdim
6532309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
6533309124Sdimvec_vor(vector signed char __a, vector bool char __b) {
6534249423Sdim  return __a | (vector signed char)__b;
6535212904Sdim}
6536212904Sdim
6537309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
6538309124Sdimvec_vor(vector unsigned char __a, vector unsigned char __b) {
6539249423Sdim  return __a | __b;
6540210299Sed}
6541210299Sed
6542309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
6543309124Sdimvec_vor(vector bool char __a, vector unsigned char __b) {
6544249423Sdim  return (vector unsigned char)__a | __b;
6545212904Sdim}
6546212904Sdim
6547309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
6548309124Sdimvec_vor(vector unsigned char __a, vector bool char __b) {
6549249423Sdim  return __a | (vector unsigned char)__b;
6550212904Sdim}
6551212904Sdim
6552309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_vor(vector bool char __a,
6553309124Sdim                                                        vector bool char __b) {
6554249423Sdim  return __a | __b;
6555212904Sdim}
6556212904Sdim
6557309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
6558309124Sdim                                                    vector short __b) {
6559249423Sdim  return __a | __b;
6560210299Sed}
6561210299Sed
6562309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vor(vector bool short __a,
6563309124Sdim                                                    vector short __b) {
6564249423Sdim  return (vector short)__a | __b;
6565212904Sdim}
6566212904Sdim
6567309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
6568309124Sdim                                                    vector bool short __b) {
6569249423Sdim  return __a | (vector short)__b;
6570212904Sdim}
6571212904Sdim
6572309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6573309124Sdimvec_vor(vector unsigned short __a, vector unsigned short __b) {
6574249423Sdim  return __a | __b;
6575210299Sed}
6576210299Sed
6577309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6578309124Sdimvec_vor(vector bool short __a, vector unsigned short __b) {
6579249423Sdim  return (vector unsigned short)__a | __b;
6580212904Sdim}
6581212904Sdim
6582309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6583309124Sdimvec_vor(vector unsigned short __a, vector bool short __b) {
6584249423Sdim  return __a | (vector unsigned short)__b;
6585212904Sdim}
6586212904Sdim
6587309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
6588309124Sdimvec_vor(vector bool short __a, vector bool short __b) {
6589249423Sdim  return __a | __b;
6590212904Sdim}
6591212904Sdim
6592309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
6593309124Sdim                                                  vector int __b) {
6594249423Sdim  return __a | __b;
6595210299Sed}
6596210299Sed
6597309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vor(vector bool int __a,
6598309124Sdim                                                  vector int __b) {
6599249423Sdim  return (vector int)__a | __b;
6600212904Sdim}
6601212904Sdim
6602309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
6603309124Sdim                                                  vector bool int __b) {
6604249423Sdim  return __a | (vector int)__b;
6605212904Sdim}
6606212904Sdim
6607309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
6608309124Sdimvec_vor(vector unsigned int __a, vector unsigned int __b) {
6609249423Sdim  return __a | __b;
6610210299Sed}
6611210299Sed
6612309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
6613309124Sdimvec_vor(vector bool int __a, vector unsigned int __b) {
6614249423Sdim  return (vector unsigned int)__a | __b;
6615212904Sdim}
6616212904Sdim
6617309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
6618309124Sdimvec_vor(vector unsigned int __a, vector bool int __b) {
6619249423Sdim  return __a | (vector unsigned int)__b;
6620212904Sdim}
6621212904Sdim
6622309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_vor(vector bool int __a,
6623309124Sdim                                                       vector bool int __b) {
6624249423Sdim  return __a | __b;
6625212904Sdim}
6626212904Sdim
6627309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
6628309124Sdim                                                    vector float __b) {
6629288943Sdim  vector unsigned int __res =
6630288943Sdim      (vector unsigned int)__a | (vector unsigned int)__b;
6631249423Sdim  return (vector float)__res;
6632210299Sed}
6633210299Sed
6634309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vor(vector bool int __a,
6635309124Sdim                                                    vector float __b) {
6636288943Sdim  vector unsigned int __res =
6637288943Sdim      (vector unsigned int)__a | (vector unsigned int)__b;
6638249423Sdim  return (vector float)__res;
6639212904Sdim}
6640212904Sdim
6641309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
6642309124Sdim                                                    vector bool int __b) {
6643288943Sdim  vector unsigned int __res =
6644288943Sdim      (vector unsigned int)__a | (vector unsigned int)__b;
6645249423Sdim  return (vector float)__res;
6646212904Sdim}
6647212904Sdim
6648288943Sdim#ifdef __VSX__
6649309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
6650288943Sdimvec_vor(vector signed long long __a, vector signed long long __b) {
6651288943Sdim  return __a | __b;
6652288943Sdim}
6653288943Sdim
6654309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
6655288943Sdimvec_vor(vector bool long long __a, vector signed long long __b) {
6656288943Sdim  return (vector signed long long)__a | __b;
6657288943Sdim}
6658288943Sdim
6659309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
6660309124Sdimvec_vor(vector signed long long __a, vector bool long long __b) {
6661288943Sdim  return __a | (vector signed long long)__b;
6662288943Sdim}
6663288943Sdim
6664309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
6665288943Sdimvec_vor(vector unsigned long long __a, vector unsigned long long __b) {
6666288943Sdim  return __a | __b;
6667288943Sdim}
6668288943Sdim
6669309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
6670288943Sdimvec_vor(vector bool long long __a, vector unsigned long long __b) {
6671288943Sdim  return (vector unsigned long long)__a | __b;
6672288943Sdim}
6673288943Sdim
6674309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
6675288943Sdimvec_vor(vector unsigned long long __a, vector bool long long __b) {
6676288943Sdim  return __a | (vector unsigned long long)__b;
6677288943Sdim}
6678288943Sdim
6679309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
6680309124Sdimvec_vor(vector bool long long __a, vector bool long long __b) {
6681288943Sdim  return __a | __b;
6682288943Sdim}
6683288943Sdim#endif
6684288943Sdim
6685210299Sed/* vec_pack */
6686210299Sed
6687276479Sdim/* The various vector pack instructions have a big-endian bias, so for
6688276479Sdim   little endian we must handle reversed element numbering.  */
6689276479Sdim
6690309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
6691309124Sdimvec_pack(vector signed short __a, vector signed short __b) {
6692276479Sdim#ifdef __LITTLE_ENDIAN__
6693288943Sdim  return (vector signed char)vec_perm(
6694288943Sdim      __a, __b,
6695288943Sdim      (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
6696288943Sdim                             0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
6697276479Sdim#else
6698288943Sdim  return (vector signed char)vec_perm(
6699288943Sdim      __a, __b,
6700288943Sdim      (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
6701288943Sdim                             0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
6702276479Sdim#endif
6703210299Sed}
6704210299Sed
6705309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
6706309124Sdimvec_pack(vector unsigned short __a, vector unsigned short __b) {
6707276479Sdim#ifdef __LITTLE_ENDIAN__
6708288943Sdim  return (vector unsigned char)vec_perm(
6709288943Sdim      __a, __b,
6710288943Sdim      (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
6711288943Sdim                             0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
6712276479Sdim#else
6713288943Sdim  return (vector unsigned char)vec_perm(
6714288943Sdim      __a, __b,
6715288943Sdim      (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
6716288943Sdim                             0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
6717276479Sdim#endif
6718210299Sed}
6719210299Sed
6720309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
6721309124Sdimvec_pack(vector bool short __a, vector bool short __b) {
6722276479Sdim#ifdef __LITTLE_ENDIAN__
6723288943Sdim  return (vector bool char)vec_perm(
6724288943Sdim      __a, __b,
6725288943Sdim      (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
6726288943Sdim                             0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
6727276479Sdim#else
6728288943Sdim  return (vector bool char)vec_perm(
6729288943Sdim      __a, __b,
6730288943Sdim      (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
6731288943Sdim                             0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
6732276479Sdim#endif
6733212904Sdim}
6734212904Sdim
6735309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_pack(vector int __a,
6736309124Sdim                                                     vector int __b) {
6737276479Sdim#ifdef __LITTLE_ENDIAN__
6738288943Sdim  return (vector short)vec_perm(
6739288943Sdim      __a, __b,
6740288943Sdim      (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
6741288943Sdim                             0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
6742276479Sdim#else
6743288943Sdim  return (vector short)vec_perm(
6744288943Sdim      __a, __b,
6745288943Sdim      (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
6746288943Sdim                             0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
6747276479Sdim#endif
6748210299Sed}
6749210299Sed
6750309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6751309124Sdimvec_pack(vector unsigned int __a, vector unsigned int __b) {
6752276479Sdim#ifdef __LITTLE_ENDIAN__
6753288943Sdim  return (vector unsigned short)vec_perm(
6754288943Sdim      __a, __b,
6755288943Sdim      (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
6756288943Sdim                             0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
6757276479Sdim#else
6758288943Sdim  return (vector unsigned short)vec_perm(
6759288943Sdim      __a, __b,
6760288943Sdim      (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
6761288943Sdim                             0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
6762276479Sdim#endif
6763210299Sed}
6764210299Sed
6765309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai vec_pack(vector bool int __a,
6766309124Sdim                                                          vector bool int __b) {
6767276479Sdim#ifdef __LITTLE_ENDIAN__
6768288943Sdim  return (vector bool short)vec_perm(
6769288943Sdim      __a, __b,
6770288943Sdim      (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
6771288943Sdim                             0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
6772276479Sdim#else
6773288943Sdim  return (vector bool short)vec_perm(
6774288943Sdim      __a, __b,
6775288943Sdim      (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
6776288943Sdim                             0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
6777276479Sdim#endif
6778212904Sdim}
6779212904Sdim
6780288943Sdim#ifdef __VSX__
6781309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
6782309124Sdimvec_pack(vector signed long long __a, vector signed long long __b) {
6783288943Sdim#ifdef __LITTLE_ENDIAN__
6784288943Sdim  return (vector signed int)vec_perm(
6785288943Sdim      __a, __b,
6786288943Sdim      (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
6787288943Sdim                             0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
6788288943Sdim#else
6789288943Sdim  return (vector signed int)vec_perm(
6790288943Sdim      __a, __b,
6791288943Sdim      (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
6792288943Sdim                             0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
6793288943Sdim#endif
6794288943Sdim}
6795309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
6796288943Sdimvec_pack(vector unsigned long long __a, vector unsigned long long __b) {
6797288943Sdim#ifdef __LITTLE_ENDIAN__
6798288943Sdim  return (vector unsigned int)vec_perm(
6799288943Sdim      __a, __b,
6800288943Sdim      (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
6801288943Sdim                             0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
6802288943Sdim#else
6803288943Sdim  return (vector unsigned int)vec_perm(
6804288943Sdim      __a, __b,
6805288943Sdim      (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
6806288943Sdim                             0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
6807288943Sdim#endif
6808288943Sdim}
6809288943Sdim
6810309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
6811309124Sdimvec_pack(vector bool long long __a, vector bool long long __b) {
6812288943Sdim#ifdef __LITTLE_ENDIAN__
6813288943Sdim  return (vector bool int)vec_perm(
6814288943Sdim      __a, __b,
6815288943Sdim      (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
6816288943Sdim                             0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
6817288943Sdim#else
6818288943Sdim  return (vector bool int)vec_perm(
6819288943Sdim      __a, __b,
6820288943Sdim      (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
6821288943Sdim                             0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
6822288943Sdim#endif
6823288943Sdim}
6824288943Sdim
6825314564Sdimstatic __inline__ vector float __ATTRS_o_ai
6826314564Sdimvec_pack(vector double __a, vector double __b) {
6827314564Sdim  return (vector float) (__a[0], __a[1], __b[0], __b[1]);
6828314564Sdim}
6829288943Sdim#endif
6830288943Sdim
6831314564Sdim#ifdef __POWER9_VECTOR__
6832314564Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6833314564Sdimvec_pack_to_short_fp32(vector float __a, vector float __b) {
6834314564Sdim  vector float __resa = __builtin_vsx_xvcvsphp(__a);
6835314564Sdim  vector float __resb = __builtin_vsx_xvcvsphp(__b);
6836314564Sdim#ifdef __LITTLE_ENDIAN__
6837314564Sdim  return (vector unsigned short)vec_mergee(__resa, __resb);
6838314564Sdim#else
6839314564Sdim  return (vector unsigned short)vec_mergeo(__resa, __resb);
6840314564Sdim#endif
6841314564Sdim}
6842314564Sdim
6843314564Sdim#endif
6844210299Sed/* vec_vpkuhum */
6845210299Sed
6846210299Sed#define __builtin_altivec_vpkuhum vec_vpkuhum
6847210299Sed
6848309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
6849309124Sdimvec_vpkuhum(vector signed short __a, vector signed short __b) {
6850276479Sdim#ifdef __LITTLE_ENDIAN__
6851288943Sdim  return (vector signed char)vec_perm(
6852288943Sdim      __a, __b,
6853288943Sdim      (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
6854288943Sdim                             0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
6855276479Sdim#else
6856288943Sdim  return (vector signed char)vec_perm(
6857288943Sdim      __a, __b,
6858288943Sdim      (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
6859288943Sdim                             0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
6860276479Sdim#endif
6861210299Sed}
6862210299Sed
6863309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
6864288943Sdimvec_vpkuhum(vector unsigned short __a, vector unsigned short __b) {
6865276479Sdim#ifdef __LITTLE_ENDIAN__
6866288943Sdim  return (vector unsigned char)vec_perm(
6867288943Sdim      __a, __b,
6868288943Sdim      (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
6869288943Sdim                             0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
6870276479Sdim#else
6871288943Sdim  return (vector unsigned char)vec_perm(
6872288943Sdim      __a, __b,
6873288943Sdim      (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
6874288943Sdim                             0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
6875276479Sdim#endif
6876210299Sed}
6877210299Sed
6878309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
6879309124Sdimvec_vpkuhum(vector bool short __a, vector bool short __b) {
6880276479Sdim#ifdef __LITTLE_ENDIAN__
6881288943Sdim  return (vector bool char)vec_perm(
6882288943Sdim      __a, __b,
6883288943Sdim      (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
6884288943Sdim                             0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
6885276479Sdim#else
6886288943Sdim  return (vector bool char)vec_perm(
6887288943Sdim      __a, __b,
6888288943Sdim      (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
6889288943Sdim                             0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
6890276479Sdim#endif
6891212904Sdim}
6892212904Sdim
6893210299Sed/* vec_vpkuwum */
6894210299Sed
6895210299Sed#define __builtin_altivec_vpkuwum vec_vpkuwum
6896210299Sed
6897309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vpkuwum(vector int __a,
6898309124Sdim                                                        vector int __b) {
6899276479Sdim#ifdef __LITTLE_ENDIAN__
6900288943Sdim  return (vector short)vec_perm(
6901288943Sdim      __a, __b,
6902288943Sdim      (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
6903288943Sdim                             0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
6904276479Sdim#else
6905288943Sdim  return (vector short)vec_perm(
6906288943Sdim      __a, __b,
6907288943Sdim      (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
6908288943Sdim                             0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
6909276479Sdim#endif
6910210299Sed}
6911210299Sed
6912309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
6913309124Sdimvec_vpkuwum(vector unsigned int __a, vector unsigned int __b) {
6914276479Sdim#ifdef __LITTLE_ENDIAN__
6915288943Sdim  return (vector unsigned short)vec_perm(
6916288943Sdim      __a, __b,
6917288943Sdim      (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
6918288943Sdim                             0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
6919276479Sdim#else
6920288943Sdim  return (vector unsigned short)vec_perm(
6921288943Sdim      __a, __b,
6922288943Sdim      (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
6923288943Sdim                             0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
6924276479Sdim#endif
6925210299Sed}
6926210299Sed
6927309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
6928309124Sdimvec_vpkuwum(vector bool int __a, vector bool int __b) {
6929276479Sdim#ifdef __LITTLE_ENDIAN__
6930288943Sdim  return (vector bool short)vec_perm(
6931288943Sdim      __a, __b,
6932288943Sdim      (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
6933288943Sdim                             0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
6934276479Sdim#else
6935288943Sdim  return (vector bool short)vec_perm(
6936288943Sdim      __a, __b,
6937288943Sdim      (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
6938288943Sdim                             0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
6939276479Sdim#endif
6940212904Sdim}
6941212904Sdim
6942288943Sdim/* vec_vpkudum */
6943288943Sdim
6944288943Sdim#ifdef __POWER8_VECTOR__
6945288943Sdim#define __builtin_altivec_vpkudum vec_vpkudum
6946288943Sdim
6947309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vpkudum(vector long long __a,
6948309124Sdim                                                      vector long long __b) {
6949288943Sdim#ifdef __LITTLE_ENDIAN__
6950288943Sdim  return (vector int)vec_perm(
6951288943Sdim      __a, __b,
6952288943Sdim      (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
6953288943Sdim                             0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
6954288943Sdim#else
6955288943Sdim  return (vector int)vec_perm(
6956288943Sdim      __a, __b,
6957288943Sdim      (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
6958288943Sdim                             0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
6959288943Sdim#endif
6960288943Sdim}
6961288943Sdim
6962309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
6963288943Sdimvec_vpkudum(vector unsigned long long __a, vector unsigned long long __b) {
6964288943Sdim#ifdef __LITTLE_ENDIAN__
6965288943Sdim  return (vector unsigned int)vec_perm(
6966288943Sdim      __a, __b,
6967288943Sdim      (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
6968288943Sdim                             0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
6969288943Sdim#else
6970288943Sdim  return (vector unsigned int)vec_perm(
6971288943Sdim      __a, __b,
6972288943Sdim      (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
6973288943Sdim                             0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
6974288943Sdim#endif
6975288943Sdim}
6976288943Sdim
6977309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
6978309124Sdimvec_vpkudum(vector bool long long __a, vector bool long long __b) {
6979288943Sdim#ifdef __LITTLE_ENDIAN__
6980288943Sdim  return (vector bool int)vec_perm(
6981288943Sdim      (vector long long)__a, (vector long long)__b,
6982288943Sdim      (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
6983288943Sdim                             0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
6984288943Sdim#else
6985288943Sdim  return (vector bool int)vec_perm(
6986288943Sdim      (vector long long)__a, (vector long long)__b,
6987288943Sdim      (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
6988288943Sdim                             0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
6989288943Sdim#endif
6990288943Sdim}
6991288943Sdim#endif
6992288943Sdim
6993210299Sed/* vec_packpx */
6994210299Sed
6995309124Sdimstatic __inline__ vector pixel __attribute__((__always_inline__))
6996288943Sdimvec_packpx(vector unsigned int __a, vector unsigned int __b) {
6997276479Sdim#ifdef __LITTLE_ENDIAN__
6998276479Sdim  return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
6999276479Sdim#else
7000249423Sdim  return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
7001276479Sdim#endif
7002210299Sed}
7003210299Sed
7004210299Sed/* vec_vpkpx */
7005210299Sed
7006309124Sdimstatic __inline__ vector pixel __attribute__((__always_inline__))
7007288943Sdimvec_vpkpx(vector unsigned int __a, vector unsigned int __b) {
7008276479Sdim#ifdef __LITTLE_ENDIAN__
7009276479Sdim  return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
7010276479Sdim#else
7011249423Sdim  return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
7012276479Sdim#endif
7013210299Sed}
7014210299Sed
7015210299Sed/* vec_packs */
7016210299Sed
7017309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai vec_packs(vector short __a,
7018309124Sdim                                                            vector short __b) {
7019276479Sdim#ifdef __LITTLE_ENDIAN__
7020276479Sdim  return __builtin_altivec_vpkshss(__b, __a);
7021276479Sdim#else
7022249423Sdim  return __builtin_altivec_vpkshss(__a, __b);
7023276479Sdim#endif
7024210299Sed}
7025210299Sed
7026309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
7027309124Sdimvec_packs(vector unsigned short __a, vector unsigned short __b) {
7028276479Sdim#ifdef __LITTLE_ENDIAN__
7029276479Sdim  return __builtin_altivec_vpkuhus(__b, __a);
7030276479Sdim#else
7031249423Sdim  return __builtin_altivec_vpkuhus(__a, __b);
7032276479Sdim#endif
7033210299Sed}
7034210299Sed
7035309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai vec_packs(vector int __a,
7036309124Sdim                                                             vector int __b) {
7037276479Sdim#ifdef __LITTLE_ENDIAN__
7038276479Sdim  return __builtin_altivec_vpkswss(__b, __a);
7039276479Sdim#else
7040249423Sdim  return __builtin_altivec_vpkswss(__a, __b);
7041276479Sdim#endif
7042210299Sed}
7043210299Sed
7044309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
7045309124Sdimvec_packs(vector unsigned int __a, vector unsigned int __b) {
7046276479Sdim#ifdef __LITTLE_ENDIAN__
7047276479Sdim  return __builtin_altivec_vpkuwus(__b, __a);
7048276479Sdim#else
7049249423Sdim  return __builtin_altivec_vpkuwus(__a, __b);
7050276479Sdim#endif
7051210299Sed}
7052210299Sed
7053288943Sdim#ifdef __POWER8_VECTOR__
7054309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_packs(vector long long __a,
7055309124Sdim                                                    vector long long __b) {
7056288943Sdim#ifdef __LITTLE_ENDIAN__
7057288943Sdim  return __builtin_altivec_vpksdss(__b, __a);
7058288943Sdim#else
7059288943Sdim  return __builtin_altivec_vpksdss(__a, __b);
7060288943Sdim#endif
7061288943Sdim}
7062288943Sdim
7063309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
7064288943Sdimvec_packs(vector unsigned long long __a, vector unsigned long long __b) {
7065288943Sdim#ifdef __LITTLE_ENDIAN__
7066288943Sdim  return __builtin_altivec_vpkudus(__b, __a);
7067288943Sdim#else
7068288943Sdim  return __builtin_altivec_vpkudus(__a, __b);
7069288943Sdim#endif
7070288943Sdim}
7071288943Sdim#endif
7072288943Sdim
7073210299Sed/* vec_vpkshss */
7074210299Sed
7075309124Sdimstatic __inline__ vector signed char __attribute__((__always_inline__))
7076288943Sdimvec_vpkshss(vector short __a, vector short __b) {
7077276479Sdim#ifdef __LITTLE_ENDIAN__
7078276479Sdim  return __builtin_altivec_vpkshss(__b, __a);
7079276479Sdim#else
7080249423Sdim  return __builtin_altivec_vpkshss(__a, __b);
7081276479Sdim#endif
7082210299Sed}
7083210299Sed
7084288943Sdim/* vec_vpksdss */
7085288943Sdim
7086288943Sdim#ifdef __POWER8_VECTOR__
7087309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vpksdss(vector long long __a,
7088309124Sdim                                                      vector long long __b) {
7089288943Sdim#ifdef __LITTLE_ENDIAN__
7090288943Sdim  return __builtin_altivec_vpksdss(__b, __a);
7091288943Sdim#else
7092288943Sdim  return __builtin_altivec_vpksdss(__a, __b);
7093288943Sdim#endif
7094288943Sdim}
7095288943Sdim#endif
7096288943Sdim
7097210299Sed/* vec_vpkuhus */
7098210299Sed
7099309124Sdimstatic __inline__ vector unsigned char __attribute__((__always_inline__))
7100288943Sdimvec_vpkuhus(vector unsigned short __a, vector unsigned short __b) {
7101276479Sdim#ifdef __LITTLE_ENDIAN__
7102276479Sdim  return __builtin_altivec_vpkuhus(__b, __a);
7103276479Sdim#else
7104249423Sdim  return __builtin_altivec_vpkuhus(__a, __b);
7105276479Sdim#endif
7106210299Sed}
7107210299Sed
7108288943Sdim/* vec_vpkudus */
7109288943Sdim
7110288943Sdim#ifdef __POWER8_VECTOR__
7111309124Sdimstatic __inline__ vector unsigned int __attribute__((__always_inline__))
7112288943Sdimvec_vpkudus(vector unsigned long long __a, vector unsigned long long __b) {
7113288943Sdim#ifdef __LITTLE_ENDIAN__
7114288943Sdim  return __builtin_altivec_vpkudus(__b, __a);
7115288943Sdim#else
7116288943Sdim  return __builtin_altivec_vpkudus(__a, __b);
7117288943Sdim#endif
7118288943Sdim}
7119288943Sdim#endif
7120288943Sdim
7121210299Sed/* vec_vpkswss */
7122210299Sed
7123309124Sdimstatic __inline__ vector signed short __attribute__((__always_inline__))
7124288943Sdimvec_vpkswss(vector int __a, vector int __b) {
7125276479Sdim#ifdef __LITTLE_ENDIAN__
7126276479Sdim  return __builtin_altivec_vpkswss(__b, __a);
7127276479Sdim#else
7128249423Sdim  return __builtin_altivec_vpkswss(__a, __b);
7129276479Sdim#endif
7130210299Sed}
7131210299Sed
7132210299Sed/* vec_vpkuwus */
7133210299Sed
7134309124Sdimstatic __inline__ vector unsigned short __attribute__((__always_inline__))
7135288943Sdimvec_vpkuwus(vector unsigned int __a, vector unsigned int __b) {
7136276479Sdim#ifdef __LITTLE_ENDIAN__
7137276479Sdim  return __builtin_altivec_vpkuwus(__b, __a);
7138276479Sdim#else
7139249423Sdim  return __builtin_altivec_vpkuwus(__a, __b);
7140276479Sdim#endif
7141210299Sed}
7142210299Sed
7143210299Sed/* vec_packsu */
7144210299Sed
7145309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
7146309124Sdimvec_packsu(vector short __a, vector short __b) {
7147276479Sdim#ifdef __LITTLE_ENDIAN__
7148276479Sdim  return __builtin_altivec_vpkshus(__b, __a);
7149276479Sdim#else
7150249423Sdim  return __builtin_altivec_vpkshus(__a, __b);
7151276479Sdim#endif
7152210299Sed}
7153210299Sed
7154309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
7155309124Sdimvec_packsu(vector unsigned short __a, vector unsigned short __b) {
7156276479Sdim#ifdef __LITTLE_ENDIAN__
7157276479Sdim  return __builtin_altivec_vpkuhus(__b, __a);
7158276479Sdim#else
7159249423Sdim  return __builtin_altivec_vpkuhus(__a, __b);
7160276479Sdim#endif
7161210299Sed}
7162210299Sed
7163309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
7164309124Sdimvec_packsu(vector int __a, vector int __b) {
7165276479Sdim#ifdef __LITTLE_ENDIAN__
7166276479Sdim  return __builtin_altivec_vpkswus(__b, __a);
7167276479Sdim#else
7168249423Sdim  return __builtin_altivec_vpkswus(__a, __b);
7169276479Sdim#endif
7170210299Sed}
7171210299Sed
7172309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
7173309124Sdimvec_packsu(vector unsigned int __a, vector unsigned int __b) {
7174276479Sdim#ifdef __LITTLE_ENDIAN__
7175276479Sdim  return __builtin_altivec_vpkuwus(__b, __a);
7176276479Sdim#else
7177249423Sdim  return __builtin_altivec_vpkuwus(__a, __b);
7178276479Sdim#endif
7179210299Sed}
7180210299Sed
7181288943Sdim#ifdef __POWER8_VECTOR__
7182309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
7183309124Sdimvec_packsu(vector long long __a, vector long long __b) {
7184288943Sdim#ifdef __LITTLE_ENDIAN__
7185288943Sdim  return __builtin_altivec_vpksdus(__b, __a);
7186288943Sdim#else
7187288943Sdim  return __builtin_altivec_vpksdus(__a, __b);
7188288943Sdim#endif
7189288943Sdim}
7190288943Sdim
7191309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
7192288943Sdimvec_packsu(vector unsigned long long __a, vector unsigned long long __b) {
7193288943Sdim#ifdef __LITTLE_ENDIAN__
7194288943Sdim  return __builtin_altivec_vpkudus(__b, __a);
7195288943Sdim#else
7196288943Sdim  return __builtin_altivec_vpkudus(__a, __b);
7197288943Sdim#endif
7198288943Sdim}
7199288943Sdim#endif
7200288943Sdim
7201210299Sed/* vec_vpkshus */
7202210299Sed
7203309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
7204309124Sdimvec_vpkshus(vector short __a, vector short __b) {
7205276479Sdim#ifdef __LITTLE_ENDIAN__
7206276479Sdim  return __builtin_altivec_vpkshus(__b, __a);
7207276479Sdim#else
7208249423Sdim  return __builtin_altivec_vpkshus(__a, __b);
7209276479Sdim#endif
7210210299Sed}
7211210299Sed
7212309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
7213288943Sdimvec_vpkshus(vector unsigned short __a, vector unsigned short __b) {
7214276479Sdim#ifdef __LITTLE_ENDIAN__
7215276479Sdim  return __builtin_altivec_vpkuhus(__b, __a);
7216276479Sdim#else
7217249423Sdim  return __builtin_altivec_vpkuhus(__a, __b);
7218276479Sdim#endif
7219210299Sed}
7220210299Sed
7221210299Sed/* vec_vpkswus */
7222210299Sed
7223309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
7224309124Sdimvec_vpkswus(vector int __a, vector int __b) {
7225276479Sdim#ifdef __LITTLE_ENDIAN__
7226276479Sdim  return __builtin_altivec_vpkswus(__b, __a);
7227276479Sdim#else
7228249423Sdim  return __builtin_altivec_vpkswus(__a, __b);
7229276479Sdim#endif
7230210299Sed}
7231210299Sed
7232309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
7233309124Sdimvec_vpkswus(vector unsigned int __a, vector unsigned int __b) {
7234276479Sdim#ifdef __LITTLE_ENDIAN__
7235276479Sdim  return __builtin_altivec_vpkuwus(__b, __a);
7236276479Sdim#else
7237249423Sdim  return __builtin_altivec_vpkuwus(__a, __b);
7238276479Sdim#endif
7239210299Sed}
7240210299Sed
7241288943Sdim/* vec_vpksdus */
7242288943Sdim
7243288943Sdim#ifdef __POWER8_VECTOR__
7244309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
7245309124Sdimvec_vpksdus(vector long long __a, vector long long __b) {
7246288943Sdim#ifdef __LITTLE_ENDIAN__
7247288943Sdim  return __builtin_altivec_vpksdus(__b, __a);
7248288943Sdim#else
7249288943Sdim  return __builtin_altivec_vpksdus(__a, __b);
7250288943Sdim#endif
7251288943Sdim}
7252288943Sdim#endif
7253288943Sdim
7254210299Sed/* vec_perm */
7255210299Sed
7256276479Sdim// The vperm instruction is defined architecturally with a big-endian bias.
7257276479Sdim// For little endian, we swap the input operands and invert the permute
7258276479Sdim// control vector.  Only the rightmost 5 bits matter, so we could use
7259276479Sdim// a vector of all 31s instead of all 255s to perform the inversion.
7260276479Sdim// However, when the PCV is not a constant, using 255 has an advantage
7261276479Sdim// in that the vec_xor can be recognized as a vec_nor (and for P8 and
7262276479Sdim// later, possibly a vec_nand).
7263276479Sdim
7264309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai vec_perm(
7265309124Sdim    vector signed char __a, vector signed char __b, vector unsigned char __c) {
7266276479Sdim#ifdef __LITTLE_ENDIAN__
7267288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7268288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7269276479Sdim  __d = vec_xor(__c, __d);
7270288943Sdim  return (vector signed char)__builtin_altivec_vperm_4si((vector int)__b,
7271288943Sdim                                                         (vector int)__a, __d);
7272276479Sdim#else
7273288943Sdim  return (vector signed char)__builtin_altivec_vperm_4si((vector int)__a,
7274288943Sdim                                                         (vector int)__b, __c);
7275276479Sdim#endif
7276210299Sed}
7277210299Sed
7278309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
7279309124Sdimvec_perm(vector unsigned char __a, vector unsigned char __b,
7280309124Sdim         vector unsigned char __c) {
7281276479Sdim#ifdef __LITTLE_ENDIAN__
7282288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7283288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7284276479Sdim  __d = vec_xor(__c, __d);
7285288943Sdim  return (vector unsigned char)__builtin_altivec_vperm_4si(
7286288943Sdim      (vector int)__b, (vector int)__a, __d);
7287276479Sdim#else
7288288943Sdim  return (vector unsigned char)__builtin_altivec_vperm_4si(
7289288943Sdim      (vector int)__a, (vector int)__b, __c);
7290276479Sdim#endif
7291210299Sed}
7292210299Sed
7293309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
7294309124Sdimvec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c) {
7295276479Sdim#ifdef __LITTLE_ENDIAN__
7296288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7297288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7298276479Sdim  __d = vec_xor(__c, __d);
7299288943Sdim  return (vector bool char)__builtin_altivec_vperm_4si((vector int)__b,
7300288943Sdim                                                       (vector int)__a, __d);
7301276479Sdim#else
7302288943Sdim  return (vector bool char)__builtin_altivec_vperm_4si((vector int)__a,
7303288943Sdim                                                       (vector int)__b, __c);
7304276479Sdim#endif
7305212904Sdim}
7306212904Sdim
7307309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
7308309124Sdim                                                     vector signed short __b,
7309309124Sdim                                                     vector unsigned char __c) {
7310276479Sdim#ifdef __LITTLE_ENDIAN__
7311288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7312288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7313276479Sdim  __d = vec_xor(__c, __d);
7314288943Sdim  return (vector signed short)__builtin_altivec_vperm_4si((vector int)__b,
7315288943Sdim                                                          (vector int)__a, __d);
7316276479Sdim#else
7317288943Sdim  return (vector signed short)__builtin_altivec_vperm_4si((vector int)__a,
7318288943Sdim                                                          (vector int)__b, __c);
7319276479Sdim#endif
7320210299Sed}
7321210299Sed
7322309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
7323309124Sdimvec_perm(vector unsigned short __a, vector unsigned short __b,
7324309124Sdim         vector unsigned char __c) {
7325276479Sdim#ifdef __LITTLE_ENDIAN__
7326288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7327288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7328276479Sdim  __d = vec_xor(__c, __d);
7329288943Sdim  return (vector unsigned short)__builtin_altivec_vperm_4si(
7330288943Sdim      (vector int)__b, (vector int)__a, __d);
7331276479Sdim#else
7332288943Sdim  return (vector unsigned short)__builtin_altivec_vperm_4si(
7333288943Sdim      (vector int)__a, (vector int)__b, __c);
7334276479Sdim#endif
7335210299Sed}
7336210299Sed
7337309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai vec_perm(
7338309124Sdim    vector bool short __a, vector bool short __b, vector unsigned char __c) {
7339276479Sdim#ifdef __LITTLE_ENDIAN__
7340288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7341288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7342276479Sdim  __d = vec_xor(__c, __d);
7343288943Sdim  return (vector bool short)__builtin_altivec_vperm_4si((vector int)__b,
7344288943Sdim                                                        (vector int)__a, __d);
7345276479Sdim#else
7346288943Sdim  return (vector bool short)__builtin_altivec_vperm_4si((vector int)__a,
7347288943Sdim                                                        (vector int)__b, __c);
7348276479Sdim#endif
7349212904Sdim}
7350212904Sdim
7351309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
7352309124Sdim                                                     vector pixel __b,
7353309124Sdim                                                     vector unsigned char __c) {
7354276479Sdim#ifdef __LITTLE_ENDIAN__
7355288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7356288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7357276479Sdim  __d = vec_xor(__c, __d);
7358288943Sdim  return (vector pixel)__builtin_altivec_vperm_4si((vector int)__b,
7359288943Sdim                                                   (vector int)__a, __d);
7360276479Sdim#else
7361288943Sdim  return (vector pixel)__builtin_altivec_vperm_4si((vector int)__a,
7362288943Sdim                                                   (vector int)__b, __c);
7363276479Sdim#endif
7364212904Sdim}
7365212904Sdim
7366309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
7367309124Sdim                                                   vector signed int __b,
7368309124Sdim                                                   vector unsigned char __c) {
7369276479Sdim#ifdef __LITTLE_ENDIAN__
7370288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7371288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7372276479Sdim  __d = vec_xor(__c, __d);
7373288943Sdim  return (vector signed int)__builtin_altivec_vperm_4si(__b, __a, __d);
7374276479Sdim#else
7375288943Sdim  return (vector signed int)__builtin_altivec_vperm_4si(__a, __b, __c);
7376276479Sdim#endif
7377210299Sed}
7378210299Sed
7379309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
7380309124Sdimvec_perm(vector unsigned int __a, vector unsigned int __b,
7381309124Sdim         vector unsigned char __c) {
7382276479Sdim#ifdef __LITTLE_ENDIAN__
7383288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7384288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7385276479Sdim  __d = vec_xor(__c, __d);
7386288943Sdim  return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__b,
7387288943Sdim                                                          (vector int)__a, __d);
7388276479Sdim#else
7389288943Sdim  return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__a,
7390288943Sdim                                                          (vector int)__b, __c);
7391276479Sdim#endif
7392210299Sed}
7393210299Sed
7394309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
7395309124Sdimvec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
7396276479Sdim#ifdef __LITTLE_ENDIAN__
7397288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7398288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7399276479Sdim  __d = vec_xor(__c, __d);
7400288943Sdim  return (vector bool int)__builtin_altivec_vperm_4si((vector int)__b,
7401288943Sdim                                                      (vector int)__a, __d);
7402276479Sdim#else
7403288943Sdim  return (vector bool int)__builtin_altivec_vperm_4si((vector int)__a,
7404288943Sdim                                                      (vector int)__b, __c);
7405276479Sdim#endif
7406212904Sdim}
7407212904Sdim
7408309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
7409309124Sdim                                                     vector float __b,
7410309124Sdim                                                     vector unsigned char __c) {
7411276479Sdim#ifdef __LITTLE_ENDIAN__
7412288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7413288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7414276479Sdim  __d = vec_xor(__c, __d);
7415288943Sdim  return (vector float)__builtin_altivec_vperm_4si((vector int)__b,
7416288943Sdim                                                   (vector int)__a, __d);
7417276479Sdim#else
7418288943Sdim  return (vector float)__builtin_altivec_vperm_4si((vector int)__a,
7419288943Sdim                                                   (vector int)__b, __c);
7420276479Sdim#endif
7421210299Sed}
7422210299Sed
7423280031Sdim#ifdef __VSX__
7424309124Sdimstatic __inline__ vector long long __ATTRS_o_ai
7425309124Sdimvec_perm(vector signed long long __a, vector signed long long __b,
7426309124Sdim         vector unsigned char __c) {
7427280031Sdim#ifdef __LITTLE_ENDIAN__
7428288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7429288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7430280031Sdim  __d = vec_xor(__c, __d);
7431288943Sdim  return (vector signed long long)__builtin_altivec_vperm_4si(
7432288943Sdim      (vector int)__b, (vector int)__a, __d);
7433280031Sdim#else
7434288943Sdim  return (vector signed long long)__builtin_altivec_vperm_4si(
7435288943Sdim      (vector int)__a, (vector int)__b, __c);
7436280031Sdim#endif
7437280031Sdim}
7438280031Sdim
7439309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
7440280031Sdimvec_perm(vector unsigned long long __a, vector unsigned long long __b,
7441288943Sdim         vector unsigned char __c) {
7442280031Sdim#ifdef __LITTLE_ENDIAN__
7443288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7444288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7445280031Sdim  __d = vec_xor(__c, __d);
7446288943Sdim  return (vector unsigned long long)__builtin_altivec_vperm_4si(
7447288943Sdim      (vector int)__b, (vector int)__a, __d);
7448280031Sdim#else
7449288943Sdim  return (vector unsigned long long)__builtin_altivec_vperm_4si(
7450288943Sdim      (vector int)__a, (vector int)__b, __c);
7451280031Sdim#endif
7452280031Sdim}
7453280031Sdim
7454309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
7455288943Sdimvec_perm(vector bool long long __a, vector bool long long __b,
7456288943Sdim         vector unsigned char __c) {
7457280031Sdim#ifdef __LITTLE_ENDIAN__
7458288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7459288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7460280031Sdim  __d = vec_xor(__c, __d);
7461288943Sdim  return (vector bool long long)__builtin_altivec_vperm_4si(
7462288943Sdim      (vector int)__b, (vector int)__a, __d);
7463280031Sdim#else
7464288943Sdim  return (vector bool long long)__builtin_altivec_vperm_4si(
7465288943Sdim      (vector int)__a, (vector int)__b, __c);
7466280031Sdim#endif
7467280031Sdim}
7468288943Sdim
7469309124Sdimstatic __inline__ vector double __ATTRS_o_ai
7470309124Sdimvec_perm(vector double __a, vector double __b, vector unsigned char __c) {
7471288943Sdim#ifdef __LITTLE_ENDIAN__
7472288943Sdim  vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
7473288943Sdim                              255, 255, 255, 255, 255, 255, 255, 255};
7474288943Sdim  __d = vec_xor(__c, __d);
7475288943Sdim  return (vector double)__builtin_altivec_vperm_4si((vector int)__b,
7476288943Sdim                                                    (vector int)__a, __d);
7477288943Sdim#else
7478288943Sdim  return (vector double)__builtin_altivec_vperm_4si((vector int)__a,
7479288943Sdim                                                    (vector int)__b, __c);
7480280031Sdim#endif
7481288943Sdim}
7482288943Sdim#endif
7483280031Sdim
7484210299Sed/* vec_vperm */
7485210299Sed
7486309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai vec_vperm(
7487309124Sdim    vector signed char __a, vector signed char __b, vector unsigned char __c) {
7488276479Sdim  return vec_perm(__a, __b, __c);
7489210299Sed}
7490210299Sed
7491309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
7492309124Sdimvec_vperm(vector unsigned char __a, vector unsigned char __b,
7493309124Sdim          vector unsigned char __c) {
7494276479Sdim  return vec_perm(__a, __b, __c);
7495210299Sed}
7496210299Sed
7497309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_vperm(
7498309124Sdim    vector bool char __a, vector bool char __b, vector unsigned char __c) {
7499276479Sdim  return vec_perm(__a, __b, __c);
7500212904Sdim}
7501212904Sdim
7502309124Sdimstatic __inline__ vector short __ATTRS_o_ai
7503309124Sdimvec_vperm(vector short __a, vector short __b, vector unsigned char __c) {
7504276479Sdim  return vec_perm(__a, __b, __c);
7505210299Sed}
7506210299Sed
7507309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
7508309124Sdimvec_vperm(vector unsigned short __a, vector unsigned short __b,
7509309124Sdim          vector unsigned char __c) {
7510276479Sdim  return vec_perm(__a, __b, __c);
7511210299Sed}
7512210299Sed
7513309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai vec_vperm(
7514309124Sdim    vector bool short __a, vector bool short __b, vector unsigned char __c) {
7515276479Sdim  return vec_perm(__a, __b, __c);
7516212904Sdim}
7517212904Sdim
7518309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai
7519309124Sdimvec_vperm(vector pixel __a, vector pixel __b, vector unsigned char __c) {
7520276479Sdim  return vec_perm(__a, __b, __c);
7521212904Sdim}
7522212904Sdim
7523309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vperm(vector int __a,
7524309124Sdim                                                    vector int __b,
7525309124Sdim                                                    vector unsigned char __c) {
7526276479Sdim  return vec_perm(__a, __b, __c);
7527210299Sed}
7528210299Sed
7529309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
7530309124Sdimvec_vperm(vector unsigned int __a, vector unsigned int __b,
7531309124Sdim          vector unsigned char __c) {
7532276479Sdim  return vec_perm(__a, __b, __c);
7533210299Sed}
7534210299Sed
7535309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
7536309124Sdimvec_vperm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
7537276479Sdim  return vec_perm(__a, __b, __c);
7538212904Sdim}
7539212904Sdim
7540309124Sdimstatic __inline__ vector float __ATTRS_o_ai
7541309124Sdimvec_vperm(vector float __a, vector float __b, vector unsigned char __c) {
7542276479Sdim  return vec_perm(__a, __b, __c);
7543210299Sed}
7544210299Sed
7545280031Sdim#ifdef __VSX__
7546309124Sdimstatic __inline__ vector long long __ATTRS_o_ai vec_vperm(
7547309124Sdim    vector long long __a, vector long long __b, vector unsigned char __c) {
7548280031Sdim  return vec_perm(__a, __b, __c);
7549280031Sdim}
7550280031Sdim
7551309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
7552280031Sdimvec_vperm(vector unsigned long long __a, vector unsigned long long __b,
7553288943Sdim          vector unsigned char __c) {
7554280031Sdim  return vec_perm(__a, __b, __c);
7555280031Sdim}
7556280031Sdim
7557309124Sdimstatic __inline__ vector double __ATTRS_o_ai
7558309124Sdimvec_vperm(vector double __a, vector double __b, vector unsigned char __c) {
7559280031Sdim  return vec_perm(__a, __b, __c);
7560280031Sdim}
7561280031Sdim#endif
7562280031Sdim
7563210299Sed/* vec_re */
7564210299Sed
7565309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_re(vector float __a) {
7566288943Sdim#ifdef __VSX__
7567288943Sdim  return __builtin_vsx_xvresp(__a);
7568288943Sdim#else
7569249423Sdim  return __builtin_altivec_vrefp(__a);
7570288943Sdim#endif
7571210299Sed}
7572210299Sed
7573288943Sdim#ifdef __VSX__
7574309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_re(vector double __a) {
7575288943Sdim  return __builtin_vsx_xvredp(__a);
7576288943Sdim}
7577288943Sdim#endif
7578288943Sdim
7579210299Sed/* vec_vrefp */
7580210299Sed
7581309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
7582288943Sdimvec_vrefp(vector float __a) {
7583249423Sdim  return __builtin_altivec_vrefp(__a);
7584210299Sed}
7585210299Sed
7586210299Sed/* vec_rl */
7587210299Sed
7588309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
7589309124Sdimvec_rl(vector signed char __a, vector unsigned char __b) {
7590249423Sdim  return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
7591210299Sed}
7592210299Sed
7593309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
7594309124Sdimvec_rl(vector unsigned char __a, vector unsigned char __b) {
7595249423Sdim  return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
7596210299Sed}
7597210299Sed
7598309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_rl(vector short __a,
7599309124Sdim                                                   vector unsigned short __b) {
7600249423Sdim  return __builtin_altivec_vrlh(__a, __b);
7601210299Sed}
7602210299Sed
7603309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
7604309124Sdimvec_rl(vector unsigned short __a, vector unsigned short __b) {
7605249423Sdim  return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
7606210299Sed}
7607210299Sed
7608309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_rl(vector int __a,
7609309124Sdim                                                 vector unsigned int __b) {
7610249423Sdim  return __builtin_altivec_vrlw(__a, __b);
7611210299Sed}
7612210299Sed
7613309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
7614309124Sdimvec_rl(vector unsigned int __a, vector unsigned int __b) {
7615249423Sdim  return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
7616210299Sed}
7617210299Sed
7618288943Sdim#ifdef __POWER8_VECTOR__
7619309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
7620288943Sdimvec_rl(vector signed long long __a, vector unsigned long long __b) {
7621288943Sdim  return __builtin_altivec_vrld(__a, __b);
7622288943Sdim}
7623288943Sdim
7624309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
7625288943Sdimvec_rl(vector unsigned long long __a, vector unsigned long long __b) {
7626288943Sdim  return __builtin_altivec_vrld(__a, __b);
7627288943Sdim}
7628288943Sdim#endif
7629288943Sdim
7630314564Sdim/* vec_rlmi */
7631314564Sdim#ifdef __POWER9_VECTOR__
7632314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
7633314564Sdimvec_rlmi(vector unsigned int __a, vector unsigned int __b,
7634314564Sdim         vector unsigned int __c) {
7635314564Sdim  return __builtin_altivec_vrlwmi(__a, __c, __b);
7636314564Sdim}
7637314564Sdim
7638314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
7639314564Sdimvec_rlmi(vector unsigned long long __a, vector unsigned long long __b,
7640314564Sdim         vector unsigned long long __c) {
7641314564Sdim  return __builtin_altivec_vrldmi(__a, __c, __b);
7642314564Sdim}
7643314564Sdim
7644314564Sdim/* vec_rlnm */
7645314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
7646314564Sdimvec_rlnm(vector unsigned int __a, vector unsigned int __b,
7647314564Sdim         vector unsigned int __c) {
7648314564Sdim  vector unsigned int OneByte = { 0x8, 0x8, 0x8, 0x8 };
7649314564Sdim  return __builtin_altivec_vrlwnm(__a, ((__c << OneByte) | __b));
7650314564Sdim}
7651314564Sdim
7652314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
7653314564Sdimvec_rlnm(vector unsigned long long __a, vector unsigned long long __b,
7654314564Sdim         vector unsigned long long __c) {
7655314564Sdim  vector unsigned long long OneByte = { 0x8, 0x8 };
7656314564Sdim  return __builtin_altivec_vrldnm(__a, ((__c << OneByte) | __b));
7657314564Sdim}
7658314564Sdim#endif
7659314564Sdim
7660210299Sed/* vec_vrlb */
7661210299Sed
7662309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
7663309124Sdimvec_vrlb(vector signed char __a, vector unsigned char __b) {
7664249423Sdim  return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
7665210299Sed}
7666210299Sed
7667309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
7668309124Sdimvec_vrlb(vector unsigned char __a, vector unsigned char __b) {
7669249423Sdim  return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
7670210299Sed}
7671210299Sed
7672210299Sed/* vec_vrlh */
7673210299Sed
7674309124Sdimstatic __inline__ vector short __ATTRS_o_ai
7675309124Sdimvec_vrlh(vector short __a, vector unsigned short __b) {
7676249423Sdim  return __builtin_altivec_vrlh(__a, __b);
7677210299Sed}
7678210299Sed
7679309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
7680309124Sdimvec_vrlh(vector unsigned short __a, vector unsigned short __b) {
7681249423Sdim  return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
7682210299Sed}
7683210299Sed
7684210299Sed/* vec_vrlw */
7685210299Sed
7686309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vrlw(vector int __a,
7687309124Sdim                                                   vector unsigned int __b) {
7688249423Sdim  return __builtin_altivec_vrlw(__a, __b);
7689210299Sed}
7690210299Sed
7691309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
7692309124Sdimvec_vrlw(vector unsigned int __a, vector unsigned int __b) {
7693249423Sdim  return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
7694210299Sed}
7695210299Sed
7696210299Sed/* vec_round */
7697210299Sed
7698309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_round(vector float __a) {
7699288943Sdim#ifdef __VSX__
7700288943Sdim  return __builtin_vsx_xvrspi(__a);
7701288943Sdim#else
7702249423Sdim  return __builtin_altivec_vrfin(__a);
7703288943Sdim#endif
7704210299Sed}
7705210299Sed
7706288943Sdim#ifdef __VSX__
7707309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) {
7708288943Sdim  return __builtin_vsx_xvrdpi(__a);
7709288943Sdim}
7710288943Sdim
7711288943Sdim/* vec_rint */
7712288943Sdim
7713309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_rint(vector float __a) {
7714288943Sdim  return __builtin_vsx_xvrspic(__a);
7715288943Sdim}
7716288943Sdim
7717309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a) {
7718288943Sdim  return __builtin_vsx_xvrdpic(__a);
7719288943Sdim}
7720288943Sdim
7721288943Sdim/* vec_nearbyint */
7722288943Sdim
7723309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_nearbyint(vector float __a) {
7724288943Sdim  return __builtin_vsx_xvrspi(__a);
7725288943Sdim}
7726288943Sdim
7727309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_nearbyint(vector double __a) {
7728288943Sdim  return __builtin_vsx_xvrdpi(__a);
7729288943Sdim}
7730288943Sdim#endif
7731288943Sdim
7732210299Sed/* vec_vrfin */
7733210299Sed
7734309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
7735288943Sdimvec_vrfin(vector float __a) {
7736249423Sdim  return __builtin_altivec_vrfin(__a);
7737210299Sed}
7738210299Sed
7739288943Sdim/* vec_sqrt */
7740288943Sdim
7741288943Sdim#ifdef __VSX__
7742309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_sqrt(vector float __a) {
7743288943Sdim  return __builtin_vsx_xvsqrtsp(__a);
7744288943Sdim}
7745288943Sdim
7746309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_sqrt(vector double __a) {
7747288943Sdim  return __builtin_vsx_xvsqrtdp(__a);
7748288943Sdim}
7749288943Sdim#endif
7750288943Sdim
7751210299Sed/* vec_rsqrte */
7752210299Sed
7753309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_rsqrte(vector float __a) {
7754288943Sdim#ifdef __VSX__
7755288943Sdim  return __builtin_vsx_xvrsqrtesp(__a);
7756288943Sdim#else
7757249423Sdim  return __builtin_altivec_vrsqrtefp(__a);
7758288943Sdim#endif
7759210299Sed}
7760210299Sed
7761288943Sdim#ifdef __VSX__
7762309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_rsqrte(vector double __a) {
7763288943Sdim  return __builtin_vsx_xvrsqrtedp(__a);
7764288943Sdim}
7765288943Sdim#endif
7766288943Sdim
7767210299Sed/* vec_vrsqrtefp */
7768210299Sed
7769309124Sdimstatic __inline__ __vector float __attribute__((__always_inline__))
7770288943Sdimvec_vrsqrtefp(vector float __a) {
7771249423Sdim  return __builtin_altivec_vrsqrtefp(__a);
7772210299Sed}
7773210299Sed
7774210299Sed/* vec_sel */
7775210299Sed
7776210299Sed#define __builtin_altivec_vsel_4si vec_sel
7777210299Sed
7778309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai vec_sel(
7779309124Sdim    vector signed char __a, vector signed char __b, vector unsigned char __c) {
7780249423Sdim  return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
7781210299Sed}
7782210299Sed
7783309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
7784309124Sdimvec_sel(vector signed char __a, vector signed char __b, vector bool char __c) {
7785249423Sdim  return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
7786212904Sdim}
7787212904Sdim
7788309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
7789309124Sdimvec_sel(vector unsigned char __a, vector unsigned char __b,
7790309124Sdim        vector unsigned char __c) {
7791249423Sdim  return (__a & ~__c) | (__b & __c);
7792210299Sed}
7793210299Sed
7794309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai vec_sel(
7795309124Sdim    vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
7796249423Sdim  return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
7797212904Sdim}
7798212904Sdim
7799309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
7800309124Sdimvec_sel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
7801249423Sdim  return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
7802212904Sdim}
7803212904Sdim
7804309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_sel(vector bool char __a,
7805309124Sdim                                                        vector bool char __b,
7806309124Sdim                                                        vector bool char __c) {
7807249423Sdim  return (__a & ~__c) | (__b & __c);
7808212904Sdim}
7809212904Sdim
7810309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
7811309124Sdim                                                    vector short __b,
7812309124Sdim                                                    vector unsigned short __c) {
7813249423Sdim  return (__a & ~(vector short)__c) | (__b & (vector short)__c);
7814210299Sed}
7815210299Sed
7816309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
7817309124Sdim                                                    vector short __b,
7818309124Sdim                                                    vector bool short __c) {
7819249423Sdim  return (__a & ~(vector short)__c) | (__b & (vector short)__c);
7820212904Sdim}
7821212904Sdim
7822309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
7823309124Sdimvec_sel(vector unsigned short __a, vector unsigned short __b,
7824309124Sdim        vector unsigned short __c) {
7825249423Sdim  return (__a & ~__c) | (__b & __c);
7826210299Sed}
7827210299Sed
7828309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
7829309124Sdimvec_sel(vector unsigned short __a, vector unsigned short __b,
7830309124Sdim        vector bool short __c) {
7831288943Sdim  return (__a & ~(vector unsigned short)__c) |
7832288943Sdim         (__b & (vector unsigned short)__c);
7833212904Sdim}
7834212904Sdim
7835309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai vec_sel(
7836309124Sdim    vector bool short __a, vector bool short __b, vector unsigned short __c) {
7837249423Sdim  return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
7838212904Sdim}
7839212904Sdim
7840309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
7841309124Sdimvec_sel(vector bool short __a, vector bool short __b, vector bool short __c) {
7842249423Sdim  return (__a & ~__c) | (__b & __c);
7843212904Sdim}
7844212904Sdim
7845309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
7846309124Sdim                                                  vector int __b,
7847309124Sdim                                                  vector unsigned int __c) {
7848249423Sdim  return (__a & ~(vector int)__c) | (__b & (vector int)__c);
7849210299Sed}
7850210299Sed
7851309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
7852309124Sdim                                                  vector int __b,
7853309124Sdim                                                  vector bool int __c) {
7854249423Sdim  return (__a & ~(vector int)__c) | (__b & (vector int)__c);
7855212904Sdim}
7856212904Sdim
7857309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai vec_sel(
7858309124Sdim    vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
7859249423Sdim  return (__a & ~__c) | (__b & __c);
7860210299Sed}
7861210299Sed
7862309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
7863309124Sdimvec_sel(vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
7864249423Sdim  return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
7865212904Sdim}
7866212904Sdim
7867309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
7868309124Sdimvec_sel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
7869249423Sdim  return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
7870212904Sdim}
7871212904Sdim
7872309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_sel(vector bool int __a,
7873309124Sdim                                                       vector bool int __b,
7874309124Sdim                                                       vector bool int __c) {
7875249423Sdim  return (__a & ~__c) | (__b & __c);
7876212904Sdim}
7877212904Sdim
7878309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
7879309124Sdim                                                    vector float __b,
7880309124Sdim                                                    vector unsigned int __c) {
7881288943Sdim  vector int __res = ((vector int)__a & ~(vector int)__c) |
7882288943Sdim                     ((vector int)__b & (vector int)__c);
7883249423Sdim  return (vector float)__res;
7884210299Sed}
7885210299Sed
7886309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
7887309124Sdim                                                    vector float __b,
7888309124Sdim                                                    vector bool int __c) {
7889288943Sdim  vector int __res = ((vector int)__a & ~(vector int)__c) |
7890288943Sdim                     ((vector int)__b & (vector int)__c);
7891249423Sdim  return (vector float)__res;
7892212904Sdim}
7893212904Sdim
7894288943Sdim#ifdef __VSX__
7895309124Sdimstatic __inline__ vector double __ATTRS_o_ai
7896309124Sdimvec_sel(vector double __a, vector double __b, vector bool long long __c) {
7897288943Sdim  vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
7898309124Sdim                           ((vector long long)__b & (vector long long)__c);
7899288943Sdim  return (vector double)__res;
7900288943Sdim}
7901288943Sdim
7902309124Sdimstatic __inline__ vector double __ATTRS_o_ai
7903309124Sdimvec_sel(vector double __a, vector double __b, vector unsigned long long __c) {
7904288943Sdim  vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
7905309124Sdim                           ((vector long long)__b & (vector long long)__c);
7906288943Sdim  return (vector double)__res;
7907288943Sdim}
7908288943Sdim#endif
7909288943Sdim
7910210299Sed/* vec_vsel */
7911210299Sed
7912309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai vec_vsel(
7913309124Sdim    vector signed char __a, vector signed char __b, vector unsigned char __c) {
7914249423Sdim  return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
7915210299Sed}
7916210299Sed
7917309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
7918309124Sdimvec_vsel(vector signed char __a, vector signed char __b, vector bool char __c) {
7919249423Sdim  return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
7920212904Sdim}
7921212904Sdim
7922309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
7923309124Sdimvec_vsel(vector unsigned char __a, vector unsigned char __b,
7924309124Sdim         vector unsigned char __c) {
7925249423Sdim  return (__a & ~__c) | (__b & __c);
7926210299Sed}
7927210299Sed
7928309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai vec_vsel(
7929309124Sdim    vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
7930249423Sdim  return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
7931212904Sdim}
7932212904Sdim
7933309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
7934309124Sdimvec_vsel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
7935249423Sdim  return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
7936212904Sdim}
7937212904Sdim
7938309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_vsel(vector bool char __a,
7939309124Sdim                                                         vector bool char __b,
7940309124Sdim                                                         vector bool char __c) {
7941249423Sdim  return (__a & ~__c) | (__b & __c);
7942212904Sdim}
7943212904Sdim
7944309124Sdimstatic __inline__ vector short __ATTRS_o_ai
7945309124Sdimvec_vsel(vector short __a, vector short __b, vector unsigned short __c) {
7946249423Sdim  return (__a & ~(vector short)__c) | (__b & (vector short)__c);
7947210299Sed}
7948210299Sed
7949309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsel(vector short __a,
7950309124Sdim                                                     vector short __b,
7951309124Sdim                                                     vector bool short __c) {
7952249423Sdim  return (__a & ~(vector short)__c) | (__b & (vector short)__c);
7953212904Sdim}
7954212904Sdim
7955309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
7956309124Sdimvec_vsel(vector unsigned short __a, vector unsigned short __b,
7957309124Sdim         vector unsigned short __c) {
7958249423Sdim  return (__a & ~__c) | (__b & __c);
7959210299Sed}
7960210299Sed
7961309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
7962309124Sdimvec_vsel(vector unsigned short __a, vector unsigned short __b,
7963309124Sdim         vector bool short __c) {
7964288943Sdim  return (__a & ~(vector unsigned short)__c) |
7965288943Sdim         (__b & (vector unsigned short)__c);
7966212904Sdim}
7967212904Sdim
7968309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai vec_vsel(
7969309124Sdim    vector bool short __a, vector bool short __b, vector unsigned short __c) {
7970249423Sdim  return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
7971212904Sdim}
7972212904Sdim
7973309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
7974309124Sdimvec_vsel(vector bool short __a, vector bool short __b, vector bool short __c) {
7975249423Sdim  return (__a & ~__c) | (__b & __c);
7976212904Sdim}
7977212904Sdim
7978309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
7979309124Sdim                                                   vector int __b,
7980309124Sdim                                                   vector unsigned int __c) {
7981249423Sdim  return (__a & ~(vector int)__c) | (__b & (vector int)__c);
7982210299Sed}
7983210299Sed
7984309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
7985309124Sdim                                                   vector int __b,
7986309124Sdim                                                   vector bool int __c) {
7987249423Sdim  return (__a & ~(vector int)__c) | (__b & (vector int)__c);
7988212904Sdim}
7989212904Sdim
7990309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
7991309124Sdim    vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
7992249423Sdim  return (__a & ~__c) | (__b & __c);
7993210299Sed}
7994210299Sed
7995309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
7996309124Sdim    vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
7997249423Sdim  return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
7998212904Sdim}
7999212904Sdim
8000309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
8001309124Sdimvec_vsel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
8002249423Sdim  return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
8003212904Sdim}
8004212904Sdim
8005309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_vsel(vector bool int __a,
8006309124Sdim                                                        vector bool int __b,
8007309124Sdim                                                        vector bool int __c) {
8008249423Sdim  return (__a & ~__c) | (__b & __c);
8009212904Sdim}
8010212904Sdim
8011309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
8012309124Sdim                                                     vector float __b,
8013309124Sdim                                                     vector unsigned int __c) {
8014288943Sdim  vector int __res = ((vector int)__a & ~(vector int)__c) |
8015288943Sdim                     ((vector int)__b & (vector int)__c);
8016249423Sdim  return (vector float)__res;
8017210299Sed}
8018210299Sed
8019309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
8020309124Sdim                                                     vector float __b,
8021309124Sdim                                                     vector bool int __c) {
8022288943Sdim  vector int __res = ((vector int)__a & ~(vector int)__c) |
8023288943Sdim                     ((vector int)__b & (vector int)__c);
8024249423Sdim  return (vector float)__res;
8025212904Sdim}
8026212904Sdim
8027210299Sed/* vec_sl */
8028210299Sed
8029321369Sdim// vec_sl does modulo arithmetic on __b first, so __b is allowed to be more
8030321369Sdim// than the length of __a.
8031309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8032309124Sdimvec_sl(vector unsigned char __a, vector unsigned char __b) {
8033321369Sdim  return __a << (__b %
8034321369Sdim                 (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));
8035210299Sed}
8036210299Sed
8037321369Sdimstatic __inline__ vector signed char __ATTRS_o_ai
8038321369Sdimvec_sl(vector signed char __a, vector unsigned char __b) {
8039321369Sdim  return (vector signed char)vec_sl((vector unsigned char)__a, __b);
8040210299Sed}
8041210299Sed
8042309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
8043309124Sdimvec_sl(vector unsigned short __a, vector unsigned short __b) {
8044321369Sdim  return __a << (__b % (vector unsigned short)(sizeof(unsigned short) *
8045321369Sdim                                               __CHAR_BIT__));
8046210299Sed}
8047210299Sed
8048321369Sdimstatic __inline__ vector short __ATTRS_o_ai vec_sl(vector short __a,
8049321369Sdim                                                   vector unsigned short __b) {
8050321369Sdim  return (vector short)vec_sl((vector unsigned short)__a, __b);
8051210299Sed}
8052210299Sed
8053309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
8054309124Sdimvec_sl(vector unsigned int __a, vector unsigned int __b) {
8055321369Sdim  return __a << (__b %
8056321369Sdim                 (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));
8057210299Sed}
8058210299Sed
8059321369Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sl(vector int __a,
8060321369Sdim                                                 vector unsigned int __b) {
8061321369Sdim  return (vector int)vec_sl((vector unsigned int)__a, __b);
8062288943Sdim}
8063288943Sdim
8064321369Sdim#ifdef __POWER8_VECTOR__
8065309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
8066288943Sdimvec_sl(vector unsigned long long __a, vector unsigned long long __b) {
8067321369Sdim  return __a << (__b % (vector unsigned long long)(sizeof(unsigned long long) *
8068321369Sdim                                                   __CHAR_BIT__));
8069288943Sdim}
8070321369Sdim
8071321369Sdimstatic __inline__ vector long long __ATTRS_o_ai
8072321369Sdimvec_sl(vector long long __a, vector unsigned long long __b) {
8073321369Sdim  return (vector long long)vec_sl((vector unsigned long long)__a, __b);
8074321369Sdim}
8075288943Sdim#endif
8076288943Sdim
8077210299Sed/* vec_vslb */
8078210299Sed
8079210299Sed#define __builtin_altivec_vslb vec_vslb
8080210299Sed
8081309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
8082309124Sdimvec_vslb(vector signed char __a, vector unsigned char __b) {
8083249423Sdim  return vec_sl(__a, __b);
8084210299Sed}
8085210299Sed
8086309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8087309124Sdimvec_vslb(vector unsigned char __a, vector unsigned char __b) {
8088249423Sdim  return vec_sl(__a, __b);
8089210299Sed}
8090210299Sed
8091210299Sed/* vec_vslh */
8092210299Sed
8093210299Sed#define __builtin_altivec_vslh vec_vslh
8094210299Sed
8095309124Sdimstatic __inline__ vector short __ATTRS_o_ai
8096309124Sdimvec_vslh(vector short __a, vector unsigned short __b) {
8097249423Sdim  return vec_sl(__a, __b);
8098210299Sed}
8099210299Sed
8100309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
8101309124Sdimvec_vslh(vector unsigned short __a, vector unsigned short __b) {
8102249423Sdim  return vec_sl(__a, __b);
8103210299Sed}
8104210299Sed
8105210299Sed/* vec_vslw */
8106210299Sed
8107210299Sed#define __builtin_altivec_vslw vec_vslw
8108210299Sed
8109309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vslw(vector int __a,
8110309124Sdim                                                   vector unsigned int __b) {
8111249423Sdim  return vec_sl(__a, __b);
8112210299Sed}
8113210299Sed
8114309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
8115309124Sdimvec_vslw(vector unsigned int __a, vector unsigned int __b) {
8116249423Sdim  return vec_sl(__a, __b);
8117210299Sed}
8118210299Sed
8119210299Sed/* vec_sld */
8120210299Sed
8121210299Sed#define __builtin_altivec_vsldoi_4si vec_sld
8122210299Sed
8123309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai vec_sld(
8124309124Sdim    vector signed char __a, vector signed char __b, unsigned const int __c) {
8125288943Sdim  unsigned char __d = __c & 0x0F;
8126288943Sdim#ifdef __LITTLE_ENDIAN__
8127288943Sdim  return vec_perm(
8128309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8129309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8130309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8131309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8132288943Sdim#else
8133288943Sdim  return vec_perm(
8134288943Sdim      __a, __b,
8135288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8136288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8137288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8138288943Sdim#endif
8139210299Sed}
8140210299Sed
8141309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8142309124Sdimvec_sld(vector unsigned char __a, vector unsigned char __b,
8143309124Sdim        unsigned const int __c) {
8144288943Sdim  unsigned char __d = __c & 0x0F;
8145288943Sdim#ifdef __LITTLE_ENDIAN__
8146288943Sdim  return vec_perm(
8147309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8148309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8149309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8150309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8151288943Sdim#else
8152288943Sdim  return vec_perm(
8153288943Sdim      __a, __b,
8154288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8155288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8156288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8157288943Sdim#endif
8158210299Sed}
8159210299Sed
8160309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
8161309124Sdimvec_sld(vector bool char __a, vector bool char __b, unsigned const int __c) {
8162288943Sdim  unsigned char __d = __c & 0x0F;
8163288943Sdim#ifdef __LITTLE_ENDIAN__
8164288943Sdim  return vec_perm(
8165309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8166309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8167309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8168309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8169288943Sdim#else
8170288943Sdim  return vec_perm(
8171288943Sdim      __a, __b,
8172288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8173288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8174288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8175288943Sdim#endif
8176210299Sed}
8177210299Sed
8178309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai vec_sld(
8179309124Sdim    vector signed short __a, vector signed short __b, unsigned const int __c) {
8180288943Sdim  unsigned char __d = __c & 0x0F;
8181288943Sdim#ifdef __LITTLE_ENDIAN__
8182288943Sdim  return vec_perm(
8183309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8184309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8185309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8186309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8187288943Sdim#else
8188288943Sdim  return vec_perm(
8189288943Sdim      __a, __b,
8190288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8191288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8192288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8193288943Sdim#endif
8194210299Sed}
8195210299Sed
8196309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
8197309124Sdimvec_sld(vector unsigned short __a, vector unsigned short __b,
8198309124Sdim        unsigned const int __c) {
8199288943Sdim  unsigned char __d = __c & 0x0F;
8200288943Sdim#ifdef __LITTLE_ENDIAN__
8201288943Sdim  return vec_perm(
8202309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8203309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8204309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8205309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8206288943Sdim#else
8207288943Sdim  return vec_perm(
8208288943Sdim      __a, __b,
8209288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8210288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8211288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8212288943Sdim#endif
8213212904Sdim}
8214212904Sdim
8215309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
8216309124Sdimvec_sld(vector bool short __a, vector bool short __b, unsigned const int __c) {
8217288943Sdim  unsigned char __d = __c & 0x0F;
8218288943Sdim#ifdef __LITTLE_ENDIAN__
8219288943Sdim  return vec_perm(
8220309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8221309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8222309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8223309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8224288943Sdim#else
8225288943Sdim  return vec_perm(
8226288943Sdim      __a, __b,
8227288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8228288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8229288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8230288943Sdim#endif
8231210299Sed}
8232210299Sed
8233309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_sld(vector pixel __a,
8234309124Sdim                                                    vector pixel __b,
8235309124Sdim                                                    unsigned const int __c) {
8236288943Sdim  unsigned char __d = __c & 0x0F;
8237288943Sdim#ifdef __LITTLE_ENDIAN__
8238288943Sdim  return vec_perm(
8239309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8240309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8241309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8242309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8243288943Sdim#else
8244288943Sdim  return vec_perm(
8245288943Sdim      __a, __b,
8246288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8247288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8248288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8249288943Sdim#endif
8250210299Sed}
8251210299Sed
8252309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
8253309124Sdimvec_sld(vector signed int __a, vector signed int __b, unsigned const int __c) {
8254288943Sdim  unsigned char __d = __c & 0x0F;
8255288943Sdim#ifdef __LITTLE_ENDIAN__
8256288943Sdim  return vec_perm(
8257309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8258309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8259309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8260309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8261288943Sdim#else
8262288943Sdim  return vec_perm(
8263288943Sdim      __a, __b,
8264288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8265288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8266288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8267288943Sdim#endif
8268210299Sed}
8269210299Sed
8270309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai vec_sld(
8271309124Sdim    vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {
8272288943Sdim  unsigned char __d = __c & 0x0F;
8273288943Sdim#ifdef __LITTLE_ENDIAN__
8274288943Sdim  return vec_perm(
8275309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8276309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8277309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8278309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8279288943Sdim#else
8280288943Sdim  return vec_perm(
8281288943Sdim      __a, __b,
8282288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8283288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8284288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8285288943Sdim#endif
8286288943Sdim}
8287288943Sdim
8288309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_sld(vector bool int __a,
8289309124Sdim                                                       vector bool int __b,
8290309124Sdim                                                       unsigned const int __c) {
8291288943Sdim  unsigned char __d = __c & 0x0F;
8292288943Sdim#ifdef __LITTLE_ENDIAN__
8293288943Sdim  return vec_perm(
8294309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8295309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8296309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8297309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8298288943Sdim#else
8299288943Sdim  return vec_perm(
8300288943Sdim      __a, __b,
8301288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8302288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8303288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8304288943Sdim#endif
8305288943Sdim}
8306288943Sdim
8307309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_sld(vector float __a,
8308309124Sdim                                                    vector float __b,
8309309124Sdim                                                    unsigned const int __c) {
8310288943Sdim  unsigned char __d = __c & 0x0F;
8311288943Sdim#ifdef __LITTLE_ENDIAN__
8312288943Sdim  return vec_perm(
8313309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8314309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8315309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8316309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8317288943Sdim#else
8318288943Sdim  return vec_perm(
8319288943Sdim      __a, __b,
8320288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8321288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8322288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8323288943Sdim#endif
8324288943Sdim}
8325288943Sdim
8326314564Sdim#ifdef __VSX__
8327314564Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
8328314564Sdimvec_sld(vector bool long long __a, vector bool long long __b,
8329314564Sdim        unsigned const int __c) {
8330314564Sdim  unsigned char __d = __c & 0x0F;
8331314564Sdim#ifdef __LITTLE_ENDIAN__
8332314564Sdim  return vec_perm(
8333314564Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8334314564Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8335314564Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8336314564Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8337314564Sdim#else
8338314564Sdim  return vec_perm(
8339314564Sdim      __a, __b,
8340314564Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8341314564Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8342314564Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8343314564Sdim#endif
8344314564Sdim}
8345314564Sdim
8346314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
8347314564Sdimvec_sld(vector signed long long __a, vector signed long long __b,
8348314564Sdim        unsigned const int __c) {
8349314564Sdim  unsigned char __d = __c & 0x0F;
8350314564Sdim#ifdef __LITTLE_ENDIAN__
8351314564Sdim  return vec_perm(
8352314564Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8353314564Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8354314564Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8355314564Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8356314564Sdim#else
8357314564Sdim  return vec_perm(
8358314564Sdim      __a, __b,
8359314564Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8360314564Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8361314564Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8362314564Sdim#endif
8363314564Sdim}
8364314564Sdim
8365314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
8366314564Sdimvec_sld(vector unsigned long long __a, vector unsigned long long __b,
8367314564Sdim        unsigned const int __c) {
8368314564Sdim  unsigned char __d = __c & 0x0F;
8369314564Sdim#ifdef __LITTLE_ENDIAN__
8370314564Sdim  return vec_perm(
8371314564Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8372314564Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8373314564Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8374314564Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8375314564Sdim#else
8376314564Sdim  return vec_perm(
8377314564Sdim      __a, __b,
8378314564Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8379314564Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8380314564Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8381314564Sdim#endif
8382314564Sdim}
8383314564Sdim
8384314564Sdimstatic __inline__ vector double __ATTRS_o_ai vec_sld(vector double __a,
8385314564Sdim                                                     vector double __b,
8386314564Sdim                                                     unsigned const int __c) {
8387314564Sdim  unsigned char __d = __c & 0x0F;
8388314564Sdim#ifdef __LITTLE_ENDIAN__
8389314564Sdim  return vec_perm(
8390314564Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8391314564Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8392314564Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8393314564Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8394314564Sdim#else
8395314564Sdim  return vec_perm(
8396314564Sdim      __a, __b,
8397314564Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8398314564Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8399314564Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8400314564Sdim#endif
8401314564Sdim}
8402314564Sdim#endif
8403314564Sdim
8404314564Sdim/* vec_sldw */
8405314564Sdimstatic __inline__ vector signed char __ATTRS_o_ai vec_sldw(
8406314564Sdim    vector signed char __a, vector signed char __b, unsigned const int __c) {
8407314564Sdim  return vec_sld(__a, __b, ((__c << 2) & 0x0F));
8408314564Sdim}
8409314564Sdim
8410314564Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8411314564Sdimvec_sldw(vector unsigned char __a, vector unsigned char __b,
8412314564Sdim         unsigned const int __c) {
8413314564Sdim  return vec_sld(__a, __b, ((__c << 2) & 0x0F));
8414314564Sdim}
8415314564Sdim
8416314564Sdimstatic __inline__ vector signed short __ATTRS_o_ai vec_sldw(
8417314564Sdim    vector signed short __a, vector signed short __b, unsigned const int __c) {
8418314564Sdim  return vec_sld(__a, __b, ((__c << 2) & 0x0F));
8419314564Sdim}
8420314564Sdim
8421314564Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
8422314564Sdimvec_sldw(vector unsigned short __a, vector unsigned short __b,
8423314564Sdim         unsigned const int __c) {
8424314564Sdim  return vec_sld(__a, __b, ((__c << 2) & 0x0F));
8425314564Sdim}
8426314564Sdim
8427314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
8428314564Sdimvec_sldw(vector signed int __a, vector signed int __b, unsigned const int __c) {
8429314564Sdim  return vec_sld(__a, __b, ((__c << 2) & 0x0F));
8430314564Sdim}
8431314564Sdim
8432314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai vec_sldw(
8433314564Sdim    vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {
8434314564Sdim  return vec_sld(__a, __b, ((__c << 2) & 0x0F));
8435314564Sdim}
8436314564Sdim
8437314564Sdim#ifdef __VSX__
8438314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
8439314564Sdimvec_sldw(vector signed long long __a, vector signed long long __b,
8440314564Sdim         unsigned const int __c) {
8441314564Sdim  return vec_sld(__a, __b, ((__c << 2) & 0x0F));
8442314564Sdim}
8443314564Sdim
8444314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
8445314564Sdimvec_sldw(vector unsigned long long __a, vector unsigned long long __b,
8446314564Sdim         unsigned const int __c) {
8447314564Sdim  return vec_sld(__a, __b, ((__c << 2) & 0x0F));
8448314564Sdim}
8449314564Sdim#endif
8450314564Sdim
8451314564Sdim#ifdef __POWER9_VECTOR__
8452314564Sdim/* vec_slv */
8453314564Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8454314564Sdimvec_slv(vector unsigned char __a, vector unsigned char __b) {
8455314564Sdim  return __builtin_altivec_vslv(__a, __b);
8456314564Sdim}
8457314564Sdim
8458314564Sdim/* vec_srv */
8459314564Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8460314564Sdimvec_srv(vector unsigned char __a, vector unsigned char __b) {
8461314564Sdim  return __builtin_altivec_vsrv(__a, __b);
8462314564Sdim}
8463314564Sdim#endif
8464314564Sdim
8465210299Sed/* vec_vsldoi */
8466210299Sed
8467309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
8468309124Sdimvec_vsldoi(vector signed char __a, vector signed char __b, unsigned char __c) {
8469288943Sdim  unsigned char __d = __c & 0x0F;
8470288943Sdim#ifdef __LITTLE_ENDIAN__
8471288943Sdim  return vec_perm(
8472309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8473309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8474309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8475309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8476288943Sdim#else
8477288943Sdim  return vec_perm(
8478288943Sdim      __a, __b,
8479288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8480288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8481288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8482288943Sdim#endif
8483210299Sed}
8484210299Sed
8485309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai vec_vsldoi(
8486309124Sdim    vector unsigned char __a, vector unsigned char __b, unsigned char __c) {
8487288943Sdim  unsigned char __d = __c & 0x0F;
8488288943Sdim#ifdef __LITTLE_ENDIAN__
8489288943Sdim  return vec_perm(
8490309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8491309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8492309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8493309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8494288943Sdim#else
8495288943Sdim  return vec_perm(
8496288943Sdim      __a, __b,
8497288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8498288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8499288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8500288943Sdim#endif
8501210299Sed}
8502210299Sed
8503309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsldoi(vector short __a,
8504309124Sdim                                                       vector short __b,
8505309124Sdim                                                       unsigned char __c) {
8506288943Sdim  unsigned char __d = __c & 0x0F;
8507288943Sdim#ifdef __LITTLE_ENDIAN__
8508288943Sdim  return vec_perm(
8509309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8510309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8511309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8512309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8513288943Sdim#else
8514288943Sdim  return vec_perm(
8515288943Sdim      __a, __b,
8516288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8517288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8518288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8519288943Sdim#endif
8520210299Sed}
8521210299Sed
8522309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai vec_vsldoi(
8523309124Sdim    vector unsigned short __a, vector unsigned short __b, unsigned char __c) {
8524288943Sdim  unsigned char __d = __c & 0x0F;
8525288943Sdim#ifdef __LITTLE_ENDIAN__
8526288943Sdim  return vec_perm(
8527309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8528309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8529309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8530309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8531288943Sdim#else
8532288943Sdim  return vec_perm(
8533288943Sdim      __a, __b,
8534288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8535288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8536288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8537288943Sdim#endif
8538210299Sed}
8539210299Sed
8540309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vsldoi(vector pixel __a,
8541309124Sdim                                                       vector pixel __b,
8542309124Sdim                                                       unsigned char __c) {
8543288943Sdim  unsigned char __d = __c & 0x0F;
8544288943Sdim#ifdef __LITTLE_ENDIAN__
8545288943Sdim  return vec_perm(
8546309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8547309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8548309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8549309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8550288943Sdim#else
8551288943Sdim  return vec_perm(
8552288943Sdim      __a, __b,
8553288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8554288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8555288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8556288943Sdim#endif
8557212904Sdim}
8558212904Sdim
8559309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsldoi(vector int __a,
8560309124Sdim                                                     vector int __b,
8561309124Sdim                                                     unsigned char __c) {
8562288943Sdim  unsigned char __d = __c & 0x0F;
8563288943Sdim#ifdef __LITTLE_ENDIAN__
8564288943Sdim  return vec_perm(
8565309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8566309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8567309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8568309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8569288943Sdim#else
8570288943Sdim  return vec_perm(
8571288943Sdim      __a, __b,
8572288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8573288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8574288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8575288943Sdim#endif
8576210299Sed}
8577210299Sed
8578309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai vec_vsldoi(
8579309124Sdim    vector unsigned int __a, vector unsigned int __b, unsigned char __c) {
8580288943Sdim  unsigned char __d = __c & 0x0F;
8581288943Sdim#ifdef __LITTLE_ENDIAN__
8582288943Sdim  return vec_perm(
8583309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8584309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8585309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8586309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8587288943Sdim#else
8588288943Sdim  return vec_perm(
8589288943Sdim      __a, __b,
8590288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8591288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8592288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8593288943Sdim#endif
8594210299Sed}
8595210299Sed
8596309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vsldoi(vector float __a,
8597309124Sdim                                                       vector float __b,
8598309124Sdim                                                       unsigned char __c) {
8599288943Sdim  unsigned char __d = __c & 0x0F;
8600288943Sdim#ifdef __LITTLE_ENDIAN__
8601288943Sdim  return vec_perm(
8602309124Sdim      __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
8603309124Sdim                                       20 - __d, 21 - __d, 22 - __d, 23 - __d,
8604309124Sdim                                       24 - __d, 25 - __d, 26 - __d, 27 - __d,
8605309124Sdim                                       28 - __d, 29 - __d, 30 - __d, 31 - __d));
8606288943Sdim#else
8607288943Sdim  return vec_perm(
8608288943Sdim      __a, __b,
8609288943Sdim      (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
8610288943Sdim                             __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
8611288943Sdim                             __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
8612288943Sdim#endif
8613210299Sed}
8614210299Sed
8615210299Sed/* vec_sll */
8616210299Sed
8617309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
8618309124Sdimvec_sll(vector signed char __a, vector unsigned char __b) {
8619288943Sdim  return (vector signed char)__builtin_altivec_vsl((vector int)__a,
8620288943Sdim                                                   (vector int)__b);
8621210299Sed}
8622210299Sed
8623309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
8624309124Sdimvec_sll(vector signed char __a, vector unsigned short __b) {
8625288943Sdim  return (vector signed char)__builtin_altivec_vsl((vector int)__a,
8626288943Sdim                                                   (vector int)__b);
8627210299Sed}
8628210299Sed
8629309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
8630309124Sdimvec_sll(vector signed char __a, vector unsigned int __b) {
8631288943Sdim  return (vector signed char)__builtin_altivec_vsl((vector int)__a,
8632288943Sdim                                                   (vector int)__b);
8633210299Sed}
8634210299Sed
8635309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8636309124Sdimvec_sll(vector unsigned char __a, vector unsigned char __b) {
8637288943Sdim  return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
8638288943Sdim                                                     (vector int)__b);
8639210299Sed}
8640210299Sed
8641309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8642309124Sdimvec_sll(vector unsigned char __a, vector unsigned short __b) {
8643288943Sdim  return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
8644288943Sdim                                                     (vector int)__b);
8645210299Sed}
8646210299Sed
8647309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8648309124Sdimvec_sll(vector unsigned char __a, vector unsigned int __b) {
8649288943Sdim  return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
8650288943Sdim                                                     (vector int)__b);
8651210299Sed}
8652210299Sed
8653309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
8654309124Sdimvec_sll(vector bool char __a, vector unsigned char __b) {
8655288943Sdim  return (vector bool char)__builtin_altivec_vsl((vector int)__a,
8656288943Sdim                                                 (vector int)__b);
8657212904Sdim}
8658212904Sdim
8659309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
8660309124Sdimvec_sll(vector bool char __a, vector unsigned short __b) {
8661288943Sdim  return (vector bool char)__builtin_altivec_vsl((vector int)__a,
8662288943Sdim                                                 (vector int)__b);
8663212904Sdim}
8664212904Sdim
8665309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
8666309124Sdimvec_sll(vector bool char __a, vector unsigned int __b) {
8667288943Sdim  return (vector bool char)__builtin_altivec_vsl((vector int)__a,
8668288943Sdim                                                 (vector int)__b);
8669212904Sdim}
8670212904Sdim
8671309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
8672309124Sdim                                                    vector unsigned char __b) {
8673249423Sdim  return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
8674210299Sed}
8675210299Sed
8676309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
8677309124Sdim                                                    vector unsigned short __b) {
8678249423Sdim  return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
8679210299Sed}
8680210299Sed
8681309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
8682309124Sdim                                                    vector unsigned int __b) {
8683249423Sdim  return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
8684210299Sed}
8685210299Sed
8686309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
8687309124Sdimvec_sll(vector unsigned short __a, vector unsigned char __b) {
8688288943Sdim  return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
8689288943Sdim                                                      (vector int)__b);
8690210299Sed}
8691210299Sed
8692309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
8693309124Sdimvec_sll(vector unsigned short __a, vector unsigned short __b) {
8694288943Sdim  return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
8695288943Sdim                                                      (vector int)__b);
8696210299Sed}
8697210299Sed
8698309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
8699309124Sdimvec_sll(vector unsigned short __a, vector unsigned int __b) {
8700288943Sdim  return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
8701288943Sdim                                                      (vector int)__b);
8702210299Sed}
8703210299Sed
8704309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
8705309124Sdimvec_sll(vector bool short __a, vector unsigned char __b) {
8706288943Sdim  return (vector bool short)__builtin_altivec_vsl((vector int)__a,
8707288943Sdim                                                  (vector int)__b);
8708212904Sdim}
8709212904Sdim
8710309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
8711309124Sdimvec_sll(vector bool short __a, vector unsigned short __b) {
8712288943Sdim  return (vector bool short)__builtin_altivec_vsl((vector int)__a,
8713288943Sdim                                                  (vector int)__b);
8714212904Sdim}
8715212904Sdim
8716309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
8717309124Sdimvec_sll(vector bool short __a, vector unsigned int __b) {
8718288943Sdim  return (vector bool short)__builtin_altivec_vsl((vector int)__a,
8719288943Sdim                                                  (vector int)__b);
8720212904Sdim}
8721212904Sdim
8722309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
8723309124Sdim                                                    vector unsigned char __b) {
8724249423Sdim  return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
8725212904Sdim}
8726212904Sdim
8727309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
8728309124Sdim                                                    vector unsigned short __b) {
8729249423Sdim  return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
8730212904Sdim}
8731212904Sdim
8732309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
8733309124Sdim                                                    vector unsigned int __b) {
8734249423Sdim  return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
8735212904Sdim}
8736212904Sdim
8737309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
8738309124Sdim                                                  vector unsigned char __b) {
8739249423Sdim  return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
8740210299Sed}
8741210299Sed
8742309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
8743309124Sdim                                                  vector unsigned short __b) {
8744249423Sdim  return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
8745210299Sed}
8746210299Sed
8747309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
8748309124Sdim                                                  vector unsigned int __b) {
8749249423Sdim  return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
8750210299Sed}
8751210299Sed
8752309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
8753309124Sdimvec_sll(vector unsigned int __a, vector unsigned char __b) {
8754288943Sdim  return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
8755288943Sdim                                                    (vector int)__b);
8756210299Sed}
8757210299Sed
8758309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
8759309124Sdimvec_sll(vector unsigned int __a, vector unsigned short __b) {
8760288943Sdim  return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
8761288943Sdim                                                    (vector int)__b);
8762210299Sed}
8763210299Sed
8764309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
8765309124Sdimvec_sll(vector unsigned int __a, vector unsigned int __b) {
8766288943Sdim  return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
8767288943Sdim                                                    (vector int)__b);
8768210299Sed}
8769210299Sed
8770309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
8771309124Sdimvec_sll(vector bool int __a, vector unsigned char __b) {
8772288943Sdim  return (vector bool int)__builtin_altivec_vsl((vector int)__a,
8773288943Sdim                                                (vector int)__b);
8774212904Sdim}
8775212904Sdim
8776309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
8777309124Sdimvec_sll(vector bool int __a, vector unsigned short __b) {
8778288943Sdim  return (vector bool int)__builtin_altivec_vsl((vector int)__a,
8779288943Sdim                                                (vector int)__b);
8780212904Sdim}
8781212904Sdim
8782309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
8783309124Sdimvec_sll(vector bool int __a, vector unsigned int __b) {
8784288943Sdim  return (vector bool int)__builtin_altivec_vsl((vector int)__a,
8785288943Sdim                                                (vector int)__b);
8786212904Sdim}
8787212904Sdim
8788314564Sdim#ifdef __VSX__
8789314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
8790314564Sdimvec_sll(vector signed long long __a, vector unsigned char __b) {
8791314564Sdim  return (vector signed long long)__builtin_altivec_vsl((vector int)__a,
8792314564Sdim                                                        (vector int)__b);
8793314564Sdim}
8794314564Sdim
8795314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
8796314564Sdimvec_sll(vector unsigned long long __a, vector unsigned char __b) {
8797314564Sdim  return (vector unsigned long long)__builtin_altivec_vsl((vector int)__a,
8798314564Sdim                                                          (vector int)__b);
8799314564Sdim}
8800314564Sdim#endif
8801314564Sdim
8802210299Sed/* vec_vsl */
8803210299Sed
8804309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
8805309124Sdimvec_vsl(vector signed char __a, vector unsigned char __b) {
8806288943Sdim  return (vector signed char)__builtin_altivec_vsl((vector int)__a,
8807288943Sdim                                                   (vector int)__b);
8808210299Sed}
8809210299Sed
8810309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
8811309124Sdimvec_vsl(vector signed char __a, vector unsigned short __b) {
8812288943Sdim  return (vector signed char)__builtin_altivec_vsl((vector int)__a,
8813288943Sdim                                                   (vector int)__b);
8814210299Sed}
8815210299Sed
8816309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
8817309124Sdimvec_vsl(vector signed char __a, vector unsigned int __b) {
8818288943Sdim  return (vector signed char)__builtin_altivec_vsl((vector int)__a,
8819288943Sdim                                                   (vector int)__b);
8820210299Sed}
8821210299Sed
8822309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8823309124Sdimvec_vsl(vector unsigned char __a, vector unsigned char __b) {
8824288943Sdim  return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
8825288943Sdim                                                     (vector int)__b);
8826210299Sed}
8827210299Sed
8828309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8829309124Sdimvec_vsl(vector unsigned char __a, vector unsigned short __b) {
8830288943Sdim  return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
8831288943Sdim                                                     (vector int)__b);
8832210299Sed}
8833210299Sed
8834309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8835309124Sdimvec_vsl(vector unsigned char __a, vector unsigned int __b) {
8836288943Sdim  return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
8837288943Sdim                                                     (vector int)__b);
8838210299Sed}
8839210299Sed
8840309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
8841309124Sdimvec_vsl(vector bool char __a, vector unsigned char __b) {
8842288943Sdim  return (vector bool char)__builtin_altivec_vsl((vector int)__a,
8843288943Sdim                                                 (vector int)__b);
8844212904Sdim}
8845212904Sdim
8846309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
8847309124Sdimvec_vsl(vector bool char __a, vector unsigned short __b) {
8848288943Sdim  return (vector bool char)__builtin_altivec_vsl((vector int)__a,
8849288943Sdim                                                 (vector int)__b);
8850212904Sdim}
8851212904Sdim
8852309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
8853309124Sdimvec_vsl(vector bool char __a, vector unsigned int __b) {
8854288943Sdim  return (vector bool char)__builtin_altivec_vsl((vector int)__a,
8855288943Sdim                                                 (vector int)__b);
8856212904Sdim}
8857212904Sdim
8858309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
8859309124Sdim                                                    vector unsigned char __b) {
8860249423Sdim  return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
8861210299Sed}
8862210299Sed
8863309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
8864309124Sdim                                                    vector unsigned short __b) {
8865249423Sdim  return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
8866210299Sed}
8867210299Sed
8868309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
8869309124Sdim                                                    vector unsigned int __b) {
8870249423Sdim  return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
8871210299Sed}
8872210299Sed
8873309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
8874309124Sdimvec_vsl(vector unsigned short __a, vector unsigned char __b) {
8875288943Sdim  return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
8876288943Sdim                                                      (vector int)__b);
8877210299Sed}
8878210299Sed
8879309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
8880309124Sdimvec_vsl(vector unsigned short __a, vector unsigned short __b) {
8881288943Sdim  return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
8882288943Sdim                                                      (vector int)__b);
8883210299Sed}
8884210299Sed
8885309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
8886309124Sdimvec_vsl(vector unsigned short __a, vector unsigned int __b) {
8887288943Sdim  return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
8888288943Sdim                                                      (vector int)__b);
8889210299Sed}
8890210299Sed
8891309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
8892309124Sdimvec_vsl(vector bool short __a, vector unsigned char __b) {
8893288943Sdim  return (vector bool short)__builtin_altivec_vsl((vector int)__a,
8894288943Sdim                                                  (vector int)__b);
8895212904Sdim}
8896212904Sdim
8897309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
8898309124Sdimvec_vsl(vector bool short __a, vector unsigned short __b) {
8899288943Sdim  return (vector bool short)__builtin_altivec_vsl((vector int)__a,
8900288943Sdim                                                  (vector int)__b);
8901212904Sdim}
8902212904Sdim
8903309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
8904309124Sdimvec_vsl(vector bool short __a, vector unsigned int __b) {
8905288943Sdim  return (vector bool short)__builtin_altivec_vsl((vector int)__a,
8906288943Sdim                                                  (vector int)__b);
8907212904Sdim}
8908212904Sdim
8909309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
8910309124Sdim                                                    vector unsigned char __b) {
8911249423Sdim  return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
8912212904Sdim}
8913212904Sdim
8914309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
8915309124Sdim                                                    vector unsigned short __b) {
8916249423Sdim  return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
8917212904Sdim}
8918212904Sdim
8919309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
8920309124Sdim                                                    vector unsigned int __b) {
8921249423Sdim  return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
8922212904Sdim}
8923212904Sdim
8924309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
8925309124Sdim                                                  vector unsigned char __b) {
8926249423Sdim  return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
8927210299Sed}
8928210299Sed
8929309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
8930309124Sdim                                                  vector unsigned short __b) {
8931249423Sdim  return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
8932210299Sed}
8933210299Sed
8934309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
8935309124Sdim                                                  vector unsigned int __b) {
8936249423Sdim  return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
8937210299Sed}
8938210299Sed
8939309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
8940309124Sdimvec_vsl(vector unsigned int __a, vector unsigned char __b) {
8941288943Sdim  return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
8942288943Sdim                                                    (vector int)__b);
8943210299Sed}
8944210299Sed
8945309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
8946309124Sdimvec_vsl(vector unsigned int __a, vector unsigned short __b) {
8947288943Sdim  return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
8948288943Sdim                                                    (vector int)__b);
8949210299Sed}
8950210299Sed
8951309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
8952309124Sdimvec_vsl(vector unsigned int __a, vector unsigned int __b) {
8953288943Sdim  return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
8954288943Sdim                                                    (vector int)__b);
8955210299Sed}
8956210299Sed
8957309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
8958309124Sdimvec_vsl(vector bool int __a, vector unsigned char __b) {
8959288943Sdim  return (vector bool int)__builtin_altivec_vsl((vector int)__a,
8960288943Sdim                                                (vector int)__b);
8961212904Sdim}
8962212904Sdim
8963309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
8964309124Sdimvec_vsl(vector bool int __a, vector unsigned short __b) {
8965288943Sdim  return (vector bool int)__builtin_altivec_vsl((vector int)__a,
8966288943Sdim                                                (vector int)__b);
8967212904Sdim}
8968212904Sdim
8969309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
8970309124Sdimvec_vsl(vector bool int __a, vector unsigned int __b) {
8971288943Sdim  return (vector bool int)__builtin_altivec_vsl((vector int)__a,
8972288943Sdim                                                (vector int)__b);
8973212904Sdim}
8974212904Sdim
8975210299Sed/* vec_slo */
8976210299Sed
8977309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
8978309124Sdimvec_slo(vector signed char __a, vector signed char __b) {
8979288943Sdim  return (vector signed char)__builtin_altivec_vslo((vector int)__a,
8980288943Sdim                                                    (vector int)__b);
8981210299Sed}
8982210299Sed
8983309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
8984309124Sdimvec_slo(vector signed char __a, vector unsigned char __b) {
8985288943Sdim  return (vector signed char)__builtin_altivec_vslo((vector int)__a,
8986288943Sdim                                                    (vector int)__b);
8987210299Sed}
8988210299Sed
8989309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8990309124Sdimvec_slo(vector unsigned char __a, vector signed char __b) {
8991288943Sdim  return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
8992288943Sdim                                                      (vector int)__b);
8993210299Sed}
8994210299Sed
8995309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
8996309124Sdimvec_slo(vector unsigned char __a, vector unsigned char __b) {
8997288943Sdim  return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
8998288943Sdim                                                      (vector int)__b);
8999210299Sed}
9000210299Sed
9001309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
9002309124Sdim                                                    vector signed char __b) {
9003249423Sdim  return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9004210299Sed}
9005210299Sed
9006309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
9007309124Sdim                                                    vector unsigned char __b) {
9008249423Sdim  return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9009210299Sed}
9010210299Sed
9011309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9012309124Sdimvec_slo(vector unsigned short __a, vector signed char __b) {
9013288943Sdim  return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
9014288943Sdim                                                       (vector int)__b);
9015210299Sed}
9016210299Sed
9017309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9018309124Sdimvec_slo(vector unsigned short __a, vector unsigned char __b) {
9019288943Sdim  return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
9020288943Sdim                                                       (vector int)__b);
9021210299Sed}
9022210299Sed
9023309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
9024309124Sdim                                                    vector signed char __b) {
9025249423Sdim  return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9026212904Sdim}
9027212904Sdim
9028309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
9029309124Sdim                                                    vector unsigned char __b) {
9030249423Sdim  return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9031212904Sdim}
9032212904Sdim
9033309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
9034309124Sdim                                                  vector signed char __b) {
9035249423Sdim  return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
9036210299Sed}
9037210299Sed
9038309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
9039309124Sdim                                                  vector unsigned char __b) {
9040249423Sdim  return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
9041210299Sed}
9042210299Sed
9043309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9044309124Sdimvec_slo(vector unsigned int __a, vector signed char __b) {
9045288943Sdim  return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
9046288943Sdim                                                     (vector int)__b);
9047210299Sed}
9048210299Sed
9049309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9050309124Sdimvec_slo(vector unsigned int __a, vector unsigned char __b) {
9051288943Sdim  return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
9052288943Sdim                                                     (vector int)__b);
9053210299Sed}
9054210299Sed
9055309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
9056309124Sdim                                                    vector signed char __b) {
9057249423Sdim  return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9058210299Sed}
9059210299Sed
9060309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
9061309124Sdim                                                    vector unsigned char __b) {
9062249423Sdim  return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9063210299Sed}
9064210299Sed
9065314564Sdim#ifdef __VSX__
9066314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
9067314564Sdimvec_slo(vector signed long long __a, vector signed char __b) {
9068314564Sdim  return (vector signed long long)__builtin_altivec_vslo((vector int)__a,
9069314564Sdim                                                         (vector int)__b);
9070314564Sdim}
9071314564Sdim
9072314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
9073314564Sdimvec_slo(vector signed long long __a, vector unsigned char __b) {
9074314564Sdim  return (vector signed long long)__builtin_altivec_vslo((vector int)__a,
9075314564Sdim                                                         (vector int)__b);
9076314564Sdim}
9077314564Sdim
9078314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
9079314564Sdimvec_slo(vector unsigned long long __a, vector signed char __b) {
9080314564Sdim  return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,
9081314564Sdim                                                           (vector int)__b);
9082314564Sdim}
9083314564Sdim
9084314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
9085314564Sdimvec_slo(vector unsigned long long __a, vector unsigned char __b) {
9086314564Sdim  return (vector unsigned long long)__builtin_altivec_vslo((vector int)__a,
9087314564Sdim                                                           (vector int)__b);
9088314564Sdim}
9089314564Sdim#endif
9090314564Sdim
9091210299Sed/* vec_vslo */
9092210299Sed
9093309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9094309124Sdimvec_vslo(vector signed char __a, vector signed char __b) {
9095288943Sdim  return (vector signed char)__builtin_altivec_vslo((vector int)__a,
9096288943Sdim                                                    (vector int)__b);
9097210299Sed}
9098210299Sed
9099309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9100309124Sdimvec_vslo(vector signed char __a, vector unsigned char __b) {
9101288943Sdim  return (vector signed char)__builtin_altivec_vslo((vector int)__a,
9102288943Sdim                                                    (vector int)__b);
9103210299Sed}
9104210299Sed
9105309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9106309124Sdimvec_vslo(vector unsigned char __a, vector signed char __b) {
9107288943Sdim  return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
9108288943Sdim                                                      (vector int)__b);
9109210299Sed}
9110210299Sed
9111309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9112309124Sdimvec_vslo(vector unsigned char __a, vector unsigned char __b) {
9113288943Sdim  return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
9114288943Sdim                                                      (vector int)__b);
9115210299Sed}
9116210299Sed
9117309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
9118309124Sdim                                                     vector signed char __b) {
9119249423Sdim  return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9120210299Sed}
9121210299Sed
9122309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
9123309124Sdim                                                     vector unsigned char __b) {
9124249423Sdim  return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9125210299Sed}
9126210299Sed
9127309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9128309124Sdimvec_vslo(vector unsigned short __a, vector signed char __b) {
9129288943Sdim  return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
9130288943Sdim                                                       (vector int)__b);
9131210299Sed}
9132210299Sed
9133309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9134309124Sdimvec_vslo(vector unsigned short __a, vector unsigned char __b) {
9135288943Sdim  return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
9136288943Sdim                                                       (vector int)__b);
9137210299Sed}
9138210299Sed
9139309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
9140309124Sdim                                                     vector signed char __b) {
9141249423Sdim  return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9142212904Sdim}
9143212904Sdim
9144309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
9145309124Sdim                                                     vector unsigned char __b) {
9146249423Sdim  return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9147212904Sdim}
9148212904Sdim
9149309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
9150309124Sdim                                                   vector signed char __b) {
9151249423Sdim  return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
9152210299Sed}
9153210299Sed
9154309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
9155309124Sdim                                                   vector unsigned char __b) {
9156249423Sdim  return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
9157210299Sed}
9158210299Sed
9159309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9160309124Sdimvec_vslo(vector unsigned int __a, vector signed char __b) {
9161288943Sdim  return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
9162288943Sdim                                                     (vector int)__b);
9163210299Sed}
9164210299Sed
9165309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9166309124Sdimvec_vslo(vector unsigned int __a, vector unsigned char __b) {
9167288943Sdim  return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
9168288943Sdim                                                     (vector int)__b);
9169210299Sed}
9170210299Sed
9171309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
9172309124Sdim                                                     vector signed char __b) {
9173249423Sdim  return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9174210299Sed}
9175210299Sed
9176309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
9177309124Sdim                                                     vector unsigned char __b) {
9178249423Sdim  return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
9179210299Sed}
9180210299Sed
9181210299Sed/* vec_splat */
9182210299Sed
9183309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9184309124Sdimvec_splat(vector signed char __a, unsigned const int __b) {
9185288943Sdim  return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
9186210299Sed}
9187210299Sed
9188309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9189309124Sdimvec_splat(vector unsigned char __a, unsigned const int __b) {
9190288943Sdim  return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
9191210299Sed}
9192210299Sed
9193309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
9194309124Sdimvec_splat(vector bool char __a, unsigned const int __b) {
9195288943Sdim  return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
9196212904Sdim}
9197212904Sdim
9198309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
9199309124Sdimvec_splat(vector signed short __a, unsigned const int __b) {
9200288943Sdim  unsigned char b0 = (__b & 0x07) * 2;
9201288943Sdim  unsigned char b1 = b0 + 1;
9202288943Sdim  return vec_perm(__a, __a,
9203309124Sdim                  (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
9204309124Sdim                                         b0, b1, b0, b1, b0, b1));
9205210299Sed}
9206210299Sed
9207309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9208309124Sdimvec_splat(vector unsigned short __a, unsigned const int __b) {
9209288943Sdim  unsigned char b0 = (__b & 0x07) * 2;
9210288943Sdim  unsigned char b1 = b0 + 1;
9211288943Sdim  return vec_perm(__a, __a,
9212309124Sdim                  (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
9213309124Sdim                                         b0, b1, b0, b1, b0, b1));
9214210299Sed}
9215210299Sed
9216309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
9217309124Sdimvec_splat(vector bool short __a, unsigned const int __b) {
9218288943Sdim  unsigned char b0 = (__b & 0x07) * 2;
9219288943Sdim  unsigned char b1 = b0 + 1;
9220288943Sdim  return vec_perm(__a, __a,
9221309124Sdim                  (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
9222309124Sdim                                         b0, b1, b0, b1, b0, b1));
9223212904Sdim}
9224212904Sdim
9225309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_splat(vector pixel __a,
9226309124Sdim                                                      unsigned const int __b) {
9227288943Sdim  unsigned char b0 = (__b & 0x07) * 2;
9228288943Sdim  unsigned char b1 = b0 + 1;
9229288943Sdim  return vec_perm(__a, __a,
9230309124Sdim                  (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
9231309124Sdim                                         b0, b1, b0, b1, b0, b1));
9232212904Sdim}
9233212904Sdim
9234309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
9235309124Sdimvec_splat(vector signed int __a, unsigned const int __b) {
9236288943Sdim  unsigned char b0 = (__b & 0x03) * 4;
9237288943Sdim  unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
9238288943Sdim  return vec_perm(__a, __a,
9239309124Sdim                  (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
9240309124Sdim                                         b2, b3, b0, b1, b2, b3));
9241210299Sed}
9242210299Sed
9243309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9244309124Sdimvec_splat(vector unsigned int __a, unsigned const int __b) {
9245288943Sdim  unsigned char b0 = (__b & 0x03) * 4;
9246288943Sdim  unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
9247288943Sdim  return vec_perm(__a, __a,
9248309124Sdim                  (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
9249309124Sdim                                         b2, b3, b0, b1, b2, b3));
9250210299Sed}
9251210299Sed
9252309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
9253309124Sdimvec_splat(vector bool int __a, unsigned const int __b) {
9254288943Sdim  unsigned char b0 = (__b & 0x03) * 4;
9255288943Sdim  unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
9256288943Sdim  return vec_perm(__a, __a,
9257309124Sdim                  (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
9258309124Sdim                                         b2, b3, b0, b1, b2, b3));
9259212904Sdim}
9260212904Sdim
9261309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_splat(vector float __a,
9262309124Sdim                                                      unsigned const int __b) {
9263288943Sdim  unsigned char b0 = (__b & 0x03) * 4;
9264288943Sdim  unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
9265288943Sdim  return vec_perm(__a, __a,
9266309124Sdim                  (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
9267309124Sdim                                         b2, b3, b0, b1, b2, b3));
9268210299Sed}
9269210299Sed
9270288943Sdim#ifdef __VSX__
9271309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_splat(vector double __a,
9272309124Sdim                                                       unsigned const int __b) {
9273288943Sdim  unsigned char b0 = (__b & 0x01) * 8;
9274309124Sdim  unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
9275309124Sdim                b6 = b0 + 6, b7 = b0 + 7;
9276288943Sdim  return vec_perm(__a, __a,
9277309124Sdim                  (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
9278309124Sdim                                         b2, b3, b4, b5, b6, b7));
9279288943Sdim}
9280309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
9281309124Sdimvec_splat(vector bool long long __a, unsigned const int __b) {
9282288943Sdim  unsigned char b0 = (__b & 0x01) * 8;
9283309124Sdim  unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
9284309124Sdim                b6 = b0 + 6, b7 = b0 + 7;
9285288943Sdim  return vec_perm(__a, __a,
9286309124Sdim                  (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
9287309124Sdim                                         b2, b3, b4, b5, b6, b7));
9288288943Sdim}
9289309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
9290288943Sdimvec_splat(vector signed long long __a, unsigned const int __b) {
9291288943Sdim  unsigned char b0 = (__b & 0x01) * 8;
9292309124Sdim  unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
9293309124Sdim                b6 = b0 + 6, b7 = b0 + 7;
9294288943Sdim  return vec_perm(__a, __a,
9295309124Sdim                  (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
9296309124Sdim                                         b2, b3, b4, b5, b6, b7));
9297288943Sdim}
9298309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
9299288943Sdimvec_splat(vector unsigned long long __a, unsigned const int __b) {
9300288943Sdim  unsigned char b0 = (__b & 0x01) * 8;
9301309124Sdim  unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
9302309124Sdim                b6 = b0 + 6, b7 = b0 + 7;
9303288943Sdim  return vec_perm(__a, __a,
9304309124Sdim                  (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
9305309124Sdim                                         b2, b3, b4, b5, b6, b7));
9306288943Sdim}
9307288943Sdim#endif
9308288943Sdim
9309210299Sed/* vec_vspltb */
9310210299Sed
9311210299Sed#define __builtin_altivec_vspltb vec_vspltb
9312210299Sed
9313309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9314309124Sdimvec_vspltb(vector signed char __a, unsigned char __b) {
9315249423Sdim  return vec_perm(__a, __a, (vector unsigned char)(__b));
9316210299Sed}
9317210299Sed
9318309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9319309124Sdimvec_vspltb(vector unsigned char __a, unsigned char __b) {
9320249423Sdim  return vec_perm(__a, __a, (vector unsigned char)(__b));
9321210299Sed}
9322210299Sed
9323309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_vspltb(vector bool char __a,
9324309124Sdim                                                           unsigned char __b) {
9325249423Sdim  return vec_perm(__a, __a, (vector unsigned char)(__b));
9326212904Sdim}
9327212904Sdim
9328210299Sed/* vec_vsplth */
9329210299Sed
9330210299Sed#define __builtin_altivec_vsplth vec_vsplth
9331210299Sed
9332309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsplth(vector short __a,
9333309124Sdim                                                       unsigned char __b) {
9334249423Sdim  __b *= 2;
9335288943Sdim  unsigned char b1 = __b + 1;
9336288943Sdim  return vec_perm(__a, __a,
9337288943Sdim                  (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
9338288943Sdim                                         __b, b1, __b, b1, __b, b1, __b, b1));
9339210299Sed}
9340210299Sed
9341309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9342309124Sdimvec_vsplth(vector unsigned short __a, unsigned char __b) {
9343249423Sdim  __b *= 2;
9344288943Sdim  unsigned char b1 = __b + 1;
9345288943Sdim  return vec_perm(__a, __a,
9346288943Sdim                  (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
9347288943Sdim                                         __b, b1, __b, b1, __b, b1, __b, b1));
9348210299Sed}
9349210299Sed
9350309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
9351309124Sdimvec_vsplth(vector bool short __a, unsigned char __b) {
9352249423Sdim  __b *= 2;
9353288943Sdim  unsigned char b1 = __b + 1;
9354288943Sdim  return vec_perm(__a, __a,
9355288943Sdim                  (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
9356288943Sdim                                         __b, b1, __b, b1, __b, b1, __b, b1));
9357212904Sdim}
9358212904Sdim
9359309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vsplth(vector pixel __a,
9360309124Sdim                                                       unsigned char __b) {
9361249423Sdim  __b *= 2;
9362288943Sdim  unsigned char b1 = __b + 1;
9363288943Sdim  return vec_perm(__a, __a,
9364288943Sdim                  (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
9365288943Sdim                                         __b, b1, __b, b1, __b, b1, __b, b1));
9366212904Sdim}
9367212904Sdim
9368210299Sed/* vec_vspltw */
9369210299Sed
9370210299Sed#define __builtin_altivec_vspltw vec_vspltw
9371210299Sed
9372309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vspltw(vector int __a,
9373309124Sdim                                                     unsigned char __b) {
9374249423Sdim  __b *= 4;
9375288943Sdim  unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
9376288943Sdim  return vec_perm(__a, __a,
9377288943Sdim                  (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
9378288943Sdim                                         b1, b2, b3, __b, b1, b2, b3));
9379210299Sed}
9380210299Sed
9381309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9382309124Sdimvec_vspltw(vector unsigned int __a, unsigned char __b) {
9383249423Sdim  __b *= 4;
9384288943Sdim  unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
9385288943Sdim  return vec_perm(__a, __a,
9386288943Sdim                  (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
9387288943Sdim                                         b1, b2, b3, __b, b1, b2, b3));
9388210299Sed}
9389210299Sed
9390309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_vspltw(vector bool int __a,
9391309124Sdim                                                          unsigned char __b) {
9392249423Sdim  __b *= 4;
9393288943Sdim  unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
9394288943Sdim  return vec_perm(__a, __a,
9395288943Sdim                  (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
9396288943Sdim                                         b1, b2, b3, __b, b1, b2, b3));
9397212904Sdim}
9398212904Sdim
9399309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vspltw(vector float __a,
9400309124Sdim                                                       unsigned char __b) {
9401249423Sdim  __b *= 4;
9402288943Sdim  unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
9403288943Sdim  return vec_perm(__a, __a,
9404288943Sdim                  (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
9405288943Sdim                                         b1, b2, b3, __b, b1, b2, b3));
9406210299Sed}
9407210299Sed
9408210299Sed/* vec_splat_s8 */
9409210299Sed
9410210299Sed#define __builtin_altivec_vspltisb vec_splat_s8
9411210299Sed
9412210299Sed// FIXME: parameter should be treated as 5-bit signed literal
9413309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9414309124Sdimvec_splat_s8(signed char __a) {
9415249423Sdim  return (vector signed char)(__a);
9416210299Sed}
9417210299Sed
9418210299Sed/* vec_vspltisb */
9419210299Sed
9420210299Sed// FIXME: parameter should be treated as 5-bit signed literal
9421309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9422309124Sdimvec_vspltisb(signed char __a) {
9423249423Sdim  return (vector signed char)(__a);
9424210299Sed}
9425210299Sed
9426210299Sed/* vec_splat_s16 */
9427210299Sed
9428210299Sed#define __builtin_altivec_vspltish vec_splat_s16
9429210299Sed
9430210299Sed// FIXME: parameter should be treated as 5-bit signed literal
9431309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_splat_s16(signed char __a) {
9432249423Sdim  return (vector short)(__a);
9433210299Sed}
9434210299Sed
9435210299Sed/* vec_vspltish */
9436210299Sed
9437210299Sed// FIXME: parameter should be treated as 5-bit signed literal
9438309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vspltish(signed char __a) {
9439249423Sdim  return (vector short)(__a);
9440210299Sed}
9441210299Sed
9442210299Sed/* vec_splat_s32 */
9443210299Sed
9444210299Sed#define __builtin_altivec_vspltisw vec_splat_s32
9445210299Sed
9446210299Sed// FIXME: parameter should be treated as 5-bit signed literal
9447309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_splat_s32(signed char __a) {
9448249423Sdim  return (vector int)(__a);
9449210299Sed}
9450210299Sed
9451210299Sed/* vec_vspltisw */
9452210299Sed
9453210299Sed// FIXME: parameter should be treated as 5-bit signed literal
9454309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vspltisw(signed char __a) {
9455249423Sdim  return (vector int)(__a);
9456210299Sed}
9457210299Sed
9458210299Sed/* vec_splat_u8 */
9459210299Sed
9460210299Sed// FIXME: parameter should be treated as 5-bit signed literal
9461309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9462309124Sdimvec_splat_u8(unsigned char __a) {
9463249423Sdim  return (vector unsigned char)(__a);
9464210299Sed}
9465210299Sed
9466210299Sed/* vec_splat_u16 */
9467210299Sed
9468210299Sed// FIXME: parameter should be treated as 5-bit signed literal
9469309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9470309124Sdimvec_splat_u16(signed char __a) {
9471249423Sdim  return (vector unsigned short)(__a);
9472210299Sed}
9473210299Sed
9474210299Sed/* vec_splat_u32 */
9475210299Sed
9476210299Sed// FIXME: parameter should be treated as 5-bit signed literal
9477309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9478309124Sdimvec_splat_u32(signed char __a) {
9479249423Sdim  return (vector unsigned int)(__a);
9480210299Sed}
9481210299Sed
9482210299Sed/* vec_sr */
9483210299Sed
9484344779Sdim// vec_sr does modulo arithmetic on __b first, so __b is allowed to be more
9485344779Sdim// than the length of __a.
9486309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9487309124Sdimvec_sr(vector unsigned char __a, vector unsigned char __b) {
9488344779Sdim  return __a >>
9489344779Sdim         (__b % (vector unsigned char)(sizeof(unsigned char) * __CHAR_BIT__));
9490210299Sed}
9491210299Sed
9492344779Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9493344779Sdimvec_sr(vector signed char __a, vector unsigned char __b) {
9494344779Sdim  return (vector signed char)vec_sr((vector unsigned char)__a, __b);
9495210299Sed}
9496210299Sed
9497309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9498309124Sdimvec_sr(vector unsigned short __a, vector unsigned short __b) {
9499344779Sdim  return __a >>
9500344779Sdim         (__b % (vector unsigned short)(sizeof(unsigned short) * __CHAR_BIT__));
9501210299Sed}
9502210299Sed
9503344779Sdimstatic __inline__ vector short __ATTRS_o_ai vec_sr(vector short __a,
9504344779Sdim                                                   vector unsigned short __b) {
9505344779Sdim  return (vector short)vec_sr((vector unsigned short)__a, __b);
9506210299Sed}
9507210299Sed
9508309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9509309124Sdimvec_sr(vector unsigned int __a, vector unsigned int __b) {
9510344779Sdim  return __a >>
9511344779Sdim         (__b % (vector unsigned int)(sizeof(unsigned int) * __CHAR_BIT__));
9512210299Sed}
9513210299Sed
9514344779Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sr(vector int __a,
9515344779Sdim                                                 vector unsigned int __b) {
9516344779Sdim  return (vector int)vec_sr((vector unsigned int)__a, __b);
9517288943Sdim}
9518288943Sdim
9519344779Sdim#ifdef __POWER8_VECTOR__
9520309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
9521288943Sdimvec_sr(vector unsigned long long __a, vector unsigned long long __b) {
9522344779Sdim  return __a >> (__b % (vector unsigned long long)(sizeof(unsigned long long) *
9523344779Sdim                                                   __CHAR_BIT__));
9524288943Sdim}
9525344779Sdim
9526344779Sdimstatic __inline__ vector long long __ATTRS_o_ai
9527344779Sdimvec_sr(vector long long __a, vector unsigned long long __b) {
9528344779Sdim  return (vector long long)vec_sr((vector unsigned long long)__a, __b);
9529344779Sdim}
9530288943Sdim#endif
9531288943Sdim
9532210299Sed/* vec_vsrb */
9533210299Sed
9534210299Sed#define __builtin_altivec_vsrb vec_vsrb
9535210299Sed
9536309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9537309124Sdimvec_vsrb(vector signed char __a, vector unsigned char __b) {
9538344779Sdim  return vec_sr(__a, __b);
9539210299Sed}
9540210299Sed
9541309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9542309124Sdimvec_vsrb(vector unsigned char __a, vector unsigned char __b) {
9543344779Sdim  return vec_sr(__a, __b);
9544210299Sed}
9545210299Sed
9546210299Sed/* vec_vsrh */
9547210299Sed
9548210299Sed#define __builtin_altivec_vsrh vec_vsrh
9549210299Sed
9550309124Sdimstatic __inline__ vector short __ATTRS_o_ai
9551309124Sdimvec_vsrh(vector short __a, vector unsigned short __b) {
9552344779Sdim  return vec_sr(__a, __b);
9553210299Sed}
9554210299Sed
9555309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9556309124Sdimvec_vsrh(vector unsigned short __a, vector unsigned short __b) {
9557344779Sdim  return vec_sr(__a, __b);
9558210299Sed}
9559210299Sed
9560210299Sed/* vec_vsrw */
9561210299Sed
9562210299Sed#define __builtin_altivec_vsrw vec_vsrw
9563210299Sed
9564309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsrw(vector int __a,
9565309124Sdim                                                   vector unsigned int __b) {
9566344779Sdim  return vec_sr(__a, __b);
9567210299Sed}
9568210299Sed
9569309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9570309124Sdimvec_vsrw(vector unsigned int __a, vector unsigned int __b) {
9571344779Sdim  return vec_sr(__a, __b);
9572210299Sed}
9573210299Sed
9574210299Sed/* vec_sra */
9575210299Sed
9576309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9577309124Sdimvec_sra(vector signed char __a, vector unsigned char __b) {
9578249423Sdim  return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
9579210299Sed}
9580210299Sed
9581309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9582309124Sdimvec_sra(vector unsigned char __a, vector unsigned char __b) {
9583249423Sdim  return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
9584210299Sed}
9585210299Sed
9586309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_sra(vector short __a,
9587309124Sdim                                                    vector unsigned short __b) {
9588249423Sdim  return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
9589210299Sed}
9590210299Sed
9591309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9592309124Sdimvec_sra(vector unsigned short __a, vector unsigned short __b) {
9593249423Sdim  return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
9594210299Sed}
9595210299Sed
9596309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sra(vector int __a,
9597309124Sdim                                                  vector unsigned int __b) {
9598249423Sdim  return __builtin_altivec_vsraw(__a, __b);
9599210299Sed}
9600210299Sed
9601309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9602309124Sdimvec_sra(vector unsigned int __a, vector unsigned int __b) {
9603249423Sdim  return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
9604210299Sed}
9605210299Sed
9606288943Sdim#ifdef __POWER8_VECTOR__
9607309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
9608288943Sdimvec_sra(vector signed long long __a, vector unsigned long long __b) {
9609288943Sdim  return __a >> __b;
9610288943Sdim}
9611288943Sdim
9612309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
9613288943Sdimvec_sra(vector unsigned long long __a, vector unsigned long long __b) {
9614288943Sdim  return (vector unsigned long long)((vector signed long long)__a >> __b);
9615288943Sdim}
9616288943Sdim#endif
9617288943Sdim
9618210299Sed/* vec_vsrab */
9619210299Sed
9620309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9621309124Sdimvec_vsrab(vector signed char __a, vector unsigned char __b) {
9622249423Sdim  return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
9623210299Sed}
9624210299Sed
9625309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9626309124Sdimvec_vsrab(vector unsigned char __a, vector unsigned char __b) {
9627249423Sdim  return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
9628210299Sed}
9629210299Sed
9630210299Sed/* vec_vsrah */
9631210299Sed
9632309124Sdimstatic __inline__ vector short __ATTRS_o_ai
9633309124Sdimvec_vsrah(vector short __a, vector unsigned short __b) {
9634249423Sdim  return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
9635210299Sed}
9636210299Sed
9637309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9638309124Sdimvec_vsrah(vector unsigned short __a, vector unsigned short __b) {
9639249423Sdim  return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
9640210299Sed}
9641210299Sed
9642210299Sed/* vec_vsraw */
9643210299Sed
9644309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsraw(vector int __a,
9645309124Sdim                                                    vector unsigned int __b) {
9646249423Sdim  return __builtin_altivec_vsraw(__a, __b);
9647210299Sed}
9648210299Sed
9649309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9650309124Sdimvec_vsraw(vector unsigned int __a, vector unsigned int __b) {
9651249423Sdim  return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
9652210299Sed}
9653210299Sed
9654210299Sed/* vec_srl */
9655210299Sed
9656309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9657309124Sdimvec_srl(vector signed char __a, vector unsigned char __b) {
9658288943Sdim  return (vector signed char)__builtin_altivec_vsr((vector int)__a,
9659288943Sdim                                                   (vector int)__b);
9660210299Sed}
9661210299Sed
9662309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9663309124Sdimvec_srl(vector signed char __a, vector unsigned short __b) {
9664288943Sdim  return (vector signed char)__builtin_altivec_vsr((vector int)__a,
9665288943Sdim                                                   (vector int)__b);
9666210299Sed}
9667210299Sed
9668309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9669309124Sdimvec_srl(vector signed char __a, vector unsigned int __b) {
9670288943Sdim  return (vector signed char)__builtin_altivec_vsr((vector int)__a,
9671288943Sdim                                                   (vector int)__b);
9672210299Sed}
9673210299Sed
9674309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9675309124Sdimvec_srl(vector unsigned char __a, vector unsigned char __b) {
9676288943Sdim  return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
9677288943Sdim                                                     (vector int)__b);
9678210299Sed}
9679210299Sed
9680309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9681309124Sdimvec_srl(vector unsigned char __a, vector unsigned short __b) {
9682288943Sdim  return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
9683288943Sdim                                                     (vector int)__b);
9684210299Sed}
9685210299Sed
9686309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9687309124Sdimvec_srl(vector unsigned char __a, vector unsigned int __b) {
9688288943Sdim  return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
9689288943Sdim                                                     (vector int)__b);
9690210299Sed}
9691210299Sed
9692309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
9693309124Sdimvec_srl(vector bool char __a, vector unsigned char __b) {
9694288943Sdim  return (vector bool char)__builtin_altivec_vsr((vector int)__a,
9695288943Sdim                                                 (vector int)__b);
9696212904Sdim}
9697212904Sdim
9698309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
9699309124Sdimvec_srl(vector bool char __a, vector unsigned short __b) {
9700288943Sdim  return (vector bool char)__builtin_altivec_vsr((vector int)__a,
9701288943Sdim                                                 (vector int)__b);
9702212904Sdim}
9703212904Sdim
9704309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
9705309124Sdimvec_srl(vector bool char __a, vector unsigned int __b) {
9706288943Sdim  return (vector bool char)__builtin_altivec_vsr((vector int)__a,
9707288943Sdim                                                 (vector int)__b);
9708212904Sdim}
9709212904Sdim
9710309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
9711309124Sdim                                                    vector unsigned char __b) {
9712249423Sdim  return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
9713210299Sed}
9714210299Sed
9715309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
9716309124Sdim                                                    vector unsigned short __b) {
9717249423Sdim  return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
9718210299Sed}
9719210299Sed
9720309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
9721309124Sdim                                                    vector unsigned int __b) {
9722249423Sdim  return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
9723210299Sed}
9724210299Sed
9725309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9726309124Sdimvec_srl(vector unsigned short __a, vector unsigned char __b) {
9727288943Sdim  return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
9728288943Sdim                                                      (vector int)__b);
9729210299Sed}
9730210299Sed
9731309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9732309124Sdimvec_srl(vector unsigned short __a, vector unsigned short __b) {
9733288943Sdim  return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
9734288943Sdim                                                      (vector int)__b);
9735210299Sed}
9736210299Sed
9737309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9738309124Sdimvec_srl(vector unsigned short __a, vector unsigned int __b) {
9739288943Sdim  return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
9740288943Sdim                                                      (vector int)__b);
9741210299Sed}
9742210299Sed
9743309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
9744309124Sdimvec_srl(vector bool short __a, vector unsigned char __b) {
9745288943Sdim  return (vector bool short)__builtin_altivec_vsr((vector int)__a,
9746288943Sdim                                                  (vector int)__b);
9747212904Sdim}
9748212904Sdim
9749309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
9750309124Sdimvec_srl(vector bool short __a, vector unsigned short __b) {
9751288943Sdim  return (vector bool short)__builtin_altivec_vsr((vector int)__a,
9752288943Sdim                                                  (vector int)__b);
9753212904Sdim}
9754212904Sdim
9755309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
9756309124Sdimvec_srl(vector bool short __a, vector unsigned int __b) {
9757288943Sdim  return (vector bool short)__builtin_altivec_vsr((vector int)__a,
9758288943Sdim                                                  (vector int)__b);
9759212904Sdim}
9760212904Sdim
9761309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
9762309124Sdim                                                    vector unsigned char __b) {
9763249423Sdim  return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
9764212904Sdim}
9765212904Sdim
9766309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
9767309124Sdim                                                    vector unsigned short __b) {
9768249423Sdim  return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
9769212904Sdim}
9770212904Sdim
9771309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
9772309124Sdim                                                    vector unsigned int __b) {
9773249423Sdim  return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
9774212904Sdim}
9775212904Sdim
9776309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
9777309124Sdim                                                  vector unsigned char __b) {
9778249423Sdim  return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
9779210299Sed}
9780210299Sed
9781309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
9782309124Sdim                                                  vector unsigned short __b) {
9783249423Sdim  return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
9784210299Sed}
9785210299Sed
9786309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
9787309124Sdim                                                  vector unsigned int __b) {
9788249423Sdim  return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
9789210299Sed}
9790210299Sed
9791309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9792309124Sdimvec_srl(vector unsigned int __a, vector unsigned char __b) {
9793288943Sdim  return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
9794288943Sdim                                                    (vector int)__b);
9795210299Sed}
9796210299Sed
9797309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9798309124Sdimvec_srl(vector unsigned int __a, vector unsigned short __b) {
9799288943Sdim  return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
9800288943Sdim                                                    (vector int)__b);
9801210299Sed}
9802210299Sed
9803309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9804309124Sdimvec_srl(vector unsigned int __a, vector unsigned int __b) {
9805288943Sdim  return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
9806288943Sdim                                                    (vector int)__b);
9807210299Sed}
9808210299Sed
9809309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
9810309124Sdimvec_srl(vector bool int __a, vector unsigned char __b) {
9811288943Sdim  return (vector bool int)__builtin_altivec_vsr((vector int)__a,
9812288943Sdim                                                (vector int)__b);
9813212904Sdim}
9814212904Sdim
9815309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
9816309124Sdimvec_srl(vector bool int __a, vector unsigned short __b) {
9817288943Sdim  return (vector bool int)__builtin_altivec_vsr((vector int)__a,
9818288943Sdim                                                (vector int)__b);
9819212904Sdim}
9820212904Sdim
9821309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
9822309124Sdimvec_srl(vector bool int __a, vector unsigned int __b) {
9823288943Sdim  return (vector bool int)__builtin_altivec_vsr((vector int)__a,
9824288943Sdim                                                (vector int)__b);
9825212904Sdim}
9826212904Sdim
9827314564Sdim#ifdef __VSX__
9828314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
9829314564Sdimvec_srl(vector signed long long __a, vector unsigned char __b) {
9830314564Sdim  return (vector signed long long)__builtin_altivec_vsr((vector int)__a,
9831314564Sdim                                                        (vector int)__b);
9832314564Sdim}
9833314564Sdim
9834314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
9835314564Sdimvec_srl(vector unsigned long long __a, vector unsigned char __b) {
9836314564Sdim  return (vector unsigned long long)__builtin_altivec_vsr((vector int)__a,
9837314564Sdim                                                          (vector int)__b);
9838314564Sdim}
9839314564Sdim#endif
9840314564Sdim
9841210299Sed/* vec_vsr */
9842210299Sed
9843309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9844309124Sdimvec_vsr(vector signed char __a, vector unsigned char __b) {
9845288943Sdim  return (vector signed char)__builtin_altivec_vsr((vector int)__a,
9846288943Sdim                                                   (vector int)__b);
9847210299Sed}
9848210299Sed
9849309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9850309124Sdimvec_vsr(vector signed char __a, vector unsigned short __b) {
9851288943Sdim  return (vector signed char)__builtin_altivec_vsr((vector int)__a,
9852288943Sdim                                                   (vector int)__b);
9853210299Sed}
9854210299Sed
9855309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
9856309124Sdimvec_vsr(vector signed char __a, vector unsigned int __b) {
9857288943Sdim  return (vector signed char)__builtin_altivec_vsr((vector int)__a,
9858288943Sdim                                                   (vector int)__b);
9859210299Sed}
9860210299Sed
9861309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9862309124Sdimvec_vsr(vector unsigned char __a, vector unsigned char __b) {
9863288943Sdim  return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
9864288943Sdim                                                     (vector int)__b);
9865210299Sed}
9866210299Sed
9867309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9868309124Sdimvec_vsr(vector unsigned char __a, vector unsigned short __b) {
9869288943Sdim  return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
9870288943Sdim                                                     (vector int)__b);
9871210299Sed}
9872210299Sed
9873309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
9874309124Sdimvec_vsr(vector unsigned char __a, vector unsigned int __b) {
9875288943Sdim  return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
9876288943Sdim                                                     (vector int)__b);
9877210299Sed}
9878210299Sed
9879309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
9880309124Sdimvec_vsr(vector bool char __a, vector unsigned char __b) {
9881288943Sdim  return (vector bool char)__builtin_altivec_vsr((vector int)__a,
9882288943Sdim                                                 (vector int)__b);
9883212904Sdim}
9884212904Sdim
9885309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
9886309124Sdimvec_vsr(vector bool char __a, vector unsigned short __b) {
9887288943Sdim  return (vector bool char)__builtin_altivec_vsr((vector int)__a,
9888288943Sdim                                                 (vector int)__b);
9889212904Sdim}
9890212904Sdim
9891309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
9892309124Sdimvec_vsr(vector bool char __a, vector unsigned int __b) {
9893288943Sdim  return (vector bool char)__builtin_altivec_vsr((vector int)__a,
9894288943Sdim                                                 (vector int)__b);
9895212904Sdim}
9896212904Sdim
9897309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
9898309124Sdim                                                    vector unsigned char __b) {
9899249423Sdim  return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
9900210299Sed}
9901210299Sed
9902309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
9903309124Sdim                                                    vector unsigned short __b) {
9904249423Sdim  return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
9905210299Sed}
9906210299Sed
9907309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
9908309124Sdim                                                    vector unsigned int __b) {
9909249423Sdim  return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
9910210299Sed}
9911210299Sed
9912309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9913309124Sdimvec_vsr(vector unsigned short __a, vector unsigned char __b) {
9914288943Sdim  return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
9915288943Sdim                                                      (vector int)__b);
9916210299Sed}
9917210299Sed
9918309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9919309124Sdimvec_vsr(vector unsigned short __a, vector unsigned short __b) {
9920288943Sdim  return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
9921288943Sdim                                                      (vector int)__b);
9922210299Sed}
9923210299Sed
9924309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
9925309124Sdimvec_vsr(vector unsigned short __a, vector unsigned int __b) {
9926288943Sdim  return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
9927288943Sdim                                                      (vector int)__b);
9928210299Sed}
9929210299Sed
9930309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
9931309124Sdimvec_vsr(vector bool short __a, vector unsigned char __b) {
9932288943Sdim  return (vector bool short)__builtin_altivec_vsr((vector int)__a,
9933288943Sdim                                                  (vector int)__b);
9934212904Sdim}
9935212904Sdim
9936309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
9937309124Sdimvec_vsr(vector bool short __a, vector unsigned short __b) {
9938288943Sdim  return (vector bool short)__builtin_altivec_vsr((vector int)__a,
9939288943Sdim                                                  (vector int)__b);
9940212904Sdim}
9941212904Sdim
9942309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
9943309124Sdimvec_vsr(vector bool short __a, vector unsigned int __b) {
9944288943Sdim  return (vector bool short)__builtin_altivec_vsr((vector int)__a,
9945288943Sdim                                                  (vector int)__b);
9946212904Sdim}
9947212904Sdim
9948309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
9949309124Sdim                                                    vector unsigned char __b) {
9950249423Sdim  return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
9951212904Sdim}
9952212904Sdim
9953309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
9954309124Sdim                                                    vector unsigned short __b) {
9955249423Sdim  return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
9956212904Sdim}
9957212904Sdim
9958309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
9959309124Sdim                                                    vector unsigned int __b) {
9960249423Sdim  return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
9961212904Sdim}
9962212904Sdim
9963309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
9964309124Sdim                                                  vector unsigned char __b) {
9965249423Sdim  return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
9966210299Sed}
9967210299Sed
9968309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
9969309124Sdim                                                  vector unsigned short __b) {
9970249423Sdim  return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
9971210299Sed}
9972210299Sed
9973309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
9974309124Sdim                                                  vector unsigned int __b) {
9975249423Sdim  return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
9976210299Sed}
9977210299Sed
9978309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9979309124Sdimvec_vsr(vector unsigned int __a, vector unsigned char __b) {
9980288943Sdim  return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
9981288943Sdim                                                    (vector int)__b);
9982210299Sed}
9983210299Sed
9984309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9985309124Sdimvec_vsr(vector unsigned int __a, vector unsigned short __b) {
9986288943Sdim  return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
9987288943Sdim                                                    (vector int)__b);
9988210299Sed}
9989210299Sed
9990309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
9991309124Sdimvec_vsr(vector unsigned int __a, vector unsigned int __b) {
9992288943Sdim  return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
9993288943Sdim                                                    (vector int)__b);
9994210299Sed}
9995210299Sed
9996309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
9997309124Sdimvec_vsr(vector bool int __a, vector unsigned char __b) {
9998288943Sdim  return (vector bool int)__builtin_altivec_vsr((vector int)__a,
9999288943Sdim                                                (vector int)__b);
10000212904Sdim}
10001212904Sdim
10002309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
10003309124Sdimvec_vsr(vector bool int __a, vector unsigned short __b) {
10004288943Sdim  return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10005288943Sdim                                                (vector int)__b);
10006212904Sdim}
10007212904Sdim
10008309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
10009309124Sdimvec_vsr(vector bool int __a, vector unsigned int __b) {
10010288943Sdim  return (vector bool int)__builtin_altivec_vsr((vector int)__a,
10011288943Sdim                                                (vector int)__b);
10012212904Sdim}
10013212904Sdim
10014210299Sed/* vec_sro */
10015210299Sed
10016309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
10017309124Sdimvec_sro(vector signed char __a, vector signed char __b) {
10018288943Sdim  return (vector signed char)__builtin_altivec_vsro((vector int)__a,
10019288943Sdim                                                    (vector int)__b);
10020210299Sed}
10021210299Sed
10022309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
10023309124Sdimvec_sro(vector signed char __a, vector unsigned char __b) {
10024288943Sdim  return (vector signed char)__builtin_altivec_vsro((vector int)__a,
10025288943Sdim                                                    (vector int)__b);
10026210299Sed}
10027210299Sed
10028309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
10029309124Sdimvec_sro(vector unsigned char __a, vector signed char __b) {
10030288943Sdim  return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
10031288943Sdim                                                      (vector int)__b);
10032210299Sed}
10033210299Sed
10034309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
10035309124Sdimvec_sro(vector unsigned char __a, vector unsigned char __b) {
10036288943Sdim  return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
10037288943Sdim                                                      (vector int)__b);
10038210299Sed}
10039210299Sed
10040309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
10041309124Sdim                                                    vector signed char __b) {
10042249423Sdim  return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10043210299Sed}
10044210299Sed
10045309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
10046309124Sdim                                                    vector unsigned char __b) {
10047249423Sdim  return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10048210299Sed}
10049210299Sed
10050309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
10051309124Sdimvec_sro(vector unsigned short __a, vector signed char __b) {
10052288943Sdim  return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
10053288943Sdim                                                       (vector int)__b);
10054210299Sed}
10055210299Sed
10056309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
10057309124Sdimvec_sro(vector unsigned short __a, vector unsigned char __b) {
10058288943Sdim  return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
10059288943Sdim                                                       (vector int)__b);
10060210299Sed}
10061210299Sed
10062309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
10063309124Sdim                                                    vector signed char __b) {
10064249423Sdim  return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10065212904Sdim}
10066212904Sdim
10067309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
10068309124Sdim                                                    vector unsigned char __b) {
10069249423Sdim  return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10070212904Sdim}
10071212904Sdim
10072309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
10073309124Sdim                                                  vector signed char __b) {
10074249423Sdim  return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
10075210299Sed}
10076210299Sed
10077309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
10078309124Sdim                                                  vector unsigned char __b) {
10079249423Sdim  return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
10080210299Sed}
10081210299Sed
10082309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
10083309124Sdimvec_sro(vector unsigned int __a, vector signed char __b) {
10084288943Sdim  return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
10085288943Sdim                                                     (vector int)__b);
10086210299Sed}
10087210299Sed
10088309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
10089309124Sdimvec_sro(vector unsigned int __a, vector unsigned char __b) {
10090288943Sdim  return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
10091288943Sdim                                                     (vector int)__b);
10092210299Sed}
10093210299Sed
10094309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
10095309124Sdim                                                    vector signed char __b) {
10096249423Sdim  return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10097210299Sed}
10098210299Sed
10099309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
10100309124Sdim                                                    vector unsigned char __b) {
10101249423Sdim  return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10102210299Sed}
10103210299Sed
10104314564Sdim#ifdef __VSX__
10105314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
10106314564Sdimvec_sro(vector signed long long __a, vector signed char __b) {
10107314564Sdim  return (vector signed long long)__builtin_altivec_vsro((vector int)__a,
10108314564Sdim                                                         (vector int)__b);
10109314564Sdim}
10110314564Sdim
10111314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
10112314564Sdimvec_sro(vector signed long long __a, vector unsigned char __b) {
10113314564Sdim  return (vector signed long long)__builtin_altivec_vsro((vector int)__a,
10114314564Sdim                                                         (vector int)__b);
10115314564Sdim}
10116314564Sdim
10117314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
10118314564Sdimvec_sro(vector unsigned long long __a, vector signed char __b) {
10119314564Sdim  return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,
10120314564Sdim                                                           (vector int)__b);
10121314564Sdim}
10122314564Sdim
10123314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
10124314564Sdimvec_sro(vector unsigned long long __a, vector unsigned char __b) {
10125314564Sdim  return (vector unsigned long long)__builtin_altivec_vsro((vector int)__a,
10126314564Sdim                                                           (vector int)__b);
10127314564Sdim}
10128314564Sdim#endif
10129314564Sdim
10130210299Sed/* vec_vsro */
10131210299Sed
10132309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
10133309124Sdimvec_vsro(vector signed char __a, vector signed char __b) {
10134288943Sdim  return (vector signed char)__builtin_altivec_vsro((vector int)__a,
10135288943Sdim                                                    (vector int)__b);
10136210299Sed}
10137210299Sed
10138309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
10139309124Sdimvec_vsro(vector signed char __a, vector unsigned char __b) {
10140288943Sdim  return (vector signed char)__builtin_altivec_vsro((vector int)__a,
10141288943Sdim                                                    (vector int)__b);
10142210299Sed}
10143210299Sed
10144309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
10145309124Sdimvec_vsro(vector unsigned char __a, vector signed char __b) {
10146288943Sdim  return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
10147288943Sdim                                                      (vector int)__b);
10148210299Sed}
10149210299Sed
10150309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
10151309124Sdimvec_vsro(vector unsigned char __a, vector unsigned char __b) {
10152288943Sdim  return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
10153288943Sdim                                                      (vector int)__b);
10154210299Sed}
10155210299Sed
10156309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
10157309124Sdim                                                     vector signed char __b) {
10158249423Sdim  return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10159210299Sed}
10160210299Sed
10161309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
10162309124Sdim                                                     vector unsigned char __b) {
10163249423Sdim  return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10164210299Sed}
10165210299Sed
10166309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
10167309124Sdimvec_vsro(vector unsigned short __a, vector signed char __b) {
10168288943Sdim  return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
10169288943Sdim                                                       (vector int)__b);
10170210299Sed}
10171210299Sed
10172309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
10173309124Sdimvec_vsro(vector unsigned short __a, vector unsigned char __b) {
10174288943Sdim  return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
10175288943Sdim                                                       (vector int)__b);
10176210299Sed}
10177210299Sed
10178309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
10179309124Sdim                                                     vector signed char __b) {
10180249423Sdim  return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10181212904Sdim}
10182212904Sdim
10183309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
10184309124Sdim                                                     vector unsigned char __b) {
10185249423Sdim  return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10186212904Sdim}
10187212904Sdim
10188309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
10189309124Sdim                                                   vector signed char __b) {
10190249423Sdim  return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
10191210299Sed}
10192210299Sed
10193309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
10194309124Sdim                                                   vector unsigned char __b) {
10195249423Sdim  return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
10196210299Sed}
10197210299Sed
10198309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
10199309124Sdimvec_vsro(vector unsigned int __a, vector signed char __b) {
10200288943Sdim  return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
10201288943Sdim                                                     (vector int)__b);
10202210299Sed}
10203210299Sed
10204309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
10205309124Sdimvec_vsro(vector unsigned int __a, vector unsigned char __b) {
10206288943Sdim  return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
10207288943Sdim                                                     (vector int)__b);
10208210299Sed}
10209210299Sed
10210309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
10211309124Sdim                                                     vector signed char __b) {
10212249423Sdim  return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10213210299Sed}
10214210299Sed
10215309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
10216309124Sdim                                                     vector unsigned char __b) {
10217249423Sdim  return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
10218210299Sed}
10219210299Sed
10220210299Sed/* vec_st */
10221210299Sed
10222309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, int __b,
10223309124Sdim                                           vector signed char *__c) {
10224249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10225210299Sed}
10226210299Sed
10227309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, int __b,
10228309124Sdim                                           signed char *__c) {
10229249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10230210299Sed}
10231210299Sed
10232309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, int __b,
10233309124Sdim                                           vector unsigned char *__c) {
10234249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10235210299Sed}
10236210299Sed
10237309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, int __b,
10238309124Sdim                                           unsigned char *__c) {
10239249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10240210299Sed}
10241210299Sed
10242309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, int __b,
10243309124Sdim                                           signed char *__c) {
10244249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10245212904Sdim}
10246212904Sdim
10247309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, int __b,
10248309124Sdim                                           unsigned char *__c) {
10249249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10250212904Sdim}
10251212904Sdim
10252309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, int __b,
10253309124Sdim                                           vector bool char *__c) {
10254249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10255212904Sdim}
10256212904Sdim
10257309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector short __a, int __b,
10258309124Sdim                                           vector short *__c) {
10259249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10260210299Sed}
10261210299Sed
10262309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector short __a, int __b,
10263309124Sdim                                           short *__c) {
10264249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10265210299Sed}
10266210299Sed
10267309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, int __b,
10268309124Sdim                                           vector unsigned short *__c) {
10269249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10270210299Sed}
10271210299Sed
10272309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, int __b,
10273309124Sdim                                           unsigned short *__c) {
10274249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10275210299Sed}
10276210299Sed
10277309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, int __b,
10278309124Sdim                                           short *__c) {
10279249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10280212904Sdim}
10281212904Sdim
10282309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, int __b,
10283309124Sdim                                           unsigned short *__c) {
10284249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10285212904Sdim}
10286212904Sdim
10287309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, int __b,
10288309124Sdim                                           vector bool short *__c) {
10289249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10290212904Sdim}
10291212904Sdim
10292309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, int __b,
10293309124Sdim                                           short *__c) {
10294249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10295212904Sdim}
10296212904Sdim
10297309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, int __b,
10298309124Sdim                                           unsigned short *__c) {
10299249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10300212904Sdim}
10301212904Sdim
10302309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, int __b,
10303309124Sdim                                           vector pixel *__c) {
10304249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10305212904Sdim}
10306212904Sdim
10307309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector int __a, int __b,
10308309124Sdim                                           vector int *__c) {
10309249423Sdim  __builtin_altivec_stvx(__a, __b, __c);
10310210299Sed}
10311210299Sed
10312309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector int __a, int __b, int *__c) {
10313249423Sdim  __builtin_altivec_stvx(__a, __b, __c);
10314210299Sed}
10315210299Sed
10316309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, int __b,
10317309124Sdim                                           vector unsigned int *__c) {
10318249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10319210299Sed}
10320210299Sed
10321309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, int __b,
10322309124Sdim                                           unsigned int *__c) {
10323249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10324210299Sed}
10325210299Sed
10326309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, int __b,
10327309124Sdim                                           int *__c) {
10328249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10329212904Sdim}
10330212904Sdim
10331309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, int __b,
10332309124Sdim                                           unsigned int *__c) {
10333249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10334212904Sdim}
10335212904Sdim
10336309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, int __b,
10337309124Sdim                                           vector bool int *__c) {
10338249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10339212904Sdim}
10340212904Sdim
10341309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector float __a, int __b,
10342309124Sdim                                           vector float *__c) {
10343249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10344210299Sed}
10345210299Sed
10346309124Sdimstatic __inline__ void __ATTRS_o_ai vec_st(vector float __a, int __b,
10347309124Sdim                                           float *__c) {
10348249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10349210299Sed}
10350210299Sed
10351210299Sed/* vec_stvx */
10352210299Sed
10353309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, int __b,
10354309124Sdim                                             vector signed char *__c) {
10355249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10356210299Sed}
10357210299Sed
10358309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, int __b,
10359309124Sdim                                             signed char *__c) {
10360249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10361210299Sed}
10362210299Sed
10363309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, int __b,
10364309124Sdim                                             vector unsigned char *__c) {
10365249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10366210299Sed}
10367210299Sed
10368309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, int __b,
10369309124Sdim                                             unsigned char *__c) {
10370249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10371210299Sed}
10372210299Sed
10373309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, int __b,
10374309124Sdim                                             signed char *__c) {
10375249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10376212904Sdim}
10377212904Sdim
10378309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, int __b,
10379309124Sdim                                             unsigned char *__c) {
10380249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10381212904Sdim}
10382212904Sdim
10383309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, int __b,
10384309124Sdim                                             vector bool char *__c) {
10385249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10386212904Sdim}
10387212904Sdim
10388309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, int __b,
10389309124Sdim                                             vector short *__c) {
10390249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10391210299Sed}
10392210299Sed
10393309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, int __b,
10394309124Sdim                                             short *__c) {
10395249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10396210299Sed}
10397210299Sed
10398309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, int __b,
10399309124Sdim                                             vector unsigned short *__c) {
10400249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10401210299Sed}
10402210299Sed
10403309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, int __b,
10404309124Sdim                                             unsigned short *__c) {
10405249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10406210299Sed}
10407210299Sed
10408309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, int __b,
10409309124Sdim                                             short *__c) {
10410249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10411212904Sdim}
10412212904Sdim
10413309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, int __b,
10414309124Sdim                                             unsigned short *__c) {
10415249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10416212904Sdim}
10417212904Sdim
10418309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, int __b,
10419309124Sdim                                             vector bool short *__c) {
10420249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10421212904Sdim}
10422212904Sdim
10423309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, int __b,
10424309124Sdim                                             short *__c) {
10425249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10426212904Sdim}
10427212904Sdim
10428309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, int __b,
10429309124Sdim                                             unsigned short *__c) {
10430249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10431212904Sdim}
10432212904Sdim
10433309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, int __b,
10434309124Sdim                                             vector pixel *__c) {
10435249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10436212904Sdim}
10437212904Sdim
10438309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, int __b,
10439309124Sdim                                             vector int *__c) {
10440249423Sdim  __builtin_altivec_stvx(__a, __b, __c);
10441210299Sed}
10442210299Sed
10443309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, int __b,
10444309124Sdim                                             int *__c) {
10445249423Sdim  __builtin_altivec_stvx(__a, __b, __c);
10446210299Sed}
10447210299Sed
10448309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, int __b,
10449309124Sdim                                             vector unsigned int *__c) {
10450249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10451210299Sed}
10452210299Sed
10453309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, int __b,
10454309124Sdim                                             unsigned int *__c) {
10455249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10456210299Sed}
10457210299Sed
10458309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, int __b,
10459309124Sdim                                             int *__c) {
10460249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10461212904Sdim}
10462212904Sdim
10463309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, int __b,
10464309124Sdim                                             unsigned int *__c) {
10465249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10466212904Sdim}
10467212904Sdim
10468309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, int __b,
10469309124Sdim                                             vector bool int *__c) {
10470249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10471212904Sdim}
10472212904Sdim
10473309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, int __b,
10474309124Sdim                                             vector float *__c) {
10475249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10476210299Sed}
10477210299Sed
10478309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, int __b,
10479309124Sdim                                             float *__c) {
10480249423Sdim  __builtin_altivec_stvx((vector int)__a, __b, __c);
10481210299Sed}
10482210299Sed
10483210299Sed/* vec_ste */
10484210299Sed
10485309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector signed char __a, int __b,
10486309124Sdim                                            signed char *__c) {
10487249423Sdim  __builtin_altivec_stvebx((vector char)__a, __b, __c);
10488210299Sed}
10489210299Sed
10490309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector unsigned char __a, int __b,
10491309124Sdim                                            unsigned char *__c) {
10492249423Sdim  __builtin_altivec_stvebx((vector char)__a, __b, __c);
10493210299Sed}
10494210299Sed
10495309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, int __b,
10496309124Sdim                                            signed char *__c) {
10497249423Sdim  __builtin_altivec_stvebx((vector char)__a, __b, __c);
10498212904Sdim}
10499212904Sdim
10500309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, int __b,
10501309124Sdim                                            unsigned char *__c) {
10502249423Sdim  __builtin_altivec_stvebx((vector char)__a, __b, __c);
10503212904Sdim}
10504212904Sdim
10505309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector short __a, int __b,
10506309124Sdim                                            short *__c) {
10507249423Sdim  __builtin_altivec_stvehx(__a, __b, __c);
10508210299Sed}
10509210299Sed
10510309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector unsigned short __a, int __b,
10511309124Sdim                                            unsigned short *__c) {
10512249423Sdim  __builtin_altivec_stvehx((vector short)__a, __b, __c);
10513210299Sed}
10514210299Sed
10515309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, int __b,
10516309124Sdim                                            short *__c) {
10517249423Sdim  __builtin_altivec_stvehx((vector short)__a, __b, __c);
10518212904Sdim}
10519212904Sdim
10520309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, int __b,
10521309124Sdim                                            unsigned short *__c) {
10522249423Sdim  __builtin_altivec_stvehx((vector short)__a, __b, __c);
10523212904Sdim}
10524212904Sdim
10525309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, int __b,
10526309124Sdim                                            short *__c) {
10527249423Sdim  __builtin_altivec_stvehx((vector short)__a, __b, __c);
10528212904Sdim}
10529212904Sdim
10530309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, int __b,
10531309124Sdim                                            unsigned short *__c) {
10532249423Sdim  __builtin_altivec_stvehx((vector short)__a, __b, __c);
10533212904Sdim}
10534212904Sdim
10535309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector int __a, int __b, int *__c) {
10536249423Sdim  __builtin_altivec_stvewx(__a, __b, __c);
10537210299Sed}
10538210299Sed
10539309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector unsigned int __a, int __b,
10540309124Sdim                                            unsigned int *__c) {
10541249423Sdim  __builtin_altivec_stvewx((vector int)__a, __b, __c);
10542210299Sed}
10543210299Sed
10544309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, int __b,
10545309124Sdim                                            int *__c) {
10546249423Sdim  __builtin_altivec_stvewx((vector int)__a, __b, __c);
10547212904Sdim}
10548212904Sdim
10549309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, int __b,
10550309124Sdim                                            unsigned int *__c) {
10551249423Sdim  __builtin_altivec_stvewx((vector int)__a, __b, __c);
10552212904Sdim}
10553212904Sdim
10554309124Sdimstatic __inline__ void __ATTRS_o_ai vec_ste(vector float __a, int __b,
10555309124Sdim                                            float *__c) {
10556249423Sdim  __builtin_altivec_stvewx((vector int)__a, __b, __c);
10557210299Sed}
10558210299Sed
10559210299Sed/* vec_stvebx */
10560210299Sed
10561309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvebx(vector signed char __a, int __b,
10562309124Sdim                                               signed char *__c) {
10563249423Sdim  __builtin_altivec_stvebx((vector char)__a, __b, __c);
10564210299Sed}
10565210299Sed
10566309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvebx(vector unsigned char __a,
10567309124Sdim                                               int __b, unsigned char *__c) {
10568249423Sdim  __builtin_altivec_stvebx((vector char)__a, __b, __c);
10569210299Sed}
10570210299Sed
10571309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, int __b,
10572309124Sdim                                               signed char *__c) {
10573249423Sdim  __builtin_altivec_stvebx((vector char)__a, __b, __c);
10574212904Sdim}
10575212904Sdim
10576309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, int __b,
10577309124Sdim                                               unsigned char *__c) {
10578249423Sdim  __builtin_altivec_stvebx((vector char)__a, __b, __c);
10579212904Sdim}
10580212904Sdim
10581210299Sed/* vec_stvehx */
10582210299Sed
10583309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvehx(vector short __a, int __b,
10584309124Sdim                                               short *__c) {
10585249423Sdim  __builtin_altivec_stvehx(__a, __b, __c);
10586210299Sed}
10587210299Sed
10588309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvehx(vector unsigned short __a,
10589309124Sdim                                               int __b, unsigned short *__c) {
10590249423Sdim  __builtin_altivec_stvehx((vector short)__a, __b, __c);
10591210299Sed}
10592210299Sed
10593309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, int __b,
10594309124Sdim                                               short *__c) {
10595249423Sdim  __builtin_altivec_stvehx((vector short)__a, __b, __c);
10596212904Sdim}
10597212904Sdim
10598309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, int __b,
10599309124Sdim                                               unsigned short *__c) {
10600249423Sdim  __builtin_altivec_stvehx((vector short)__a, __b, __c);
10601212904Sdim}
10602212904Sdim
10603309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, int __b,
10604309124Sdim                                               short *__c) {
10605249423Sdim  __builtin_altivec_stvehx((vector short)__a, __b, __c);
10606212904Sdim}
10607212904Sdim
10608309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, int __b,
10609309124Sdim                                               unsigned short *__c) {
10610249423Sdim  __builtin_altivec_stvehx((vector short)__a, __b, __c);
10611212904Sdim}
10612212904Sdim
10613210299Sed/* vec_stvewx */
10614210299Sed
10615309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvewx(vector int __a, int __b,
10616309124Sdim                                               int *__c) {
10617249423Sdim  __builtin_altivec_stvewx(__a, __b, __c);
10618210299Sed}
10619210299Sed
10620309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvewx(vector unsigned int __a, int __b,
10621309124Sdim                                               unsigned int *__c) {
10622249423Sdim  __builtin_altivec_stvewx((vector int)__a, __b, __c);
10623210299Sed}
10624210299Sed
10625309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, int __b,
10626309124Sdim                                               int *__c) {
10627249423Sdim  __builtin_altivec_stvewx((vector int)__a, __b, __c);
10628212904Sdim}
10629212904Sdim
10630309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, int __b,
10631309124Sdim                                               unsigned int *__c) {
10632249423Sdim  __builtin_altivec_stvewx((vector int)__a, __b, __c);
10633212904Sdim}
10634212904Sdim
10635309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvewx(vector float __a, int __b,
10636309124Sdim                                               float *__c) {
10637249423Sdim  __builtin_altivec_stvewx((vector int)__a, __b, __c);
10638210299Sed}
10639210299Sed
10640210299Sed/* vec_stl */
10641210299Sed
10642309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
10643309124Sdim                                            vector signed char *__c) {
10644249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10645210299Sed}
10646210299Sed
10647309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
10648309124Sdim                                            signed char *__c) {
10649249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10650210299Sed}
10651210299Sed
10652309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
10653309124Sdim                                            vector unsigned char *__c) {
10654249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10655210299Sed}
10656210299Sed
10657309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
10658309124Sdim                                            unsigned char *__c) {
10659249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10660210299Sed}
10661210299Sed
10662309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
10663309124Sdim                                            signed char *__c) {
10664249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10665212904Sdim}
10666212904Sdim
10667309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
10668309124Sdim                                            unsigned char *__c) {
10669249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10670212904Sdim}
10671212904Sdim
10672309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
10673309124Sdim                                            vector bool char *__c) {
10674249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10675212904Sdim}
10676212904Sdim
10677309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
10678309124Sdim                                            vector short *__c) {
10679249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10680210299Sed}
10681210299Sed
10682309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
10683309124Sdim                                            short *__c) {
10684249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10685210299Sed}
10686210299Sed
10687309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
10688309124Sdim                                            vector unsigned short *__c) {
10689249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10690210299Sed}
10691210299Sed
10692309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
10693309124Sdim                                            unsigned short *__c) {
10694249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10695210299Sed}
10696210299Sed
10697309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
10698309124Sdim                                            short *__c) {
10699249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10700212904Sdim}
10701212904Sdim
10702309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
10703309124Sdim                                            unsigned short *__c) {
10704249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10705212904Sdim}
10706212904Sdim
10707309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
10708309124Sdim                                            vector bool short *__c) {
10709249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10710212904Sdim}
10711212904Sdim
10712309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
10713309124Sdim                                            short *__c) {
10714249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10715212904Sdim}
10716212904Sdim
10717309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
10718309124Sdim                                            unsigned short *__c) {
10719249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10720212904Sdim}
10721212904Sdim
10722309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
10723309124Sdim                                            vector pixel *__c) {
10724249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10725212904Sdim}
10726212904Sdim
10727309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b,
10728309124Sdim                                            vector int *__c) {
10729249423Sdim  __builtin_altivec_stvxl(__a, __b, __c);
10730210299Sed}
10731210299Sed
10732309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b, int *__c) {
10733249423Sdim  __builtin_altivec_stvxl(__a, __b, __c);
10734210299Sed}
10735210299Sed
10736309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
10737309124Sdim                                            vector unsigned int *__c) {
10738249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10739210299Sed}
10740210299Sed
10741309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
10742309124Sdim                                            unsigned int *__c) {
10743249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10744210299Sed}
10745210299Sed
10746309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
10747309124Sdim                                            int *__c) {
10748249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10749212904Sdim}
10750212904Sdim
10751309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
10752309124Sdim                                            unsigned int *__c) {
10753249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10754212904Sdim}
10755212904Sdim
10756309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
10757309124Sdim                                            vector bool int *__c) {
10758249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10759212904Sdim}
10760212904Sdim
10761309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
10762309124Sdim                                            vector float *__c) {
10763249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10764210299Sed}
10765210299Sed
10766309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
10767309124Sdim                                            float *__c) {
10768249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10769210299Sed}
10770210299Sed
10771210299Sed/* vec_stvxl */
10772210299Sed
10773309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
10774309124Sdim                                              vector signed char *__c) {
10775249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10776210299Sed}
10777210299Sed
10778309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
10779309124Sdim                                              signed char *__c) {
10780249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10781210299Sed}
10782210299Sed
10783309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
10784309124Sdim                                              vector unsigned char *__c) {
10785249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10786210299Sed}
10787210299Sed
10788309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
10789309124Sdim                                              unsigned char *__c) {
10790249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10791210299Sed}
10792210299Sed
10793309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
10794309124Sdim                                              signed char *__c) {
10795249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10796212904Sdim}
10797212904Sdim
10798309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
10799309124Sdim                                              unsigned char *__c) {
10800249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10801212904Sdim}
10802212904Sdim
10803309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
10804309124Sdim                                              vector bool char *__c) {
10805249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10806212904Sdim}
10807212904Sdim
10808309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
10809309124Sdim                                              vector short *__c) {
10810249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10811210299Sed}
10812210299Sed
10813309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
10814309124Sdim                                              short *__c) {
10815249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10816210299Sed}
10817210299Sed
10818309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
10819309124Sdim                                              int __b,
10820309124Sdim                                              vector unsigned short *__c) {
10821249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10822210299Sed}
10823210299Sed
10824309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
10825309124Sdim                                              int __b, unsigned short *__c) {
10826249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10827210299Sed}
10828210299Sed
10829309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
10830309124Sdim                                              short *__c) {
10831249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10832212904Sdim}
10833212904Sdim
10834309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
10835309124Sdim                                              unsigned short *__c) {
10836249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10837212904Sdim}
10838212904Sdim
10839309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
10840309124Sdim                                              vector bool short *__c) {
10841249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10842212904Sdim}
10843212904Sdim
10844309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
10845309124Sdim                                              short *__c) {
10846249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10847212904Sdim}
10848212904Sdim
10849309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
10850309124Sdim                                              unsigned short *__c) {
10851249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10852212904Sdim}
10853212904Sdim
10854309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
10855309124Sdim                                              vector pixel *__c) {
10856249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10857212904Sdim}
10858212904Sdim
10859309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
10860309124Sdim                                              vector int *__c) {
10861249423Sdim  __builtin_altivec_stvxl(__a, __b, __c);
10862210299Sed}
10863210299Sed
10864309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
10865309124Sdim                                              int *__c) {
10866249423Sdim  __builtin_altivec_stvxl(__a, __b, __c);
10867210299Sed}
10868210299Sed
10869309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
10870309124Sdim                                              vector unsigned int *__c) {
10871249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10872210299Sed}
10873210299Sed
10874309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
10875309124Sdim                                              unsigned int *__c) {
10876249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10877210299Sed}
10878210299Sed
10879309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
10880309124Sdim                                              int *__c) {
10881249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10882212904Sdim}
10883212904Sdim
10884309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
10885309124Sdim                                              unsigned int *__c) {
10886249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10887212904Sdim}
10888212904Sdim
10889309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
10890309124Sdim                                              vector bool int *__c) {
10891249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10892212904Sdim}
10893212904Sdim
10894309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
10895309124Sdim                                              vector float *__c) {
10896249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10897210299Sed}
10898210299Sed
10899309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
10900309124Sdim                                              float *__c) {
10901249423Sdim  __builtin_altivec_stvxl((vector int)__a, __b, __c);
10902210299Sed}
10903210299Sed
10904210299Sed/* vec_sub */
10905210299Sed
10906309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
10907309124Sdimvec_sub(vector signed char __a, vector signed char __b) {
10908249423Sdim  return __a - __b;
10909210299Sed}
10910210299Sed
10911309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
10912309124Sdimvec_sub(vector bool char __a, vector signed char __b) {
10913249423Sdim  return (vector signed char)__a - __b;
10914212904Sdim}
10915212904Sdim
10916309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
10917309124Sdimvec_sub(vector signed char __a, vector bool char __b) {
10918249423Sdim  return __a - (vector signed char)__b;
10919212904Sdim}
10920212904Sdim
10921309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
10922309124Sdimvec_sub(vector unsigned char __a, vector unsigned char __b) {
10923249423Sdim  return __a - __b;
10924210299Sed}
10925210299Sed
10926309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
10927309124Sdimvec_sub(vector bool char __a, vector unsigned char __b) {
10928249423Sdim  return (vector unsigned char)__a - __b;
10929212904Sdim}
10930212904Sdim
10931309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
10932309124Sdimvec_sub(vector unsigned char __a, vector bool char __b) {
10933249423Sdim  return __a - (vector unsigned char)__b;
10934212904Sdim}
10935212904Sdim
10936309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
10937309124Sdim                                                    vector short __b) {
10938249423Sdim  return __a - __b;
10939210299Sed}
10940210299Sed
10941309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_sub(vector bool short __a,
10942309124Sdim                                                    vector short __b) {
10943249423Sdim  return (vector short)__a - __b;
10944212904Sdim}
10945212904Sdim
10946309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
10947309124Sdim                                                    vector bool short __b) {
10948249423Sdim  return __a - (vector short)__b;
10949212904Sdim}
10950212904Sdim
10951309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
10952309124Sdimvec_sub(vector unsigned short __a, vector unsigned short __b) {
10953249423Sdim  return __a - __b;
10954210299Sed}
10955210299Sed
10956309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
10957309124Sdimvec_sub(vector bool short __a, vector unsigned short __b) {
10958249423Sdim  return (vector unsigned short)__a - __b;
10959212904Sdim}
10960212904Sdim
10961309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
10962309124Sdimvec_sub(vector unsigned short __a, vector bool short __b) {
10963249423Sdim  return __a - (vector unsigned short)__b;
10964212904Sdim}
10965212904Sdim
10966309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
10967309124Sdim                                                  vector int __b) {
10968249423Sdim  return __a - __b;
10969210299Sed}
10970210299Sed
10971309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sub(vector bool int __a,
10972309124Sdim                                                  vector int __b) {
10973249423Sdim  return (vector int)__a - __b;
10974212904Sdim}
10975212904Sdim
10976309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
10977309124Sdim                                                  vector bool int __b) {
10978249423Sdim  return __a - (vector int)__b;
10979212904Sdim}
10980212904Sdim
10981309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
10982309124Sdimvec_sub(vector unsigned int __a, vector unsigned int __b) {
10983249423Sdim  return __a - __b;
10984210299Sed}
10985210299Sed
10986309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
10987309124Sdimvec_sub(vector bool int __a, vector unsigned int __b) {
10988249423Sdim  return (vector unsigned int)__a - __b;
10989212904Sdim}
10990212904Sdim
10991309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
10992309124Sdimvec_sub(vector unsigned int __a, vector bool int __b) {
10993249423Sdim  return __a - (vector unsigned int)__b;
10994212904Sdim}
10995212904Sdim
10996288943Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
10997309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
10998309124Sdimvec_sub(vector signed __int128 __a, vector signed __int128 __b) {
10999249423Sdim  return __a - __b;
11000210299Sed}
11001210299Sed
11002309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
11003288943Sdimvec_sub(vector unsigned __int128 __a, vector unsigned __int128 __b) {
11004288943Sdim  return __a - __b;
11005288943Sdim}
11006288943Sdim#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
11007288943Sdim
11008296417Sdim#ifdef __VSX__
11009309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
11010296417Sdimvec_sub(vector signed long long __a, vector signed long long __b) {
11011288943Sdim  return __a - __b;
11012288943Sdim}
11013288943Sdim
11014309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
11015296417Sdimvec_sub(vector unsigned long long __a, vector unsigned long long __b) {
11016296417Sdim  return __a - __b;
11017296417Sdim}
11018296417Sdim
11019309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_sub(vector double __a,
11020309124Sdim                                                     vector double __b) {
11021288943Sdim  return __a - __b;
11022288943Sdim}
11023288943Sdim#endif
11024288943Sdim
11025309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_sub(vector float __a,
11026309124Sdim                                                    vector float __b) {
11027296417Sdim  return __a - __b;
11028296417Sdim}
11029296417Sdim
11030210299Sed/* vec_vsububm */
11031210299Sed
11032210299Sed#define __builtin_altivec_vsububm vec_vsububm
11033210299Sed
11034309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
11035309124Sdimvec_vsububm(vector signed char __a, vector signed char __b) {
11036249423Sdim  return __a - __b;
11037210299Sed}
11038210299Sed
11039309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
11040309124Sdimvec_vsububm(vector bool char __a, vector signed char __b) {
11041249423Sdim  return (vector signed char)__a - __b;
11042212904Sdim}
11043212904Sdim
11044309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
11045309124Sdimvec_vsububm(vector signed char __a, vector bool char __b) {
11046249423Sdim  return __a - (vector signed char)__b;
11047212904Sdim}
11048212904Sdim
11049309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
11050309124Sdimvec_vsububm(vector unsigned char __a, vector unsigned char __b) {
11051249423Sdim  return __a - __b;
11052210299Sed}
11053210299Sed
11054309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
11055309124Sdimvec_vsububm(vector bool char __a, vector unsigned char __b) {
11056249423Sdim  return (vector unsigned char)__a - __b;
11057212904Sdim}
11058212904Sdim
11059309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
11060309124Sdimvec_vsububm(vector unsigned char __a, vector bool char __b) {
11061249423Sdim  return __a - (vector unsigned char)__b;
11062212904Sdim}
11063212904Sdim
11064210299Sed/* vec_vsubuhm */
11065210299Sed
11066210299Sed#define __builtin_altivec_vsubuhm vec_vsubuhm
11067210299Sed
11068309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
11069309124Sdim                                                        vector short __b) {
11070249423Sdim  return __a - __b;
11071210299Sed}
11072210299Sed
11073309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector bool short __a,
11074309124Sdim                                                        vector short __b) {
11075249423Sdim  return (vector short)__a - __b;
11076212904Sdim}
11077212904Sdim
11078309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
11079309124Sdim                                                        vector bool short __b) {
11080249423Sdim  return __a - (vector short)__b;
11081212904Sdim}
11082212904Sdim
11083309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
11084288943Sdimvec_vsubuhm(vector unsigned short __a, vector unsigned short __b) {
11085249423Sdim  return __a - __b;
11086210299Sed}
11087210299Sed
11088309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
11089288943Sdimvec_vsubuhm(vector bool short __a, vector unsigned short __b) {
11090249423Sdim  return (vector unsigned short)__a - __b;
11091212904Sdim}
11092212904Sdim
11093309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
11094309124Sdimvec_vsubuhm(vector unsigned short __a, vector bool short __b) {
11095249423Sdim  return __a - (vector unsigned short)__b;
11096212904Sdim}
11097212904Sdim
11098210299Sed/* vec_vsubuwm */
11099210299Sed
11100210299Sed#define __builtin_altivec_vsubuwm vec_vsubuwm
11101210299Sed
11102309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
11103309124Sdim                                                      vector int __b) {
11104249423Sdim  return __a - __b;
11105210299Sed}
11106210299Sed
11107309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector bool int __a,
11108309124Sdim                                                      vector int __b) {
11109249423Sdim  return (vector int)__a - __b;
11110212904Sdim}
11111212904Sdim
11112309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
11113309124Sdim                                                      vector bool int __b) {
11114249423Sdim  return __a - (vector int)__b;
11115212904Sdim}
11116212904Sdim
11117309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11118309124Sdimvec_vsubuwm(vector unsigned int __a, vector unsigned int __b) {
11119249423Sdim  return __a - __b;
11120210299Sed}
11121210299Sed
11122309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11123309124Sdimvec_vsubuwm(vector bool int __a, vector unsigned int __b) {
11124249423Sdim  return (vector unsigned int)__a - __b;
11125212904Sdim}
11126212904Sdim
11127309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11128309124Sdimvec_vsubuwm(vector unsigned int __a, vector bool int __b) {
11129249423Sdim  return __a - (vector unsigned int)__b;
11130212904Sdim}
11131212904Sdim
11132210299Sed/* vec_vsubfp */
11133210299Sed
11134210299Sed#define __builtin_altivec_vsubfp vec_vsubfp
11135210299Sed
11136309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
11137288943Sdimvec_vsubfp(vector float __a, vector float __b) {
11138249423Sdim  return __a - __b;
11139210299Sed}
11140210299Sed
11141210299Sed/* vec_subc */
11142210299Sed
11143314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
11144314564Sdimvec_subc(vector signed int __a, vector signed int __b) {
11145314564Sdim  return (vector signed int)__builtin_altivec_vsubcuw((vector unsigned int)__a,
11146314564Sdim                                                      (vector unsigned int) __b);
11147314564Sdim}
11148314564Sdim
11149309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11150309124Sdimvec_subc(vector unsigned int __a, vector unsigned int __b) {
11151249423Sdim  return __builtin_altivec_vsubcuw(__a, __b);
11152210299Sed}
11153210299Sed
11154288943Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
11155309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
11156288943Sdimvec_subc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
11157288943Sdim  return __builtin_altivec_vsubcuq(__a, __b);
11158288943Sdim}
11159288943Sdim
11160309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
11161288943Sdimvec_subc(vector signed __int128 __a, vector signed __int128 __b) {
11162288943Sdim  return __builtin_altivec_vsubcuq(__a, __b);
11163288943Sdim}
11164288943Sdim#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
11165288943Sdim
11166210299Sed/* vec_vsubcuw */
11167210299Sed
11168309124Sdimstatic __inline__ vector unsigned int __attribute__((__always_inline__))
11169288943Sdimvec_vsubcuw(vector unsigned int __a, vector unsigned int __b) {
11170249423Sdim  return __builtin_altivec_vsubcuw(__a, __b);
11171210299Sed}
11172210299Sed
11173210299Sed/* vec_subs */
11174210299Sed
11175309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
11176309124Sdimvec_subs(vector signed char __a, vector signed char __b) {
11177249423Sdim  return __builtin_altivec_vsubsbs(__a, __b);
11178210299Sed}
11179210299Sed
11180309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
11181309124Sdimvec_subs(vector bool char __a, vector signed char __b) {
11182249423Sdim  return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
11183212904Sdim}
11184212904Sdim
11185309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
11186309124Sdimvec_subs(vector signed char __a, vector bool char __b) {
11187249423Sdim  return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
11188212904Sdim}
11189212904Sdim
11190309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
11191309124Sdimvec_subs(vector unsigned char __a, vector unsigned char __b) {
11192249423Sdim  return __builtin_altivec_vsububs(__a, __b);
11193210299Sed}
11194210299Sed
11195309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
11196309124Sdimvec_subs(vector bool char __a, vector unsigned char __b) {
11197249423Sdim  return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
11198212904Sdim}
11199212904Sdim
11200309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
11201309124Sdimvec_subs(vector unsigned char __a, vector bool char __b) {
11202249423Sdim  return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
11203212904Sdim}
11204212904Sdim
11205309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
11206309124Sdim                                                     vector short __b) {
11207249423Sdim  return __builtin_altivec_vsubshs(__a, __b);
11208210299Sed}
11209210299Sed
11210309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_subs(vector bool short __a,
11211309124Sdim                                                     vector short __b) {
11212249423Sdim  return __builtin_altivec_vsubshs((vector short)__a, __b);
11213212904Sdim}
11214212904Sdim
11215309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
11216309124Sdim                                                     vector bool short __b) {
11217249423Sdim  return __builtin_altivec_vsubshs(__a, (vector short)__b);
11218212904Sdim}
11219212904Sdim
11220309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
11221309124Sdimvec_subs(vector unsigned short __a, vector unsigned short __b) {
11222249423Sdim  return __builtin_altivec_vsubuhs(__a, __b);
11223210299Sed}
11224210299Sed
11225309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
11226309124Sdimvec_subs(vector bool short __a, vector unsigned short __b) {
11227249423Sdim  return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
11228212904Sdim}
11229212904Sdim
11230309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
11231309124Sdimvec_subs(vector unsigned short __a, vector bool short __b) {
11232249423Sdim  return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
11233212904Sdim}
11234212904Sdim
11235309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
11236309124Sdim                                                   vector int __b) {
11237249423Sdim  return __builtin_altivec_vsubsws(__a, __b);
11238210299Sed}
11239210299Sed
11240309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_subs(vector bool int __a,
11241309124Sdim                                                   vector int __b) {
11242249423Sdim  return __builtin_altivec_vsubsws((vector int)__a, __b);
11243212904Sdim}
11244212904Sdim
11245309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
11246309124Sdim                                                   vector bool int __b) {
11247249423Sdim  return __builtin_altivec_vsubsws(__a, (vector int)__b);
11248212904Sdim}
11249212904Sdim
11250309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11251309124Sdimvec_subs(vector unsigned int __a, vector unsigned int __b) {
11252249423Sdim  return __builtin_altivec_vsubuws(__a, __b);
11253210299Sed}
11254210299Sed
11255309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11256309124Sdimvec_subs(vector bool int __a, vector unsigned int __b) {
11257249423Sdim  return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
11258212904Sdim}
11259212904Sdim
11260309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11261309124Sdimvec_subs(vector unsigned int __a, vector bool int __b) {
11262249423Sdim  return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
11263212904Sdim}
11264212904Sdim
11265210299Sed/* vec_vsubsbs */
11266210299Sed
11267309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
11268309124Sdimvec_vsubsbs(vector signed char __a, vector signed char __b) {
11269249423Sdim  return __builtin_altivec_vsubsbs(__a, __b);
11270210299Sed}
11271210299Sed
11272309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
11273309124Sdimvec_vsubsbs(vector bool char __a, vector signed char __b) {
11274249423Sdim  return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
11275212904Sdim}
11276212904Sdim
11277309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
11278309124Sdimvec_vsubsbs(vector signed char __a, vector bool char __b) {
11279249423Sdim  return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
11280212904Sdim}
11281212904Sdim
11282210299Sed/* vec_vsububs */
11283210299Sed
11284309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
11285309124Sdimvec_vsububs(vector unsigned char __a, vector unsigned char __b) {
11286249423Sdim  return __builtin_altivec_vsububs(__a, __b);
11287210299Sed}
11288210299Sed
11289309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
11290309124Sdimvec_vsububs(vector bool char __a, vector unsigned char __b) {
11291249423Sdim  return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
11292212904Sdim}
11293212904Sdim
11294309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
11295309124Sdimvec_vsububs(vector unsigned char __a, vector bool char __b) {
11296249423Sdim  return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
11297212904Sdim}
11298212904Sdim
11299210299Sed/* vec_vsubshs */
11300210299Sed
11301309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
11302309124Sdim                                                        vector short __b) {
11303249423Sdim  return __builtin_altivec_vsubshs(__a, __b);
11304210299Sed}
11305210299Sed
11306309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector bool short __a,
11307309124Sdim                                                        vector short __b) {
11308249423Sdim  return __builtin_altivec_vsubshs((vector short)__a, __b);
11309212904Sdim}
11310212904Sdim
11311309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
11312309124Sdim                                                        vector bool short __b) {
11313249423Sdim  return __builtin_altivec_vsubshs(__a, (vector short)__b);
11314212904Sdim}
11315212904Sdim
11316210299Sed/* vec_vsubuhs */
11317210299Sed
11318309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
11319288943Sdimvec_vsubuhs(vector unsigned short __a, vector unsigned short __b) {
11320249423Sdim  return __builtin_altivec_vsubuhs(__a, __b);
11321210299Sed}
11322210299Sed
11323309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
11324288943Sdimvec_vsubuhs(vector bool short __a, vector unsigned short __b) {
11325249423Sdim  return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
11326212904Sdim}
11327212904Sdim
11328309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
11329309124Sdimvec_vsubuhs(vector unsigned short __a, vector bool short __b) {
11330249423Sdim  return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
11331212904Sdim}
11332212904Sdim
11333210299Sed/* vec_vsubsws */
11334210299Sed
11335309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
11336309124Sdim                                                      vector int __b) {
11337249423Sdim  return __builtin_altivec_vsubsws(__a, __b);
11338210299Sed}
11339210299Sed
11340309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector bool int __a,
11341309124Sdim                                                      vector int __b) {
11342249423Sdim  return __builtin_altivec_vsubsws((vector int)__a, __b);
11343212904Sdim}
11344212904Sdim
11345309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
11346309124Sdim                                                      vector bool int __b) {
11347249423Sdim  return __builtin_altivec_vsubsws(__a, (vector int)__b);
11348212904Sdim}
11349212904Sdim
11350210299Sed/* vec_vsubuws */
11351210299Sed
11352309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11353309124Sdimvec_vsubuws(vector unsigned int __a, vector unsigned int __b) {
11354249423Sdim  return __builtin_altivec_vsubuws(__a, __b);
11355210299Sed}
11356210299Sed
11357309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11358309124Sdimvec_vsubuws(vector bool int __a, vector unsigned int __b) {
11359249423Sdim  return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
11360212904Sdim}
11361212904Sdim
11362309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11363309124Sdimvec_vsubuws(vector unsigned int __a, vector bool int __b) {
11364249423Sdim  return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
11365212904Sdim}
11366212904Sdim
11367288943Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
11368288943Sdim/* vec_vsubuqm */
11369288943Sdim
11370309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
11371288943Sdimvec_vsubuqm(vector signed __int128 __a, vector signed __int128 __b) {
11372288943Sdim  return __a - __b;
11373288943Sdim}
11374288943Sdim
11375309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
11376288943Sdimvec_vsubuqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
11377288943Sdim  return __a - __b;
11378288943Sdim}
11379288943Sdim
11380288943Sdim/* vec_vsubeuqm */
11381288943Sdim
11382314564Sdim
11383309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
11384288943Sdimvec_vsubeuqm(vector signed __int128 __a, vector signed __int128 __b,
11385288943Sdim             vector signed __int128 __c) {
11386288943Sdim  return __builtin_altivec_vsubeuqm(__a, __b, __c);
11387288943Sdim}
11388288943Sdim
11389309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
11390288943Sdimvec_vsubeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
11391288943Sdim             vector unsigned __int128 __c) {
11392288943Sdim  return __builtin_altivec_vsubeuqm(__a, __b, __c);
11393288943Sdim}
11394288943Sdim
11395314564Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
11396314564Sdimvec_sube(vector signed __int128 __a, vector signed __int128 __b,
11397314564Sdim             vector signed __int128 __c) {
11398314564Sdim  return __builtin_altivec_vsubeuqm(__a, __b, __c);
11399314564Sdim}
11400314564Sdim
11401314564Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
11402314564Sdimvec_sube(vector unsigned __int128 __a, vector unsigned __int128 __b,
11403314564Sdim             vector unsigned __int128 __c) {
11404314564Sdim  return __builtin_altivec_vsubeuqm(__a, __b, __c);
11405314564Sdim}
11406314564Sdim
11407288943Sdim/* vec_vsubcuq */
11408288943Sdim
11409309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
11410288943Sdimvec_vsubcuq(vector signed __int128 __a, vector signed __int128 __b) {
11411288943Sdim  return __builtin_altivec_vsubcuq(__a, __b);
11412288943Sdim}
11413288943Sdim
11414309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
11415288943Sdimvec_vsubcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
11416288943Sdim  return __builtin_altivec_vsubcuq(__a, __b);
11417288943Sdim}
11418288943Sdim
11419288943Sdim/* vec_vsubecuq */
11420288943Sdim
11421309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
11422288943Sdimvec_vsubecuq(vector signed __int128 __a, vector signed __int128 __b,
11423288943Sdim             vector signed __int128 __c) {
11424288943Sdim  return __builtin_altivec_vsubecuq(__a, __b, __c);
11425288943Sdim}
11426288943Sdim
11427309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
11428288943Sdimvec_vsubecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
11429288943Sdim             vector unsigned __int128 __c) {
11430288943Sdim  return __builtin_altivec_vsubecuq(__a, __b, __c);
11431288943Sdim}
11432314564Sdim
11433314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
11434314564Sdimvec_subec(vector signed int __a, vector signed int __b,
11435314564Sdim             vector signed int __c) {
11436314564Sdim  return vec_addec(__a, ~__b, __c);
11437314564Sdim}
11438314564Sdim
11439314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11440314564Sdimvec_subec(vector unsigned int __a, vector unsigned int __b,
11441314564Sdim             vector unsigned int __c) {
11442314564Sdim  return vec_addec(__a, ~__b, __c);
11443314564Sdim}
11444314564Sdim
11445314564Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
11446314564Sdimvec_subec(vector signed __int128 __a, vector signed __int128 __b,
11447314564Sdim             vector signed __int128 __c) {
11448314564Sdim  return __builtin_altivec_vsubecuq(__a, __b, __c);
11449314564Sdim}
11450314564Sdim
11451314564Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
11452314564Sdimvec_subec(vector unsigned __int128 __a, vector unsigned __int128 __b,
11453314564Sdim             vector unsigned __int128 __c) {
11454314564Sdim  return __builtin_altivec_vsubecuq(__a, __b, __c);
11455314564Sdim}
11456288943Sdim#endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
11457288943Sdim
11458314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
11459314564Sdimvec_sube(vector signed int __a, vector signed int __b,
11460314564Sdim         vector signed int __c) {
11461314564Sdim  vector signed int __mask = {1, 1, 1, 1};
11462314564Sdim  vector signed int __carry = __c & __mask;
11463314564Sdim  return vec_adde(__a, ~__b, __carry);
11464314564Sdim}
11465314564Sdim
11466314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11467314564Sdimvec_sube(vector unsigned int __a, vector unsigned int __b,
11468314564Sdim         vector unsigned int __c) {
11469314564Sdim  vector unsigned int __mask = {1, 1, 1, 1};
11470314564Sdim  vector unsigned int __carry = __c & __mask;
11471314564Sdim  return vec_adde(__a, ~__b, __carry);
11472314564Sdim}
11473210299Sed/* vec_sum4s */
11474210299Sed
11475309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed char __a,
11476309124Sdim                                                    vector int __b) {
11477249423Sdim  return __builtin_altivec_vsum4sbs(__a, __b);
11478210299Sed}
11479210299Sed
11480309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11481309124Sdimvec_sum4s(vector unsigned char __a, vector unsigned int __b) {
11482249423Sdim  return __builtin_altivec_vsum4ubs(__a, __b);
11483210299Sed}
11484210299Sed
11485309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed short __a,
11486309124Sdim                                                    vector int __b) {
11487249423Sdim  return __builtin_altivec_vsum4shs(__a, __b);
11488210299Sed}
11489210299Sed
11490210299Sed/* vec_vsum4sbs */
11491210299Sed
11492309124Sdimstatic __inline__ vector int __attribute__((__always_inline__))
11493288943Sdimvec_vsum4sbs(vector signed char __a, vector int __b) {
11494249423Sdim  return __builtin_altivec_vsum4sbs(__a, __b);
11495210299Sed}
11496210299Sed
11497210299Sed/* vec_vsum4ubs */
11498210299Sed
11499309124Sdimstatic __inline__ vector unsigned int __attribute__((__always_inline__))
11500288943Sdimvec_vsum4ubs(vector unsigned char __a, vector unsigned int __b) {
11501249423Sdim  return __builtin_altivec_vsum4ubs(__a, __b);
11502210299Sed}
11503210299Sed
11504210299Sed/* vec_vsum4shs */
11505210299Sed
11506309124Sdimstatic __inline__ vector int __attribute__((__always_inline__))
11507288943Sdimvec_vsum4shs(vector signed short __a, vector int __b) {
11508249423Sdim  return __builtin_altivec_vsum4shs(__a, __b);
11509210299Sed}
11510210299Sed
11511210299Sed/* vec_sum2s */
11512210299Sed
11513276479Sdim/* The vsum2sws instruction has a big-endian bias, so that the second
11514276479Sdim   input vector and the result always reference big-endian elements
11515276479Sdim   1 and 3 (little-endian element 0 and 2).  For ease of porting the
11516276479Sdim   programmer wants elements 1 and 3 in both cases, so for little
11517276479Sdim   endian we must perform some permutes.  */
11518276479Sdim
11519309124Sdimstatic __inline__ vector signed int __attribute__((__always_inline__))
11520288943Sdimvec_sum2s(vector int __a, vector int __b) {
11521276479Sdim#ifdef __LITTLE_ENDIAN__
11522288943Sdim  vector int __c = (vector signed int)vec_perm(
11523288943Sdim      __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
11524288943Sdim                                       8, 9, 10, 11));
11525276479Sdim  __c = __builtin_altivec_vsum2sws(__a, __c);
11526288943Sdim  return (vector signed int)vec_perm(
11527288943Sdim      __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
11528288943Sdim                                       8, 9, 10, 11));
11529276479Sdim#else
11530249423Sdim  return __builtin_altivec_vsum2sws(__a, __b);
11531276479Sdim#endif
11532210299Sed}
11533210299Sed
11534210299Sed/* vec_vsum2sws */
11535210299Sed
11536309124Sdimstatic __inline__ vector signed int __attribute__((__always_inline__))
11537288943Sdimvec_vsum2sws(vector int __a, vector int __b) {
11538276479Sdim#ifdef __LITTLE_ENDIAN__
11539288943Sdim  vector int __c = (vector signed int)vec_perm(
11540288943Sdim      __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
11541288943Sdim                                       8, 9, 10, 11));
11542276479Sdim  __c = __builtin_altivec_vsum2sws(__a, __c);
11543288943Sdim  return (vector signed int)vec_perm(
11544288943Sdim      __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
11545288943Sdim                                       8, 9, 10, 11));
11546276479Sdim#else
11547249423Sdim  return __builtin_altivec_vsum2sws(__a, __b);
11548276479Sdim#endif
11549210299Sed}
11550210299Sed
11551210299Sed/* vec_sums */
11552210299Sed
11553276479Sdim/* The vsumsws instruction has a big-endian bias, so that the second
11554276479Sdim   input vector and the result always reference big-endian element 3
11555276479Sdim   (little-endian element 0).  For ease of porting the programmer
11556276479Sdim   wants element 3 in both cases, so for little endian we must perform
11557276479Sdim   some permutes.  */
11558276479Sdim
11559309124Sdimstatic __inline__ vector signed int __attribute__((__always_inline__))
11560288943Sdimvec_sums(vector signed int __a, vector signed int __b) {
11561276479Sdim#ifdef __LITTLE_ENDIAN__
11562276479Sdim  __b = (vector signed int)vec_splat(__b, 3);
11563276479Sdim  __b = __builtin_altivec_vsumsws(__a, __b);
11564276479Sdim  return (vector signed int)(0, 0, 0, __b[0]);
11565276479Sdim#else
11566249423Sdim  return __builtin_altivec_vsumsws(__a, __b);
11567276479Sdim#endif
11568210299Sed}
11569210299Sed
11570210299Sed/* vec_vsumsws */
11571210299Sed
11572309124Sdimstatic __inline__ vector signed int __attribute__((__always_inline__))
11573288943Sdimvec_vsumsws(vector signed int __a, vector signed int __b) {
11574276479Sdim#ifdef __LITTLE_ENDIAN__
11575276479Sdim  __b = (vector signed int)vec_splat(__b, 3);
11576276479Sdim  __b = __builtin_altivec_vsumsws(__a, __b);
11577276479Sdim  return (vector signed int)(0, 0, 0, __b[0]);
11578276479Sdim#else
11579249423Sdim  return __builtin_altivec_vsumsws(__a, __b);
11580276479Sdim#endif
11581210299Sed}
11582210299Sed
11583210299Sed/* vec_trunc */
11584210299Sed
11585309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_trunc(vector float __a) {
11586288943Sdim#ifdef __VSX__
11587288943Sdim  return __builtin_vsx_xvrspiz(__a);
11588288943Sdim#else
11589249423Sdim  return __builtin_altivec_vrfiz(__a);
11590288943Sdim#endif
11591210299Sed}
11592210299Sed
11593288943Sdim#ifdef __VSX__
11594309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_trunc(vector double __a) {
11595288943Sdim  return __builtin_vsx_xvrdpiz(__a);
11596288943Sdim}
11597288943Sdim#endif
11598288943Sdim
11599210299Sed/* vec_vrfiz */
11600210299Sed
11601309124Sdimstatic __inline__ vector float __attribute__((__always_inline__))
11602288943Sdimvec_vrfiz(vector float __a) {
11603249423Sdim  return __builtin_altivec_vrfiz(__a);
11604210299Sed}
11605210299Sed
11606210299Sed/* vec_unpackh */
11607210299Sed
11608276479Sdim/* The vector unpack instructions all have a big-endian bias, so for
11609276479Sdim   little endian we must reverse the meanings of "high" and "low."  */
11610276479Sdim
11611309124Sdimstatic __inline__ vector short __ATTRS_o_ai
11612309124Sdimvec_unpackh(vector signed char __a) {
11613276479Sdim#ifdef __LITTLE_ENDIAN__
11614276479Sdim  return __builtin_altivec_vupklsb((vector char)__a);
11615276479Sdim#else
11616249423Sdim  return __builtin_altivec_vupkhsb((vector char)__a);
11617276479Sdim#endif
11618210299Sed}
11619210299Sed
11620309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
11621309124Sdimvec_unpackh(vector bool char __a) {
11622276479Sdim#ifdef __LITTLE_ENDIAN__
11623276479Sdim  return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
11624276479Sdim#else
11625249423Sdim  return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
11626276479Sdim#endif
11627212904Sdim}
11628212904Sdim
11629309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_unpackh(vector short __a) {
11630276479Sdim#ifdef __LITTLE_ENDIAN__
11631276479Sdim  return __builtin_altivec_vupklsh(__a);
11632276479Sdim#else
11633249423Sdim  return __builtin_altivec_vupkhsh(__a);
11634276479Sdim#endif
11635210299Sed}
11636210299Sed
11637309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
11638309124Sdimvec_unpackh(vector bool short __a) {
11639276479Sdim#ifdef __LITTLE_ENDIAN__
11640276479Sdim  return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
11641276479Sdim#else
11642249423Sdim  return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
11643276479Sdim#endif
11644212904Sdim}
11645212904Sdim
11646309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11647309124Sdimvec_unpackh(vector pixel __a) {
11648276479Sdim#ifdef __LITTLE_ENDIAN__
11649276479Sdim  return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
11650276479Sdim#else
11651276479Sdim  return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
11652276479Sdim#endif
11653212904Sdim}
11654212904Sdim
11655288943Sdim#ifdef __POWER8_VECTOR__
11656309124Sdimstatic __inline__ vector long long __ATTRS_o_ai vec_unpackh(vector int __a) {
11657288943Sdim#ifdef __LITTLE_ENDIAN__
11658288943Sdim  return __builtin_altivec_vupklsw(__a);
11659288943Sdim#else
11660288943Sdim  return __builtin_altivec_vupkhsw(__a);
11661288943Sdim#endif
11662288943Sdim}
11663288943Sdim
11664309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
11665309124Sdimvec_unpackh(vector bool int __a) {
11666288943Sdim#ifdef __LITTLE_ENDIAN__
11667288943Sdim  return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
11668288943Sdim#else
11669288943Sdim  return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
11670288943Sdim#endif
11671288943Sdim}
11672314564Sdim
11673314564Sdimstatic __inline__ vector double __ATTRS_o_ai
11674314564Sdimvec_unpackh(vector float __a) {
11675314564Sdim  return (vector double)(__a[0], __a[1]);
11676314564Sdim}
11677288943Sdim#endif
11678288943Sdim
11679210299Sed/* vec_vupkhsb */
11680210299Sed
11681309124Sdimstatic __inline__ vector short __ATTRS_o_ai
11682309124Sdimvec_vupkhsb(vector signed char __a) {
11683276479Sdim#ifdef __LITTLE_ENDIAN__
11684276479Sdim  return __builtin_altivec_vupklsb((vector char)__a);
11685276479Sdim#else
11686249423Sdim  return __builtin_altivec_vupkhsb((vector char)__a);
11687276479Sdim#endif
11688210299Sed}
11689210299Sed
11690309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
11691309124Sdimvec_vupkhsb(vector bool char __a) {
11692276479Sdim#ifdef __LITTLE_ENDIAN__
11693276479Sdim  return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
11694276479Sdim#else
11695249423Sdim  return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
11696276479Sdim#endif
11697212904Sdim}
11698212904Sdim
11699210299Sed/* vec_vupkhsh */
11700210299Sed
11701309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vupkhsh(vector short __a) {
11702276479Sdim#ifdef __LITTLE_ENDIAN__
11703276479Sdim  return __builtin_altivec_vupklsh(__a);
11704276479Sdim#else
11705249423Sdim  return __builtin_altivec_vupkhsh(__a);
11706276479Sdim#endif
11707210299Sed}
11708210299Sed
11709309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
11710309124Sdimvec_vupkhsh(vector bool short __a) {
11711276479Sdim#ifdef __LITTLE_ENDIAN__
11712276479Sdim  return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
11713276479Sdim#else
11714249423Sdim  return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
11715276479Sdim#endif
11716212904Sdim}
11717212904Sdim
11718309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11719309124Sdimvec_vupkhsh(vector pixel __a) {
11720276479Sdim#ifdef __LITTLE_ENDIAN__
11721276479Sdim  return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
11722276479Sdim#else
11723276479Sdim  return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
11724276479Sdim#endif
11725212904Sdim}
11726212904Sdim
11727288943Sdim/* vec_vupkhsw */
11728288943Sdim
11729288943Sdim#ifdef __POWER8_VECTOR__
11730309124Sdimstatic __inline__ vector long long __ATTRS_o_ai vec_vupkhsw(vector int __a) {
11731288943Sdim#ifdef __LITTLE_ENDIAN__
11732288943Sdim  return __builtin_altivec_vupklsw(__a);
11733288943Sdim#else
11734288943Sdim  return __builtin_altivec_vupkhsw(__a);
11735288943Sdim#endif
11736288943Sdim}
11737288943Sdim
11738309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
11739309124Sdimvec_vupkhsw(vector bool int __a) {
11740288943Sdim#ifdef __LITTLE_ENDIAN__
11741288943Sdim  return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
11742288943Sdim#else
11743288943Sdim  return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
11744288943Sdim#endif
11745288943Sdim}
11746288943Sdim#endif
11747288943Sdim
11748210299Sed/* vec_unpackl */
11749210299Sed
11750309124Sdimstatic __inline__ vector short __ATTRS_o_ai
11751309124Sdimvec_unpackl(vector signed char __a) {
11752276479Sdim#ifdef __LITTLE_ENDIAN__
11753276479Sdim  return __builtin_altivec_vupkhsb((vector char)__a);
11754276479Sdim#else
11755249423Sdim  return __builtin_altivec_vupklsb((vector char)__a);
11756276479Sdim#endif
11757210299Sed}
11758210299Sed
11759309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
11760309124Sdimvec_unpackl(vector bool char __a) {
11761276479Sdim#ifdef __LITTLE_ENDIAN__
11762276479Sdim  return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
11763276479Sdim#else
11764249423Sdim  return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
11765276479Sdim#endif
11766212904Sdim}
11767212904Sdim
11768309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_unpackl(vector short __a) {
11769276479Sdim#ifdef __LITTLE_ENDIAN__
11770276479Sdim  return __builtin_altivec_vupkhsh(__a);
11771276479Sdim#else
11772249423Sdim  return __builtin_altivec_vupklsh(__a);
11773276479Sdim#endif
11774210299Sed}
11775210299Sed
11776309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
11777309124Sdimvec_unpackl(vector bool short __a) {
11778276479Sdim#ifdef __LITTLE_ENDIAN__
11779276479Sdim  return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
11780276479Sdim#else
11781249423Sdim  return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
11782276479Sdim#endif
11783212904Sdim}
11784212904Sdim
11785309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11786309124Sdimvec_unpackl(vector pixel __a) {
11787276479Sdim#ifdef __LITTLE_ENDIAN__
11788276479Sdim  return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
11789276479Sdim#else
11790276479Sdim  return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
11791276479Sdim#endif
11792212904Sdim}
11793212904Sdim
11794288943Sdim#ifdef __POWER8_VECTOR__
11795309124Sdimstatic __inline__ vector long long __ATTRS_o_ai vec_unpackl(vector int __a) {
11796288943Sdim#ifdef __LITTLE_ENDIAN__
11797288943Sdim  return __builtin_altivec_vupkhsw(__a);
11798288943Sdim#else
11799288943Sdim  return __builtin_altivec_vupklsw(__a);
11800288943Sdim#endif
11801288943Sdim}
11802288943Sdim
11803309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
11804309124Sdimvec_unpackl(vector bool int __a) {
11805288943Sdim#ifdef __LITTLE_ENDIAN__
11806288943Sdim  return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
11807288943Sdim#else
11808288943Sdim  return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
11809288943Sdim#endif
11810288943Sdim}
11811314564Sdim
11812314564Sdimstatic __inline__ vector double __ATTRS_o_ai
11813314564Sdimvec_unpackl(vector float __a) {
11814314564Sdim  return (vector double)(__a[2], __a[3]);
11815314564Sdim}
11816288943Sdim#endif
11817288943Sdim
11818210299Sed/* vec_vupklsb */
11819210299Sed
11820309124Sdimstatic __inline__ vector short __ATTRS_o_ai
11821309124Sdimvec_vupklsb(vector signed char __a) {
11822276479Sdim#ifdef __LITTLE_ENDIAN__
11823276479Sdim  return __builtin_altivec_vupkhsb((vector char)__a);
11824276479Sdim#else
11825249423Sdim  return __builtin_altivec_vupklsb((vector char)__a);
11826276479Sdim#endif
11827210299Sed}
11828210299Sed
11829309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
11830309124Sdimvec_vupklsb(vector bool char __a) {
11831276479Sdim#ifdef __LITTLE_ENDIAN__
11832276479Sdim  return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
11833276479Sdim#else
11834249423Sdim  return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
11835276479Sdim#endif
11836212904Sdim}
11837212904Sdim
11838210299Sed/* vec_vupklsh */
11839210299Sed
11840309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vupklsh(vector short __a) {
11841276479Sdim#ifdef __LITTLE_ENDIAN__
11842276479Sdim  return __builtin_altivec_vupkhsh(__a);
11843276479Sdim#else
11844249423Sdim  return __builtin_altivec_vupklsh(__a);
11845276479Sdim#endif
11846210299Sed}
11847210299Sed
11848309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
11849309124Sdimvec_vupklsh(vector bool short __a) {
11850276479Sdim#ifdef __LITTLE_ENDIAN__
11851276479Sdim  return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
11852276479Sdim#else
11853249423Sdim  return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
11854276479Sdim#endif
11855212904Sdim}
11856212904Sdim
11857309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11858309124Sdimvec_vupklsh(vector pixel __a) {
11859276479Sdim#ifdef __LITTLE_ENDIAN__
11860276479Sdim  return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
11861276479Sdim#else
11862276479Sdim  return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
11863276479Sdim#endif
11864212904Sdim}
11865212904Sdim
11866288943Sdim/* vec_vupklsw */
11867288943Sdim
11868288943Sdim#ifdef __POWER8_VECTOR__
11869309124Sdimstatic __inline__ vector long long __ATTRS_o_ai vec_vupklsw(vector int __a) {
11870288943Sdim#ifdef __LITTLE_ENDIAN__
11871288943Sdim  return __builtin_altivec_vupkhsw(__a);
11872288943Sdim#else
11873288943Sdim  return __builtin_altivec_vupklsw(__a);
11874288943Sdim#endif
11875288943Sdim}
11876288943Sdim
11877309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
11878309124Sdimvec_vupklsw(vector bool int __a) {
11879288943Sdim#ifdef __LITTLE_ENDIAN__
11880288943Sdim  return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
11881288943Sdim#else
11882288943Sdim  return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
11883288943Sdim#endif
11884288943Sdim}
11885288943Sdim#endif
11886288943Sdim
11887280031Sdim/* vec_vsx_ld */
11888280031Sdim
11889280031Sdim#ifdef __VSX__
11890280031Sdim
11891309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
11892309124Sdimvec_vsx_ld(int __a, const vector bool int *__b) {
11893309124Sdim  return (vector bool int)__builtin_vsx_lxvw4x(__a, __b);
11894309124Sdim}
11895309124Sdim
11896309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
11897309124Sdimvec_vsx_ld(int __a, const vector signed int *__b) {
11898280031Sdim  return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
11899280031Sdim}
11900280031Sdim
11901309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
11902309124Sdimvec_vsx_ld(int __a, const signed int *__b) {
11903309124Sdim  return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
11904309124Sdim}
11905309124Sdim
11906309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11907288943Sdimvec_vsx_ld(int __a, const vector unsigned int *__b) {
11908280031Sdim  return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
11909280031Sdim}
11910280031Sdim
11911309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
11912309124Sdimvec_vsx_ld(int __a, const unsigned int *__b) {
11913309124Sdim  return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
11914309124Sdim}
11915309124Sdim
11916309124Sdimstatic __inline__ vector float __ATTRS_o_ai
11917309124Sdimvec_vsx_ld(int __a, const vector float *__b) {
11918280031Sdim  return (vector float)__builtin_vsx_lxvw4x(__a, __b);
11919280031Sdim}
11920280031Sdim
11921309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vsx_ld(int __a,
11922309124Sdim                                                       const float *__b) {
11923309124Sdim  return (vector float)__builtin_vsx_lxvw4x(__a, __b);
11924309124Sdim}
11925309124Sdim
11926309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
11927288943Sdimvec_vsx_ld(int __a, const vector signed long long *__b) {
11928280031Sdim  return (vector signed long long)__builtin_vsx_lxvd2x(__a, __b);
11929280031Sdim}
11930280031Sdim
11931309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
11932288943Sdimvec_vsx_ld(int __a, const vector unsigned long long *__b) {
11933280031Sdim  return (vector unsigned long long)__builtin_vsx_lxvd2x(__a, __b);
11934280031Sdim}
11935280031Sdim
11936309124Sdimstatic __inline__ vector double __ATTRS_o_ai
11937309124Sdimvec_vsx_ld(int __a, const vector double *__b) {
11938280031Sdim  return (vector double)__builtin_vsx_lxvd2x(__a, __b);
11939280031Sdim}
11940280031Sdim
11941309124Sdimstatic __inline__ vector double __ATTRS_o_ai
11942309124Sdimvec_vsx_ld(int __a, const double *__b) {
11943309124Sdim  return (vector double)__builtin_vsx_lxvd2x(__a, __b);
11944309124Sdim}
11945309124Sdim
11946309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
11947309124Sdimvec_vsx_ld(int __a, const vector bool short *__b) {
11948309124Sdim  return (vector bool short)__builtin_vsx_lxvw4x(__a, __b);
11949309124Sdim}
11950309124Sdim
11951309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
11952309124Sdimvec_vsx_ld(int __a, const vector signed short *__b) {
11953309124Sdim  return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
11954309124Sdim}
11955309124Sdim
11956309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
11957309124Sdimvec_vsx_ld(int __a, const signed short *__b) {
11958309124Sdim  return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
11959309124Sdim}
11960309124Sdim
11961309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
11962309124Sdimvec_vsx_ld(int __a, const vector unsigned short *__b) {
11963309124Sdim  return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
11964309124Sdim}
11965309124Sdim
11966309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
11967309124Sdimvec_vsx_ld(int __a, const unsigned short *__b) {
11968309124Sdim  return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
11969309124Sdim}
11970309124Sdim
11971309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
11972309124Sdimvec_vsx_ld(int __a, const vector bool char *__b) {
11973309124Sdim  return (vector bool char)__builtin_vsx_lxvw4x(__a, __b);
11974309124Sdim}
11975309124Sdim
11976309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
11977309124Sdimvec_vsx_ld(int __a, const vector signed char *__b) {
11978309124Sdim  return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
11979309124Sdim}
11980309124Sdim
11981309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
11982309124Sdimvec_vsx_ld(int __a, const signed char *__b) {
11983309124Sdim  return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
11984309124Sdim}
11985309124Sdim
11986309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
11987309124Sdimvec_vsx_ld(int __a, const vector unsigned char *__b) {
11988309124Sdim  return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
11989309124Sdim}
11990309124Sdim
11991309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
11992309124Sdimvec_vsx_ld(int __a, const unsigned char *__b) {
11993309124Sdim  return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
11994309124Sdim}
11995309124Sdim
11996280031Sdim#endif
11997280031Sdim
11998280031Sdim/* vec_vsx_st */
11999280031Sdim
12000280031Sdim#ifdef __VSX__
12001280031Sdim
12002309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
12003309124Sdim                                               vector bool int *__c) {
12004280031Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12005280031Sdim}
12006280031Sdim
12007309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
12008309124Sdim                                               signed int *__c) {
12009280031Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12010280031Sdim}
12011280031Sdim
12012309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
12013309124Sdim                                               unsigned int *__c) {
12014280031Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12015280031Sdim}
12016280031Sdim
12017309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
12018309124Sdim                                               vector signed int *__c) {
12019309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12020309124Sdim}
12021309124Sdim
12022309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
12023309124Sdim                                               signed int *__c) {
12024309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12025309124Sdim}
12026309124Sdim
12027309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
12028309124Sdim                                               vector unsigned int *__c) {
12029309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12030309124Sdim}
12031309124Sdim
12032309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
12033309124Sdim                                               unsigned int *__c) {
12034309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12035309124Sdim}
12036309124Sdim
12037309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
12038309124Sdim                                               vector float *__c) {
12039309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12040309124Sdim}
12041309124Sdim
12042309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
12043309124Sdim                                               float *__c) {
12044309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12045309124Sdim}
12046309124Sdim
12047309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed long long __a,
12048309124Sdim                                               int __b,
12049309124Sdim                                               vector signed long long *__c) {
12050280031Sdim  __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
12051280031Sdim}
12052280031Sdim
12053309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned long long __a,
12054309124Sdim                                               int __b,
12055309124Sdim                                               vector unsigned long long *__c) {
12056280031Sdim  __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
12057280031Sdim}
12058280031Sdim
12059309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
12060309124Sdim                                               vector double *__c) {
12061280031Sdim  __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
12062280031Sdim}
12063280031Sdim
12064309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
12065309124Sdim                                               double *__c) {
12066309124Sdim  __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
12067309124Sdim}
12068309124Sdim
12069309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
12070309124Sdim                                               vector bool short *__c) {
12071309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12072309124Sdim}
12073309124Sdim
12074309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
12075309124Sdim                                               signed short *__c) {
12076309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12077309124Sdim}
12078309124Sdim
12079309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
12080309124Sdim                                               unsigned short *__c) {
12081309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12082309124Sdim}
12083309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
12084309124Sdim                                               vector signed short *__c) {
12085309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12086309124Sdim}
12087309124Sdim
12088309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
12089309124Sdim                                               signed short *__c) {
12090309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12091309124Sdim}
12092309124Sdim
12093309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
12094309124Sdim                                               int __b,
12095309124Sdim                                               vector unsigned short *__c) {
12096309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12097309124Sdim}
12098309124Sdim
12099309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
12100309124Sdim                                               int __b, unsigned short *__c) {
12101309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12102309124Sdim}
12103309124Sdim
12104309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
12105309124Sdim                                               vector bool char *__c) {
12106309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12107309124Sdim}
12108309124Sdim
12109309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
12110309124Sdim                                               signed char *__c) {
12111309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12112309124Sdim}
12113309124Sdim
12114309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
12115309124Sdim                                               unsigned char *__c) {
12116309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12117309124Sdim}
12118309124Sdim
12119309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
12120309124Sdim                                               vector signed char *__c) {
12121309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12122309124Sdim}
12123309124Sdim
12124309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
12125309124Sdim                                               signed char *__c) {
12126309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12127309124Sdim}
12128309124Sdim
12129309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
12130309124Sdim                                               int __b,
12131309124Sdim                                               vector unsigned char *__c) {
12132309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12133309124Sdim}
12134309124Sdim
12135309124Sdimstatic __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
12136309124Sdim                                               int __b, unsigned char *__c) {
12137309124Sdim  __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
12138309124Sdim}
12139309124Sdim
12140280031Sdim#endif
12141280031Sdim
12142321369Sdim#ifdef __VSX__
12143321369Sdim#define vec_xxpermdi __builtin_vsx_xxpermdi
12144321369Sdim#define vec_xxsldwi __builtin_vsx_xxsldwi
12145321369Sdim#endif
12146321369Sdim
12147210299Sed/* vec_xor */
12148210299Sed
12149210299Sed#define __builtin_altivec_vxor vec_xor
12150210299Sed
12151309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
12152309124Sdimvec_xor(vector signed char __a, vector signed char __b) {
12153249423Sdim  return __a ^ __b;
12154210299Sed}
12155210299Sed
12156309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
12157309124Sdimvec_xor(vector bool char __a, vector signed char __b) {
12158249423Sdim  return (vector signed char)__a ^ __b;
12159212904Sdim}
12160212904Sdim
12161309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
12162309124Sdimvec_xor(vector signed char __a, vector bool char __b) {
12163249423Sdim  return __a ^ (vector signed char)__b;
12164212904Sdim}
12165212904Sdim
12166309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
12167309124Sdimvec_xor(vector unsigned char __a, vector unsigned char __b) {
12168249423Sdim  return __a ^ __b;
12169210299Sed}
12170210299Sed
12171309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
12172309124Sdimvec_xor(vector bool char __a, vector unsigned char __b) {
12173249423Sdim  return (vector unsigned char)__a ^ __b;
12174212904Sdim}
12175212904Sdim
12176309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
12177309124Sdimvec_xor(vector unsigned char __a, vector bool char __b) {
12178249423Sdim  return __a ^ (vector unsigned char)__b;
12179212904Sdim}
12180212904Sdim
12181309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_xor(vector bool char __a,
12182309124Sdim                                                        vector bool char __b) {
12183249423Sdim  return __a ^ __b;
12184212904Sdim}
12185212904Sdim
12186309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
12187309124Sdim                                                    vector short __b) {
12188249423Sdim  return __a ^ __b;
12189210299Sed}
12190210299Sed
12191309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_xor(vector bool short __a,
12192309124Sdim                                                    vector short __b) {
12193249423Sdim  return (vector short)__a ^ __b;
12194212904Sdim}
12195212904Sdim
12196309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
12197309124Sdim                                                    vector bool short __b) {
12198249423Sdim  return __a ^ (vector short)__b;
12199212904Sdim}
12200212904Sdim
12201309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
12202309124Sdimvec_xor(vector unsigned short __a, vector unsigned short __b) {
12203249423Sdim  return __a ^ __b;
12204210299Sed}
12205210299Sed
12206309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
12207309124Sdimvec_xor(vector bool short __a, vector unsigned short __b) {
12208249423Sdim  return (vector unsigned short)__a ^ __b;
12209212904Sdim}
12210212904Sdim
12211309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
12212309124Sdimvec_xor(vector unsigned short __a, vector bool short __b) {
12213249423Sdim  return __a ^ (vector unsigned short)__b;
12214212904Sdim}
12215212904Sdim
12216309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
12217309124Sdimvec_xor(vector bool short __a, vector bool short __b) {
12218249423Sdim  return __a ^ __b;
12219212904Sdim}
12220212904Sdim
12221309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
12222309124Sdim                                                  vector int __b) {
12223249423Sdim  return __a ^ __b;
12224210299Sed}
12225210299Sed
12226309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_xor(vector bool int __a,
12227309124Sdim                                                  vector int __b) {
12228249423Sdim  return (vector int)__a ^ __b;
12229212904Sdim}
12230212904Sdim
12231309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
12232309124Sdim                                                  vector bool int __b) {
12233249423Sdim  return __a ^ (vector int)__b;
12234212904Sdim}
12235212904Sdim
12236309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
12237309124Sdimvec_xor(vector unsigned int __a, vector unsigned int __b) {
12238249423Sdim  return __a ^ __b;
12239210299Sed}
12240210299Sed
12241309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
12242309124Sdimvec_xor(vector bool int __a, vector unsigned int __b) {
12243249423Sdim  return (vector unsigned int)__a ^ __b;
12244212904Sdim}
12245212904Sdim
12246309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
12247309124Sdimvec_xor(vector unsigned int __a, vector bool int __b) {
12248249423Sdim  return __a ^ (vector unsigned int)__b;
12249212904Sdim}
12250212904Sdim
12251309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_xor(vector bool int __a,
12252309124Sdim                                                       vector bool int __b) {
12253249423Sdim  return __a ^ __b;
12254212904Sdim}
12255212904Sdim
12256309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
12257309124Sdim                                                    vector float __b) {
12258288943Sdim  vector unsigned int __res =
12259288943Sdim      (vector unsigned int)__a ^ (vector unsigned int)__b;
12260249423Sdim  return (vector float)__res;
12261210299Sed}
12262210299Sed
12263309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_xor(vector bool int __a,
12264309124Sdim                                                    vector float __b) {
12265288943Sdim  vector unsigned int __res =
12266288943Sdim      (vector unsigned int)__a ^ (vector unsigned int)__b;
12267249423Sdim  return (vector float)__res;
12268212904Sdim}
12269212904Sdim
12270309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
12271309124Sdim                                                    vector bool int __b) {
12272288943Sdim  vector unsigned int __res =
12273288943Sdim      (vector unsigned int)__a ^ (vector unsigned int)__b;
12274249423Sdim  return (vector float)__res;
12275212904Sdim}
12276212904Sdim
12277288943Sdim#ifdef __VSX__
12278309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
12279288943Sdimvec_xor(vector signed long long __a, vector signed long long __b) {
12280288943Sdim  return __a ^ __b;
12281288943Sdim}
12282288943Sdim
12283309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
12284288943Sdimvec_xor(vector bool long long __a, vector signed long long __b) {
12285288943Sdim  return (vector signed long long)__a ^ __b;
12286288943Sdim}
12287288943Sdim
12288309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
12289309124Sdimvec_xor(vector signed long long __a, vector bool long long __b) {
12290288943Sdim  return __a ^ (vector signed long long)__b;
12291288943Sdim}
12292288943Sdim
12293309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
12294288943Sdimvec_xor(vector unsigned long long __a, vector unsigned long long __b) {
12295288943Sdim  return __a ^ __b;
12296288943Sdim}
12297288943Sdim
12298309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
12299288943Sdimvec_xor(vector bool long long __a, vector unsigned long long __b) {
12300288943Sdim  return (vector unsigned long long)__a ^ __b;
12301288943Sdim}
12302288943Sdim
12303309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
12304288943Sdimvec_xor(vector unsigned long long __a, vector bool long long __b) {
12305288943Sdim  return __a ^ (vector unsigned long long)__b;
12306288943Sdim}
12307288943Sdim
12308309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
12309309124Sdimvec_xor(vector bool long long __a, vector bool long long __b) {
12310288943Sdim  return __a ^ __b;
12311288943Sdim}
12312288943Sdim
12313309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_xor(vector double __a,
12314309124Sdim                                                     vector double __b) {
12315288943Sdim  return (vector double)((vector unsigned long long)__a ^
12316309124Sdim                         (vector unsigned long long)__b);
12317288943Sdim}
12318288943Sdim
12319309124Sdimstatic __inline__ vector double __ATTRS_o_ai
12320288943Sdimvec_xor(vector double __a, vector bool long long __b) {
12321288943Sdim  return (vector double)((vector unsigned long long)__a ^
12322309124Sdim                         (vector unsigned long long)__b);
12323288943Sdim}
12324288943Sdim
12325309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_xor(vector bool long long __a,
12326309124Sdim                                                     vector double __b) {
12327288943Sdim  return (vector double)((vector unsigned long long)__a ^
12328288943Sdim                         (vector unsigned long long)__b);
12329288943Sdim}
12330288943Sdim#endif
12331288943Sdim
12332210299Sed/* vec_vxor */
12333210299Sed
12334309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
12335309124Sdimvec_vxor(vector signed char __a, vector signed char __b) {
12336249423Sdim  return __a ^ __b;
12337210299Sed}
12338210299Sed
12339309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
12340309124Sdimvec_vxor(vector bool char __a, vector signed char __b) {
12341249423Sdim  return (vector signed char)__a ^ __b;
12342212904Sdim}
12343212904Sdim
12344309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
12345309124Sdimvec_vxor(vector signed char __a, vector bool char __b) {
12346249423Sdim  return __a ^ (vector signed char)__b;
12347212904Sdim}
12348212904Sdim
12349309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
12350309124Sdimvec_vxor(vector unsigned char __a, vector unsigned char __b) {
12351249423Sdim  return __a ^ __b;
12352210299Sed}
12353210299Sed
12354309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
12355309124Sdimvec_vxor(vector bool char __a, vector unsigned char __b) {
12356249423Sdim  return (vector unsigned char)__a ^ __b;
12357212904Sdim}
12358212904Sdim
12359309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
12360309124Sdimvec_vxor(vector unsigned char __a, vector bool char __b) {
12361249423Sdim  return __a ^ (vector unsigned char)__b;
12362212904Sdim}
12363212904Sdim
12364309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_vxor(vector bool char __a,
12365309124Sdim                                                         vector bool char __b) {
12366249423Sdim  return __a ^ __b;
12367212904Sdim}
12368212904Sdim
12369309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
12370309124Sdim                                                     vector short __b) {
12371249423Sdim  return __a ^ __b;
12372210299Sed}
12373210299Sed
12374309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vxor(vector bool short __a,
12375309124Sdim                                                     vector short __b) {
12376249423Sdim  return (vector short)__a ^ __b;
12377212904Sdim}
12378212904Sdim
12379309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
12380309124Sdim                                                     vector bool short __b) {
12381249423Sdim  return __a ^ (vector short)__b;
12382212904Sdim}
12383212904Sdim
12384309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
12385309124Sdimvec_vxor(vector unsigned short __a, vector unsigned short __b) {
12386249423Sdim  return __a ^ __b;
12387210299Sed}
12388210299Sed
12389309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
12390309124Sdimvec_vxor(vector bool short __a, vector unsigned short __b) {
12391249423Sdim  return (vector unsigned short)__a ^ __b;
12392212904Sdim}
12393212904Sdim
12394309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
12395309124Sdimvec_vxor(vector unsigned short __a, vector bool short __b) {
12396249423Sdim  return __a ^ (vector unsigned short)__b;
12397212904Sdim}
12398212904Sdim
12399309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
12400309124Sdimvec_vxor(vector bool short __a, vector bool short __b) {
12401249423Sdim  return __a ^ __b;
12402212904Sdim}
12403212904Sdim
12404309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
12405309124Sdim                                                   vector int __b) {
12406249423Sdim  return __a ^ __b;
12407210299Sed}
12408210299Sed
12409309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vxor(vector bool int __a,
12410309124Sdim                                                   vector int __b) {
12411249423Sdim  return (vector int)__a ^ __b;
12412212904Sdim}
12413212904Sdim
12414309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
12415309124Sdim                                                   vector bool int __b) {
12416249423Sdim  return __a ^ (vector int)__b;
12417212904Sdim}
12418212904Sdim
12419309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
12420309124Sdimvec_vxor(vector unsigned int __a, vector unsigned int __b) {
12421249423Sdim  return __a ^ __b;
12422210299Sed}
12423210299Sed
12424309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
12425309124Sdimvec_vxor(vector bool int __a, vector unsigned int __b) {
12426249423Sdim  return (vector unsigned int)__a ^ __b;
12427212904Sdim}
12428212904Sdim
12429309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
12430309124Sdimvec_vxor(vector unsigned int __a, vector bool int __b) {
12431249423Sdim  return __a ^ (vector unsigned int)__b;
12432212904Sdim}
12433212904Sdim
12434309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_vxor(vector bool int __a,
12435309124Sdim                                                        vector bool int __b) {
12436249423Sdim  return __a ^ __b;
12437212904Sdim}
12438212904Sdim
12439309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
12440309124Sdim                                                     vector float __b) {
12441288943Sdim  vector unsigned int __res =
12442288943Sdim      (vector unsigned int)__a ^ (vector unsigned int)__b;
12443249423Sdim  return (vector float)__res;
12444210299Sed}
12445210299Sed
12446309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vxor(vector bool int __a,
12447309124Sdim                                                     vector float __b) {
12448288943Sdim  vector unsigned int __res =
12449288943Sdim      (vector unsigned int)__a ^ (vector unsigned int)__b;
12450249423Sdim  return (vector float)__res;
12451212904Sdim}
12452212904Sdim
12453309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
12454309124Sdim                                                     vector bool int __b) {
12455288943Sdim  vector unsigned int __res =
12456288943Sdim      (vector unsigned int)__a ^ (vector unsigned int)__b;
12457249423Sdim  return (vector float)__res;
12458212904Sdim}
12459212904Sdim
12460288943Sdim#ifdef __VSX__
12461309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
12462288943Sdimvec_vxor(vector signed long long __a, vector signed long long __b) {
12463288943Sdim  return __a ^ __b;
12464288943Sdim}
12465288943Sdim
12466309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
12467288943Sdimvec_vxor(vector bool long long __a, vector signed long long __b) {
12468288943Sdim  return (vector signed long long)__a ^ __b;
12469288943Sdim}
12470288943Sdim
12471309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
12472288943Sdimvec_vxor(vector signed long long __a, vector bool long long __b) {
12473288943Sdim  return __a ^ (vector signed long long)__b;
12474288943Sdim}
12475288943Sdim
12476309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
12477288943Sdimvec_vxor(vector unsigned long long __a, vector unsigned long long __b) {
12478288943Sdim  return __a ^ __b;
12479288943Sdim}
12480288943Sdim
12481309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
12482288943Sdimvec_vxor(vector bool long long __a, vector unsigned long long __b) {
12483288943Sdim  return (vector unsigned long long)__a ^ __b;
12484288943Sdim}
12485288943Sdim
12486309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
12487288943Sdimvec_vxor(vector unsigned long long __a, vector bool long long __b) {
12488288943Sdim  return __a ^ (vector unsigned long long)__b;
12489288943Sdim}
12490288943Sdim
12491309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
12492309124Sdimvec_vxor(vector bool long long __a, vector bool long long __b) {
12493288943Sdim  return __a ^ __b;
12494288943Sdim}
12495288943Sdim#endif
12496288943Sdim
12497218893Sdim/* ------------------------ extensions for CBEA ----------------------------- */
12498210299Sed
12499218893Sdim/* vec_extract */
12500218893Sdim
12501309124Sdimstatic __inline__ signed char __ATTRS_o_ai vec_extract(vector signed char __a,
12502309124Sdim                                                       int __b) {
12503249423Sdim  return __a[__b];
12504218893Sdim}
12505218893Sdim
12506309124Sdimstatic __inline__ unsigned char __ATTRS_o_ai
12507309124Sdimvec_extract(vector unsigned char __a, int __b) {
12508249423Sdim  return __a[__b];
12509218893Sdim}
12510218893Sdim
12511309124Sdimstatic __inline__ unsigned char __ATTRS_o_ai vec_extract(vector bool char __a,
12512309124Sdim                                                         int __b) {
12513249423Sdim  return __a[__b];
12514218893Sdim}
12515218893Sdim
12516309124Sdimstatic __inline__ signed short __ATTRS_o_ai vec_extract(vector signed short __a,
12517309124Sdim                                                        int __b) {
12518296417Sdim  return __a[__b];
12519296417Sdim}
12520296417Sdim
12521309124Sdimstatic __inline__ unsigned short __ATTRS_o_ai
12522309124Sdimvec_extract(vector unsigned short __a, int __b) {
12523249423Sdim  return __a[__b];
12524218893Sdim}
12525218893Sdim
12526309124Sdimstatic __inline__ unsigned short __ATTRS_o_ai vec_extract(vector bool short __a,
12527309124Sdim                                                          int __b) {
12528249423Sdim  return __a[__b];
12529218893Sdim}
12530218893Sdim
12531309124Sdimstatic __inline__ signed int __ATTRS_o_ai vec_extract(vector signed int __a,
12532309124Sdim                                                      int __b) {
12533296417Sdim  return __a[__b];
12534296417Sdim}
12535296417Sdim
12536309124Sdimstatic __inline__ unsigned int __ATTRS_o_ai vec_extract(vector unsigned int __a,
12537309124Sdim                                                        int __b) {
12538249423Sdim  return __a[__b];
12539218893Sdim}
12540218893Sdim
12541309124Sdimstatic __inline__ unsigned int __ATTRS_o_ai vec_extract(vector bool int __a,
12542309124Sdim                                                        int __b) {
12543296417Sdim  return __a[__b];
12544296417Sdim}
12545296417Sdim
12546296417Sdim#ifdef __VSX__
12547309124Sdimstatic __inline__ signed long long __ATTRS_o_ai
12548309124Sdimvec_extract(vector signed long long __a, int __b) {
12549296417Sdim  return __a[__b];
12550296417Sdim}
12551296417Sdim
12552309124Sdimstatic __inline__ unsigned long long __ATTRS_o_ai
12553296417Sdimvec_extract(vector unsigned long long __a, int __b) {
12554296417Sdim  return __a[__b];
12555296417Sdim}
12556296417Sdim
12557309124Sdimstatic __inline__ unsigned long long __ATTRS_o_ai
12558309124Sdimvec_extract(vector bool long long __a, int __b) {
12559296417Sdim  return __a[__b];
12560296417Sdim}
12561296417Sdim
12562309124Sdimstatic __inline__ double __ATTRS_o_ai vec_extract(vector double __a, int __b) {
12563296417Sdim  return __a[__b];
12564296417Sdim}
12565296417Sdim#endif
12566296417Sdim
12567309124Sdimstatic __inline__ float __ATTRS_o_ai vec_extract(vector float __a, int __b) {
12568249423Sdim  return __a[__b];
12569218893Sdim}
12570218893Sdim
12571314564Sdim#ifdef __POWER9_VECTOR__
12572314564Sdim
12573314564Sdim#define vec_insert4b __builtin_vsx_insertword
12574314564Sdim#define vec_extract4b __builtin_vsx_extractuword
12575314564Sdim
12576314564Sdim/* vec_extract_exp */
12577314564Sdim
12578314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
12579314564Sdimvec_extract_exp(vector float __a) {
12580314564Sdim  return __builtin_vsx_xvxexpsp(__a);
12581314564Sdim}
12582314564Sdim
12583314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
12584314564Sdimvec_extract_exp(vector double __a) {
12585314564Sdim  return __builtin_vsx_xvxexpdp(__a);
12586314564Sdim}
12587314564Sdim
12588314564Sdim/* vec_extract_sig */
12589314564Sdim
12590314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
12591314564Sdimvec_extract_sig(vector float __a) {
12592314564Sdim  return __builtin_vsx_xvxsigsp(__a);
12593314564Sdim}
12594314564Sdim
12595314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
12596314564Sdimvec_extract_sig (vector double __a) {
12597314564Sdim  return __builtin_vsx_xvxsigdp(__a);
12598314564Sdim}
12599314564Sdim
12600314564Sdimstatic __inline__ vector float __ATTRS_o_ai
12601314564Sdimvec_extract_fp32_from_shorth(vector unsigned short __a) {
12602314564Sdim  vector unsigned short __b =
12603314564Sdim#ifdef __LITTLE_ENDIAN__
12604314564Sdim            __builtin_shufflevector(__a, __a, 0, -1, 1, -1, 2, -1, 3, -1);
12605314564Sdim#else
12606314564Sdim            __builtin_shufflevector(__a, __a, -1, 0, -1, 1, -1, 2, -1, 3);
12607314564Sdim#endif
12608314564Sdim  return __builtin_vsx_xvcvhpsp(__b);
12609314564Sdim}
12610314564Sdim
12611314564Sdimstatic __inline__ vector float __ATTRS_o_ai
12612314564Sdimvec_extract_fp32_from_shortl(vector unsigned short __a) {
12613314564Sdim  vector unsigned short __b =
12614314564Sdim#ifdef __LITTLE_ENDIAN__
12615314564Sdim            __builtin_shufflevector(__a, __a, 4, -1, 5, -1, 6, -1, 7, -1);
12616314564Sdim#else
12617314564Sdim            __builtin_shufflevector(__a, __a, -1, 4, -1, 5, -1, 6, -1, 7);
12618314564Sdim#endif
12619314564Sdim  return __builtin_vsx_xvcvhpsp(__b);
12620314564Sdim}
12621314564Sdim#endif /* __POWER9_VECTOR__ */
12622314564Sdim
12623218893Sdim/* vec_insert */
12624218893Sdim
12625309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
12626309124Sdimvec_insert(signed char __a, vector signed char __b, int __c) {
12627249423Sdim  __b[__c] = __a;
12628249423Sdim  return __b;
12629218893Sdim}
12630218893Sdim
12631309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
12632309124Sdimvec_insert(unsigned char __a, vector unsigned char __b, int __c) {
12633249423Sdim  __b[__c] = __a;
12634249423Sdim  return __b;
12635218893Sdim}
12636218893Sdim
12637309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai vec_insert(unsigned char __a,
12638309124Sdim                                                           vector bool char __b,
12639309124Sdim                                                           int __c) {
12640249423Sdim  __b[__c] = __a;
12641249423Sdim  return __b;
12642218893Sdim}
12643218893Sdim
12644309124Sdimstatic __inline__ vector signed short __ATTRS_o_ai
12645309124Sdimvec_insert(signed short __a, vector signed short __b, int __c) {
12646296417Sdim  __b[__c] = __a;
12647296417Sdim  return __b;
12648296417Sdim}
12649296417Sdim
12650309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
12651309124Sdimvec_insert(unsigned short __a, vector unsigned short __b, int __c) {
12652249423Sdim  __b[__c] = __a;
12653249423Sdim  return __b;
12654218893Sdim}
12655218893Sdim
12656309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
12657309124Sdimvec_insert(unsigned short __a, vector bool short __b, int __c) {
12658249423Sdim  __b[__c] = __a;
12659249423Sdim  return __b;
12660218893Sdim}
12661218893Sdim
12662309124Sdimstatic __inline__ vector signed int __ATTRS_o_ai
12663309124Sdimvec_insert(signed int __a, vector signed int __b, int __c) {
12664296417Sdim  __b[__c] = __a;
12665296417Sdim  return __b;
12666296417Sdim}
12667296417Sdim
12668309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
12669309124Sdimvec_insert(unsigned int __a, vector unsigned int __b, int __c) {
12670249423Sdim  __b[__c] = __a;
12671249423Sdim  return __b;
12672218893Sdim}
12673218893Sdim
12674309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai vec_insert(unsigned int __a,
12675309124Sdim                                                          vector bool int __b,
12676309124Sdim                                                          int __c) {
12677296417Sdim  __b[__c] = __a;
12678296417Sdim  return __b;
12679296417Sdim}
12680296417Sdim
12681296417Sdim#ifdef __VSX__
12682309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
12683296417Sdimvec_insert(signed long long __a, vector signed long long __b, int __c) {
12684296417Sdim  __b[__c] = __a;
12685296417Sdim  return __b;
12686296417Sdim}
12687296417Sdim
12688309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
12689296417Sdimvec_insert(unsigned long long __a, vector unsigned long long __b, int __c) {
12690296417Sdim  __b[__c] = __a;
12691296417Sdim  return __b;
12692296417Sdim}
12693296417Sdim
12694309124Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
12695296417Sdimvec_insert(unsigned long long __a, vector bool long long __b, int __c) {
12696296417Sdim  __b[__c] = __a;
12697296417Sdim  return __b;
12698296417Sdim}
12699309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_insert(double __a,
12700309124Sdim                                                        vector double __b,
12701309124Sdim                                                        int __c) {
12702296417Sdim  __b[__c] = __a;
12703296417Sdim  return __b;
12704296417Sdim}
12705296417Sdim#endif
12706296417Sdim
12707309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_insert(float __a,
12708309124Sdim                                                       vector float __b,
12709309124Sdim                                                       int __c) {
12710249423Sdim  __b[__c] = __a;
12711249423Sdim  return __b;
12712218893Sdim}
12713218893Sdim
12714218893Sdim/* vec_lvlx */
12715218893Sdim
12716309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
12717309124Sdimvec_lvlx(int __a, const signed char *__b) {
12718288943Sdim  return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
12719249423Sdim                  vec_lvsl(__a, __b));
12720218893Sdim}
12721218893Sdim
12722309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
12723309124Sdimvec_lvlx(int __a, const vector signed char *__b) {
12724288943Sdim  return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
12725249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12726218893Sdim}
12727218893Sdim
12728309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
12729309124Sdimvec_lvlx(int __a, const unsigned char *__b) {
12730288943Sdim  return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
12731249423Sdim                  vec_lvsl(__a, __b));
12732218893Sdim}
12733218893Sdim
12734309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
12735288943Sdimvec_lvlx(int __a, const vector unsigned char *__b) {
12736288943Sdim  return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
12737249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12738218893Sdim}
12739218893Sdim
12740309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
12741309124Sdimvec_lvlx(int __a, const vector bool char *__b) {
12742288943Sdim  return vec_perm(vec_ld(__a, __b), (vector bool char)(0),
12743249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12744218893Sdim}
12745218893Sdim
12746309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
12747309124Sdim                                                     const short *__b) {
12748288943Sdim  return vec_perm(vec_ld(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
12749218893Sdim}
12750218893Sdim
12751309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
12752309124Sdim                                                     const vector short *__b) {
12753288943Sdim  return vec_perm(vec_ld(__a, __b), (vector short)(0),
12754249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12755218893Sdim}
12756218893Sdim
12757309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
12758309124Sdimvec_lvlx(int __a, const unsigned short *__b) {
12759288943Sdim  return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
12760249423Sdim                  vec_lvsl(__a, __b));
12761218893Sdim}
12762218893Sdim
12763309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
12764288943Sdimvec_lvlx(int __a, const vector unsigned short *__b) {
12765288943Sdim  return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
12766249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12767218893Sdim}
12768218893Sdim
12769309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
12770309124Sdimvec_lvlx(int __a, const vector bool short *__b) {
12771288943Sdim  return vec_perm(vec_ld(__a, __b), (vector bool short)(0),
12772249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12773218893Sdim}
12774218893Sdim
12775309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_lvlx(int __a,
12776309124Sdim                                                     const vector pixel *__b) {
12777288943Sdim  return vec_perm(vec_ld(__a, __b), (vector pixel)(0),
12778249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12779218893Sdim}
12780218893Sdim
12781309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a, const int *__b) {
12782288943Sdim  return vec_perm(vec_ld(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
12783218893Sdim}
12784218893Sdim
12785309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a,
12786309124Sdim                                                   const vector int *__b) {
12787288943Sdim  return vec_perm(vec_ld(__a, __b), (vector int)(0),
12788249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12789218893Sdim}
12790218893Sdim
12791309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
12792309124Sdimvec_lvlx(int __a, const unsigned int *__b) {
12793288943Sdim  return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
12794249423Sdim                  vec_lvsl(__a, __b));
12795218893Sdim}
12796218893Sdim
12797309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
12798288943Sdimvec_lvlx(int __a, const vector unsigned int *__b) {
12799288943Sdim  return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
12800249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12801218893Sdim}
12802218893Sdim
12803309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
12804309124Sdimvec_lvlx(int __a, const vector bool int *__b) {
12805288943Sdim  return vec_perm(vec_ld(__a, __b), (vector bool int)(0),
12806249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12807218893Sdim}
12808218893Sdim
12809309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
12810309124Sdim                                                     const float *__b) {
12811288943Sdim  return vec_perm(vec_ld(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
12812218893Sdim}
12813218893Sdim
12814309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
12815309124Sdim                                                     const vector float *__b) {
12816288943Sdim  return vec_perm(vec_ld(__a, __b), (vector float)(0),
12817249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12818218893Sdim}
12819218893Sdim
12820218893Sdim/* vec_lvlxl */
12821218893Sdim
12822309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
12823309124Sdimvec_lvlxl(int __a, const signed char *__b) {
12824288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
12825249423Sdim                  vec_lvsl(__a, __b));
12826218893Sdim}
12827218893Sdim
12828309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
12829288943Sdimvec_lvlxl(int __a, const vector signed char *__b) {
12830288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
12831249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12832218893Sdim}
12833218893Sdim
12834309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
12835309124Sdimvec_lvlxl(int __a, const unsigned char *__b) {
12836288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
12837249423Sdim                  vec_lvsl(__a, __b));
12838218893Sdim}
12839218893Sdim
12840309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
12841288943Sdimvec_lvlxl(int __a, const vector unsigned char *__b) {
12842288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
12843249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12844218893Sdim}
12845218893Sdim
12846309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
12847309124Sdimvec_lvlxl(int __a, const vector bool char *__b) {
12848288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector bool char)(0),
12849249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12850218893Sdim}
12851218893Sdim
12852309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
12853309124Sdim                                                      const short *__b) {
12854288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
12855218893Sdim}
12856218893Sdim
12857309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
12858309124Sdim                                                      const vector short *__b) {
12859288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector short)(0),
12860249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12861218893Sdim}
12862218893Sdim
12863309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
12864309124Sdimvec_lvlxl(int __a, const unsigned short *__b) {
12865288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
12866249423Sdim                  vec_lvsl(__a, __b));
12867218893Sdim}
12868218893Sdim
12869309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
12870288943Sdimvec_lvlxl(int __a, const vector unsigned short *__b) {
12871288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
12872249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12873218893Sdim}
12874218893Sdim
12875309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
12876309124Sdimvec_lvlxl(int __a, const vector bool short *__b) {
12877288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector bool short)(0),
12878249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12879218893Sdim}
12880218893Sdim
12881309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_lvlxl(int __a,
12882309124Sdim                                                      const vector pixel *__b) {
12883288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector pixel)(0),
12884249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12885218893Sdim}
12886218893Sdim
12887309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a, const int *__b) {
12888288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
12889218893Sdim}
12890218893Sdim
12891309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a,
12892309124Sdim                                                    const vector int *__b) {
12893288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector int)(0),
12894249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12895218893Sdim}
12896218893Sdim
12897309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
12898309124Sdimvec_lvlxl(int __a, const unsigned int *__b) {
12899288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
12900249423Sdim                  vec_lvsl(__a, __b));
12901218893Sdim}
12902218893Sdim
12903309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
12904288943Sdimvec_lvlxl(int __a, const vector unsigned int *__b) {
12905288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
12906249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12907218893Sdim}
12908218893Sdim
12909309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
12910309124Sdimvec_lvlxl(int __a, const vector bool int *__b) {
12911288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector bool int)(0),
12912249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12913218893Sdim}
12914218893Sdim
12915309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
12916309124Sdim                                                      const float *__b) {
12917288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
12918218893Sdim}
12919218893Sdim
12920309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
12921309124Sdim                                                      vector float *__b) {
12922288943Sdim  return vec_perm(vec_ldl(__a, __b), (vector float)(0),
12923249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12924218893Sdim}
12925218893Sdim
12926218893Sdim/* vec_lvrx */
12927218893Sdim
12928309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
12929309124Sdimvec_lvrx(int __a, const signed char *__b) {
12930288943Sdim  return vec_perm((vector signed char)(0), vec_ld(__a, __b),
12931249423Sdim                  vec_lvsl(__a, __b));
12932218893Sdim}
12933218893Sdim
12934309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
12935309124Sdimvec_lvrx(int __a, const vector signed char *__b) {
12936288943Sdim  return vec_perm((vector signed char)(0), vec_ld(__a, __b),
12937249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12938218893Sdim}
12939218893Sdim
12940309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
12941309124Sdimvec_lvrx(int __a, const unsigned char *__b) {
12942288943Sdim  return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
12943249423Sdim                  vec_lvsl(__a, __b));
12944218893Sdim}
12945218893Sdim
12946309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
12947288943Sdimvec_lvrx(int __a, const vector unsigned char *__b) {
12948288943Sdim  return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
12949249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12950218893Sdim}
12951218893Sdim
12952309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
12953309124Sdimvec_lvrx(int __a, const vector bool char *__b) {
12954288943Sdim  return vec_perm((vector bool char)(0), vec_ld(__a, __b),
12955249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12956218893Sdim}
12957218893Sdim
12958309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
12959309124Sdim                                                     const short *__b) {
12960288943Sdim  return vec_perm((vector short)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
12961218893Sdim}
12962218893Sdim
12963309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
12964309124Sdim                                                     const vector short *__b) {
12965288943Sdim  return vec_perm((vector short)(0), vec_ld(__a, __b),
12966249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12967218893Sdim}
12968218893Sdim
12969309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
12970309124Sdimvec_lvrx(int __a, const unsigned short *__b) {
12971288943Sdim  return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
12972249423Sdim                  vec_lvsl(__a, __b));
12973218893Sdim}
12974218893Sdim
12975309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
12976288943Sdimvec_lvrx(int __a, const vector unsigned short *__b) {
12977288943Sdim  return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
12978249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12979218893Sdim}
12980218893Sdim
12981309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
12982309124Sdimvec_lvrx(int __a, const vector bool short *__b) {
12983288943Sdim  return vec_perm((vector bool short)(0), vec_ld(__a, __b),
12984249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12985218893Sdim}
12986218893Sdim
12987309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_lvrx(int __a,
12988309124Sdim                                                     const vector pixel *__b) {
12989288943Sdim  return vec_perm((vector pixel)(0), vec_ld(__a, __b),
12990249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
12991218893Sdim}
12992218893Sdim
12993309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a, const int *__b) {
12994288943Sdim  return vec_perm((vector int)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
12995218893Sdim}
12996218893Sdim
12997309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a,
12998309124Sdim                                                   const vector int *__b) {
12999288943Sdim  return vec_perm((vector int)(0), vec_ld(__a, __b),
13000249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13001218893Sdim}
13002218893Sdim
13003309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
13004309124Sdimvec_lvrx(int __a, const unsigned int *__b) {
13005288943Sdim  return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
13006249423Sdim                  vec_lvsl(__a, __b));
13007218893Sdim}
13008218893Sdim
13009309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
13010288943Sdimvec_lvrx(int __a, const vector unsigned int *__b) {
13011288943Sdim  return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
13012249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13013218893Sdim}
13014218893Sdim
13015309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
13016309124Sdimvec_lvrx(int __a, const vector bool int *__b) {
13017288943Sdim  return vec_perm((vector bool int)(0), vec_ld(__a, __b),
13018249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13019218893Sdim}
13020218893Sdim
13021309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
13022309124Sdim                                                     const float *__b) {
13023288943Sdim  return vec_perm((vector float)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
13024218893Sdim}
13025218893Sdim
13026309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
13027309124Sdim                                                     const vector float *__b) {
13028288943Sdim  return vec_perm((vector float)(0), vec_ld(__a, __b),
13029249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13030218893Sdim}
13031218893Sdim
13032218893Sdim/* vec_lvrxl */
13033218893Sdim
13034309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
13035309124Sdimvec_lvrxl(int __a, const signed char *__b) {
13036288943Sdim  return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
13037249423Sdim                  vec_lvsl(__a, __b));
13038218893Sdim}
13039218893Sdim
13040309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
13041288943Sdimvec_lvrxl(int __a, const vector signed char *__b) {
13042288943Sdim  return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
13043249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13044218893Sdim}
13045218893Sdim
13046309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
13047309124Sdimvec_lvrxl(int __a, const unsigned char *__b) {
13048288943Sdim  return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
13049249423Sdim                  vec_lvsl(__a, __b));
13050218893Sdim}
13051218893Sdim
13052309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
13053288943Sdimvec_lvrxl(int __a, const vector unsigned char *__b) {
13054288943Sdim  return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
13055249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13056218893Sdim}
13057218893Sdim
13058309124Sdimstatic __inline__ vector bool char __ATTRS_o_ai
13059309124Sdimvec_lvrxl(int __a, const vector bool char *__b) {
13060288943Sdim  return vec_perm((vector bool char)(0), vec_ldl(__a, __b),
13061249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13062218893Sdim}
13063218893Sdim
13064309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
13065309124Sdim                                                      const short *__b) {
13066288943Sdim  return vec_perm((vector short)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
13067218893Sdim}
13068218893Sdim
13069309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
13070309124Sdim                                                      const vector short *__b) {
13071288943Sdim  return vec_perm((vector short)(0), vec_ldl(__a, __b),
13072249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13073218893Sdim}
13074218893Sdim
13075309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
13076309124Sdimvec_lvrxl(int __a, const unsigned short *__b) {
13077288943Sdim  return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
13078249423Sdim                  vec_lvsl(__a, __b));
13079218893Sdim}
13080218893Sdim
13081309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
13082288943Sdimvec_lvrxl(int __a, const vector unsigned short *__b) {
13083288943Sdim  return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
13084249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13085218893Sdim}
13086218893Sdim
13087309124Sdimstatic __inline__ vector bool short __ATTRS_o_ai
13088309124Sdimvec_lvrxl(int __a, const vector bool short *__b) {
13089288943Sdim  return vec_perm((vector bool short)(0), vec_ldl(__a, __b),
13090249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13091218893Sdim}
13092218893Sdim
13093309124Sdimstatic __inline__ vector pixel __ATTRS_o_ai vec_lvrxl(int __a,
13094309124Sdim                                                      const vector pixel *__b) {
13095288943Sdim  return vec_perm((vector pixel)(0), vec_ldl(__a, __b),
13096249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13097218893Sdim}
13098218893Sdim
13099309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a, const int *__b) {
13100288943Sdim  return vec_perm((vector int)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
13101218893Sdim}
13102218893Sdim
13103309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a,
13104309124Sdim                                                    const vector int *__b) {
13105288943Sdim  return vec_perm((vector int)(0), vec_ldl(__a, __b),
13106249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13107218893Sdim}
13108218893Sdim
13109309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
13110309124Sdimvec_lvrxl(int __a, const unsigned int *__b) {
13111288943Sdim  return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
13112249423Sdim                  vec_lvsl(__a, __b));
13113218893Sdim}
13114218893Sdim
13115309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
13116288943Sdimvec_lvrxl(int __a, const vector unsigned int *__b) {
13117288943Sdim  return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
13118249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13119218893Sdim}
13120218893Sdim
13121309124Sdimstatic __inline__ vector bool int __ATTRS_o_ai
13122309124Sdimvec_lvrxl(int __a, const vector bool int *__b) {
13123288943Sdim  return vec_perm((vector bool int)(0), vec_ldl(__a, __b),
13124249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13125218893Sdim}
13126218893Sdim
13127309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
13128309124Sdim                                                      const float *__b) {
13129288943Sdim  return vec_perm((vector float)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
13130218893Sdim}
13131218893Sdim
13132309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
13133309124Sdim                                                      const vector float *__b) {
13134288943Sdim  return vec_perm((vector float)(0), vec_ldl(__a, __b),
13135249423Sdim                  vec_lvsl(__a, (unsigned char *)__b));
13136218893Sdim}
13137218893Sdim
13138218893Sdim/* vec_stvlx */
13139218893Sdim
13140309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
13141309124Sdim                                              signed char *__c) {
13142288943Sdim  return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
13143288943Sdim                __c);
13144218893Sdim}
13145218893Sdim
13146309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
13147309124Sdim                                              vector signed char *__c) {
13148288943Sdim  return vec_st(
13149288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13150288943Sdim      __b, __c);
13151218893Sdim}
13152218893Sdim
13153309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
13154309124Sdim                                              unsigned char *__c) {
13155288943Sdim  return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
13156288943Sdim                __c);
13157218893Sdim}
13158218893Sdim
13159309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
13160309124Sdim                                              vector unsigned char *__c) {
13161288943Sdim  return vec_st(
13162288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13163288943Sdim      __b, __c);
13164218893Sdim}
13165218893Sdim
13166309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector bool char __a, int __b,
13167309124Sdim                                              vector bool char *__c) {
13168288943Sdim  return vec_st(
13169288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13170288943Sdim      __b, __c);
13171218893Sdim}
13172218893Sdim
13173309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
13174309124Sdim                                              short *__c) {
13175288943Sdim  return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
13176288943Sdim                __c);
13177218893Sdim}
13178218893Sdim
13179309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
13180309124Sdim                                              vector short *__c) {
13181288943Sdim  return vec_st(
13182288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13183288943Sdim      __b, __c);
13184218893Sdim}
13185218893Sdim
13186309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
13187309124Sdim                                              int __b, unsigned short *__c) {
13188288943Sdim  return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
13189288943Sdim                __c);
13190218893Sdim}
13191218893Sdim
13192309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
13193309124Sdim                                              int __b,
13194309124Sdim                                              vector unsigned short *__c) {
13195288943Sdim  return vec_st(
13196288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13197288943Sdim      __b, __c);
13198218893Sdim}
13199218893Sdim
13200309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector bool short __a, int __b,
13201309124Sdim                                              vector bool short *__c) {
13202288943Sdim  return vec_st(
13203288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13204288943Sdim      __b, __c);
13205218893Sdim}
13206218893Sdim
13207309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector pixel __a, int __b,
13208309124Sdim                                              vector pixel *__c) {
13209288943Sdim  return vec_st(
13210288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13211288943Sdim      __b, __c);
13212218893Sdim}
13213218893Sdim
13214309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
13215309124Sdim                                              int *__c) {
13216288943Sdim  return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
13217288943Sdim                __c);
13218218893Sdim}
13219218893Sdim
13220309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
13221309124Sdim                                              vector int *__c) {
13222288943Sdim  return vec_st(
13223288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13224288943Sdim      __b, __c);
13225218893Sdim}
13226218893Sdim
13227309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
13228309124Sdim                                              unsigned int *__c) {
13229288943Sdim  return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
13230288943Sdim                __c);
13231218893Sdim}
13232218893Sdim
13233309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
13234309124Sdim                                              vector unsigned int *__c) {
13235288943Sdim  return vec_st(
13236288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13237288943Sdim      __b, __c);
13238218893Sdim}
13239218893Sdim
13240309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector bool int __a, int __b,
13241309124Sdim                                              vector bool int *__c) {
13242288943Sdim  return vec_st(
13243288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13244288943Sdim      __b, __c);
13245218893Sdim}
13246218893Sdim
13247309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlx(vector float __a, int __b,
13248309124Sdim                                              vector float *__c) {
13249288943Sdim  return vec_st(
13250288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13251288943Sdim      __b, __c);
13252218893Sdim}
13253218893Sdim
13254218893Sdim/* vec_stvlxl */
13255218893Sdim
13256309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
13257309124Sdim                                               signed char *__c) {
13258288943Sdim  return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
13259288943Sdim                 __c);
13260218893Sdim}
13261218893Sdim
13262309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
13263309124Sdim                                               vector signed char *__c) {
13264288943Sdim  return vec_stl(
13265288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13266288943Sdim      __b, __c);
13267218893Sdim}
13268218893Sdim
13269309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
13270309124Sdim                                               int __b, unsigned char *__c) {
13271288943Sdim  return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
13272288943Sdim                 __c);
13273218893Sdim}
13274218893Sdim
13275309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
13276309124Sdim                                               int __b,
13277309124Sdim                                               vector unsigned char *__c) {
13278288943Sdim  return vec_stl(
13279288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13280288943Sdim      __b, __c);
13281218893Sdim}
13282218893Sdim
13283309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool char __a, int __b,
13284309124Sdim                                               vector bool char *__c) {
13285288943Sdim  return vec_stl(
13286288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13287288943Sdim      __b, __c);
13288218893Sdim}
13289218893Sdim
13290309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
13291309124Sdim                                               short *__c) {
13292288943Sdim  return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
13293288943Sdim                 __c);
13294218893Sdim}
13295218893Sdim
13296309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
13297309124Sdim                                               vector short *__c) {
13298288943Sdim  return vec_stl(
13299288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13300288943Sdim      __b, __c);
13301218893Sdim}
13302218893Sdim
13303309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
13304309124Sdim                                               int __b, unsigned short *__c) {
13305288943Sdim  return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
13306288943Sdim                 __c);
13307218893Sdim}
13308218893Sdim
13309309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
13310309124Sdim                                               int __b,
13311309124Sdim                                               vector unsigned short *__c) {
13312288943Sdim  return vec_stl(
13313288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13314288943Sdim      __b, __c);
13315218893Sdim}
13316218893Sdim
13317309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool short __a, int __b,
13318309124Sdim                                               vector bool short *__c) {
13319288943Sdim  return vec_stl(
13320288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13321288943Sdim      __b, __c);
13322218893Sdim}
13323218893Sdim
13324309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector pixel __a, int __b,
13325309124Sdim                                               vector pixel *__c) {
13326288943Sdim  return vec_stl(
13327288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13328288943Sdim      __b, __c);
13329218893Sdim}
13330218893Sdim
13331309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
13332309124Sdim                                               int *__c) {
13333288943Sdim  return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
13334288943Sdim                 __c);
13335218893Sdim}
13336218893Sdim
13337309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
13338309124Sdim                                               vector int *__c) {
13339288943Sdim  return vec_stl(
13340288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13341288943Sdim      __b, __c);
13342218893Sdim}
13343218893Sdim
13344309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
13345309124Sdim                                               unsigned int *__c) {
13346288943Sdim  return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
13347288943Sdim                 __c);
13348218893Sdim}
13349218893Sdim
13350309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
13351309124Sdim                                               vector unsigned int *__c) {
13352288943Sdim  return vec_stl(
13353288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13354288943Sdim      __b, __c);
13355218893Sdim}
13356218893Sdim
13357309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool int __a, int __b,
13358309124Sdim                                               vector bool int *__c) {
13359288943Sdim  return vec_stl(
13360288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13361288943Sdim      __b, __c);
13362218893Sdim}
13363218893Sdim
13364309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvlxl(vector float __a, int __b,
13365309124Sdim                                               vector float *__c) {
13366288943Sdim  return vec_stl(
13367288943Sdim      vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
13368288943Sdim      __b, __c);
13369218893Sdim}
13370218893Sdim
13371218893Sdim/* vec_stvrx */
13372218893Sdim
13373309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
13374309124Sdim                                              signed char *__c) {
13375288943Sdim  return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
13376288943Sdim                __c);
13377218893Sdim}
13378218893Sdim
13379309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
13380309124Sdim                                              vector signed char *__c) {
13381288943Sdim  return vec_st(
13382288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13383288943Sdim      __b, __c);
13384218893Sdim}
13385218893Sdim
13386309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
13387309124Sdim                                              unsigned char *__c) {
13388288943Sdim  return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
13389288943Sdim                __c);
13390218893Sdim}
13391218893Sdim
13392309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
13393309124Sdim                                              vector unsigned char *__c) {
13394288943Sdim  return vec_st(
13395288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13396288943Sdim      __b, __c);
13397218893Sdim}
13398218893Sdim
13399309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector bool char __a, int __b,
13400309124Sdim                                              vector bool char *__c) {
13401288943Sdim  return vec_st(
13402288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13403288943Sdim      __b, __c);
13404218893Sdim}
13405218893Sdim
13406309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
13407309124Sdim                                              short *__c) {
13408288943Sdim  return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
13409288943Sdim                __c);
13410218893Sdim}
13411218893Sdim
13412309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
13413309124Sdim                                              vector short *__c) {
13414288943Sdim  return vec_st(
13415288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13416288943Sdim      __b, __c);
13417218893Sdim}
13418218893Sdim
13419309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
13420309124Sdim                                              int __b, unsigned short *__c) {
13421288943Sdim  return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
13422288943Sdim                __c);
13423218893Sdim}
13424218893Sdim
13425309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
13426309124Sdim                                              int __b,
13427309124Sdim                                              vector unsigned short *__c) {
13428288943Sdim  return vec_st(
13429288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13430288943Sdim      __b, __c);
13431218893Sdim}
13432218893Sdim
13433309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector bool short __a, int __b,
13434309124Sdim                                              vector bool short *__c) {
13435288943Sdim  return vec_st(
13436288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13437288943Sdim      __b, __c);
13438218893Sdim}
13439218893Sdim
13440309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector pixel __a, int __b,
13441309124Sdim                                              vector pixel *__c) {
13442288943Sdim  return vec_st(
13443288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13444288943Sdim      __b, __c);
13445218893Sdim}
13446218893Sdim
13447309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
13448309124Sdim                                              int *__c) {
13449288943Sdim  return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
13450288943Sdim                __c);
13451218893Sdim}
13452218893Sdim
13453309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
13454309124Sdim                                              vector int *__c) {
13455288943Sdim  return vec_st(
13456288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13457288943Sdim      __b, __c);
13458218893Sdim}
13459218893Sdim
13460309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
13461309124Sdim                                              unsigned int *__c) {
13462288943Sdim  return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
13463288943Sdim                __c);
13464218893Sdim}
13465218893Sdim
13466309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
13467309124Sdim                                              vector unsigned int *__c) {
13468288943Sdim  return vec_st(
13469288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13470288943Sdim      __b, __c);
13471218893Sdim}
13472218893Sdim
13473309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector bool int __a, int __b,
13474309124Sdim                                              vector bool int *__c) {
13475288943Sdim  return vec_st(
13476288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13477288943Sdim      __b, __c);
13478218893Sdim}
13479218893Sdim
13480309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrx(vector float __a, int __b,
13481309124Sdim                                              vector float *__c) {
13482288943Sdim  return vec_st(
13483288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13484288943Sdim      __b, __c);
13485218893Sdim}
13486218893Sdim
13487218893Sdim/* vec_stvrxl */
13488218893Sdim
13489309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
13490309124Sdim                                               signed char *__c) {
13491288943Sdim  return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
13492288943Sdim                 __c);
13493218893Sdim}
13494218893Sdim
13495309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
13496309124Sdim                                               vector signed char *__c) {
13497288943Sdim  return vec_stl(
13498288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13499288943Sdim      __b, __c);
13500218893Sdim}
13501218893Sdim
13502309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
13503309124Sdim                                               int __b, unsigned char *__c) {
13504288943Sdim  return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
13505288943Sdim                 __c);
13506218893Sdim}
13507218893Sdim
13508309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
13509309124Sdim                                               int __b,
13510309124Sdim                                               vector unsigned char *__c) {
13511288943Sdim  return vec_stl(
13512288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13513288943Sdim      __b, __c);
13514218893Sdim}
13515218893Sdim
13516309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool char __a, int __b,
13517309124Sdim                                               vector bool char *__c) {
13518288943Sdim  return vec_stl(
13519288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13520288943Sdim      __b, __c);
13521218893Sdim}
13522218893Sdim
13523309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
13524309124Sdim                                               short *__c) {
13525288943Sdim  return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
13526288943Sdim                 __c);
13527218893Sdim}
13528218893Sdim
13529309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
13530309124Sdim                                               vector short *__c) {
13531288943Sdim  return vec_stl(
13532288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13533288943Sdim      __b, __c);
13534218893Sdim}
13535218893Sdim
13536309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
13537309124Sdim                                               int __b, unsigned short *__c) {
13538288943Sdim  return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
13539288943Sdim                 __c);
13540218893Sdim}
13541218893Sdim
13542309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
13543309124Sdim                                               int __b,
13544309124Sdim                                               vector unsigned short *__c) {
13545288943Sdim  return vec_stl(
13546288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13547288943Sdim      __b, __c);
13548218893Sdim}
13549218893Sdim
13550309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool short __a, int __b,
13551309124Sdim                                               vector bool short *__c) {
13552288943Sdim  return vec_stl(
13553288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13554288943Sdim      __b, __c);
13555218893Sdim}
13556218893Sdim
13557309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector pixel __a, int __b,
13558309124Sdim                                               vector pixel *__c) {
13559288943Sdim  return vec_stl(
13560288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13561288943Sdim      __b, __c);
13562218893Sdim}
13563218893Sdim
13564309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
13565309124Sdim                                               int *__c) {
13566288943Sdim  return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
13567288943Sdim                 __c);
13568218893Sdim}
13569218893Sdim
13570309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
13571309124Sdim                                               vector int *__c) {
13572288943Sdim  return vec_stl(
13573288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13574288943Sdim      __b, __c);
13575218893Sdim}
13576218893Sdim
13577309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
13578309124Sdim                                               unsigned int *__c) {
13579288943Sdim  return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
13580288943Sdim                 __c);
13581218893Sdim}
13582218893Sdim
13583309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
13584309124Sdim                                               vector unsigned int *__c) {
13585288943Sdim  return vec_stl(
13586288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13587288943Sdim      __b, __c);
13588218893Sdim}
13589218893Sdim
13590309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool int __a, int __b,
13591309124Sdim                                               vector bool int *__c) {
13592288943Sdim  return vec_stl(
13593288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13594288943Sdim      __b, __c);
13595218893Sdim}
13596218893Sdim
13597309124Sdimstatic __inline__ void __ATTRS_o_ai vec_stvrxl(vector float __a, int __b,
13598309124Sdim                                               vector float *__c) {
13599288943Sdim  return vec_stl(
13600288943Sdim      vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
13601288943Sdim      __b, __c);
13602218893Sdim}
13603218893Sdim
13604218893Sdim/* vec_promote */
13605218893Sdim
13606309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai vec_promote(signed char __a,
13607309124Sdim                                                              int __b) {
13608249423Sdim  vector signed char __res = (vector signed char)(0);
13609249423Sdim  __res[__b] = __a;
13610249423Sdim  return __res;
13611218893Sdim}
13612218893Sdim
13613309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
13614309124Sdimvec_promote(unsigned char __a, int __b) {
13615249423Sdim  vector unsigned char __res = (vector unsigned char)(0);
13616249423Sdim  __res[__b] = __a;
13617249423Sdim  return __res;
13618218893Sdim}
13619218893Sdim
13620309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_promote(short __a, int __b) {
13621249423Sdim  vector short __res = (vector short)(0);
13622249423Sdim  __res[__b] = __a;
13623249423Sdim  return __res;
13624218893Sdim}
13625218893Sdim
13626309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
13627309124Sdimvec_promote(unsigned short __a, int __b) {
13628249423Sdim  vector unsigned short __res = (vector unsigned short)(0);
13629249423Sdim  __res[__b] = __a;
13630249423Sdim  return __res;
13631218893Sdim}
13632218893Sdim
13633309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_promote(int __a, int __b) {
13634249423Sdim  vector int __res = (vector int)(0);
13635249423Sdim  __res[__b] = __a;
13636249423Sdim  return __res;
13637218893Sdim}
13638218893Sdim
13639309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai vec_promote(unsigned int __a,
13640309124Sdim                                                               int __b) {
13641249423Sdim  vector unsigned int __res = (vector unsigned int)(0);
13642249423Sdim  __res[__b] = __a;
13643249423Sdim  return __res;
13644218893Sdim}
13645218893Sdim
13646309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_promote(float __a, int __b) {
13647249423Sdim  vector float __res = (vector float)(0);
13648249423Sdim  __res[__b] = __a;
13649249423Sdim  return __res;
13650218893Sdim}
13651218893Sdim
13652218893Sdim/* vec_splats */
13653218893Sdim
13654309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai vec_splats(signed char __a) {
13655249423Sdim  return (vector signed char)(__a);
13656218893Sdim}
13657218893Sdim
13658309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
13659309124Sdimvec_splats(unsigned char __a) {
13660249423Sdim  return (vector unsigned char)(__a);
13661218893Sdim}
13662218893Sdim
13663309124Sdimstatic __inline__ vector short __ATTRS_o_ai vec_splats(short __a) {
13664249423Sdim  return (vector short)(__a);
13665218893Sdim}
13666218893Sdim
13667309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
13668309124Sdimvec_splats(unsigned short __a) {
13669249423Sdim  return (vector unsigned short)(__a);
13670218893Sdim}
13671218893Sdim
13672309124Sdimstatic __inline__ vector int __ATTRS_o_ai vec_splats(int __a) {
13673309124Sdim  return (vector int)(__a);
13674309124Sdim}
13675218893Sdim
13676309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
13677309124Sdimvec_splats(unsigned int __a) {
13678249423Sdim  return (vector unsigned int)(__a);
13679218893Sdim}
13680218893Sdim
13681296417Sdim#ifdef __VSX__
13682309124Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
13683309124Sdimvec_splats(signed long long __a) {
13684296417Sdim  return (vector signed long long)(__a);
13685296417Sdim}
13686296417Sdim
13687309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
13688296417Sdimvec_splats(unsigned long long __a) {
13689296417Sdim  return (vector unsigned long long)(__a);
13690296417Sdim}
13691296417Sdim
13692296417Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
13693309124Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
13694309124Sdimvec_splats(signed __int128 __a) {
13695296417Sdim  return (vector signed __int128)(__a);
13696296417Sdim}
13697296417Sdim
13698309124Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
13699296417Sdimvec_splats(unsigned __int128 __a) {
13700296417Sdim  return (vector unsigned __int128)(__a);
13701296417Sdim}
13702296417Sdim
13703296417Sdim#endif
13704296417Sdim
13705309124Sdimstatic __inline__ vector double __ATTRS_o_ai vec_splats(double __a) {
13706296417Sdim  return (vector double)(__a);
13707296417Sdim}
13708296417Sdim#endif
13709296417Sdim
13710309124Sdimstatic __inline__ vector float __ATTRS_o_ai vec_splats(float __a) {
13711249423Sdim  return (vector float)(__a);
13712218893Sdim}
13713218893Sdim
13714218893Sdim/* ----------------------------- predicates --------------------------------- */
13715218893Sdim
13716207619Srdivacky/* vec_all_eq */
13717207619Srdivacky
13718309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
13719309124Sdim                                              vector signed char __b) {
13720288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
13721288943Sdim                                      (vector char)__b);
13722207619Srdivacky}
13723207619Srdivacky
13724309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
13725309124Sdim                                              vector bool char __b) {
13726288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
13727288943Sdim                                      (vector char)__b);
13728212904Sdim}
13729212904Sdim
13730309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
13731309124Sdim                                              vector unsigned char __b) {
13732288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
13733288943Sdim                                      (vector char)__b);
13734207619Srdivacky}
13735207619Srdivacky
13736309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
13737309124Sdim                                              vector bool char __b) {
13738288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
13739288943Sdim                                      (vector char)__b);
13740212904Sdim}
13741212904Sdim
13742309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
13743309124Sdim                                              vector signed char __b) {
13744288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
13745288943Sdim                                      (vector char)__b);
13746212904Sdim}
13747212904Sdim
13748309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
13749309124Sdim                                              vector unsigned char __b) {
13750288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
13751288943Sdim                                      (vector char)__b);
13752212904Sdim}
13753212904Sdim
13754309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
13755309124Sdim                                              vector bool char __b) {
13756288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
13757288943Sdim                                      (vector char)__b);
13758212904Sdim}
13759212904Sdim
13760309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
13761309124Sdim                                              vector short __b) {
13762249423Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, __b);
13763207619Srdivacky}
13764207619Srdivacky
13765309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
13766309124Sdim                                              vector bool short __b) {
13767249423Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, (vector short)__b);
13768212904Sdim}
13769212904Sdim
13770309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
13771309124Sdim                                              vector unsigned short __b) {
13772288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
13773288943Sdim                                      (vector short)__b);
13774207619Srdivacky}
13775207619Srdivacky
13776309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
13777309124Sdim                                              vector bool short __b) {
13778288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
13779288943Sdim                                      (vector short)__b);
13780212904Sdim}
13781212904Sdim
13782309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
13783309124Sdim                                              vector short __b) {
13784288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
13785288943Sdim                                      (vector short)__b);
13786212904Sdim}
13787212904Sdim
13788309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
13789309124Sdim                                              vector unsigned short __b) {
13790288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
13791288943Sdim                                      (vector short)__b);
13792212904Sdim}
13793212904Sdim
13794309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
13795309124Sdim                                              vector bool short __b) {
13796288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
13797288943Sdim                                      (vector short)__b);
13798212904Sdim}
13799212904Sdim
13800309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector pixel __a,
13801309124Sdim                                              vector pixel __b) {
13802288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
13803288943Sdim                                      (vector short)__b);
13804212904Sdim}
13805212904Sdim
13806309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a, vector int __b) {
13807249423Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, __b);
13808207619Srdivacky}
13809207619Srdivacky
13810309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a,
13811309124Sdim                                              vector bool int __b) {
13812249423Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, (vector int)__b);
13813212904Sdim}
13814212904Sdim
13815309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
13816309124Sdim                                              vector unsigned int __b) {
13817288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
13818288943Sdim                                      (vector int)__b);
13819207619Srdivacky}
13820207619Srdivacky
13821309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
13822309124Sdim                                              vector bool int __b) {
13823288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
13824288943Sdim                                      (vector int)__b);
13825212904Sdim}
13826212904Sdim
13827309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
13828309124Sdim                                              vector int __b) {
13829288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
13830288943Sdim                                      (vector int)__b);
13831212904Sdim}
13832212904Sdim
13833309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
13834309124Sdim                                              vector unsigned int __b) {
13835288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
13836288943Sdim                                      (vector int)__b);
13837212904Sdim}
13838212904Sdim
13839309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
13840309124Sdim                                              vector bool int __b) {
13841288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
13842288943Sdim                                      (vector int)__b);
13843212904Sdim}
13844212904Sdim
13845288943Sdim#ifdef __POWER8_VECTOR__
13846309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector signed long long __a,
13847309124Sdim                                              vector signed long long __b) {
13848288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, __b);
13849288943Sdim}
13850288943Sdim
13851309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector long long __a,
13852309124Sdim                                              vector bool long long __b) {
13853288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, (vector long long)__b);
13854288943Sdim}
13855288943Sdim
13856309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
13857309124Sdim                                              vector unsigned long long __b) {
13858288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
13859288943Sdim                                      (vector long long)__b);
13860288943Sdim}
13861288943Sdim
13862309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
13863309124Sdim                                              vector bool long long __b) {
13864288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
13865288943Sdim                                      (vector long long)__b);
13866288943Sdim}
13867288943Sdim
13868309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
13869309124Sdim                                              vector long long __b) {
13870288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
13871288943Sdim                                      (vector long long)__b);
13872288943Sdim}
13873288943Sdim
13874309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
13875309124Sdim                                              vector unsigned long long __b) {
13876288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
13877288943Sdim                                      (vector long long)__b);
13878288943Sdim}
13879288943Sdim
13880309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
13881309124Sdim                                              vector bool long long __b) {
13882288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
13883288943Sdim                                      (vector long long)__b);
13884288943Sdim}
13885288943Sdim#endif
13886288943Sdim
13887309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector float __a,
13888309124Sdim                                              vector float __b) {
13889296417Sdim#ifdef __VSX__
13890296417Sdim  return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __b);
13891296417Sdim#else
13892249423Sdim  return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __b);
13893296417Sdim#endif
13894207619Srdivacky}
13895207619Srdivacky
13896296417Sdim#ifdef __VSX__
13897309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_eq(vector double __a,
13898309124Sdim                                              vector double __b) {
13899296417Sdim  return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __b);
13900296417Sdim}
13901296417Sdim#endif
13902296417Sdim
13903207619Srdivacky/* vec_all_ge */
13904207619Srdivacky
13905309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
13906309124Sdim                                              vector signed char __b) {
13907249423Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, __a);
13908207619Srdivacky}
13909207619Srdivacky
13910309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
13911309124Sdim                                              vector bool char __b) {
13912249423Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__b, __a);
13913212904Sdim}
13914212904Sdim
13915309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
13916309124Sdim                                              vector unsigned char __b) {
13917249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, __a);
13918207619Srdivacky}
13919207619Srdivacky
13920309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
13921309124Sdim                                              vector bool char __b) {
13922249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, __a);
13923212904Sdim}
13924212904Sdim
13925309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
13926309124Sdim                                              vector signed char __b) {
13927288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b,
13928249423Sdim                                      (vector unsigned char)__a);
13929212904Sdim}
13930212904Sdim
13931309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
13932309124Sdim                                              vector unsigned char __b) {
13933249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, (vector unsigned char)__a);
13934212904Sdim}
13935212904Sdim
13936309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
13937309124Sdim                                              vector bool char __b) {
13938288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b,
13939249423Sdim                                      (vector unsigned char)__a);
13940212904Sdim}
13941212904Sdim
13942309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
13943309124Sdim                                              vector short __b) {
13944249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, __a);
13945207619Srdivacky}
13946207619Srdivacky
13947309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
13948309124Sdim                                              vector bool short __b) {
13949249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector short)__b, __a);
13950212904Sdim}
13951212904Sdim
13952309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
13953309124Sdim                                              vector unsigned short __b) {
13954249423Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, __a);
13955207619Srdivacky}
13956207619Srdivacky
13957309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
13958309124Sdim                                              vector bool short __b) {
13959288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
13960288943Sdim                                      __a);
13961212904Sdim}
13962212904Sdim
13963309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
13964309124Sdim                                              vector short __b) {
13965288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
13966249423Sdim                                      (vector unsigned short)__a);
13967212904Sdim}
13968212904Sdim
13969309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
13970309124Sdim                                              vector unsigned short __b) {
13971288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b,
13972288943Sdim                                      (vector unsigned short)__a);
13973212904Sdim}
13974212904Sdim
13975309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
13976309124Sdim                                              vector bool short __b) {
13977288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
13978249423Sdim                                      (vector unsigned short)__a);
13979212904Sdim}
13980212904Sdim
13981309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a, vector int __b) {
13982249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, __a);
13983207619Srdivacky}
13984207619Srdivacky
13985309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a,
13986309124Sdim                                              vector bool int __b) {
13987249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector int)__b, __a);
13988212904Sdim}
13989212904Sdim
13990309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
13991309124Sdim                                              vector unsigned int __b) {
13992249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, __a);
13993207619Srdivacky}
13994207619Srdivacky
13995309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
13996309124Sdim                                              vector bool int __b) {
13997249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, __a);
13998212904Sdim}
13999212904Sdim
14000309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
14001309124Sdim                                              vector int __b) {
14002288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b,
14003249423Sdim                                      (vector unsigned int)__a);
14004212904Sdim}
14005212904Sdim
14006309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
14007309124Sdim                                              vector unsigned int __b) {
14008249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, (vector unsigned int)__a);
14009212904Sdim}
14010212904Sdim
14011309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
14012309124Sdim                                              vector bool int __b) {
14013288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b,
14014249423Sdim                                      (vector unsigned int)__a);
14015212904Sdim}
14016212904Sdim
14017288943Sdim#ifdef __POWER8_VECTOR__
14018309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
14019309124Sdim                                              vector signed long long __b) {
14020288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b, __a);
14021288943Sdim}
14022309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
14023309124Sdim                                              vector bool long long __b) {
14024288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__b,
14025288943Sdim                                      __a);
14026288943Sdim}
14027288943Sdim
14028309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
14029309124Sdim                                              vector unsigned long long __b) {
14030288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b, __a);
14031288943Sdim}
14032288943Sdim
14033309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
14034309124Sdim                                              vector bool long long __b) {
14035288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
14036288943Sdim                                      __a);
14037288943Sdim}
14038288943Sdim
14039309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
14040309124Sdim                                              vector signed long long __b) {
14041288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
14042288943Sdim                                      (vector unsigned long long)__a);
14043288943Sdim}
14044288943Sdim
14045309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
14046309124Sdim                                              vector unsigned long long __b) {
14047288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b,
14048288943Sdim                                      (vector unsigned long long)__a);
14049288943Sdim}
14050288943Sdim
14051309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
14052309124Sdim                                              vector bool long long __b) {
14053288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
14054288943Sdim                                      (vector unsigned long long)__a);
14055288943Sdim}
14056288943Sdim#endif
14057288943Sdim
14058309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector float __a,
14059309124Sdim                                              vector float __b) {
14060296417Sdim#ifdef __VSX__
14061296417Sdim  return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __a, __b);
14062296417Sdim#else
14063249423Sdim  return __builtin_altivec_vcmpgefp_p(__CR6_LT, __a, __b);
14064296417Sdim#endif
14065207619Srdivacky}
14066207619Srdivacky
14067296417Sdim#ifdef __VSX__
14068309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ge(vector double __a,
14069309124Sdim                                              vector double __b) {
14070296417Sdim  return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __a, __b);
14071296417Sdim}
14072296417Sdim#endif
14073296417Sdim
14074207619Srdivacky/* vec_all_gt */
14075207619Srdivacky
14076309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
14077309124Sdim                                              vector signed char __b) {
14078249423Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, __b);
14079207619Srdivacky}
14080207619Srdivacky
14081309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
14082309124Sdim                                              vector bool char __b) {
14083249423Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, (vector signed char)__b);
14084212904Sdim}
14085212904Sdim
14086309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
14087309124Sdim                                              vector unsigned char __b) {
14088249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, __b);
14089207619Srdivacky}
14090207619Srdivacky
14091309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
14092309124Sdim                                              vector bool char __b) {
14093249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, (vector unsigned char)__b);
14094212904Sdim}
14095212904Sdim
14096309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
14097309124Sdim                                              vector signed char __b) {
14098288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a,
14099249423Sdim                                      (vector unsigned char)__b);
14100212904Sdim}
14101212904Sdim
14102309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
14103309124Sdim                                              vector unsigned char __b) {
14104249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, __b);
14105212904Sdim}
14106212904Sdim
14107309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
14108309124Sdim                                              vector bool char __b) {
14109288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a,
14110249423Sdim                                      (vector unsigned char)__b);
14111212904Sdim}
14112212904Sdim
14113309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
14114309124Sdim                                              vector short __b) {
14115249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, __b);
14116207619Srdivacky}
14117207619Srdivacky
14118309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
14119309124Sdim                                              vector bool short __b) {
14120249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, (vector short)__b);
14121212904Sdim}
14122212904Sdim
14123309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
14124309124Sdim                                              vector unsigned short __b) {
14125249423Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, __b);
14126207619Srdivacky}
14127207619Srdivacky
14128309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
14129309124Sdim                                              vector bool short __b) {
14130288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a,
14131288943Sdim                                      (vector unsigned short)__b);
14132212904Sdim}
14133212904Sdim
14134309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
14135309124Sdim                                              vector short __b) {
14136288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
14137249423Sdim                                      (vector unsigned short)__b);
14138212904Sdim}
14139212904Sdim
14140309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
14141309124Sdim                                              vector unsigned short __b) {
14142288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
14143288943Sdim                                      __b);
14144212904Sdim}
14145212904Sdim
14146309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
14147309124Sdim                                              vector bool short __b) {
14148288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
14149249423Sdim                                      (vector unsigned short)__b);
14150212904Sdim}
14151212904Sdim
14152309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a, vector int __b) {
14153249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, __b);
14154207619Srdivacky}
14155207619Srdivacky
14156309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a,
14157309124Sdim                                              vector bool int __b) {
14158249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, (vector int)__b);
14159212904Sdim}
14160212904Sdim
14161309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
14162309124Sdim                                              vector unsigned int __b) {
14163249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, __b);
14164207619Srdivacky}
14165207619Srdivacky
14166309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
14167309124Sdim                                              vector bool int __b) {
14168249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, (vector unsigned int)__b);
14169212904Sdim}
14170212904Sdim
14171309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
14172309124Sdim                                              vector int __b) {
14173288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a,
14174249423Sdim                                      (vector unsigned int)__b);
14175212904Sdim}
14176212904Sdim
14177309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
14178309124Sdim                                              vector unsigned int __b) {
14179249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, __b);
14180212904Sdim}
14181212904Sdim
14182309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
14183309124Sdim                                              vector bool int __b) {
14184288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a,
14185249423Sdim                                      (vector unsigned int)__b);
14186212904Sdim}
14187212904Sdim
14188288943Sdim#ifdef __POWER8_VECTOR__
14189309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
14190309124Sdim                                              vector signed long long __b) {
14191288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a, __b);
14192288943Sdim}
14193309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
14194309124Sdim                                              vector bool long long __b) {
14195288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a,
14196288943Sdim                                      (vector signed long long)__b);
14197288943Sdim}
14198288943Sdim
14199309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
14200309124Sdim                                              vector unsigned long long __b) {
14201288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a, __b);
14202288943Sdim}
14203288943Sdim
14204309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
14205309124Sdim                                              vector bool long long __b) {
14206288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a,
14207288943Sdim                                      (vector unsigned long long)__b);
14208288943Sdim}
14209288943Sdim
14210309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
14211309124Sdim                                              vector signed long long __b) {
14212288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
14213288943Sdim                                      (vector unsigned long long)__b);
14214288943Sdim}
14215288943Sdim
14216309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
14217309124Sdim                                              vector unsigned long long __b) {
14218288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
14219288943Sdim                                      __b);
14220288943Sdim}
14221288943Sdim
14222309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
14223309124Sdim                                              vector bool long long __b) {
14224288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
14225288943Sdim                                      (vector unsigned long long)__b);
14226288943Sdim}
14227288943Sdim#endif
14228288943Sdim
14229309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector float __a,
14230309124Sdim                                              vector float __b) {
14231296417Sdim#ifdef __VSX__
14232296417Sdim  return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __a, __b);
14233296417Sdim#else
14234249423Sdim  return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __a, __b);
14235296417Sdim#endif
14236207619Srdivacky}
14237207619Srdivacky
14238296417Sdim#ifdef __VSX__
14239309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_gt(vector double __a,
14240309124Sdim                                              vector double __b) {
14241296417Sdim  return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __a, __b);
14242296417Sdim}
14243296417Sdim#endif
14244296417Sdim
14245207619Srdivacky/* vec_all_in */
14246207619Srdivacky
14247309124Sdimstatic __inline__ int __attribute__((__always_inline__))
14248288943Sdimvec_all_in(vector float __a, vector float __b) {
14249249423Sdim  return __builtin_altivec_vcmpbfp_p(__CR6_EQ, __a, __b);
14250207619Srdivacky}
14251207619Srdivacky
14252207619Srdivacky/* vec_all_le */
14253207619Srdivacky
14254309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
14255309124Sdim                                              vector signed char __b) {
14256249423Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, __b);
14257207619Srdivacky}
14258207619Srdivacky
14259309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
14260309124Sdim                                              vector bool char __b) {
14261249423Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, (vector signed char)__b);
14262212904Sdim}
14263212904Sdim
14264309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
14265309124Sdim                                              vector unsigned char __b) {
14266249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, __b);
14267207619Srdivacky}
14268207619Srdivacky
14269309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
14270309124Sdim                                              vector bool char __b) {
14271249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, (vector unsigned char)__b);
14272212904Sdim}
14273212904Sdim
14274309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
14275309124Sdim                                              vector signed char __b) {
14276288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a,
14277249423Sdim                                      (vector unsigned char)__b);
14278212904Sdim}
14279212904Sdim
14280309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
14281309124Sdim                                              vector unsigned char __b) {
14282249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, __b);
14283212904Sdim}
14284212904Sdim
14285309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
14286309124Sdim                                              vector bool char __b) {
14287288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a,
14288249423Sdim                                      (vector unsigned char)__b);
14289212904Sdim}
14290212904Sdim
14291309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
14292309124Sdim                                              vector short __b) {
14293249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, __b);
14294207619Srdivacky}
14295207619Srdivacky
14296309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
14297309124Sdim                                              vector bool short __b) {
14298249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, (vector short)__b);
14299212904Sdim}
14300212904Sdim
14301309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
14302309124Sdim                                              vector unsigned short __b) {
14303249423Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, __b);
14304207619Srdivacky}
14305207619Srdivacky
14306309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
14307309124Sdim                                              vector bool short __b) {
14308288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a,
14309288943Sdim                                      (vector unsigned short)__b);
14310212904Sdim}
14311212904Sdim
14312309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
14313309124Sdim                                              vector short __b) {
14314288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
14315249423Sdim                                      (vector unsigned short)__b);
14316212904Sdim}
14317212904Sdim
14318309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
14319309124Sdim                                              vector unsigned short __b) {
14320288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
14321288943Sdim                                      __b);
14322212904Sdim}
14323212904Sdim
14324309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
14325309124Sdim                                              vector bool short __b) {
14326288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
14327249423Sdim                                      (vector unsigned short)__b);
14328212904Sdim}
14329212904Sdim
14330309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector int __a, vector int __b) {
14331249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, __b);
14332207619Srdivacky}
14333207619Srdivacky
14334309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector int __a,
14335309124Sdim                                              vector bool int __b) {
14336249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, (vector int)__b);
14337212904Sdim}
14338212904Sdim
14339309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
14340309124Sdim                                              vector unsigned int __b) {
14341249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, __b);
14342207619Srdivacky}
14343207619Srdivacky
14344309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
14345309124Sdim                                              vector bool int __b) {
14346249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, (vector unsigned int)__b);
14347212904Sdim}
14348212904Sdim
14349309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
14350309124Sdim                                              vector int __b) {
14351288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a,
14352249423Sdim                                      (vector unsigned int)__b);
14353212904Sdim}
14354212904Sdim
14355309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
14356309124Sdim                                              vector unsigned int __b) {
14357249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, __b);
14358212904Sdim}
14359212904Sdim
14360309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
14361309124Sdim                                              vector bool int __b) {
14362288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a,
14363249423Sdim                                      (vector unsigned int)__b);
14364212904Sdim}
14365212904Sdim
14366288943Sdim#ifdef __POWER8_VECTOR__
14367309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
14368309124Sdim                                              vector signed long long __b) {
14369288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a, __b);
14370288943Sdim}
14371288943Sdim
14372309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
14373309124Sdim                                              vector unsigned long long __b) {
14374288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a, __b);
14375288943Sdim}
14376288943Sdim
14377309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
14378309124Sdim                                              vector bool long long __b) {
14379288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a,
14380288943Sdim                                      (vector signed long long)__b);
14381288943Sdim}
14382288943Sdim
14383309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
14384309124Sdim                                              vector bool long long __b) {
14385288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a,
14386288943Sdim                                      (vector unsigned long long)__b);
14387288943Sdim}
14388288943Sdim
14389309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
14390309124Sdim                                              vector signed long long __b) {
14391288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
14392288943Sdim                                      (vector unsigned long long)__b);
14393288943Sdim}
14394288943Sdim
14395309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
14396309124Sdim                                              vector unsigned long long __b) {
14397288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
14398288943Sdim                                      __b);
14399288943Sdim}
14400288943Sdim
14401309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
14402309124Sdim                                              vector bool long long __b) {
14403288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
14404288943Sdim                                      (vector unsigned long long)__b);
14405288943Sdim}
14406288943Sdim#endif
14407288943Sdim
14408309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector float __a,
14409309124Sdim                                              vector float __b) {
14410296417Sdim#ifdef __VSX__
14411296417Sdim  return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __b, __a);
14412296417Sdim#else
14413249423Sdim  return __builtin_altivec_vcmpgefp_p(__CR6_LT, __b, __a);
14414296417Sdim#endif
14415207619Srdivacky}
14416207619Srdivacky
14417296417Sdim#ifdef __VSX__
14418309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_le(vector double __a,
14419309124Sdim                                              vector double __b) {
14420296417Sdim  return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __b, __a);
14421296417Sdim}
14422296417Sdim#endif
14423296417Sdim
14424207619Srdivacky/* vec_all_lt */
14425207619Srdivacky
14426309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
14427309124Sdim                                              vector signed char __b) {
14428249423Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, __a);
14429207619Srdivacky}
14430207619Srdivacky
14431309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
14432309124Sdim                                              vector bool char __b) {
14433249423Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__b, __a);
14434212904Sdim}
14435212904Sdim
14436309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
14437309124Sdim                                              vector unsigned char __b) {
14438249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, __a);
14439207619Srdivacky}
14440207619Srdivacky
14441309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
14442309124Sdim                                              vector bool char __b) {
14443249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, __a);
14444212904Sdim}
14445212904Sdim
14446309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
14447309124Sdim                                              vector signed char __b) {
14448288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b,
14449249423Sdim                                      (vector unsigned char)__a);
14450212904Sdim}
14451212904Sdim
14452309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
14453309124Sdim                                              vector unsigned char __b) {
14454249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, (vector unsigned char)__a);
14455212904Sdim}
14456212904Sdim
14457309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
14458309124Sdim                                              vector bool char __b) {
14459288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b,
14460249423Sdim                                      (vector unsigned char)__a);
14461212904Sdim}
14462212904Sdim
14463309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
14464309124Sdim                                              vector short __b) {
14465249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, __a);
14466207619Srdivacky}
14467207619Srdivacky
14468309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
14469309124Sdim                                              vector bool short __b) {
14470249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector short)__b, __a);
14471212904Sdim}
14472212904Sdim
14473309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
14474309124Sdim                                              vector unsigned short __b) {
14475249423Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, __a);
14476207619Srdivacky}
14477207619Srdivacky
14478309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
14479309124Sdim                                              vector bool short __b) {
14480288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
14481288943Sdim                                      __a);
14482212904Sdim}
14483212904Sdim
14484309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
14485309124Sdim                                              vector short __b) {
14486288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
14487249423Sdim                                      (vector unsigned short)__a);
14488212904Sdim}
14489212904Sdim
14490309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
14491309124Sdim                                              vector unsigned short __b) {
14492288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b,
14493288943Sdim                                      (vector unsigned short)__a);
14494212904Sdim}
14495212904Sdim
14496309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
14497309124Sdim                                              vector bool short __b) {
14498288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
14499249423Sdim                                      (vector unsigned short)__a);
14500212904Sdim}
14501212904Sdim
14502309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a, vector int __b) {
14503249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, __a);
14504207619Srdivacky}
14505207619Srdivacky
14506309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a,
14507309124Sdim                                              vector bool int __b) {
14508249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector int)__b, __a);
14509212904Sdim}
14510212904Sdim
14511309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
14512309124Sdim                                              vector unsigned int __b) {
14513249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, __a);
14514207619Srdivacky}
14515207619Srdivacky
14516309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
14517309124Sdim                                              vector bool int __b) {
14518249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, __a);
14519212904Sdim}
14520212904Sdim
14521309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
14522309124Sdim                                              vector int __b) {
14523288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b,
14524249423Sdim                                      (vector unsigned int)__a);
14525212904Sdim}
14526212904Sdim
14527309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
14528309124Sdim                                              vector unsigned int __b) {
14529249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, (vector unsigned int)__a);
14530212904Sdim}
14531212904Sdim
14532309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
14533309124Sdim                                              vector bool int __b) {
14534288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b,
14535249423Sdim                                      (vector unsigned int)__a);
14536212904Sdim}
14537212904Sdim
14538288943Sdim#ifdef __POWER8_VECTOR__
14539309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
14540309124Sdim                                              vector signed long long __b) {
14541288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b, __a);
14542288943Sdim}
14543288943Sdim
14544309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
14545309124Sdim                                              vector unsigned long long __b) {
14546288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b, __a);
14547288943Sdim}
14548288943Sdim
14549309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
14550309124Sdim                                              vector bool long long __b) {
14551288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__b,
14552288943Sdim                                      __a);
14553288943Sdim}
14554288943Sdim
14555309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
14556309124Sdim                                              vector bool long long __b) {
14557288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
14558288943Sdim                                      __a);
14559288943Sdim}
14560288943Sdim
14561309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
14562309124Sdim                                              vector signed long long __b) {
14563288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
14564288943Sdim                                      (vector unsigned long long)__a);
14565288943Sdim}
14566288943Sdim
14567309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
14568309124Sdim                                              vector unsigned long long __b) {
14569288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b,
14570288943Sdim                                      (vector unsigned long long)__a);
14571288943Sdim}
14572288943Sdim
14573309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
14574309124Sdim                                              vector bool long long __b) {
14575288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
14576288943Sdim                                      (vector unsigned long long)__a);
14577288943Sdim}
14578288943Sdim#endif
14579288943Sdim
14580309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector float __a,
14581309124Sdim                                              vector float __b) {
14582296417Sdim#ifdef __VSX__
14583296417Sdim  return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __b, __a);
14584296417Sdim#else
14585249423Sdim  return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __b, __a);
14586296417Sdim#endif
14587207619Srdivacky}
14588207619Srdivacky
14589296417Sdim#ifdef __VSX__
14590309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_lt(vector double __a,
14591309124Sdim                                              vector double __b) {
14592296417Sdim  return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __b, __a);
14593296417Sdim}
14594296417Sdim#endif
14595296417Sdim
14596207619Srdivacky/* vec_all_nan */
14597207619Srdivacky
14598309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_nan(vector float __a) {
14599296417Sdim#ifdef __VSX__
14600296417Sdim  return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __a);
14601296417Sdim#else
14602249423Sdim  return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __a);
14603296417Sdim#endif
14604207619Srdivacky}
14605207619Srdivacky
14606296417Sdim#ifdef __VSX__
14607309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_nan(vector double __a) {
14608296417Sdim  return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __a);
14609296417Sdim}
14610296417Sdim#endif
14611296417Sdim
14612207619Srdivacky/* vec_all_ne */
14613207619Srdivacky
14614309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
14615309124Sdim                                              vector signed char __b) {
14616288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
14617288943Sdim                                      (vector char)__b);
14618207619Srdivacky}
14619207619Srdivacky
14620309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
14621309124Sdim                                              vector bool char __b) {
14622288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
14623288943Sdim                                      (vector char)__b);
14624212904Sdim}
14625212904Sdim
14626309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
14627309124Sdim                                              vector unsigned char __b) {
14628288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
14629288943Sdim                                      (vector char)__b);
14630207619Srdivacky}
14631207619Srdivacky
14632309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
14633309124Sdim                                              vector bool char __b) {
14634288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
14635288943Sdim                                      (vector char)__b);
14636212904Sdim}
14637212904Sdim
14638309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
14639309124Sdim                                              vector signed char __b) {
14640288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
14641288943Sdim                                      (vector char)__b);
14642212904Sdim}
14643212904Sdim
14644309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
14645309124Sdim                                              vector unsigned char __b) {
14646288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
14647288943Sdim                                      (vector char)__b);
14648212904Sdim}
14649212904Sdim
14650309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
14651309124Sdim                                              vector bool char __b) {
14652288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
14653288943Sdim                                      (vector char)__b);
14654212904Sdim}
14655212904Sdim
14656309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
14657309124Sdim                                              vector short __b) {
14658249423Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, __b);
14659207619Srdivacky}
14660207619Srdivacky
14661309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
14662309124Sdim                                              vector bool short __b) {
14663249423Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, (vector short)__b);
14664212904Sdim}
14665212904Sdim
14666309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
14667309124Sdim                                              vector unsigned short __b) {
14668288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
14669288943Sdim                                      (vector short)__b);
14670207619Srdivacky}
14671207619Srdivacky
14672309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
14673309124Sdim                                              vector bool short __b) {
14674288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
14675288943Sdim                                      (vector short)__b);
14676212904Sdim}
14677212904Sdim
14678309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
14679309124Sdim                                              vector short __b) {
14680288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
14681288943Sdim                                      (vector short)__b);
14682212904Sdim}
14683212904Sdim
14684309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
14685309124Sdim                                              vector unsigned short __b) {
14686288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
14687288943Sdim                                      (vector short)__b);
14688212904Sdim}
14689212904Sdim
14690309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
14691309124Sdim                                              vector bool short __b) {
14692288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
14693288943Sdim                                      (vector short)__b);
14694212904Sdim}
14695212904Sdim
14696309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector pixel __a,
14697309124Sdim                                              vector pixel __b) {
14698288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
14699288943Sdim                                      (vector short)__b);
14700212904Sdim}
14701212904Sdim
14702309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a, vector int __b) {
14703249423Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, __b);
14704207619Srdivacky}
14705207619Srdivacky
14706309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a,
14707309124Sdim                                              vector bool int __b) {
14708249423Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, (vector int)__b);
14709212904Sdim}
14710212904Sdim
14711309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
14712309124Sdim                                              vector unsigned int __b) {
14713288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
14714288943Sdim                                      (vector int)__b);
14715207619Srdivacky}
14716207619Srdivacky
14717309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
14718309124Sdim                                              vector bool int __b) {
14719288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
14720288943Sdim                                      (vector int)__b);
14721212904Sdim}
14722212904Sdim
14723309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
14724309124Sdim                                              vector int __b) {
14725288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
14726288943Sdim                                      (vector int)__b);
14727212904Sdim}
14728212904Sdim
14729309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
14730309124Sdim                                              vector unsigned int __b) {
14731288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
14732288943Sdim                                      (vector int)__b);
14733212904Sdim}
14734212904Sdim
14735309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
14736309124Sdim                                              vector bool int __b) {
14737288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
14738288943Sdim                                      (vector int)__b);
14739212904Sdim}
14740212904Sdim
14741288943Sdim#ifdef __POWER8_VECTOR__
14742309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
14743309124Sdim                                              vector signed long long __b) {
14744288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a, __b);
14745288943Sdim}
14746288943Sdim
14747309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
14748309124Sdim                                              vector unsigned long long __b) {
14749288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector long long)__a,
14750288943Sdim                                      (vector long long)__b);
14751288943Sdim}
14752288943Sdim
14753309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
14754309124Sdim                                              vector bool long long __b) {
14755288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a,
14756288943Sdim                                      (vector signed long long)__b);
14757288943Sdim}
14758288943Sdim
14759309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
14760309124Sdim                                              vector bool long long __b) {
14761288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
14762288943Sdim                                      (vector signed long long)__b);
14763288943Sdim}
14764288943Sdim
14765309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
14766309124Sdim                                              vector signed long long __b) {
14767288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
14768288943Sdim                                      (vector signed long long)__b);
14769288943Sdim}
14770288943Sdim
14771309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
14772309124Sdim                                              vector unsigned long long __b) {
14773288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
14774288943Sdim                                      (vector signed long long)__b);
14775288943Sdim}
14776288943Sdim
14777309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
14778309124Sdim                                              vector bool long long __b) {
14779288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
14780288943Sdim                                      (vector signed long long)__b);
14781288943Sdim}
14782288943Sdim#endif
14783288943Sdim
14784309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector float __a,
14785309124Sdim                                              vector float __b) {
14786296417Sdim#ifdef __VSX__
14787360784Sdim  return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __b);
14788296417Sdim#else
14789249423Sdim  return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __b);
14790296417Sdim#endif
14791207619Srdivacky}
14792207619Srdivacky
14793296417Sdim#ifdef __VSX__
14794309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ne(vector double __a,
14795309124Sdim                                              vector double __b) {
14796296417Sdim  return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __b);
14797296417Sdim}
14798296417Sdim#endif
14799296417Sdim
14800207619Srdivacky/* vec_all_nge */
14801207619Srdivacky
14802309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_nge(vector float __a,
14803309124Sdim                                               vector float __b) {
14804296417Sdim#ifdef __VSX__
14805296417Sdim  return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __a, __b);
14806296417Sdim#else
14807249423Sdim  return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __a, __b);
14808296417Sdim#endif
14809207619Srdivacky}
14810207619Srdivacky
14811296417Sdim#ifdef __VSX__
14812309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_nge(vector double __a,
14813309124Sdim                                               vector double __b) {
14814296417Sdim  return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __a, __b);
14815296417Sdim}
14816296417Sdim#endif
14817296417Sdim
14818207619Srdivacky/* vec_all_ngt */
14819207619Srdivacky
14820309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ngt(vector float __a,
14821309124Sdim                                               vector float __b) {
14822296417Sdim#ifdef __VSX__
14823296417Sdim  return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __a, __b);
14824296417Sdim#else
14825249423Sdim  return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __a, __b);
14826296417Sdim#endif
14827207619Srdivacky}
14828207619Srdivacky
14829296417Sdim#ifdef __VSX__
14830309124Sdimstatic __inline__ int __ATTRS_o_ai vec_all_ngt(vector double __a,
14831309124Sdim                                               vector double __b) {
14832296417Sdim  return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __a, __b);
14833296417Sdim}
14834296417Sdim#endif
14835296417Sdim
14836207619Srdivacky/* vec_all_nle */
14837207619Srdivacky
14838309124Sdimstatic __inline__ int __attribute__((__always_inline__))
14839288943Sdimvec_all_nle(vector float __a, vector float __b) {
14840249423Sdim  return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __b, __a);
14841207619Srdivacky}
14842207619Srdivacky
14843207619Srdivacky/* vec_all_nlt */
14844207619Srdivacky
14845309124Sdimstatic __inline__ int __attribute__((__always_inline__))
14846288943Sdimvec_all_nlt(vector float __a, vector float __b) {
14847249423Sdim  return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __b, __a);
14848207619Srdivacky}
14849207619Srdivacky
14850207619Srdivacky/* vec_all_numeric */
14851207619Srdivacky
14852309124Sdimstatic __inline__ int __attribute__((__always_inline__))
14853288943Sdimvec_all_numeric(vector float __a) {
14854249423Sdim  return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __a);
14855207619Srdivacky}
14856207619Srdivacky
14857207619Srdivacky/* vec_any_eq */
14858207619Srdivacky
14859309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
14860309124Sdim                                              vector signed char __b) {
14861288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
14862288943Sdim                                      (vector char)__b);
14863207619Srdivacky}
14864207619Srdivacky
14865309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
14866309124Sdim                                              vector bool char __b) {
14867288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
14868288943Sdim                                      (vector char)__b);
14869212904Sdim}
14870212904Sdim
14871309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
14872309124Sdim                                              vector unsigned char __b) {
14873288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
14874288943Sdim                                      (vector char)__b);
14875207619Srdivacky}
14876207619Srdivacky
14877309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
14878309124Sdim                                              vector bool char __b) {
14879288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
14880288943Sdim                                      (vector char)__b);
14881212904Sdim}
14882212904Sdim
14883309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
14884309124Sdim                                              vector signed char __b) {
14885288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
14886288943Sdim                                      (vector char)__b);
14887212904Sdim}
14888212904Sdim
14889309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
14890309124Sdim                                              vector unsigned char __b) {
14891288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
14892288943Sdim                                      (vector char)__b);
14893212904Sdim}
14894212904Sdim
14895309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
14896309124Sdim                                              vector bool char __b) {
14897288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
14898288943Sdim                                      (vector char)__b);
14899212904Sdim}
14900212904Sdim
14901309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
14902309124Sdim                                              vector short __b) {
14903249423Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, __b);
14904207619Srdivacky}
14905207619Srdivacky
14906309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
14907309124Sdim                                              vector bool short __b) {
14908249423Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, (vector short)__b);
14909212904Sdim}
14910212904Sdim
14911309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
14912309124Sdim                                              vector unsigned short __b) {
14913288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
14914249423Sdim                                      (vector short)__b);
14915207619Srdivacky}
14916207619Srdivacky
14917309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
14918309124Sdim                                              vector bool short __b) {
14919288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
14920249423Sdim                                      (vector short)__b);
14921212904Sdim}
14922212904Sdim
14923309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
14924309124Sdim                                              vector short __b) {
14925288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
14926249423Sdim                                      (vector short)__b);
14927212904Sdim}
14928212904Sdim
14929309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
14930309124Sdim                                              vector unsigned short __b) {
14931288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
14932249423Sdim                                      (vector short)__b);
14933212904Sdim}
14934212904Sdim
14935309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
14936309124Sdim                                              vector bool short __b) {
14937288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
14938249423Sdim                                      (vector short)__b);
14939212904Sdim}
14940212904Sdim
14941309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector pixel __a,
14942309124Sdim                                              vector pixel __b) {
14943288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
14944249423Sdim                                      (vector short)__b);
14945212904Sdim}
14946212904Sdim
14947309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a, vector int __b) {
14948249423Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, __b);
14949207619Srdivacky}
14950207619Srdivacky
14951309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a,
14952309124Sdim                                              vector bool int __b) {
14953249423Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, (vector int)__b);
14954212904Sdim}
14955212904Sdim
14956309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
14957309124Sdim                                              vector unsigned int __b) {
14958288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
14959288943Sdim                                      (vector int)__b);
14960207619Srdivacky}
14961207619Srdivacky
14962309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
14963309124Sdim                                              vector bool int __b) {
14964288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
14965288943Sdim                                      (vector int)__b);
14966212904Sdim}
14967212904Sdim
14968309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
14969309124Sdim                                              vector int __b) {
14970288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
14971288943Sdim                                      (vector int)__b);
14972212904Sdim}
14973212904Sdim
14974309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
14975309124Sdim                                              vector unsigned int __b) {
14976288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
14977288943Sdim                                      (vector int)__b);
14978212904Sdim}
14979212904Sdim
14980309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
14981309124Sdim                                              vector bool int __b) {
14982288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
14983288943Sdim                                      (vector int)__b);
14984212904Sdim}
14985212904Sdim
14986288943Sdim#ifdef __POWER8_VECTOR__
14987309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
14988309124Sdim                                              vector signed long long __b) {
14989288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a, __b);
14990288943Sdim}
14991288943Sdim
14992309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
14993309124Sdim                                              vector unsigned long long __b) {
14994288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector long long)__a,
14995288943Sdim                                      (vector long long)__b);
14996288943Sdim}
14997288943Sdim
14998309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
14999309124Sdim                                              vector bool long long __b) {
15000288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a,
15001288943Sdim                                      (vector signed long long)__b);
15002288943Sdim}
15003288943Sdim
15004309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
15005309124Sdim                                              vector bool long long __b) {
15006288943Sdim  return __builtin_altivec_vcmpequd_p(
15007288943Sdim      __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
15008288943Sdim}
15009288943Sdim
15010309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
15011309124Sdim                                              vector signed long long __b) {
15012288943Sdim  return __builtin_altivec_vcmpequd_p(
15013288943Sdim      __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
15014288943Sdim}
15015288943Sdim
15016309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
15017309124Sdim                                              vector unsigned long long __b) {
15018288943Sdim  return __builtin_altivec_vcmpequd_p(
15019288943Sdim      __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
15020288943Sdim}
15021288943Sdim
15022309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
15023309124Sdim                                              vector bool long long __b) {
15024288943Sdim  return __builtin_altivec_vcmpequd_p(
15025288943Sdim      __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
15026288943Sdim}
15027288943Sdim#endif
15028288943Sdim
15029309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector float __a,
15030309124Sdim                                              vector float __b) {
15031296417Sdim#ifdef __VSX__
15032296417Sdim  return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __b);
15033296417Sdim#else
15034249423Sdim  return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __b);
15035296417Sdim#endif
15036207619Srdivacky}
15037207619Srdivacky
15038296417Sdim#ifdef __VSX__
15039309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_eq(vector double __a,
15040309124Sdim                                              vector double __b) {
15041296417Sdim  return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __b);
15042296417Sdim}
15043296417Sdim#endif
15044296417Sdim
15045207619Srdivacky/* vec_any_ge */
15046207619Srdivacky
15047309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
15048309124Sdim                                              vector signed char __b) {
15049249423Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b, __a);
15050207619Srdivacky}
15051207619Srdivacky
15052309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
15053309124Sdim                                              vector bool char __b) {
15054288943Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__b,
15055288943Sdim                                      __a);
15056212904Sdim}
15057212904Sdim
15058309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
15059309124Sdim                                              vector unsigned char __b) {
15060249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, __a);
15061207619Srdivacky}
15062207619Srdivacky
15063309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
15064309124Sdim                                              vector bool char __b) {
15065288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
15066288943Sdim                                      __a);
15067212904Sdim}
15068212904Sdim
15069309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
15070309124Sdim                                              vector signed char __b) {
15071288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
15072249423Sdim                                      (vector unsigned char)__a);
15073212904Sdim}
15074212904Sdim
15075309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
15076309124Sdim                                              vector unsigned char __b) {
15077288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b,
15078288943Sdim                                      (vector unsigned char)__a);
15079212904Sdim}
15080212904Sdim
15081309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
15082309124Sdim                                              vector bool char __b) {
15083288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
15084249423Sdim                                      (vector unsigned char)__a);
15085212904Sdim}
15086212904Sdim
15087309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
15088309124Sdim                                              vector short __b) {
15089249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b, __a);
15090207619Srdivacky}
15091207619Srdivacky
15092309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
15093309124Sdim                                              vector bool short __b) {
15094249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector short)__b, __a);
15095212904Sdim}
15096212904Sdim
15097309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
15098309124Sdim                                              vector unsigned short __b) {
15099249423Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, __a);
15100207619Srdivacky}
15101207619Srdivacky
15102309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
15103309124Sdim                                              vector bool short __b) {
15104288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
15105288943Sdim                                      __a);
15106212904Sdim}
15107212904Sdim
15108309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
15109309124Sdim                                              vector short __b) {
15110288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
15111249423Sdim                                      (vector unsigned short)__a);
15112212904Sdim}
15113212904Sdim
15114309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
15115309124Sdim                                              vector unsigned short __b) {
15116288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b,
15117288943Sdim                                      (vector unsigned short)__a);
15118212904Sdim}
15119212904Sdim
15120309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
15121309124Sdim                                              vector bool short __b) {
15122288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
15123249423Sdim                                      (vector unsigned short)__a);
15124212904Sdim}
15125212904Sdim
15126309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a, vector int __b) {
15127249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b, __a);
15128207619Srdivacky}
15129207619Srdivacky
15130309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a,
15131309124Sdim                                              vector bool int __b) {
15132249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector int)__b, __a);
15133212904Sdim}
15134212904Sdim
15135309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
15136309124Sdim                                              vector unsigned int __b) {
15137249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, __a);
15138207619Srdivacky}
15139207619Srdivacky
15140309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
15141309124Sdim                                              vector bool int __b) {
15142288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
15143288943Sdim                                      __a);
15144212904Sdim}
15145212904Sdim
15146309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
15147309124Sdim                                              vector int __b) {
15148288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
15149249423Sdim                                      (vector unsigned int)__a);
15150212904Sdim}
15151212904Sdim
15152309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
15153309124Sdim                                              vector unsigned int __b) {
15154288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b,
15155288943Sdim                                      (vector unsigned int)__a);
15156212904Sdim}
15157212904Sdim
15158309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
15159309124Sdim                                              vector bool int __b) {
15160288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
15161249423Sdim                                      (vector unsigned int)__a);
15162212904Sdim}
15163212904Sdim
15164288943Sdim#ifdef __POWER8_VECTOR__
15165309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
15166309124Sdim                                              vector signed long long __b) {
15167288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b, __a);
15168288943Sdim}
15169288943Sdim
15170309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
15171309124Sdim                                              vector unsigned long long __b) {
15172288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b, __a);
15173288943Sdim}
15174288943Sdim
15175309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
15176309124Sdim                                              vector bool long long __b) {
15177288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,
15178288943Sdim                                      (vector signed long long)__b, __a);
15179288943Sdim}
15180288943Sdim
15181309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
15182309124Sdim                                              vector bool long long __b) {
15183288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
15184288943Sdim                                      (vector unsigned long long)__b, __a);
15185288943Sdim}
15186288943Sdim
15187309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
15188309124Sdim                                              vector signed long long __b) {
15189288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
15190288943Sdim                                      (vector unsigned long long)__b,
15191288943Sdim                                      (vector unsigned long long)__a);
15192288943Sdim}
15193288943Sdim
15194309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
15195309124Sdim                                              vector unsigned long long __b) {
15196288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b,
15197288943Sdim                                      (vector unsigned long long)__a);
15198288943Sdim}
15199288943Sdim
15200309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
15201309124Sdim                                              vector bool long long __b) {
15202288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
15203288943Sdim                                      (vector unsigned long long)__b,
15204288943Sdim                                      (vector unsigned long long)__a);
15205288943Sdim}
15206288943Sdim#endif
15207288943Sdim
15208309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector float __a,
15209309124Sdim                                              vector float __b) {
15210296417Sdim#ifdef __VSX__
15211296417Sdim  return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __a, __b);
15212296417Sdim#else
15213249423Sdim  return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __a, __b);
15214296417Sdim#endif
15215207619Srdivacky}
15216207619Srdivacky
15217296417Sdim#ifdef __VSX__
15218309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ge(vector double __a,
15219309124Sdim                                              vector double __b) {
15220296417Sdim  return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __a, __b);
15221296417Sdim}
15222296417Sdim#endif
15223296417Sdim
15224207619Srdivacky/* vec_any_gt */
15225207619Srdivacky
15226309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
15227309124Sdim                                              vector signed char __b) {
15228249423Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, __b);
15229207619Srdivacky}
15230207619Srdivacky
15231309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
15232309124Sdim                                              vector bool char __b) {
15233288943Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a,
15234288943Sdim                                      (vector signed char)__b);
15235212904Sdim}
15236212904Sdim
15237309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
15238309124Sdim                                              vector unsigned char __b) {
15239249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, __b);
15240207619Srdivacky}
15241207619Srdivacky
15242309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
15243309124Sdim                                              vector bool char __b) {
15244288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a,
15245288943Sdim                                      (vector unsigned char)__b);
15246212904Sdim}
15247212904Sdim
15248309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
15249309124Sdim                                              vector signed char __b) {
15250288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
15251249423Sdim                                      (vector unsigned char)__b);
15252212904Sdim}
15253212904Sdim
15254309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
15255309124Sdim                                              vector unsigned char __b) {
15256288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
15257288943Sdim                                      __b);
15258212904Sdim}
15259212904Sdim
15260309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
15261309124Sdim                                              vector bool char __b) {
15262288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
15263249423Sdim                                      (vector unsigned char)__b);
15264212904Sdim}
15265212904Sdim
15266309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
15267309124Sdim                                              vector short __b) {
15268249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, __b);
15269207619Srdivacky}
15270207619Srdivacky
15271309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
15272309124Sdim                                              vector bool short __b) {
15273249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, (vector short)__b);
15274212904Sdim}
15275212904Sdim
15276309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
15277309124Sdim                                              vector unsigned short __b) {
15278249423Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, __b);
15279207619Srdivacky}
15280207619Srdivacky
15281309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
15282309124Sdim                                              vector bool short __b) {
15283288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a,
15284288943Sdim                                      (vector unsigned short)__b);
15285212904Sdim}
15286212904Sdim
15287309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
15288309124Sdim                                              vector short __b) {
15289288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
15290249423Sdim                                      (vector unsigned short)__b);
15291212904Sdim}
15292212904Sdim
15293309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
15294309124Sdim                                              vector unsigned short __b) {
15295288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
15296288943Sdim                                      __b);
15297212904Sdim}
15298212904Sdim
15299309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
15300309124Sdim                                              vector bool short __b) {
15301288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
15302249423Sdim                                      (vector unsigned short)__b);
15303212904Sdim}
15304212904Sdim
15305309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a, vector int __b) {
15306249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, __b);
15307207619Srdivacky}
15308207619Srdivacky
15309309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a,
15310309124Sdim                                              vector bool int __b) {
15311249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, (vector int)__b);
15312212904Sdim}
15313212904Sdim
15314309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
15315309124Sdim                                              vector unsigned int __b) {
15316249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, __b);
15317207619Srdivacky}
15318207619Srdivacky
15319309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
15320309124Sdim                                              vector bool int __b) {
15321288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a,
15322288943Sdim                                      (vector unsigned int)__b);
15323212904Sdim}
15324212904Sdim
15325309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
15326309124Sdim                                              vector int __b) {
15327288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
15328249423Sdim                                      (vector unsigned int)__b);
15329212904Sdim}
15330212904Sdim
15331309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
15332309124Sdim                                              vector unsigned int __b) {
15333288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
15334288943Sdim                                      __b);
15335212904Sdim}
15336212904Sdim
15337309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
15338309124Sdim                                              vector bool int __b) {
15339288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
15340249423Sdim                                      (vector unsigned int)__b);
15341212904Sdim}
15342212904Sdim
15343288943Sdim#ifdef __POWER8_VECTOR__
15344309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
15345309124Sdim                                              vector signed long long __b) {
15346288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a, __b);
15347288943Sdim}
15348288943Sdim
15349309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
15350309124Sdim                                              vector unsigned long long __b) {
15351288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a, __b);
15352288943Sdim}
15353288943Sdim
15354309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
15355309124Sdim                                              vector bool long long __b) {
15356288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a,
15357288943Sdim                                      (vector signed long long)__b);
15358288943Sdim}
15359288943Sdim
15360309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
15361309124Sdim                                              vector bool long long __b) {
15362288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a,
15363288943Sdim                                      (vector unsigned long long)__b);
15364288943Sdim}
15365288943Sdim
15366309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
15367309124Sdim                                              vector signed long long __b) {
15368288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
15369288943Sdim                                      (vector unsigned long long)__a,
15370288943Sdim                                      (vector unsigned long long)__b);
15371288943Sdim}
15372288943Sdim
15373309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
15374309124Sdim                                              vector unsigned long long __b) {
15375288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
15376288943Sdim                                      (vector unsigned long long)__a, __b);
15377288943Sdim}
15378288943Sdim
15379309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
15380309124Sdim                                              vector bool long long __b) {
15381288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
15382288943Sdim                                      (vector unsigned long long)__a,
15383288943Sdim                                      (vector unsigned long long)__b);
15384288943Sdim}
15385288943Sdim#endif
15386288943Sdim
15387309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector float __a,
15388309124Sdim                                              vector float __b) {
15389296417Sdim#ifdef __VSX__
15390296417Sdim  return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __a, __b);
15391296417Sdim#else
15392249423Sdim  return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __a, __b);
15393296417Sdim#endif
15394207619Srdivacky}
15395207619Srdivacky
15396296417Sdim#ifdef __VSX__
15397309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_gt(vector double __a,
15398309124Sdim                                              vector double __b) {
15399296417Sdim  return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __a, __b);
15400296417Sdim}
15401296417Sdim#endif
15402296417Sdim
15403207619Srdivacky/* vec_any_le */
15404207619Srdivacky
15405309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
15406309124Sdim                                              vector signed char __b) {
15407249423Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, __b);
15408207619Srdivacky}
15409207619Srdivacky
15410309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
15411309124Sdim                                              vector bool char __b) {
15412288943Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a,
15413288943Sdim                                      (vector signed char)__b);
15414212904Sdim}
15415212904Sdim
15416309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
15417309124Sdim                                              vector unsigned char __b) {
15418249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, __b);
15419207619Srdivacky}
15420207619Srdivacky
15421309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
15422309124Sdim                                              vector bool char __b) {
15423288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a,
15424288943Sdim                                      (vector unsigned char)__b);
15425212904Sdim}
15426212904Sdim
15427309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
15428309124Sdim                                              vector signed char __b) {
15429288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
15430249423Sdim                                      (vector unsigned char)__b);
15431212904Sdim}
15432212904Sdim
15433309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
15434309124Sdim                                              vector unsigned char __b) {
15435288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
15436288943Sdim                                      __b);
15437212904Sdim}
15438212904Sdim
15439309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
15440309124Sdim                                              vector bool char __b) {
15441288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
15442249423Sdim                                      (vector unsigned char)__b);
15443212904Sdim}
15444212904Sdim
15445309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
15446309124Sdim                                              vector short __b) {
15447249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, __b);
15448207619Srdivacky}
15449207619Srdivacky
15450309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
15451309124Sdim                                              vector bool short __b) {
15452249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, (vector short)__b);
15453212904Sdim}
15454212904Sdim
15455309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
15456309124Sdim                                              vector unsigned short __b) {
15457249423Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, __b);
15458207619Srdivacky}
15459207619Srdivacky
15460309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
15461309124Sdim                                              vector bool short __b) {
15462288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a,
15463288943Sdim                                      (vector unsigned short)__b);
15464212904Sdim}
15465212904Sdim
15466309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
15467309124Sdim                                              vector short __b) {
15468288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
15469249423Sdim                                      (vector unsigned short)__b);
15470212904Sdim}
15471212904Sdim
15472309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
15473309124Sdim                                              vector unsigned short __b) {
15474288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
15475288943Sdim                                      __b);
15476212904Sdim}
15477212904Sdim
15478309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
15479309124Sdim                                              vector bool short __b) {
15480288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
15481249423Sdim                                      (vector unsigned short)__b);
15482212904Sdim}
15483212904Sdim
15484309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector int __a, vector int __b) {
15485249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, __b);
15486207619Srdivacky}
15487207619Srdivacky
15488309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector int __a,
15489309124Sdim                                              vector bool int __b) {
15490249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, (vector int)__b);
15491212904Sdim}
15492212904Sdim
15493309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
15494309124Sdim                                              vector unsigned int __b) {
15495249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, __b);
15496207619Srdivacky}
15497207619Srdivacky
15498309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
15499309124Sdim                                              vector bool int __b) {
15500288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a,
15501288943Sdim                                      (vector unsigned int)__b);
15502212904Sdim}
15503212904Sdim
15504309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
15505309124Sdim                                              vector int __b) {
15506288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
15507249423Sdim                                      (vector unsigned int)__b);
15508212904Sdim}
15509212904Sdim
15510309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
15511309124Sdim                                              vector unsigned int __b) {
15512288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
15513288943Sdim                                      __b);
15514212904Sdim}
15515212904Sdim
15516309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
15517309124Sdim                                              vector bool int __b) {
15518288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
15519249423Sdim                                      (vector unsigned int)__b);
15520212904Sdim}
15521212904Sdim
15522288943Sdim#ifdef __POWER8_VECTOR__
15523309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
15524309124Sdim                                              vector signed long long __b) {
15525288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a, __b);
15526288943Sdim}
15527288943Sdim
15528309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
15529309124Sdim                                              vector unsigned long long __b) {
15530288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a, __b);
15531288943Sdim}
15532288943Sdim
15533309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
15534309124Sdim                                              vector bool long long __b) {
15535288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a,
15536288943Sdim                                      (vector signed long long)__b);
15537288943Sdim}
15538288943Sdim
15539309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
15540309124Sdim                                              vector bool long long __b) {
15541288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a,
15542288943Sdim                                      (vector unsigned long long)__b);
15543288943Sdim}
15544288943Sdim
15545309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
15546309124Sdim                                              vector signed long long __b) {
15547288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
15548288943Sdim                                      (vector unsigned long long)__a,
15549288943Sdim                                      (vector unsigned long long)__b);
15550288943Sdim}
15551288943Sdim
15552309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
15553309124Sdim                                              vector unsigned long long __b) {
15554288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
15555288943Sdim                                      (vector unsigned long long)__a, __b);
15556288943Sdim}
15557288943Sdim
15558309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
15559309124Sdim                                              vector bool long long __b) {
15560288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
15561288943Sdim                                      (vector unsigned long long)__a,
15562288943Sdim                                      (vector unsigned long long)__b);
15563288943Sdim}
15564288943Sdim#endif
15565288943Sdim
15566309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector float __a,
15567309124Sdim                                              vector float __b) {
15568296417Sdim#ifdef __VSX__
15569296417Sdim  return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __b, __a);
15570296417Sdim#else
15571249423Sdim  return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __b, __a);
15572296417Sdim#endif
15573207619Srdivacky}
15574207619Srdivacky
15575296417Sdim#ifdef __VSX__
15576309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_le(vector double __a,
15577309124Sdim                                              vector double __b) {
15578296417Sdim  return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __b, __a);
15579296417Sdim}
15580296417Sdim#endif
15581296417Sdim
15582207619Srdivacky/* vec_any_lt */
15583207619Srdivacky
15584309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
15585309124Sdim                                              vector signed char __b) {
15586249423Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b, __a);
15587207619Srdivacky}
15588207619Srdivacky
15589309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
15590309124Sdim                                              vector bool char __b) {
15591288943Sdim  return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__b,
15592288943Sdim                                      __a);
15593212904Sdim}
15594212904Sdim
15595309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
15596309124Sdim                                              vector unsigned char __b) {
15597249423Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, __a);
15598207619Srdivacky}
15599207619Srdivacky
15600309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
15601309124Sdim                                              vector bool char __b) {
15602288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
15603288943Sdim                                      __a);
15604212904Sdim}
15605212904Sdim
15606309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
15607309124Sdim                                              vector signed char __b) {
15608288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
15609249423Sdim                                      (vector unsigned char)__a);
15610212904Sdim}
15611212904Sdim
15612309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
15613309124Sdim                                              vector unsigned char __b) {
15614288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b,
15615288943Sdim                                      (vector unsigned char)__a);
15616212904Sdim}
15617212904Sdim
15618309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
15619309124Sdim                                              vector bool char __b) {
15620288943Sdim  return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
15621249423Sdim                                      (vector unsigned char)__a);
15622212904Sdim}
15623212904Sdim
15624309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
15625309124Sdim                                              vector short __b) {
15626249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b, __a);
15627207619Srdivacky}
15628207619Srdivacky
15629309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
15630309124Sdim                                              vector bool short __b) {
15631249423Sdim  return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector short)__b, __a);
15632212904Sdim}
15633212904Sdim
15634309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
15635309124Sdim                                              vector unsigned short __b) {
15636249423Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, __a);
15637207619Srdivacky}
15638207619Srdivacky
15639309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
15640309124Sdim                                              vector bool short __b) {
15641288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
15642288943Sdim                                      __a);
15643212904Sdim}
15644212904Sdim
15645309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
15646309124Sdim                                              vector short __b) {
15647288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
15648249423Sdim                                      (vector unsigned short)__a);
15649212904Sdim}
15650212904Sdim
15651309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
15652309124Sdim                                              vector unsigned short __b) {
15653288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b,
15654288943Sdim                                      (vector unsigned short)__a);
15655212904Sdim}
15656212904Sdim
15657309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
15658309124Sdim                                              vector bool short __b) {
15659288943Sdim  return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
15660249423Sdim                                      (vector unsigned short)__a);
15661212904Sdim}
15662212904Sdim
15663309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a, vector int __b) {
15664249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b, __a);
15665207619Srdivacky}
15666207619Srdivacky
15667309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a,
15668309124Sdim                                              vector bool int __b) {
15669249423Sdim  return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector int)__b, __a);
15670212904Sdim}
15671212904Sdim
15672309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
15673309124Sdim                                              vector unsigned int __b) {
15674249423Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, __a);
15675207619Srdivacky}
15676207619Srdivacky
15677309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
15678309124Sdim                                              vector bool int __b) {
15679288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
15680288943Sdim                                      __a);
15681212904Sdim}
15682212904Sdim
15683309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
15684309124Sdim                                              vector int __b) {
15685288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
15686249423Sdim                                      (vector unsigned int)__a);
15687212904Sdim}
15688212904Sdim
15689309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
15690309124Sdim                                              vector unsigned int __b) {
15691288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b,
15692288943Sdim                                      (vector unsigned int)__a);
15693212904Sdim}
15694212904Sdim
15695309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
15696309124Sdim                                              vector bool int __b) {
15697288943Sdim  return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
15698249423Sdim                                      (vector unsigned int)__a);
15699212904Sdim}
15700212904Sdim
15701288943Sdim#ifdef __POWER8_VECTOR__
15702309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
15703309124Sdim                                              vector signed long long __b) {
15704288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b, __a);
15705288943Sdim}
15706288943Sdim
15707309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
15708309124Sdim                                              vector unsigned long long __b) {
15709288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b, __a);
15710288943Sdim}
15711288943Sdim
15712309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
15713309124Sdim                                              vector bool long long __b) {
15714288943Sdim  return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,
15715288943Sdim                                      (vector signed long long)__b, __a);
15716288943Sdim}
15717288943Sdim
15718309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
15719309124Sdim                                              vector bool long long __b) {
15720288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
15721288943Sdim                                      (vector unsigned long long)__b, __a);
15722288943Sdim}
15723288943Sdim
15724309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
15725309124Sdim                                              vector signed long long __b) {
15726288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
15727288943Sdim                                      (vector unsigned long long)__b,
15728288943Sdim                                      (vector unsigned long long)__a);
15729288943Sdim}
15730288943Sdim
15731309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
15732309124Sdim                                              vector unsigned long long __b) {
15733288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b,
15734288943Sdim                                      (vector unsigned long long)__a);
15735288943Sdim}
15736288943Sdim
15737309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
15738309124Sdim                                              vector bool long long __b) {
15739288943Sdim  return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
15740288943Sdim                                      (vector unsigned long long)__b,
15741288943Sdim                                      (vector unsigned long long)__a);
15742288943Sdim}
15743288943Sdim#endif
15744288943Sdim
15745309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector float __a,
15746309124Sdim                                              vector float __b) {
15747296417Sdim#ifdef __VSX__
15748296417Sdim  return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __b, __a);
15749296417Sdim#else
15750249423Sdim  return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __b, __a);
15751296417Sdim#endif
15752207619Srdivacky}
15753207619Srdivacky
15754296417Sdim#ifdef __VSX__
15755309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_lt(vector double __a,
15756309124Sdim                                              vector double __b) {
15757296417Sdim  return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __b, __a);
15758296417Sdim}
15759296417Sdim#endif
15760296417Sdim
15761207619Srdivacky/* vec_any_nan */
15762207619Srdivacky
15763309124Sdimstatic __inline__ int __attribute__((__always_inline__))
15764309124Sdimvec_any_nan(vector float __a) {
15765249423Sdim  return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __a);
15766207619Srdivacky}
15767207619Srdivacky
15768207619Srdivacky/* vec_any_ne */
15769207619Srdivacky
15770309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
15771309124Sdim                                              vector signed char __b) {
15772288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
15773288943Sdim                                      (vector char)__b);
15774207619Srdivacky}
15775207619Srdivacky
15776309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
15777309124Sdim                                              vector bool char __b) {
15778288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
15779288943Sdim                                      (vector char)__b);
15780212904Sdim}
15781212904Sdim
15782309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
15783309124Sdim                                              vector unsigned char __b) {
15784288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
15785288943Sdim                                      (vector char)__b);
15786207619Srdivacky}
15787207619Srdivacky
15788309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
15789309124Sdim                                              vector bool char __b) {
15790288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
15791288943Sdim                                      (vector char)__b);
15792212904Sdim}
15793212904Sdim
15794309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
15795309124Sdim                                              vector signed char __b) {
15796288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
15797288943Sdim                                      (vector char)__b);
15798212904Sdim}
15799212904Sdim
15800309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
15801309124Sdim                                              vector unsigned char __b) {
15802288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
15803288943Sdim                                      (vector char)__b);
15804212904Sdim}
15805212904Sdim
15806309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
15807309124Sdim                                              vector bool char __b) {
15808288943Sdim  return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
15809288943Sdim                                      (vector char)__b);
15810212904Sdim}
15811212904Sdim
15812309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
15813309124Sdim                                              vector short __b) {
15814249423Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, __b);
15815207619Srdivacky}
15816207619Srdivacky
15817309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
15818309124Sdim                                              vector bool short __b) {
15819249423Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, (vector short)__b);
15820212904Sdim}
15821212904Sdim
15822309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
15823309124Sdim                                              vector unsigned short __b) {
15824288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
15825249423Sdim                                      (vector short)__b);
15826207619Srdivacky}
15827207619Srdivacky
15828309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
15829309124Sdim                                              vector bool short __b) {
15830288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
15831249423Sdim                                      (vector short)__b);
15832212904Sdim}
15833212904Sdim
15834309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
15835309124Sdim                                              vector short __b) {
15836288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
15837249423Sdim                                      (vector short)__b);
15838212904Sdim}
15839212904Sdim
15840309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
15841309124Sdim                                              vector unsigned short __b) {
15842288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
15843249423Sdim                                      (vector short)__b);
15844212904Sdim}
15845212904Sdim
15846309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
15847309124Sdim                                              vector bool short __b) {
15848288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
15849249423Sdim                                      (vector short)__b);
15850212904Sdim}
15851212904Sdim
15852309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector pixel __a,
15853309124Sdim                                              vector pixel __b) {
15854288943Sdim  return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
15855249423Sdim                                      (vector short)__b);
15856212904Sdim}
15857212904Sdim
15858309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a, vector int __b) {
15859249423Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, __b);
15860207619Srdivacky}
15861207619Srdivacky
15862309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a,
15863309124Sdim                                              vector bool int __b) {
15864249423Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, (vector int)__b);
15865212904Sdim}
15866212904Sdim
15867309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
15868309124Sdim                                              vector unsigned int __b) {
15869288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
15870288943Sdim                                      (vector int)__b);
15871207619Srdivacky}
15872207619Srdivacky
15873309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
15874309124Sdim                                              vector bool int __b) {
15875288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
15876288943Sdim                                      (vector int)__b);
15877212904Sdim}
15878212904Sdim
15879309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
15880309124Sdim                                              vector int __b) {
15881288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
15882288943Sdim                                      (vector int)__b);
15883212904Sdim}
15884212904Sdim
15885309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
15886309124Sdim                                              vector unsigned int __b) {
15887288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
15888288943Sdim                                      (vector int)__b);
15889212904Sdim}
15890212904Sdim
15891309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
15892309124Sdim                                              vector bool int __b) {
15893288943Sdim  return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
15894288943Sdim                                      (vector int)__b);
15895212904Sdim}
15896212904Sdim
15897288943Sdim#ifdef __POWER8_VECTOR__
15898309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
15899309124Sdim                                              vector signed long long __b) {
15900288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a, __b);
15901288943Sdim}
15902288943Sdim
15903309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
15904309124Sdim                                              vector unsigned long long __b) {
15905288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, (vector long long)__a,
15906288943Sdim                                      (vector long long)__b);
15907288943Sdim}
15908288943Sdim
15909309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
15910309124Sdim                                              vector bool long long __b) {
15911288943Sdim  return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a,
15912288943Sdim                                      (vector signed long long)__b);
15913288943Sdim}
15914288943Sdim
15915309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
15916309124Sdim                                              vector bool long long __b) {
15917288943Sdim  return __builtin_altivec_vcmpequd_p(
15918288943Sdim      __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b);
15919288943Sdim}
15920288943Sdim
15921309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
15922309124Sdim                                              vector signed long long __b) {
15923288943Sdim  return __builtin_altivec_vcmpequd_p(
15924288943Sdim      __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b);
15925288943Sdim}
15926288943Sdim
15927309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
15928309124Sdim                                              vector unsigned long long __b) {
15929288943Sdim  return __builtin_altivec_vcmpequd_p(
15930288943Sdim      __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b);
15931288943Sdim}
15932288943Sdim
15933309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
15934309124Sdim                                              vector bool long long __b) {
15935288943Sdim  return __builtin_altivec_vcmpequd_p(
15936288943Sdim      __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b);
15937288943Sdim}
15938288943Sdim#endif
15939288943Sdim
15940309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector float __a,
15941309124Sdim                                              vector float __b) {
15942296417Sdim#ifdef __VSX__
15943296417Sdim  return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __b);
15944296417Sdim#else
15945249423Sdim  return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __b);
15946296417Sdim#endif
15947207619Srdivacky}
15948207619Srdivacky
15949296417Sdim#ifdef __VSX__
15950309124Sdimstatic __inline__ int __ATTRS_o_ai vec_any_ne(vector double __a,
15951309124Sdim                                              vector double __b) {
15952296417Sdim  return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __b);
15953296417Sdim}
15954296417Sdim#endif
15955296417Sdim
15956207619Srdivacky/* vec_any_nge */
15957207619Srdivacky
15958309124Sdimstatic __inline__ int __attribute__((__always_inline__))
15959288943Sdimvec_any_nge(vector float __a, vector float __b) {
15960249423Sdim  return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __a, __b);
15961207619Srdivacky}
15962207619Srdivacky
15963207619Srdivacky/* vec_any_ngt */
15964207619Srdivacky
15965309124Sdimstatic __inline__ int __attribute__((__always_inline__))
15966288943Sdimvec_any_ngt(vector float __a, vector float __b) {
15967249423Sdim  return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __a, __b);
15968207619Srdivacky}
15969207619Srdivacky
15970207619Srdivacky/* vec_any_nle */
15971207619Srdivacky
15972309124Sdimstatic __inline__ int __attribute__((__always_inline__))
15973288943Sdimvec_any_nle(vector float __a, vector float __b) {
15974249423Sdim  return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __b, __a);
15975207619Srdivacky}
15976207619Srdivacky
15977207619Srdivacky/* vec_any_nlt */
15978207619Srdivacky
15979309124Sdimstatic __inline__ int __attribute__((__always_inline__))
15980288943Sdimvec_any_nlt(vector float __a, vector float __b) {
15981249423Sdim  return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __b, __a);
15982207619Srdivacky}
15983207619Srdivacky
15984207619Srdivacky/* vec_any_numeric */
15985207619Srdivacky
15986309124Sdimstatic __inline__ int __attribute__((__always_inline__))
15987288943Sdimvec_any_numeric(vector float __a) {
15988249423Sdim  return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __a);
15989207619Srdivacky}
15990207619Srdivacky
15991207619Srdivacky/* vec_any_out */
15992207619Srdivacky
15993309124Sdimstatic __inline__ int __attribute__((__always_inline__))
15994288943Sdimvec_any_out(vector float __a, vector float __b) {
15995249423Sdim  return __builtin_altivec_vcmpbfp_p(__CR6_EQ_REV, __a, __b);
15996207619Srdivacky}
15997207619Srdivacky
15998288943Sdim/* Power 8 Crypto functions
15999288943SdimNote: We diverge from the current GCC implementation with regard
16000288943Sdimto cryptography and related functions as follows:
16001288943Sdim- Only the SHA and AES instructions and builtins are disabled by -mno-crypto
16002288943Sdim- The remaining ones are only available on Power8 and up so
16003288943Sdim  require -mpower8-vector
16004288943SdimThe justification for this is that export requirements require that
16005288943SdimCategory:Vector.Crypto is optional (i.e. compliant hardware may not provide
16006288943Sdimsupport). As a result, we need to be able to turn off support for those.
16007288943SdimThe remaining ones (currently controlled by -mcrypto for GCC) still
16008288943Sdimneed to be provided on compliant hardware even if Vector.Crypto is not
16009288943Sdimprovided.
16010288943Sdim*/
16011288943Sdim#ifdef __CRYPTO__
16012296417Sdim#define vec_sbox_be __builtin_altivec_crypto_vsbox
16013296417Sdim#define vec_cipher_be __builtin_altivec_crypto_vcipher
16014296417Sdim#define vec_cipherlast_be __builtin_altivec_crypto_vcipherlast
16015296417Sdim#define vec_ncipher_be __builtin_altivec_crypto_vncipher
16016296417Sdim#define vec_ncipherlast_be __builtin_altivec_crypto_vncipherlast
16017296417Sdim
16018309124Sdimstatic __inline__ vector unsigned long long __attribute__((__always_inline__))
16019288943Sdim__builtin_crypto_vsbox(vector unsigned long long __a) {
16020288943Sdim  return __builtin_altivec_crypto_vsbox(__a);
16021288943Sdim}
16022288943Sdim
16023309124Sdimstatic __inline__ vector unsigned long long __attribute__((__always_inline__))
16024288943Sdim__builtin_crypto_vcipher(vector unsigned long long __a,
16025288943Sdim                         vector unsigned long long __b) {
16026288943Sdim  return __builtin_altivec_crypto_vcipher(__a, __b);
16027288943Sdim}
16028288943Sdim
16029309124Sdimstatic __inline__ vector unsigned long long __attribute__((__always_inline__))
16030288943Sdim__builtin_crypto_vcipherlast(vector unsigned long long __a,
16031288943Sdim                             vector unsigned long long __b) {
16032288943Sdim  return __builtin_altivec_crypto_vcipherlast(__a, __b);
16033288943Sdim}
16034288943Sdim
16035309124Sdimstatic __inline__ vector unsigned long long __attribute__((__always_inline__))
16036288943Sdim__builtin_crypto_vncipher(vector unsigned long long __a,
16037288943Sdim                          vector unsigned long long __b) {
16038288943Sdim  return __builtin_altivec_crypto_vncipher(__a, __b);
16039288943Sdim}
16040288943Sdim
16041309124Sdimstatic __inline__ vector unsigned long long __attribute__((__always_inline__))
16042288943Sdim__builtin_crypto_vncipherlast(vector unsigned long long __a,
16043288943Sdim                              vector unsigned long long __b) {
16044288943Sdim  return __builtin_altivec_crypto_vncipherlast(__a, __b);
16045288943Sdim}
16046288943Sdim
16047288943Sdim#define __builtin_crypto_vshasigmad __builtin_altivec_crypto_vshasigmad
16048288943Sdim#define __builtin_crypto_vshasigmaw __builtin_altivec_crypto_vshasigmaw
16049296417Sdim
16050309124Sdim#define vec_shasigma_be(X, Y, Z)                                               \
16051309124Sdim  _Generic((X), vector unsigned int                                            \
16052309124Sdim           : __builtin_crypto_vshasigmaw, vector unsigned long long            \
16053309124Sdim           : __builtin_crypto_vshasigmad)((X), (Y), (Z))
16054288943Sdim#endif
16055288943Sdim
16056288943Sdim#ifdef __POWER8_VECTOR__
16057314564Sdimstatic __inline__ vector bool char __ATTRS_o_ai
16058314564Sdimvec_permxor(vector bool char __a, vector bool char __b,
16059314564Sdim            vector bool char __c) {
16060314564Sdim  return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
16061314564Sdim}
16062314564Sdim
16063314564Sdimstatic __inline__ vector signed char __ATTRS_o_ai
16064314564Sdimvec_permxor(vector signed char __a, vector signed char __b,
16065314564Sdim            vector signed char __c) {
16066314564Sdim  return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
16067314564Sdim}
16068314564Sdim
16069309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
16070314564Sdimvec_permxor(vector unsigned char __a, vector unsigned char __b,
16071314564Sdim            vector unsigned char __c) {
16072314564Sdim  return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
16073314564Sdim}
16074314564Sdim
16075314564Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
16076288943Sdim__builtin_crypto_vpermxor(vector unsigned char __a, vector unsigned char __b,
16077288943Sdim                          vector unsigned char __c) {
16078288943Sdim  return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
16079288943Sdim}
16080288943Sdim
16081309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
16082288943Sdim__builtin_crypto_vpermxor(vector unsigned short __a, vector unsigned short __b,
16083288943Sdim                          vector unsigned short __c) {
16084288943Sdim  return (vector unsigned short)__builtin_altivec_crypto_vpermxor(
16085288943Sdim      (vector unsigned char)__a, (vector unsigned char)__b,
16086288943Sdim      (vector unsigned char)__c);
16087288943Sdim}
16088288943Sdim
16089309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai __builtin_crypto_vpermxor(
16090288943Sdim    vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
16091288943Sdim  return (vector unsigned int)__builtin_altivec_crypto_vpermxor(
16092288943Sdim      (vector unsigned char)__a, (vector unsigned char)__b,
16093288943Sdim      (vector unsigned char)__c);
16094288943Sdim}
16095288943Sdim
16096309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
16097309124Sdim__builtin_crypto_vpermxor(vector unsigned long long __a,
16098309124Sdim                          vector unsigned long long __b,
16099309124Sdim                          vector unsigned long long __c) {
16100288943Sdim  return (vector unsigned long long)__builtin_altivec_crypto_vpermxor(
16101288943Sdim      (vector unsigned char)__a, (vector unsigned char)__b,
16102288943Sdim      (vector unsigned char)__c);
16103288943Sdim}
16104288943Sdim
16105309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
16106288943Sdim__builtin_crypto_vpmsumb(vector unsigned char __a, vector unsigned char __b) {
16107288943Sdim  return __builtin_altivec_crypto_vpmsumb(__a, __b);
16108288943Sdim}
16109288943Sdim
16110309124Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
16111288943Sdim__builtin_crypto_vpmsumb(vector unsigned short __a, vector unsigned short __b) {
16112288943Sdim  return __builtin_altivec_crypto_vpmsumh(__a, __b);
16113288943Sdim}
16114288943Sdim
16115309124Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
16116288943Sdim__builtin_crypto_vpmsumb(vector unsigned int __a, vector unsigned int __b) {
16117288943Sdim  return __builtin_altivec_crypto_vpmsumw(__a, __b);
16118288943Sdim}
16119288943Sdim
16120309124Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
16121296417Sdim__builtin_crypto_vpmsumb(vector unsigned long long __a,
16122296417Sdim                         vector unsigned long long __b) {
16123288943Sdim  return __builtin_altivec_crypto_vpmsumd(__a, __b);
16124288943Sdim}
16125288943Sdim
16126309124Sdimstatic __inline__ vector signed char __ATTRS_o_ai
16127309124Sdimvec_vgbbd(vector signed char __a) {
16128309124Sdim  return __builtin_altivec_vgbbd((vector unsigned char)__a);
16129288943Sdim}
16130288943Sdim
16131296417Sdim#define vec_pmsum_be __builtin_crypto_vpmsumb
16132296417Sdim#define vec_gb __builtin_altivec_vgbbd
16133296417Sdim
16134309124Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
16135309124Sdimvec_vgbbd(vector unsigned char __a) {
16136288943Sdim  return __builtin_altivec_vgbbd(__a);
16137288943Sdim}
16138288943Sdim
16139309124Sdimstatic __inline__ vector long long __ATTRS_o_ai
16140309124Sdimvec_vbpermq(vector signed char __a, vector signed char __b) {
16141309124Sdim  return __builtin_altivec_vbpermq((vector unsigned char)__a,
16142309124Sdim                                   (vector unsigned char)__b);
16143288943Sdim}
16144288943Sdim
16145309124Sdimstatic __inline__ vector long long __ATTRS_o_ai
16146309124Sdimvec_vbpermq(vector unsigned char __a, vector unsigned char __b) {
16147288943Sdim  return __builtin_altivec_vbpermq(__a, __b);
16148288943Sdim}
16149296417Sdim
16150296417Sdim#ifdef __powerpc64__
16151309124Sdimstatic __inline__ vector unsigned long long __attribute__((__always_inline__))
16152309124Sdimvec_bperm(vector unsigned __int128 __a, vector unsigned char __b) {
16153309124Sdim  return __builtin_altivec_vbpermq((vector unsigned char)__a,
16154309124Sdim                                   (vector unsigned char)__b);
16155296417Sdim}
16156288943Sdim#endif
16157296417Sdim#endif
16158288943Sdim
16159314564Sdim
16160314564Sdim/* vec_reve */
16161314564Sdim
16162314564Sdimstatic inline __ATTRS_o_ai vector bool char vec_reve(vector bool char __a) {
16163314564Sdim  return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
16164314564Sdim                                 5, 4, 3, 2, 1, 0);
16165314564Sdim}
16166314564Sdim
16167314564Sdimstatic inline __ATTRS_o_ai vector signed char vec_reve(vector signed char __a) {
16168314564Sdim  return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
16169314564Sdim                                 5, 4, 3, 2, 1, 0);
16170314564Sdim}
16171314564Sdim
16172314564Sdimstatic inline __ATTRS_o_ai vector unsigned char
16173314564Sdimvec_reve(vector unsigned char __a) {
16174314564Sdim  return __builtin_shufflevector(__a, __a, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6,
16175314564Sdim                                 5, 4, 3, 2, 1, 0);
16176314564Sdim}
16177314564Sdim
16178314564Sdimstatic inline __ATTRS_o_ai vector bool int vec_reve(vector bool int __a) {
16179314564Sdim  return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
16180314564Sdim}
16181314564Sdim
16182314564Sdimstatic inline __ATTRS_o_ai vector signed int vec_reve(vector signed int __a) {
16183314564Sdim  return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
16184314564Sdim}
16185314564Sdim
16186314564Sdimstatic inline __ATTRS_o_ai vector unsigned int
16187314564Sdimvec_reve(vector unsigned int __a) {
16188314564Sdim  return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
16189314564Sdim}
16190314564Sdim
16191314564Sdimstatic inline __ATTRS_o_ai vector bool short vec_reve(vector bool short __a) {
16192314564Sdim  return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
16193314564Sdim}
16194314564Sdim
16195314564Sdimstatic inline __ATTRS_o_ai vector signed short
16196314564Sdimvec_reve(vector signed short __a) {
16197314564Sdim  return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
16198314564Sdim}
16199314564Sdim
16200314564Sdimstatic inline __ATTRS_o_ai vector unsigned short
16201314564Sdimvec_reve(vector unsigned short __a) {
16202314564Sdim  return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0);
16203314564Sdim}
16204314564Sdim
16205314564Sdimstatic inline __ATTRS_o_ai vector float vec_reve(vector float __a) {
16206314564Sdim  return __builtin_shufflevector(__a, __a, 3, 2, 1, 0);
16207314564Sdim}
16208314564Sdim
16209314564Sdim#ifdef __VSX__
16210314564Sdimstatic inline __ATTRS_o_ai vector bool long long
16211314564Sdimvec_reve(vector bool long long __a) {
16212314564Sdim  return __builtin_shufflevector(__a, __a, 1, 0);
16213314564Sdim}
16214314564Sdim
16215314564Sdimstatic inline __ATTRS_o_ai vector signed long long
16216314564Sdimvec_reve(vector signed long long __a) {
16217314564Sdim  return __builtin_shufflevector(__a, __a, 1, 0);
16218314564Sdim}
16219314564Sdim
16220314564Sdimstatic inline __ATTRS_o_ai vector unsigned long long
16221314564Sdimvec_reve(vector unsigned long long __a) {
16222314564Sdim  return __builtin_shufflevector(__a, __a, 1, 0);
16223314564Sdim}
16224314564Sdim
16225314564Sdimstatic inline __ATTRS_o_ai vector double vec_reve(vector double __a) {
16226314564Sdim  return __builtin_shufflevector(__a, __a, 1, 0);
16227314564Sdim}
16228314564Sdim#endif
16229314564Sdim
16230314564Sdim/* vec_revb */
16231314564Sdimstatic __inline__ vector bool char __ATTRS_o_ai
16232314564Sdimvec_revb(vector bool char __a) {
16233314564Sdim  return __a;
16234314564Sdim}
16235314564Sdim
16236314564Sdimstatic __inline__ vector signed char __ATTRS_o_ai
16237314564Sdimvec_revb(vector signed char __a) {
16238314564Sdim  return __a;
16239314564Sdim}
16240314564Sdim
16241314564Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
16242314564Sdimvec_revb(vector unsigned char __a) {
16243314564Sdim  return __a;
16244314564Sdim}
16245314564Sdim
16246314564Sdimstatic __inline__ vector bool short __ATTRS_o_ai
16247314564Sdimvec_revb(vector bool short __a) {
16248314564Sdim  vector unsigned char __indices =
16249314564Sdim      { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
16250314564Sdim  return vec_perm(__a, __a, __indices);
16251314564Sdim}
16252314564Sdim
16253314564Sdimstatic __inline__ vector signed short __ATTRS_o_ai
16254314564Sdimvec_revb(vector signed short __a) {
16255314564Sdim  vector unsigned char __indices =
16256314564Sdim      { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
16257314564Sdim  return vec_perm(__a, __a, __indices);
16258314564Sdim}
16259314564Sdim
16260314564Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
16261314564Sdimvec_revb(vector unsigned short __a) {
16262314564Sdim  vector unsigned char __indices =
16263314564Sdim     { 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14 };
16264314564Sdim  return vec_perm(__a, __a, __indices);
16265314564Sdim}
16266314564Sdim
16267314564Sdimstatic __inline__ vector bool int __ATTRS_o_ai
16268314564Sdimvec_revb(vector bool int __a) {
16269314564Sdim  vector unsigned char __indices =
16270314564Sdim      { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
16271314564Sdim  return vec_perm(__a, __a, __indices);
16272314564Sdim}
16273314564Sdim
16274314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
16275314564Sdimvec_revb(vector signed int __a) {
16276314564Sdim  vector unsigned char __indices =
16277314564Sdim      { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
16278314564Sdim  return vec_perm(__a, __a, __indices);
16279314564Sdim}
16280314564Sdim
16281314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
16282314564Sdimvec_revb(vector unsigned int __a) {
16283314564Sdim  vector unsigned char __indices =
16284314564Sdim      { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
16285314564Sdim  return vec_perm(__a, __a, __indices);
16286314564Sdim}
16287314564Sdim
16288314564Sdimstatic __inline__ vector float __ATTRS_o_ai
16289314564Sdimvec_revb(vector float __a) {
16290314564Sdim vector unsigned char __indices =
16291314564Sdim      { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 };
16292314564Sdim return vec_perm(__a, __a, __indices);
16293314564Sdim}
16294314564Sdim
16295314564Sdim#ifdef __VSX__
16296314564Sdimstatic __inline__ vector bool long long __ATTRS_o_ai
16297314564Sdimvec_revb(vector bool long long __a) {
16298314564Sdim  vector unsigned char __indices =
16299314564Sdim      { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
16300314564Sdim  return vec_perm(__a, __a, __indices);
16301314564Sdim}
16302314564Sdim
16303314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
16304314564Sdimvec_revb(vector signed long long __a) {
16305314564Sdim  vector unsigned char __indices =
16306314564Sdim      { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
16307314564Sdim  return vec_perm(__a, __a, __indices);
16308314564Sdim}
16309314564Sdim
16310314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
16311314564Sdimvec_revb(vector unsigned long long __a) {
16312314564Sdim  vector unsigned char __indices =
16313314564Sdim      { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
16314314564Sdim  return vec_perm(__a, __a, __indices);
16315314564Sdim}
16316314564Sdim
16317314564Sdimstatic __inline__ vector double __ATTRS_o_ai
16318314564Sdimvec_revb(vector double __a) {
16319314564Sdim  vector unsigned char __indices =
16320314564Sdim      { 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8 };
16321314564Sdim  return vec_perm(__a, __a, __indices);
16322314564Sdim}
16323314564Sdim#endif /* End __VSX__ */
16324314564Sdim
16325314564Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
16326314564Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
16327314564Sdimvec_revb(vector signed __int128 __a) {
16328314564Sdim  vector unsigned char __indices =
16329314564Sdim      { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
16330314564Sdim  return (vector signed __int128)vec_perm((vector signed int)__a,
16331314564Sdim                                          (vector signed int)__a,
16332314564Sdim                                           __indices);
16333314564Sdim}
16334314564Sdim
16335314564Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
16336314564Sdimvec_revb(vector unsigned __int128 __a) {
16337314564Sdim  vector unsigned char __indices =
16338314564Sdim      { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
16339314564Sdim  return (vector unsigned __int128)vec_perm((vector signed int)__a,
16340314564Sdim                                            (vector signed int)__a,
16341314564Sdim                                             __indices);
16342314564Sdim}
16343314564Sdim#endif /* END __POWER8_VECTOR__ && __powerpc64__ */
16344314564Sdim
16345314564Sdim/* vec_xl */
16346314564Sdim
16347341825Sdimtypedef vector signed char unaligned_vec_schar __attribute__((aligned(1)));
16348341825Sdimtypedef vector unsigned char unaligned_vec_uchar __attribute__((aligned(1)));
16349341825Sdimtypedef vector signed short unaligned_vec_sshort __attribute__((aligned(1)));
16350341825Sdimtypedef vector unsigned short unaligned_vec_ushort __attribute__((aligned(1)));
16351341825Sdimtypedef vector signed int unaligned_vec_sint __attribute__((aligned(1)));
16352341825Sdimtypedef vector unsigned int unaligned_vec_uint __attribute__((aligned(1)));
16353341825Sdimtypedef vector float unaligned_vec_float __attribute__((aligned(1)));
16354341825Sdim
16355314564Sdimstatic inline __ATTRS_o_ai vector signed char vec_xl(signed long long __offset,
16356314564Sdim                                                     signed char *__ptr) {
16357341825Sdim  return *(unaligned_vec_schar *)(__ptr + __offset);
16358314564Sdim}
16359314564Sdim
16360314564Sdimstatic inline __ATTRS_o_ai vector unsigned char
16361314564Sdimvec_xl(signed long long __offset, unsigned char *__ptr) {
16362341825Sdim  return *(unaligned_vec_uchar*)(__ptr + __offset);
16363314564Sdim}
16364314564Sdim
16365314564Sdimstatic inline __ATTRS_o_ai vector signed short vec_xl(signed long long __offset,
16366314564Sdim                                                      signed short *__ptr) {
16367360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16368360784Sdim  return *(unaligned_vec_sshort *)__addr;
16369314564Sdim}
16370314564Sdim
16371314564Sdimstatic inline __ATTRS_o_ai vector unsigned short
16372314564Sdimvec_xl(signed long long __offset, unsigned short *__ptr) {
16373360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16374360784Sdim  return *(unaligned_vec_ushort *)__addr;
16375314564Sdim}
16376314564Sdim
16377314564Sdimstatic inline __ATTRS_o_ai vector signed int vec_xl(signed long long __offset,
16378314564Sdim                                                    signed int *__ptr) {
16379360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16380360784Sdim  return *(unaligned_vec_sint *)__addr;
16381314564Sdim}
16382314564Sdim
16383314564Sdimstatic inline __ATTRS_o_ai vector unsigned int vec_xl(signed long long __offset,
16384314564Sdim                                                      unsigned int *__ptr) {
16385360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16386360784Sdim  return *(unaligned_vec_uint *)__addr;
16387314564Sdim}
16388314564Sdim
16389314564Sdimstatic inline __ATTRS_o_ai vector float vec_xl(signed long long __offset,
16390314564Sdim                                               float *__ptr) {
16391360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16392360784Sdim  return *(unaligned_vec_float *)__addr;
16393314564Sdim}
16394314564Sdim
16395314564Sdim#ifdef __VSX__
16396341825Sdimtypedef vector signed long long unaligned_vec_sll __attribute__((aligned(1)));
16397341825Sdimtypedef vector unsigned long long unaligned_vec_ull __attribute__((aligned(1)));
16398341825Sdimtypedef vector double unaligned_vec_double __attribute__((aligned(1)));
16399341825Sdim
16400314564Sdimstatic inline __ATTRS_o_ai vector signed long long
16401314564Sdimvec_xl(signed long long __offset, signed long long *__ptr) {
16402360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16403360784Sdim  return *(unaligned_vec_sll *)__addr;
16404314564Sdim}
16405314564Sdim
16406314564Sdimstatic inline __ATTRS_o_ai vector unsigned long long
16407314564Sdimvec_xl(signed long long __offset, unsigned long long *__ptr) {
16408360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16409360784Sdim  return *(unaligned_vec_ull *)__addr;
16410314564Sdim}
16411314564Sdim
16412314564Sdimstatic inline __ATTRS_o_ai vector double vec_xl(signed long long __offset,
16413314564Sdim                                                double *__ptr) {
16414360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16415360784Sdim  return *(unaligned_vec_double *)__addr;
16416314564Sdim}
16417314564Sdim#endif
16418314564Sdim
16419314564Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
16420341825Sdimtypedef vector signed __int128 unaligned_vec_si128 __attribute__((aligned(1)));
16421341825Sdimtypedef vector unsigned __int128 unaligned_vec_ui128
16422341825Sdim    __attribute__((aligned(1)));
16423314564Sdimstatic inline __ATTRS_o_ai vector signed __int128
16424314564Sdimvec_xl(signed long long __offset, signed __int128 *__ptr) {
16425360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16426360784Sdim  return *(unaligned_vec_si128 *)__addr;
16427314564Sdim}
16428314564Sdim
16429314564Sdimstatic inline __ATTRS_o_ai vector unsigned __int128
16430314564Sdimvec_xl(signed long long __offset, unsigned __int128 *__ptr) {
16431360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16432360784Sdim  return *(unaligned_vec_ui128 *)__addr;
16433314564Sdim}
16434314564Sdim#endif
16435314564Sdim
16436314564Sdim/* vec_xl_be */
16437314564Sdim
16438314564Sdim#ifdef __LITTLE_ENDIAN__
16439314564Sdimstatic __inline__ vector signed char __ATTRS_o_ai
16440314564Sdimvec_xl_be(signed long long __offset, signed char *__ptr) {
16441360784Sdim  vector signed char __vec = (vector signed char)__builtin_vsx_lxvd2x_be(__offset, __ptr);
16442314564Sdim  return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
16443314564Sdim                                 13, 12, 11, 10, 9, 8);
16444314564Sdim}
16445314564Sdim
16446314564Sdimstatic __inline__ vector unsigned char __ATTRS_o_ai
16447314564Sdimvec_xl_be(signed long long __offset, unsigned char *__ptr) {
16448360784Sdim  vector unsigned char __vec = (vector unsigned char)__builtin_vsx_lxvd2x_be(__offset, __ptr);
16449314564Sdim  return __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
16450314564Sdim                                 13, 12, 11, 10, 9, 8);
16451314564Sdim}
16452314564Sdim
16453314564Sdimstatic __inline__ vector signed short  __ATTRS_o_ai
16454314564Sdimvec_xl_be(signed long long __offset, signed short *__ptr) {
16455360784Sdim  vector signed short __vec = (vector signed short)__builtin_vsx_lxvd2x_be(__offset, __ptr);
16456314564Sdim  return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
16457314564Sdim}
16458314564Sdim
16459314564Sdimstatic __inline__ vector unsigned short __ATTRS_o_ai
16460314564Sdimvec_xl_be(signed long long __offset, unsigned short *__ptr) {
16461360784Sdim  vector unsigned short __vec = (vector unsigned short)__builtin_vsx_lxvd2x_be(__offset, __ptr);
16462314564Sdim  return __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
16463314564Sdim}
16464314564Sdim
16465314564Sdimstatic __inline__ vector signed int __ATTRS_o_ai
16466314564Sdimvec_xl_be(signed long long  __offset, signed int *__ptr) {
16467314564Sdim  return (vector signed int)__builtin_vsx_lxvw4x_be(__offset, __ptr);
16468314564Sdim}
16469314564Sdim
16470314564Sdimstatic __inline__ vector unsigned int __ATTRS_o_ai
16471314564Sdimvec_xl_be(signed long long  __offset, unsigned int *__ptr) {
16472314564Sdim  return (vector unsigned int)__builtin_vsx_lxvw4x_be(__offset, __ptr);
16473314564Sdim}
16474314564Sdim
16475314564Sdimstatic __inline__ vector float __ATTRS_o_ai
16476314564Sdimvec_xl_be(signed long long  __offset, float *__ptr) {
16477314564Sdim  return (vector float)__builtin_vsx_lxvw4x_be(__offset, __ptr);
16478314564Sdim}
16479314564Sdim
16480314564Sdim#ifdef __VSX__
16481314564Sdimstatic __inline__ vector signed long long __ATTRS_o_ai
16482314564Sdimvec_xl_be(signed long long  __offset, signed long long *__ptr) {
16483314564Sdim  return (vector signed long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);
16484314564Sdim}
16485314564Sdim
16486314564Sdimstatic __inline__ vector unsigned long long __ATTRS_o_ai
16487314564Sdimvec_xl_be(signed long long  __offset, unsigned long long *__ptr) {
16488314564Sdim  return (vector unsigned long long)__builtin_vsx_lxvd2x_be(__offset, __ptr);
16489314564Sdim}
16490314564Sdim
16491314564Sdimstatic __inline__ vector double __ATTRS_o_ai
16492314564Sdimvec_xl_be(signed long long  __offset, double *__ptr) {
16493314564Sdim  return (vector double)__builtin_vsx_lxvd2x_be(__offset, __ptr);
16494314564Sdim}
16495314564Sdim#endif
16496314564Sdim
16497314564Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
16498314564Sdimstatic __inline__ vector signed __int128 __ATTRS_o_ai
16499314564Sdimvec_xl_be(signed long long  __offset, signed __int128 *__ptr) {
16500314564Sdim  return vec_xl(__offset, __ptr);
16501314564Sdim}
16502314564Sdim
16503314564Sdimstatic __inline__ vector unsigned __int128 __ATTRS_o_ai
16504314564Sdimvec_xl_be(signed long long  __offset, unsigned __int128 *__ptr) {
16505314564Sdim  return vec_xl(__offset, __ptr);
16506314564Sdim}
16507314564Sdim#endif
16508314564Sdim#else
16509314564Sdim  #define vec_xl_be vec_xl
16510314564Sdim#endif
16511314564Sdim
16512314564Sdim/* vec_xst */
16513314564Sdim
16514314564Sdimstatic inline __ATTRS_o_ai void vec_xst(vector signed char __vec,
16515314564Sdim                                        signed long long __offset,
16516314564Sdim                                        signed char *__ptr) {
16517341825Sdim  *(unaligned_vec_schar *)(__ptr + __offset) = __vec;
16518314564Sdim}
16519314564Sdim
16520314564Sdimstatic inline __ATTRS_o_ai void vec_xst(vector unsigned char __vec,
16521314564Sdim                                        signed long long __offset,
16522314564Sdim                                        unsigned char *__ptr) {
16523341825Sdim  *(unaligned_vec_uchar *)(__ptr + __offset) = __vec;
16524314564Sdim}
16525314564Sdim
16526314564Sdimstatic inline __ATTRS_o_ai void vec_xst(vector signed short __vec,
16527314564Sdim                                        signed long long __offset,
16528314564Sdim                                        signed short *__ptr) {
16529360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16530360784Sdim  *(unaligned_vec_sshort *)__addr = __vec;
16531314564Sdim}
16532314564Sdim
16533314564Sdimstatic inline __ATTRS_o_ai void vec_xst(vector unsigned short __vec,
16534314564Sdim                                        signed long long __offset,
16535314564Sdim                                        unsigned short *__ptr) {
16536360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16537360784Sdim  *(unaligned_vec_ushort *)__addr = __vec;
16538314564Sdim}
16539314564Sdim
16540314564Sdimstatic inline __ATTRS_o_ai void vec_xst(vector signed int __vec,
16541314564Sdim                                        signed long long __offset,
16542314564Sdim                                        signed int *__ptr) {
16543360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16544360784Sdim  *(unaligned_vec_sint *)__addr = __vec;
16545314564Sdim}
16546314564Sdim
16547314564Sdimstatic inline __ATTRS_o_ai void vec_xst(vector unsigned int __vec,
16548314564Sdim                                        signed long long __offset,
16549314564Sdim                                        unsigned int *__ptr) {
16550360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16551360784Sdim  *(unaligned_vec_uint *)__addr = __vec;
16552314564Sdim}
16553314564Sdim
16554314564Sdimstatic inline __ATTRS_o_ai void vec_xst(vector float __vec,
16555314564Sdim                                        signed long long __offset,
16556314564Sdim                                        float *__ptr) {
16557360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16558360784Sdim  *(unaligned_vec_float *)__addr = __vec;
16559314564Sdim}
16560314564Sdim
16561314564Sdim#ifdef __VSX__
16562314564Sdimstatic inline __ATTRS_o_ai void vec_xst(vector signed long long __vec,
16563314564Sdim                                        signed long long __offset,
16564314564Sdim                                        signed long long *__ptr) {
16565360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16566360784Sdim  *(unaligned_vec_sll *)__addr = __vec;
16567314564Sdim}
16568314564Sdim
16569314564Sdimstatic inline __ATTRS_o_ai void vec_xst(vector unsigned long long __vec,
16570314564Sdim                                        signed long long __offset,
16571314564Sdim                                        unsigned long long *__ptr) {
16572360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16573360784Sdim  *(unaligned_vec_ull *)__addr = __vec;
16574314564Sdim}
16575314564Sdim
16576314564Sdimstatic inline __ATTRS_o_ai void vec_xst(vector double __vec,
16577314564Sdim                                        signed long long __offset,
16578314564Sdim                                        double *__ptr) {
16579360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16580360784Sdim  *(unaligned_vec_double *)__addr = __vec;
16581314564Sdim}
16582314564Sdim#endif
16583314564Sdim
16584314564Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
16585314564Sdimstatic inline __ATTRS_o_ai void vec_xst(vector signed __int128 __vec,
16586314564Sdim                                        signed long long __offset,
16587314564Sdim                                        signed __int128 *__ptr) {
16588360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16589360784Sdim  *(unaligned_vec_si128 *)__addr = __vec;
16590314564Sdim}
16591314564Sdim
16592314564Sdimstatic inline __ATTRS_o_ai void vec_xst(vector unsigned __int128 __vec,
16593314564Sdim                                        signed long long __offset,
16594314564Sdim                                        unsigned __int128 *__ptr) {
16595360784Sdim  signed char *__addr = (signed char *)__ptr + __offset;
16596360784Sdim  *(unaligned_vec_ui128 *)__addr = __vec;
16597314564Sdim}
16598314564Sdim#endif
16599314564Sdim
16600314564Sdim/* vec_xst_be */
16601314564Sdim
16602314564Sdim#ifdef __LITTLE_ENDIAN__
16603314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_be(vector signed char __vec,
16604314564Sdim                                               signed long long  __offset,
16605314564Sdim                                               signed char *__ptr) {
16606314564Sdim  vector signed char __tmp =
16607314564Sdim     __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
16608314564Sdim                             13, 12, 11, 10, 9, 8);
16609360784Sdim  typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
16610360784Sdim  __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
16611314564Sdim}
16612314564Sdim
16613314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned char __vec,
16614314564Sdim                                               signed long long  __offset,
16615314564Sdim                                               unsigned char *__ptr) {
16616314564Sdim  vector unsigned char __tmp =
16617314564Sdim     __builtin_shufflevector(__vec, __vec, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14,
16618314564Sdim                             13, 12, 11, 10, 9, 8);
16619360784Sdim  typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
16620360784Sdim  __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
16621314564Sdim}
16622314564Sdim
16623314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_be(vector signed short __vec,
16624314564Sdim                                               signed long long  __offset,
16625314564Sdim                                               signed short *__ptr) {
16626314564Sdim  vector signed short __tmp =
16627314564Sdim     __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
16628360784Sdim  typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
16629360784Sdim  __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
16630314564Sdim}
16631314564Sdim
16632314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned short __vec,
16633314564Sdim                                               signed long long  __offset,
16634314564Sdim                                               unsigned short *__ptr) {
16635314564Sdim  vector unsigned short __tmp =
16636314564Sdim     __builtin_shufflevector(__vec, __vec, 3, 2, 1, 0, 7, 6, 5, 4);
16637360784Sdim  typedef __attribute__((vector_size(sizeof(__tmp)))) double __vector_double;
16638360784Sdim  __builtin_vsx_stxvd2x_be((__vector_double)__tmp, __offset, __ptr);
16639314564Sdim}
16640314564Sdim
16641314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_be(vector signed int __vec,
16642314564Sdim                                               signed long long  __offset,
16643314564Sdim                                               signed int *__ptr) {
16644314564Sdim  __builtin_vsx_stxvw4x_be(__vec, __offset, __ptr);
16645314564Sdim}
16646314564Sdim
16647314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned int __vec,
16648314564Sdim                                               signed long long  __offset,
16649314564Sdim                                               unsigned int *__ptr) {
16650360784Sdim  __builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);
16651314564Sdim}
16652314564Sdim
16653314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_be(vector float __vec,
16654314564Sdim                                               signed long long  __offset,
16655314564Sdim                                               float *__ptr) {
16656360784Sdim  __builtin_vsx_stxvw4x_be((vector int)__vec, __offset, __ptr);
16657314564Sdim}
16658314564Sdim
16659314564Sdim#ifdef __VSX__
16660314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_be(vector signed long long __vec,
16661314564Sdim                                               signed long long  __offset,
16662314564Sdim                                               signed long long *__ptr) {
16663360784Sdim  __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
16664314564Sdim}
16665314564Sdim
16666314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned long long __vec,
16667314564Sdim                                               signed long long  __offset,
16668314564Sdim                                               unsigned long long *__ptr) {
16669360784Sdim  __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
16670314564Sdim}
16671314564Sdim
16672314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_be(vector double __vec,
16673314564Sdim                                               signed long long  __offset,
16674314564Sdim                                               double *__ptr) {
16675360784Sdim  __builtin_vsx_stxvd2x_be((vector double)__vec, __offset, __ptr);
16676314564Sdim}
16677314564Sdim#endif
16678314564Sdim
16679314564Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
16680314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_be(vector signed __int128 __vec,
16681314564Sdim                                               signed long long  __offset,
16682314564Sdim                                               signed __int128 *__ptr) {
16683314564Sdim  vec_xst(__vec, __offset, __ptr);
16684314564Sdim}
16685314564Sdim
16686314564Sdimstatic __inline__ void __ATTRS_o_ai vec_xst_be(vector unsigned __int128 __vec,
16687314564Sdim                                               signed long long  __offset,
16688314564Sdim                                               unsigned __int128 *__ptr) {
16689314564Sdim  vec_xst(__vec, __offset, __ptr);
16690314564Sdim}
16691314564Sdim#endif
16692314564Sdim#else
16693314564Sdim  #define vec_xst_be vec_xst
16694314564Sdim#endif
16695314564Sdim
16696314564Sdim#ifdef __POWER9_VECTOR__
16697360784Sdim#define vec_test_data_class(__a, __b)                                          \
16698360784Sdim  _Generic(                                                                    \
16699360784Sdim      (__a), vector float                                                      \
16700360784Sdim      : (vector bool int)__builtin_vsx_xvtstdcsp((vector float)(__a), (__b)),  \
16701360784Sdim        vector double                                                          \
16702360784Sdim      : (vector bool long long)__builtin_vsx_xvtstdcdp((vector double)(__a),   \
16703360784Sdim                                                       (__b)))
16704314564Sdim
16705314564Sdim#endif /* #ifdef __POWER9_VECTOR__ */
16706314564Sdim
16707314564Sdimstatic vector float __ATTRS_o_ai vec_neg(vector float __a) {
16708314564Sdim  return -__a;
16709314564Sdim}
16710314564Sdim
16711314564Sdim#ifdef __VSX__
16712314564Sdimstatic vector double __ATTRS_o_ai vec_neg(vector double __a) {
16713314564Sdim  return -__a;
16714314564Sdim}
16715314564Sdim
16716314564Sdim#endif
16717314564Sdim
16718314564Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
16719314564Sdimstatic vector long long __ATTRS_o_ai vec_neg(vector long long __a) {
16720314564Sdim  return -__a;
16721314564Sdim}
16722314564Sdim#endif
16723314564Sdim
16724314564Sdimstatic vector signed int __ATTRS_o_ai vec_neg(vector signed int __a) {
16725314564Sdim  return -__a;
16726314564Sdim}
16727314564Sdim
16728314564Sdimstatic vector signed short __ATTRS_o_ai vec_neg(vector signed short __a) {
16729314564Sdim  return -__a;
16730314564Sdim}
16731314564Sdim
16732314564Sdimstatic vector signed char __ATTRS_o_ai vec_neg(vector signed char __a) {
16733314564Sdim  return -__a;
16734314564Sdim}
16735314564Sdim
16736314564Sdimstatic vector float __ATTRS_o_ai vec_nabs(vector float __a) {
16737314564Sdim  return - vec_abs(__a);
16738314564Sdim}
16739314564Sdim
16740314564Sdim#ifdef __VSX__
16741314564Sdimstatic vector double __ATTRS_o_ai vec_nabs(vector double __a) {
16742314564Sdim  return - vec_abs(__a);
16743314564Sdim}
16744314564Sdim
16745314564Sdim#endif
16746314564Sdim
16747314564Sdim#if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
16748314564Sdimstatic vector long long __ATTRS_o_ai vec_nabs(vector long long __a) {
16749314564Sdim  return __builtin_altivec_vminsd(__a, -__a);
16750314564Sdim}
16751314564Sdim#endif
16752314564Sdim
16753314564Sdimstatic vector signed int __ATTRS_o_ai vec_nabs(vector signed int __a) {
16754314564Sdim  return __builtin_altivec_vminsw(__a, -__a);
16755314564Sdim}
16756314564Sdim
16757314564Sdimstatic vector signed short __ATTRS_o_ai vec_nabs(vector signed short __a) {
16758314564Sdim  return __builtin_altivec_vminsh(__a, -__a);
16759314564Sdim}
16760314564Sdim
16761314564Sdimstatic vector signed char __ATTRS_o_ai vec_nabs(vector signed char __a) {
16762314564Sdim  return __builtin_altivec_vminsb(__a, -__a);
16763314564Sdim}
16764210299Sed#undef __ATTRS_o_ai
16765207619Srdivacky
16766207619Srdivacky#endif /* __ALTIVEC_H */
16767