1*67e74705SXin Li /*===---- altivec.h - Standard header for type generic math ---------------===*\
2*67e74705SXin Li *
3*67e74705SXin Li * Permission is hereby granted, free of charge, to any person obtaining a copy
4*67e74705SXin Li * of this software and associated documentation files (the "Software"), to deal
5*67e74705SXin Li * in the Software without restriction, including without limitation the rights
6*67e74705SXin Li * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7*67e74705SXin Li * copies of the Software, and to permit persons to whom the Software is
8*67e74705SXin Li * furnished to do so, subject to the following conditions:
9*67e74705SXin Li *
10*67e74705SXin Li * The above copyright notice and this permission notice shall be included in
11*67e74705SXin Li * all copies or substantial portions of the Software.
12*67e74705SXin Li *
13*67e74705SXin Li * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14*67e74705SXin Li * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15*67e74705SXin Li * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16*67e74705SXin Li * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17*67e74705SXin Li * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18*67e74705SXin Li * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19*67e74705SXin Li * THE SOFTWARE.
20*67e74705SXin Li *
21*67e74705SXin Li \*===----------------------------------------------------------------------===*/
22*67e74705SXin Li
23*67e74705SXin Li #ifndef __ALTIVEC_H
24*67e74705SXin Li #define __ALTIVEC_H
25*67e74705SXin Li
26*67e74705SXin Li #ifndef __ALTIVEC__
27*67e74705SXin Li #error "AltiVec support not enabled"
28*67e74705SXin Li #endif
29*67e74705SXin Li
30*67e74705SXin Li /* Constants for mapping CR6 bits to predicate result. */
31*67e74705SXin Li
32*67e74705SXin Li #define __CR6_EQ 0
33*67e74705SXin Li #define __CR6_EQ_REV 1
34*67e74705SXin Li #define __CR6_LT 2
35*67e74705SXin Li #define __CR6_LT_REV 3
36*67e74705SXin Li
37*67e74705SXin Li #define __ATTRS_o_ai __attribute__((__overloadable__, __always_inline__))
38*67e74705SXin Li
39*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai vec_perm(
40*67e74705SXin Li vector signed char __a, vector signed char __b, vector unsigned char __c);
41*67e74705SXin Li
42*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
43*67e74705SXin Li vec_perm(vector unsigned char __a, vector unsigned char __b,
44*67e74705SXin Li vector unsigned char __c);
45*67e74705SXin Li
46*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
47*67e74705SXin Li vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c);
48*67e74705SXin Li
49*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
50*67e74705SXin Li vector signed short __b,
51*67e74705SXin Li vector unsigned char __c);
52*67e74705SXin Li
53*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
54*67e74705SXin Li vec_perm(vector unsigned short __a, vector unsigned short __b,
55*67e74705SXin Li vector unsigned char __c);
56*67e74705SXin Li
57*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai vec_perm(
58*67e74705SXin Li vector bool short __a, vector bool short __b, vector unsigned char __c);
59*67e74705SXin Li
60*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
61*67e74705SXin Li vector pixel __b,
62*67e74705SXin Li vector unsigned char __c);
63*67e74705SXin Li
64*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
65*67e74705SXin Li vector signed int __b,
66*67e74705SXin Li vector unsigned char __c);
67*67e74705SXin Li
68*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai vec_perm(
69*67e74705SXin Li vector unsigned int __a, vector unsigned int __b, vector unsigned char __c);
70*67e74705SXin Li
71*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
72*67e74705SXin Li vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c);
73*67e74705SXin Li
74*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
75*67e74705SXin Li vector float __b,
76*67e74705SXin Li vector unsigned char __c);
77*67e74705SXin Li
78*67e74705SXin Li #ifdef __VSX__
79*67e74705SXin Li static __inline__ vector long long __ATTRS_o_ai
80*67e74705SXin Li vec_perm(vector signed long long __a, vector signed long long __b,
81*67e74705SXin Li vector unsigned char __c);
82*67e74705SXin Li
83*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
84*67e74705SXin Li vec_perm(vector unsigned long long __a, vector unsigned long long __b,
85*67e74705SXin Li vector unsigned char __c);
86*67e74705SXin Li
87*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
88*67e74705SXin Li vec_perm(vector bool long long __a, vector bool long long __b,
89*67e74705SXin Li vector unsigned char __c);
90*67e74705SXin Li
91*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_perm(vector double __a,
92*67e74705SXin Li vector double __b,
93*67e74705SXin Li vector unsigned char __c);
94*67e74705SXin Li #endif
95*67e74705SXin Li
96*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
97*67e74705SXin Li vec_xor(vector unsigned char __a, vector unsigned char __b);
98*67e74705SXin Li
99*67e74705SXin Li /* vec_abs */
100*67e74705SXin Li
101*67e74705SXin Li #define __builtin_altivec_abs_v16qi vec_abs
102*67e74705SXin Li #define __builtin_altivec_abs_v8hi vec_abs
103*67e74705SXin Li #define __builtin_altivec_abs_v4si vec_abs
104*67e74705SXin Li
105*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_abs(vector signed char __a)106*67e74705SXin Li vec_abs(vector signed char __a) {
107*67e74705SXin Li return __builtin_altivec_vmaxsb(__a, -__a);
108*67e74705SXin Li }
109*67e74705SXin Li
110*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_abs(vector signed short __a)111*67e74705SXin Li vec_abs(vector signed short __a) {
112*67e74705SXin Li return __builtin_altivec_vmaxsh(__a, -__a);
113*67e74705SXin Li }
114*67e74705SXin Li
115*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_abs(vector signed int __a)116*67e74705SXin Li vec_abs(vector signed int __a) {
117*67e74705SXin Li return __builtin_altivec_vmaxsw(__a, -__a);
118*67e74705SXin Li }
119*67e74705SXin Li
120*67e74705SXin Li #if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
121*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_abs(vector signed long long __a)122*67e74705SXin Li vec_abs(vector signed long long __a) {
123*67e74705SXin Li return __builtin_altivec_vmaxsd(__a, -__a);
124*67e74705SXin Li }
125*67e74705SXin Li #endif
126*67e74705SXin Li
vec_abs(vector float __a)127*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_abs(vector float __a) {
128*67e74705SXin Li #ifdef __VSX__
129*67e74705SXin Li return __builtin_vsx_xvabssp(__a);
130*67e74705SXin Li #else
131*67e74705SXin Li vector unsigned int __res =
132*67e74705SXin Li (vector unsigned int)__a & (vector unsigned int)(0x7FFFFFFF);
133*67e74705SXin Li return (vector float)__res;
134*67e74705SXin Li #endif
135*67e74705SXin Li }
136*67e74705SXin Li
137*67e74705SXin Li #if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
vec_abs(vector double __a)138*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_abs(vector double __a) {
139*67e74705SXin Li return __builtin_vsx_xvabsdp(__a);
140*67e74705SXin Li }
141*67e74705SXin Li #endif
142*67e74705SXin Li
143*67e74705SXin Li /* vec_abss */
144*67e74705SXin Li #define __builtin_altivec_abss_v16qi vec_abss
145*67e74705SXin Li #define __builtin_altivec_abss_v8hi vec_abss
146*67e74705SXin Li #define __builtin_altivec_abss_v4si vec_abss
147*67e74705SXin Li
148*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_abss(vector signed char __a)149*67e74705SXin Li vec_abss(vector signed char __a) {
150*67e74705SXin Li return __builtin_altivec_vmaxsb(
151*67e74705SXin Li __a, __builtin_altivec_vsubsbs((vector signed char)(0), __a));
152*67e74705SXin Li }
153*67e74705SXin Li
154*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_abss(vector signed short __a)155*67e74705SXin Li vec_abss(vector signed short __a) {
156*67e74705SXin Li return __builtin_altivec_vmaxsh(
157*67e74705SXin Li __a, __builtin_altivec_vsubshs((vector signed short)(0), __a));
158*67e74705SXin Li }
159*67e74705SXin Li
160*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_abss(vector signed int __a)161*67e74705SXin Li vec_abss(vector signed int __a) {
162*67e74705SXin Li return __builtin_altivec_vmaxsw(
163*67e74705SXin Li __a, __builtin_altivec_vsubsws((vector signed int)(0), __a));
164*67e74705SXin Li }
165*67e74705SXin Li
166*67e74705SXin Li /* vec_add */
167*67e74705SXin Li
168*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_add(vector signed char __a,vector signed char __b)169*67e74705SXin Li vec_add(vector signed char __a, vector signed char __b) {
170*67e74705SXin Li return __a + __b;
171*67e74705SXin Li }
172*67e74705SXin Li
173*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_add(vector bool char __a,vector signed char __b)174*67e74705SXin Li vec_add(vector bool char __a, vector signed char __b) {
175*67e74705SXin Li return (vector signed char)__a + __b;
176*67e74705SXin Li }
177*67e74705SXin Li
178*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_add(vector signed char __a,vector bool char __b)179*67e74705SXin Li vec_add(vector signed char __a, vector bool char __b) {
180*67e74705SXin Li return __a + (vector signed char)__b;
181*67e74705SXin Li }
182*67e74705SXin Li
183*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_add(vector unsigned char __a,vector unsigned char __b)184*67e74705SXin Li vec_add(vector unsigned char __a, vector unsigned char __b) {
185*67e74705SXin Li return __a + __b;
186*67e74705SXin Li }
187*67e74705SXin Li
188*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_add(vector bool char __a,vector unsigned char __b)189*67e74705SXin Li vec_add(vector bool char __a, vector unsigned char __b) {
190*67e74705SXin Li return (vector unsigned char)__a + __b;
191*67e74705SXin Li }
192*67e74705SXin Li
193*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_add(vector unsigned char __a,vector bool char __b)194*67e74705SXin Li vec_add(vector unsigned char __a, vector bool char __b) {
195*67e74705SXin Li return __a + (vector unsigned char)__b;
196*67e74705SXin Li }
197*67e74705SXin Li
vec_add(vector short __a,vector short __b)198*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
199*67e74705SXin Li vector short __b) {
200*67e74705SXin Li return __a + __b;
201*67e74705SXin Li }
202*67e74705SXin Li
vec_add(vector bool short __a,vector short __b)203*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_add(vector bool short __a,
204*67e74705SXin Li vector short __b) {
205*67e74705SXin Li return (vector short)__a + __b;
206*67e74705SXin Li }
207*67e74705SXin Li
vec_add(vector short __a,vector bool short __b)208*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_add(vector short __a,
209*67e74705SXin Li vector bool short __b) {
210*67e74705SXin Li return __a + (vector short)__b;
211*67e74705SXin Li }
212*67e74705SXin Li
213*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_add(vector unsigned short __a,vector unsigned short __b)214*67e74705SXin Li vec_add(vector unsigned short __a, vector unsigned short __b) {
215*67e74705SXin Li return __a + __b;
216*67e74705SXin Li }
217*67e74705SXin Li
218*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_add(vector bool short __a,vector unsigned short __b)219*67e74705SXin Li vec_add(vector bool short __a, vector unsigned short __b) {
220*67e74705SXin Li return (vector unsigned short)__a + __b;
221*67e74705SXin Li }
222*67e74705SXin Li
223*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_add(vector unsigned short __a,vector bool short __b)224*67e74705SXin Li vec_add(vector unsigned short __a, vector bool short __b) {
225*67e74705SXin Li return __a + (vector unsigned short)__b;
226*67e74705SXin Li }
227*67e74705SXin Li
vec_add(vector int __a,vector int __b)228*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
229*67e74705SXin Li vector int __b) {
230*67e74705SXin Li return __a + __b;
231*67e74705SXin Li }
232*67e74705SXin Li
vec_add(vector bool int __a,vector int __b)233*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_add(vector bool int __a,
234*67e74705SXin Li vector int __b) {
235*67e74705SXin Li return (vector int)__a + __b;
236*67e74705SXin Li }
237*67e74705SXin Li
vec_add(vector int __a,vector bool int __b)238*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_add(vector int __a,
239*67e74705SXin Li vector bool int __b) {
240*67e74705SXin Li return __a + (vector int)__b;
241*67e74705SXin Li }
242*67e74705SXin Li
243*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_add(vector unsigned int __a,vector unsigned int __b)244*67e74705SXin Li vec_add(vector unsigned int __a, vector unsigned int __b) {
245*67e74705SXin Li return __a + __b;
246*67e74705SXin Li }
247*67e74705SXin Li
248*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_add(vector bool int __a,vector unsigned int __b)249*67e74705SXin Li vec_add(vector bool int __a, vector unsigned int __b) {
250*67e74705SXin Li return (vector unsigned int)__a + __b;
251*67e74705SXin Li }
252*67e74705SXin Li
253*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_add(vector unsigned int __a,vector bool int __b)254*67e74705SXin Li vec_add(vector unsigned int __a, vector bool int __b) {
255*67e74705SXin Li return __a + (vector unsigned int)__b;
256*67e74705SXin Li }
257*67e74705SXin Li
258*67e74705SXin Li #if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
259*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_add(vector signed long long __a,vector signed long long __b)260*67e74705SXin Li vec_add(vector signed long long __a, vector signed long long __b) {
261*67e74705SXin Li return __a + __b;
262*67e74705SXin Li }
263*67e74705SXin Li
264*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_add(vector unsigned long long __a,vector unsigned long long __b)265*67e74705SXin Li vec_add(vector unsigned long long __a, vector unsigned long long __b) {
266*67e74705SXin Li return __a + __b;
267*67e74705SXin Li }
268*67e74705SXin Li
269*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_add(vector signed __int128 __a,vector signed __int128 __b)270*67e74705SXin Li vec_add(vector signed __int128 __a, vector signed __int128 __b) {
271*67e74705SXin Li return __a + __b;
272*67e74705SXin Li }
273*67e74705SXin Li
274*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_add(vector unsigned __int128 __a,vector unsigned __int128 __b)275*67e74705SXin Li vec_add(vector unsigned __int128 __a, vector unsigned __int128 __b) {
276*67e74705SXin Li return __a + __b;
277*67e74705SXin Li }
278*67e74705SXin Li #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
279*67e74705SXin Li
vec_add(vector float __a,vector float __b)280*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_add(vector float __a,
281*67e74705SXin Li vector float __b) {
282*67e74705SXin Li return __a + __b;
283*67e74705SXin Li }
284*67e74705SXin Li
285*67e74705SXin Li #ifdef __VSX__
vec_add(vector double __a,vector double __b)286*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_add(vector double __a,
287*67e74705SXin Li vector double __b) {
288*67e74705SXin Li return __a + __b;
289*67e74705SXin Li }
290*67e74705SXin Li #endif // __VSX__
291*67e74705SXin Li
292*67e74705SXin Li /* vec_adde */
293*67e74705SXin Li
294*67e74705SXin Li #if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
295*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_adde(vector signed __int128 __a,vector signed __int128 __b,vector signed __int128 __c)296*67e74705SXin Li vec_adde(vector signed __int128 __a, vector signed __int128 __b,
297*67e74705SXin Li vector signed __int128 __c) {
298*67e74705SXin Li return __builtin_altivec_vaddeuqm(__a, __b, __c);
299*67e74705SXin Li }
300*67e74705SXin Li
301*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_adde(vector unsigned __int128 __a,vector unsigned __int128 __b,vector unsigned __int128 __c)302*67e74705SXin Li vec_adde(vector unsigned __int128 __a, vector unsigned __int128 __b,
303*67e74705SXin Li vector unsigned __int128 __c) {
304*67e74705SXin Li return __builtin_altivec_vaddeuqm(__a, __b, __c);
305*67e74705SXin Li }
306*67e74705SXin Li #endif
307*67e74705SXin Li
308*67e74705SXin Li /* vec_addec */
309*67e74705SXin Li
310*67e74705SXin Li #if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
311*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_addec(vector signed __int128 __a,vector signed __int128 __b,vector signed __int128 __c)312*67e74705SXin Li vec_addec(vector signed __int128 __a, vector signed __int128 __b,
313*67e74705SXin Li vector signed __int128 __c) {
314*67e74705SXin Li return __builtin_altivec_vaddecuq(__a, __b, __c);
315*67e74705SXin Li }
316*67e74705SXin Li
317*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_addec(vector unsigned __int128 __a,vector unsigned __int128 __b,vector unsigned __int128 __c)318*67e74705SXin Li vec_addec(vector unsigned __int128 __a, vector unsigned __int128 __b,
319*67e74705SXin Li vector unsigned __int128 __c) {
320*67e74705SXin Li return __builtin_altivec_vaddecuq(__a, __b, __c);
321*67e74705SXin Li }
322*67e74705SXin Li #endif
323*67e74705SXin Li
324*67e74705SXin Li /* vec_vaddubm */
325*67e74705SXin Li
326*67e74705SXin Li #define __builtin_altivec_vaddubm vec_vaddubm
327*67e74705SXin Li
328*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vaddubm(vector signed char __a,vector signed char __b)329*67e74705SXin Li vec_vaddubm(vector signed char __a, vector signed char __b) {
330*67e74705SXin Li return __a + __b;
331*67e74705SXin Li }
332*67e74705SXin Li
333*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vaddubm(vector bool char __a,vector signed char __b)334*67e74705SXin Li vec_vaddubm(vector bool char __a, vector signed char __b) {
335*67e74705SXin Li return (vector signed char)__a + __b;
336*67e74705SXin Li }
337*67e74705SXin Li
338*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vaddubm(vector signed char __a,vector bool char __b)339*67e74705SXin Li vec_vaddubm(vector signed char __a, vector bool char __b) {
340*67e74705SXin Li return __a + (vector signed char)__b;
341*67e74705SXin Li }
342*67e74705SXin Li
343*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vaddubm(vector unsigned char __a,vector unsigned char __b)344*67e74705SXin Li vec_vaddubm(vector unsigned char __a, vector unsigned char __b) {
345*67e74705SXin Li return __a + __b;
346*67e74705SXin Li }
347*67e74705SXin Li
348*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vaddubm(vector bool char __a,vector unsigned char __b)349*67e74705SXin Li vec_vaddubm(vector bool char __a, vector unsigned char __b) {
350*67e74705SXin Li return (vector unsigned char)__a + __b;
351*67e74705SXin Li }
352*67e74705SXin Li
353*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vaddubm(vector unsigned char __a,vector bool char __b)354*67e74705SXin Li vec_vaddubm(vector unsigned char __a, vector bool char __b) {
355*67e74705SXin Li return __a + (vector unsigned char)__b;
356*67e74705SXin Li }
357*67e74705SXin Li
358*67e74705SXin Li /* vec_vadduhm */
359*67e74705SXin Li
360*67e74705SXin Li #define __builtin_altivec_vadduhm vec_vadduhm
361*67e74705SXin Li
vec_vadduhm(vector short __a,vector short __b)362*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
363*67e74705SXin Li vector short __b) {
364*67e74705SXin Li return __a + __b;
365*67e74705SXin Li }
366*67e74705SXin Li
vec_vadduhm(vector bool short __a,vector short __b)367*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector bool short __a,
368*67e74705SXin Li vector short __b) {
369*67e74705SXin Li return (vector short)__a + __b;
370*67e74705SXin Li }
371*67e74705SXin Li
vec_vadduhm(vector short __a,vector bool short __b)372*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vadduhm(vector short __a,
373*67e74705SXin Li vector bool short __b) {
374*67e74705SXin Li return __a + (vector short)__b;
375*67e74705SXin Li }
376*67e74705SXin Li
377*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vadduhm(vector unsigned short __a,vector unsigned short __b)378*67e74705SXin Li vec_vadduhm(vector unsigned short __a, vector unsigned short __b) {
379*67e74705SXin Li return __a + __b;
380*67e74705SXin Li }
381*67e74705SXin Li
382*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vadduhm(vector bool short __a,vector unsigned short __b)383*67e74705SXin Li vec_vadduhm(vector bool short __a, vector unsigned short __b) {
384*67e74705SXin Li return (vector unsigned short)__a + __b;
385*67e74705SXin Li }
386*67e74705SXin Li
387*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vadduhm(vector unsigned short __a,vector bool short __b)388*67e74705SXin Li vec_vadduhm(vector unsigned short __a, vector bool short __b) {
389*67e74705SXin Li return __a + (vector unsigned short)__b;
390*67e74705SXin Li }
391*67e74705SXin Li
392*67e74705SXin Li /* vec_vadduwm */
393*67e74705SXin Li
394*67e74705SXin Li #define __builtin_altivec_vadduwm vec_vadduwm
395*67e74705SXin Li
vec_vadduwm(vector int __a,vector int __b)396*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
397*67e74705SXin Li vector int __b) {
398*67e74705SXin Li return __a + __b;
399*67e74705SXin Li }
400*67e74705SXin Li
vec_vadduwm(vector bool int __a,vector int __b)401*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector bool int __a,
402*67e74705SXin Li vector int __b) {
403*67e74705SXin Li return (vector int)__a + __b;
404*67e74705SXin Li }
405*67e74705SXin Li
vec_vadduwm(vector int __a,vector bool int __b)406*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vadduwm(vector int __a,
407*67e74705SXin Li vector bool int __b) {
408*67e74705SXin Li return __a + (vector int)__b;
409*67e74705SXin Li }
410*67e74705SXin Li
411*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vadduwm(vector unsigned int __a,vector unsigned int __b)412*67e74705SXin Li vec_vadduwm(vector unsigned int __a, vector unsigned int __b) {
413*67e74705SXin Li return __a + __b;
414*67e74705SXin Li }
415*67e74705SXin Li
416*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vadduwm(vector bool int __a,vector unsigned int __b)417*67e74705SXin Li vec_vadduwm(vector bool int __a, vector unsigned int __b) {
418*67e74705SXin Li return (vector unsigned int)__a + __b;
419*67e74705SXin Li }
420*67e74705SXin Li
421*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vadduwm(vector unsigned int __a,vector bool int __b)422*67e74705SXin Li vec_vadduwm(vector unsigned int __a, vector bool int __b) {
423*67e74705SXin Li return __a + (vector unsigned int)__b;
424*67e74705SXin Li }
425*67e74705SXin Li
426*67e74705SXin Li /* vec_vaddfp */
427*67e74705SXin Li
428*67e74705SXin Li #define __builtin_altivec_vaddfp vec_vaddfp
429*67e74705SXin Li
430*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vaddfp(vector float __a,vector float __b)431*67e74705SXin Li vec_vaddfp(vector float __a, vector float __b) {
432*67e74705SXin Li return __a + __b;
433*67e74705SXin Li }
434*67e74705SXin Li
435*67e74705SXin Li /* vec_addc */
436*67e74705SXin Li
437*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_addc(vector signed int __a,vector signed int __b)438*67e74705SXin Li vec_addc(vector signed int __a, vector signed int __b) {
439*67e74705SXin Li return (vector signed int)__builtin_altivec_vaddcuw((vector unsigned int)__a,
440*67e74705SXin Li (vector unsigned int)__b);
441*67e74705SXin Li }
442*67e74705SXin Li
443*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_addc(vector unsigned int __a,vector unsigned int __b)444*67e74705SXin Li vec_addc(vector unsigned int __a, vector unsigned int __b) {
445*67e74705SXin Li return __builtin_altivec_vaddcuw(__a, __b);
446*67e74705SXin Li }
447*67e74705SXin Li
448*67e74705SXin Li #if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
449*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_addc(vector signed __int128 __a,vector signed __int128 __b)450*67e74705SXin Li vec_addc(vector signed __int128 __a, vector signed __int128 __b) {
451*67e74705SXin Li return (vector signed __int128)__builtin_altivec_vaddcuq(
452*67e74705SXin Li (vector unsigned __int128)__a, (vector unsigned __int128)__b);
453*67e74705SXin Li }
454*67e74705SXin Li
455*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_addc(vector unsigned __int128 __a,vector unsigned __int128 __b)456*67e74705SXin Li vec_addc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
457*67e74705SXin Li return __builtin_altivec_vaddcuq(__a, __b);
458*67e74705SXin Li }
459*67e74705SXin Li #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
460*67e74705SXin Li
461*67e74705SXin Li /* vec_vaddcuw */
462*67e74705SXin Li
463*67e74705SXin Li static __inline__ vector unsigned int __attribute__((__always_inline__))
vec_vaddcuw(vector unsigned int __a,vector unsigned int __b)464*67e74705SXin Li vec_vaddcuw(vector unsigned int __a, vector unsigned int __b) {
465*67e74705SXin Li return __builtin_altivec_vaddcuw(__a, __b);
466*67e74705SXin Li }
467*67e74705SXin Li
468*67e74705SXin Li /* vec_adds */
469*67e74705SXin Li
470*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_adds(vector signed char __a,vector signed char __b)471*67e74705SXin Li vec_adds(vector signed char __a, vector signed char __b) {
472*67e74705SXin Li return __builtin_altivec_vaddsbs(__a, __b);
473*67e74705SXin Li }
474*67e74705SXin Li
475*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_adds(vector bool char __a,vector signed char __b)476*67e74705SXin Li vec_adds(vector bool char __a, vector signed char __b) {
477*67e74705SXin Li return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
478*67e74705SXin Li }
479*67e74705SXin Li
480*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_adds(vector signed char __a,vector bool char __b)481*67e74705SXin Li vec_adds(vector signed char __a, vector bool char __b) {
482*67e74705SXin Li return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
483*67e74705SXin Li }
484*67e74705SXin Li
485*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_adds(vector unsigned char __a,vector unsigned char __b)486*67e74705SXin Li vec_adds(vector unsigned char __a, vector unsigned char __b) {
487*67e74705SXin Li return __builtin_altivec_vaddubs(__a, __b);
488*67e74705SXin Li }
489*67e74705SXin Li
490*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_adds(vector bool char __a,vector unsigned char __b)491*67e74705SXin Li vec_adds(vector bool char __a, vector unsigned char __b) {
492*67e74705SXin Li return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
493*67e74705SXin Li }
494*67e74705SXin Li
495*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_adds(vector unsigned char __a,vector bool char __b)496*67e74705SXin Li vec_adds(vector unsigned char __a, vector bool char __b) {
497*67e74705SXin Li return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
498*67e74705SXin Li }
499*67e74705SXin Li
vec_adds(vector short __a,vector short __b)500*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
501*67e74705SXin Li vector short __b) {
502*67e74705SXin Li return __builtin_altivec_vaddshs(__a, __b);
503*67e74705SXin Li }
504*67e74705SXin Li
vec_adds(vector bool short __a,vector short __b)505*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_adds(vector bool short __a,
506*67e74705SXin Li vector short __b) {
507*67e74705SXin Li return __builtin_altivec_vaddshs((vector short)__a, __b);
508*67e74705SXin Li }
509*67e74705SXin Li
vec_adds(vector short __a,vector bool short __b)510*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_adds(vector short __a,
511*67e74705SXin Li vector bool short __b) {
512*67e74705SXin Li return __builtin_altivec_vaddshs(__a, (vector short)__b);
513*67e74705SXin Li }
514*67e74705SXin Li
515*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_adds(vector unsigned short __a,vector unsigned short __b)516*67e74705SXin Li vec_adds(vector unsigned short __a, vector unsigned short __b) {
517*67e74705SXin Li return __builtin_altivec_vadduhs(__a, __b);
518*67e74705SXin Li }
519*67e74705SXin Li
520*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_adds(vector bool short __a,vector unsigned short __b)521*67e74705SXin Li vec_adds(vector bool short __a, vector unsigned short __b) {
522*67e74705SXin Li return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
523*67e74705SXin Li }
524*67e74705SXin Li
525*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_adds(vector unsigned short __a,vector bool short __b)526*67e74705SXin Li vec_adds(vector unsigned short __a, vector bool short __b) {
527*67e74705SXin Li return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
528*67e74705SXin Li }
529*67e74705SXin Li
vec_adds(vector int __a,vector int __b)530*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
531*67e74705SXin Li vector int __b) {
532*67e74705SXin Li return __builtin_altivec_vaddsws(__a, __b);
533*67e74705SXin Li }
534*67e74705SXin Li
vec_adds(vector bool int __a,vector int __b)535*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_adds(vector bool int __a,
536*67e74705SXin Li vector int __b) {
537*67e74705SXin Li return __builtin_altivec_vaddsws((vector int)__a, __b);
538*67e74705SXin Li }
539*67e74705SXin Li
vec_adds(vector int __a,vector bool int __b)540*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_adds(vector int __a,
541*67e74705SXin Li vector bool int __b) {
542*67e74705SXin Li return __builtin_altivec_vaddsws(__a, (vector int)__b);
543*67e74705SXin Li }
544*67e74705SXin Li
545*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_adds(vector unsigned int __a,vector unsigned int __b)546*67e74705SXin Li vec_adds(vector unsigned int __a, vector unsigned int __b) {
547*67e74705SXin Li return __builtin_altivec_vadduws(__a, __b);
548*67e74705SXin Li }
549*67e74705SXin Li
550*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_adds(vector bool int __a,vector unsigned int __b)551*67e74705SXin Li vec_adds(vector bool int __a, vector unsigned int __b) {
552*67e74705SXin Li return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
553*67e74705SXin Li }
554*67e74705SXin Li
555*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_adds(vector unsigned int __a,vector bool int __b)556*67e74705SXin Li vec_adds(vector unsigned int __a, vector bool int __b) {
557*67e74705SXin Li return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
558*67e74705SXin Li }
559*67e74705SXin Li
560*67e74705SXin Li /* vec_vaddsbs */
561*67e74705SXin Li
562*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vaddsbs(vector signed char __a,vector signed char __b)563*67e74705SXin Li vec_vaddsbs(vector signed char __a, vector signed char __b) {
564*67e74705SXin Li return __builtin_altivec_vaddsbs(__a, __b);
565*67e74705SXin Li }
566*67e74705SXin Li
567*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vaddsbs(vector bool char __a,vector signed char __b)568*67e74705SXin Li vec_vaddsbs(vector bool char __a, vector signed char __b) {
569*67e74705SXin Li return __builtin_altivec_vaddsbs((vector signed char)__a, __b);
570*67e74705SXin Li }
571*67e74705SXin Li
572*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vaddsbs(vector signed char __a,vector bool char __b)573*67e74705SXin Li vec_vaddsbs(vector signed char __a, vector bool char __b) {
574*67e74705SXin Li return __builtin_altivec_vaddsbs(__a, (vector signed char)__b);
575*67e74705SXin Li }
576*67e74705SXin Li
577*67e74705SXin Li /* vec_vaddubs */
578*67e74705SXin Li
579*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vaddubs(vector unsigned char __a,vector unsigned char __b)580*67e74705SXin Li vec_vaddubs(vector unsigned char __a, vector unsigned char __b) {
581*67e74705SXin Li return __builtin_altivec_vaddubs(__a, __b);
582*67e74705SXin Li }
583*67e74705SXin Li
584*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vaddubs(vector bool char __a,vector unsigned char __b)585*67e74705SXin Li vec_vaddubs(vector bool char __a, vector unsigned char __b) {
586*67e74705SXin Li return __builtin_altivec_vaddubs((vector unsigned char)__a, __b);
587*67e74705SXin Li }
588*67e74705SXin Li
589*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vaddubs(vector unsigned char __a,vector bool char __b)590*67e74705SXin Li vec_vaddubs(vector unsigned char __a, vector bool char __b) {
591*67e74705SXin Li return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b);
592*67e74705SXin Li }
593*67e74705SXin Li
594*67e74705SXin Li /* vec_vaddshs */
595*67e74705SXin Li
vec_vaddshs(vector short __a,vector short __b)596*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
597*67e74705SXin Li vector short __b) {
598*67e74705SXin Li return __builtin_altivec_vaddshs(__a, __b);
599*67e74705SXin Li }
600*67e74705SXin Li
vec_vaddshs(vector bool short __a,vector short __b)601*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector bool short __a,
602*67e74705SXin Li vector short __b) {
603*67e74705SXin Li return __builtin_altivec_vaddshs((vector short)__a, __b);
604*67e74705SXin Li }
605*67e74705SXin Li
vec_vaddshs(vector short __a,vector bool short __b)606*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vaddshs(vector short __a,
607*67e74705SXin Li vector bool short __b) {
608*67e74705SXin Li return __builtin_altivec_vaddshs(__a, (vector short)__b);
609*67e74705SXin Li }
610*67e74705SXin Li
611*67e74705SXin Li /* vec_vadduhs */
612*67e74705SXin Li
613*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vadduhs(vector unsigned short __a,vector unsigned short __b)614*67e74705SXin Li vec_vadduhs(vector unsigned short __a, vector unsigned short __b) {
615*67e74705SXin Li return __builtin_altivec_vadduhs(__a, __b);
616*67e74705SXin Li }
617*67e74705SXin Li
618*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vadduhs(vector bool short __a,vector unsigned short __b)619*67e74705SXin Li vec_vadduhs(vector bool short __a, vector unsigned short __b) {
620*67e74705SXin Li return __builtin_altivec_vadduhs((vector unsigned short)__a, __b);
621*67e74705SXin Li }
622*67e74705SXin Li
623*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vadduhs(vector unsigned short __a,vector bool short __b)624*67e74705SXin Li vec_vadduhs(vector unsigned short __a, vector bool short __b) {
625*67e74705SXin Li return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b);
626*67e74705SXin Li }
627*67e74705SXin Li
628*67e74705SXin Li /* vec_vaddsws */
629*67e74705SXin Li
vec_vaddsws(vector int __a,vector int __b)630*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
631*67e74705SXin Li vector int __b) {
632*67e74705SXin Li return __builtin_altivec_vaddsws(__a, __b);
633*67e74705SXin Li }
634*67e74705SXin Li
vec_vaddsws(vector bool int __a,vector int __b)635*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector bool int __a,
636*67e74705SXin Li vector int __b) {
637*67e74705SXin Li return __builtin_altivec_vaddsws((vector int)__a, __b);
638*67e74705SXin Li }
639*67e74705SXin Li
vec_vaddsws(vector int __a,vector bool int __b)640*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vaddsws(vector int __a,
641*67e74705SXin Li vector bool int __b) {
642*67e74705SXin Li return __builtin_altivec_vaddsws(__a, (vector int)__b);
643*67e74705SXin Li }
644*67e74705SXin Li
645*67e74705SXin Li /* vec_vadduws */
646*67e74705SXin Li
647*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vadduws(vector unsigned int __a,vector unsigned int __b)648*67e74705SXin Li vec_vadduws(vector unsigned int __a, vector unsigned int __b) {
649*67e74705SXin Li return __builtin_altivec_vadduws(__a, __b);
650*67e74705SXin Li }
651*67e74705SXin Li
652*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vadduws(vector bool int __a,vector unsigned int __b)653*67e74705SXin Li vec_vadduws(vector bool int __a, vector unsigned int __b) {
654*67e74705SXin Li return __builtin_altivec_vadduws((vector unsigned int)__a, __b);
655*67e74705SXin Li }
656*67e74705SXin Li
657*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vadduws(vector unsigned int __a,vector bool int __b)658*67e74705SXin Li vec_vadduws(vector unsigned int __a, vector bool int __b) {
659*67e74705SXin Li return __builtin_altivec_vadduws(__a, (vector unsigned int)__b);
660*67e74705SXin Li }
661*67e74705SXin Li
662*67e74705SXin Li #if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
663*67e74705SXin Li /* vec_vadduqm */
664*67e74705SXin Li
665*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_vadduqm(vector signed __int128 __a,vector signed __int128 __b)666*67e74705SXin Li vec_vadduqm(vector signed __int128 __a, vector signed __int128 __b) {
667*67e74705SXin Li return __a + __b;
668*67e74705SXin Li }
669*67e74705SXin Li
670*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_vadduqm(vector unsigned __int128 __a,vector unsigned __int128 __b)671*67e74705SXin Li vec_vadduqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
672*67e74705SXin Li return __a + __b;
673*67e74705SXin Li }
674*67e74705SXin Li
675*67e74705SXin Li /* vec_vaddeuqm */
676*67e74705SXin Li
677*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_vaddeuqm(vector signed __int128 __a,vector signed __int128 __b,vector signed __int128 __c)678*67e74705SXin Li vec_vaddeuqm(vector signed __int128 __a, vector signed __int128 __b,
679*67e74705SXin Li vector signed __int128 __c) {
680*67e74705SXin Li return __builtin_altivec_vaddeuqm(__a, __b, __c);
681*67e74705SXin Li }
682*67e74705SXin Li
683*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_vaddeuqm(vector unsigned __int128 __a,vector unsigned __int128 __b,vector unsigned __int128 __c)684*67e74705SXin Li vec_vaddeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
685*67e74705SXin Li vector unsigned __int128 __c) {
686*67e74705SXin Li return __builtin_altivec_vaddeuqm(__a, __b, __c);
687*67e74705SXin Li }
688*67e74705SXin Li
689*67e74705SXin Li /* vec_vaddcuq */
690*67e74705SXin Li
691*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_vaddcuq(vector signed __int128 __a,vector signed __int128 __b)692*67e74705SXin Li vec_vaddcuq(vector signed __int128 __a, vector signed __int128 __b) {
693*67e74705SXin Li return __builtin_altivec_vaddcuq(__a, __b);
694*67e74705SXin Li }
695*67e74705SXin Li
696*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_vaddcuq(vector unsigned __int128 __a,vector unsigned __int128 __b)697*67e74705SXin Li vec_vaddcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
698*67e74705SXin Li return __builtin_altivec_vaddcuq(__a, __b);
699*67e74705SXin Li }
700*67e74705SXin Li
701*67e74705SXin Li /* vec_vaddecuq */
702*67e74705SXin Li
703*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_vaddecuq(vector signed __int128 __a,vector signed __int128 __b,vector signed __int128 __c)704*67e74705SXin Li vec_vaddecuq(vector signed __int128 __a, vector signed __int128 __b,
705*67e74705SXin Li vector signed __int128 __c) {
706*67e74705SXin Li return __builtin_altivec_vaddecuq(__a, __b, __c);
707*67e74705SXin Li }
708*67e74705SXin Li
709*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_vaddecuq(vector unsigned __int128 __a,vector unsigned __int128 __b,vector unsigned __int128 __c)710*67e74705SXin Li vec_vaddecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
711*67e74705SXin Li vector unsigned __int128 __c) {
712*67e74705SXin Li return __builtin_altivec_vaddecuq(__a, __b, __c);
713*67e74705SXin Li }
714*67e74705SXin Li #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
715*67e74705SXin Li
716*67e74705SXin Li /* vec_and */
717*67e74705SXin Li
718*67e74705SXin Li #define __builtin_altivec_vand vec_and
719*67e74705SXin Li
720*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_and(vector signed char __a,vector signed char __b)721*67e74705SXin Li vec_and(vector signed char __a, vector signed char __b) {
722*67e74705SXin Li return __a & __b;
723*67e74705SXin Li }
724*67e74705SXin Li
725*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_and(vector bool char __a,vector signed char __b)726*67e74705SXin Li vec_and(vector bool char __a, vector signed char __b) {
727*67e74705SXin Li return (vector signed char)__a & __b;
728*67e74705SXin Li }
729*67e74705SXin Li
730*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_and(vector signed char __a,vector bool char __b)731*67e74705SXin Li vec_and(vector signed char __a, vector bool char __b) {
732*67e74705SXin Li return __a & (vector signed char)__b;
733*67e74705SXin Li }
734*67e74705SXin Li
735*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_and(vector unsigned char __a,vector unsigned char __b)736*67e74705SXin Li vec_and(vector unsigned char __a, vector unsigned char __b) {
737*67e74705SXin Li return __a & __b;
738*67e74705SXin Li }
739*67e74705SXin Li
740*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_and(vector bool char __a,vector unsigned char __b)741*67e74705SXin Li vec_and(vector bool char __a, vector unsigned char __b) {
742*67e74705SXin Li return (vector unsigned char)__a & __b;
743*67e74705SXin Li }
744*67e74705SXin Li
745*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_and(vector unsigned char __a,vector bool char __b)746*67e74705SXin Li vec_and(vector unsigned char __a, vector bool char __b) {
747*67e74705SXin Li return __a & (vector unsigned char)__b;
748*67e74705SXin Li }
749*67e74705SXin Li
vec_and(vector bool char __a,vector bool char __b)750*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_and(vector bool char __a,
751*67e74705SXin Li vector bool char __b) {
752*67e74705SXin Li return __a & __b;
753*67e74705SXin Li }
754*67e74705SXin Li
vec_and(vector short __a,vector short __b)755*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
756*67e74705SXin Li vector short __b) {
757*67e74705SXin Li return __a & __b;
758*67e74705SXin Li }
759*67e74705SXin Li
vec_and(vector bool short __a,vector short __b)760*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_and(vector bool short __a,
761*67e74705SXin Li vector short __b) {
762*67e74705SXin Li return (vector short)__a & __b;
763*67e74705SXin Li }
764*67e74705SXin Li
vec_and(vector short __a,vector bool short __b)765*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_and(vector short __a,
766*67e74705SXin Li vector bool short __b) {
767*67e74705SXin Li return __a & (vector short)__b;
768*67e74705SXin Li }
769*67e74705SXin Li
770*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_and(vector unsigned short __a,vector unsigned short __b)771*67e74705SXin Li vec_and(vector unsigned short __a, vector unsigned short __b) {
772*67e74705SXin Li return __a & __b;
773*67e74705SXin Li }
774*67e74705SXin Li
775*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_and(vector bool short __a,vector unsigned short __b)776*67e74705SXin Li vec_and(vector bool short __a, vector unsigned short __b) {
777*67e74705SXin Li return (vector unsigned short)__a & __b;
778*67e74705SXin Li }
779*67e74705SXin Li
780*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_and(vector unsigned short __a,vector bool short __b)781*67e74705SXin Li vec_and(vector unsigned short __a, vector bool short __b) {
782*67e74705SXin Li return __a & (vector unsigned short)__b;
783*67e74705SXin Li }
784*67e74705SXin Li
785*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_and(vector bool short __a,vector bool short __b)786*67e74705SXin Li vec_and(vector bool short __a, vector bool short __b) {
787*67e74705SXin Li return __a & __b;
788*67e74705SXin Li }
789*67e74705SXin Li
vec_and(vector int __a,vector int __b)790*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
791*67e74705SXin Li vector int __b) {
792*67e74705SXin Li return __a & __b;
793*67e74705SXin Li }
794*67e74705SXin Li
vec_and(vector bool int __a,vector int __b)795*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_and(vector bool int __a,
796*67e74705SXin Li vector int __b) {
797*67e74705SXin Li return (vector int)__a & __b;
798*67e74705SXin Li }
799*67e74705SXin Li
vec_and(vector int __a,vector bool int __b)800*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_and(vector int __a,
801*67e74705SXin Li vector bool int __b) {
802*67e74705SXin Li return __a & (vector int)__b;
803*67e74705SXin Li }
804*67e74705SXin Li
805*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_and(vector unsigned int __a,vector unsigned int __b)806*67e74705SXin Li vec_and(vector unsigned int __a, vector unsigned int __b) {
807*67e74705SXin Li return __a & __b;
808*67e74705SXin Li }
809*67e74705SXin Li
810*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_and(vector bool int __a,vector unsigned int __b)811*67e74705SXin Li vec_and(vector bool int __a, vector unsigned int __b) {
812*67e74705SXin Li return (vector unsigned int)__a & __b;
813*67e74705SXin Li }
814*67e74705SXin Li
815*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_and(vector unsigned int __a,vector bool int __b)816*67e74705SXin Li vec_and(vector unsigned int __a, vector bool int __b) {
817*67e74705SXin Li return __a & (vector unsigned int)__b;
818*67e74705SXin Li }
819*67e74705SXin Li
vec_and(vector bool int __a,vector bool int __b)820*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_and(vector bool int __a,
821*67e74705SXin Li vector bool int __b) {
822*67e74705SXin Li return __a & __b;
823*67e74705SXin Li }
824*67e74705SXin Li
vec_and(vector float __a,vector float __b)825*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
826*67e74705SXin Li vector float __b) {
827*67e74705SXin Li vector unsigned int __res =
828*67e74705SXin Li (vector unsigned int)__a & (vector unsigned int)__b;
829*67e74705SXin Li return (vector float)__res;
830*67e74705SXin Li }
831*67e74705SXin Li
vec_and(vector bool int __a,vector float __b)832*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_and(vector bool int __a,
833*67e74705SXin Li vector float __b) {
834*67e74705SXin Li vector unsigned int __res =
835*67e74705SXin Li (vector unsigned int)__a & (vector unsigned int)__b;
836*67e74705SXin Li return (vector float)__res;
837*67e74705SXin Li }
838*67e74705SXin Li
vec_and(vector float __a,vector bool int __b)839*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_and(vector float __a,
840*67e74705SXin Li vector bool int __b) {
841*67e74705SXin Li vector unsigned int __res =
842*67e74705SXin Li (vector unsigned int)__a & (vector unsigned int)__b;
843*67e74705SXin Li return (vector float)__res;
844*67e74705SXin Li }
845*67e74705SXin Li
846*67e74705SXin Li #ifdef __VSX__
vec_and(vector bool long long __a,vector double __b)847*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_and(vector bool long long __a,
848*67e74705SXin Li vector double __b) {
849*67e74705SXin Li vector unsigned long long __res =
850*67e74705SXin Li (vector unsigned long long)__a & (vector unsigned long long)__b;
851*67e74705SXin Li return (vector double)__res;
852*67e74705SXin Li }
853*67e74705SXin Li
854*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_and(vector double __a,vector bool long long __b)855*67e74705SXin Li vec_and(vector double __a, vector bool long long __b) {
856*67e74705SXin Li vector unsigned long long __res =
857*67e74705SXin Li (vector unsigned long long)__a & (vector unsigned long long)__b;
858*67e74705SXin Li return (vector double)__res;
859*67e74705SXin Li }
860*67e74705SXin Li
vec_and(vector double __a,vector double __b)861*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_and(vector double __a,
862*67e74705SXin Li vector double __b) {
863*67e74705SXin Li vector unsigned long long __res =
864*67e74705SXin Li (vector unsigned long long)__a & (vector unsigned long long)__b;
865*67e74705SXin Li return (vector double)__res;
866*67e74705SXin Li }
867*67e74705SXin Li
868*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_and(vector signed long long __a,vector signed long long __b)869*67e74705SXin Li vec_and(vector signed long long __a, vector signed long long __b) {
870*67e74705SXin Li return __a & __b;
871*67e74705SXin Li }
872*67e74705SXin Li
873*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_and(vector bool long long __a,vector signed long long __b)874*67e74705SXin Li vec_and(vector bool long long __a, vector signed long long __b) {
875*67e74705SXin Li return (vector signed long long)__a & __b;
876*67e74705SXin Li }
877*67e74705SXin Li
878*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_and(vector signed long long __a,vector bool long long __b)879*67e74705SXin Li vec_and(vector signed long long __a, vector bool long long __b) {
880*67e74705SXin Li return __a & (vector signed long long)__b;
881*67e74705SXin Li }
882*67e74705SXin Li
883*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_and(vector unsigned long long __a,vector unsigned long long __b)884*67e74705SXin Li vec_and(vector unsigned long long __a, vector unsigned long long __b) {
885*67e74705SXin Li return __a & __b;
886*67e74705SXin Li }
887*67e74705SXin Li
888*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_and(vector bool long long __a,vector unsigned long long __b)889*67e74705SXin Li vec_and(vector bool long long __a, vector unsigned long long __b) {
890*67e74705SXin Li return (vector unsigned long long)__a & __b;
891*67e74705SXin Li }
892*67e74705SXin Li
893*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_and(vector unsigned long long __a,vector bool long long __b)894*67e74705SXin Li vec_and(vector unsigned long long __a, vector bool long long __b) {
895*67e74705SXin Li return __a & (vector unsigned long long)__b;
896*67e74705SXin Li }
897*67e74705SXin Li
898*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_and(vector bool long long __a,vector bool long long __b)899*67e74705SXin Li vec_and(vector bool long long __a, vector bool long long __b) {
900*67e74705SXin Li return __a & __b;
901*67e74705SXin Li }
902*67e74705SXin Li #endif
903*67e74705SXin Li
904*67e74705SXin Li /* vec_vand */
905*67e74705SXin Li
906*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vand(vector signed char __a,vector signed char __b)907*67e74705SXin Li vec_vand(vector signed char __a, vector signed char __b) {
908*67e74705SXin Li return __a & __b;
909*67e74705SXin Li }
910*67e74705SXin Li
911*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vand(vector bool char __a,vector signed char __b)912*67e74705SXin Li vec_vand(vector bool char __a, vector signed char __b) {
913*67e74705SXin Li return (vector signed char)__a & __b;
914*67e74705SXin Li }
915*67e74705SXin Li
916*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vand(vector signed char __a,vector bool char __b)917*67e74705SXin Li vec_vand(vector signed char __a, vector bool char __b) {
918*67e74705SXin Li return __a & (vector signed char)__b;
919*67e74705SXin Li }
920*67e74705SXin Li
921*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vand(vector unsigned char __a,vector unsigned char __b)922*67e74705SXin Li vec_vand(vector unsigned char __a, vector unsigned char __b) {
923*67e74705SXin Li return __a & __b;
924*67e74705SXin Li }
925*67e74705SXin Li
926*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vand(vector bool char __a,vector unsigned char __b)927*67e74705SXin Li vec_vand(vector bool char __a, vector unsigned char __b) {
928*67e74705SXin Li return (vector unsigned char)__a & __b;
929*67e74705SXin Li }
930*67e74705SXin Li
931*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vand(vector unsigned char __a,vector bool char __b)932*67e74705SXin Li vec_vand(vector unsigned char __a, vector bool char __b) {
933*67e74705SXin Li return __a & (vector unsigned char)__b;
934*67e74705SXin Li }
935*67e74705SXin Li
vec_vand(vector bool char __a,vector bool char __b)936*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_vand(vector bool char __a,
937*67e74705SXin Li vector bool char __b) {
938*67e74705SXin Li return __a & __b;
939*67e74705SXin Li }
940*67e74705SXin Li
vec_vand(vector short __a,vector short __b)941*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
942*67e74705SXin Li vector short __b) {
943*67e74705SXin Li return __a & __b;
944*67e74705SXin Li }
945*67e74705SXin Li
vec_vand(vector bool short __a,vector short __b)946*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vand(vector bool short __a,
947*67e74705SXin Li vector short __b) {
948*67e74705SXin Li return (vector short)__a & __b;
949*67e74705SXin Li }
950*67e74705SXin Li
vec_vand(vector short __a,vector bool short __b)951*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vand(vector short __a,
952*67e74705SXin Li vector bool short __b) {
953*67e74705SXin Li return __a & (vector short)__b;
954*67e74705SXin Li }
955*67e74705SXin Li
956*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vand(vector unsigned short __a,vector unsigned short __b)957*67e74705SXin Li vec_vand(vector unsigned short __a, vector unsigned short __b) {
958*67e74705SXin Li return __a & __b;
959*67e74705SXin Li }
960*67e74705SXin Li
961*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vand(vector bool short __a,vector unsigned short __b)962*67e74705SXin Li vec_vand(vector bool short __a, vector unsigned short __b) {
963*67e74705SXin Li return (vector unsigned short)__a & __b;
964*67e74705SXin Li }
965*67e74705SXin Li
966*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vand(vector unsigned short __a,vector bool short __b)967*67e74705SXin Li vec_vand(vector unsigned short __a, vector bool short __b) {
968*67e74705SXin Li return __a & (vector unsigned short)__b;
969*67e74705SXin Li }
970*67e74705SXin Li
971*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vand(vector bool short __a,vector bool short __b)972*67e74705SXin Li vec_vand(vector bool short __a, vector bool short __b) {
973*67e74705SXin Li return __a & __b;
974*67e74705SXin Li }
975*67e74705SXin Li
vec_vand(vector int __a,vector int __b)976*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
977*67e74705SXin Li vector int __b) {
978*67e74705SXin Li return __a & __b;
979*67e74705SXin Li }
980*67e74705SXin Li
vec_vand(vector bool int __a,vector int __b)981*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vand(vector bool int __a,
982*67e74705SXin Li vector int __b) {
983*67e74705SXin Li return (vector int)__a & __b;
984*67e74705SXin Li }
985*67e74705SXin Li
vec_vand(vector int __a,vector bool int __b)986*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vand(vector int __a,
987*67e74705SXin Li vector bool int __b) {
988*67e74705SXin Li return __a & (vector int)__b;
989*67e74705SXin Li }
990*67e74705SXin Li
991*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vand(vector unsigned int __a,vector unsigned int __b)992*67e74705SXin Li vec_vand(vector unsigned int __a, vector unsigned int __b) {
993*67e74705SXin Li return __a & __b;
994*67e74705SXin Li }
995*67e74705SXin Li
996*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vand(vector bool int __a,vector unsigned int __b)997*67e74705SXin Li vec_vand(vector bool int __a, vector unsigned int __b) {
998*67e74705SXin Li return (vector unsigned int)__a & __b;
999*67e74705SXin Li }
1000*67e74705SXin Li
1001*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vand(vector unsigned int __a,vector bool int __b)1002*67e74705SXin Li vec_vand(vector unsigned int __a, vector bool int __b) {
1003*67e74705SXin Li return __a & (vector unsigned int)__b;
1004*67e74705SXin Li }
1005*67e74705SXin Li
vec_vand(vector bool int __a,vector bool int __b)1006*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_vand(vector bool int __a,
1007*67e74705SXin Li vector bool int __b) {
1008*67e74705SXin Li return __a & __b;
1009*67e74705SXin Li }
1010*67e74705SXin Li
vec_vand(vector float __a,vector float __b)1011*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
1012*67e74705SXin Li vector float __b) {
1013*67e74705SXin Li vector unsigned int __res =
1014*67e74705SXin Li (vector unsigned int)__a & (vector unsigned int)__b;
1015*67e74705SXin Li return (vector float)__res;
1016*67e74705SXin Li }
1017*67e74705SXin Li
vec_vand(vector bool int __a,vector float __b)1018*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vand(vector bool int __a,
1019*67e74705SXin Li vector float __b) {
1020*67e74705SXin Li vector unsigned int __res =
1021*67e74705SXin Li (vector unsigned int)__a & (vector unsigned int)__b;
1022*67e74705SXin Li return (vector float)__res;
1023*67e74705SXin Li }
1024*67e74705SXin Li
vec_vand(vector float __a,vector bool int __b)1025*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vand(vector float __a,
1026*67e74705SXin Li vector bool int __b) {
1027*67e74705SXin Li vector unsigned int __res =
1028*67e74705SXin Li (vector unsigned int)__a & (vector unsigned int)__b;
1029*67e74705SXin Li return (vector float)__res;
1030*67e74705SXin Li }
1031*67e74705SXin Li
1032*67e74705SXin Li #ifdef __VSX__
1033*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_vand(vector signed long long __a,vector signed long long __b)1034*67e74705SXin Li vec_vand(vector signed long long __a, vector signed long long __b) {
1035*67e74705SXin Li return __a & __b;
1036*67e74705SXin Li }
1037*67e74705SXin Li
1038*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_vand(vector bool long long __a,vector signed long long __b)1039*67e74705SXin Li vec_vand(vector bool long long __a, vector signed long long __b) {
1040*67e74705SXin Li return (vector signed long long)__a & __b;
1041*67e74705SXin Li }
1042*67e74705SXin Li
1043*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_vand(vector signed long long __a,vector bool long long __b)1044*67e74705SXin Li vec_vand(vector signed long long __a, vector bool long long __b) {
1045*67e74705SXin Li return __a & (vector signed long long)__b;
1046*67e74705SXin Li }
1047*67e74705SXin Li
1048*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vand(vector unsigned long long __a,vector unsigned long long __b)1049*67e74705SXin Li vec_vand(vector unsigned long long __a, vector unsigned long long __b) {
1050*67e74705SXin Li return __a & __b;
1051*67e74705SXin Li }
1052*67e74705SXin Li
1053*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vand(vector bool long long __a,vector unsigned long long __b)1054*67e74705SXin Li vec_vand(vector bool long long __a, vector unsigned long long __b) {
1055*67e74705SXin Li return (vector unsigned long long)__a & __b;
1056*67e74705SXin Li }
1057*67e74705SXin Li
1058*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vand(vector unsigned long long __a,vector bool long long __b)1059*67e74705SXin Li vec_vand(vector unsigned long long __a, vector bool long long __b) {
1060*67e74705SXin Li return __a & (vector unsigned long long)__b;
1061*67e74705SXin Li }
1062*67e74705SXin Li
1063*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_vand(vector bool long long __a,vector bool long long __b)1064*67e74705SXin Li vec_vand(vector bool long long __a, vector bool long long __b) {
1065*67e74705SXin Li return __a & __b;
1066*67e74705SXin Li }
1067*67e74705SXin Li #endif
1068*67e74705SXin Li
1069*67e74705SXin Li /* vec_andc */
1070*67e74705SXin Li
1071*67e74705SXin Li #define __builtin_altivec_vandc vec_andc
1072*67e74705SXin Li
1073*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_andc(vector signed char __a,vector signed char __b)1074*67e74705SXin Li vec_andc(vector signed char __a, vector signed char __b) {
1075*67e74705SXin Li return __a & ~__b;
1076*67e74705SXin Li }
1077*67e74705SXin Li
1078*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_andc(vector bool char __a,vector signed char __b)1079*67e74705SXin Li vec_andc(vector bool char __a, vector signed char __b) {
1080*67e74705SXin Li return (vector signed char)__a & ~__b;
1081*67e74705SXin Li }
1082*67e74705SXin Li
1083*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_andc(vector signed char __a,vector bool char __b)1084*67e74705SXin Li vec_andc(vector signed char __a, vector bool char __b) {
1085*67e74705SXin Li return __a & ~(vector signed char)__b;
1086*67e74705SXin Li }
1087*67e74705SXin Li
1088*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_andc(vector unsigned char __a,vector unsigned char __b)1089*67e74705SXin Li vec_andc(vector unsigned char __a, vector unsigned char __b) {
1090*67e74705SXin Li return __a & ~__b;
1091*67e74705SXin Li }
1092*67e74705SXin Li
1093*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_andc(vector bool char __a,vector unsigned char __b)1094*67e74705SXin Li vec_andc(vector bool char __a, vector unsigned char __b) {
1095*67e74705SXin Li return (vector unsigned char)__a & ~__b;
1096*67e74705SXin Li }
1097*67e74705SXin Li
1098*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_andc(vector unsigned char __a,vector bool char __b)1099*67e74705SXin Li vec_andc(vector unsigned char __a, vector bool char __b) {
1100*67e74705SXin Li return __a & ~(vector unsigned char)__b;
1101*67e74705SXin Li }
1102*67e74705SXin Li
vec_andc(vector bool char __a,vector bool char __b)1103*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_andc(vector bool char __a,
1104*67e74705SXin Li vector bool char __b) {
1105*67e74705SXin Li return __a & ~__b;
1106*67e74705SXin Li }
1107*67e74705SXin Li
vec_andc(vector short __a,vector short __b)1108*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
1109*67e74705SXin Li vector short __b) {
1110*67e74705SXin Li return __a & ~__b;
1111*67e74705SXin Li }
1112*67e74705SXin Li
vec_andc(vector bool short __a,vector short __b)1113*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_andc(vector bool short __a,
1114*67e74705SXin Li vector short __b) {
1115*67e74705SXin Li return (vector short)__a & ~__b;
1116*67e74705SXin Li }
1117*67e74705SXin Li
vec_andc(vector short __a,vector bool short __b)1118*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_andc(vector short __a,
1119*67e74705SXin Li vector bool short __b) {
1120*67e74705SXin Li return __a & ~(vector short)__b;
1121*67e74705SXin Li }
1122*67e74705SXin Li
1123*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_andc(vector unsigned short __a,vector unsigned short __b)1124*67e74705SXin Li vec_andc(vector unsigned short __a, vector unsigned short __b) {
1125*67e74705SXin Li return __a & ~__b;
1126*67e74705SXin Li }
1127*67e74705SXin Li
1128*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_andc(vector bool short __a,vector unsigned short __b)1129*67e74705SXin Li vec_andc(vector bool short __a, vector unsigned short __b) {
1130*67e74705SXin Li return (vector unsigned short)__a & ~__b;
1131*67e74705SXin Li }
1132*67e74705SXin Li
1133*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_andc(vector unsigned short __a,vector bool short __b)1134*67e74705SXin Li vec_andc(vector unsigned short __a, vector bool short __b) {
1135*67e74705SXin Li return __a & ~(vector unsigned short)__b;
1136*67e74705SXin Li }
1137*67e74705SXin Li
1138*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_andc(vector bool short __a,vector bool short __b)1139*67e74705SXin Li vec_andc(vector bool short __a, vector bool short __b) {
1140*67e74705SXin Li return __a & ~__b;
1141*67e74705SXin Li }
1142*67e74705SXin Li
vec_andc(vector int __a,vector int __b)1143*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
1144*67e74705SXin Li vector int __b) {
1145*67e74705SXin Li return __a & ~__b;
1146*67e74705SXin Li }
1147*67e74705SXin Li
vec_andc(vector bool int __a,vector int __b)1148*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_andc(vector bool int __a,
1149*67e74705SXin Li vector int __b) {
1150*67e74705SXin Li return (vector int)__a & ~__b;
1151*67e74705SXin Li }
1152*67e74705SXin Li
vec_andc(vector int __a,vector bool int __b)1153*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_andc(vector int __a,
1154*67e74705SXin Li vector bool int __b) {
1155*67e74705SXin Li return __a & ~(vector int)__b;
1156*67e74705SXin Li }
1157*67e74705SXin Li
1158*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_andc(vector unsigned int __a,vector unsigned int __b)1159*67e74705SXin Li vec_andc(vector unsigned int __a, vector unsigned int __b) {
1160*67e74705SXin Li return __a & ~__b;
1161*67e74705SXin Li }
1162*67e74705SXin Li
1163*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_andc(vector bool int __a,vector unsigned int __b)1164*67e74705SXin Li vec_andc(vector bool int __a, vector unsigned int __b) {
1165*67e74705SXin Li return (vector unsigned int)__a & ~__b;
1166*67e74705SXin Li }
1167*67e74705SXin Li
1168*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_andc(vector unsigned int __a,vector bool int __b)1169*67e74705SXin Li vec_andc(vector unsigned int __a, vector bool int __b) {
1170*67e74705SXin Li return __a & ~(vector unsigned int)__b;
1171*67e74705SXin Li }
1172*67e74705SXin Li
vec_andc(vector bool int __a,vector bool int __b)1173*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_andc(vector bool int __a,
1174*67e74705SXin Li vector bool int __b) {
1175*67e74705SXin Li return __a & ~__b;
1176*67e74705SXin Li }
1177*67e74705SXin Li
vec_andc(vector float __a,vector float __b)1178*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
1179*67e74705SXin Li vector float __b) {
1180*67e74705SXin Li vector unsigned int __res =
1181*67e74705SXin Li (vector unsigned int)__a & ~(vector unsigned int)__b;
1182*67e74705SXin Li return (vector float)__res;
1183*67e74705SXin Li }
1184*67e74705SXin Li
vec_andc(vector bool int __a,vector float __b)1185*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_andc(vector bool int __a,
1186*67e74705SXin Li vector float __b) {
1187*67e74705SXin Li vector unsigned int __res =
1188*67e74705SXin Li (vector unsigned int)__a & ~(vector unsigned int)__b;
1189*67e74705SXin Li return (vector float)__res;
1190*67e74705SXin Li }
1191*67e74705SXin Li
vec_andc(vector float __a,vector bool int __b)1192*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_andc(vector float __a,
1193*67e74705SXin Li vector bool int __b) {
1194*67e74705SXin Li vector unsigned int __res =
1195*67e74705SXin Li (vector unsigned int)__a & ~(vector unsigned int)__b;
1196*67e74705SXin Li return (vector float)__res;
1197*67e74705SXin Li }
1198*67e74705SXin Li
1199*67e74705SXin Li #ifdef __VSX__
vec_andc(vector bool long long __a,vector double __b)1200*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_andc(vector bool long long __a,
1201*67e74705SXin Li vector double __b) {
1202*67e74705SXin Li vector unsigned long long __res =
1203*67e74705SXin Li (vector unsigned long long)__a & ~(vector unsigned long long)__b;
1204*67e74705SXin Li return (vector double)__res;
1205*67e74705SXin Li }
1206*67e74705SXin Li
1207*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_andc(vector double __a,vector bool long long __b)1208*67e74705SXin Li vec_andc(vector double __a, vector bool long long __b) {
1209*67e74705SXin Li vector unsigned long long __res =
1210*67e74705SXin Li (vector unsigned long long)__a & ~(vector unsigned long long)__b;
1211*67e74705SXin Li return (vector double)__res;
1212*67e74705SXin Li }
1213*67e74705SXin Li
vec_andc(vector double __a,vector double __b)1214*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_andc(vector double __a,
1215*67e74705SXin Li vector double __b) {
1216*67e74705SXin Li vector unsigned long long __res =
1217*67e74705SXin Li (vector unsigned long long)__a & ~(vector unsigned long long)__b;
1218*67e74705SXin Li return (vector double)__res;
1219*67e74705SXin Li }
1220*67e74705SXin Li
1221*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_andc(vector signed long long __a,vector signed long long __b)1222*67e74705SXin Li vec_andc(vector signed long long __a, vector signed long long __b) {
1223*67e74705SXin Li return __a & ~__b;
1224*67e74705SXin Li }
1225*67e74705SXin Li
1226*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_andc(vector bool long long __a,vector signed long long __b)1227*67e74705SXin Li vec_andc(vector bool long long __a, vector signed long long __b) {
1228*67e74705SXin Li return (vector signed long long)__a & ~__b;
1229*67e74705SXin Li }
1230*67e74705SXin Li
1231*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_andc(vector signed long long __a,vector bool long long __b)1232*67e74705SXin Li vec_andc(vector signed long long __a, vector bool long long __b) {
1233*67e74705SXin Li return __a & ~(vector signed long long)__b;
1234*67e74705SXin Li }
1235*67e74705SXin Li
1236*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_andc(vector unsigned long long __a,vector unsigned long long __b)1237*67e74705SXin Li vec_andc(vector unsigned long long __a, vector unsigned long long __b) {
1238*67e74705SXin Li return __a & ~__b;
1239*67e74705SXin Li }
1240*67e74705SXin Li
1241*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_andc(vector bool long long __a,vector unsigned long long __b)1242*67e74705SXin Li vec_andc(vector bool long long __a, vector unsigned long long __b) {
1243*67e74705SXin Li return (vector unsigned long long)__a & ~__b;
1244*67e74705SXin Li }
1245*67e74705SXin Li
1246*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_andc(vector unsigned long long __a,vector bool long long __b)1247*67e74705SXin Li vec_andc(vector unsigned long long __a, vector bool long long __b) {
1248*67e74705SXin Li return __a & ~(vector unsigned long long)__b;
1249*67e74705SXin Li }
1250*67e74705SXin Li
1251*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_andc(vector bool long long __a,vector bool long long __b)1252*67e74705SXin Li vec_andc(vector bool long long __a, vector bool long long __b) {
1253*67e74705SXin Li return __a & ~__b;
1254*67e74705SXin Li }
1255*67e74705SXin Li #endif
1256*67e74705SXin Li
1257*67e74705SXin Li /* vec_vandc */
1258*67e74705SXin Li
1259*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vandc(vector signed char __a,vector signed char __b)1260*67e74705SXin Li vec_vandc(vector signed char __a, vector signed char __b) {
1261*67e74705SXin Li return __a & ~__b;
1262*67e74705SXin Li }
1263*67e74705SXin Li
1264*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vandc(vector bool char __a,vector signed char __b)1265*67e74705SXin Li vec_vandc(vector bool char __a, vector signed char __b) {
1266*67e74705SXin Li return (vector signed char)__a & ~__b;
1267*67e74705SXin Li }
1268*67e74705SXin Li
1269*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vandc(vector signed char __a,vector bool char __b)1270*67e74705SXin Li vec_vandc(vector signed char __a, vector bool char __b) {
1271*67e74705SXin Li return __a & ~(vector signed char)__b;
1272*67e74705SXin Li }
1273*67e74705SXin Li
1274*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vandc(vector unsigned char __a,vector unsigned char __b)1275*67e74705SXin Li vec_vandc(vector unsigned char __a, vector unsigned char __b) {
1276*67e74705SXin Li return __a & ~__b;
1277*67e74705SXin Li }
1278*67e74705SXin Li
1279*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vandc(vector bool char __a,vector unsigned char __b)1280*67e74705SXin Li vec_vandc(vector bool char __a, vector unsigned char __b) {
1281*67e74705SXin Li return (vector unsigned char)__a & ~__b;
1282*67e74705SXin Li }
1283*67e74705SXin Li
1284*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vandc(vector unsigned char __a,vector bool char __b)1285*67e74705SXin Li vec_vandc(vector unsigned char __a, vector bool char __b) {
1286*67e74705SXin Li return __a & ~(vector unsigned char)__b;
1287*67e74705SXin Li }
1288*67e74705SXin Li
1289*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_vandc(vector bool char __a,vector bool char __b)1290*67e74705SXin Li vec_vandc(vector bool char __a, vector bool char __b) {
1291*67e74705SXin Li return __a & ~__b;
1292*67e74705SXin Li }
1293*67e74705SXin Li
vec_vandc(vector short __a,vector short __b)1294*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
1295*67e74705SXin Li vector short __b) {
1296*67e74705SXin Li return __a & ~__b;
1297*67e74705SXin Li }
1298*67e74705SXin Li
vec_vandc(vector bool short __a,vector short __b)1299*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vandc(vector bool short __a,
1300*67e74705SXin Li vector short __b) {
1301*67e74705SXin Li return (vector short)__a & ~__b;
1302*67e74705SXin Li }
1303*67e74705SXin Li
vec_vandc(vector short __a,vector bool short __b)1304*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vandc(vector short __a,
1305*67e74705SXin Li vector bool short __b) {
1306*67e74705SXin Li return __a & ~(vector short)__b;
1307*67e74705SXin Li }
1308*67e74705SXin Li
1309*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vandc(vector unsigned short __a,vector unsigned short __b)1310*67e74705SXin Li vec_vandc(vector unsigned short __a, vector unsigned short __b) {
1311*67e74705SXin Li return __a & ~__b;
1312*67e74705SXin Li }
1313*67e74705SXin Li
1314*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vandc(vector bool short __a,vector unsigned short __b)1315*67e74705SXin Li vec_vandc(vector bool short __a, vector unsigned short __b) {
1316*67e74705SXin Li return (vector unsigned short)__a & ~__b;
1317*67e74705SXin Li }
1318*67e74705SXin Li
1319*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vandc(vector unsigned short __a,vector bool short __b)1320*67e74705SXin Li vec_vandc(vector unsigned short __a, vector bool short __b) {
1321*67e74705SXin Li return __a & ~(vector unsigned short)__b;
1322*67e74705SXin Li }
1323*67e74705SXin Li
1324*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vandc(vector bool short __a,vector bool short __b)1325*67e74705SXin Li vec_vandc(vector bool short __a, vector bool short __b) {
1326*67e74705SXin Li return __a & ~__b;
1327*67e74705SXin Li }
1328*67e74705SXin Li
vec_vandc(vector int __a,vector int __b)1329*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
1330*67e74705SXin Li vector int __b) {
1331*67e74705SXin Li return __a & ~__b;
1332*67e74705SXin Li }
1333*67e74705SXin Li
vec_vandc(vector bool int __a,vector int __b)1334*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vandc(vector bool int __a,
1335*67e74705SXin Li vector int __b) {
1336*67e74705SXin Li return (vector int)__a & ~__b;
1337*67e74705SXin Li }
1338*67e74705SXin Li
vec_vandc(vector int __a,vector bool int __b)1339*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vandc(vector int __a,
1340*67e74705SXin Li vector bool int __b) {
1341*67e74705SXin Li return __a & ~(vector int)__b;
1342*67e74705SXin Li }
1343*67e74705SXin Li
1344*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vandc(vector unsigned int __a,vector unsigned int __b)1345*67e74705SXin Li vec_vandc(vector unsigned int __a, vector unsigned int __b) {
1346*67e74705SXin Li return __a & ~__b;
1347*67e74705SXin Li }
1348*67e74705SXin Li
1349*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vandc(vector bool int __a,vector unsigned int __b)1350*67e74705SXin Li vec_vandc(vector bool int __a, vector unsigned int __b) {
1351*67e74705SXin Li return (vector unsigned int)__a & ~__b;
1352*67e74705SXin Li }
1353*67e74705SXin Li
1354*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vandc(vector unsigned int __a,vector bool int __b)1355*67e74705SXin Li vec_vandc(vector unsigned int __a, vector bool int __b) {
1356*67e74705SXin Li return __a & ~(vector unsigned int)__b;
1357*67e74705SXin Li }
1358*67e74705SXin Li
vec_vandc(vector bool int __a,vector bool int __b)1359*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_vandc(vector bool int __a,
1360*67e74705SXin Li vector bool int __b) {
1361*67e74705SXin Li return __a & ~__b;
1362*67e74705SXin Li }
1363*67e74705SXin Li
vec_vandc(vector float __a,vector float __b)1364*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
1365*67e74705SXin Li vector float __b) {
1366*67e74705SXin Li vector unsigned int __res =
1367*67e74705SXin Li (vector unsigned int)__a & ~(vector unsigned int)__b;
1368*67e74705SXin Li return (vector float)__res;
1369*67e74705SXin Li }
1370*67e74705SXin Li
vec_vandc(vector bool int __a,vector float __b)1371*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vandc(vector bool int __a,
1372*67e74705SXin Li vector float __b) {
1373*67e74705SXin Li vector unsigned int __res =
1374*67e74705SXin Li (vector unsigned int)__a & ~(vector unsigned int)__b;
1375*67e74705SXin Li return (vector float)__res;
1376*67e74705SXin Li }
1377*67e74705SXin Li
vec_vandc(vector float __a,vector bool int __b)1378*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vandc(vector float __a,
1379*67e74705SXin Li vector bool int __b) {
1380*67e74705SXin Li vector unsigned int __res =
1381*67e74705SXin Li (vector unsigned int)__a & ~(vector unsigned int)__b;
1382*67e74705SXin Li return (vector float)__res;
1383*67e74705SXin Li }
1384*67e74705SXin Li
1385*67e74705SXin Li #ifdef __VSX__
1386*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_vandc(vector signed long long __a,vector signed long long __b)1387*67e74705SXin Li vec_vandc(vector signed long long __a, vector signed long long __b) {
1388*67e74705SXin Li return __a & ~__b;
1389*67e74705SXin Li }
1390*67e74705SXin Li
1391*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_vandc(vector bool long long __a,vector signed long long __b)1392*67e74705SXin Li vec_vandc(vector bool long long __a, vector signed long long __b) {
1393*67e74705SXin Li return (vector signed long long)__a & ~__b;
1394*67e74705SXin Li }
1395*67e74705SXin Li
1396*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_vandc(vector signed long long __a,vector bool long long __b)1397*67e74705SXin Li vec_vandc(vector signed long long __a, vector bool long long __b) {
1398*67e74705SXin Li return __a & ~(vector signed long long)__b;
1399*67e74705SXin Li }
1400*67e74705SXin Li
1401*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vandc(vector unsigned long long __a,vector unsigned long long __b)1402*67e74705SXin Li vec_vandc(vector unsigned long long __a, vector unsigned long long __b) {
1403*67e74705SXin Li return __a & ~__b;
1404*67e74705SXin Li }
1405*67e74705SXin Li
1406*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vandc(vector bool long long __a,vector unsigned long long __b)1407*67e74705SXin Li vec_vandc(vector bool long long __a, vector unsigned long long __b) {
1408*67e74705SXin Li return (vector unsigned long long)__a & ~__b;
1409*67e74705SXin Li }
1410*67e74705SXin Li
1411*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vandc(vector unsigned long long __a,vector bool long long __b)1412*67e74705SXin Li vec_vandc(vector unsigned long long __a, vector bool long long __b) {
1413*67e74705SXin Li return __a & ~(vector unsigned long long)__b;
1414*67e74705SXin Li }
1415*67e74705SXin Li
1416*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_vandc(vector bool long long __a,vector bool long long __b)1417*67e74705SXin Li vec_vandc(vector bool long long __a, vector bool long long __b) {
1418*67e74705SXin Li return __a & ~__b;
1419*67e74705SXin Li }
1420*67e74705SXin Li #endif
1421*67e74705SXin Li
1422*67e74705SXin Li /* vec_avg */
1423*67e74705SXin Li
1424*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_avg(vector signed char __a,vector signed char __b)1425*67e74705SXin Li vec_avg(vector signed char __a, vector signed char __b) {
1426*67e74705SXin Li return __builtin_altivec_vavgsb(__a, __b);
1427*67e74705SXin Li }
1428*67e74705SXin Li
1429*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_avg(vector unsigned char __a,vector unsigned char __b)1430*67e74705SXin Li vec_avg(vector unsigned char __a, vector unsigned char __b) {
1431*67e74705SXin Li return __builtin_altivec_vavgub(__a, __b);
1432*67e74705SXin Li }
1433*67e74705SXin Li
vec_avg(vector short __a,vector short __b)1434*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_avg(vector short __a,
1435*67e74705SXin Li vector short __b) {
1436*67e74705SXin Li return __builtin_altivec_vavgsh(__a, __b);
1437*67e74705SXin Li }
1438*67e74705SXin Li
1439*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_avg(vector unsigned short __a,vector unsigned short __b)1440*67e74705SXin Li vec_avg(vector unsigned short __a, vector unsigned short __b) {
1441*67e74705SXin Li return __builtin_altivec_vavguh(__a, __b);
1442*67e74705SXin Li }
1443*67e74705SXin Li
vec_avg(vector int __a,vector int __b)1444*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_avg(vector int __a,
1445*67e74705SXin Li vector int __b) {
1446*67e74705SXin Li return __builtin_altivec_vavgsw(__a, __b);
1447*67e74705SXin Li }
1448*67e74705SXin Li
1449*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_avg(vector unsigned int __a,vector unsigned int __b)1450*67e74705SXin Li vec_avg(vector unsigned int __a, vector unsigned int __b) {
1451*67e74705SXin Li return __builtin_altivec_vavguw(__a, __b);
1452*67e74705SXin Li }
1453*67e74705SXin Li
1454*67e74705SXin Li /* vec_vavgsb */
1455*67e74705SXin Li
1456*67e74705SXin Li static __inline__ vector signed char __attribute__((__always_inline__))
vec_vavgsb(vector signed char __a,vector signed char __b)1457*67e74705SXin Li vec_vavgsb(vector signed char __a, vector signed char __b) {
1458*67e74705SXin Li return __builtin_altivec_vavgsb(__a, __b);
1459*67e74705SXin Li }
1460*67e74705SXin Li
1461*67e74705SXin Li /* vec_vavgub */
1462*67e74705SXin Li
1463*67e74705SXin Li static __inline__ vector unsigned char __attribute__((__always_inline__))
vec_vavgub(vector unsigned char __a,vector unsigned char __b)1464*67e74705SXin Li vec_vavgub(vector unsigned char __a, vector unsigned char __b) {
1465*67e74705SXin Li return __builtin_altivec_vavgub(__a, __b);
1466*67e74705SXin Li }
1467*67e74705SXin Li
1468*67e74705SXin Li /* vec_vavgsh */
1469*67e74705SXin Li
1470*67e74705SXin Li static __inline__ vector short __attribute__((__always_inline__))
vec_vavgsh(vector short __a,vector short __b)1471*67e74705SXin Li vec_vavgsh(vector short __a, vector short __b) {
1472*67e74705SXin Li return __builtin_altivec_vavgsh(__a, __b);
1473*67e74705SXin Li }
1474*67e74705SXin Li
1475*67e74705SXin Li /* vec_vavguh */
1476*67e74705SXin Li
1477*67e74705SXin Li static __inline__ vector unsigned short __attribute__((__always_inline__))
vec_vavguh(vector unsigned short __a,vector unsigned short __b)1478*67e74705SXin Li vec_vavguh(vector unsigned short __a, vector unsigned short __b) {
1479*67e74705SXin Li return __builtin_altivec_vavguh(__a, __b);
1480*67e74705SXin Li }
1481*67e74705SXin Li
1482*67e74705SXin Li /* vec_vavgsw */
1483*67e74705SXin Li
1484*67e74705SXin Li static __inline__ vector int __attribute__((__always_inline__))
vec_vavgsw(vector int __a,vector int __b)1485*67e74705SXin Li vec_vavgsw(vector int __a, vector int __b) {
1486*67e74705SXin Li return __builtin_altivec_vavgsw(__a, __b);
1487*67e74705SXin Li }
1488*67e74705SXin Li
1489*67e74705SXin Li /* vec_vavguw */
1490*67e74705SXin Li
1491*67e74705SXin Li static __inline__ vector unsigned int __attribute__((__always_inline__))
vec_vavguw(vector unsigned int __a,vector unsigned int __b)1492*67e74705SXin Li vec_vavguw(vector unsigned int __a, vector unsigned int __b) {
1493*67e74705SXin Li return __builtin_altivec_vavguw(__a, __b);
1494*67e74705SXin Li }
1495*67e74705SXin Li
1496*67e74705SXin Li /* vec_ceil */
1497*67e74705SXin Li
vec_ceil(vector float __a)1498*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_ceil(vector float __a) {
1499*67e74705SXin Li #ifdef __VSX__
1500*67e74705SXin Li return __builtin_vsx_xvrspip(__a);
1501*67e74705SXin Li #else
1502*67e74705SXin Li return __builtin_altivec_vrfip(__a);
1503*67e74705SXin Li #endif
1504*67e74705SXin Li }
1505*67e74705SXin Li
1506*67e74705SXin Li #ifdef __VSX__
vec_ceil(vector double __a)1507*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_ceil(vector double __a) {
1508*67e74705SXin Li return __builtin_vsx_xvrdpip(__a);
1509*67e74705SXin Li }
1510*67e74705SXin Li #endif
1511*67e74705SXin Li
1512*67e74705SXin Li /* vec_vrfip */
1513*67e74705SXin Li
1514*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vrfip(vector float __a)1515*67e74705SXin Li vec_vrfip(vector float __a) {
1516*67e74705SXin Li return __builtin_altivec_vrfip(__a);
1517*67e74705SXin Li }
1518*67e74705SXin Li
1519*67e74705SXin Li /* vec_cmpb */
1520*67e74705SXin Li
1521*67e74705SXin Li static __inline__ vector int __attribute__((__always_inline__))
vec_cmpb(vector float __a,vector float __b)1522*67e74705SXin Li vec_cmpb(vector float __a, vector float __b) {
1523*67e74705SXin Li return __builtin_altivec_vcmpbfp(__a, __b);
1524*67e74705SXin Li }
1525*67e74705SXin Li
1526*67e74705SXin Li /* vec_vcmpbfp */
1527*67e74705SXin Li
1528*67e74705SXin Li static __inline__ vector int __attribute__((__always_inline__))
vec_vcmpbfp(vector float __a,vector float __b)1529*67e74705SXin Li vec_vcmpbfp(vector float __a, vector float __b) {
1530*67e74705SXin Li return __builtin_altivec_vcmpbfp(__a, __b);
1531*67e74705SXin Li }
1532*67e74705SXin Li
1533*67e74705SXin Li /* vec_cmpeq */
1534*67e74705SXin Li
1535*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_cmpeq(vector signed char __a,vector signed char __b)1536*67e74705SXin Li vec_cmpeq(vector signed char __a, vector signed char __b) {
1537*67e74705SXin Li return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1538*67e74705SXin Li (vector char)__b);
1539*67e74705SXin Li }
1540*67e74705SXin Li
1541*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_cmpeq(vector unsigned char __a,vector unsigned char __b)1542*67e74705SXin Li vec_cmpeq(vector unsigned char __a, vector unsigned char __b) {
1543*67e74705SXin Li return (vector bool char)__builtin_altivec_vcmpequb((vector char)__a,
1544*67e74705SXin Li (vector char)__b);
1545*67e74705SXin Li }
1546*67e74705SXin Li
vec_cmpeq(vector short __a,vector short __b)1547*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai vec_cmpeq(vector short __a,
1548*67e74705SXin Li vector short __b) {
1549*67e74705SXin Li return (vector bool short)__builtin_altivec_vcmpequh(__a, __b);
1550*67e74705SXin Li }
1551*67e74705SXin Li
1552*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_cmpeq(vector unsigned short __a,vector unsigned short __b)1553*67e74705SXin Li vec_cmpeq(vector unsigned short __a, vector unsigned short __b) {
1554*67e74705SXin Li return (vector bool short)__builtin_altivec_vcmpequh((vector short)__a,
1555*67e74705SXin Li (vector short)__b);
1556*67e74705SXin Li }
1557*67e74705SXin Li
vec_cmpeq(vector int __a,vector int __b)1558*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector int __a,
1559*67e74705SXin Li vector int __b) {
1560*67e74705SXin Li return (vector bool int)__builtin_altivec_vcmpequw(__a, __b);
1561*67e74705SXin Li }
1562*67e74705SXin Li
1563*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_cmpeq(vector unsigned int __a,vector unsigned int __b)1564*67e74705SXin Li vec_cmpeq(vector unsigned int __a, vector unsigned int __b) {
1565*67e74705SXin Li return (vector bool int)__builtin_altivec_vcmpequw((vector int)__a,
1566*67e74705SXin Li (vector int)__b);
1567*67e74705SXin Li }
1568*67e74705SXin Li
1569*67e74705SXin Li #ifdef __POWER8_VECTOR__
1570*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmpeq(vector signed long long __a,vector signed long long __b)1571*67e74705SXin Li vec_cmpeq(vector signed long long __a, vector signed long long __b) {
1572*67e74705SXin Li return (vector bool long long)__builtin_altivec_vcmpequd(__a, __b);
1573*67e74705SXin Li }
1574*67e74705SXin Li
1575*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmpeq(vector unsigned long long __a,vector unsigned long long __b)1576*67e74705SXin Li vec_cmpeq(vector unsigned long long __a, vector unsigned long long __b) {
1577*67e74705SXin Li return (vector bool long long)__builtin_altivec_vcmpequd(
1578*67e74705SXin Li (vector long long)__a, (vector long long)__b);
1579*67e74705SXin Li }
1580*67e74705SXin Li #endif
1581*67e74705SXin Li
vec_cmpeq(vector float __a,vector float __b)1582*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_cmpeq(vector float __a,
1583*67e74705SXin Li vector float __b) {
1584*67e74705SXin Li #ifdef __VSX__
1585*67e74705SXin Li return (vector bool int)__builtin_vsx_xvcmpeqsp(__a, __b);
1586*67e74705SXin Li #else
1587*67e74705SXin Li return (vector bool int)__builtin_altivec_vcmpeqfp(__a, __b);
1588*67e74705SXin Li #endif
1589*67e74705SXin Li }
1590*67e74705SXin Li
1591*67e74705SXin Li #ifdef __VSX__
1592*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmpeq(vector double __a,vector double __b)1593*67e74705SXin Li vec_cmpeq(vector double __a, vector double __b) {
1594*67e74705SXin Li return (vector bool long long)__builtin_vsx_xvcmpeqdp(__a, __b);
1595*67e74705SXin Li }
1596*67e74705SXin Li #endif
1597*67e74705SXin Li
1598*67e74705SXin Li /* vec_cmpgt */
1599*67e74705SXin Li
1600*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_cmpgt(vector signed char __a,vector signed char __b)1601*67e74705SXin Li vec_cmpgt(vector signed char __a, vector signed char __b) {
1602*67e74705SXin Li return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
1603*67e74705SXin Li }
1604*67e74705SXin Li
1605*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_cmpgt(vector unsigned char __a,vector unsigned char __b)1606*67e74705SXin Li vec_cmpgt(vector unsigned char __a, vector unsigned char __b) {
1607*67e74705SXin Li return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
1608*67e74705SXin Li }
1609*67e74705SXin Li
vec_cmpgt(vector short __a,vector short __b)1610*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai vec_cmpgt(vector short __a,
1611*67e74705SXin Li vector short __b) {
1612*67e74705SXin Li return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
1613*67e74705SXin Li }
1614*67e74705SXin Li
1615*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_cmpgt(vector unsigned short __a,vector unsigned short __b)1616*67e74705SXin Li vec_cmpgt(vector unsigned short __a, vector unsigned short __b) {
1617*67e74705SXin Li return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
1618*67e74705SXin Li }
1619*67e74705SXin Li
vec_cmpgt(vector int __a,vector int __b)1620*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector int __a,
1621*67e74705SXin Li vector int __b) {
1622*67e74705SXin Li return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
1623*67e74705SXin Li }
1624*67e74705SXin Li
1625*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_cmpgt(vector unsigned int __a,vector unsigned int __b)1626*67e74705SXin Li vec_cmpgt(vector unsigned int __a, vector unsigned int __b) {
1627*67e74705SXin Li return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
1628*67e74705SXin Li }
1629*67e74705SXin Li
1630*67e74705SXin Li #ifdef __POWER8_VECTOR__
1631*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmpgt(vector signed long long __a,vector signed long long __b)1632*67e74705SXin Li vec_cmpgt(vector signed long long __a, vector signed long long __b) {
1633*67e74705SXin Li return (vector bool long long)__builtin_altivec_vcmpgtsd(__a, __b);
1634*67e74705SXin Li }
1635*67e74705SXin Li
1636*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmpgt(vector unsigned long long __a,vector unsigned long long __b)1637*67e74705SXin Li vec_cmpgt(vector unsigned long long __a, vector unsigned long long __b) {
1638*67e74705SXin Li return (vector bool long long)__builtin_altivec_vcmpgtud(__a, __b);
1639*67e74705SXin Li }
1640*67e74705SXin Li #endif
1641*67e74705SXin Li
vec_cmpgt(vector float __a,vector float __b)1642*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_cmpgt(vector float __a,
1643*67e74705SXin Li vector float __b) {
1644*67e74705SXin Li #ifdef __VSX__
1645*67e74705SXin Li return (vector bool int)__builtin_vsx_xvcmpgtsp(__a, __b);
1646*67e74705SXin Li #else
1647*67e74705SXin Li return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
1648*67e74705SXin Li #endif
1649*67e74705SXin Li }
1650*67e74705SXin Li
1651*67e74705SXin Li #ifdef __VSX__
1652*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmpgt(vector double __a,vector double __b)1653*67e74705SXin Li vec_cmpgt(vector double __a, vector double __b) {
1654*67e74705SXin Li return (vector bool long long)__builtin_vsx_xvcmpgtdp(__a, __b);
1655*67e74705SXin Li }
1656*67e74705SXin Li #endif
1657*67e74705SXin Li
1658*67e74705SXin Li /* vec_cmpge */
1659*67e74705SXin Li
1660*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_cmpge(vector signed char __a,vector signed char __b)1661*67e74705SXin Li vec_cmpge(vector signed char __a, vector signed char __b) {
1662*67e74705SXin Li return ~(vec_cmpgt(__b, __a));
1663*67e74705SXin Li }
1664*67e74705SXin Li
1665*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_cmpge(vector unsigned char __a,vector unsigned char __b)1666*67e74705SXin Li vec_cmpge(vector unsigned char __a, vector unsigned char __b) {
1667*67e74705SXin Li return ~(vec_cmpgt(__b, __a));
1668*67e74705SXin Li }
1669*67e74705SXin Li
1670*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_cmpge(vector signed short __a,vector signed short __b)1671*67e74705SXin Li vec_cmpge(vector signed short __a, vector signed short __b) {
1672*67e74705SXin Li return ~(vec_cmpgt(__b, __a));
1673*67e74705SXin Li }
1674*67e74705SXin Li
1675*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_cmpge(vector unsigned short __a,vector unsigned short __b)1676*67e74705SXin Li vec_cmpge(vector unsigned short __a, vector unsigned short __b) {
1677*67e74705SXin Li return ~(vec_cmpgt(__b, __a));
1678*67e74705SXin Li }
1679*67e74705SXin Li
1680*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_cmpge(vector signed int __a,vector signed int __b)1681*67e74705SXin Li vec_cmpge(vector signed int __a, vector signed int __b) {
1682*67e74705SXin Li return ~(vec_cmpgt(__b, __a));
1683*67e74705SXin Li }
1684*67e74705SXin Li
1685*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_cmpge(vector unsigned int __a,vector unsigned int __b)1686*67e74705SXin Li vec_cmpge(vector unsigned int __a, vector unsigned int __b) {
1687*67e74705SXin Li return ~(vec_cmpgt(__b, __a));
1688*67e74705SXin Li }
1689*67e74705SXin Li
vec_cmpge(vector float __a,vector float __b)1690*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_cmpge(vector float __a,
1691*67e74705SXin Li vector float __b) {
1692*67e74705SXin Li #ifdef __VSX__
1693*67e74705SXin Li return (vector bool int)__builtin_vsx_xvcmpgesp(__a, __b);
1694*67e74705SXin Li #else
1695*67e74705SXin Li return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
1696*67e74705SXin Li #endif
1697*67e74705SXin Li }
1698*67e74705SXin Li
1699*67e74705SXin Li #ifdef __VSX__
1700*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmpge(vector double __a,vector double __b)1701*67e74705SXin Li vec_cmpge(vector double __a, vector double __b) {
1702*67e74705SXin Li return (vector bool long long)__builtin_vsx_xvcmpgedp(__a, __b);
1703*67e74705SXin Li }
1704*67e74705SXin Li #endif
1705*67e74705SXin Li
1706*67e74705SXin Li #ifdef __POWER8_VECTOR__
1707*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmpge(vector signed long long __a,vector signed long long __b)1708*67e74705SXin Li vec_cmpge(vector signed long long __a, vector signed long long __b) {
1709*67e74705SXin Li return ~(vec_cmpgt(__b, __a));
1710*67e74705SXin Li }
1711*67e74705SXin Li
1712*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmpge(vector unsigned long long __a,vector unsigned long long __b)1713*67e74705SXin Li vec_cmpge(vector unsigned long long __a, vector unsigned long long __b) {
1714*67e74705SXin Li return ~(vec_cmpgt(__b, __a));
1715*67e74705SXin Li }
1716*67e74705SXin Li #endif
1717*67e74705SXin Li
1718*67e74705SXin Li /* vec_vcmpgefp */
1719*67e74705SXin Li
1720*67e74705SXin Li static __inline__ vector bool int __attribute__((__always_inline__))
vec_vcmpgefp(vector float __a,vector float __b)1721*67e74705SXin Li vec_vcmpgefp(vector float __a, vector float __b) {
1722*67e74705SXin Li return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b);
1723*67e74705SXin Li }
1724*67e74705SXin Li
1725*67e74705SXin Li /* vec_vcmpgtsb */
1726*67e74705SXin Li
1727*67e74705SXin Li static __inline__ vector bool char __attribute__((__always_inline__))
vec_vcmpgtsb(vector signed char __a,vector signed char __b)1728*67e74705SXin Li vec_vcmpgtsb(vector signed char __a, vector signed char __b) {
1729*67e74705SXin Li return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b);
1730*67e74705SXin Li }
1731*67e74705SXin Li
1732*67e74705SXin Li /* vec_vcmpgtub */
1733*67e74705SXin Li
1734*67e74705SXin Li static __inline__ vector bool char __attribute__((__always_inline__))
vec_vcmpgtub(vector unsigned char __a,vector unsigned char __b)1735*67e74705SXin Li vec_vcmpgtub(vector unsigned char __a, vector unsigned char __b) {
1736*67e74705SXin Li return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b);
1737*67e74705SXin Li }
1738*67e74705SXin Li
1739*67e74705SXin Li /* vec_vcmpgtsh */
1740*67e74705SXin Li
1741*67e74705SXin Li static __inline__ vector bool short __attribute__((__always_inline__))
vec_vcmpgtsh(vector short __a,vector short __b)1742*67e74705SXin Li vec_vcmpgtsh(vector short __a, vector short __b) {
1743*67e74705SXin Li return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b);
1744*67e74705SXin Li }
1745*67e74705SXin Li
1746*67e74705SXin Li /* vec_vcmpgtuh */
1747*67e74705SXin Li
1748*67e74705SXin Li static __inline__ vector bool short __attribute__((__always_inline__))
vec_vcmpgtuh(vector unsigned short __a,vector unsigned short __b)1749*67e74705SXin Li vec_vcmpgtuh(vector unsigned short __a, vector unsigned short __b) {
1750*67e74705SXin Li return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b);
1751*67e74705SXin Li }
1752*67e74705SXin Li
1753*67e74705SXin Li /* vec_vcmpgtsw */
1754*67e74705SXin Li
1755*67e74705SXin Li static __inline__ vector bool int __attribute__((__always_inline__))
vec_vcmpgtsw(vector int __a,vector int __b)1756*67e74705SXin Li vec_vcmpgtsw(vector int __a, vector int __b) {
1757*67e74705SXin Li return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b);
1758*67e74705SXin Li }
1759*67e74705SXin Li
1760*67e74705SXin Li /* vec_vcmpgtuw */
1761*67e74705SXin Li
1762*67e74705SXin Li static __inline__ vector bool int __attribute__((__always_inline__))
vec_vcmpgtuw(vector unsigned int __a,vector unsigned int __b)1763*67e74705SXin Li vec_vcmpgtuw(vector unsigned int __a, vector unsigned int __b) {
1764*67e74705SXin Li return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b);
1765*67e74705SXin Li }
1766*67e74705SXin Li
1767*67e74705SXin Li /* vec_vcmpgtfp */
1768*67e74705SXin Li
1769*67e74705SXin Li static __inline__ vector bool int __attribute__((__always_inline__))
vec_vcmpgtfp(vector float __a,vector float __b)1770*67e74705SXin Li vec_vcmpgtfp(vector float __a, vector float __b) {
1771*67e74705SXin Li return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b);
1772*67e74705SXin Li }
1773*67e74705SXin Li
1774*67e74705SXin Li /* vec_cmple */
1775*67e74705SXin Li
1776*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_cmple(vector signed char __a,vector signed char __b)1777*67e74705SXin Li vec_cmple(vector signed char __a, vector signed char __b) {
1778*67e74705SXin Li return vec_cmpge(__b, __a);
1779*67e74705SXin Li }
1780*67e74705SXin Li
1781*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_cmple(vector unsigned char __a,vector unsigned char __b)1782*67e74705SXin Li vec_cmple(vector unsigned char __a, vector unsigned char __b) {
1783*67e74705SXin Li return vec_cmpge(__b, __a);
1784*67e74705SXin Li }
1785*67e74705SXin Li
1786*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_cmple(vector signed short __a,vector signed short __b)1787*67e74705SXin Li vec_cmple(vector signed short __a, vector signed short __b) {
1788*67e74705SXin Li return vec_cmpge(__b, __a);
1789*67e74705SXin Li }
1790*67e74705SXin Li
1791*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_cmple(vector unsigned short __a,vector unsigned short __b)1792*67e74705SXin Li vec_cmple(vector unsigned short __a, vector unsigned short __b) {
1793*67e74705SXin Li return vec_cmpge(__b, __a);
1794*67e74705SXin Li }
1795*67e74705SXin Li
1796*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_cmple(vector signed int __a,vector signed int __b)1797*67e74705SXin Li vec_cmple(vector signed int __a, vector signed int __b) {
1798*67e74705SXin Li return vec_cmpge(__b, __a);
1799*67e74705SXin Li }
1800*67e74705SXin Li
1801*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_cmple(vector unsigned int __a,vector unsigned int __b)1802*67e74705SXin Li vec_cmple(vector unsigned int __a, vector unsigned int __b) {
1803*67e74705SXin Li return vec_cmpge(__b, __a);
1804*67e74705SXin Li }
1805*67e74705SXin Li
vec_cmple(vector float __a,vector float __b)1806*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_cmple(vector float __a,
1807*67e74705SXin Li vector float __b) {
1808*67e74705SXin Li return vec_cmpge(__b, __a);
1809*67e74705SXin Li }
1810*67e74705SXin Li
1811*67e74705SXin Li #ifdef __VSX__
1812*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmple(vector double __a,vector double __b)1813*67e74705SXin Li vec_cmple(vector double __a, vector double __b) {
1814*67e74705SXin Li return vec_cmpge(__b, __a);
1815*67e74705SXin Li }
1816*67e74705SXin Li #endif
1817*67e74705SXin Li
1818*67e74705SXin Li #ifdef __POWER8_VECTOR__
1819*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmple(vector signed long long __a,vector signed long long __b)1820*67e74705SXin Li vec_cmple(vector signed long long __a, vector signed long long __b) {
1821*67e74705SXin Li return vec_cmpge(__b, __a);
1822*67e74705SXin Li }
1823*67e74705SXin Li
1824*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmple(vector unsigned long long __a,vector unsigned long long __b)1825*67e74705SXin Li vec_cmple(vector unsigned long long __a, vector unsigned long long __b) {
1826*67e74705SXin Li return vec_cmpge(__b, __a);
1827*67e74705SXin Li }
1828*67e74705SXin Li #endif
1829*67e74705SXin Li
1830*67e74705SXin Li /* vec_cmplt */
1831*67e74705SXin Li
1832*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_cmplt(vector signed char __a,vector signed char __b)1833*67e74705SXin Li vec_cmplt(vector signed char __a, vector signed char __b) {
1834*67e74705SXin Li return vec_cmpgt(__b, __a);
1835*67e74705SXin Li }
1836*67e74705SXin Li
1837*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_cmplt(vector unsigned char __a,vector unsigned char __b)1838*67e74705SXin Li vec_cmplt(vector unsigned char __a, vector unsigned char __b) {
1839*67e74705SXin Li return vec_cmpgt(__b, __a);
1840*67e74705SXin Li }
1841*67e74705SXin Li
vec_cmplt(vector short __a,vector short __b)1842*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai vec_cmplt(vector short __a,
1843*67e74705SXin Li vector short __b) {
1844*67e74705SXin Li return vec_cmpgt(__b, __a);
1845*67e74705SXin Li }
1846*67e74705SXin Li
1847*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_cmplt(vector unsigned short __a,vector unsigned short __b)1848*67e74705SXin Li vec_cmplt(vector unsigned short __a, vector unsigned short __b) {
1849*67e74705SXin Li return vec_cmpgt(__b, __a);
1850*67e74705SXin Li }
1851*67e74705SXin Li
vec_cmplt(vector int __a,vector int __b)1852*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector int __a,
1853*67e74705SXin Li vector int __b) {
1854*67e74705SXin Li return vec_cmpgt(__b, __a);
1855*67e74705SXin Li }
1856*67e74705SXin Li
1857*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_cmplt(vector unsigned int __a,vector unsigned int __b)1858*67e74705SXin Li vec_cmplt(vector unsigned int __a, vector unsigned int __b) {
1859*67e74705SXin Li return vec_cmpgt(__b, __a);
1860*67e74705SXin Li }
1861*67e74705SXin Li
vec_cmplt(vector float __a,vector float __b)1862*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_cmplt(vector float __a,
1863*67e74705SXin Li vector float __b) {
1864*67e74705SXin Li return vec_cmpgt(__b, __a);
1865*67e74705SXin Li }
1866*67e74705SXin Li
1867*67e74705SXin Li #ifdef __VSX__
1868*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmplt(vector double __a,vector double __b)1869*67e74705SXin Li vec_cmplt(vector double __a, vector double __b) {
1870*67e74705SXin Li return vec_cmpgt(__b, __a);
1871*67e74705SXin Li }
1872*67e74705SXin Li #endif
1873*67e74705SXin Li
1874*67e74705SXin Li #ifdef __POWER8_VECTOR__
1875*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmplt(vector signed long long __a,vector signed long long __b)1876*67e74705SXin Li vec_cmplt(vector signed long long __a, vector signed long long __b) {
1877*67e74705SXin Li return vec_cmpgt(__b, __a);
1878*67e74705SXin Li }
1879*67e74705SXin Li
1880*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_cmplt(vector unsigned long long __a,vector unsigned long long __b)1881*67e74705SXin Li vec_cmplt(vector unsigned long long __a, vector unsigned long long __b) {
1882*67e74705SXin Li return vec_cmpgt(__b, __a);
1883*67e74705SXin Li }
1884*67e74705SXin Li
1885*67e74705SXin Li /* vec_cntlz */
1886*67e74705SXin Li
1887*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_cntlz(vector signed char __a)1888*67e74705SXin Li vec_cntlz(vector signed char __a) {
1889*67e74705SXin Li return __builtin_altivec_vclzb(__a);
1890*67e74705SXin Li }
1891*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_cntlz(vector unsigned char __a)1892*67e74705SXin Li vec_cntlz(vector unsigned char __a) {
1893*67e74705SXin Li return __builtin_altivec_vclzb(__a);
1894*67e74705SXin Li }
1895*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_cntlz(vector signed short __a)1896*67e74705SXin Li vec_cntlz(vector signed short __a) {
1897*67e74705SXin Li return __builtin_altivec_vclzh(__a);
1898*67e74705SXin Li }
1899*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_cntlz(vector unsigned short __a)1900*67e74705SXin Li vec_cntlz(vector unsigned short __a) {
1901*67e74705SXin Li return __builtin_altivec_vclzh(__a);
1902*67e74705SXin Li }
1903*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_cntlz(vector signed int __a)1904*67e74705SXin Li vec_cntlz(vector signed int __a) {
1905*67e74705SXin Li return __builtin_altivec_vclzw(__a);
1906*67e74705SXin Li }
1907*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_cntlz(vector unsigned int __a)1908*67e74705SXin Li vec_cntlz(vector unsigned int __a) {
1909*67e74705SXin Li return __builtin_altivec_vclzw(__a);
1910*67e74705SXin Li }
1911*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_cntlz(vector signed long long __a)1912*67e74705SXin Li vec_cntlz(vector signed long long __a) {
1913*67e74705SXin Li return __builtin_altivec_vclzd(__a);
1914*67e74705SXin Li }
1915*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_cntlz(vector unsigned long long __a)1916*67e74705SXin Li vec_cntlz(vector unsigned long long __a) {
1917*67e74705SXin Li return __builtin_altivec_vclzd(__a);
1918*67e74705SXin Li }
1919*67e74705SXin Li #endif
1920*67e74705SXin Li
1921*67e74705SXin Li /* vec_cpsgn */
1922*67e74705SXin Li
1923*67e74705SXin Li #ifdef __VSX__
vec_cpsgn(vector float __a,vector float __b)1924*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_cpsgn(vector float __a,
1925*67e74705SXin Li vector float __b) {
1926*67e74705SXin Li return __builtin_vsx_xvcpsgnsp(__a, __b);
1927*67e74705SXin Li }
1928*67e74705SXin Li
vec_cpsgn(vector double __a,vector double __b)1929*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_cpsgn(vector double __a,
1930*67e74705SXin Li vector double __b) {
1931*67e74705SXin Li return __builtin_vsx_xvcpsgndp(__a, __b);
1932*67e74705SXin Li }
1933*67e74705SXin Li #endif
1934*67e74705SXin Li
1935*67e74705SXin Li /* vec_ctf */
1936*67e74705SXin Li
vec_ctf(vector int __a,int __b)1937*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_ctf(vector int __a, int __b) {
1938*67e74705SXin Li return __builtin_altivec_vcfsx(__a, __b);
1939*67e74705SXin Li }
1940*67e74705SXin Li
vec_ctf(vector unsigned int __a,int __b)1941*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_ctf(vector unsigned int __a,
1942*67e74705SXin Li int __b) {
1943*67e74705SXin Li return __builtin_altivec_vcfux((vector int)__a, __b);
1944*67e74705SXin Li }
1945*67e74705SXin Li
1946*67e74705SXin Li #ifdef __VSX__
1947*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_ctf(vector unsigned long long __a,int __b)1948*67e74705SXin Li vec_ctf(vector unsigned long long __a, int __b) {
1949*67e74705SXin Li vector double __ret = __builtin_convertvector(__a, vector double);
1950*67e74705SXin Li __ret *= (vector double)(vector unsigned long long)((0x3ffULL - __b) << 52);
1951*67e74705SXin Li return __ret;
1952*67e74705SXin Li }
1953*67e74705SXin Li
1954*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_ctf(vector signed long long __a,int __b)1955*67e74705SXin Li vec_ctf(vector signed long long __a, int __b) {
1956*67e74705SXin Li vector double __ret = __builtin_convertvector(__a, vector double);
1957*67e74705SXin Li __ret *= (vector double)(vector unsigned long long)((0x3ffULL - __b) << 52);
1958*67e74705SXin Li return __ret;
1959*67e74705SXin Li }
1960*67e74705SXin Li #endif
1961*67e74705SXin Li
1962*67e74705SXin Li /* vec_vcfsx */
1963*67e74705SXin Li
1964*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vcfsx(vector int __a,int __b)1965*67e74705SXin Li vec_vcfsx(vector int __a, int __b) {
1966*67e74705SXin Li return __builtin_altivec_vcfsx(__a, __b);
1967*67e74705SXin Li }
1968*67e74705SXin Li
1969*67e74705SXin Li /* vec_vcfux */
1970*67e74705SXin Li
1971*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vcfux(vector unsigned int __a,int __b)1972*67e74705SXin Li vec_vcfux(vector unsigned int __a, int __b) {
1973*67e74705SXin Li return __builtin_altivec_vcfux((vector int)__a, __b);
1974*67e74705SXin Li }
1975*67e74705SXin Li
1976*67e74705SXin Li /* vec_cts */
1977*67e74705SXin Li
vec_cts(vector float __a,int __b)1978*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_cts(vector float __a, int __b) {
1979*67e74705SXin Li return __builtin_altivec_vctsxs(__a, __b);
1980*67e74705SXin Li }
1981*67e74705SXin Li
1982*67e74705SXin Li #ifdef __VSX__
1983*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_cts(vector double __a,int __b)1984*67e74705SXin Li vec_cts(vector double __a, int __b) {
1985*67e74705SXin Li __a *= (vector double)(vector unsigned long long)((0x3ffULL + __b) << 52);
1986*67e74705SXin Li return __builtin_convertvector(__a, vector signed long long);
1987*67e74705SXin Li }
1988*67e74705SXin Li #endif
1989*67e74705SXin Li
1990*67e74705SXin Li /* vec_vctsxs */
1991*67e74705SXin Li
1992*67e74705SXin Li static __inline__ vector int __attribute__((__always_inline__))
vec_vctsxs(vector float __a,int __b)1993*67e74705SXin Li vec_vctsxs(vector float __a, int __b) {
1994*67e74705SXin Li return __builtin_altivec_vctsxs(__a, __b);
1995*67e74705SXin Li }
1996*67e74705SXin Li
1997*67e74705SXin Li /* vec_ctu */
1998*67e74705SXin Li
vec_ctu(vector float __a,int __b)1999*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai vec_ctu(vector float __a,
2000*67e74705SXin Li int __b) {
2001*67e74705SXin Li return __builtin_altivec_vctuxs(__a, __b);
2002*67e74705SXin Li }
2003*67e74705SXin Li
2004*67e74705SXin Li #ifdef __VSX__
2005*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_ctu(vector double __a,int __b)2006*67e74705SXin Li vec_ctu(vector double __a, int __b) {
2007*67e74705SXin Li __a *= (vector double)(vector unsigned long long)((0x3ffULL + __b) << 52);
2008*67e74705SXin Li return __builtin_convertvector(__a, vector unsigned long long);
2009*67e74705SXin Li }
2010*67e74705SXin Li #endif
2011*67e74705SXin Li
2012*67e74705SXin Li /* vec_vctuxs */
2013*67e74705SXin Li
2014*67e74705SXin Li static __inline__ vector unsigned int __attribute__((__always_inline__))
vec_vctuxs(vector float __a,int __b)2015*67e74705SXin Li vec_vctuxs(vector float __a, int __b) {
2016*67e74705SXin Li return __builtin_altivec_vctuxs(__a, __b);
2017*67e74705SXin Li }
2018*67e74705SXin Li
2019*67e74705SXin Li /* vec_double */
2020*67e74705SXin Li
2021*67e74705SXin Li #ifdef __VSX__
2022*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_double(vector signed long long __a)2023*67e74705SXin Li vec_double(vector signed long long __a) {
2024*67e74705SXin Li vector double __ret = {__a[0], __a[1]};
2025*67e74705SXin Li return __ret;
2026*67e74705SXin Li }
2027*67e74705SXin Li
2028*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_double(vector unsigned long long __a)2029*67e74705SXin Li vec_double(vector unsigned long long __a) {
2030*67e74705SXin Li vector double __ret = {__a[0], __a[1]};
2031*67e74705SXin Li return __ret;
2032*67e74705SXin Li }
2033*67e74705SXin Li #endif
2034*67e74705SXin Li
2035*67e74705SXin Li /* vec_div */
2036*67e74705SXin Li
2037*67e74705SXin Li /* Integer vector divides (vectors are scalarized, elements divided
2038*67e74705SXin Li and the vectors reassembled).
2039*67e74705SXin Li */
2040*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_div(vector signed char __a,vector signed char __b)2041*67e74705SXin Li vec_div(vector signed char __a, vector signed char __b) {
2042*67e74705SXin Li return __a / __b;
2043*67e74705SXin Li }
2044*67e74705SXin Li
2045*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_div(vector unsigned char __a,vector unsigned char __b)2046*67e74705SXin Li vec_div(vector unsigned char __a, vector unsigned char __b) {
2047*67e74705SXin Li return __a / __b;
2048*67e74705SXin Li }
2049*67e74705SXin Li
2050*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_div(vector signed short __a,vector signed short __b)2051*67e74705SXin Li vec_div(vector signed short __a, vector signed short __b) {
2052*67e74705SXin Li return __a / __b;
2053*67e74705SXin Li }
2054*67e74705SXin Li
2055*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_div(vector unsigned short __a,vector unsigned short __b)2056*67e74705SXin Li vec_div(vector unsigned short __a, vector unsigned short __b) {
2057*67e74705SXin Li return __a / __b;
2058*67e74705SXin Li }
2059*67e74705SXin Li
2060*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_div(vector signed int __a,vector signed int __b)2061*67e74705SXin Li vec_div(vector signed int __a, vector signed int __b) {
2062*67e74705SXin Li return __a / __b;
2063*67e74705SXin Li }
2064*67e74705SXin Li
2065*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_div(vector unsigned int __a,vector unsigned int __b)2066*67e74705SXin Li vec_div(vector unsigned int __a, vector unsigned int __b) {
2067*67e74705SXin Li return __a / __b;
2068*67e74705SXin Li }
2069*67e74705SXin Li
2070*67e74705SXin Li #ifdef __VSX__
2071*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_div(vector signed long long __a,vector signed long long __b)2072*67e74705SXin Li vec_div(vector signed long long __a, vector signed long long __b) {
2073*67e74705SXin Li return __a / __b;
2074*67e74705SXin Li }
2075*67e74705SXin Li
2076*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_div(vector unsigned long long __a,vector unsigned long long __b)2077*67e74705SXin Li vec_div(vector unsigned long long __a, vector unsigned long long __b) {
2078*67e74705SXin Li return __a / __b;
2079*67e74705SXin Li }
2080*67e74705SXin Li
vec_div(vector float __a,vector float __b)2081*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_div(vector float __a,
2082*67e74705SXin Li vector float __b) {
2083*67e74705SXin Li return __a / __b;
2084*67e74705SXin Li }
2085*67e74705SXin Li
vec_div(vector double __a,vector double __b)2086*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_div(vector double __a,
2087*67e74705SXin Li vector double __b) {
2088*67e74705SXin Li return __a / __b;
2089*67e74705SXin Li }
2090*67e74705SXin Li #endif
2091*67e74705SXin Li
2092*67e74705SXin Li /* vec_dss */
2093*67e74705SXin Li
vec_dss(int __a)2094*67e74705SXin Li static __inline__ void __attribute__((__always_inline__)) vec_dss(int __a) {
2095*67e74705SXin Li __builtin_altivec_dss(__a);
2096*67e74705SXin Li }
2097*67e74705SXin Li
2098*67e74705SXin Li /* vec_dssall */
2099*67e74705SXin Li
vec_dssall(void)2100*67e74705SXin Li static __inline__ void __attribute__((__always_inline__)) vec_dssall(void) {
2101*67e74705SXin Li __builtin_altivec_dssall();
2102*67e74705SXin Li }
2103*67e74705SXin Li
2104*67e74705SXin Li /* vec_dst */
2105*67e74705SXin Li #define vec_dst(__PTR, __CW, __STR) \
2106*67e74705SXin Li __extension__( \
2107*67e74705SXin Li { __builtin_altivec_dst((const void *)(__PTR), (__CW), (__STR)); })
2108*67e74705SXin Li
2109*67e74705SXin Li /* vec_dstst */
2110*67e74705SXin Li #define vec_dstst(__PTR, __CW, __STR) \
2111*67e74705SXin Li __extension__( \
2112*67e74705SXin Li { __builtin_altivec_dstst((const void *)(__PTR), (__CW), (__STR)); })
2113*67e74705SXin Li
2114*67e74705SXin Li /* vec_dststt */
2115*67e74705SXin Li #define vec_dststt(__PTR, __CW, __STR) \
2116*67e74705SXin Li __extension__( \
2117*67e74705SXin Li { __builtin_altivec_dststt((const void *)(__PTR), (__CW), (__STR)); })
2118*67e74705SXin Li
2119*67e74705SXin Li /* vec_dstt */
2120*67e74705SXin Li #define vec_dstt(__PTR, __CW, __STR) \
2121*67e74705SXin Li __extension__( \
2122*67e74705SXin Li { __builtin_altivec_dstt((const void *)(__PTR), (__CW), (__STR)); })
2123*67e74705SXin Li
2124*67e74705SXin Li /* vec_eqv */
2125*67e74705SXin Li
2126*67e74705SXin Li #ifdef __POWER8_VECTOR__
2127*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_eqv(vector signed char __a,vector signed char __b)2128*67e74705SXin Li vec_eqv(vector signed char __a, vector signed char __b) {
2129*67e74705SXin Li return (vector signed char)__builtin_vsx_xxleqv((vector unsigned int)__a,
2130*67e74705SXin Li (vector unsigned int)__b);
2131*67e74705SXin Li }
2132*67e74705SXin Li
2133*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_eqv(vector unsigned char __a,vector unsigned char __b)2134*67e74705SXin Li vec_eqv(vector unsigned char __a, vector unsigned char __b) {
2135*67e74705SXin Li return (vector unsigned char)__builtin_vsx_xxleqv((vector unsigned int)__a,
2136*67e74705SXin Li (vector unsigned int)__b);
2137*67e74705SXin Li }
2138*67e74705SXin Li
vec_eqv(vector bool char __a,vector bool char __b)2139*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_eqv(vector bool char __a,
2140*67e74705SXin Li vector bool char __b) {
2141*67e74705SXin Li return (vector bool char)__builtin_vsx_xxleqv((vector unsigned int)__a,
2142*67e74705SXin Li (vector unsigned int)__b);
2143*67e74705SXin Li }
2144*67e74705SXin Li
2145*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_eqv(vector signed short __a,vector signed short __b)2146*67e74705SXin Li vec_eqv(vector signed short __a, vector signed short __b) {
2147*67e74705SXin Li return (vector signed short)__builtin_vsx_xxleqv((vector unsigned int)__a,
2148*67e74705SXin Li (vector unsigned int)__b);
2149*67e74705SXin Li }
2150*67e74705SXin Li
2151*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_eqv(vector unsigned short __a,vector unsigned short __b)2152*67e74705SXin Li vec_eqv(vector unsigned short __a, vector unsigned short __b) {
2153*67e74705SXin Li return (vector unsigned short)__builtin_vsx_xxleqv((vector unsigned int)__a,
2154*67e74705SXin Li (vector unsigned int)__b);
2155*67e74705SXin Li }
2156*67e74705SXin Li
2157*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_eqv(vector bool short __a,vector bool short __b)2158*67e74705SXin Li vec_eqv(vector bool short __a, vector bool short __b) {
2159*67e74705SXin Li return (vector bool short)__builtin_vsx_xxleqv((vector unsigned int)__a,
2160*67e74705SXin Li (vector unsigned int)__b);
2161*67e74705SXin Li }
2162*67e74705SXin Li
2163*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_eqv(vector signed int __a,vector signed int __b)2164*67e74705SXin Li vec_eqv(vector signed int __a, vector signed int __b) {
2165*67e74705SXin Li return (vector signed int)__builtin_vsx_xxleqv((vector unsigned int)__a,
2166*67e74705SXin Li (vector unsigned int)__b);
2167*67e74705SXin Li }
2168*67e74705SXin Li
2169*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_eqv(vector unsigned int __a,vector unsigned int __b)2170*67e74705SXin Li vec_eqv(vector unsigned int __a, vector unsigned int __b) {
2171*67e74705SXin Li return __builtin_vsx_xxleqv(__a, __b);
2172*67e74705SXin Li }
2173*67e74705SXin Li
vec_eqv(vector bool int __a,vector bool int __b)2174*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_eqv(vector bool int __a,
2175*67e74705SXin Li vector bool int __b) {
2176*67e74705SXin Li return (vector bool int)__builtin_vsx_xxleqv((vector unsigned int)__a,
2177*67e74705SXin Li (vector unsigned int)__b);
2178*67e74705SXin Li }
2179*67e74705SXin Li
2180*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_eqv(vector signed long long __a,vector signed long long __b)2181*67e74705SXin Li vec_eqv(vector signed long long __a, vector signed long long __b) {
2182*67e74705SXin Li return (vector signed long long)__builtin_vsx_xxleqv(
2183*67e74705SXin Li (vector unsigned int)__a, (vector unsigned int)__b);
2184*67e74705SXin Li }
2185*67e74705SXin Li
2186*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_eqv(vector unsigned long long __a,vector unsigned long long __b)2187*67e74705SXin Li vec_eqv(vector unsigned long long __a, vector unsigned long long __b) {
2188*67e74705SXin Li return (vector unsigned long long)__builtin_vsx_xxleqv(
2189*67e74705SXin Li (vector unsigned int)__a, (vector unsigned int)__b);
2190*67e74705SXin Li }
2191*67e74705SXin Li
2192*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_eqv(vector bool long long __a,vector bool long long __b)2193*67e74705SXin Li vec_eqv(vector bool long long __a, vector bool long long __b) {
2194*67e74705SXin Li return (vector bool long long)__builtin_vsx_xxleqv((vector unsigned int)__a,
2195*67e74705SXin Li (vector unsigned int)__b);
2196*67e74705SXin Li }
2197*67e74705SXin Li
vec_eqv(vector float __a,vector float __b)2198*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_eqv(vector float __a,
2199*67e74705SXin Li vector float __b) {
2200*67e74705SXin Li return (vector float)__builtin_vsx_xxleqv((vector unsigned int)__a,
2201*67e74705SXin Li (vector unsigned int)__b);
2202*67e74705SXin Li }
2203*67e74705SXin Li
vec_eqv(vector double __a,vector double __b)2204*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_eqv(vector double __a,
2205*67e74705SXin Li vector double __b) {
2206*67e74705SXin Li return (vector double)__builtin_vsx_xxleqv((vector unsigned int)__a,
2207*67e74705SXin Li (vector unsigned int)__b);
2208*67e74705SXin Li }
2209*67e74705SXin Li #endif
2210*67e74705SXin Li
2211*67e74705SXin Li /* vec_expte */
2212*67e74705SXin Li
2213*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_expte(vector float __a)2214*67e74705SXin Li vec_expte(vector float __a) {
2215*67e74705SXin Li return __builtin_altivec_vexptefp(__a);
2216*67e74705SXin Li }
2217*67e74705SXin Li
2218*67e74705SXin Li /* vec_vexptefp */
2219*67e74705SXin Li
2220*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vexptefp(vector float __a)2221*67e74705SXin Li vec_vexptefp(vector float __a) {
2222*67e74705SXin Li return __builtin_altivec_vexptefp(__a);
2223*67e74705SXin Li }
2224*67e74705SXin Li
2225*67e74705SXin Li /* vec_floor */
2226*67e74705SXin Li
vec_floor(vector float __a)2227*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_floor(vector float __a) {
2228*67e74705SXin Li #ifdef __VSX__
2229*67e74705SXin Li return __builtin_vsx_xvrspim(__a);
2230*67e74705SXin Li #else
2231*67e74705SXin Li return __builtin_altivec_vrfim(__a);
2232*67e74705SXin Li #endif
2233*67e74705SXin Li }
2234*67e74705SXin Li
2235*67e74705SXin Li #ifdef __VSX__
vec_floor(vector double __a)2236*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_floor(vector double __a) {
2237*67e74705SXin Li return __builtin_vsx_xvrdpim(__a);
2238*67e74705SXin Li }
2239*67e74705SXin Li #endif
2240*67e74705SXin Li
2241*67e74705SXin Li /* vec_vrfim */
2242*67e74705SXin Li
2243*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vrfim(vector float __a)2244*67e74705SXin Li vec_vrfim(vector float __a) {
2245*67e74705SXin Li return __builtin_altivec_vrfim(__a);
2246*67e74705SXin Li }
2247*67e74705SXin Li
2248*67e74705SXin Li /* vec_ld */
2249*67e74705SXin Li
2250*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_ld(int __a,const vector signed char * __b)2251*67e74705SXin Li vec_ld(int __a, const vector signed char *__b) {
2252*67e74705SXin Li return (vector signed char)__builtin_altivec_lvx(__a, __b);
2253*67e74705SXin Li }
2254*67e74705SXin Li
2255*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_ld(int __a,const signed char * __b)2256*67e74705SXin Li vec_ld(int __a, const signed char *__b) {
2257*67e74705SXin Li return (vector signed char)__builtin_altivec_lvx(__a, __b);
2258*67e74705SXin Li }
2259*67e74705SXin Li
2260*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_ld(int __a,const vector unsigned char * __b)2261*67e74705SXin Li vec_ld(int __a, const vector unsigned char *__b) {
2262*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
2263*67e74705SXin Li }
2264*67e74705SXin Li
2265*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_ld(int __a,const unsigned char * __b)2266*67e74705SXin Li vec_ld(int __a, const unsigned char *__b) {
2267*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
2268*67e74705SXin Li }
2269*67e74705SXin Li
2270*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_ld(int __a,const vector bool char * __b)2271*67e74705SXin Li vec_ld(int __a, const vector bool char *__b) {
2272*67e74705SXin Li return (vector bool char)__builtin_altivec_lvx(__a, __b);
2273*67e74705SXin Li }
2274*67e74705SXin Li
vec_ld(int __a,const vector short * __b)2275*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_ld(int __a,
2276*67e74705SXin Li const vector short *__b) {
2277*67e74705SXin Li return (vector short)__builtin_altivec_lvx(__a, __b);
2278*67e74705SXin Li }
2279*67e74705SXin Li
vec_ld(int __a,const short * __b)2280*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_ld(int __a, const short *__b) {
2281*67e74705SXin Li return (vector short)__builtin_altivec_lvx(__a, __b);
2282*67e74705SXin Li }
2283*67e74705SXin Li
2284*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_ld(int __a,const vector unsigned short * __b)2285*67e74705SXin Li vec_ld(int __a, const vector unsigned short *__b) {
2286*67e74705SXin Li return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
2287*67e74705SXin Li }
2288*67e74705SXin Li
2289*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_ld(int __a,const unsigned short * __b)2290*67e74705SXin Li vec_ld(int __a, const unsigned short *__b) {
2291*67e74705SXin Li return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
2292*67e74705SXin Li }
2293*67e74705SXin Li
2294*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_ld(int __a,const vector bool short * __b)2295*67e74705SXin Li vec_ld(int __a, const vector bool short *__b) {
2296*67e74705SXin Li return (vector bool short)__builtin_altivec_lvx(__a, __b);
2297*67e74705SXin Li }
2298*67e74705SXin Li
vec_ld(int __a,const vector pixel * __b)2299*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_ld(int __a,
2300*67e74705SXin Li const vector pixel *__b) {
2301*67e74705SXin Li return (vector pixel)__builtin_altivec_lvx(__a, __b);
2302*67e74705SXin Li }
2303*67e74705SXin Li
vec_ld(int __a,const vector int * __b)2304*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_ld(int __a,
2305*67e74705SXin Li const vector int *__b) {
2306*67e74705SXin Li return (vector int)__builtin_altivec_lvx(__a, __b);
2307*67e74705SXin Li }
2308*67e74705SXin Li
vec_ld(int __a,const int * __b)2309*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_ld(int __a, const int *__b) {
2310*67e74705SXin Li return (vector int)__builtin_altivec_lvx(__a, __b);
2311*67e74705SXin Li }
2312*67e74705SXin Li
2313*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_ld(int __a,const vector unsigned int * __b)2314*67e74705SXin Li vec_ld(int __a, const vector unsigned int *__b) {
2315*67e74705SXin Li return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
2316*67e74705SXin Li }
2317*67e74705SXin Li
2318*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_ld(int __a,const unsigned int * __b)2319*67e74705SXin Li vec_ld(int __a, const unsigned int *__b) {
2320*67e74705SXin Li return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
2321*67e74705SXin Li }
2322*67e74705SXin Li
2323*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_ld(int __a,const vector bool int * __b)2324*67e74705SXin Li vec_ld(int __a, const vector bool int *__b) {
2325*67e74705SXin Li return (vector bool int)__builtin_altivec_lvx(__a, __b);
2326*67e74705SXin Li }
2327*67e74705SXin Li
vec_ld(int __a,const vector float * __b)2328*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_ld(int __a,
2329*67e74705SXin Li const vector float *__b) {
2330*67e74705SXin Li return (vector float)__builtin_altivec_lvx(__a, __b);
2331*67e74705SXin Li }
2332*67e74705SXin Li
vec_ld(int __a,const float * __b)2333*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_ld(int __a, const float *__b) {
2334*67e74705SXin Li return (vector float)__builtin_altivec_lvx(__a, __b);
2335*67e74705SXin Li }
2336*67e74705SXin Li
2337*67e74705SXin Li /* vec_lvx */
2338*67e74705SXin Li
2339*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lvx(int __a,const vector signed char * __b)2340*67e74705SXin Li vec_lvx(int __a, const vector signed char *__b) {
2341*67e74705SXin Li return (vector signed char)__builtin_altivec_lvx(__a, __b);
2342*67e74705SXin Li }
2343*67e74705SXin Li
2344*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lvx(int __a,const signed char * __b)2345*67e74705SXin Li vec_lvx(int __a, const signed char *__b) {
2346*67e74705SXin Li return (vector signed char)__builtin_altivec_lvx(__a, __b);
2347*67e74705SXin Li }
2348*67e74705SXin Li
2349*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvx(int __a,const vector unsigned char * __b)2350*67e74705SXin Li vec_lvx(int __a, const vector unsigned char *__b) {
2351*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
2352*67e74705SXin Li }
2353*67e74705SXin Li
2354*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvx(int __a,const unsigned char * __b)2355*67e74705SXin Li vec_lvx(int __a, const unsigned char *__b) {
2356*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvx(__a, __b);
2357*67e74705SXin Li }
2358*67e74705SXin Li
2359*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_lvx(int __a,const vector bool char * __b)2360*67e74705SXin Li vec_lvx(int __a, const vector bool char *__b) {
2361*67e74705SXin Li return (vector bool char)__builtin_altivec_lvx(__a, __b);
2362*67e74705SXin Li }
2363*67e74705SXin Li
vec_lvx(int __a,const vector short * __b)2364*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lvx(int __a,
2365*67e74705SXin Li const vector short *__b) {
2366*67e74705SXin Li return (vector short)__builtin_altivec_lvx(__a, __b);
2367*67e74705SXin Li }
2368*67e74705SXin Li
vec_lvx(int __a,const short * __b)2369*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lvx(int __a, const short *__b) {
2370*67e74705SXin Li return (vector short)__builtin_altivec_lvx(__a, __b);
2371*67e74705SXin Li }
2372*67e74705SXin Li
2373*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lvx(int __a,const vector unsigned short * __b)2374*67e74705SXin Li vec_lvx(int __a, const vector unsigned short *__b) {
2375*67e74705SXin Li return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
2376*67e74705SXin Li }
2377*67e74705SXin Li
2378*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lvx(int __a,const unsigned short * __b)2379*67e74705SXin Li vec_lvx(int __a, const unsigned short *__b) {
2380*67e74705SXin Li return (vector unsigned short)__builtin_altivec_lvx(__a, __b);
2381*67e74705SXin Li }
2382*67e74705SXin Li
2383*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_lvx(int __a,const vector bool short * __b)2384*67e74705SXin Li vec_lvx(int __a, const vector bool short *__b) {
2385*67e74705SXin Li return (vector bool short)__builtin_altivec_lvx(__a, __b);
2386*67e74705SXin Li }
2387*67e74705SXin Li
vec_lvx(int __a,const vector pixel * __b)2388*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_lvx(int __a,
2389*67e74705SXin Li const vector pixel *__b) {
2390*67e74705SXin Li return (vector pixel)__builtin_altivec_lvx(__a, __b);
2391*67e74705SXin Li }
2392*67e74705SXin Li
vec_lvx(int __a,const vector int * __b)2393*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lvx(int __a,
2394*67e74705SXin Li const vector int *__b) {
2395*67e74705SXin Li return (vector int)__builtin_altivec_lvx(__a, __b);
2396*67e74705SXin Li }
2397*67e74705SXin Li
vec_lvx(int __a,const int * __b)2398*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lvx(int __a, const int *__b) {
2399*67e74705SXin Li return (vector int)__builtin_altivec_lvx(__a, __b);
2400*67e74705SXin Li }
2401*67e74705SXin Li
2402*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lvx(int __a,const vector unsigned int * __b)2403*67e74705SXin Li vec_lvx(int __a, const vector unsigned int *__b) {
2404*67e74705SXin Li return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
2405*67e74705SXin Li }
2406*67e74705SXin Li
2407*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lvx(int __a,const unsigned int * __b)2408*67e74705SXin Li vec_lvx(int __a, const unsigned int *__b) {
2409*67e74705SXin Li return (vector unsigned int)__builtin_altivec_lvx(__a, __b);
2410*67e74705SXin Li }
2411*67e74705SXin Li
2412*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_lvx(int __a,const vector bool int * __b)2413*67e74705SXin Li vec_lvx(int __a, const vector bool int *__b) {
2414*67e74705SXin Li return (vector bool int)__builtin_altivec_lvx(__a, __b);
2415*67e74705SXin Li }
2416*67e74705SXin Li
vec_lvx(int __a,const vector float * __b)2417*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lvx(int __a,
2418*67e74705SXin Li const vector float *__b) {
2419*67e74705SXin Li return (vector float)__builtin_altivec_lvx(__a, __b);
2420*67e74705SXin Li }
2421*67e74705SXin Li
vec_lvx(int __a,const float * __b)2422*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lvx(int __a, const float *__b) {
2423*67e74705SXin Li return (vector float)__builtin_altivec_lvx(__a, __b);
2424*67e74705SXin Li }
2425*67e74705SXin Li
2426*67e74705SXin Li /* vec_lde */
2427*67e74705SXin Li
2428*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lde(int __a,const signed char * __b)2429*67e74705SXin Li vec_lde(int __a, const signed char *__b) {
2430*67e74705SXin Li return (vector signed char)__builtin_altivec_lvebx(__a, __b);
2431*67e74705SXin Li }
2432*67e74705SXin Li
2433*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lde(int __a,const unsigned char * __b)2434*67e74705SXin Li vec_lde(int __a, const unsigned char *__b) {
2435*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
2436*67e74705SXin Li }
2437*67e74705SXin Li
vec_lde(int __a,const short * __b)2438*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lde(int __a, const short *__b) {
2439*67e74705SXin Li return (vector short)__builtin_altivec_lvehx(__a, __b);
2440*67e74705SXin Li }
2441*67e74705SXin Li
2442*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lde(int __a,const unsigned short * __b)2443*67e74705SXin Li vec_lde(int __a, const unsigned short *__b) {
2444*67e74705SXin Li return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
2445*67e74705SXin Li }
2446*67e74705SXin Li
vec_lde(int __a,const int * __b)2447*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lde(int __a, const int *__b) {
2448*67e74705SXin Li return (vector int)__builtin_altivec_lvewx(__a, __b);
2449*67e74705SXin Li }
2450*67e74705SXin Li
2451*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lde(int __a,const unsigned int * __b)2452*67e74705SXin Li vec_lde(int __a, const unsigned int *__b) {
2453*67e74705SXin Li return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
2454*67e74705SXin Li }
2455*67e74705SXin Li
vec_lde(int __a,const float * __b)2456*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lde(int __a, const float *__b) {
2457*67e74705SXin Li return (vector float)__builtin_altivec_lvewx(__a, __b);
2458*67e74705SXin Li }
2459*67e74705SXin Li
2460*67e74705SXin Li /* vec_lvebx */
2461*67e74705SXin Li
2462*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lvebx(int __a,const signed char * __b)2463*67e74705SXin Li vec_lvebx(int __a, const signed char *__b) {
2464*67e74705SXin Li return (vector signed char)__builtin_altivec_lvebx(__a, __b);
2465*67e74705SXin Li }
2466*67e74705SXin Li
2467*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvebx(int __a,const unsigned char * __b)2468*67e74705SXin Li vec_lvebx(int __a, const unsigned char *__b) {
2469*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvebx(__a, __b);
2470*67e74705SXin Li }
2471*67e74705SXin Li
2472*67e74705SXin Li /* vec_lvehx */
2473*67e74705SXin Li
vec_lvehx(int __a,const short * __b)2474*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lvehx(int __a,
2475*67e74705SXin Li const short *__b) {
2476*67e74705SXin Li return (vector short)__builtin_altivec_lvehx(__a, __b);
2477*67e74705SXin Li }
2478*67e74705SXin Li
2479*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lvehx(int __a,const unsigned short * __b)2480*67e74705SXin Li vec_lvehx(int __a, const unsigned short *__b) {
2481*67e74705SXin Li return (vector unsigned short)__builtin_altivec_lvehx(__a, __b);
2482*67e74705SXin Li }
2483*67e74705SXin Li
2484*67e74705SXin Li /* vec_lvewx */
2485*67e74705SXin Li
vec_lvewx(int __a,const int * __b)2486*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lvewx(int __a, const int *__b) {
2487*67e74705SXin Li return (vector int)__builtin_altivec_lvewx(__a, __b);
2488*67e74705SXin Li }
2489*67e74705SXin Li
2490*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lvewx(int __a,const unsigned int * __b)2491*67e74705SXin Li vec_lvewx(int __a, const unsigned int *__b) {
2492*67e74705SXin Li return (vector unsigned int)__builtin_altivec_lvewx(__a, __b);
2493*67e74705SXin Li }
2494*67e74705SXin Li
vec_lvewx(int __a,const float * __b)2495*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lvewx(int __a,
2496*67e74705SXin Li const float *__b) {
2497*67e74705SXin Li return (vector float)__builtin_altivec_lvewx(__a, __b);
2498*67e74705SXin Li }
2499*67e74705SXin Li
2500*67e74705SXin Li /* vec_ldl */
2501*67e74705SXin Li
2502*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_ldl(int __a,const vector signed char * __b)2503*67e74705SXin Li vec_ldl(int __a, const vector signed char *__b) {
2504*67e74705SXin Li return (vector signed char)__builtin_altivec_lvxl(__a, __b);
2505*67e74705SXin Li }
2506*67e74705SXin Li
2507*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_ldl(int __a,const signed char * __b)2508*67e74705SXin Li vec_ldl(int __a, const signed char *__b) {
2509*67e74705SXin Li return (vector signed char)__builtin_altivec_lvxl(__a, __b);
2510*67e74705SXin Li }
2511*67e74705SXin Li
2512*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_ldl(int __a,const vector unsigned char * __b)2513*67e74705SXin Li vec_ldl(int __a, const vector unsigned char *__b) {
2514*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
2515*67e74705SXin Li }
2516*67e74705SXin Li
2517*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_ldl(int __a,const unsigned char * __b)2518*67e74705SXin Li vec_ldl(int __a, const unsigned char *__b) {
2519*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
2520*67e74705SXin Li }
2521*67e74705SXin Li
2522*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_ldl(int __a,const vector bool char * __b)2523*67e74705SXin Li vec_ldl(int __a, const vector bool char *__b) {
2524*67e74705SXin Li return (vector bool char)__builtin_altivec_lvxl(__a, __b);
2525*67e74705SXin Li }
2526*67e74705SXin Li
vec_ldl(int __a,const vector short * __b)2527*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_ldl(int __a,
2528*67e74705SXin Li const vector short *__b) {
2529*67e74705SXin Li return (vector short)__builtin_altivec_lvxl(__a, __b);
2530*67e74705SXin Li }
2531*67e74705SXin Li
vec_ldl(int __a,const short * __b)2532*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_ldl(int __a, const short *__b) {
2533*67e74705SXin Li return (vector short)__builtin_altivec_lvxl(__a, __b);
2534*67e74705SXin Li }
2535*67e74705SXin Li
2536*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_ldl(int __a,const vector unsigned short * __b)2537*67e74705SXin Li vec_ldl(int __a, const vector unsigned short *__b) {
2538*67e74705SXin Li return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
2539*67e74705SXin Li }
2540*67e74705SXin Li
2541*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_ldl(int __a,const unsigned short * __b)2542*67e74705SXin Li vec_ldl(int __a, const unsigned short *__b) {
2543*67e74705SXin Li return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
2544*67e74705SXin Li }
2545*67e74705SXin Li
2546*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_ldl(int __a,const vector bool short * __b)2547*67e74705SXin Li vec_ldl(int __a, const vector bool short *__b) {
2548*67e74705SXin Li return (vector bool short)__builtin_altivec_lvxl(__a, __b);
2549*67e74705SXin Li }
2550*67e74705SXin Li
vec_ldl(int __a,const vector pixel * __b)2551*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_ldl(int __a,
2552*67e74705SXin Li const vector pixel *__b) {
2553*67e74705SXin Li return (vector pixel short)__builtin_altivec_lvxl(__a, __b);
2554*67e74705SXin Li }
2555*67e74705SXin Li
vec_ldl(int __a,const vector int * __b)2556*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_ldl(int __a,
2557*67e74705SXin Li const vector int *__b) {
2558*67e74705SXin Li return (vector int)__builtin_altivec_lvxl(__a, __b);
2559*67e74705SXin Li }
2560*67e74705SXin Li
vec_ldl(int __a,const int * __b)2561*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_ldl(int __a, const int *__b) {
2562*67e74705SXin Li return (vector int)__builtin_altivec_lvxl(__a, __b);
2563*67e74705SXin Li }
2564*67e74705SXin Li
2565*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_ldl(int __a,const vector unsigned int * __b)2566*67e74705SXin Li vec_ldl(int __a, const vector unsigned int *__b) {
2567*67e74705SXin Li return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
2568*67e74705SXin Li }
2569*67e74705SXin Li
2570*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_ldl(int __a,const unsigned int * __b)2571*67e74705SXin Li vec_ldl(int __a, const unsigned int *__b) {
2572*67e74705SXin Li return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
2573*67e74705SXin Li }
2574*67e74705SXin Li
2575*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_ldl(int __a,const vector bool int * __b)2576*67e74705SXin Li vec_ldl(int __a, const vector bool int *__b) {
2577*67e74705SXin Li return (vector bool int)__builtin_altivec_lvxl(__a, __b);
2578*67e74705SXin Li }
2579*67e74705SXin Li
vec_ldl(int __a,const vector float * __b)2580*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_ldl(int __a,
2581*67e74705SXin Li const vector float *__b) {
2582*67e74705SXin Li return (vector float)__builtin_altivec_lvxl(__a, __b);
2583*67e74705SXin Li }
2584*67e74705SXin Li
vec_ldl(int __a,const float * __b)2585*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_ldl(int __a, const float *__b) {
2586*67e74705SXin Li return (vector float)__builtin_altivec_lvxl(__a, __b);
2587*67e74705SXin Li }
2588*67e74705SXin Li
2589*67e74705SXin Li /* vec_lvxl */
2590*67e74705SXin Li
2591*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lvxl(int __a,const vector signed char * __b)2592*67e74705SXin Li vec_lvxl(int __a, const vector signed char *__b) {
2593*67e74705SXin Li return (vector signed char)__builtin_altivec_lvxl(__a, __b);
2594*67e74705SXin Li }
2595*67e74705SXin Li
2596*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lvxl(int __a,const signed char * __b)2597*67e74705SXin Li vec_lvxl(int __a, const signed char *__b) {
2598*67e74705SXin Li return (vector signed char)__builtin_altivec_lvxl(__a, __b);
2599*67e74705SXin Li }
2600*67e74705SXin Li
2601*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvxl(int __a,const vector unsigned char * __b)2602*67e74705SXin Li vec_lvxl(int __a, const vector unsigned char *__b) {
2603*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
2604*67e74705SXin Li }
2605*67e74705SXin Li
2606*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvxl(int __a,const unsigned char * __b)2607*67e74705SXin Li vec_lvxl(int __a, const unsigned char *__b) {
2608*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvxl(__a, __b);
2609*67e74705SXin Li }
2610*67e74705SXin Li
2611*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_lvxl(int __a,const vector bool char * __b)2612*67e74705SXin Li vec_lvxl(int __a, const vector bool char *__b) {
2613*67e74705SXin Li return (vector bool char)__builtin_altivec_lvxl(__a, __b);
2614*67e74705SXin Li }
2615*67e74705SXin Li
vec_lvxl(int __a,const vector short * __b)2616*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lvxl(int __a,
2617*67e74705SXin Li const vector short *__b) {
2618*67e74705SXin Li return (vector short)__builtin_altivec_lvxl(__a, __b);
2619*67e74705SXin Li }
2620*67e74705SXin Li
vec_lvxl(int __a,const short * __b)2621*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lvxl(int __a,
2622*67e74705SXin Li const short *__b) {
2623*67e74705SXin Li return (vector short)__builtin_altivec_lvxl(__a, __b);
2624*67e74705SXin Li }
2625*67e74705SXin Li
2626*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lvxl(int __a,const vector unsigned short * __b)2627*67e74705SXin Li vec_lvxl(int __a, const vector unsigned short *__b) {
2628*67e74705SXin Li return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
2629*67e74705SXin Li }
2630*67e74705SXin Li
2631*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lvxl(int __a,const unsigned short * __b)2632*67e74705SXin Li vec_lvxl(int __a, const unsigned short *__b) {
2633*67e74705SXin Li return (vector unsigned short)__builtin_altivec_lvxl(__a, __b);
2634*67e74705SXin Li }
2635*67e74705SXin Li
2636*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_lvxl(int __a,const vector bool short * __b)2637*67e74705SXin Li vec_lvxl(int __a, const vector bool short *__b) {
2638*67e74705SXin Li return (vector bool short)__builtin_altivec_lvxl(__a, __b);
2639*67e74705SXin Li }
2640*67e74705SXin Li
vec_lvxl(int __a,const vector pixel * __b)2641*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_lvxl(int __a,
2642*67e74705SXin Li const vector pixel *__b) {
2643*67e74705SXin Li return (vector pixel)__builtin_altivec_lvxl(__a, __b);
2644*67e74705SXin Li }
2645*67e74705SXin Li
vec_lvxl(int __a,const vector int * __b)2646*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lvxl(int __a,
2647*67e74705SXin Li const vector int *__b) {
2648*67e74705SXin Li return (vector int)__builtin_altivec_lvxl(__a, __b);
2649*67e74705SXin Li }
2650*67e74705SXin Li
vec_lvxl(int __a,const int * __b)2651*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lvxl(int __a, const int *__b) {
2652*67e74705SXin Li return (vector int)__builtin_altivec_lvxl(__a, __b);
2653*67e74705SXin Li }
2654*67e74705SXin Li
2655*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lvxl(int __a,const vector unsigned int * __b)2656*67e74705SXin Li vec_lvxl(int __a, const vector unsigned int *__b) {
2657*67e74705SXin Li return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
2658*67e74705SXin Li }
2659*67e74705SXin Li
2660*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lvxl(int __a,const unsigned int * __b)2661*67e74705SXin Li vec_lvxl(int __a, const unsigned int *__b) {
2662*67e74705SXin Li return (vector unsigned int)__builtin_altivec_lvxl(__a, __b);
2663*67e74705SXin Li }
2664*67e74705SXin Li
2665*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_lvxl(int __a,const vector bool int * __b)2666*67e74705SXin Li vec_lvxl(int __a, const vector bool int *__b) {
2667*67e74705SXin Li return (vector bool int)__builtin_altivec_lvxl(__a, __b);
2668*67e74705SXin Li }
2669*67e74705SXin Li
vec_lvxl(int __a,const vector float * __b)2670*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lvxl(int __a,
2671*67e74705SXin Li const vector float *__b) {
2672*67e74705SXin Li return (vector float)__builtin_altivec_lvxl(__a, __b);
2673*67e74705SXin Li }
2674*67e74705SXin Li
vec_lvxl(int __a,const float * __b)2675*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lvxl(int __a,
2676*67e74705SXin Li const float *__b) {
2677*67e74705SXin Li return (vector float)__builtin_altivec_lvxl(__a, __b);
2678*67e74705SXin Li }
2679*67e74705SXin Li
2680*67e74705SXin Li /* vec_loge */
2681*67e74705SXin Li
2682*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_loge(vector float __a)2683*67e74705SXin Li vec_loge(vector float __a) {
2684*67e74705SXin Li return __builtin_altivec_vlogefp(__a);
2685*67e74705SXin Li }
2686*67e74705SXin Li
2687*67e74705SXin Li /* vec_vlogefp */
2688*67e74705SXin Li
2689*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vlogefp(vector float __a)2690*67e74705SXin Li vec_vlogefp(vector float __a) {
2691*67e74705SXin Li return __builtin_altivec_vlogefp(__a);
2692*67e74705SXin Li }
2693*67e74705SXin Li
2694*67e74705SXin Li /* vec_lvsl */
2695*67e74705SXin Li
2696*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2697*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2698*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsl(int __a,const signed char * __b)2699*67e74705SXin Li loads/stores"))) vec_lvsl(int __a, const signed char *__b) {
2700*67e74705SXin Li vector unsigned char mask =
2701*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2702*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2703*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2704*67e74705SXin Li return vec_perm(mask, mask, reverse);
2705*67e74705SXin Li }
2706*67e74705SXin Li #else
2707*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvsl(int __a,const signed char * __b)2708*67e74705SXin Li vec_lvsl(int __a, const signed char *__b) {
2709*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2710*67e74705SXin Li }
2711*67e74705SXin Li #endif
2712*67e74705SXin Li
2713*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2714*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2715*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsl(int __a,const unsigned char * __b)2716*67e74705SXin Li loads/stores"))) vec_lvsl(int __a, const unsigned char *__b) {
2717*67e74705SXin Li vector unsigned char mask =
2718*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2719*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2720*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2721*67e74705SXin Li return vec_perm(mask, mask, reverse);
2722*67e74705SXin Li }
2723*67e74705SXin Li #else
2724*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvsl(int __a,const unsigned char * __b)2725*67e74705SXin Li vec_lvsl(int __a, const unsigned char *__b) {
2726*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2727*67e74705SXin Li }
2728*67e74705SXin Li #endif
2729*67e74705SXin Li
2730*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2731*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2732*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsl(int __a,const short * __b)2733*67e74705SXin Li loads/stores"))) vec_lvsl(int __a, const short *__b) {
2734*67e74705SXin Li vector unsigned char mask =
2735*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2736*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2737*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2738*67e74705SXin Li return vec_perm(mask, mask, reverse);
2739*67e74705SXin Li }
2740*67e74705SXin Li #else
vec_lvsl(int __a,const short * __b)2741*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
2742*67e74705SXin Li const short *__b) {
2743*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2744*67e74705SXin Li }
2745*67e74705SXin Li #endif
2746*67e74705SXin Li
2747*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2748*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2749*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsl(int __a,const unsigned short * __b)2750*67e74705SXin Li loads/stores"))) vec_lvsl(int __a, const unsigned short *__b) {
2751*67e74705SXin Li vector unsigned char mask =
2752*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2753*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2754*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2755*67e74705SXin Li return vec_perm(mask, mask, reverse);
2756*67e74705SXin Li }
2757*67e74705SXin Li #else
2758*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvsl(int __a,const unsigned short * __b)2759*67e74705SXin Li vec_lvsl(int __a, const unsigned short *__b) {
2760*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2761*67e74705SXin Li }
2762*67e74705SXin Li #endif
2763*67e74705SXin Li
2764*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2765*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2766*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsl(int __a,const int * __b)2767*67e74705SXin Li loads/stores"))) vec_lvsl(int __a, const int *__b) {
2768*67e74705SXin Li vector unsigned char mask =
2769*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2770*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2771*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2772*67e74705SXin Li return vec_perm(mask, mask, reverse);
2773*67e74705SXin Li }
2774*67e74705SXin Li #else
vec_lvsl(int __a,const int * __b)2775*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
2776*67e74705SXin Li const int *__b) {
2777*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2778*67e74705SXin Li }
2779*67e74705SXin Li #endif
2780*67e74705SXin Li
2781*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2782*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2783*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsl(int __a,const unsigned int * __b)2784*67e74705SXin Li loads/stores"))) vec_lvsl(int __a, const unsigned int *__b) {
2785*67e74705SXin Li vector unsigned char mask =
2786*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2787*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2788*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2789*67e74705SXin Li return vec_perm(mask, mask, reverse);
2790*67e74705SXin Li }
2791*67e74705SXin Li #else
2792*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvsl(int __a,const unsigned int * __b)2793*67e74705SXin Li vec_lvsl(int __a, const unsigned int *__b) {
2794*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2795*67e74705SXin Li }
2796*67e74705SXin Li #endif
2797*67e74705SXin Li
2798*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2799*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2800*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsl(int __a,const float * __b)2801*67e74705SXin Li loads/stores"))) vec_lvsl(int __a, const float *__b) {
2802*67e74705SXin Li vector unsigned char mask =
2803*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2804*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2805*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2806*67e74705SXin Li return vec_perm(mask, mask, reverse);
2807*67e74705SXin Li }
2808*67e74705SXin Li #else
vec_lvsl(int __a,const float * __b)2809*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsl(int __a,
2810*67e74705SXin Li const float *__b) {
2811*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsl(__a, __b);
2812*67e74705SXin Li }
2813*67e74705SXin Li #endif
2814*67e74705SXin Li
2815*67e74705SXin Li /* vec_lvsr */
2816*67e74705SXin Li
2817*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2818*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2819*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsr(int __a,const signed char * __b)2820*67e74705SXin Li loads/stores"))) vec_lvsr(int __a, const signed char *__b) {
2821*67e74705SXin Li vector unsigned char mask =
2822*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2823*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2824*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2825*67e74705SXin Li return vec_perm(mask, mask, reverse);
2826*67e74705SXin Li }
2827*67e74705SXin Li #else
2828*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvsr(int __a,const signed char * __b)2829*67e74705SXin Li vec_lvsr(int __a, const signed char *__b) {
2830*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2831*67e74705SXin Li }
2832*67e74705SXin Li #endif
2833*67e74705SXin Li
2834*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2835*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2836*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsr(int __a,const unsigned char * __b)2837*67e74705SXin Li loads/stores"))) vec_lvsr(int __a, const unsigned char *__b) {
2838*67e74705SXin Li vector unsigned char mask =
2839*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2840*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2841*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2842*67e74705SXin Li return vec_perm(mask, mask, reverse);
2843*67e74705SXin Li }
2844*67e74705SXin Li #else
2845*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvsr(int __a,const unsigned char * __b)2846*67e74705SXin Li vec_lvsr(int __a, const unsigned char *__b) {
2847*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2848*67e74705SXin Li }
2849*67e74705SXin Li #endif
2850*67e74705SXin Li
2851*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2852*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2853*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsr(int __a,const short * __b)2854*67e74705SXin Li loads/stores"))) vec_lvsr(int __a, const short *__b) {
2855*67e74705SXin Li vector unsigned char mask =
2856*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2857*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2858*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2859*67e74705SXin Li return vec_perm(mask, mask, reverse);
2860*67e74705SXin Li }
2861*67e74705SXin Li #else
vec_lvsr(int __a,const short * __b)2862*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
2863*67e74705SXin Li const short *__b) {
2864*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2865*67e74705SXin Li }
2866*67e74705SXin Li #endif
2867*67e74705SXin Li
2868*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2869*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2870*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsr(int __a,const unsigned short * __b)2871*67e74705SXin Li loads/stores"))) vec_lvsr(int __a, const unsigned short *__b) {
2872*67e74705SXin Li vector unsigned char mask =
2873*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2874*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2875*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2876*67e74705SXin Li return vec_perm(mask, mask, reverse);
2877*67e74705SXin Li }
2878*67e74705SXin Li #else
2879*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvsr(int __a,const unsigned short * __b)2880*67e74705SXin Li vec_lvsr(int __a, const unsigned short *__b) {
2881*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2882*67e74705SXin Li }
2883*67e74705SXin Li #endif
2884*67e74705SXin Li
2885*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2886*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2887*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsr(int __a,const int * __b)2888*67e74705SXin Li loads/stores"))) vec_lvsr(int __a, const int *__b) {
2889*67e74705SXin Li vector unsigned char mask =
2890*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2891*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2892*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2893*67e74705SXin Li return vec_perm(mask, mask, reverse);
2894*67e74705SXin Li }
2895*67e74705SXin Li #else
vec_lvsr(int __a,const int * __b)2896*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
2897*67e74705SXin Li const int *__b) {
2898*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2899*67e74705SXin Li }
2900*67e74705SXin Li #endif
2901*67e74705SXin Li
2902*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2903*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2904*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsr(int __a,const unsigned int * __b)2905*67e74705SXin Li loads/stores"))) vec_lvsr(int __a, const unsigned int *__b) {
2906*67e74705SXin Li vector unsigned char mask =
2907*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2908*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2909*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2910*67e74705SXin Li return vec_perm(mask, mask, reverse);
2911*67e74705SXin Li }
2912*67e74705SXin Li #else
2913*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvsr(int __a,const unsigned int * __b)2914*67e74705SXin Li vec_lvsr(int __a, const unsigned int *__b) {
2915*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2916*67e74705SXin Li }
2917*67e74705SXin Li #endif
2918*67e74705SXin Li
2919*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
2920*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
2921*67e74705SXin Li __attribute__((__deprecated__("use assignment for unaligned little endian \
vec_lvsr(int __a,const float * __b)2922*67e74705SXin Li loads/stores"))) vec_lvsr(int __a, const float *__b) {
2923*67e74705SXin Li vector unsigned char mask =
2924*67e74705SXin Li (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2925*67e74705SXin Li vector unsigned char reverse = {15, 14, 13, 12, 11, 10, 9, 8,
2926*67e74705SXin Li 7, 6, 5, 4, 3, 2, 1, 0};
2927*67e74705SXin Li return vec_perm(mask, mask, reverse);
2928*67e74705SXin Li }
2929*67e74705SXin Li #else
vec_lvsr(int __a,const float * __b)2930*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai vec_lvsr(int __a,
2931*67e74705SXin Li const float *__b) {
2932*67e74705SXin Li return (vector unsigned char)__builtin_altivec_lvsr(__a, __b);
2933*67e74705SXin Li }
2934*67e74705SXin Li #endif
2935*67e74705SXin Li
2936*67e74705SXin Li /* vec_madd */
2937*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
2938*67e74705SXin Li vec_mladd(vector signed short, vector signed short, vector signed short);
2939*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
2940*67e74705SXin Li vec_mladd(vector signed short, vector unsigned short, vector unsigned short);
2941*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
2942*67e74705SXin Li vec_mladd(vector unsigned short, vector signed short, vector signed short);
2943*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
2944*67e74705SXin Li vec_mladd(vector unsigned short, vector unsigned short, vector unsigned short);
2945*67e74705SXin Li
vec_madd(vector signed short __a,vector signed short __b,vector signed short __c)2946*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai vec_madd(
2947*67e74705SXin Li vector signed short __a, vector signed short __b, vector signed short __c) {
2948*67e74705SXin Li return vec_mladd(__a, __b, __c);
2949*67e74705SXin Li }
2950*67e74705SXin Li
2951*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_madd(vector signed short __a,vector unsigned short __b,vector unsigned short __c)2952*67e74705SXin Li vec_madd(vector signed short __a, vector unsigned short __b,
2953*67e74705SXin Li vector unsigned short __c) {
2954*67e74705SXin Li return vec_mladd(__a, __b, __c);
2955*67e74705SXin Li }
2956*67e74705SXin Li
2957*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_madd(vector unsigned short __a,vector signed short __b,vector signed short __c)2958*67e74705SXin Li vec_madd(vector unsigned short __a, vector signed short __b,
2959*67e74705SXin Li vector signed short __c) {
2960*67e74705SXin Li return vec_mladd(__a, __b, __c);
2961*67e74705SXin Li }
2962*67e74705SXin Li
2963*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_madd(vector unsigned short __a,vector unsigned short __b,vector unsigned short __c)2964*67e74705SXin Li vec_madd(vector unsigned short __a, vector unsigned short __b,
2965*67e74705SXin Li vector unsigned short __c) {
2966*67e74705SXin Li return vec_mladd(__a, __b, __c);
2967*67e74705SXin Li }
2968*67e74705SXin Li
vec_madd(vector float __a,vector float __b,vector float __c)2969*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_madd(vector float __a,
2970*67e74705SXin Li vector float __b,
2971*67e74705SXin Li vector float __c) {
2972*67e74705SXin Li #ifdef __VSX__
2973*67e74705SXin Li return __builtin_vsx_xvmaddasp(__a, __b, __c);
2974*67e74705SXin Li #else
2975*67e74705SXin Li return __builtin_altivec_vmaddfp(__a, __b, __c);
2976*67e74705SXin Li #endif
2977*67e74705SXin Li }
2978*67e74705SXin Li
2979*67e74705SXin Li #ifdef __VSX__
vec_madd(vector double __a,vector double __b,vector double __c)2980*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_madd(vector double __a,
2981*67e74705SXin Li vector double __b,
2982*67e74705SXin Li vector double __c) {
2983*67e74705SXin Li return __builtin_vsx_xvmaddadp(__a, __b, __c);
2984*67e74705SXin Li }
2985*67e74705SXin Li #endif
2986*67e74705SXin Li
2987*67e74705SXin Li /* vec_vmaddfp */
2988*67e74705SXin Li
2989*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vmaddfp(vector float __a,vector float __b,vector float __c)2990*67e74705SXin Li vec_vmaddfp(vector float __a, vector float __b, vector float __c) {
2991*67e74705SXin Li return __builtin_altivec_vmaddfp(__a, __b, __c);
2992*67e74705SXin Li }
2993*67e74705SXin Li
2994*67e74705SXin Li /* vec_madds */
2995*67e74705SXin Li
2996*67e74705SXin Li static __inline__ vector signed short __attribute__((__always_inline__))
vec_madds(vector signed short __a,vector signed short __b,vector signed short __c)2997*67e74705SXin Li vec_madds(vector signed short __a, vector signed short __b,
2998*67e74705SXin Li vector signed short __c) {
2999*67e74705SXin Li return __builtin_altivec_vmhaddshs(__a, __b, __c);
3000*67e74705SXin Li }
3001*67e74705SXin Li
3002*67e74705SXin Li /* vec_vmhaddshs */
3003*67e74705SXin Li static __inline__ vector signed short __attribute__((__always_inline__))
vec_vmhaddshs(vector signed short __a,vector signed short __b,vector signed short __c)3004*67e74705SXin Li vec_vmhaddshs(vector signed short __a, vector signed short __b,
3005*67e74705SXin Li vector signed short __c) {
3006*67e74705SXin Li return __builtin_altivec_vmhaddshs(__a, __b, __c);
3007*67e74705SXin Li }
3008*67e74705SXin Li
3009*67e74705SXin Li /* vec_msub */
3010*67e74705SXin Li
3011*67e74705SXin Li #ifdef __VSX__
vec_msub(vector float __a,vector float __b,vector float __c)3012*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_msub(vector float __a,
3013*67e74705SXin Li vector float __b,
3014*67e74705SXin Li vector float __c) {
3015*67e74705SXin Li return __builtin_vsx_xvmsubasp(__a, __b, __c);
3016*67e74705SXin Li }
3017*67e74705SXin Li
vec_msub(vector double __a,vector double __b,vector double __c)3018*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_msub(vector double __a,
3019*67e74705SXin Li vector double __b,
3020*67e74705SXin Li vector double __c) {
3021*67e74705SXin Li return __builtin_vsx_xvmsubadp(__a, __b, __c);
3022*67e74705SXin Li }
3023*67e74705SXin Li #endif
3024*67e74705SXin Li
3025*67e74705SXin Li /* vec_max */
3026*67e74705SXin Li
3027*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_max(vector signed char __a,vector signed char __b)3028*67e74705SXin Li vec_max(vector signed char __a, vector signed char __b) {
3029*67e74705SXin Li return __builtin_altivec_vmaxsb(__a, __b);
3030*67e74705SXin Li }
3031*67e74705SXin Li
3032*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_max(vector bool char __a,vector signed char __b)3033*67e74705SXin Li vec_max(vector bool char __a, vector signed char __b) {
3034*67e74705SXin Li return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
3035*67e74705SXin Li }
3036*67e74705SXin Li
3037*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_max(vector signed char __a,vector bool char __b)3038*67e74705SXin Li vec_max(vector signed char __a, vector bool char __b) {
3039*67e74705SXin Li return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
3040*67e74705SXin Li }
3041*67e74705SXin Li
3042*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_max(vector unsigned char __a,vector unsigned char __b)3043*67e74705SXin Li vec_max(vector unsigned char __a, vector unsigned char __b) {
3044*67e74705SXin Li return __builtin_altivec_vmaxub(__a, __b);
3045*67e74705SXin Li }
3046*67e74705SXin Li
3047*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_max(vector bool char __a,vector unsigned char __b)3048*67e74705SXin Li vec_max(vector bool char __a, vector unsigned char __b) {
3049*67e74705SXin Li return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
3050*67e74705SXin Li }
3051*67e74705SXin Li
3052*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_max(vector unsigned char __a,vector bool char __b)3053*67e74705SXin Li vec_max(vector unsigned char __a, vector bool char __b) {
3054*67e74705SXin Li return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
3055*67e74705SXin Li }
3056*67e74705SXin Li
vec_max(vector short __a,vector short __b)3057*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
3058*67e74705SXin Li vector short __b) {
3059*67e74705SXin Li return __builtin_altivec_vmaxsh(__a, __b);
3060*67e74705SXin Li }
3061*67e74705SXin Li
vec_max(vector bool short __a,vector short __b)3062*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_max(vector bool short __a,
3063*67e74705SXin Li vector short __b) {
3064*67e74705SXin Li return __builtin_altivec_vmaxsh((vector short)__a, __b);
3065*67e74705SXin Li }
3066*67e74705SXin Li
vec_max(vector short __a,vector bool short __b)3067*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_max(vector short __a,
3068*67e74705SXin Li vector bool short __b) {
3069*67e74705SXin Li return __builtin_altivec_vmaxsh(__a, (vector short)__b);
3070*67e74705SXin Li }
3071*67e74705SXin Li
3072*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_max(vector unsigned short __a,vector unsigned short __b)3073*67e74705SXin Li vec_max(vector unsigned short __a, vector unsigned short __b) {
3074*67e74705SXin Li return __builtin_altivec_vmaxuh(__a, __b);
3075*67e74705SXin Li }
3076*67e74705SXin Li
3077*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_max(vector bool short __a,vector unsigned short __b)3078*67e74705SXin Li vec_max(vector bool short __a, vector unsigned short __b) {
3079*67e74705SXin Li return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
3080*67e74705SXin Li }
3081*67e74705SXin Li
3082*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_max(vector unsigned short __a,vector bool short __b)3083*67e74705SXin Li vec_max(vector unsigned short __a, vector bool short __b) {
3084*67e74705SXin Li return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
3085*67e74705SXin Li }
3086*67e74705SXin Li
vec_max(vector int __a,vector int __b)3087*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
3088*67e74705SXin Li vector int __b) {
3089*67e74705SXin Li return __builtin_altivec_vmaxsw(__a, __b);
3090*67e74705SXin Li }
3091*67e74705SXin Li
vec_max(vector bool int __a,vector int __b)3092*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_max(vector bool int __a,
3093*67e74705SXin Li vector int __b) {
3094*67e74705SXin Li return __builtin_altivec_vmaxsw((vector int)__a, __b);
3095*67e74705SXin Li }
3096*67e74705SXin Li
vec_max(vector int __a,vector bool int __b)3097*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_max(vector int __a,
3098*67e74705SXin Li vector bool int __b) {
3099*67e74705SXin Li return __builtin_altivec_vmaxsw(__a, (vector int)__b);
3100*67e74705SXin Li }
3101*67e74705SXin Li
3102*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_max(vector unsigned int __a,vector unsigned int __b)3103*67e74705SXin Li vec_max(vector unsigned int __a, vector unsigned int __b) {
3104*67e74705SXin Li return __builtin_altivec_vmaxuw(__a, __b);
3105*67e74705SXin Li }
3106*67e74705SXin Li
3107*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_max(vector bool int __a,vector unsigned int __b)3108*67e74705SXin Li vec_max(vector bool int __a, vector unsigned int __b) {
3109*67e74705SXin Li return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
3110*67e74705SXin Li }
3111*67e74705SXin Li
3112*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_max(vector unsigned int __a,vector bool int __b)3113*67e74705SXin Li vec_max(vector unsigned int __a, vector bool int __b) {
3114*67e74705SXin Li return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
3115*67e74705SXin Li }
3116*67e74705SXin Li
3117*67e74705SXin Li #ifdef __POWER8_VECTOR__
3118*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_max(vector signed long long __a,vector signed long long __b)3119*67e74705SXin Li vec_max(vector signed long long __a, vector signed long long __b) {
3120*67e74705SXin Li return __builtin_altivec_vmaxsd(__a, __b);
3121*67e74705SXin Li }
3122*67e74705SXin Li
3123*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_max(vector bool long long __a,vector signed long long __b)3124*67e74705SXin Li vec_max(vector bool long long __a, vector signed long long __b) {
3125*67e74705SXin Li return __builtin_altivec_vmaxsd((vector signed long long)__a, __b);
3126*67e74705SXin Li }
3127*67e74705SXin Li
3128*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_max(vector signed long long __a,vector bool long long __b)3129*67e74705SXin Li vec_max(vector signed long long __a, vector bool long long __b) {
3130*67e74705SXin Li return __builtin_altivec_vmaxsd(__a, (vector signed long long)__b);
3131*67e74705SXin Li }
3132*67e74705SXin Li
3133*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_max(vector unsigned long long __a,vector unsigned long long __b)3134*67e74705SXin Li vec_max(vector unsigned long long __a, vector unsigned long long __b) {
3135*67e74705SXin Li return __builtin_altivec_vmaxud(__a, __b);
3136*67e74705SXin Li }
3137*67e74705SXin Li
3138*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_max(vector bool long long __a,vector unsigned long long __b)3139*67e74705SXin Li vec_max(vector bool long long __a, vector unsigned long long __b) {
3140*67e74705SXin Li return __builtin_altivec_vmaxud((vector unsigned long long)__a, __b);
3141*67e74705SXin Li }
3142*67e74705SXin Li
3143*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_max(vector unsigned long long __a,vector bool long long __b)3144*67e74705SXin Li vec_max(vector unsigned long long __a, vector bool long long __b) {
3145*67e74705SXin Li return __builtin_altivec_vmaxud(__a, (vector unsigned long long)__b);
3146*67e74705SXin Li }
3147*67e74705SXin Li #endif
3148*67e74705SXin Li
vec_max(vector float __a,vector float __b)3149*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_max(vector float __a,
3150*67e74705SXin Li vector float __b) {
3151*67e74705SXin Li #ifdef __VSX__
3152*67e74705SXin Li return __builtin_vsx_xvmaxsp(__a, __b);
3153*67e74705SXin Li #else
3154*67e74705SXin Li return __builtin_altivec_vmaxfp(__a, __b);
3155*67e74705SXin Li #endif
3156*67e74705SXin Li }
3157*67e74705SXin Li
3158*67e74705SXin Li #ifdef __VSX__
vec_max(vector double __a,vector double __b)3159*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_max(vector double __a,
3160*67e74705SXin Li vector double __b) {
3161*67e74705SXin Li return __builtin_vsx_xvmaxdp(__a, __b);
3162*67e74705SXin Li }
3163*67e74705SXin Li #endif
3164*67e74705SXin Li
3165*67e74705SXin Li /* vec_vmaxsb */
3166*67e74705SXin Li
3167*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vmaxsb(vector signed char __a,vector signed char __b)3168*67e74705SXin Li vec_vmaxsb(vector signed char __a, vector signed char __b) {
3169*67e74705SXin Li return __builtin_altivec_vmaxsb(__a, __b);
3170*67e74705SXin Li }
3171*67e74705SXin Li
3172*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vmaxsb(vector bool char __a,vector signed char __b)3173*67e74705SXin Li vec_vmaxsb(vector bool char __a, vector signed char __b) {
3174*67e74705SXin Li return __builtin_altivec_vmaxsb((vector signed char)__a, __b);
3175*67e74705SXin Li }
3176*67e74705SXin Li
3177*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vmaxsb(vector signed char __a,vector bool char __b)3178*67e74705SXin Li vec_vmaxsb(vector signed char __a, vector bool char __b) {
3179*67e74705SXin Li return __builtin_altivec_vmaxsb(__a, (vector signed char)__b);
3180*67e74705SXin Li }
3181*67e74705SXin Li
3182*67e74705SXin Li /* vec_vmaxub */
3183*67e74705SXin Li
3184*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vmaxub(vector unsigned char __a,vector unsigned char __b)3185*67e74705SXin Li vec_vmaxub(vector unsigned char __a, vector unsigned char __b) {
3186*67e74705SXin Li return __builtin_altivec_vmaxub(__a, __b);
3187*67e74705SXin Li }
3188*67e74705SXin Li
3189*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vmaxub(vector bool char __a,vector unsigned char __b)3190*67e74705SXin Li vec_vmaxub(vector bool char __a, vector unsigned char __b) {
3191*67e74705SXin Li return __builtin_altivec_vmaxub((vector unsigned char)__a, __b);
3192*67e74705SXin Li }
3193*67e74705SXin Li
3194*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vmaxub(vector unsigned char __a,vector bool char __b)3195*67e74705SXin Li vec_vmaxub(vector unsigned char __a, vector bool char __b) {
3196*67e74705SXin Li return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b);
3197*67e74705SXin Li }
3198*67e74705SXin Li
3199*67e74705SXin Li /* vec_vmaxsh */
3200*67e74705SXin Li
vec_vmaxsh(vector short __a,vector short __b)3201*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
3202*67e74705SXin Li vector short __b) {
3203*67e74705SXin Li return __builtin_altivec_vmaxsh(__a, __b);
3204*67e74705SXin Li }
3205*67e74705SXin Li
vec_vmaxsh(vector bool short __a,vector short __b)3206*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector bool short __a,
3207*67e74705SXin Li vector short __b) {
3208*67e74705SXin Li return __builtin_altivec_vmaxsh((vector short)__a, __b);
3209*67e74705SXin Li }
3210*67e74705SXin Li
vec_vmaxsh(vector short __a,vector bool short __b)3211*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vmaxsh(vector short __a,
3212*67e74705SXin Li vector bool short __b) {
3213*67e74705SXin Li return __builtin_altivec_vmaxsh(__a, (vector short)__b);
3214*67e74705SXin Li }
3215*67e74705SXin Li
3216*67e74705SXin Li /* vec_vmaxuh */
3217*67e74705SXin Li
3218*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vmaxuh(vector unsigned short __a,vector unsigned short __b)3219*67e74705SXin Li vec_vmaxuh(vector unsigned short __a, vector unsigned short __b) {
3220*67e74705SXin Li return __builtin_altivec_vmaxuh(__a, __b);
3221*67e74705SXin Li }
3222*67e74705SXin Li
3223*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vmaxuh(vector bool short __a,vector unsigned short __b)3224*67e74705SXin Li vec_vmaxuh(vector bool short __a, vector unsigned short __b) {
3225*67e74705SXin Li return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b);
3226*67e74705SXin Li }
3227*67e74705SXin Li
3228*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vmaxuh(vector unsigned short __a,vector bool short __b)3229*67e74705SXin Li vec_vmaxuh(vector unsigned short __a, vector bool short __b) {
3230*67e74705SXin Li return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b);
3231*67e74705SXin Li }
3232*67e74705SXin Li
3233*67e74705SXin Li /* vec_vmaxsw */
3234*67e74705SXin Li
vec_vmaxsw(vector int __a,vector int __b)3235*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
3236*67e74705SXin Li vector int __b) {
3237*67e74705SXin Li return __builtin_altivec_vmaxsw(__a, __b);
3238*67e74705SXin Li }
3239*67e74705SXin Li
vec_vmaxsw(vector bool int __a,vector int __b)3240*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector bool int __a,
3241*67e74705SXin Li vector int __b) {
3242*67e74705SXin Li return __builtin_altivec_vmaxsw((vector int)__a, __b);
3243*67e74705SXin Li }
3244*67e74705SXin Li
vec_vmaxsw(vector int __a,vector bool int __b)3245*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vmaxsw(vector int __a,
3246*67e74705SXin Li vector bool int __b) {
3247*67e74705SXin Li return __builtin_altivec_vmaxsw(__a, (vector int)__b);
3248*67e74705SXin Li }
3249*67e74705SXin Li
3250*67e74705SXin Li /* vec_vmaxuw */
3251*67e74705SXin Li
3252*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vmaxuw(vector unsigned int __a,vector unsigned int __b)3253*67e74705SXin Li vec_vmaxuw(vector unsigned int __a, vector unsigned int __b) {
3254*67e74705SXin Li return __builtin_altivec_vmaxuw(__a, __b);
3255*67e74705SXin Li }
3256*67e74705SXin Li
3257*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vmaxuw(vector bool int __a,vector unsigned int __b)3258*67e74705SXin Li vec_vmaxuw(vector bool int __a, vector unsigned int __b) {
3259*67e74705SXin Li return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b);
3260*67e74705SXin Li }
3261*67e74705SXin Li
3262*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vmaxuw(vector unsigned int __a,vector bool int __b)3263*67e74705SXin Li vec_vmaxuw(vector unsigned int __a, vector bool int __b) {
3264*67e74705SXin Li return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b);
3265*67e74705SXin Li }
3266*67e74705SXin Li
3267*67e74705SXin Li /* vec_vmaxfp */
3268*67e74705SXin Li
3269*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vmaxfp(vector float __a,vector float __b)3270*67e74705SXin Li vec_vmaxfp(vector float __a, vector float __b) {
3271*67e74705SXin Li #ifdef __VSX__
3272*67e74705SXin Li return __builtin_vsx_xvmaxsp(__a, __b);
3273*67e74705SXin Li #else
3274*67e74705SXin Li return __builtin_altivec_vmaxfp(__a, __b);
3275*67e74705SXin Li #endif
3276*67e74705SXin Li }
3277*67e74705SXin Li
3278*67e74705SXin Li /* vec_mergeh */
3279*67e74705SXin Li
3280*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_mergeh(vector signed char __a,vector signed char __b)3281*67e74705SXin Li vec_mergeh(vector signed char __a, vector signed char __b) {
3282*67e74705SXin Li return vec_perm(__a, __b,
3283*67e74705SXin Li (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
3284*67e74705SXin Li 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
3285*67e74705SXin Li 0x06, 0x16, 0x07, 0x17));
3286*67e74705SXin Li }
3287*67e74705SXin Li
3288*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_mergeh(vector unsigned char __a,vector unsigned char __b)3289*67e74705SXin Li vec_mergeh(vector unsigned char __a, vector unsigned char __b) {
3290*67e74705SXin Li return vec_perm(__a, __b,
3291*67e74705SXin Li (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
3292*67e74705SXin Li 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
3293*67e74705SXin Li 0x06, 0x16, 0x07, 0x17));
3294*67e74705SXin Li }
3295*67e74705SXin Li
3296*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_mergeh(vector bool char __a,vector bool char __b)3297*67e74705SXin Li vec_mergeh(vector bool char __a, vector bool char __b) {
3298*67e74705SXin Li return vec_perm(__a, __b,
3299*67e74705SXin Li (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
3300*67e74705SXin Li 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
3301*67e74705SXin Li 0x06, 0x16, 0x07, 0x17));
3302*67e74705SXin Li }
3303*67e74705SXin Li
vec_mergeh(vector short __a,vector short __b)3304*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_mergeh(vector short __a,
3305*67e74705SXin Li vector short __b) {
3306*67e74705SXin Li return vec_perm(__a, __b,
3307*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
3308*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
3309*67e74705SXin Li 0x06, 0x07, 0x16, 0x17));
3310*67e74705SXin Li }
3311*67e74705SXin Li
3312*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_mergeh(vector unsigned short __a,vector unsigned short __b)3313*67e74705SXin Li vec_mergeh(vector unsigned short __a, vector unsigned short __b) {
3314*67e74705SXin Li return vec_perm(__a, __b,
3315*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
3316*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
3317*67e74705SXin Li 0x06, 0x07, 0x16, 0x17));
3318*67e74705SXin Li }
3319*67e74705SXin Li
3320*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_mergeh(vector bool short __a,vector bool short __b)3321*67e74705SXin Li vec_mergeh(vector bool short __a, vector bool short __b) {
3322*67e74705SXin Li return vec_perm(__a, __b,
3323*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
3324*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
3325*67e74705SXin Li 0x06, 0x07, 0x16, 0x17));
3326*67e74705SXin Li }
3327*67e74705SXin Li
vec_mergeh(vector pixel __a,vector pixel __b)3328*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_mergeh(vector pixel __a,
3329*67e74705SXin Li vector pixel __b) {
3330*67e74705SXin Li return vec_perm(__a, __b,
3331*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
3332*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
3333*67e74705SXin Li 0x06, 0x07, 0x16, 0x17));
3334*67e74705SXin Li }
3335*67e74705SXin Li
vec_mergeh(vector int __a,vector int __b)3336*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_mergeh(vector int __a,
3337*67e74705SXin Li vector int __b) {
3338*67e74705SXin Li return vec_perm(__a, __b,
3339*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
3340*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
3341*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3342*67e74705SXin Li }
3343*67e74705SXin Li
3344*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_mergeh(vector unsigned int __a,vector unsigned int __b)3345*67e74705SXin Li vec_mergeh(vector unsigned int __a, vector unsigned int __b) {
3346*67e74705SXin Li return vec_perm(__a, __b,
3347*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
3348*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
3349*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3350*67e74705SXin Li }
3351*67e74705SXin Li
vec_mergeh(vector bool int __a,vector bool int __b)3352*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_mergeh(vector bool int __a,
3353*67e74705SXin Li vector bool int __b) {
3354*67e74705SXin Li return vec_perm(__a, __b,
3355*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
3356*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
3357*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3358*67e74705SXin Li }
3359*67e74705SXin Li
vec_mergeh(vector float __a,vector float __b)3360*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_mergeh(vector float __a,
3361*67e74705SXin Li vector float __b) {
3362*67e74705SXin Li return vec_perm(__a, __b,
3363*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
3364*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
3365*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3366*67e74705SXin Li }
3367*67e74705SXin Li
3368*67e74705SXin Li #ifdef __VSX__
3369*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_mergeh(vector signed long long __a,vector signed long long __b)3370*67e74705SXin Li vec_mergeh(vector signed long long __a, vector signed long long __b) {
3371*67e74705SXin Li return vec_perm(__a, __b,
3372*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
3373*67e74705SXin Li 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
3374*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3375*67e74705SXin Li }
3376*67e74705SXin Li
3377*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_mergeh(vector signed long long __a,vector bool long long __b)3378*67e74705SXin Li vec_mergeh(vector signed long long __a, vector bool long long __b) {
3379*67e74705SXin Li return vec_perm(__a, (vector signed long long)__b,
3380*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
3381*67e74705SXin Li 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
3382*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3383*67e74705SXin Li }
3384*67e74705SXin Li
3385*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_mergeh(vector bool long long __a,vector signed long long __b)3386*67e74705SXin Li vec_mergeh(vector bool long long __a, vector signed long long __b) {
3387*67e74705SXin Li return vec_perm((vector signed long long)__a, __b,
3388*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
3389*67e74705SXin Li 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
3390*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3391*67e74705SXin Li }
3392*67e74705SXin Li
3393*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_mergeh(vector unsigned long long __a,vector unsigned long long __b)3394*67e74705SXin Li vec_mergeh(vector unsigned long long __a, vector unsigned long long __b) {
3395*67e74705SXin Li return vec_perm(__a, __b,
3396*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
3397*67e74705SXin Li 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
3398*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3399*67e74705SXin Li }
3400*67e74705SXin Li
3401*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_mergeh(vector unsigned long long __a,vector bool long long __b)3402*67e74705SXin Li vec_mergeh(vector unsigned long long __a, vector bool long long __b) {
3403*67e74705SXin Li return vec_perm(__a, (vector unsigned long long)__b,
3404*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
3405*67e74705SXin Li 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
3406*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3407*67e74705SXin Li }
3408*67e74705SXin Li
3409*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_mergeh(vector bool long long __a,vector unsigned long long __b)3410*67e74705SXin Li vec_mergeh(vector bool long long __a, vector unsigned long long __b) {
3411*67e74705SXin Li return vec_perm((vector unsigned long long)__a, __b,
3412*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
3413*67e74705SXin Li 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
3414*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3415*67e74705SXin Li }
3416*67e74705SXin Li
3417*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_mergeh(vector bool long long __a,vector bool long long __b)3418*67e74705SXin Li vec_mergeh(vector bool long long __a, vector bool long long __b) {
3419*67e74705SXin Li return vec_perm(__a, __b,
3420*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
3421*67e74705SXin Li 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
3422*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3423*67e74705SXin Li }
3424*67e74705SXin Li
vec_mergeh(vector double __a,vector double __b)3425*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_mergeh(vector double __a,
3426*67e74705SXin Li vector double __b) {
3427*67e74705SXin Li return vec_perm(__a, __b,
3428*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
3429*67e74705SXin Li 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
3430*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3431*67e74705SXin Li }
3432*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_mergeh(vector double __a,vector bool long long __b)3433*67e74705SXin Li vec_mergeh(vector double __a, vector bool long long __b) {
3434*67e74705SXin Li return vec_perm(__a, (vector double)__b,
3435*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
3436*67e74705SXin Li 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
3437*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3438*67e74705SXin Li }
3439*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_mergeh(vector bool long long __a,vector double __b)3440*67e74705SXin Li vec_mergeh(vector bool long long __a, vector double __b) {
3441*67e74705SXin Li return vec_perm((vector double)__a, __b,
3442*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
3443*67e74705SXin Li 0x06, 0x07, 0x10, 0x11, 0x12, 0x13,
3444*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3445*67e74705SXin Li }
3446*67e74705SXin Li #endif
3447*67e74705SXin Li
3448*67e74705SXin Li /* vec_vmrghb */
3449*67e74705SXin Li
3450*67e74705SXin Li #define __builtin_altivec_vmrghb vec_vmrghb
3451*67e74705SXin Li
3452*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vmrghb(vector signed char __a,vector signed char __b)3453*67e74705SXin Li vec_vmrghb(vector signed char __a, vector signed char __b) {
3454*67e74705SXin Li return vec_perm(__a, __b,
3455*67e74705SXin Li (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
3456*67e74705SXin Li 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
3457*67e74705SXin Li 0x06, 0x16, 0x07, 0x17));
3458*67e74705SXin Li }
3459*67e74705SXin Li
3460*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vmrghb(vector unsigned char __a,vector unsigned char __b)3461*67e74705SXin Li vec_vmrghb(vector unsigned char __a, vector unsigned char __b) {
3462*67e74705SXin Li return vec_perm(__a, __b,
3463*67e74705SXin Li (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
3464*67e74705SXin Li 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
3465*67e74705SXin Li 0x06, 0x16, 0x07, 0x17));
3466*67e74705SXin Li }
3467*67e74705SXin Li
3468*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_vmrghb(vector bool char __a,vector bool char __b)3469*67e74705SXin Li vec_vmrghb(vector bool char __a, vector bool char __b) {
3470*67e74705SXin Li return vec_perm(__a, __b,
3471*67e74705SXin Li (vector unsigned char)(0x00, 0x10, 0x01, 0x11, 0x02, 0x12,
3472*67e74705SXin Li 0x03, 0x13, 0x04, 0x14, 0x05, 0x15,
3473*67e74705SXin Li 0x06, 0x16, 0x07, 0x17));
3474*67e74705SXin Li }
3475*67e74705SXin Li
3476*67e74705SXin Li /* vec_vmrghh */
3477*67e74705SXin Li
3478*67e74705SXin Li #define __builtin_altivec_vmrghh vec_vmrghh
3479*67e74705SXin Li
vec_vmrghh(vector short __a,vector short __b)3480*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vmrghh(vector short __a,
3481*67e74705SXin Li vector short __b) {
3482*67e74705SXin Li return vec_perm(__a, __b,
3483*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
3484*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
3485*67e74705SXin Li 0x06, 0x07, 0x16, 0x17));
3486*67e74705SXin Li }
3487*67e74705SXin Li
3488*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vmrghh(vector unsigned short __a,vector unsigned short __b)3489*67e74705SXin Li vec_vmrghh(vector unsigned short __a, vector unsigned short __b) {
3490*67e74705SXin Li return vec_perm(__a, __b,
3491*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
3492*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
3493*67e74705SXin Li 0x06, 0x07, 0x16, 0x17));
3494*67e74705SXin Li }
3495*67e74705SXin Li
3496*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vmrghh(vector bool short __a,vector bool short __b)3497*67e74705SXin Li vec_vmrghh(vector bool short __a, vector bool short __b) {
3498*67e74705SXin Li return vec_perm(__a, __b,
3499*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
3500*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
3501*67e74705SXin Li 0x06, 0x07, 0x16, 0x17));
3502*67e74705SXin Li }
3503*67e74705SXin Li
vec_vmrghh(vector pixel __a,vector pixel __b)3504*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vmrghh(vector pixel __a,
3505*67e74705SXin Li vector pixel __b) {
3506*67e74705SXin Li return vec_perm(__a, __b,
3507*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x10, 0x11, 0x02, 0x03,
3508*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x14, 0x15,
3509*67e74705SXin Li 0x06, 0x07, 0x16, 0x17));
3510*67e74705SXin Li }
3511*67e74705SXin Li
3512*67e74705SXin Li /* vec_vmrghw */
3513*67e74705SXin Li
3514*67e74705SXin Li #define __builtin_altivec_vmrghw vec_vmrghw
3515*67e74705SXin Li
vec_vmrghw(vector int __a,vector int __b)3516*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vmrghw(vector int __a,
3517*67e74705SXin Li vector int __b) {
3518*67e74705SXin Li return vec_perm(__a, __b,
3519*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
3520*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
3521*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3522*67e74705SXin Li }
3523*67e74705SXin Li
3524*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vmrghw(vector unsigned int __a,vector unsigned int __b)3525*67e74705SXin Li vec_vmrghw(vector unsigned int __a, vector unsigned int __b) {
3526*67e74705SXin Li return vec_perm(__a, __b,
3527*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
3528*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
3529*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3530*67e74705SXin Li }
3531*67e74705SXin Li
vec_vmrghw(vector bool int __a,vector bool int __b)3532*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_vmrghw(vector bool int __a,
3533*67e74705SXin Li vector bool int __b) {
3534*67e74705SXin Li return vec_perm(__a, __b,
3535*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
3536*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
3537*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3538*67e74705SXin Li }
3539*67e74705SXin Li
vec_vmrghw(vector float __a,vector float __b)3540*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vmrghw(vector float __a,
3541*67e74705SXin Li vector float __b) {
3542*67e74705SXin Li return vec_perm(__a, __b,
3543*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
3544*67e74705SXin Li 0x12, 0x13, 0x04, 0x05, 0x06, 0x07,
3545*67e74705SXin Li 0x14, 0x15, 0x16, 0x17));
3546*67e74705SXin Li }
3547*67e74705SXin Li
3548*67e74705SXin Li /* vec_mergel */
3549*67e74705SXin Li
3550*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_mergel(vector signed char __a,vector signed char __b)3551*67e74705SXin Li vec_mergel(vector signed char __a, vector signed char __b) {
3552*67e74705SXin Li return vec_perm(__a, __b,
3553*67e74705SXin Li (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
3554*67e74705SXin Li 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
3555*67e74705SXin Li 0x0E, 0x1E, 0x0F, 0x1F));
3556*67e74705SXin Li }
3557*67e74705SXin Li
3558*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_mergel(vector unsigned char __a,vector unsigned char __b)3559*67e74705SXin Li vec_mergel(vector unsigned char __a, vector unsigned char __b) {
3560*67e74705SXin Li return vec_perm(__a, __b,
3561*67e74705SXin Li (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
3562*67e74705SXin Li 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
3563*67e74705SXin Li 0x0E, 0x1E, 0x0F, 0x1F));
3564*67e74705SXin Li }
3565*67e74705SXin Li
3566*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_mergel(vector bool char __a,vector bool char __b)3567*67e74705SXin Li vec_mergel(vector bool char __a, vector bool char __b) {
3568*67e74705SXin Li return vec_perm(__a, __b,
3569*67e74705SXin Li (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
3570*67e74705SXin Li 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
3571*67e74705SXin Li 0x0E, 0x1E, 0x0F, 0x1F));
3572*67e74705SXin Li }
3573*67e74705SXin Li
vec_mergel(vector short __a,vector short __b)3574*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_mergel(vector short __a,
3575*67e74705SXin Li vector short __b) {
3576*67e74705SXin Li return vec_perm(__a, __b,
3577*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
3578*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
3579*67e74705SXin Li 0x0E, 0x0F, 0x1E, 0x1F));
3580*67e74705SXin Li }
3581*67e74705SXin Li
3582*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_mergel(vector unsigned short __a,vector unsigned short __b)3583*67e74705SXin Li vec_mergel(vector unsigned short __a, vector unsigned short __b) {
3584*67e74705SXin Li return vec_perm(__a, __b,
3585*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
3586*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
3587*67e74705SXin Li 0x0E, 0x0F, 0x1E, 0x1F));
3588*67e74705SXin Li }
3589*67e74705SXin Li
3590*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_mergel(vector bool short __a,vector bool short __b)3591*67e74705SXin Li vec_mergel(vector bool short __a, vector bool short __b) {
3592*67e74705SXin Li return vec_perm(__a, __b,
3593*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
3594*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
3595*67e74705SXin Li 0x0E, 0x0F, 0x1E, 0x1F));
3596*67e74705SXin Li }
3597*67e74705SXin Li
vec_mergel(vector pixel __a,vector pixel __b)3598*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_mergel(vector pixel __a,
3599*67e74705SXin Li vector pixel __b) {
3600*67e74705SXin Li return vec_perm(__a, __b,
3601*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
3602*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
3603*67e74705SXin Li 0x0E, 0x0F, 0x1E, 0x1F));
3604*67e74705SXin Li }
3605*67e74705SXin Li
vec_mergel(vector int __a,vector int __b)3606*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_mergel(vector int __a,
3607*67e74705SXin Li vector int __b) {
3608*67e74705SXin Li return vec_perm(__a, __b,
3609*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
3610*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
3611*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3612*67e74705SXin Li }
3613*67e74705SXin Li
3614*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_mergel(vector unsigned int __a,vector unsigned int __b)3615*67e74705SXin Li vec_mergel(vector unsigned int __a, vector unsigned int __b) {
3616*67e74705SXin Li return vec_perm(__a, __b,
3617*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
3618*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
3619*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3620*67e74705SXin Li }
3621*67e74705SXin Li
vec_mergel(vector bool int __a,vector bool int __b)3622*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_mergel(vector bool int __a,
3623*67e74705SXin Li vector bool int __b) {
3624*67e74705SXin Li return vec_perm(__a, __b,
3625*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
3626*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
3627*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3628*67e74705SXin Li }
3629*67e74705SXin Li
vec_mergel(vector float __a,vector float __b)3630*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_mergel(vector float __a,
3631*67e74705SXin Li vector float __b) {
3632*67e74705SXin Li return vec_perm(__a, __b,
3633*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
3634*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
3635*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3636*67e74705SXin Li }
3637*67e74705SXin Li
3638*67e74705SXin Li #ifdef __VSX__
3639*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_mergel(vector signed long long __a,vector signed long long __b)3640*67e74705SXin Li vec_mergel(vector signed long long __a, vector signed long long __b) {
3641*67e74705SXin Li return vec_perm(__a, __b,
3642*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
3643*67e74705SXin Li 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
3644*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3645*67e74705SXin Li }
3646*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_mergel(vector signed long long __a,vector bool long long __b)3647*67e74705SXin Li vec_mergel(vector signed long long __a, vector bool long long __b) {
3648*67e74705SXin Li return vec_perm(__a, (vector signed long long)__b,
3649*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
3650*67e74705SXin Li 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
3651*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3652*67e74705SXin Li }
3653*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_mergel(vector bool long long __a,vector signed long long __b)3654*67e74705SXin Li vec_mergel(vector bool long long __a, vector signed long long __b) {
3655*67e74705SXin Li return vec_perm((vector signed long long)__a, __b,
3656*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
3657*67e74705SXin Li 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
3658*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3659*67e74705SXin Li }
3660*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_mergel(vector unsigned long long __a,vector unsigned long long __b)3661*67e74705SXin Li vec_mergel(vector unsigned long long __a, vector unsigned long long __b) {
3662*67e74705SXin Li return vec_perm(__a, __b,
3663*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
3664*67e74705SXin Li 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
3665*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3666*67e74705SXin Li }
3667*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_mergel(vector unsigned long long __a,vector bool long long __b)3668*67e74705SXin Li vec_mergel(vector unsigned long long __a, vector bool long long __b) {
3669*67e74705SXin Li return vec_perm(__a, (vector unsigned long long)__b,
3670*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
3671*67e74705SXin Li 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
3672*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3673*67e74705SXin Li }
3674*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_mergel(vector bool long long __a,vector unsigned long long __b)3675*67e74705SXin Li vec_mergel(vector bool long long __a, vector unsigned long long __b) {
3676*67e74705SXin Li return vec_perm((vector unsigned long long)__a, __b,
3677*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
3678*67e74705SXin Li 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
3679*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3680*67e74705SXin Li }
3681*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_mergel(vector bool long long __a,vector bool long long __b)3682*67e74705SXin Li vec_mergel(vector bool long long __a, vector bool long long __b) {
3683*67e74705SXin Li return vec_perm(__a, __b,
3684*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
3685*67e74705SXin Li 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
3686*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3687*67e74705SXin Li }
vec_mergel(vector double __a,vector double __b)3688*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_mergel(vector double __a,
3689*67e74705SXin Li vector double __b) {
3690*67e74705SXin Li return vec_perm(__a, __b,
3691*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
3692*67e74705SXin Li 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
3693*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3694*67e74705SXin Li }
3695*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_mergel(vector double __a,vector bool long long __b)3696*67e74705SXin Li vec_mergel(vector double __a, vector bool long long __b) {
3697*67e74705SXin Li return vec_perm(__a, (vector double)__b,
3698*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
3699*67e74705SXin Li 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
3700*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3701*67e74705SXin Li }
3702*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_mergel(vector bool long long __a,vector double __b)3703*67e74705SXin Li vec_mergel(vector bool long long __a, vector double __b) {
3704*67e74705SXin Li return vec_perm((vector double)__a, __b,
3705*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D,
3706*67e74705SXin Li 0x0E, 0x0F, 0x18, 0X19, 0x1A, 0x1B,
3707*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3708*67e74705SXin Li }
3709*67e74705SXin Li #endif
3710*67e74705SXin Li
3711*67e74705SXin Li /* vec_vmrglb */
3712*67e74705SXin Li
3713*67e74705SXin Li #define __builtin_altivec_vmrglb vec_vmrglb
3714*67e74705SXin Li
3715*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vmrglb(vector signed char __a,vector signed char __b)3716*67e74705SXin Li vec_vmrglb(vector signed char __a, vector signed char __b) {
3717*67e74705SXin Li return vec_perm(__a, __b,
3718*67e74705SXin Li (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
3719*67e74705SXin Li 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
3720*67e74705SXin Li 0x0E, 0x1E, 0x0F, 0x1F));
3721*67e74705SXin Li }
3722*67e74705SXin Li
3723*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vmrglb(vector unsigned char __a,vector unsigned char __b)3724*67e74705SXin Li vec_vmrglb(vector unsigned char __a, vector unsigned char __b) {
3725*67e74705SXin Li return vec_perm(__a, __b,
3726*67e74705SXin Li (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
3727*67e74705SXin Li 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
3728*67e74705SXin Li 0x0E, 0x1E, 0x0F, 0x1F));
3729*67e74705SXin Li }
3730*67e74705SXin Li
3731*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_vmrglb(vector bool char __a,vector bool char __b)3732*67e74705SXin Li vec_vmrglb(vector bool char __a, vector bool char __b) {
3733*67e74705SXin Li return vec_perm(__a, __b,
3734*67e74705SXin Li (vector unsigned char)(0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A,
3735*67e74705SXin Li 0x0B, 0x1B, 0x0C, 0x1C, 0x0D, 0x1D,
3736*67e74705SXin Li 0x0E, 0x1E, 0x0F, 0x1F));
3737*67e74705SXin Li }
3738*67e74705SXin Li
3739*67e74705SXin Li /* vec_vmrglh */
3740*67e74705SXin Li
3741*67e74705SXin Li #define __builtin_altivec_vmrglh vec_vmrglh
3742*67e74705SXin Li
vec_vmrglh(vector short __a,vector short __b)3743*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vmrglh(vector short __a,
3744*67e74705SXin Li vector short __b) {
3745*67e74705SXin Li return vec_perm(__a, __b,
3746*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
3747*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
3748*67e74705SXin Li 0x0E, 0x0F, 0x1E, 0x1F));
3749*67e74705SXin Li }
3750*67e74705SXin Li
3751*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vmrglh(vector unsigned short __a,vector unsigned short __b)3752*67e74705SXin Li vec_vmrglh(vector unsigned short __a, vector unsigned short __b) {
3753*67e74705SXin Li return vec_perm(__a, __b,
3754*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
3755*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
3756*67e74705SXin Li 0x0E, 0x0F, 0x1E, 0x1F));
3757*67e74705SXin Li }
3758*67e74705SXin Li
3759*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vmrglh(vector bool short __a,vector bool short __b)3760*67e74705SXin Li vec_vmrglh(vector bool short __a, vector bool short __b) {
3761*67e74705SXin Li return vec_perm(__a, __b,
3762*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
3763*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
3764*67e74705SXin Li 0x0E, 0x0F, 0x1E, 0x1F));
3765*67e74705SXin Li }
3766*67e74705SXin Li
vec_vmrglh(vector pixel __a,vector pixel __b)3767*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vmrglh(vector pixel __a,
3768*67e74705SXin Li vector pixel __b) {
3769*67e74705SXin Li return vec_perm(__a, __b,
3770*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B,
3771*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x1C, 0x1D,
3772*67e74705SXin Li 0x0E, 0x0F, 0x1E, 0x1F));
3773*67e74705SXin Li }
3774*67e74705SXin Li
3775*67e74705SXin Li /* vec_vmrglw */
3776*67e74705SXin Li
3777*67e74705SXin Li #define __builtin_altivec_vmrglw vec_vmrglw
3778*67e74705SXin Li
vec_vmrglw(vector int __a,vector int __b)3779*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vmrglw(vector int __a,
3780*67e74705SXin Li vector int __b) {
3781*67e74705SXin Li return vec_perm(__a, __b,
3782*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
3783*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
3784*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3785*67e74705SXin Li }
3786*67e74705SXin Li
3787*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vmrglw(vector unsigned int __a,vector unsigned int __b)3788*67e74705SXin Li vec_vmrglw(vector unsigned int __a, vector unsigned int __b) {
3789*67e74705SXin Li return vec_perm(__a, __b,
3790*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
3791*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
3792*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3793*67e74705SXin Li }
3794*67e74705SXin Li
vec_vmrglw(vector bool int __a,vector bool int __b)3795*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_vmrglw(vector bool int __a,
3796*67e74705SXin Li vector bool int __b) {
3797*67e74705SXin Li return vec_perm(__a, __b,
3798*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
3799*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
3800*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3801*67e74705SXin Li }
3802*67e74705SXin Li
vec_vmrglw(vector float __a,vector float __b)3803*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vmrglw(vector float __a,
3804*67e74705SXin Li vector float __b) {
3805*67e74705SXin Li return vec_perm(__a, __b,
3806*67e74705SXin Li (vector unsigned char)(0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19,
3807*67e74705SXin Li 0x1A, 0x1B, 0x0C, 0x0D, 0x0E, 0x0F,
3808*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3809*67e74705SXin Li }
3810*67e74705SXin Li
3811*67e74705SXin Li #ifdef __POWER8_VECTOR__
3812*67e74705SXin Li /* vec_mergee */
3813*67e74705SXin Li
vec_mergee(vector bool int __a,vector bool int __b)3814*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_mergee(vector bool int __a,
3815*67e74705SXin Li vector bool int __b) {
3816*67e74705SXin Li return vec_perm(__a, __b,
3817*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
3818*67e74705SXin Li 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
3819*67e74705SXin Li 0x18, 0x19, 0x1A, 0x1B));
3820*67e74705SXin Li }
3821*67e74705SXin Li
3822*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_mergee(vector signed int __a,vector signed int __b)3823*67e74705SXin Li vec_mergee(vector signed int __a, vector signed int __b) {
3824*67e74705SXin Li return vec_perm(__a, __b,
3825*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
3826*67e74705SXin Li 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
3827*67e74705SXin Li 0x18, 0x19, 0x1A, 0x1B));
3828*67e74705SXin Li }
3829*67e74705SXin Li
3830*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_mergee(vector unsigned int __a,vector unsigned int __b)3831*67e74705SXin Li vec_mergee(vector unsigned int __a, vector unsigned int __b) {
3832*67e74705SXin Li return vec_perm(__a, __b,
3833*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x10, 0x11,
3834*67e74705SXin Li 0x12, 0x13, 0x08, 0x09, 0x0A, 0x0B,
3835*67e74705SXin Li 0x18, 0x19, 0x1A, 0x1B));
3836*67e74705SXin Li }
3837*67e74705SXin Li
3838*67e74705SXin Li /* vec_mergeo */
3839*67e74705SXin Li
vec_mergeo(vector bool int __a,vector bool int __b)3840*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_mergeo(vector bool int __a,
3841*67e74705SXin Li vector bool int __b) {
3842*67e74705SXin Li return vec_perm(__a, __b,
3843*67e74705SXin Li (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
3844*67e74705SXin Li 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
3845*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3846*67e74705SXin Li }
3847*67e74705SXin Li
3848*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_mergeo(vector signed int __a,vector signed int __b)3849*67e74705SXin Li vec_mergeo(vector signed int __a, vector signed int __b) {
3850*67e74705SXin Li return vec_perm(__a, __b,
3851*67e74705SXin Li (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
3852*67e74705SXin Li 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
3853*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3854*67e74705SXin Li }
3855*67e74705SXin Li
3856*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_mergeo(vector unsigned int __a,vector unsigned int __b)3857*67e74705SXin Li vec_mergeo(vector unsigned int __a, vector unsigned int __b) {
3858*67e74705SXin Li return vec_perm(__a, __b,
3859*67e74705SXin Li (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x14, 0x15,
3860*67e74705SXin Li 0x16, 0x17, 0x0C, 0x0D, 0x0E, 0x0F,
3861*67e74705SXin Li 0x1C, 0x1D, 0x1E, 0x1F));
3862*67e74705SXin Li }
3863*67e74705SXin Li
3864*67e74705SXin Li #endif
3865*67e74705SXin Li
3866*67e74705SXin Li /* vec_mfvscr */
3867*67e74705SXin Li
3868*67e74705SXin Li static __inline__ vector unsigned short __attribute__((__always_inline__))
vec_mfvscr(void)3869*67e74705SXin Li vec_mfvscr(void) {
3870*67e74705SXin Li return __builtin_altivec_mfvscr();
3871*67e74705SXin Li }
3872*67e74705SXin Li
3873*67e74705SXin Li /* vec_min */
3874*67e74705SXin Li
3875*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_min(vector signed char __a,vector signed char __b)3876*67e74705SXin Li vec_min(vector signed char __a, vector signed char __b) {
3877*67e74705SXin Li return __builtin_altivec_vminsb(__a, __b);
3878*67e74705SXin Li }
3879*67e74705SXin Li
3880*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_min(vector bool char __a,vector signed char __b)3881*67e74705SXin Li vec_min(vector bool char __a, vector signed char __b) {
3882*67e74705SXin Li return __builtin_altivec_vminsb((vector signed char)__a, __b);
3883*67e74705SXin Li }
3884*67e74705SXin Li
3885*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_min(vector signed char __a,vector bool char __b)3886*67e74705SXin Li vec_min(vector signed char __a, vector bool char __b) {
3887*67e74705SXin Li return __builtin_altivec_vminsb(__a, (vector signed char)__b);
3888*67e74705SXin Li }
3889*67e74705SXin Li
3890*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_min(vector unsigned char __a,vector unsigned char __b)3891*67e74705SXin Li vec_min(vector unsigned char __a, vector unsigned char __b) {
3892*67e74705SXin Li return __builtin_altivec_vminub(__a, __b);
3893*67e74705SXin Li }
3894*67e74705SXin Li
3895*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_min(vector bool char __a,vector unsigned char __b)3896*67e74705SXin Li vec_min(vector bool char __a, vector unsigned char __b) {
3897*67e74705SXin Li return __builtin_altivec_vminub((vector unsigned char)__a, __b);
3898*67e74705SXin Li }
3899*67e74705SXin Li
3900*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_min(vector unsigned char __a,vector bool char __b)3901*67e74705SXin Li vec_min(vector unsigned char __a, vector bool char __b) {
3902*67e74705SXin Li return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
3903*67e74705SXin Li }
3904*67e74705SXin Li
vec_min(vector short __a,vector short __b)3905*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
3906*67e74705SXin Li vector short __b) {
3907*67e74705SXin Li return __builtin_altivec_vminsh(__a, __b);
3908*67e74705SXin Li }
3909*67e74705SXin Li
vec_min(vector bool short __a,vector short __b)3910*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_min(vector bool short __a,
3911*67e74705SXin Li vector short __b) {
3912*67e74705SXin Li return __builtin_altivec_vminsh((vector short)__a, __b);
3913*67e74705SXin Li }
3914*67e74705SXin Li
vec_min(vector short __a,vector bool short __b)3915*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_min(vector short __a,
3916*67e74705SXin Li vector bool short __b) {
3917*67e74705SXin Li return __builtin_altivec_vminsh(__a, (vector short)__b);
3918*67e74705SXin Li }
3919*67e74705SXin Li
3920*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_min(vector unsigned short __a,vector unsigned short __b)3921*67e74705SXin Li vec_min(vector unsigned short __a, vector unsigned short __b) {
3922*67e74705SXin Li return __builtin_altivec_vminuh(__a, __b);
3923*67e74705SXin Li }
3924*67e74705SXin Li
3925*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_min(vector bool short __a,vector unsigned short __b)3926*67e74705SXin Li vec_min(vector bool short __a, vector unsigned short __b) {
3927*67e74705SXin Li return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
3928*67e74705SXin Li }
3929*67e74705SXin Li
3930*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_min(vector unsigned short __a,vector bool short __b)3931*67e74705SXin Li vec_min(vector unsigned short __a, vector bool short __b) {
3932*67e74705SXin Li return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
3933*67e74705SXin Li }
3934*67e74705SXin Li
vec_min(vector int __a,vector int __b)3935*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
3936*67e74705SXin Li vector int __b) {
3937*67e74705SXin Li return __builtin_altivec_vminsw(__a, __b);
3938*67e74705SXin Li }
3939*67e74705SXin Li
vec_min(vector bool int __a,vector int __b)3940*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_min(vector bool int __a,
3941*67e74705SXin Li vector int __b) {
3942*67e74705SXin Li return __builtin_altivec_vminsw((vector int)__a, __b);
3943*67e74705SXin Li }
3944*67e74705SXin Li
vec_min(vector int __a,vector bool int __b)3945*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_min(vector int __a,
3946*67e74705SXin Li vector bool int __b) {
3947*67e74705SXin Li return __builtin_altivec_vminsw(__a, (vector int)__b);
3948*67e74705SXin Li }
3949*67e74705SXin Li
3950*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_min(vector unsigned int __a,vector unsigned int __b)3951*67e74705SXin Li vec_min(vector unsigned int __a, vector unsigned int __b) {
3952*67e74705SXin Li return __builtin_altivec_vminuw(__a, __b);
3953*67e74705SXin Li }
3954*67e74705SXin Li
3955*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_min(vector bool int __a,vector unsigned int __b)3956*67e74705SXin Li vec_min(vector bool int __a, vector unsigned int __b) {
3957*67e74705SXin Li return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
3958*67e74705SXin Li }
3959*67e74705SXin Li
3960*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_min(vector unsigned int __a,vector bool int __b)3961*67e74705SXin Li vec_min(vector unsigned int __a, vector bool int __b) {
3962*67e74705SXin Li return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
3963*67e74705SXin Li }
3964*67e74705SXin Li
3965*67e74705SXin Li #ifdef __POWER8_VECTOR__
3966*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_min(vector signed long long __a,vector signed long long __b)3967*67e74705SXin Li vec_min(vector signed long long __a, vector signed long long __b) {
3968*67e74705SXin Li return __builtin_altivec_vminsd(__a, __b);
3969*67e74705SXin Li }
3970*67e74705SXin Li
3971*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_min(vector bool long long __a,vector signed long long __b)3972*67e74705SXin Li vec_min(vector bool long long __a, vector signed long long __b) {
3973*67e74705SXin Li return __builtin_altivec_vminsd((vector signed long long)__a, __b);
3974*67e74705SXin Li }
3975*67e74705SXin Li
3976*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_min(vector signed long long __a,vector bool long long __b)3977*67e74705SXin Li vec_min(vector signed long long __a, vector bool long long __b) {
3978*67e74705SXin Li return __builtin_altivec_vminsd(__a, (vector signed long long)__b);
3979*67e74705SXin Li }
3980*67e74705SXin Li
3981*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_min(vector unsigned long long __a,vector unsigned long long __b)3982*67e74705SXin Li vec_min(vector unsigned long long __a, vector unsigned long long __b) {
3983*67e74705SXin Li return __builtin_altivec_vminud(__a, __b);
3984*67e74705SXin Li }
3985*67e74705SXin Li
3986*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_min(vector bool long long __a,vector unsigned long long __b)3987*67e74705SXin Li vec_min(vector bool long long __a, vector unsigned long long __b) {
3988*67e74705SXin Li return __builtin_altivec_vminud((vector unsigned long long)__a, __b);
3989*67e74705SXin Li }
3990*67e74705SXin Li
3991*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_min(vector unsigned long long __a,vector bool long long __b)3992*67e74705SXin Li vec_min(vector unsigned long long __a, vector bool long long __b) {
3993*67e74705SXin Li return __builtin_altivec_vminud(__a, (vector unsigned long long)__b);
3994*67e74705SXin Li }
3995*67e74705SXin Li #endif
3996*67e74705SXin Li
vec_min(vector float __a,vector float __b)3997*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_min(vector float __a,
3998*67e74705SXin Li vector float __b) {
3999*67e74705SXin Li #ifdef __VSX__
4000*67e74705SXin Li return __builtin_vsx_xvminsp(__a, __b);
4001*67e74705SXin Li #else
4002*67e74705SXin Li return __builtin_altivec_vminfp(__a, __b);
4003*67e74705SXin Li #endif
4004*67e74705SXin Li }
4005*67e74705SXin Li
4006*67e74705SXin Li #ifdef __VSX__
vec_min(vector double __a,vector double __b)4007*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_min(vector double __a,
4008*67e74705SXin Li vector double __b) {
4009*67e74705SXin Li return __builtin_vsx_xvmindp(__a, __b);
4010*67e74705SXin Li }
4011*67e74705SXin Li #endif
4012*67e74705SXin Li
4013*67e74705SXin Li /* vec_vminsb */
4014*67e74705SXin Li
4015*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vminsb(vector signed char __a,vector signed char __b)4016*67e74705SXin Li vec_vminsb(vector signed char __a, vector signed char __b) {
4017*67e74705SXin Li return __builtin_altivec_vminsb(__a, __b);
4018*67e74705SXin Li }
4019*67e74705SXin Li
4020*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vminsb(vector bool char __a,vector signed char __b)4021*67e74705SXin Li vec_vminsb(vector bool char __a, vector signed char __b) {
4022*67e74705SXin Li return __builtin_altivec_vminsb((vector signed char)__a, __b);
4023*67e74705SXin Li }
4024*67e74705SXin Li
4025*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vminsb(vector signed char __a,vector bool char __b)4026*67e74705SXin Li vec_vminsb(vector signed char __a, vector bool char __b) {
4027*67e74705SXin Li return __builtin_altivec_vminsb(__a, (vector signed char)__b);
4028*67e74705SXin Li }
4029*67e74705SXin Li
4030*67e74705SXin Li /* vec_vminub */
4031*67e74705SXin Li
4032*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vminub(vector unsigned char __a,vector unsigned char __b)4033*67e74705SXin Li vec_vminub(vector unsigned char __a, vector unsigned char __b) {
4034*67e74705SXin Li return __builtin_altivec_vminub(__a, __b);
4035*67e74705SXin Li }
4036*67e74705SXin Li
4037*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vminub(vector bool char __a,vector unsigned char __b)4038*67e74705SXin Li vec_vminub(vector bool char __a, vector unsigned char __b) {
4039*67e74705SXin Li return __builtin_altivec_vminub((vector unsigned char)__a, __b);
4040*67e74705SXin Li }
4041*67e74705SXin Li
4042*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vminub(vector unsigned char __a,vector bool char __b)4043*67e74705SXin Li vec_vminub(vector unsigned char __a, vector bool char __b) {
4044*67e74705SXin Li return __builtin_altivec_vminub(__a, (vector unsigned char)__b);
4045*67e74705SXin Li }
4046*67e74705SXin Li
4047*67e74705SXin Li /* vec_vminsh */
4048*67e74705SXin Li
vec_vminsh(vector short __a,vector short __b)4049*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
4050*67e74705SXin Li vector short __b) {
4051*67e74705SXin Li return __builtin_altivec_vminsh(__a, __b);
4052*67e74705SXin Li }
4053*67e74705SXin Li
vec_vminsh(vector bool short __a,vector short __b)4054*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector bool short __a,
4055*67e74705SXin Li vector short __b) {
4056*67e74705SXin Li return __builtin_altivec_vminsh((vector short)__a, __b);
4057*67e74705SXin Li }
4058*67e74705SXin Li
vec_vminsh(vector short __a,vector bool short __b)4059*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vminsh(vector short __a,
4060*67e74705SXin Li vector bool short __b) {
4061*67e74705SXin Li return __builtin_altivec_vminsh(__a, (vector short)__b);
4062*67e74705SXin Li }
4063*67e74705SXin Li
4064*67e74705SXin Li /* vec_vminuh */
4065*67e74705SXin Li
4066*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vminuh(vector unsigned short __a,vector unsigned short __b)4067*67e74705SXin Li vec_vminuh(vector unsigned short __a, vector unsigned short __b) {
4068*67e74705SXin Li return __builtin_altivec_vminuh(__a, __b);
4069*67e74705SXin Li }
4070*67e74705SXin Li
4071*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vminuh(vector bool short __a,vector unsigned short __b)4072*67e74705SXin Li vec_vminuh(vector bool short __a, vector unsigned short __b) {
4073*67e74705SXin Li return __builtin_altivec_vminuh((vector unsigned short)__a, __b);
4074*67e74705SXin Li }
4075*67e74705SXin Li
4076*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vminuh(vector unsigned short __a,vector bool short __b)4077*67e74705SXin Li vec_vminuh(vector unsigned short __a, vector bool short __b) {
4078*67e74705SXin Li return __builtin_altivec_vminuh(__a, (vector unsigned short)__b);
4079*67e74705SXin Li }
4080*67e74705SXin Li
4081*67e74705SXin Li /* vec_vminsw */
4082*67e74705SXin Li
vec_vminsw(vector int __a,vector int __b)4083*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
4084*67e74705SXin Li vector int __b) {
4085*67e74705SXin Li return __builtin_altivec_vminsw(__a, __b);
4086*67e74705SXin Li }
4087*67e74705SXin Li
vec_vminsw(vector bool int __a,vector int __b)4088*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector bool int __a,
4089*67e74705SXin Li vector int __b) {
4090*67e74705SXin Li return __builtin_altivec_vminsw((vector int)__a, __b);
4091*67e74705SXin Li }
4092*67e74705SXin Li
vec_vminsw(vector int __a,vector bool int __b)4093*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vminsw(vector int __a,
4094*67e74705SXin Li vector bool int __b) {
4095*67e74705SXin Li return __builtin_altivec_vminsw(__a, (vector int)__b);
4096*67e74705SXin Li }
4097*67e74705SXin Li
4098*67e74705SXin Li /* vec_vminuw */
4099*67e74705SXin Li
4100*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vminuw(vector unsigned int __a,vector unsigned int __b)4101*67e74705SXin Li vec_vminuw(vector unsigned int __a, vector unsigned int __b) {
4102*67e74705SXin Li return __builtin_altivec_vminuw(__a, __b);
4103*67e74705SXin Li }
4104*67e74705SXin Li
4105*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vminuw(vector bool int __a,vector unsigned int __b)4106*67e74705SXin Li vec_vminuw(vector bool int __a, vector unsigned int __b) {
4107*67e74705SXin Li return __builtin_altivec_vminuw((vector unsigned int)__a, __b);
4108*67e74705SXin Li }
4109*67e74705SXin Li
4110*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vminuw(vector unsigned int __a,vector bool int __b)4111*67e74705SXin Li vec_vminuw(vector unsigned int __a, vector bool int __b) {
4112*67e74705SXin Li return __builtin_altivec_vminuw(__a, (vector unsigned int)__b);
4113*67e74705SXin Li }
4114*67e74705SXin Li
4115*67e74705SXin Li /* vec_vminfp */
4116*67e74705SXin Li
4117*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vminfp(vector float __a,vector float __b)4118*67e74705SXin Li vec_vminfp(vector float __a, vector float __b) {
4119*67e74705SXin Li #ifdef __VSX__
4120*67e74705SXin Li return __builtin_vsx_xvminsp(__a, __b);
4121*67e74705SXin Li #else
4122*67e74705SXin Li return __builtin_altivec_vminfp(__a, __b);
4123*67e74705SXin Li #endif
4124*67e74705SXin Li }
4125*67e74705SXin Li
4126*67e74705SXin Li /* vec_mladd */
4127*67e74705SXin Li
4128*67e74705SXin Li #define __builtin_altivec_vmladduhm vec_mladd
4129*67e74705SXin Li
vec_mladd(vector short __a,vector short __b,vector short __c)4130*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_mladd(vector short __a,
4131*67e74705SXin Li vector short __b,
4132*67e74705SXin Li vector short __c) {
4133*67e74705SXin Li return __a * __b + __c;
4134*67e74705SXin Li }
4135*67e74705SXin Li
vec_mladd(vector short __a,vector unsigned short __b,vector unsigned short __c)4136*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_mladd(
4137*67e74705SXin Li vector short __a, vector unsigned short __b, vector unsigned short __c) {
4138*67e74705SXin Li return __a * (vector short)__b + (vector short)__c;
4139*67e74705SXin Li }
4140*67e74705SXin Li
vec_mladd(vector unsigned short __a,vector short __b,vector short __c)4141*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_mladd(vector unsigned short __a,
4142*67e74705SXin Li vector short __b,
4143*67e74705SXin Li vector short __c) {
4144*67e74705SXin Li return (vector short)__a * __b + __c;
4145*67e74705SXin Li }
4146*67e74705SXin Li
4147*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_mladd(vector unsigned short __a,vector unsigned short __b,vector unsigned short __c)4148*67e74705SXin Li vec_mladd(vector unsigned short __a, vector unsigned short __b,
4149*67e74705SXin Li vector unsigned short __c) {
4150*67e74705SXin Li return __a * __b + __c;
4151*67e74705SXin Li }
4152*67e74705SXin Li
4153*67e74705SXin Li /* vec_vmladduhm */
4154*67e74705SXin Li
vec_vmladduhm(vector short __a,vector short __b,vector short __c)4155*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(vector short __a,
4156*67e74705SXin Li vector short __b,
4157*67e74705SXin Li vector short __c) {
4158*67e74705SXin Li return __a * __b + __c;
4159*67e74705SXin Li }
4160*67e74705SXin Li
vec_vmladduhm(vector short __a,vector unsigned short __b,vector unsigned short __c)4161*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vmladduhm(
4162*67e74705SXin Li vector short __a, vector unsigned short __b, vector unsigned short __c) {
4163*67e74705SXin Li return __a * (vector short)__b + (vector short)__c;
4164*67e74705SXin Li }
4165*67e74705SXin Li
4166*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai
vec_vmladduhm(vector unsigned short __a,vector short __b,vector short __c)4167*67e74705SXin Li vec_vmladduhm(vector unsigned short __a, vector short __b, vector short __c) {
4168*67e74705SXin Li return (vector short)__a * __b + __c;
4169*67e74705SXin Li }
4170*67e74705SXin Li
4171*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vmladduhm(vector unsigned short __a,vector unsigned short __b,vector unsigned short __c)4172*67e74705SXin Li vec_vmladduhm(vector unsigned short __a, vector unsigned short __b,
4173*67e74705SXin Li vector unsigned short __c) {
4174*67e74705SXin Li return __a * __b + __c;
4175*67e74705SXin Li }
4176*67e74705SXin Li
4177*67e74705SXin Li /* vec_mradds */
4178*67e74705SXin Li
4179*67e74705SXin Li static __inline__ vector short __attribute__((__always_inline__))
vec_mradds(vector short __a,vector short __b,vector short __c)4180*67e74705SXin Li vec_mradds(vector short __a, vector short __b, vector short __c) {
4181*67e74705SXin Li return __builtin_altivec_vmhraddshs(__a, __b, __c);
4182*67e74705SXin Li }
4183*67e74705SXin Li
4184*67e74705SXin Li /* vec_vmhraddshs */
4185*67e74705SXin Li
4186*67e74705SXin Li static __inline__ vector short __attribute__((__always_inline__))
vec_vmhraddshs(vector short __a,vector short __b,vector short __c)4187*67e74705SXin Li vec_vmhraddshs(vector short __a, vector short __b, vector short __c) {
4188*67e74705SXin Li return __builtin_altivec_vmhraddshs(__a, __b, __c);
4189*67e74705SXin Li }
4190*67e74705SXin Li
4191*67e74705SXin Li /* vec_msum */
4192*67e74705SXin Li
vec_msum(vector signed char __a,vector unsigned char __b,vector int __c)4193*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_msum(vector signed char __a,
4194*67e74705SXin Li vector unsigned char __b,
4195*67e74705SXin Li vector int __c) {
4196*67e74705SXin Li return __builtin_altivec_vmsummbm(__a, __b, __c);
4197*67e74705SXin Li }
4198*67e74705SXin Li
4199*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_msum(vector unsigned char __a,vector unsigned char __b,vector unsigned int __c)4200*67e74705SXin Li vec_msum(vector unsigned char __a, vector unsigned char __b,
4201*67e74705SXin Li vector unsigned int __c) {
4202*67e74705SXin Li return __builtin_altivec_vmsumubm(__a, __b, __c);
4203*67e74705SXin Li }
4204*67e74705SXin Li
vec_msum(vector short __a,vector short __b,vector int __c)4205*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_msum(vector short __a,
4206*67e74705SXin Li vector short __b,
4207*67e74705SXin Li vector int __c) {
4208*67e74705SXin Li return __builtin_altivec_vmsumshm(__a, __b, __c);
4209*67e74705SXin Li }
4210*67e74705SXin Li
4211*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_msum(vector unsigned short __a,vector unsigned short __b,vector unsigned int __c)4212*67e74705SXin Li vec_msum(vector unsigned short __a, vector unsigned short __b,
4213*67e74705SXin Li vector unsigned int __c) {
4214*67e74705SXin Li return __builtin_altivec_vmsumuhm(__a, __b, __c);
4215*67e74705SXin Li }
4216*67e74705SXin Li
4217*67e74705SXin Li /* vec_vmsummbm */
4218*67e74705SXin Li
4219*67e74705SXin Li static __inline__ vector int __attribute__((__always_inline__))
vec_vmsummbm(vector signed char __a,vector unsigned char __b,vector int __c)4220*67e74705SXin Li vec_vmsummbm(vector signed char __a, vector unsigned char __b, vector int __c) {
4221*67e74705SXin Li return __builtin_altivec_vmsummbm(__a, __b, __c);
4222*67e74705SXin Li }
4223*67e74705SXin Li
4224*67e74705SXin Li /* vec_vmsumubm */
4225*67e74705SXin Li
4226*67e74705SXin Li static __inline__ vector unsigned int __attribute__((__always_inline__))
vec_vmsumubm(vector unsigned char __a,vector unsigned char __b,vector unsigned int __c)4227*67e74705SXin Li vec_vmsumubm(vector unsigned char __a, vector unsigned char __b,
4228*67e74705SXin Li vector unsigned int __c) {
4229*67e74705SXin Li return __builtin_altivec_vmsumubm(__a, __b, __c);
4230*67e74705SXin Li }
4231*67e74705SXin Li
4232*67e74705SXin Li /* vec_vmsumshm */
4233*67e74705SXin Li
4234*67e74705SXin Li static __inline__ vector int __attribute__((__always_inline__))
vec_vmsumshm(vector short __a,vector short __b,vector int __c)4235*67e74705SXin Li vec_vmsumshm(vector short __a, vector short __b, vector int __c) {
4236*67e74705SXin Li return __builtin_altivec_vmsumshm(__a, __b, __c);
4237*67e74705SXin Li }
4238*67e74705SXin Li
4239*67e74705SXin Li /* vec_vmsumuhm */
4240*67e74705SXin Li
4241*67e74705SXin Li static __inline__ vector unsigned int __attribute__((__always_inline__))
vec_vmsumuhm(vector unsigned short __a,vector unsigned short __b,vector unsigned int __c)4242*67e74705SXin Li vec_vmsumuhm(vector unsigned short __a, vector unsigned short __b,
4243*67e74705SXin Li vector unsigned int __c) {
4244*67e74705SXin Li return __builtin_altivec_vmsumuhm(__a, __b, __c);
4245*67e74705SXin Li }
4246*67e74705SXin Li
4247*67e74705SXin Li /* vec_msums */
4248*67e74705SXin Li
vec_msums(vector short __a,vector short __b,vector int __c)4249*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_msums(vector short __a,
4250*67e74705SXin Li vector short __b,
4251*67e74705SXin Li vector int __c) {
4252*67e74705SXin Li return __builtin_altivec_vmsumshs(__a, __b, __c);
4253*67e74705SXin Li }
4254*67e74705SXin Li
4255*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_msums(vector unsigned short __a,vector unsigned short __b,vector unsigned int __c)4256*67e74705SXin Li vec_msums(vector unsigned short __a, vector unsigned short __b,
4257*67e74705SXin Li vector unsigned int __c) {
4258*67e74705SXin Li return __builtin_altivec_vmsumuhs(__a, __b, __c);
4259*67e74705SXin Li }
4260*67e74705SXin Li
4261*67e74705SXin Li /* vec_vmsumshs */
4262*67e74705SXin Li
4263*67e74705SXin Li static __inline__ vector int __attribute__((__always_inline__))
vec_vmsumshs(vector short __a,vector short __b,vector int __c)4264*67e74705SXin Li vec_vmsumshs(vector short __a, vector short __b, vector int __c) {
4265*67e74705SXin Li return __builtin_altivec_vmsumshs(__a, __b, __c);
4266*67e74705SXin Li }
4267*67e74705SXin Li
4268*67e74705SXin Li /* vec_vmsumuhs */
4269*67e74705SXin Li
4270*67e74705SXin Li static __inline__ vector unsigned int __attribute__((__always_inline__))
vec_vmsumuhs(vector unsigned short __a,vector unsigned short __b,vector unsigned int __c)4271*67e74705SXin Li vec_vmsumuhs(vector unsigned short __a, vector unsigned short __b,
4272*67e74705SXin Li vector unsigned int __c) {
4273*67e74705SXin Li return __builtin_altivec_vmsumuhs(__a, __b, __c);
4274*67e74705SXin Li }
4275*67e74705SXin Li
4276*67e74705SXin Li /* vec_mtvscr */
4277*67e74705SXin Li
vec_mtvscr(vector signed char __a)4278*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_mtvscr(vector signed char __a) {
4279*67e74705SXin Li __builtin_altivec_mtvscr((vector int)__a);
4280*67e74705SXin Li }
4281*67e74705SXin Li
vec_mtvscr(vector unsigned char __a)4282*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned char __a) {
4283*67e74705SXin Li __builtin_altivec_mtvscr((vector int)__a);
4284*67e74705SXin Li }
4285*67e74705SXin Li
vec_mtvscr(vector bool char __a)4286*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool char __a) {
4287*67e74705SXin Li __builtin_altivec_mtvscr((vector int)__a);
4288*67e74705SXin Li }
4289*67e74705SXin Li
vec_mtvscr(vector short __a)4290*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_mtvscr(vector short __a) {
4291*67e74705SXin Li __builtin_altivec_mtvscr((vector int)__a);
4292*67e74705SXin Li }
4293*67e74705SXin Li
vec_mtvscr(vector unsigned short __a)4294*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned short __a) {
4295*67e74705SXin Li __builtin_altivec_mtvscr((vector int)__a);
4296*67e74705SXin Li }
4297*67e74705SXin Li
vec_mtvscr(vector bool short __a)4298*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool short __a) {
4299*67e74705SXin Li __builtin_altivec_mtvscr((vector int)__a);
4300*67e74705SXin Li }
4301*67e74705SXin Li
vec_mtvscr(vector pixel __a)4302*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_mtvscr(vector pixel __a) {
4303*67e74705SXin Li __builtin_altivec_mtvscr((vector int)__a);
4304*67e74705SXin Li }
4305*67e74705SXin Li
vec_mtvscr(vector int __a)4306*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_mtvscr(vector int __a) {
4307*67e74705SXin Li __builtin_altivec_mtvscr((vector int)__a);
4308*67e74705SXin Li }
4309*67e74705SXin Li
vec_mtvscr(vector unsigned int __a)4310*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_mtvscr(vector unsigned int __a) {
4311*67e74705SXin Li __builtin_altivec_mtvscr((vector int)__a);
4312*67e74705SXin Li }
4313*67e74705SXin Li
vec_mtvscr(vector bool int __a)4314*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_mtvscr(vector bool int __a) {
4315*67e74705SXin Li __builtin_altivec_mtvscr((vector int)__a);
4316*67e74705SXin Li }
4317*67e74705SXin Li
vec_mtvscr(vector float __a)4318*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_mtvscr(vector float __a) {
4319*67e74705SXin Li __builtin_altivec_mtvscr((vector int)__a);
4320*67e74705SXin Li }
4321*67e74705SXin Li
4322*67e74705SXin Li /* vec_mul */
4323*67e74705SXin Li
4324*67e74705SXin Li /* Integer vector multiplication will involve multiplication of the odd/even
4325*67e74705SXin Li elements separately, then truncating the results and moving to the
4326*67e74705SXin Li result vector.
4327*67e74705SXin Li */
4328*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_mul(vector signed char __a,vector signed char __b)4329*67e74705SXin Li vec_mul(vector signed char __a, vector signed char __b) {
4330*67e74705SXin Li return __a * __b;
4331*67e74705SXin Li }
4332*67e74705SXin Li
4333*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_mul(vector unsigned char __a,vector unsigned char __b)4334*67e74705SXin Li vec_mul(vector unsigned char __a, vector unsigned char __b) {
4335*67e74705SXin Li return __a * __b;
4336*67e74705SXin Li }
4337*67e74705SXin Li
4338*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_mul(vector signed short __a,vector signed short __b)4339*67e74705SXin Li vec_mul(vector signed short __a, vector signed short __b) {
4340*67e74705SXin Li return __a * __b;
4341*67e74705SXin Li }
4342*67e74705SXin Li
4343*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_mul(vector unsigned short __a,vector unsigned short __b)4344*67e74705SXin Li vec_mul(vector unsigned short __a, vector unsigned short __b) {
4345*67e74705SXin Li return __a * __b;
4346*67e74705SXin Li }
4347*67e74705SXin Li
4348*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_mul(vector signed int __a,vector signed int __b)4349*67e74705SXin Li vec_mul(vector signed int __a, vector signed int __b) {
4350*67e74705SXin Li return __a * __b;
4351*67e74705SXin Li }
4352*67e74705SXin Li
4353*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_mul(vector unsigned int __a,vector unsigned int __b)4354*67e74705SXin Li vec_mul(vector unsigned int __a, vector unsigned int __b) {
4355*67e74705SXin Li return __a * __b;
4356*67e74705SXin Li }
4357*67e74705SXin Li
4358*67e74705SXin Li #ifdef __VSX__
4359*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_mul(vector signed long long __a,vector signed long long __b)4360*67e74705SXin Li vec_mul(vector signed long long __a, vector signed long long __b) {
4361*67e74705SXin Li return __a * __b;
4362*67e74705SXin Li }
4363*67e74705SXin Li
4364*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_mul(vector unsigned long long __a,vector unsigned long long __b)4365*67e74705SXin Li vec_mul(vector unsigned long long __a, vector unsigned long long __b) {
4366*67e74705SXin Li return __a * __b;
4367*67e74705SXin Li }
4368*67e74705SXin Li #endif
4369*67e74705SXin Li
vec_mul(vector float __a,vector float __b)4370*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_mul(vector float __a,
4371*67e74705SXin Li vector float __b) {
4372*67e74705SXin Li return __a * __b;
4373*67e74705SXin Li }
4374*67e74705SXin Li
4375*67e74705SXin Li #ifdef __VSX__
vec_mul(vector double __a,vector double __b)4376*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_mul(vector double __a,
4377*67e74705SXin Li vector double __b) {
4378*67e74705SXin Li return __a * __b;
4379*67e74705SXin Li }
4380*67e74705SXin Li #endif
4381*67e74705SXin Li
4382*67e74705SXin Li /* The vmulos* and vmules* instructions have a big endian bias, so
4383*67e74705SXin Li we must reverse the meaning of "even" and "odd" for little endian. */
4384*67e74705SXin Li
4385*67e74705SXin Li /* vec_mule */
4386*67e74705SXin Li
vec_mule(vector signed char __a,vector signed char __b)4387*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_mule(vector signed char __a,
4388*67e74705SXin Li vector signed char __b) {
4389*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4390*67e74705SXin Li return __builtin_altivec_vmulosb(__a, __b);
4391*67e74705SXin Li #else
4392*67e74705SXin Li return __builtin_altivec_vmulesb(__a, __b);
4393*67e74705SXin Li #endif
4394*67e74705SXin Li }
4395*67e74705SXin Li
4396*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_mule(vector unsigned char __a,vector unsigned char __b)4397*67e74705SXin Li vec_mule(vector unsigned char __a, vector unsigned char __b) {
4398*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4399*67e74705SXin Li return __builtin_altivec_vmuloub(__a, __b);
4400*67e74705SXin Li #else
4401*67e74705SXin Li return __builtin_altivec_vmuleub(__a, __b);
4402*67e74705SXin Li #endif
4403*67e74705SXin Li }
4404*67e74705SXin Li
vec_mule(vector short __a,vector short __b)4405*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_mule(vector short __a,
4406*67e74705SXin Li vector short __b) {
4407*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4408*67e74705SXin Li return __builtin_altivec_vmulosh(__a, __b);
4409*67e74705SXin Li #else
4410*67e74705SXin Li return __builtin_altivec_vmulesh(__a, __b);
4411*67e74705SXin Li #endif
4412*67e74705SXin Li }
4413*67e74705SXin Li
4414*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_mule(vector unsigned short __a,vector unsigned short __b)4415*67e74705SXin Li vec_mule(vector unsigned short __a, vector unsigned short __b) {
4416*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4417*67e74705SXin Li return __builtin_altivec_vmulouh(__a, __b);
4418*67e74705SXin Li #else
4419*67e74705SXin Li return __builtin_altivec_vmuleuh(__a, __b);
4420*67e74705SXin Li #endif
4421*67e74705SXin Li }
4422*67e74705SXin Li
4423*67e74705SXin Li #ifdef __POWER8_VECTOR__
4424*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_mule(vector signed int __a,vector signed int __b)4425*67e74705SXin Li vec_mule(vector signed int __a, vector signed int __b) {
4426*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4427*67e74705SXin Li return __builtin_altivec_vmulosw(__a, __b);
4428*67e74705SXin Li #else
4429*67e74705SXin Li return __builtin_altivec_vmulesw(__a, __b);
4430*67e74705SXin Li #endif
4431*67e74705SXin Li }
4432*67e74705SXin Li
4433*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_mule(vector unsigned int __a,vector unsigned int __b)4434*67e74705SXin Li vec_mule(vector unsigned int __a, vector unsigned int __b) {
4435*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4436*67e74705SXin Li return __builtin_altivec_vmulouw(__a, __b);
4437*67e74705SXin Li #else
4438*67e74705SXin Li return __builtin_altivec_vmuleuw(__a, __b);
4439*67e74705SXin Li #endif
4440*67e74705SXin Li }
4441*67e74705SXin Li #endif
4442*67e74705SXin Li
4443*67e74705SXin Li /* vec_vmulesb */
4444*67e74705SXin Li
4445*67e74705SXin Li static __inline__ vector short __attribute__((__always_inline__))
vec_vmulesb(vector signed char __a,vector signed char __b)4446*67e74705SXin Li vec_vmulesb(vector signed char __a, vector signed char __b) {
4447*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4448*67e74705SXin Li return __builtin_altivec_vmulosb(__a, __b);
4449*67e74705SXin Li #else
4450*67e74705SXin Li return __builtin_altivec_vmulesb(__a, __b);
4451*67e74705SXin Li #endif
4452*67e74705SXin Li }
4453*67e74705SXin Li
4454*67e74705SXin Li /* vec_vmuleub */
4455*67e74705SXin Li
4456*67e74705SXin Li static __inline__ vector unsigned short __attribute__((__always_inline__))
vec_vmuleub(vector unsigned char __a,vector unsigned char __b)4457*67e74705SXin Li vec_vmuleub(vector unsigned char __a, vector unsigned char __b) {
4458*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4459*67e74705SXin Li return __builtin_altivec_vmuloub(__a, __b);
4460*67e74705SXin Li #else
4461*67e74705SXin Li return __builtin_altivec_vmuleub(__a, __b);
4462*67e74705SXin Li #endif
4463*67e74705SXin Li }
4464*67e74705SXin Li
4465*67e74705SXin Li /* vec_vmulesh */
4466*67e74705SXin Li
4467*67e74705SXin Li static __inline__ vector int __attribute__((__always_inline__))
vec_vmulesh(vector short __a,vector short __b)4468*67e74705SXin Li vec_vmulesh(vector short __a, vector short __b) {
4469*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4470*67e74705SXin Li return __builtin_altivec_vmulosh(__a, __b);
4471*67e74705SXin Li #else
4472*67e74705SXin Li return __builtin_altivec_vmulesh(__a, __b);
4473*67e74705SXin Li #endif
4474*67e74705SXin Li }
4475*67e74705SXin Li
4476*67e74705SXin Li /* vec_vmuleuh */
4477*67e74705SXin Li
4478*67e74705SXin Li static __inline__ vector unsigned int __attribute__((__always_inline__))
vec_vmuleuh(vector unsigned short __a,vector unsigned short __b)4479*67e74705SXin Li vec_vmuleuh(vector unsigned short __a, vector unsigned short __b) {
4480*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4481*67e74705SXin Li return __builtin_altivec_vmulouh(__a, __b);
4482*67e74705SXin Li #else
4483*67e74705SXin Li return __builtin_altivec_vmuleuh(__a, __b);
4484*67e74705SXin Li #endif
4485*67e74705SXin Li }
4486*67e74705SXin Li
4487*67e74705SXin Li /* vec_mulo */
4488*67e74705SXin Li
vec_mulo(vector signed char __a,vector signed char __b)4489*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_mulo(vector signed char __a,
4490*67e74705SXin Li vector signed char __b) {
4491*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4492*67e74705SXin Li return __builtin_altivec_vmulesb(__a, __b);
4493*67e74705SXin Li #else
4494*67e74705SXin Li return __builtin_altivec_vmulosb(__a, __b);
4495*67e74705SXin Li #endif
4496*67e74705SXin Li }
4497*67e74705SXin Li
4498*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_mulo(vector unsigned char __a,vector unsigned char __b)4499*67e74705SXin Li vec_mulo(vector unsigned char __a, vector unsigned char __b) {
4500*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4501*67e74705SXin Li return __builtin_altivec_vmuleub(__a, __b);
4502*67e74705SXin Li #else
4503*67e74705SXin Li return __builtin_altivec_vmuloub(__a, __b);
4504*67e74705SXin Li #endif
4505*67e74705SXin Li }
4506*67e74705SXin Li
vec_mulo(vector short __a,vector short __b)4507*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_mulo(vector short __a,
4508*67e74705SXin Li vector short __b) {
4509*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4510*67e74705SXin Li return __builtin_altivec_vmulesh(__a, __b);
4511*67e74705SXin Li #else
4512*67e74705SXin Li return __builtin_altivec_vmulosh(__a, __b);
4513*67e74705SXin Li #endif
4514*67e74705SXin Li }
4515*67e74705SXin Li
4516*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_mulo(vector unsigned short __a,vector unsigned short __b)4517*67e74705SXin Li vec_mulo(vector unsigned short __a, vector unsigned short __b) {
4518*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4519*67e74705SXin Li return __builtin_altivec_vmuleuh(__a, __b);
4520*67e74705SXin Li #else
4521*67e74705SXin Li return __builtin_altivec_vmulouh(__a, __b);
4522*67e74705SXin Li #endif
4523*67e74705SXin Li }
4524*67e74705SXin Li
4525*67e74705SXin Li #ifdef __POWER8_VECTOR__
4526*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_mulo(vector signed int __a,vector signed int __b)4527*67e74705SXin Li vec_mulo(vector signed int __a, vector signed int __b) {
4528*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4529*67e74705SXin Li return __builtin_altivec_vmulesw(__a, __b);
4530*67e74705SXin Li #else
4531*67e74705SXin Li return __builtin_altivec_vmulosw(__a, __b);
4532*67e74705SXin Li #endif
4533*67e74705SXin Li }
4534*67e74705SXin Li
4535*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_mulo(vector unsigned int __a,vector unsigned int __b)4536*67e74705SXin Li vec_mulo(vector unsigned int __a, vector unsigned int __b) {
4537*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4538*67e74705SXin Li return __builtin_altivec_vmuleuw(__a, __b);
4539*67e74705SXin Li #else
4540*67e74705SXin Li return __builtin_altivec_vmulouw(__a, __b);
4541*67e74705SXin Li #endif
4542*67e74705SXin Li }
4543*67e74705SXin Li #endif
4544*67e74705SXin Li
4545*67e74705SXin Li /* vec_vmulosb */
4546*67e74705SXin Li
4547*67e74705SXin Li static __inline__ vector short __attribute__((__always_inline__))
vec_vmulosb(vector signed char __a,vector signed char __b)4548*67e74705SXin Li vec_vmulosb(vector signed char __a, vector signed char __b) {
4549*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4550*67e74705SXin Li return __builtin_altivec_vmulesb(__a, __b);
4551*67e74705SXin Li #else
4552*67e74705SXin Li return __builtin_altivec_vmulosb(__a, __b);
4553*67e74705SXin Li #endif
4554*67e74705SXin Li }
4555*67e74705SXin Li
4556*67e74705SXin Li /* vec_vmuloub */
4557*67e74705SXin Li
4558*67e74705SXin Li static __inline__ vector unsigned short __attribute__((__always_inline__))
vec_vmuloub(vector unsigned char __a,vector unsigned char __b)4559*67e74705SXin Li vec_vmuloub(vector unsigned char __a, vector unsigned char __b) {
4560*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4561*67e74705SXin Li return __builtin_altivec_vmuleub(__a, __b);
4562*67e74705SXin Li #else
4563*67e74705SXin Li return __builtin_altivec_vmuloub(__a, __b);
4564*67e74705SXin Li #endif
4565*67e74705SXin Li }
4566*67e74705SXin Li
4567*67e74705SXin Li /* vec_vmulosh */
4568*67e74705SXin Li
4569*67e74705SXin Li static __inline__ vector int __attribute__((__always_inline__))
vec_vmulosh(vector short __a,vector short __b)4570*67e74705SXin Li vec_vmulosh(vector short __a, vector short __b) {
4571*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4572*67e74705SXin Li return __builtin_altivec_vmulesh(__a, __b);
4573*67e74705SXin Li #else
4574*67e74705SXin Li return __builtin_altivec_vmulosh(__a, __b);
4575*67e74705SXin Li #endif
4576*67e74705SXin Li }
4577*67e74705SXin Li
4578*67e74705SXin Li /* vec_vmulouh */
4579*67e74705SXin Li
4580*67e74705SXin Li static __inline__ vector unsigned int __attribute__((__always_inline__))
vec_vmulouh(vector unsigned short __a,vector unsigned short __b)4581*67e74705SXin Li vec_vmulouh(vector unsigned short __a, vector unsigned short __b) {
4582*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
4583*67e74705SXin Li return __builtin_altivec_vmuleuh(__a, __b);
4584*67e74705SXin Li #else
4585*67e74705SXin Li return __builtin_altivec_vmulouh(__a, __b);
4586*67e74705SXin Li #endif
4587*67e74705SXin Li }
4588*67e74705SXin Li
4589*67e74705SXin Li /* vec_nand */
4590*67e74705SXin Li
4591*67e74705SXin Li #ifdef __POWER8_VECTOR__
4592*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_nand(vector signed char __a,vector signed char __b)4593*67e74705SXin Li vec_nand(vector signed char __a, vector signed char __b) {
4594*67e74705SXin Li return ~(__a & __b);
4595*67e74705SXin Li }
4596*67e74705SXin Li
4597*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_nand(vector signed char __a,vector bool char __b)4598*67e74705SXin Li vec_nand(vector signed char __a, vector bool char __b) {
4599*67e74705SXin Li return ~(__a & __b);
4600*67e74705SXin Li }
4601*67e74705SXin Li
4602*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_nand(vector bool char __a,vector signed char __b)4603*67e74705SXin Li vec_nand(vector bool char __a, vector signed char __b) {
4604*67e74705SXin Li return ~(__a & __b);
4605*67e74705SXin Li }
4606*67e74705SXin Li
4607*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_nand(vector unsigned char __a,vector unsigned char __b)4608*67e74705SXin Li vec_nand(vector unsigned char __a, vector unsigned char __b) {
4609*67e74705SXin Li return ~(__a & __b);
4610*67e74705SXin Li }
4611*67e74705SXin Li
4612*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_nand(vector unsigned char __a,vector bool char __b)4613*67e74705SXin Li vec_nand(vector unsigned char __a, vector bool char __b) {
4614*67e74705SXin Li return ~(__a & __b);
4615*67e74705SXin Li }
4616*67e74705SXin Li
4617*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_nand(vector bool char __a,vector unsigned char __b)4618*67e74705SXin Li vec_nand(vector bool char __a, vector unsigned char __b) {
4619*67e74705SXin Li return ~(__a & __b);
4620*67e74705SXin Li }
4621*67e74705SXin Li
vec_nand(vector bool char __a,vector bool char __b)4622*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_nand(vector bool char __a,
4623*67e74705SXin Li vector bool char __b) {
4624*67e74705SXin Li return ~(__a & __b);
4625*67e74705SXin Li }
4626*67e74705SXin Li
4627*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_nand(vector signed short __a,vector signed short __b)4628*67e74705SXin Li vec_nand(vector signed short __a, vector signed short __b) {
4629*67e74705SXin Li return ~(__a & __b);
4630*67e74705SXin Li }
4631*67e74705SXin Li
4632*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_nand(vector signed short __a,vector bool short __b)4633*67e74705SXin Li vec_nand(vector signed short __a, vector bool short __b) {
4634*67e74705SXin Li return ~(__a & __b);
4635*67e74705SXin Li }
4636*67e74705SXin Li
4637*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_nand(vector bool short __a,vector signed short __b)4638*67e74705SXin Li vec_nand(vector bool short __a, vector signed short __b) {
4639*67e74705SXin Li return ~(__a & __b);
4640*67e74705SXin Li }
4641*67e74705SXin Li
4642*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_nand(vector unsigned short __a,vector unsigned short __b)4643*67e74705SXin Li vec_nand(vector unsigned short __a, vector unsigned short __b) {
4644*67e74705SXin Li return ~(__a & __b);
4645*67e74705SXin Li }
4646*67e74705SXin Li
4647*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_nand(vector unsigned short __a,vector bool short __b)4648*67e74705SXin Li vec_nand(vector unsigned short __a, vector bool short __b) {
4649*67e74705SXin Li return ~(__a & __b);
4650*67e74705SXin Li }
4651*67e74705SXin Li
4652*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_nand(vector bool short __a,vector bool short __b)4653*67e74705SXin Li vec_nand(vector bool short __a, vector bool short __b) {
4654*67e74705SXin Li return ~(__a & __b);
4655*67e74705SXin Li }
4656*67e74705SXin Li
4657*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_nand(vector signed int __a,vector signed int __b)4658*67e74705SXin Li vec_nand(vector signed int __a, vector signed int __b) {
4659*67e74705SXin Li return ~(__a & __b);
4660*67e74705SXin Li }
4661*67e74705SXin Li
vec_nand(vector signed int __a,vector bool int __b)4662*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai vec_nand(vector signed int __a,
4663*67e74705SXin Li vector bool int __b) {
4664*67e74705SXin Li return ~(__a & __b);
4665*67e74705SXin Li }
4666*67e74705SXin Li
4667*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_nand(vector bool int __a,vector signed int __b)4668*67e74705SXin Li vec_nand(vector bool int __a, vector signed int __b) {
4669*67e74705SXin Li return ~(__a & __b);
4670*67e74705SXin Li }
4671*67e74705SXin Li
4672*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_nand(vector unsigned int __a,vector unsigned int __b)4673*67e74705SXin Li vec_nand(vector unsigned int __a, vector unsigned int __b) {
4674*67e74705SXin Li return ~(__a & __b);
4675*67e74705SXin Li }
4676*67e74705SXin Li
4677*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_nand(vector unsigned int __a,vector bool int __b)4678*67e74705SXin Li vec_nand(vector unsigned int __a, vector bool int __b) {
4679*67e74705SXin Li return ~(__a & __b);
4680*67e74705SXin Li }
4681*67e74705SXin Li
4682*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_nand(vector bool int __a,vector unsigned int __b)4683*67e74705SXin Li vec_nand(vector bool int __a, vector unsigned int __b) {
4684*67e74705SXin Li return ~(__a & __b);
4685*67e74705SXin Li }
4686*67e74705SXin Li
vec_nand(vector bool int __a,vector bool int __b)4687*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_nand(vector bool int __a,
4688*67e74705SXin Li vector bool int __b) {
4689*67e74705SXin Li return ~(__a & __b);
4690*67e74705SXin Li }
4691*67e74705SXin Li
4692*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_nand(vector signed long long __a,vector signed long long __b)4693*67e74705SXin Li vec_nand(vector signed long long __a, vector signed long long __b) {
4694*67e74705SXin Li return ~(__a & __b);
4695*67e74705SXin Li }
4696*67e74705SXin Li
4697*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_nand(vector signed long long __a,vector bool long long __b)4698*67e74705SXin Li vec_nand(vector signed long long __a, vector bool long long __b) {
4699*67e74705SXin Li return ~(__a & __b);
4700*67e74705SXin Li }
4701*67e74705SXin Li
4702*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_nand(vector bool long long __a,vector signed long long __b)4703*67e74705SXin Li vec_nand(vector bool long long __a, vector signed long long __b) {
4704*67e74705SXin Li return ~(__a & __b);
4705*67e74705SXin Li }
4706*67e74705SXin Li
4707*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_nand(vector unsigned long long __a,vector unsigned long long __b)4708*67e74705SXin Li vec_nand(vector unsigned long long __a, vector unsigned long long __b) {
4709*67e74705SXin Li return ~(__a & __b);
4710*67e74705SXin Li }
4711*67e74705SXin Li
4712*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_nand(vector unsigned long long __a,vector bool long long __b)4713*67e74705SXin Li vec_nand(vector unsigned long long __a, vector bool long long __b) {
4714*67e74705SXin Li return ~(__a & __b);
4715*67e74705SXin Li }
4716*67e74705SXin Li
4717*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_nand(vector bool long long __a,vector unsigned long long __b)4718*67e74705SXin Li vec_nand(vector bool long long __a, vector unsigned long long __b) {
4719*67e74705SXin Li return ~(__a & __b);
4720*67e74705SXin Li }
4721*67e74705SXin Li
4722*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_nand(vector bool long long __a,vector bool long long __b)4723*67e74705SXin Li vec_nand(vector bool long long __a, vector bool long long __b) {
4724*67e74705SXin Li return ~(__a & __b);
4725*67e74705SXin Li }
4726*67e74705SXin Li
4727*67e74705SXin Li #endif
4728*67e74705SXin Li
4729*67e74705SXin Li /* vec_nmadd */
4730*67e74705SXin Li
4731*67e74705SXin Li #ifdef __VSX__
vec_nmadd(vector float __a,vector float __b,vector float __c)4732*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_nmadd(vector float __a,
4733*67e74705SXin Li vector float __b,
4734*67e74705SXin Li vector float __c) {
4735*67e74705SXin Li return __builtin_vsx_xvnmaddasp(__a, __b, __c);
4736*67e74705SXin Li }
4737*67e74705SXin Li
vec_nmadd(vector double __a,vector double __b,vector double __c)4738*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_nmadd(vector double __a,
4739*67e74705SXin Li vector double __b,
4740*67e74705SXin Li vector double __c) {
4741*67e74705SXin Li return __builtin_vsx_xvnmaddadp(__a, __b, __c);
4742*67e74705SXin Li }
4743*67e74705SXin Li #endif
4744*67e74705SXin Li
4745*67e74705SXin Li /* vec_nmsub */
4746*67e74705SXin Li
vec_nmsub(vector float __a,vector float __b,vector float __c)4747*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_nmsub(vector float __a,
4748*67e74705SXin Li vector float __b,
4749*67e74705SXin Li vector float __c) {
4750*67e74705SXin Li #ifdef __VSX__
4751*67e74705SXin Li return __builtin_vsx_xvnmsubasp(__a, __b, __c);
4752*67e74705SXin Li #else
4753*67e74705SXin Li return __builtin_altivec_vnmsubfp(__a, __b, __c);
4754*67e74705SXin Li #endif
4755*67e74705SXin Li }
4756*67e74705SXin Li
4757*67e74705SXin Li #ifdef __VSX__
vec_nmsub(vector double __a,vector double __b,vector double __c)4758*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_nmsub(vector double __a,
4759*67e74705SXin Li vector double __b,
4760*67e74705SXin Li vector double __c) {
4761*67e74705SXin Li return __builtin_vsx_xvnmsubadp(__a, __b, __c);
4762*67e74705SXin Li }
4763*67e74705SXin Li #endif
4764*67e74705SXin Li
4765*67e74705SXin Li /* vec_vnmsubfp */
4766*67e74705SXin Li
4767*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vnmsubfp(vector float __a,vector float __b,vector float __c)4768*67e74705SXin Li vec_vnmsubfp(vector float __a, vector float __b, vector float __c) {
4769*67e74705SXin Li return __builtin_altivec_vnmsubfp(__a, __b, __c);
4770*67e74705SXin Li }
4771*67e74705SXin Li
4772*67e74705SXin Li /* vec_nor */
4773*67e74705SXin Li
4774*67e74705SXin Li #define __builtin_altivec_vnor vec_nor
4775*67e74705SXin Li
4776*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_nor(vector signed char __a,vector signed char __b)4777*67e74705SXin Li vec_nor(vector signed char __a, vector signed char __b) {
4778*67e74705SXin Li return ~(__a | __b);
4779*67e74705SXin Li }
4780*67e74705SXin Li
4781*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_nor(vector unsigned char __a,vector unsigned char __b)4782*67e74705SXin Li vec_nor(vector unsigned char __a, vector unsigned char __b) {
4783*67e74705SXin Li return ~(__a | __b);
4784*67e74705SXin Li }
4785*67e74705SXin Li
vec_nor(vector bool char __a,vector bool char __b)4786*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_nor(vector bool char __a,
4787*67e74705SXin Li vector bool char __b) {
4788*67e74705SXin Li return ~(__a | __b);
4789*67e74705SXin Li }
4790*67e74705SXin Li
vec_nor(vector short __a,vector short __b)4791*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_nor(vector short __a,
4792*67e74705SXin Li vector short __b) {
4793*67e74705SXin Li return ~(__a | __b);
4794*67e74705SXin Li }
4795*67e74705SXin Li
4796*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_nor(vector unsigned short __a,vector unsigned short __b)4797*67e74705SXin Li vec_nor(vector unsigned short __a, vector unsigned short __b) {
4798*67e74705SXin Li return ~(__a | __b);
4799*67e74705SXin Li }
4800*67e74705SXin Li
4801*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_nor(vector bool short __a,vector bool short __b)4802*67e74705SXin Li vec_nor(vector bool short __a, vector bool short __b) {
4803*67e74705SXin Li return ~(__a | __b);
4804*67e74705SXin Li }
4805*67e74705SXin Li
vec_nor(vector int __a,vector int __b)4806*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_nor(vector int __a,
4807*67e74705SXin Li vector int __b) {
4808*67e74705SXin Li return ~(__a | __b);
4809*67e74705SXin Li }
4810*67e74705SXin Li
4811*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_nor(vector unsigned int __a,vector unsigned int __b)4812*67e74705SXin Li vec_nor(vector unsigned int __a, vector unsigned int __b) {
4813*67e74705SXin Li return ~(__a | __b);
4814*67e74705SXin Li }
4815*67e74705SXin Li
vec_nor(vector bool int __a,vector bool int __b)4816*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_nor(vector bool int __a,
4817*67e74705SXin Li vector bool int __b) {
4818*67e74705SXin Li return ~(__a | __b);
4819*67e74705SXin Li }
4820*67e74705SXin Li
vec_nor(vector float __a,vector float __b)4821*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_nor(vector float __a,
4822*67e74705SXin Li vector float __b) {
4823*67e74705SXin Li vector unsigned int __res =
4824*67e74705SXin Li ~((vector unsigned int)__a | (vector unsigned int)__b);
4825*67e74705SXin Li return (vector float)__res;
4826*67e74705SXin Li }
4827*67e74705SXin Li
4828*67e74705SXin Li #ifdef __VSX__
vec_nor(vector double __a,vector double __b)4829*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_nor(vector double __a,
4830*67e74705SXin Li vector double __b) {
4831*67e74705SXin Li vector unsigned long long __res =
4832*67e74705SXin Li ~((vector unsigned long long)__a | (vector unsigned long long)__b);
4833*67e74705SXin Li return (vector double)__res;
4834*67e74705SXin Li }
4835*67e74705SXin Li #endif
4836*67e74705SXin Li
4837*67e74705SXin Li /* vec_vnor */
4838*67e74705SXin Li
4839*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vnor(vector signed char __a,vector signed char __b)4840*67e74705SXin Li vec_vnor(vector signed char __a, vector signed char __b) {
4841*67e74705SXin Li return ~(__a | __b);
4842*67e74705SXin Li }
4843*67e74705SXin Li
4844*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vnor(vector unsigned char __a,vector unsigned char __b)4845*67e74705SXin Li vec_vnor(vector unsigned char __a, vector unsigned char __b) {
4846*67e74705SXin Li return ~(__a | __b);
4847*67e74705SXin Li }
4848*67e74705SXin Li
vec_vnor(vector bool char __a,vector bool char __b)4849*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_vnor(vector bool char __a,
4850*67e74705SXin Li vector bool char __b) {
4851*67e74705SXin Li return ~(__a | __b);
4852*67e74705SXin Li }
4853*67e74705SXin Li
vec_vnor(vector short __a,vector short __b)4854*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vnor(vector short __a,
4855*67e74705SXin Li vector short __b) {
4856*67e74705SXin Li return ~(__a | __b);
4857*67e74705SXin Li }
4858*67e74705SXin Li
4859*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vnor(vector unsigned short __a,vector unsigned short __b)4860*67e74705SXin Li vec_vnor(vector unsigned short __a, vector unsigned short __b) {
4861*67e74705SXin Li return ~(__a | __b);
4862*67e74705SXin Li }
4863*67e74705SXin Li
4864*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vnor(vector bool short __a,vector bool short __b)4865*67e74705SXin Li vec_vnor(vector bool short __a, vector bool short __b) {
4866*67e74705SXin Li return ~(__a | __b);
4867*67e74705SXin Li }
4868*67e74705SXin Li
vec_vnor(vector int __a,vector int __b)4869*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vnor(vector int __a,
4870*67e74705SXin Li vector int __b) {
4871*67e74705SXin Li return ~(__a | __b);
4872*67e74705SXin Li }
4873*67e74705SXin Li
4874*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vnor(vector unsigned int __a,vector unsigned int __b)4875*67e74705SXin Li vec_vnor(vector unsigned int __a, vector unsigned int __b) {
4876*67e74705SXin Li return ~(__a | __b);
4877*67e74705SXin Li }
4878*67e74705SXin Li
vec_vnor(vector bool int __a,vector bool int __b)4879*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_vnor(vector bool int __a,
4880*67e74705SXin Li vector bool int __b) {
4881*67e74705SXin Li return ~(__a | __b);
4882*67e74705SXin Li }
4883*67e74705SXin Li
vec_vnor(vector float __a,vector float __b)4884*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vnor(vector float __a,
4885*67e74705SXin Li vector float __b) {
4886*67e74705SXin Li vector unsigned int __res =
4887*67e74705SXin Li ~((vector unsigned int)__a | (vector unsigned int)__b);
4888*67e74705SXin Li return (vector float)__res;
4889*67e74705SXin Li }
4890*67e74705SXin Li
4891*67e74705SXin Li #ifdef __VSX__
4892*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_nor(vector signed long long __a,vector signed long long __b)4893*67e74705SXin Li vec_nor(vector signed long long __a, vector signed long long __b) {
4894*67e74705SXin Li return ~(__a | __b);
4895*67e74705SXin Li }
4896*67e74705SXin Li
4897*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_nor(vector unsigned long long __a,vector unsigned long long __b)4898*67e74705SXin Li vec_nor(vector unsigned long long __a, vector unsigned long long __b) {
4899*67e74705SXin Li return ~(__a | __b);
4900*67e74705SXin Li }
4901*67e74705SXin Li
4902*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_nor(vector bool long long __a,vector bool long long __b)4903*67e74705SXin Li vec_nor(vector bool long long __a, vector bool long long __b) {
4904*67e74705SXin Li return ~(__a | __b);
4905*67e74705SXin Li }
4906*67e74705SXin Li #endif
4907*67e74705SXin Li
4908*67e74705SXin Li /* vec_or */
4909*67e74705SXin Li
4910*67e74705SXin Li #define __builtin_altivec_vor vec_or
4911*67e74705SXin Li
4912*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_or(vector signed char __a,vector signed char __b)4913*67e74705SXin Li vec_or(vector signed char __a, vector signed char __b) {
4914*67e74705SXin Li return __a | __b;
4915*67e74705SXin Li }
4916*67e74705SXin Li
4917*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_or(vector bool char __a,vector signed char __b)4918*67e74705SXin Li vec_or(vector bool char __a, vector signed char __b) {
4919*67e74705SXin Li return (vector signed char)__a | __b;
4920*67e74705SXin Li }
4921*67e74705SXin Li
vec_or(vector signed char __a,vector bool char __b)4922*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai vec_or(vector signed char __a,
4923*67e74705SXin Li vector bool char __b) {
4924*67e74705SXin Li return __a | (vector signed char)__b;
4925*67e74705SXin Li }
4926*67e74705SXin Li
4927*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_or(vector unsigned char __a,vector unsigned char __b)4928*67e74705SXin Li vec_or(vector unsigned char __a, vector unsigned char __b) {
4929*67e74705SXin Li return __a | __b;
4930*67e74705SXin Li }
4931*67e74705SXin Li
4932*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_or(vector bool char __a,vector unsigned char __b)4933*67e74705SXin Li vec_or(vector bool char __a, vector unsigned char __b) {
4934*67e74705SXin Li return (vector unsigned char)__a | __b;
4935*67e74705SXin Li }
4936*67e74705SXin Li
4937*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_or(vector unsigned char __a,vector bool char __b)4938*67e74705SXin Li vec_or(vector unsigned char __a, vector bool char __b) {
4939*67e74705SXin Li return __a | (vector unsigned char)__b;
4940*67e74705SXin Li }
4941*67e74705SXin Li
vec_or(vector bool char __a,vector bool char __b)4942*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_or(vector bool char __a,
4943*67e74705SXin Li vector bool char __b) {
4944*67e74705SXin Li return __a | __b;
4945*67e74705SXin Li }
4946*67e74705SXin Li
vec_or(vector short __a,vector short __b)4947*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
4948*67e74705SXin Li vector short __b) {
4949*67e74705SXin Li return __a | __b;
4950*67e74705SXin Li }
4951*67e74705SXin Li
vec_or(vector bool short __a,vector short __b)4952*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_or(vector bool short __a,
4953*67e74705SXin Li vector short __b) {
4954*67e74705SXin Li return (vector short)__a | __b;
4955*67e74705SXin Li }
4956*67e74705SXin Li
vec_or(vector short __a,vector bool short __b)4957*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_or(vector short __a,
4958*67e74705SXin Li vector bool short __b) {
4959*67e74705SXin Li return __a | (vector short)__b;
4960*67e74705SXin Li }
4961*67e74705SXin Li
4962*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_or(vector unsigned short __a,vector unsigned short __b)4963*67e74705SXin Li vec_or(vector unsigned short __a, vector unsigned short __b) {
4964*67e74705SXin Li return __a | __b;
4965*67e74705SXin Li }
4966*67e74705SXin Li
4967*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_or(vector bool short __a,vector unsigned short __b)4968*67e74705SXin Li vec_or(vector bool short __a, vector unsigned short __b) {
4969*67e74705SXin Li return (vector unsigned short)__a | __b;
4970*67e74705SXin Li }
4971*67e74705SXin Li
4972*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_or(vector unsigned short __a,vector bool short __b)4973*67e74705SXin Li vec_or(vector unsigned short __a, vector bool short __b) {
4974*67e74705SXin Li return __a | (vector unsigned short)__b;
4975*67e74705SXin Li }
4976*67e74705SXin Li
vec_or(vector bool short __a,vector bool short __b)4977*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai vec_or(vector bool short __a,
4978*67e74705SXin Li vector bool short __b) {
4979*67e74705SXin Li return __a | __b;
4980*67e74705SXin Li }
4981*67e74705SXin Li
vec_or(vector int __a,vector int __b)4982*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
4983*67e74705SXin Li vector int __b) {
4984*67e74705SXin Li return __a | __b;
4985*67e74705SXin Li }
4986*67e74705SXin Li
vec_or(vector bool int __a,vector int __b)4987*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_or(vector bool int __a,
4988*67e74705SXin Li vector int __b) {
4989*67e74705SXin Li return (vector int)__a | __b;
4990*67e74705SXin Li }
4991*67e74705SXin Li
vec_or(vector int __a,vector bool int __b)4992*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_or(vector int __a,
4993*67e74705SXin Li vector bool int __b) {
4994*67e74705SXin Li return __a | (vector int)__b;
4995*67e74705SXin Li }
4996*67e74705SXin Li
4997*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_or(vector unsigned int __a,vector unsigned int __b)4998*67e74705SXin Li vec_or(vector unsigned int __a, vector unsigned int __b) {
4999*67e74705SXin Li return __a | __b;
5000*67e74705SXin Li }
5001*67e74705SXin Li
5002*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_or(vector bool int __a,vector unsigned int __b)5003*67e74705SXin Li vec_or(vector bool int __a, vector unsigned int __b) {
5004*67e74705SXin Li return (vector unsigned int)__a | __b;
5005*67e74705SXin Li }
5006*67e74705SXin Li
5007*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_or(vector unsigned int __a,vector bool int __b)5008*67e74705SXin Li vec_or(vector unsigned int __a, vector bool int __b) {
5009*67e74705SXin Li return __a | (vector unsigned int)__b;
5010*67e74705SXin Li }
5011*67e74705SXin Li
vec_or(vector bool int __a,vector bool int __b)5012*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_or(vector bool int __a,
5013*67e74705SXin Li vector bool int __b) {
5014*67e74705SXin Li return __a | __b;
5015*67e74705SXin Li }
5016*67e74705SXin Li
vec_or(vector float __a,vector float __b)5017*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
5018*67e74705SXin Li vector float __b) {
5019*67e74705SXin Li vector unsigned int __res =
5020*67e74705SXin Li (vector unsigned int)__a | (vector unsigned int)__b;
5021*67e74705SXin Li return (vector float)__res;
5022*67e74705SXin Li }
5023*67e74705SXin Li
vec_or(vector bool int __a,vector float __b)5024*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_or(vector bool int __a,
5025*67e74705SXin Li vector float __b) {
5026*67e74705SXin Li vector unsigned int __res =
5027*67e74705SXin Li (vector unsigned int)__a | (vector unsigned int)__b;
5028*67e74705SXin Li return (vector float)__res;
5029*67e74705SXin Li }
5030*67e74705SXin Li
vec_or(vector float __a,vector bool int __b)5031*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_or(vector float __a,
5032*67e74705SXin Li vector bool int __b) {
5033*67e74705SXin Li vector unsigned int __res =
5034*67e74705SXin Li (vector unsigned int)__a | (vector unsigned int)__b;
5035*67e74705SXin Li return (vector float)__res;
5036*67e74705SXin Li }
5037*67e74705SXin Li
5038*67e74705SXin Li #ifdef __VSX__
vec_or(vector bool long long __a,vector double __b)5039*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_or(vector bool long long __a,
5040*67e74705SXin Li vector double __b) {
5041*67e74705SXin Li return (vector unsigned long long)__a | (vector unsigned long long)__b;
5042*67e74705SXin Li }
5043*67e74705SXin Li
vec_or(vector double __a,vector bool long long __b)5044*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,
5045*67e74705SXin Li vector bool long long __b) {
5046*67e74705SXin Li return (vector unsigned long long)__a | (vector unsigned long long)__b;
5047*67e74705SXin Li }
5048*67e74705SXin Li
vec_or(vector double __a,vector double __b)5049*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_or(vector double __a,
5050*67e74705SXin Li vector double __b) {
5051*67e74705SXin Li vector unsigned long long __res =
5052*67e74705SXin Li (vector unsigned long long)__a | (vector unsigned long long)__b;
5053*67e74705SXin Li return (vector double)__res;
5054*67e74705SXin Li }
5055*67e74705SXin Li
5056*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_or(vector signed long long __a,vector signed long long __b)5057*67e74705SXin Li vec_or(vector signed long long __a, vector signed long long __b) {
5058*67e74705SXin Li return __a | __b;
5059*67e74705SXin Li }
5060*67e74705SXin Li
5061*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_or(vector bool long long __a,vector signed long long __b)5062*67e74705SXin Li vec_or(vector bool long long __a, vector signed long long __b) {
5063*67e74705SXin Li return (vector signed long long)__a | __b;
5064*67e74705SXin Li }
5065*67e74705SXin Li
5066*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_or(vector signed long long __a,vector bool long long __b)5067*67e74705SXin Li vec_or(vector signed long long __a, vector bool long long __b) {
5068*67e74705SXin Li return __a | (vector signed long long)__b;
5069*67e74705SXin Li }
5070*67e74705SXin Li
5071*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_or(vector unsigned long long __a,vector unsigned long long __b)5072*67e74705SXin Li vec_or(vector unsigned long long __a, vector unsigned long long __b) {
5073*67e74705SXin Li return __a | __b;
5074*67e74705SXin Li }
5075*67e74705SXin Li
5076*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_or(vector bool long long __a,vector unsigned long long __b)5077*67e74705SXin Li vec_or(vector bool long long __a, vector unsigned long long __b) {
5078*67e74705SXin Li return (vector unsigned long long)__a | __b;
5079*67e74705SXin Li }
5080*67e74705SXin Li
5081*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_or(vector unsigned long long __a,vector bool long long __b)5082*67e74705SXin Li vec_or(vector unsigned long long __a, vector bool long long __b) {
5083*67e74705SXin Li return __a | (vector unsigned long long)__b;
5084*67e74705SXin Li }
5085*67e74705SXin Li
5086*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_or(vector bool long long __a,vector bool long long __b)5087*67e74705SXin Li vec_or(vector bool long long __a, vector bool long long __b) {
5088*67e74705SXin Li return __a | __b;
5089*67e74705SXin Li }
5090*67e74705SXin Li #endif
5091*67e74705SXin Li
5092*67e74705SXin Li #ifdef __POWER8_VECTOR__
5093*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_orc(vector signed char __a,vector signed char __b)5094*67e74705SXin Li vec_orc(vector signed char __a, vector signed char __b) {
5095*67e74705SXin Li return __a | ~__b;
5096*67e74705SXin Li }
5097*67e74705SXin Li
5098*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_orc(vector signed char __a,vector bool char __b)5099*67e74705SXin Li vec_orc(vector signed char __a, vector bool char __b) {
5100*67e74705SXin Li return __a | ~__b;
5101*67e74705SXin Li }
5102*67e74705SXin Li
5103*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_orc(vector bool char __a,vector signed char __b)5104*67e74705SXin Li vec_orc(vector bool char __a, vector signed char __b) {
5105*67e74705SXin Li return __a | ~__b;
5106*67e74705SXin Li }
5107*67e74705SXin Li
5108*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_orc(vector unsigned char __a,vector unsigned char __b)5109*67e74705SXin Li vec_orc(vector unsigned char __a, vector unsigned char __b) {
5110*67e74705SXin Li return __a | ~__b;
5111*67e74705SXin Li }
5112*67e74705SXin Li
5113*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_orc(vector unsigned char __a,vector bool char __b)5114*67e74705SXin Li vec_orc(vector unsigned char __a, vector bool char __b) {
5115*67e74705SXin Li return __a | ~__b;
5116*67e74705SXin Li }
5117*67e74705SXin Li
5118*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_orc(vector bool char __a,vector unsigned char __b)5119*67e74705SXin Li vec_orc(vector bool char __a, vector unsigned char __b) {
5120*67e74705SXin Li return __a | ~__b;
5121*67e74705SXin Li }
5122*67e74705SXin Li
vec_orc(vector bool char __a,vector bool char __b)5123*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_orc(vector bool char __a,
5124*67e74705SXin Li vector bool char __b) {
5125*67e74705SXin Li return __a | ~__b;
5126*67e74705SXin Li }
5127*67e74705SXin Li
5128*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_orc(vector signed short __a,vector signed short __b)5129*67e74705SXin Li vec_orc(vector signed short __a, vector signed short __b) {
5130*67e74705SXin Li return __a | ~__b;
5131*67e74705SXin Li }
5132*67e74705SXin Li
5133*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_orc(vector signed short __a,vector bool short __b)5134*67e74705SXin Li vec_orc(vector signed short __a, vector bool short __b) {
5135*67e74705SXin Li return __a | ~__b;
5136*67e74705SXin Li }
5137*67e74705SXin Li
5138*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_orc(vector bool short __a,vector signed short __b)5139*67e74705SXin Li vec_orc(vector bool short __a, vector signed short __b) {
5140*67e74705SXin Li return __a | ~__b;
5141*67e74705SXin Li }
5142*67e74705SXin Li
5143*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_orc(vector unsigned short __a,vector unsigned short __b)5144*67e74705SXin Li vec_orc(vector unsigned short __a, vector unsigned short __b) {
5145*67e74705SXin Li return __a | ~__b;
5146*67e74705SXin Li }
5147*67e74705SXin Li
5148*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_orc(vector unsigned short __a,vector bool short __b)5149*67e74705SXin Li vec_orc(vector unsigned short __a, vector bool short __b) {
5150*67e74705SXin Li return __a | ~__b;
5151*67e74705SXin Li }
5152*67e74705SXin Li
5153*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_orc(vector bool short __a,vector unsigned short __b)5154*67e74705SXin Li vec_orc(vector bool short __a, vector unsigned short __b) {
5155*67e74705SXin Li return __a | ~__b;
5156*67e74705SXin Li }
5157*67e74705SXin Li
5158*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_orc(vector bool short __a,vector bool short __b)5159*67e74705SXin Li vec_orc(vector bool short __a, vector bool short __b) {
5160*67e74705SXin Li return __a | ~__b;
5161*67e74705SXin Li }
5162*67e74705SXin Li
5163*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_orc(vector signed int __a,vector signed int __b)5164*67e74705SXin Li vec_orc(vector signed int __a, vector signed int __b) {
5165*67e74705SXin Li return __a | ~__b;
5166*67e74705SXin Li }
5167*67e74705SXin Li
vec_orc(vector signed int __a,vector bool int __b)5168*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai vec_orc(vector signed int __a,
5169*67e74705SXin Li vector bool int __b) {
5170*67e74705SXin Li return __a | ~__b;
5171*67e74705SXin Li }
5172*67e74705SXin Li
5173*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_orc(vector bool int __a,vector signed int __b)5174*67e74705SXin Li vec_orc(vector bool int __a, vector signed int __b) {
5175*67e74705SXin Li return __a | ~__b;
5176*67e74705SXin Li }
5177*67e74705SXin Li
5178*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_orc(vector unsigned int __a,vector unsigned int __b)5179*67e74705SXin Li vec_orc(vector unsigned int __a, vector unsigned int __b) {
5180*67e74705SXin Li return __a | ~__b;
5181*67e74705SXin Li }
5182*67e74705SXin Li
5183*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_orc(vector unsigned int __a,vector bool int __b)5184*67e74705SXin Li vec_orc(vector unsigned int __a, vector bool int __b) {
5185*67e74705SXin Li return __a | ~__b;
5186*67e74705SXin Li }
5187*67e74705SXin Li
5188*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_orc(vector bool int __a,vector unsigned int __b)5189*67e74705SXin Li vec_orc(vector bool int __a, vector unsigned int __b) {
5190*67e74705SXin Li return __a | ~__b;
5191*67e74705SXin Li }
5192*67e74705SXin Li
vec_orc(vector bool int __a,vector bool int __b)5193*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_orc(vector bool int __a,
5194*67e74705SXin Li vector bool int __b) {
5195*67e74705SXin Li return __a | ~__b;
5196*67e74705SXin Li }
5197*67e74705SXin Li
5198*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_orc(vector signed long long __a,vector signed long long __b)5199*67e74705SXin Li vec_orc(vector signed long long __a, vector signed long long __b) {
5200*67e74705SXin Li return __a | ~__b;
5201*67e74705SXin Li }
5202*67e74705SXin Li
5203*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_orc(vector signed long long __a,vector bool long long __b)5204*67e74705SXin Li vec_orc(vector signed long long __a, vector bool long long __b) {
5205*67e74705SXin Li return __a | ~__b;
5206*67e74705SXin Li }
5207*67e74705SXin Li
5208*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_orc(vector bool long long __a,vector signed long long __b)5209*67e74705SXin Li vec_orc(vector bool long long __a, vector signed long long __b) {
5210*67e74705SXin Li return __a | ~__b;
5211*67e74705SXin Li }
5212*67e74705SXin Li
5213*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_orc(vector unsigned long long __a,vector unsigned long long __b)5214*67e74705SXin Li vec_orc(vector unsigned long long __a, vector unsigned long long __b) {
5215*67e74705SXin Li return __a | ~__b;
5216*67e74705SXin Li }
5217*67e74705SXin Li
5218*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_orc(vector unsigned long long __a,vector bool long long __b)5219*67e74705SXin Li vec_orc(vector unsigned long long __a, vector bool long long __b) {
5220*67e74705SXin Li return __a | ~__b;
5221*67e74705SXin Li }
5222*67e74705SXin Li
5223*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_orc(vector bool long long __a,vector unsigned long long __b)5224*67e74705SXin Li vec_orc(vector bool long long __a, vector unsigned long long __b) {
5225*67e74705SXin Li return __a | ~__b;
5226*67e74705SXin Li }
5227*67e74705SXin Li
5228*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_orc(vector bool long long __a,vector bool long long __b)5229*67e74705SXin Li vec_orc(vector bool long long __a, vector bool long long __b) {
5230*67e74705SXin Li return __a | ~__b;
5231*67e74705SXin Li }
5232*67e74705SXin Li #endif
5233*67e74705SXin Li
5234*67e74705SXin Li /* vec_vor */
5235*67e74705SXin Li
5236*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vor(vector signed char __a,vector signed char __b)5237*67e74705SXin Li vec_vor(vector signed char __a, vector signed char __b) {
5238*67e74705SXin Li return __a | __b;
5239*67e74705SXin Li }
5240*67e74705SXin Li
5241*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vor(vector bool char __a,vector signed char __b)5242*67e74705SXin Li vec_vor(vector bool char __a, vector signed char __b) {
5243*67e74705SXin Li return (vector signed char)__a | __b;
5244*67e74705SXin Li }
5245*67e74705SXin Li
5246*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vor(vector signed char __a,vector bool char __b)5247*67e74705SXin Li vec_vor(vector signed char __a, vector bool char __b) {
5248*67e74705SXin Li return __a | (vector signed char)__b;
5249*67e74705SXin Li }
5250*67e74705SXin Li
5251*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vor(vector unsigned char __a,vector unsigned char __b)5252*67e74705SXin Li vec_vor(vector unsigned char __a, vector unsigned char __b) {
5253*67e74705SXin Li return __a | __b;
5254*67e74705SXin Li }
5255*67e74705SXin Li
5256*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vor(vector bool char __a,vector unsigned char __b)5257*67e74705SXin Li vec_vor(vector bool char __a, vector unsigned char __b) {
5258*67e74705SXin Li return (vector unsigned char)__a | __b;
5259*67e74705SXin Li }
5260*67e74705SXin Li
5261*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vor(vector unsigned char __a,vector bool char __b)5262*67e74705SXin Li vec_vor(vector unsigned char __a, vector bool char __b) {
5263*67e74705SXin Li return __a | (vector unsigned char)__b;
5264*67e74705SXin Li }
5265*67e74705SXin Li
vec_vor(vector bool char __a,vector bool char __b)5266*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_vor(vector bool char __a,
5267*67e74705SXin Li vector bool char __b) {
5268*67e74705SXin Li return __a | __b;
5269*67e74705SXin Li }
5270*67e74705SXin Li
vec_vor(vector short __a,vector short __b)5271*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
5272*67e74705SXin Li vector short __b) {
5273*67e74705SXin Li return __a | __b;
5274*67e74705SXin Li }
5275*67e74705SXin Li
vec_vor(vector bool short __a,vector short __b)5276*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vor(vector bool short __a,
5277*67e74705SXin Li vector short __b) {
5278*67e74705SXin Li return (vector short)__a | __b;
5279*67e74705SXin Li }
5280*67e74705SXin Li
vec_vor(vector short __a,vector bool short __b)5281*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vor(vector short __a,
5282*67e74705SXin Li vector bool short __b) {
5283*67e74705SXin Li return __a | (vector short)__b;
5284*67e74705SXin Li }
5285*67e74705SXin Li
5286*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vor(vector unsigned short __a,vector unsigned short __b)5287*67e74705SXin Li vec_vor(vector unsigned short __a, vector unsigned short __b) {
5288*67e74705SXin Li return __a | __b;
5289*67e74705SXin Li }
5290*67e74705SXin Li
5291*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vor(vector bool short __a,vector unsigned short __b)5292*67e74705SXin Li vec_vor(vector bool short __a, vector unsigned short __b) {
5293*67e74705SXin Li return (vector unsigned short)__a | __b;
5294*67e74705SXin Li }
5295*67e74705SXin Li
5296*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vor(vector unsigned short __a,vector bool short __b)5297*67e74705SXin Li vec_vor(vector unsigned short __a, vector bool short __b) {
5298*67e74705SXin Li return __a | (vector unsigned short)__b;
5299*67e74705SXin Li }
5300*67e74705SXin Li
5301*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vor(vector bool short __a,vector bool short __b)5302*67e74705SXin Li vec_vor(vector bool short __a, vector bool short __b) {
5303*67e74705SXin Li return __a | __b;
5304*67e74705SXin Li }
5305*67e74705SXin Li
vec_vor(vector int __a,vector int __b)5306*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
5307*67e74705SXin Li vector int __b) {
5308*67e74705SXin Li return __a | __b;
5309*67e74705SXin Li }
5310*67e74705SXin Li
vec_vor(vector bool int __a,vector int __b)5311*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vor(vector bool int __a,
5312*67e74705SXin Li vector int __b) {
5313*67e74705SXin Li return (vector int)__a | __b;
5314*67e74705SXin Li }
5315*67e74705SXin Li
vec_vor(vector int __a,vector bool int __b)5316*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vor(vector int __a,
5317*67e74705SXin Li vector bool int __b) {
5318*67e74705SXin Li return __a | (vector int)__b;
5319*67e74705SXin Li }
5320*67e74705SXin Li
5321*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vor(vector unsigned int __a,vector unsigned int __b)5322*67e74705SXin Li vec_vor(vector unsigned int __a, vector unsigned int __b) {
5323*67e74705SXin Li return __a | __b;
5324*67e74705SXin Li }
5325*67e74705SXin Li
5326*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vor(vector bool int __a,vector unsigned int __b)5327*67e74705SXin Li vec_vor(vector bool int __a, vector unsigned int __b) {
5328*67e74705SXin Li return (vector unsigned int)__a | __b;
5329*67e74705SXin Li }
5330*67e74705SXin Li
5331*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vor(vector unsigned int __a,vector bool int __b)5332*67e74705SXin Li vec_vor(vector unsigned int __a, vector bool int __b) {
5333*67e74705SXin Li return __a | (vector unsigned int)__b;
5334*67e74705SXin Li }
5335*67e74705SXin Li
vec_vor(vector bool int __a,vector bool int __b)5336*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_vor(vector bool int __a,
5337*67e74705SXin Li vector bool int __b) {
5338*67e74705SXin Li return __a | __b;
5339*67e74705SXin Li }
5340*67e74705SXin Li
vec_vor(vector float __a,vector float __b)5341*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
5342*67e74705SXin Li vector float __b) {
5343*67e74705SXin Li vector unsigned int __res =
5344*67e74705SXin Li (vector unsigned int)__a | (vector unsigned int)__b;
5345*67e74705SXin Li return (vector float)__res;
5346*67e74705SXin Li }
5347*67e74705SXin Li
vec_vor(vector bool int __a,vector float __b)5348*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vor(vector bool int __a,
5349*67e74705SXin Li vector float __b) {
5350*67e74705SXin Li vector unsigned int __res =
5351*67e74705SXin Li (vector unsigned int)__a | (vector unsigned int)__b;
5352*67e74705SXin Li return (vector float)__res;
5353*67e74705SXin Li }
5354*67e74705SXin Li
vec_vor(vector float __a,vector bool int __b)5355*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vor(vector float __a,
5356*67e74705SXin Li vector bool int __b) {
5357*67e74705SXin Li vector unsigned int __res =
5358*67e74705SXin Li (vector unsigned int)__a | (vector unsigned int)__b;
5359*67e74705SXin Li return (vector float)__res;
5360*67e74705SXin Li }
5361*67e74705SXin Li
5362*67e74705SXin Li #ifdef __VSX__
5363*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_vor(vector signed long long __a,vector signed long long __b)5364*67e74705SXin Li vec_vor(vector signed long long __a, vector signed long long __b) {
5365*67e74705SXin Li return __a | __b;
5366*67e74705SXin Li }
5367*67e74705SXin Li
5368*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_vor(vector bool long long __a,vector signed long long __b)5369*67e74705SXin Li vec_vor(vector bool long long __a, vector signed long long __b) {
5370*67e74705SXin Li return (vector signed long long)__a | __b;
5371*67e74705SXin Li }
5372*67e74705SXin Li
5373*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_vor(vector signed long long __a,vector bool long long __b)5374*67e74705SXin Li vec_vor(vector signed long long __a, vector bool long long __b) {
5375*67e74705SXin Li return __a | (vector signed long long)__b;
5376*67e74705SXin Li }
5377*67e74705SXin Li
5378*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vor(vector unsigned long long __a,vector unsigned long long __b)5379*67e74705SXin Li vec_vor(vector unsigned long long __a, vector unsigned long long __b) {
5380*67e74705SXin Li return __a | __b;
5381*67e74705SXin Li }
5382*67e74705SXin Li
5383*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vor(vector bool long long __a,vector unsigned long long __b)5384*67e74705SXin Li vec_vor(vector bool long long __a, vector unsigned long long __b) {
5385*67e74705SXin Li return (vector unsigned long long)__a | __b;
5386*67e74705SXin Li }
5387*67e74705SXin Li
5388*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vor(vector unsigned long long __a,vector bool long long __b)5389*67e74705SXin Li vec_vor(vector unsigned long long __a, vector bool long long __b) {
5390*67e74705SXin Li return __a | (vector unsigned long long)__b;
5391*67e74705SXin Li }
5392*67e74705SXin Li
5393*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_vor(vector bool long long __a,vector bool long long __b)5394*67e74705SXin Li vec_vor(vector bool long long __a, vector bool long long __b) {
5395*67e74705SXin Li return __a | __b;
5396*67e74705SXin Li }
5397*67e74705SXin Li #endif
5398*67e74705SXin Li
5399*67e74705SXin Li /* vec_pack */
5400*67e74705SXin Li
5401*67e74705SXin Li /* The various vector pack instructions have a big-endian bias, so for
5402*67e74705SXin Li little endian we must handle reversed element numbering. */
5403*67e74705SXin Li
5404*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_pack(vector signed short __a,vector signed short __b)5405*67e74705SXin Li vec_pack(vector signed short __a, vector signed short __b) {
5406*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5407*67e74705SXin Li return (vector signed char)vec_perm(
5408*67e74705SXin Li __a, __b,
5409*67e74705SXin Li (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
5410*67e74705SXin Li 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
5411*67e74705SXin Li #else
5412*67e74705SXin Li return (vector signed char)vec_perm(
5413*67e74705SXin Li __a, __b,
5414*67e74705SXin Li (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
5415*67e74705SXin Li 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
5416*67e74705SXin Li #endif
5417*67e74705SXin Li }
5418*67e74705SXin Li
5419*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_pack(vector unsigned short __a,vector unsigned short __b)5420*67e74705SXin Li vec_pack(vector unsigned short __a, vector unsigned short __b) {
5421*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5422*67e74705SXin Li return (vector unsigned char)vec_perm(
5423*67e74705SXin Li __a, __b,
5424*67e74705SXin Li (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
5425*67e74705SXin Li 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
5426*67e74705SXin Li #else
5427*67e74705SXin Li return (vector unsigned char)vec_perm(
5428*67e74705SXin Li __a, __b,
5429*67e74705SXin Li (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
5430*67e74705SXin Li 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
5431*67e74705SXin Li #endif
5432*67e74705SXin Li }
5433*67e74705SXin Li
5434*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_pack(vector bool short __a,vector bool short __b)5435*67e74705SXin Li vec_pack(vector bool short __a, vector bool short __b) {
5436*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5437*67e74705SXin Li return (vector bool char)vec_perm(
5438*67e74705SXin Li __a, __b,
5439*67e74705SXin Li (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
5440*67e74705SXin Li 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
5441*67e74705SXin Li #else
5442*67e74705SXin Li return (vector bool char)vec_perm(
5443*67e74705SXin Li __a, __b,
5444*67e74705SXin Li (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
5445*67e74705SXin Li 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
5446*67e74705SXin Li #endif
5447*67e74705SXin Li }
5448*67e74705SXin Li
vec_pack(vector int __a,vector int __b)5449*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_pack(vector int __a,
5450*67e74705SXin Li vector int __b) {
5451*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5452*67e74705SXin Li return (vector short)vec_perm(
5453*67e74705SXin Li __a, __b,
5454*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
5455*67e74705SXin Li 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
5456*67e74705SXin Li #else
5457*67e74705SXin Li return (vector short)vec_perm(
5458*67e74705SXin Li __a, __b,
5459*67e74705SXin Li (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
5460*67e74705SXin Li 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
5461*67e74705SXin Li #endif
5462*67e74705SXin Li }
5463*67e74705SXin Li
5464*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_pack(vector unsigned int __a,vector unsigned int __b)5465*67e74705SXin Li vec_pack(vector unsigned int __a, vector unsigned int __b) {
5466*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5467*67e74705SXin Li return (vector unsigned short)vec_perm(
5468*67e74705SXin Li __a, __b,
5469*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
5470*67e74705SXin Li 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
5471*67e74705SXin Li #else
5472*67e74705SXin Li return (vector unsigned short)vec_perm(
5473*67e74705SXin Li __a, __b,
5474*67e74705SXin Li (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
5475*67e74705SXin Li 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
5476*67e74705SXin Li #endif
5477*67e74705SXin Li }
5478*67e74705SXin Li
vec_pack(vector bool int __a,vector bool int __b)5479*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai vec_pack(vector bool int __a,
5480*67e74705SXin Li vector bool int __b) {
5481*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5482*67e74705SXin Li return (vector bool short)vec_perm(
5483*67e74705SXin Li __a, __b,
5484*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
5485*67e74705SXin Li 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
5486*67e74705SXin Li #else
5487*67e74705SXin Li return (vector bool short)vec_perm(
5488*67e74705SXin Li __a, __b,
5489*67e74705SXin Li (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
5490*67e74705SXin Li 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
5491*67e74705SXin Li #endif
5492*67e74705SXin Li }
5493*67e74705SXin Li
5494*67e74705SXin Li #ifdef __VSX__
5495*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_pack(vector signed long long __a,vector signed long long __b)5496*67e74705SXin Li vec_pack(vector signed long long __a, vector signed long long __b) {
5497*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5498*67e74705SXin Li return (vector signed int)vec_perm(
5499*67e74705SXin Li __a, __b,
5500*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
5501*67e74705SXin Li 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
5502*67e74705SXin Li #else
5503*67e74705SXin Li return (vector signed int)vec_perm(
5504*67e74705SXin Li __a, __b,
5505*67e74705SXin Li (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
5506*67e74705SXin Li 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
5507*67e74705SXin Li #endif
5508*67e74705SXin Li }
5509*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_pack(vector unsigned long long __a,vector unsigned long long __b)5510*67e74705SXin Li vec_pack(vector unsigned long long __a, vector unsigned long long __b) {
5511*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5512*67e74705SXin Li return (vector unsigned int)vec_perm(
5513*67e74705SXin Li __a, __b,
5514*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
5515*67e74705SXin Li 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
5516*67e74705SXin Li #else
5517*67e74705SXin Li return (vector unsigned int)vec_perm(
5518*67e74705SXin Li __a, __b,
5519*67e74705SXin Li (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
5520*67e74705SXin Li 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
5521*67e74705SXin Li #endif
5522*67e74705SXin Li }
5523*67e74705SXin Li
5524*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_pack(vector bool long long __a,vector bool long long __b)5525*67e74705SXin Li vec_pack(vector bool long long __a, vector bool long long __b) {
5526*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5527*67e74705SXin Li return (vector bool int)vec_perm(
5528*67e74705SXin Li __a, __b,
5529*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
5530*67e74705SXin Li 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
5531*67e74705SXin Li #else
5532*67e74705SXin Li return (vector bool int)vec_perm(
5533*67e74705SXin Li __a, __b,
5534*67e74705SXin Li (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
5535*67e74705SXin Li 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
5536*67e74705SXin Li #endif
5537*67e74705SXin Li }
5538*67e74705SXin Li
5539*67e74705SXin Li #endif
5540*67e74705SXin Li
5541*67e74705SXin Li /* vec_vpkuhum */
5542*67e74705SXin Li
5543*67e74705SXin Li #define __builtin_altivec_vpkuhum vec_vpkuhum
5544*67e74705SXin Li
5545*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vpkuhum(vector signed short __a,vector signed short __b)5546*67e74705SXin Li vec_vpkuhum(vector signed short __a, vector signed short __b) {
5547*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5548*67e74705SXin Li return (vector signed char)vec_perm(
5549*67e74705SXin Li __a, __b,
5550*67e74705SXin Li (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
5551*67e74705SXin Li 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
5552*67e74705SXin Li #else
5553*67e74705SXin Li return (vector signed char)vec_perm(
5554*67e74705SXin Li __a, __b,
5555*67e74705SXin Li (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
5556*67e74705SXin Li 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
5557*67e74705SXin Li #endif
5558*67e74705SXin Li }
5559*67e74705SXin Li
5560*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vpkuhum(vector unsigned short __a,vector unsigned short __b)5561*67e74705SXin Li vec_vpkuhum(vector unsigned short __a, vector unsigned short __b) {
5562*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5563*67e74705SXin Li return (vector unsigned char)vec_perm(
5564*67e74705SXin Li __a, __b,
5565*67e74705SXin Li (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
5566*67e74705SXin Li 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
5567*67e74705SXin Li #else
5568*67e74705SXin Li return (vector unsigned char)vec_perm(
5569*67e74705SXin Li __a, __b,
5570*67e74705SXin Li (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
5571*67e74705SXin Li 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
5572*67e74705SXin Li #endif
5573*67e74705SXin Li }
5574*67e74705SXin Li
5575*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_vpkuhum(vector bool short __a,vector bool short __b)5576*67e74705SXin Li vec_vpkuhum(vector bool short __a, vector bool short __b) {
5577*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5578*67e74705SXin Li return (vector bool char)vec_perm(
5579*67e74705SXin Li __a, __b,
5580*67e74705SXin Li (vector unsigned char)(0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E,
5581*67e74705SXin Li 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E));
5582*67e74705SXin Li #else
5583*67e74705SXin Li return (vector bool char)vec_perm(
5584*67e74705SXin Li __a, __b,
5585*67e74705SXin Li (vector unsigned char)(0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F,
5586*67e74705SXin Li 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F));
5587*67e74705SXin Li #endif
5588*67e74705SXin Li }
5589*67e74705SXin Li
5590*67e74705SXin Li /* vec_vpkuwum */
5591*67e74705SXin Li
5592*67e74705SXin Li #define __builtin_altivec_vpkuwum vec_vpkuwum
5593*67e74705SXin Li
vec_vpkuwum(vector int __a,vector int __b)5594*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vpkuwum(vector int __a,
5595*67e74705SXin Li vector int __b) {
5596*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5597*67e74705SXin Li return (vector short)vec_perm(
5598*67e74705SXin Li __a, __b,
5599*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
5600*67e74705SXin Li 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
5601*67e74705SXin Li #else
5602*67e74705SXin Li return (vector short)vec_perm(
5603*67e74705SXin Li __a, __b,
5604*67e74705SXin Li (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
5605*67e74705SXin Li 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
5606*67e74705SXin Li #endif
5607*67e74705SXin Li }
5608*67e74705SXin Li
5609*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vpkuwum(vector unsigned int __a,vector unsigned int __b)5610*67e74705SXin Li vec_vpkuwum(vector unsigned int __a, vector unsigned int __b) {
5611*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5612*67e74705SXin Li return (vector unsigned short)vec_perm(
5613*67e74705SXin Li __a, __b,
5614*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
5615*67e74705SXin Li 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
5616*67e74705SXin Li #else
5617*67e74705SXin Li return (vector unsigned short)vec_perm(
5618*67e74705SXin Li __a, __b,
5619*67e74705SXin Li (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
5620*67e74705SXin Li 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
5621*67e74705SXin Li #endif
5622*67e74705SXin Li }
5623*67e74705SXin Li
5624*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vpkuwum(vector bool int __a,vector bool int __b)5625*67e74705SXin Li vec_vpkuwum(vector bool int __a, vector bool int __b) {
5626*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5627*67e74705SXin Li return (vector bool short)vec_perm(
5628*67e74705SXin Li __a, __b,
5629*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x04, 0x05, 0x08, 0x09, 0x0C, 0x0D,
5630*67e74705SXin Li 0x10, 0x11, 0x14, 0x15, 0x18, 0x19, 0x1C, 0x1D));
5631*67e74705SXin Li #else
5632*67e74705SXin Li return (vector bool short)vec_perm(
5633*67e74705SXin Li __a, __b,
5634*67e74705SXin Li (vector unsigned char)(0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F,
5635*67e74705SXin Li 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F));
5636*67e74705SXin Li #endif
5637*67e74705SXin Li }
5638*67e74705SXin Li
5639*67e74705SXin Li /* vec_vpkudum */
5640*67e74705SXin Li
5641*67e74705SXin Li #ifdef __POWER8_VECTOR__
5642*67e74705SXin Li #define __builtin_altivec_vpkudum vec_vpkudum
5643*67e74705SXin Li
vec_vpkudum(vector long long __a,vector long long __b)5644*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vpkudum(vector long long __a,
5645*67e74705SXin Li vector long long __b) {
5646*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5647*67e74705SXin Li return (vector int)vec_perm(
5648*67e74705SXin Li __a, __b,
5649*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
5650*67e74705SXin Li 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
5651*67e74705SXin Li #else
5652*67e74705SXin Li return (vector int)vec_perm(
5653*67e74705SXin Li __a, __b,
5654*67e74705SXin Li (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
5655*67e74705SXin Li 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
5656*67e74705SXin Li #endif
5657*67e74705SXin Li }
5658*67e74705SXin Li
5659*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vpkudum(vector unsigned long long __a,vector unsigned long long __b)5660*67e74705SXin Li vec_vpkudum(vector unsigned long long __a, vector unsigned long long __b) {
5661*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5662*67e74705SXin Li return (vector unsigned int)vec_perm(
5663*67e74705SXin Li __a, __b,
5664*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
5665*67e74705SXin Li 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
5666*67e74705SXin Li #else
5667*67e74705SXin Li return (vector unsigned int)vec_perm(
5668*67e74705SXin Li __a, __b,
5669*67e74705SXin Li (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
5670*67e74705SXin Li 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
5671*67e74705SXin Li #endif
5672*67e74705SXin Li }
5673*67e74705SXin Li
5674*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_vpkudum(vector bool long long __a,vector bool long long __b)5675*67e74705SXin Li vec_vpkudum(vector bool long long __a, vector bool long long __b) {
5676*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5677*67e74705SXin Li return (vector bool int)vec_perm(
5678*67e74705SXin Li (vector long long)__a, (vector long long)__b,
5679*67e74705SXin Li (vector unsigned char)(0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0A, 0x0B,
5680*67e74705SXin Li 0x10, 0x11, 0x12, 0x13, 0x18, 0x19, 0x1A, 0x1B));
5681*67e74705SXin Li #else
5682*67e74705SXin Li return (vector bool int)vec_perm(
5683*67e74705SXin Li (vector long long)__a, (vector long long)__b,
5684*67e74705SXin Li (vector unsigned char)(0x04, 0x05, 0x06, 0x07, 0x0C, 0x0D, 0x0E, 0x0F,
5685*67e74705SXin Li 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F));
5686*67e74705SXin Li #endif
5687*67e74705SXin Li }
5688*67e74705SXin Li #endif
5689*67e74705SXin Li
5690*67e74705SXin Li /* vec_packpx */
5691*67e74705SXin Li
5692*67e74705SXin Li static __inline__ vector pixel __attribute__((__always_inline__))
vec_packpx(vector unsigned int __a,vector unsigned int __b)5693*67e74705SXin Li vec_packpx(vector unsigned int __a, vector unsigned int __b) {
5694*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5695*67e74705SXin Li return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
5696*67e74705SXin Li #else
5697*67e74705SXin Li return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
5698*67e74705SXin Li #endif
5699*67e74705SXin Li }
5700*67e74705SXin Li
5701*67e74705SXin Li /* vec_vpkpx */
5702*67e74705SXin Li
5703*67e74705SXin Li static __inline__ vector pixel __attribute__((__always_inline__))
vec_vpkpx(vector unsigned int __a,vector unsigned int __b)5704*67e74705SXin Li vec_vpkpx(vector unsigned int __a, vector unsigned int __b) {
5705*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5706*67e74705SXin Li return (vector pixel)__builtin_altivec_vpkpx(__b, __a);
5707*67e74705SXin Li #else
5708*67e74705SXin Li return (vector pixel)__builtin_altivec_vpkpx(__a, __b);
5709*67e74705SXin Li #endif
5710*67e74705SXin Li }
5711*67e74705SXin Li
5712*67e74705SXin Li /* vec_packs */
5713*67e74705SXin Li
vec_packs(vector short __a,vector short __b)5714*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai vec_packs(vector short __a,
5715*67e74705SXin Li vector short __b) {
5716*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5717*67e74705SXin Li return __builtin_altivec_vpkshss(__b, __a);
5718*67e74705SXin Li #else
5719*67e74705SXin Li return __builtin_altivec_vpkshss(__a, __b);
5720*67e74705SXin Li #endif
5721*67e74705SXin Li }
5722*67e74705SXin Li
5723*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_packs(vector unsigned short __a,vector unsigned short __b)5724*67e74705SXin Li vec_packs(vector unsigned short __a, vector unsigned short __b) {
5725*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5726*67e74705SXin Li return __builtin_altivec_vpkuhus(__b, __a);
5727*67e74705SXin Li #else
5728*67e74705SXin Li return __builtin_altivec_vpkuhus(__a, __b);
5729*67e74705SXin Li #endif
5730*67e74705SXin Li }
5731*67e74705SXin Li
vec_packs(vector int __a,vector int __b)5732*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai vec_packs(vector int __a,
5733*67e74705SXin Li vector int __b) {
5734*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5735*67e74705SXin Li return __builtin_altivec_vpkswss(__b, __a);
5736*67e74705SXin Li #else
5737*67e74705SXin Li return __builtin_altivec_vpkswss(__a, __b);
5738*67e74705SXin Li #endif
5739*67e74705SXin Li }
5740*67e74705SXin Li
5741*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_packs(vector unsigned int __a,vector unsigned int __b)5742*67e74705SXin Li vec_packs(vector unsigned int __a, vector unsigned int __b) {
5743*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5744*67e74705SXin Li return __builtin_altivec_vpkuwus(__b, __a);
5745*67e74705SXin Li #else
5746*67e74705SXin Li return __builtin_altivec_vpkuwus(__a, __b);
5747*67e74705SXin Li #endif
5748*67e74705SXin Li }
5749*67e74705SXin Li
5750*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_packs(vector long long __a,vector long long __b)5751*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_packs(vector long long __a,
5752*67e74705SXin Li vector long long __b) {
5753*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5754*67e74705SXin Li return __builtin_altivec_vpksdss(__b, __a);
5755*67e74705SXin Li #else
5756*67e74705SXin Li return __builtin_altivec_vpksdss(__a, __b);
5757*67e74705SXin Li #endif
5758*67e74705SXin Li }
5759*67e74705SXin Li
5760*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_packs(vector unsigned long long __a,vector unsigned long long __b)5761*67e74705SXin Li vec_packs(vector unsigned long long __a, vector unsigned long long __b) {
5762*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5763*67e74705SXin Li return __builtin_altivec_vpkudus(__b, __a);
5764*67e74705SXin Li #else
5765*67e74705SXin Li return __builtin_altivec_vpkudus(__a, __b);
5766*67e74705SXin Li #endif
5767*67e74705SXin Li }
5768*67e74705SXin Li #endif
5769*67e74705SXin Li
5770*67e74705SXin Li /* vec_vpkshss */
5771*67e74705SXin Li
5772*67e74705SXin Li static __inline__ vector signed char __attribute__((__always_inline__))
vec_vpkshss(vector short __a,vector short __b)5773*67e74705SXin Li vec_vpkshss(vector short __a, vector short __b) {
5774*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5775*67e74705SXin Li return __builtin_altivec_vpkshss(__b, __a);
5776*67e74705SXin Li #else
5777*67e74705SXin Li return __builtin_altivec_vpkshss(__a, __b);
5778*67e74705SXin Li #endif
5779*67e74705SXin Li }
5780*67e74705SXin Li
5781*67e74705SXin Li /* vec_vpksdss */
5782*67e74705SXin Li
5783*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_vpksdss(vector long long __a,vector long long __b)5784*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vpksdss(vector long long __a,
5785*67e74705SXin Li vector long long __b) {
5786*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5787*67e74705SXin Li return __builtin_altivec_vpksdss(__b, __a);
5788*67e74705SXin Li #else
5789*67e74705SXin Li return __builtin_altivec_vpksdss(__a, __b);
5790*67e74705SXin Li #endif
5791*67e74705SXin Li }
5792*67e74705SXin Li #endif
5793*67e74705SXin Li
5794*67e74705SXin Li /* vec_vpkuhus */
5795*67e74705SXin Li
5796*67e74705SXin Li static __inline__ vector unsigned char __attribute__((__always_inline__))
vec_vpkuhus(vector unsigned short __a,vector unsigned short __b)5797*67e74705SXin Li vec_vpkuhus(vector unsigned short __a, vector unsigned short __b) {
5798*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5799*67e74705SXin Li return __builtin_altivec_vpkuhus(__b, __a);
5800*67e74705SXin Li #else
5801*67e74705SXin Li return __builtin_altivec_vpkuhus(__a, __b);
5802*67e74705SXin Li #endif
5803*67e74705SXin Li }
5804*67e74705SXin Li
5805*67e74705SXin Li /* vec_vpkudus */
5806*67e74705SXin Li
5807*67e74705SXin Li #ifdef __POWER8_VECTOR__
5808*67e74705SXin Li static __inline__ vector unsigned int __attribute__((__always_inline__))
vec_vpkudus(vector unsigned long long __a,vector unsigned long long __b)5809*67e74705SXin Li vec_vpkudus(vector unsigned long long __a, vector unsigned long long __b) {
5810*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5811*67e74705SXin Li return __builtin_altivec_vpkudus(__b, __a);
5812*67e74705SXin Li #else
5813*67e74705SXin Li return __builtin_altivec_vpkudus(__a, __b);
5814*67e74705SXin Li #endif
5815*67e74705SXin Li }
5816*67e74705SXin Li #endif
5817*67e74705SXin Li
5818*67e74705SXin Li /* vec_vpkswss */
5819*67e74705SXin Li
5820*67e74705SXin Li static __inline__ vector signed short __attribute__((__always_inline__))
vec_vpkswss(vector int __a,vector int __b)5821*67e74705SXin Li vec_vpkswss(vector int __a, vector int __b) {
5822*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5823*67e74705SXin Li return __builtin_altivec_vpkswss(__b, __a);
5824*67e74705SXin Li #else
5825*67e74705SXin Li return __builtin_altivec_vpkswss(__a, __b);
5826*67e74705SXin Li #endif
5827*67e74705SXin Li }
5828*67e74705SXin Li
5829*67e74705SXin Li /* vec_vpkuwus */
5830*67e74705SXin Li
5831*67e74705SXin Li static __inline__ vector unsigned short __attribute__((__always_inline__))
vec_vpkuwus(vector unsigned int __a,vector unsigned int __b)5832*67e74705SXin Li vec_vpkuwus(vector unsigned int __a, vector unsigned int __b) {
5833*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5834*67e74705SXin Li return __builtin_altivec_vpkuwus(__b, __a);
5835*67e74705SXin Li #else
5836*67e74705SXin Li return __builtin_altivec_vpkuwus(__a, __b);
5837*67e74705SXin Li #endif
5838*67e74705SXin Li }
5839*67e74705SXin Li
5840*67e74705SXin Li /* vec_packsu */
5841*67e74705SXin Li
5842*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_packsu(vector short __a,vector short __b)5843*67e74705SXin Li vec_packsu(vector short __a, vector short __b) {
5844*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5845*67e74705SXin Li return __builtin_altivec_vpkshus(__b, __a);
5846*67e74705SXin Li #else
5847*67e74705SXin Li return __builtin_altivec_vpkshus(__a, __b);
5848*67e74705SXin Li #endif
5849*67e74705SXin Li }
5850*67e74705SXin Li
5851*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_packsu(vector unsigned short __a,vector unsigned short __b)5852*67e74705SXin Li vec_packsu(vector unsigned short __a, vector unsigned short __b) {
5853*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5854*67e74705SXin Li return __builtin_altivec_vpkuhus(__b, __a);
5855*67e74705SXin Li #else
5856*67e74705SXin Li return __builtin_altivec_vpkuhus(__a, __b);
5857*67e74705SXin Li #endif
5858*67e74705SXin Li }
5859*67e74705SXin Li
5860*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_packsu(vector int __a,vector int __b)5861*67e74705SXin Li vec_packsu(vector int __a, vector int __b) {
5862*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5863*67e74705SXin Li return __builtin_altivec_vpkswus(__b, __a);
5864*67e74705SXin Li #else
5865*67e74705SXin Li return __builtin_altivec_vpkswus(__a, __b);
5866*67e74705SXin Li #endif
5867*67e74705SXin Li }
5868*67e74705SXin Li
5869*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_packsu(vector unsigned int __a,vector unsigned int __b)5870*67e74705SXin Li vec_packsu(vector unsigned int __a, vector unsigned int __b) {
5871*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5872*67e74705SXin Li return __builtin_altivec_vpkuwus(__b, __a);
5873*67e74705SXin Li #else
5874*67e74705SXin Li return __builtin_altivec_vpkuwus(__a, __b);
5875*67e74705SXin Li #endif
5876*67e74705SXin Li }
5877*67e74705SXin Li
5878*67e74705SXin Li #ifdef __POWER8_VECTOR__
5879*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_packsu(vector long long __a,vector long long __b)5880*67e74705SXin Li vec_packsu(vector long long __a, vector long long __b) {
5881*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5882*67e74705SXin Li return __builtin_altivec_vpksdus(__b, __a);
5883*67e74705SXin Li #else
5884*67e74705SXin Li return __builtin_altivec_vpksdus(__a, __b);
5885*67e74705SXin Li #endif
5886*67e74705SXin Li }
5887*67e74705SXin Li
5888*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_packsu(vector unsigned long long __a,vector unsigned long long __b)5889*67e74705SXin Li vec_packsu(vector unsigned long long __a, vector unsigned long long __b) {
5890*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5891*67e74705SXin Li return __builtin_altivec_vpkudus(__b, __a);
5892*67e74705SXin Li #else
5893*67e74705SXin Li return __builtin_altivec_vpkudus(__a, __b);
5894*67e74705SXin Li #endif
5895*67e74705SXin Li }
5896*67e74705SXin Li #endif
5897*67e74705SXin Li
5898*67e74705SXin Li /* vec_vpkshus */
5899*67e74705SXin Li
5900*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vpkshus(vector short __a,vector short __b)5901*67e74705SXin Li vec_vpkshus(vector short __a, vector short __b) {
5902*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5903*67e74705SXin Li return __builtin_altivec_vpkshus(__b, __a);
5904*67e74705SXin Li #else
5905*67e74705SXin Li return __builtin_altivec_vpkshus(__a, __b);
5906*67e74705SXin Li #endif
5907*67e74705SXin Li }
5908*67e74705SXin Li
5909*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vpkshus(vector unsigned short __a,vector unsigned short __b)5910*67e74705SXin Li vec_vpkshus(vector unsigned short __a, vector unsigned short __b) {
5911*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5912*67e74705SXin Li return __builtin_altivec_vpkuhus(__b, __a);
5913*67e74705SXin Li #else
5914*67e74705SXin Li return __builtin_altivec_vpkuhus(__a, __b);
5915*67e74705SXin Li #endif
5916*67e74705SXin Li }
5917*67e74705SXin Li
5918*67e74705SXin Li /* vec_vpkswus */
5919*67e74705SXin Li
5920*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vpkswus(vector int __a,vector int __b)5921*67e74705SXin Li vec_vpkswus(vector int __a, vector int __b) {
5922*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5923*67e74705SXin Li return __builtin_altivec_vpkswus(__b, __a);
5924*67e74705SXin Li #else
5925*67e74705SXin Li return __builtin_altivec_vpkswus(__a, __b);
5926*67e74705SXin Li #endif
5927*67e74705SXin Li }
5928*67e74705SXin Li
5929*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vpkswus(vector unsigned int __a,vector unsigned int __b)5930*67e74705SXin Li vec_vpkswus(vector unsigned int __a, vector unsigned int __b) {
5931*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5932*67e74705SXin Li return __builtin_altivec_vpkuwus(__b, __a);
5933*67e74705SXin Li #else
5934*67e74705SXin Li return __builtin_altivec_vpkuwus(__a, __b);
5935*67e74705SXin Li #endif
5936*67e74705SXin Li }
5937*67e74705SXin Li
5938*67e74705SXin Li /* vec_vpksdus */
5939*67e74705SXin Li
5940*67e74705SXin Li #ifdef __POWER8_VECTOR__
5941*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vpksdus(vector long long __a,vector long long __b)5942*67e74705SXin Li vec_vpksdus(vector long long __a, vector long long __b) {
5943*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5944*67e74705SXin Li return __builtin_altivec_vpksdus(__b, __a);
5945*67e74705SXin Li #else
5946*67e74705SXin Li return __builtin_altivec_vpksdus(__a, __b);
5947*67e74705SXin Li #endif
5948*67e74705SXin Li }
5949*67e74705SXin Li #endif
5950*67e74705SXin Li
5951*67e74705SXin Li /* vec_perm */
5952*67e74705SXin Li
5953*67e74705SXin Li // The vperm instruction is defined architecturally with a big-endian bias.
5954*67e74705SXin Li // For little endian, we swap the input operands and invert the permute
5955*67e74705SXin Li // control vector. Only the rightmost 5 bits matter, so we could use
5956*67e74705SXin Li // a vector of all 31s instead of all 255s to perform the inversion.
5957*67e74705SXin Li // However, when the PCV is not a constant, using 255 has an advantage
5958*67e74705SXin Li // in that the vec_xor can be recognized as a vec_nor (and for P8 and
5959*67e74705SXin Li // later, possibly a vec_nand).
5960*67e74705SXin Li
vec_perm(vector signed char __a,vector signed char __b,vector unsigned char __c)5961*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai vec_perm(
5962*67e74705SXin Li vector signed char __a, vector signed char __b, vector unsigned char __c) {
5963*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5964*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
5965*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
5966*67e74705SXin Li __d = vec_xor(__c, __d);
5967*67e74705SXin Li return (vector signed char)__builtin_altivec_vperm_4si((vector int)__b,
5968*67e74705SXin Li (vector int)__a, __d);
5969*67e74705SXin Li #else
5970*67e74705SXin Li return (vector signed char)__builtin_altivec_vperm_4si((vector int)__a,
5971*67e74705SXin Li (vector int)__b, __c);
5972*67e74705SXin Li #endif
5973*67e74705SXin Li }
5974*67e74705SXin Li
5975*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_perm(vector unsigned char __a,vector unsigned char __b,vector unsigned char __c)5976*67e74705SXin Li vec_perm(vector unsigned char __a, vector unsigned char __b,
5977*67e74705SXin Li vector unsigned char __c) {
5978*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5979*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
5980*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
5981*67e74705SXin Li __d = vec_xor(__c, __d);
5982*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vperm_4si(
5983*67e74705SXin Li (vector int)__b, (vector int)__a, __d);
5984*67e74705SXin Li #else
5985*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vperm_4si(
5986*67e74705SXin Li (vector int)__a, (vector int)__b, __c);
5987*67e74705SXin Li #endif
5988*67e74705SXin Li }
5989*67e74705SXin Li
5990*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_perm(vector bool char __a,vector bool char __b,vector unsigned char __c)5991*67e74705SXin Li vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c) {
5992*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
5993*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
5994*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
5995*67e74705SXin Li __d = vec_xor(__c, __d);
5996*67e74705SXin Li return (vector bool char)__builtin_altivec_vperm_4si((vector int)__b,
5997*67e74705SXin Li (vector int)__a, __d);
5998*67e74705SXin Li #else
5999*67e74705SXin Li return (vector bool char)__builtin_altivec_vperm_4si((vector int)__a,
6000*67e74705SXin Li (vector int)__b, __c);
6001*67e74705SXin Li #endif
6002*67e74705SXin Li }
6003*67e74705SXin Li
vec_perm(vector signed short __a,vector signed short __b,vector unsigned char __c)6004*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_perm(vector signed short __a,
6005*67e74705SXin Li vector signed short __b,
6006*67e74705SXin Li vector unsigned char __c) {
6007*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6008*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
6009*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
6010*67e74705SXin Li __d = vec_xor(__c, __d);
6011*67e74705SXin Li return (vector signed short)__builtin_altivec_vperm_4si((vector int)__b,
6012*67e74705SXin Li (vector int)__a, __d);
6013*67e74705SXin Li #else
6014*67e74705SXin Li return (vector signed short)__builtin_altivec_vperm_4si((vector int)__a,
6015*67e74705SXin Li (vector int)__b, __c);
6016*67e74705SXin Li #endif
6017*67e74705SXin Li }
6018*67e74705SXin Li
6019*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_perm(vector unsigned short __a,vector unsigned short __b,vector unsigned char __c)6020*67e74705SXin Li vec_perm(vector unsigned short __a, vector unsigned short __b,
6021*67e74705SXin Li vector unsigned char __c) {
6022*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6023*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
6024*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
6025*67e74705SXin Li __d = vec_xor(__c, __d);
6026*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vperm_4si(
6027*67e74705SXin Li (vector int)__b, (vector int)__a, __d);
6028*67e74705SXin Li #else
6029*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vperm_4si(
6030*67e74705SXin Li (vector int)__a, (vector int)__b, __c);
6031*67e74705SXin Li #endif
6032*67e74705SXin Li }
6033*67e74705SXin Li
vec_perm(vector bool short __a,vector bool short __b,vector unsigned char __c)6034*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai vec_perm(
6035*67e74705SXin Li vector bool short __a, vector bool short __b, vector unsigned char __c) {
6036*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6037*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
6038*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
6039*67e74705SXin Li __d = vec_xor(__c, __d);
6040*67e74705SXin Li return (vector bool short)__builtin_altivec_vperm_4si((vector int)__b,
6041*67e74705SXin Li (vector int)__a, __d);
6042*67e74705SXin Li #else
6043*67e74705SXin Li return (vector bool short)__builtin_altivec_vperm_4si((vector int)__a,
6044*67e74705SXin Li (vector int)__b, __c);
6045*67e74705SXin Li #endif
6046*67e74705SXin Li }
6047*67e74705SXin Li
vec_perm(vector pixel __a,vector pixel __b,vector unsigned char __c)6048*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_perm(vector pixel __a,
6049*67e74705SXin Li vector pixel __b,
6050*67e74705SXin Li vector unsigned char __c) {
6051*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6052*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
6053*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
6054*67e74705SXin Li __d = vec_xor(__c, __d);
6055*67e74705SXin Li return (vector pixel)__builtin_altivec_vperm_4si((vector int)__b,
6056*67e74705SXin Li (vector int)__a, __d);
6057*67e74705SXin Li #else
6058*67e74705SXin Li return (vector pixel)__builtin_altivec_vperm_4si((vector int)__a,
6059*67e74705SXin Li (vector int)__b, __c);
6060*67e74705SXin Li #endif
6061*67e74705SXin Li }
6062*67e74705SXin Li
vec_perm(vector signed int __a,vector signed int __b,vector unsigned char __c)6063*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_perm(vector signed int __a,
6064*67e74705SXin Li vector signed int __b,
6065*67e74705SXin Li vector unsigned char __c) {
6066*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6067*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
6068*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
6069*67e74705SXin Li __d = vec_xor(__c, __d);
6070*67e74705SXin Li return (vector signed int)__builtin_altivec_vperm_4si(__b, __a, __d);
6071*67e74705SXin Li #else
6072*67e74705SXin Li return (vector signed int)__builtin_altivec_vperm_4si(__a, __b, __c);
6073*67e74705SXin Li #endif
6074*67e74705SXin Li }
6075*67e74705SXin Li
6076*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_perm(vector unsigned int __a,vector unsigned int __b,vector unsigned char __c)6077*67e74705SXin Li vec_perm(vector unsigned int __a, vector unsigned int __b,
6078*67e74705SXin Li vector unsigned char __c) {
6079*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6080*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
6081*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
6082*67e74705SXin Li __d = vec_xor(__c, __d);
6083*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__b,
6084*67e74705SXin Li (vector int)__a, __d);
6085*67e74705SXin Li #else
6086*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vperm_4si((vector int)__a,
6087*67e74705SXin Li (vector int)__b, __c);
6088*67e74705SXin Li #endif
6089*67e74705SXin Li }
6090*67e74705SXin Li
6091*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_perm(vector bool int __a,vector bool int __b,vector unsigned char __c)6092*67e74705SXin Li vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
6093*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6094*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
6095*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
6096*67e74705SXin Li __d = vec_xor(__c, __d);
6097*67e74705SXin Li return (vector bool int)__builtin_altivec_vperm_4si((vector int)__b,
6098*67e74705SXin Li (vector int)__a, __d);
6099*67e74705SXin Li #else
6100*67e74705SXin Li return (vector bool int)__builtin_altivec_vperm_4si((vector int)__a,
6101*67e74705SXin Li (vector int)__b, __c);
6102*67e74705SXin Li #endif
6103*67e74705SXin Li }
6104*67e74705SXin Li
vec_perm(vector float __a,vector float __b,vector unsigned char __c)6105*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_perm(vector float __a,
6106*67e74705SXin Li vector float __b,
6107*67e74705SXin Li vector unsigned char __c) {
6108*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6109*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
6110*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
6111*67e74705SXin Li __d = vec_xor(__c, __d);
6112*67e74705SXin Li return (vector float)__builtin_altivec_vperm_4si((vector int)__b,
6113*67e74705SXin Li (vector int)__a, __d);
6114*67e74705SXin Li #else
6115*67e74705SXin Li return (vector float)__builtin_altivec_vperm_4si((vector int)__a,
6116*67e74705SXin Li (vector int)__b, __c);
6117*67e74705SXin Li #endif
6118*67e74705SXin Li }
6119*67e74705SXin Li
6120*67e74705SXin Li #ifdef __VSX__
6121*67e74705SXin Li static __inline__ vector long long __ATTRS_o_ai
vec_perm(vector signed long long __a,vector signed long long __b,vector unsigned char __c)6122*67e74705SXin Li vec_perm(vector signed long long __a, vector signed long long __b,
6123*67e74705SXin Li vector unsigned char __c) {
6124*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6125*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
6126*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
6127*67e74705SXin Li __d = vec_xor(__c, __d);
6128*67e74705SXin Li return (vector signed long long)__builtin_altivec_vperm_4si(
6129*67e74705SXin Li (vector int)__b, (vector int)__a, __d);
6130*67e74705SXin Li #else
6131*67e74705SXin Li return (vector signed long long)__builtin_altivec_vperm_4si(
6132*67e74705SXin Li (vector int)__a, (vector int)__b, __c);
6133*67e74705SXin Li #endif
6134*67e74705SXin Li }
6135*67e74705SXin Li
6136*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_perm(vector unsigned long long __a,vector unsigned long long __b,vector unsigned char __c)6137*67e74705SXin Li vec_perm(vector unsigned long long __a, vector unsigned long long __b,
6138*67e74705SXin Li vector unsigned char __c) {
6139*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6140*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
6141*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
6142*67e74705SXin Li __d = vec_xor(__c, __d);
6143*67e74705SXin Li return (vector unsigned long long)__builtin_altivec_vperm_4si(
6144*67e74705SXin Li (vector int)__b, (vector int)__a, __d);
6145*67e74705SXin Li #else
6146*67e74705SXin Li return (vector unsigned long long)__builtin_altivec_vperm_4si(
6147*67e74705SXin Li (vector int)__a, (vector int)__b, __c);
6148*67e74705SXin Li #endif
6149*67e74705SXin Li }
6150*67e74705SXin Li
6151*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_perm(vector bool long long __a,vector bool long long __b,vector unsigned char __c)6152*67e74705SXin Li vec_perm(vector bool long long __a, vector bool long long __b,
6153*67e74705SXin Li vector unsigned char __c) {
6154*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6155*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
6156*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
6157*67e74705SXin Li __d = vec_xor(__c, __d);
6158*67e74705SXin Li return (vector bool long long)__builtin_altivec_vperm_4si(
6159*67e74705SXin Li (vector int)__b, (vector int)__a, __d);
6160*67e74705SXin Li #else
6161*67e74705SXin Li return (vector bool long long)__builtin_altivec_vperm_4si(
6162*67e74705SXin Li (vector int)__a, (vector int)__b, __c);
6163*67e74705SXin Li #endif
6164*67e74705SXin Li }
6165*67e74705SXin Li
6166*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_perm(vector double __a,vector double __b,vector unsigned char __c)6167*67e74705SXin Li vec_perm(vector double __a, vector double __b, vector unsigned char __c) {
6168*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6169*67e74705SXin Li vector unsigned char __d = {255, 255, 255, 255, 255, 255, 255, 255,
6170*67e74705SXin Li 255, 255, 255, 255, 255, 255, 255, 255};
6171*67e74705SXin Li __d = vec_xor(__c, __d);
6172*67e74705SXin Li return (vector double)__builtin_altivec_vperm_4si((vector int)__b,
6173*67e74705SXin Li (vector int)__a, __d);
6174*67e74705SXin Li #else
6175*67e74705SXin Li return (vector double)__builtin_altivec_vperm_4si((vector int)__a,
6176*67e74705SXin Li (vector int)__b, __c);
6177*67e74705SXin Li #endif
6178*67e74705SXin Li }
6179*67e74705SXin Li #endif
6180*67e74705SXin Li
6181*67e74705SXin Li /* vec_vperm */
6182*67e74705SXin Li
vec_vperm(vector signed char __a,vector signed char __b,vector unsigned char __c)6183*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai vec_vperm(
6184*67e74705SXin Li vector signed char __a, vector signed char __b, vector unsigned char __c) {
6185*67e74705SXin Li return vec_perm(__a, __b, __c);
6186*67e74705SXin Li }
6187*67e74705SXin Li
6188*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vperm(vector unsigned char __a,vector unsigned char __b,vector unsigned char __c)6189*67e74705SXin Li vec_vperm(vector unsigned char __a, vector unsigned char __b,
6190*67e74705SXin Li vector unsigned char __c) {
6191*67e74705SXin Li return vec_perm(__a, __b, __c);
6192*67e74705SXin Li }
6193*67e74705SXin Li
vec_vperm(vector bool char __a,vector bool char __b,vector unsigned char __c)6194*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_vperm(
6195*67e74705SXin Li vector bool char __a, vector bool char __b, vector unsigned char __c) {
6196*67e74705SXin Li return vec_perm(__a, __b, __c);
6197*67e74705SXin Li }
6198*67e74705SXin Li
6199*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai
vec_vperm(vector short __a,vector short __b,vector unsigned char __c)6200*67e74705SXin Li vec_vperm(vector short __a, vector short __b, vector unsigned char __c) {
6201*67e74705SXin Li return vec_perm(__a, __b, __c);
6202*67e74705SXin Li }
6203*67e74705SXin Li
6204*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vperm(vector unsigned short __a,vector unsigned short __b,vector unsigned char __c)6205*67e74705SXin Li vec_vperm(vector unsigned short __a, vector unsigned short __b,
6206*67e74705SXin Li vector unsigned char __c) {
6207*67e74705SXin Li return vec_perm(__a, __b, __c);
6208*67e74705SXin Li }
6209*67e74705SXin Li
vec_vperm(vector bool short __a,vector bool short __b,vector unsigned char __c)6210*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai vec_vperm(
6211*67e74705SXin Li vector bool short __a, vector bool short __b, vector unsigned char __c) {
6212*67e74705SXin Li return vec_perm(__a, __b, __c);
6213*67e74705SXin Li }
6214*67e74705SXin Li
6215*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai
vec_vperm(vector pixel __a,vector pixel __b,vector unsigned char __c)6216*67e74705SXin Li vec_vperm(vector pixel __a, vector pixel __b, vector unsigned char __c) {
6217*67e74705SXin Li return vec_perm(__a, __b, __c);
6218*67e74705SXin Li }
6219*67e74705SXin Li
vec_vperm(vector int __a,vector int __b,vector unsigned char __c)6220*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vperm(vector int __a,
6221*67e74705SXin Li vector int __b,
6222*67e74705SXin Li vector unsigned char __c) {
6223*67e74705SXin Li return vec_perm(__a, __b, __c);
6224*67e74705SXin Li }
6225*67e74705SXin Li
6226*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vperm(vector unsigned int __a,vector unsigned int __b,vector unsigned char __c)6227*67e74705SXin Li vec_vperm(vector unsigned int __a, vector unsigned int __b,
6228*67e74705SXin Li vector unsigned char __c) {
6229*67e74705SXin Li return vec_perm(__a, __b, __c);
6230*67e74705SXin Li }
6231*67e74705SXin Li
6232*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_vperm(vector bool int __a,vector bool int __b,vector unsigned char __c)6233*67e74705SXin Li vec_vperm(vector bool int __a, vector bool int __b, vector unsigned char __c) {
6234*67e74705SXin Li return vec_perm(__a, __b, __c);
6235*67e74705SXin Li }
6236*67e74705SXin Li
6237*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai
vec_vperm(vector float __a,vector float __b,vector unsigned char __c)6238*67e74705SXin Li vec_vperm(vector float __a, vector float __b, vector unsigned char __c) {
6239*67e74705SXin Li return vec_perm(__a, __b, __c);
6240*67e74705SXin Li }
6241*67e74705SXin Li
6242*67e74705SXin Li #ifdef __VSX__
vec_vperm(vector long long __a,vector long long __b,vector unsigned char __c)6243*67e74705SXin Li static __inline__ vector long long __ATTRS_o_ai vec_vperm(
6244*67e74705SXin Li vector long long __a, vector long long __b, vector unsigned char __c) {
6245*67e74705SXin Li return vec_perm(__a, __b, __c);
6246*67e74705SXin Li }
6247*67e74705SXin Li
6248*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vperm(vector unsigned long long __a,vector unsigned long long __b,vector unsigned char __c)6249*67e74705SXin Li vec_vperm(vector unsigned long long __a, vector unsigned long long __b,
6250*67e74705SXin Li vector unsigned char __c) {
6251*67e74705SXin Li return vec_perm(__a, __b, __c);
6252*67e74705SXin Li }
6253*67e74705SXin Li
6254*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_vperm(vector double __a,vector double __b,vector unsigned char __c)6255*67e74705SXin Li vec_vperm(vector double __a, vector double __b, vector unsigned char __c) {
6256*67e74705SXin Li return vec_perm(__a, __b, __c);
6257*67e74705SXin Li }
6258*67e74705SXin Li #endif
6259*67e74705SXin Li
6260*67e74705SXin Li /* vec_re */
6261*67e74705SXin Li
vec_re(vector float __a)6262*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_re(vector float __a) {
6263*67e74705SXin Li #ifdef __VSX__
6264*67e74705SXin Li return __builtin_vsx_xvresp(__a);
6265*67e74705SXin Li #else
6266*67e74705SXin Li return __builtin_altivec_vrefp(__a);
6267*67e74705SXin Li #endif
6268*67e74705SXin Li }
6269*67e74705SXin Li
6270*67e74705SXin Li #ifdef __VSX__
vec_re(vector double __a)6271*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_re(vector double __a) {
6272*67e74705SXin Li return __builtin_vsx_xvredp(__a);
6273*67e74705SXin Li }
6274*67e74705SXin Li #endif
6275*67e74705SXin Li
6276*67e74705SXin Li /* vec_vrefp */
6277*67e74705SXin Li
6278*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vrefp(vector float __a)6279*67e74705SXin Li vec_vrefp(vector float __a) {
6280*67e74705SXin Li return __builtin_altivec_vrefp(__a);
6281*67e74705SXin Li }
6282*67e74705SXin Li
6283*67e74705SXin Li /* vec_rl */
6284*67e74705SXin Li
6285*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_rl(vector signed char __a,vector unsigned char __b)6286*67e74705SXin Li vec_rl(vector signed char __a, vector unsigned char __b) {
6287*67e74705SXin Li return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
6288*67e74705SXin Li }
6289*67e74705SXin Li
6290*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_rl(vector unsigned char __a,vector unsigned char __b)6291*67e74705SXin Li vec_rl(vector unsigned char __a, vector unsigned char __b) {
6292*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
6293*67e74705SXin Li }
6294*67e74705SXin Li
vec_rl(vector short __a,vector unsigned short __b)6295*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_rl(vector short __a,
6296*67e74705SXin Li vector unsigned short __b) {
6297*67e74705SXin Li return __builtin_altivec_vrlh(__a, __b);
6298*67e74705SXin Li }
6299*67e74705SXin Li
6300*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_rl(vector unsigned short __a,vector unsigned short __b)6301*67e74705SXin Li vec_rl(vector unsigned short __a, vector unsigned short __b) {
6302*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
6303*67e74705SXin Li }
6304*67e74705SXin Li
vec_rl(vector int __a,vector unsigned int __b)6305*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_rl(vector int __a,
6306*67e74705SXin Li vector unsigned int __b) {
6307*67e74705SXin Li return __builtin_altivec_vrlw(__a, __b);
6308*67e74705SXin Li }
6309*67e74705SXin Li
6310*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_rl(vector unsigned int __a,vector unsigned int __b)6311*67e74705SXin Li vec_rl(vector unsigned int __a, vector unsigned int __b) {
6312*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
6313*67e74705SXin Li }
6314*67e74705SXin Li
6315*67e74705SXin Li #ifdef __POWER8_VECTOR__
6316*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_rl(vector signed long long __a,vector unsigned long long __b)6317*67e74705SXin Li vec_rl(vector signed long long __a, vector unsigned long long __b) {
6318*67e74705SXin Li return __builtin_altivec_vrld(__a, __b);
6319*67e74705SXin Li }
6320*67e74705SXin Li
6321*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_rl(vector unsigned long long __a,vector unsigned long long __b)6322*67e74705SXin Li vec_rl(vector unsigned long long __a, vector unsigned long long __b) {
6323*67e74705SXin Li return __builtin_altivec_vrld(__a, __b);
6324*67e74705SXin Li }
6325*67e74705SXin Li #endif
6326*67e74705SXin Li
6327*67e74705SXin Li /* vec_vrlb */
6328*67e74705SXin Li
6329*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vrlb(vector signed char __a,vector unsigned char __b)6330*67e74705SXin Li vec_vrlb(vector signed char __a, vector unsigned char __b) {
6331*67e74705SXin Li return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b);
6332*67e74705SXin Li }
6333*67e74705SXin Li
6334*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vrlb(vector unsigned char __a,vector unsigned char __b)6335*67e74705SXin Li vec_vrlb(vector unsigned char __a, vector unsigned char __b) {
6336*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b);
6337*67e74705SXin Li }
6338*67e74705SXin Li
6339*67e74705SXin Li /* vec_vrlh */
6340*67e74705SXin Li
6341*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai
vec_vrlh(vector short __a,vector unsigned short __b)6342*67e74705SXin Li vec_vrlh(vector short __a, vector unsigned short __b) {
6343*67e74705SXin Li return __builtin_altivec_vrlh(__a, __b);
6344*67e74705SXin Li }
6345*67e74705SXin Li
6346*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vrlh(vector unsigned short __a,vector unsigned short __b)6347*67e74705SXin Li vec_vrlh(vector unsigned short __a, vector unsigned short __b) {
6348*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b);
6349*67e74705SXin Li }
6350*67e74705SXin Li
6351*67e74705SXin Li /* vec_vrlw */
6352*67e74705SXin Li
vec_vrlw(vector int __a,vector unsigned int __b)6353*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vrlw(vector int __a,
6354*67e74705SXin Li vector unsigned int __b) {
6355*67e74705SXin Li return __builtin_altivec_vrlw(__a, __b);
6356*67e74705SXin Li }
6357*67e74705SXin Li
6358*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vrlw(vector unsigned int __a,vector unsigned int __b)6359*67e74705SXin Li vec_vrlw(vector unsigned int __a, vector unsigned int __b) {
6360*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b);
6361*67e74705SXin Li }
6362*67e74705SXin Li
6363*67e74705SXin Li /* vec_round */
6364*67e74705SXin Li
vec_round(vector float __a)6365*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_round(vector float __a) {
6366*67e74705SXin Li #ifdef __VSX__
6367*67e74705SXin Li return __builtin_vsx_xvrspi(__a);
6368*67e74705SXin Li #else
6369*67e74705SXin Li return __builtin_altivec_vrfin(__a);
6370*67e74705SXin Li #endif
6371*67e74705SXin Li }
6372*67e74705SXin Li
6373*67e74705SXin Li #ifdef __VSX__
vec_round(vector double __a)6374*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_round(vector double __a) {
6375*67e74705SXin Li return __builtin_vsx_xvrdpi(__a);
6376*67e74705SXin Li }
6377*67e74705SXin Li
6378*67e74705SXin Li /* vec_rint */
6379*67e74705SXin Li
vec_rint(vector float __a)6380*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_rint(vector float __a) {
6381*67e74705SXin Li return __builtin_vsx_xvrspic(__a);
6382*67e74705SXin Li }
6383*67e74705SXin Li
vec_rint(vector double __a)6384*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_rint(vector double __a) {
6385*67e74705SXin Li return __builtin_vsx_xvrdpic(__a);
6386*67e74705SXin Li }
6387*67e74705SXin Li
6388*67e74705SXin Li /* vec_nearbyint */
6389*67e74705SXin Li
vec_nearbyint(vector float __a)6390*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_nearbyint(vector float __a) {
6391*67e74705SXin Li return __builtin_vsx_xvrspi(__a);
6392*67e74705SXin Li }
6393*67e74705SXin Li
vec_nearbyint(vector double __a)6394*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_nearbyint(vector double __a) {
6395*67e74705SXin Li return __builtin_vsx_xvrdpi(__a);
6396*67e74705SXin Li }
6397*67e74705SXin Li #endif
6398*67e74705SXin Li
6399*67e74705SXin Li /* vec_vrfin */
6400*67e74705SXin Li
6401*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vrfin(vector float __a)6402*67e74705SXin Li vec_vrfin(vector float __a) {
6403*67e74705SXin Li return __builtin_altivec_vrfin(__a);
6404*67e74705SXin Li }
6405*67e74705SXin Li
6406*67e74705SXin Li /* vec_sqrt */
6407*67e74705SXin Li
6408*67e74705SXin Li #ifdef __VSX__
vec_sqrt(vector float __a)6409*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_sqrt(vector float __a) {
6410*67e74705SXin Li return __builtin_vsx_xvsqrtsp(__a);
6411*67e74705SXin Li }
6412*67e74705SXin Li
vec_sqrt(vector double __a)6413*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_sqrt(vector double __a) {
6414*67e74705SXin Li return __builtin_vsx_xvsqrtdp(__a);
6415*67e74705SXin Li }
6416*67e74705SXin Li #endif
6417*67e74705SXin Li
6418*67e74705SXin Li /* vec_rsqrte */
6419*67e74705SXin Li
vec_rsqrte(vector float __a)6420*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_rsqrte(vector float __a) {
6421*67e74705SXin Li #ifdef __VSX__
6422*67e74705SXin Li return __builtin_vsx_xvrsqrtesp(__a);
6423*67e74705SXin Li #else
6424*67e74705SXin Li return __builtin_altivec_vrsqrtefp(__a);
6425*67e74705SXin Li #endif
6426*67e74705SXin Li }
6427*67e74705SXin Li
6428*67e74705SXin Li #ifdef __VSX__
vec_rsqrte(vector double __a)6429*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_rsqrte(vector double __a) {
6430*67e74705SXin Li return __builtin_vsx_xvrsqrtedp(__a);
6431*67e74705SXin Li }
6432*67e74705SXin Li #endif
6433*67e74705SXin Li
6434*67e74705SXin Li /* vec_vrsqrtefp */
6435*67e74705SXin Li
6436*67e74705SXin Li static __inline__ __vector float __attribute__((__always_inline__))
vec_vrsqrtefp(vector float __a)6437*67e74705SXin Li vec_vrsqrtefp(vector float __a) {
6438*67e74705SXin Li return __builtin_altivec_vrsqrtefp(__a);
6439*67e74705SXin Li }
6440*67e74705SXin Li
6441*67e74705SXin Li /* vec_sel */
6442*67e74705SXin Li
6443*67e74705SXin Li #define __builtin_altivec_vsel_4si vec_sel
6444*67e74705SXin Li
vec_sel(vector signed char __a,vector signed char __b,vector unsigned char __c)6445*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai vec_sel(
6446*67e74705SXin Li vector signed char __a, vector signed char __b, vector unsigned char __c) {
6447*67e74705SXin Li return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
6448*67e74705SXin Li }
6449*67e74705SXin Li
6450*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_sel(vector signed char __a,vector signed char __b,vector bool char __c)6451*67e74705SXin Li vec_sel(vector signed char __a, vector signed char __b, vector bool char __c) {
6452*67e74705SXin Li return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
6453*67e74705SXin Li }
6454*67e74705SXin Li
6455*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_sel(vector unsigned char __a,vector unsigned char __b,vector unsigned char __c)6456*67e74705SXin Li vec_sel(vector unsigned char __a, vector unsigned char __b,
6457*67e74705SXin Li vector unsigned char __c) {
6458*67e74705SXin Li return (__a & ~__c) | (__b & __c);
6459*67e74705SXin Li }
6460*67e74705SXin Li
vec_sel(vector unsigned char __a,vector unsigned char __b,vector bool char __c)6461*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai vec_sel(
6462*67e74705SXin Li vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
6463*67e74705SXin Li return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
6464*67e74705SXin Li }
6465*67e74705SXin Li
6466*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_sel(vector bool char __a,vector bool char __b,vector unsigned char __c)6467*67e74705SXin Li vec_sel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
6468*67e74705SXin Li return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
6469*67e74705SXin Li }
6470*67e74705SXin Li
vec_sel(vector bool char __a,vector bool char __b,vector bool char __c)6471*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_sel(vector bool char __a,
6472*67e74705SXin Li vector bool char __b,
6473*67e74705SXin Li vector bool char __c) {
6474*67e74705SXin Li return (__a & ~__c) | (__b & __c);
6475*67e74705SXin Li }
6476*67e74705SXin Li
vec_sel(vector short __a,vector short __b,vector unsigned short __c)6477*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
6478*67e74705SXin Li vector short __b,
6479*67e74705SXin Li vector unsigned short __c) {
6480*67e74705SXin Li return (__a & ~(vector short)__c) | (__b & (vector short)__c);
6481*67e74705SXin Li }
6482*67e74705SXin Li
vec_sel(vector short __a,vector short __b,vector bool short __c)6483*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_sel(vector short __a,
6484*67e74705SXin Li vector short __b,
6485*67e74705SXin Li vector bool short __c) {
6486*67e74705SXin Li return (__a & ~(vector short)__c) | (__b & (vector short)__c);
6487*67e74705SXin Li }
6488*67e74705SXin Li
6489*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sel(vector unsigned short __a,vector unsigned short __b,vector unsigned short __c)6490*67e74705SXin Li vec_sel(vector unsigned short __a, vector unsigned short __b,
6491*67e74705SXin Li vector unsigned short __c) {
6492*67e74705SXin Li return (__a & ~__c) | (__b & __c);
6493*67e74705SXin Li }
6494*67e74705SXin Li
6495*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sel(vector unsigned short __a,vector unsigned short __b,vector bool short __c)6496*67e74705SXin Li vec_sel(vector unsigned short __a, vector unsigned short __b,
6497*67e74705SXin Li vector bool short __c) {
6498*67e74705SXin Li return (__a & ~(vector unsigned short)__c) |
6499*67e74705SXin Li (__b & (vector unsigned short)__c);
6500*67e74705SXin Li }
6501*67e74705SXin Li
vec_sel(vector bool short __a,vector bool short __b,vector unsigned short __c)6502*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai vec_sel(
6503*67e74705SXin Li vector bool short __a, vector bool short __b, vector unsigned short __c) {
6504*67e74705SXin Li return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
6505*67e74705SXin Li }
6506*67e74705SXin Li
6507*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_sel(vector bool short __a,vector bool short __b,vector bool short __c)6508*67e74705SXin Li vec_sel(vector bool short __a, vector bool short __b, vector bool short __c) {
6509*67e74705SXin Li return (__a & ~__c) | (__b & __c);
6510*67e74705SXin Li }
6511*67e74705SXin Li
vec_sel(vector int __a,vector int __b,vector unsigned int __c)6512*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
6513*67e74705SXin Li vector int __b,
6514*67e74705SXin Li vector unsigned int __c) {
6515*67e74705SXin Li return (__a & ~(vector int)__c) | (__b & (vector int)__c);
6516*67e74705SXin Li }
6517*67e74705SXin Li
vec_sel(vector int __a,vector int __b,vector bool int __c)6518*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sel(vector int __a,
6519*67e74705SXin Li vector int __b,
6520*67e74705SXin Li vector bool int __c) {
6521*67e74705SXin Li return (__a & ~(vector int)__c) | (__b & (vector int)__c);
6522*67e74705SXin Li }
6523*67e74705SXin Li
vec_sel(vector unsigned int __a,vector unsigned int __b,vector unsigned int __c)6524*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai vec_sel(
6525*67e74705SXin Li vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
6526*67e74705SXin Li return (__a & ~__c) | (__b & __c);
6527*67e74705SXin Li }
6528*67e74705SXin Li
6529*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_sel(vector unsigned int __a,vector unsigned int __b,vector bool int __c)6530*67e74705SXin Li vec_sel(vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
6531*67e74705SXin Li return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
6532*67e74705SXin Li }
6533*67e74705SXin Li
6534*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_sel(vector bool int __a,vector bool int __b,vector unsigned int __c)6535*67e74705SXin Li vec_sel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
6536*67e74705SXin Li return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
6537*67e74705SXin Li }
6538*67e74705SXin Li
vec_sel(vector bool int __a,vector bool int __b,vector bool int __c)6539*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_sel(vector bool int __a,
6540*67e74705SXin Li vector bool int __b,
6541*67e74705SXin Li vector bool int __c) {
6542*67e74705SXin Li return (__a & ~__c) | (__b & __c);
6543*67e74705SXin Li }
6544*67e74705SXin Li
vec_sel(vector float __a,vector float __b,vector unsigned int __c)6545*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
6546*67e74705SXin Li vector float __b,
6547*67e74705SXin Li vector unsigned int __c) {
6548*67e74705SXin Li vector int __res = ((vector int)__a & ~(vector int)__c) |
6549*67e74705SXin Li ((vector int)__b & (vector int)__c);
6550*67e74705SXin Li return (vector float)__res;
6551*67e74705SXin Li }
6552*67e74705SXin Li
vec_sel(vector float __a,vector float __b,vector bool int __c)6553*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_sel(vector float __a,
6554*67e74705SXin Li vector float __b,
6555*67e74705SXin Li vector bool int __c) {
6556*67e74705SXin Li vector int __res = ((vector int)__a & ~(vector int)__c) |
6557*67e74705SXin Li ((vector int)__b & (vector int)__c);
6558*67e74705SXin Li return (vector float)__res;
6559*67e74705SXin Li }
6560*67e74705SXin Li
6561*67e74705SXin Li #ifdef __VSX__
6562*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_sel(vector double __a,vector double __b,vector bool long long __c)6563*67e74705SXin Li vec_sel(vector double __a, vector double __b, vector bool long long __c) {
6564*67e74705SXin Li vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
6565*67e74705SXin Li ((vector long long)__b & (vector long long)__c);
6566*67e74705SXin Li return (vector double)__res;
6567*67e74705SXin Li }
6568*67e74705SXin Li
6569*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_sel(vector double __a,vector double __b,vector unsigned long long __c)6570*67e74705SXin Li vec_sel(vector double __a, vector double __b, vector unsigned long long __c) {
6571*67e74705SXin Li vector long long __res = ((vector long long)__a & ~(vector long long)__c) |
6572*67e74705SXin Li ((vector long long)__b & (vector long long)__c);
6573*67e74705SXin Li return (vector double)__res;
6574*67e74705SXin Li }
6575*67e74705SXin Li #endif
6576*67e74705SXin Li
6577*67e74705SXin Li /* vec_vsel */
6578*67e74705SXin Li
vec_vsel(vector signed char __a,vector signed char __b,vector unsigned char __c)6579*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai vec_vsel(
6580*67e74705SXin Li vector signed char __a, vector signed char __b, vector unsigned char __c) {
6581*67e74705SXin Li return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
6582*67e74705SXin Li }
6583*67e74705SXin Li
6584*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsel(vector signed char __a,vector signed char __b,vector bool char __c)6585*67e74705SXin Li vec_vsel(vector signed char __a, vector signed char __b, vector bool char __c) {
6586*67e74705SXin Li return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c);
6587*67e74705SXin Li }
6588*67e74705SXin Li
6589*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsel(vector unsigned char __a,vector unsigned char __b,vector unsigned char __c)6590*67e74705SXin Li vec_vsel(vector unsigned char __a, vector unsigned char __b,
6591*67e74705SXin Li vector unsigned char __c) {
6592*67e74705SXin Li return (__a & ~__c) | (__b & __c);
6593*67e74705SXin Li }
6594*67e74705SXin Li
vec_vsel(vector unsigned char __a,vector unsigned char __b,vector bool char __c)6595*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai vec_vsel(
6596*67e74705SXin Li vector unsigned char __a, vector unsigned char __b, vector bool char __c) {
6597*67e74705SXin Li return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c);
6598*67e74705SXin Li }
6599*67e74705SXin Li
6600*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_vsel(vector bool char __a,vector bool char __b,vector unsigned char __c)6601*67e74705SXin Li vec_vsel(vector bool char __a, vector bool char __b, vector unsigned char __c) {
6602*67e74705SXin Li return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c);
6603*67e74705SXin Li }
6604*67e74705SXin Li
vec_vsel(vector bool char __a,vector bool char __b,vector bool char __c)6605*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_vsel(vector bool char __a,
6606*67e74705SXin Li vector bool char __b,
6607*67e74705SXin Li vector bool char __c) {
6608*67e74705SXin Li return (__a & ~__c) | (__b & __c);
6609*67e74705SXin Li }
6610*67e74705SXin Li
6611*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai
vec_vsel(vector short __a,vector short __b,vector unsigned short __c)6612*67e74705SXin Li vec_vsel(vector short __a, vector short __b, vector unsigned short __c) {
6613*67e74705SXin Li return (__a & ~(vector short)__c) | (__b & (vector short)__c);
6614*67e74705SXin Li }
6615*67e74705SXin Li
vec_vsel(vector short __a,vector short __b,vector bool short __c)6616*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsel(vector short __a,
6617*67e74705SXin Li vector short __b,
6618*67e74705SXin Li vector bool short __c) {
6619*67e74705SXin Li return (__a & ~(vector short)__c) | (__b & (vector short)__c);
6620*67e74705SXin Li }
6621*67e74705SXin Li
6622*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsel(vector unsigned short __a,vector unsigned short __b,vector unsigned short __c)6623*67e74705SXin Li vec_vsel(vector unsigned short __a, vector unsigned short __b,
6624*67e74705SXin Li vector unsigned short __c) {
6625*67e74705SXin Li return (__a & ~__c) | (__b & __c);
6626*67e74705SXin Li }
6627*67e74705SXin Li
6628*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsel(vector unsigned short __a,vector unsigned short __b,vector bool short __c)6629*67e74705SXin Li vec_vsel(vector unsigned short __a, vector unsigned short __b,
6630*67e74705SXin Li vector bool short __c) {
6631*67e74705SXin Li return (__a & ~(vector unsigned short)__c) |
6632*67e74705SXin Li (__b & (vector unsigned short)__c);
6633*67e74705SXin Li }
6634*67e74705SXin Li
vec_vsel(vector bool short __a,vector bool short __b,vector unsigned short __c)6635*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai vec_vsel(
6636*67e74705SXin Li vector bool short __a, vector bool short __b, vector unsigned short __c) {
6637*67e74705SXin Li return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c);
6638*67e74705SXin Li }
6639*67e74705SXin Li
6640*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vsel(vector bool short __a,vector bool short __b,vector bool short __c)6641*67e74705SXin Li vec_vsel(vector bool short __a, vector bool short __b, vector bool short __c) {
6642*67e74705SXin Li return (__a & ~__c) | (__b & __c);
6643*67e74705SXin Li }
6644*67e74705SXin Li
vec_vsel(vector int __a,vector int __b,vector unsigned int __c)6645*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
6646*67e74705SXin Li vector int __b,
6647*67e74705SXin Li vector unsigned int __c) {
6648*67e74705SXin Li return (__a & ~(vector int)__c) | (__b & (vector int)__c);
6649*67e74705SXin Li }
6650*67e74705SXin Li
vec_vsel(vector int __a,vector int __b,vector bool int __c)6651*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsel(vector int __a,
6652*67e74705SXin Li vector int __b,
6653*67e74705SXin Li vector bool int __c) {
6654*67e74705SXin Li return (__a & ~(vector int)__c) | (__b & (vector int)__c);
6655*67e74705SXin Li }
6656*67e74705SXin Li
vec_vsel(vector unsigned int __a,vector unsigned int __b,vector unsigned int __c)6657*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
6658*67e74705SXin Li vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
6659*67e74705SXin Li return (__a & ~__c) | (__b & __c);
6660*67e74705SXin Li }
6661*67e74705SXin Li
vec_vsel(vector unsigned int __a,vector unsigned int __b,vector bool int __c)6662*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai vec_vsel(
6663*67e74705SXin Li vector unsigned int __a, vector unsigned int __b, vector bool int __c) {
6664*67e74705SXin Li return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c);
6665*67e74705SXin Li }
6666*67e74705SXin Li
6667*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_vsel(vector bool int __a,vector bool int __b,vector unsigned int __c)6668*67e74705SXin Li vec_vsel(vector bool int __a, vector bool int __b, vector unsigned int __c) {
6669*67e74705SXin Li return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c);
6670*67e74705SXin Li }
6671*67e74705SXin Li
vec_vsel(vector bool int __a,vector bool int __b,vector bool int __c)6672*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_vsel(vector bool int __a,
6673*67e74705SXin Li vector bool int __b,
6674*67e74705SXin Li vector bool int __c) {
6675*67e74705SXin Li return (__a & ~__c) | (__b & __c);
6676*67e74705SXin Li }
6677*67e74705SXin Li
vec_vsel(vector float __a,vector float __b,vector unsigned int __c)6678*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
6679*67e74705SXin Li vector float __b,
6680*67e74705SXin Li vector unsigned int __c) {
6681*67e74705SXin Li vector int __res = ((vector int)__a & ~(vector int)__c) |
6682*67e74705SXin Li ((vector int)__b & (vector int)__c);
6683*67e74705SXin Li return (vector float)__res;
6684*67e74705SXin Li }
6685*67e74705SXin Li
vec_vsel(vector float __a,vector float __b,vector bool int __c)6686*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vsel(vector float __a,
6687*67e74705SXin Li vector float __b,
6688*67e74705SXin Li vector bool int __c) {
6689*67e74705SXin Li vector int __res = ((vector int)__a & ~(vector int)__c) |
6690*67e74705SXin Li ((vector int)__b & (vector int)__c);
6691*67e74705SXin Li return (vector float)__res;
6692*67e74705SXin Li }
6693*67e74705SXin Li
6694*67e74705SXin Li /* vec_sl */
6695*67e74705SXin Li
6696*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_sl(vector signed char __a,vector unsigned char __b)6697*67e74705SXin Li vec_sl(vector signed char __a, vector unsigned char __b) {
6698*67e74705SXin Li return __a << (vector signed char)__b;
6699*67e74705SXin Li }
6700*67e74705SXin Li
6701*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_sl(vector unsigned char __a,vector unsigned char __b)6702*67e74705SXin Li vec_sl(vector unsigned char __a, vector unsigned char __b) {
6703*67e74705SXin Li return __a << __b;
6704*67e74705SXin Li }
6705*67e74705SXin Li
vec_sl(vector short __a,vector unsigned short __b)6706*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_sl(vector short __a,
6707*67e74705SXin Li vector unsigned short __b) {
6708*67e74705SXin Li return __a << (vector short)__b;
6709*67e74705SXin Li }
6710*67e74705SXin Li
6711*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sl(vector unsigned short __a,vector unsigned short __b)6712*67e74705SXin Li vec_sl(vector unsigned short __a, vector unsigned short __b) {
6713*67e74705SXin Li return __a << __b;
6714*67e74705SXin Li }
6715*67e74705SXin Li
vec_sl(vector int __a,vector unsigned int __b)6716*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sl(vector int __a,
6717*67e74705SXin Li vector unsigned int __b) {
6718*67e74705SXin Li return __a << (vector int)__b;
6719*67e74705SXin Li }
6720*67e74705SXin Li
6721*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_sl(vector unsigned int __a,vector unsigned int __b)6722*67e74705SXin Li vec_sl(vector unsigned int __a, vector unsigned int __b) {
6723*67e74705SXin Li return __a << __b;
6724*67e74705SXin Li }
6725*67e74705SXin Li
6726*67e74705SXin Li #ifdef __POWER8_VECTOR__
6727*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_sl(vector signed long long __a,vector unsigned long long __b)6728*67e74705SXin Li vec_sl(vector signed long long __a, vector unsigned long long __b) {
6729*67e74705SXin Li return __a << (vector long long)__b;
6730*67e74705SXin Li }
6731*67e74705SXin Li
6732*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_sl(vector unsigned long long __a,vector unsigned long long __b)6733*67e74705SXin Li vec_sl(vector unsigned long long __a, vector unsigned long long __b) {
6734*67e74705SXin Li return __a << __b;
6735*67e74705SXin Li }
6736*67e74705SXin Li #endif
6737*67e74705SXin Li
6738*67e74705SXin Li /* vec_vslb */
6739*67e74705SXin Li
6740*67e74705SXin Li #define __builtin_altivec_vslb vec_vslb
6741*67e74705SXin Li
6742*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vslb(vector signed char __a,vector unsigned char __b)6743*67e74705SXin Li vec_vslb(vector signed char __a, vector unsigned char __b) {
6744*67e74705SXin Li return vec_sl(__a, __b);
6745*67e74705SXin Li }
6746*67e74705SXin Li
6747*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vslb(vector unsigned char __a,vector unsigned char __b)6748*67e74705SXin Li vec_vslb(vector unsigned char __a, vector unsigned char __b) {
6749*67e74705SXin Li return vec_sl(__a, __b);
6750*67e74705SXin Li }
6751*67e74705SXin Li
6752*67e74705SXin Li /* vec_vslh */
6753*67e74705SXin Li
6754*67e74705SXin Li #define __builtin_altivec_vslh vec_vslh
6755*67e74705SXin Li
6756*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai
vec_vslh(vector short __a,vector unsigned short __b)6757*67e74705SXin Li vec_vslh(vector short __a, vector unsigned short __b) {
6758*67e74705SXin Li return vec_sl(__a, __b);
6759*67e74705SXin Li }
6760*67e74705SXin Li
6761*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vslh(vector unsigned short __a,vector unsigned short __b)6762*67e74705SXin Li vec_vslh(vector unsigned short __a, vector unsigned short __b) {
6763*67e74705SXin Li return vec_sl(__a, __b);
6764*67e74705SXin Li }
6765*67e74705SXin Li
6766*67e74705SXin Li /* vec_vslw */
6767*67e74705SXin Li
6768*67e74705SXin Li #define __builtin_altivec_vslw vec_vslw
6769*67e74705SXin Li
vec_vslw(vector int __a,vector unsigned int __b)6770*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vslw(vector int __a,
6771*67e74705SXin Li vector unsigned int __b) {
6772*67e74705SXin Li return vec_sl(__a, __b);
6773*67e74705SXin Li }
6774*67e74705SXin Li
6775*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vslw(vector unsigned int __a,vector unsigned int __b)6776*67e74705SXin Li vec_vslw(vector unsigned int __a, vector unsigned int __b) {
6777*67e74705SXin Li return vec_sl(__a, __b);
6778*67e74705SXin Li }
6779*67e74705SXin Li
6780*67e74705SXin Li /* vec_sld */
6781*67e74705SXin Li
6782*67e74705SXin Li #define __builtin_altivec_vsldoi_4si vec_sld
6783*67e74705SXin Li
vec_sld(vector signed char __a,vector signed char __b,unsigned const int __c)6784*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai vec_sld(
6785*67e74705SXin Li vector signed char __a, vector signed char __b, unsigned const int __c) {
6786*67e74705SXin Li unsigned char __d = __c & 0x0F;
6787*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6788*67e74705SXin Li return vec_perm(
6789*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
6790*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
6791*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
6792*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
6793*67e74705SXin Li #else
6794*67e74705SXin Li return vec_perm(
6795*67e74705SXin Li __a, __b,
6796*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
6797*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
6798*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
6799*67e74705SXin Li #endif
6800*67e74705SXin Li }
6801*67e74705SXin Li
6802*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_sld(vector unsigned char __a,vector unsigned char __b,unsigned const int __c)6803*67e74705SXin Li vec_sld(vector unsigned char __a, vector unsigned char __b,
6804*67e74705SXin Li unsigned const int __c) {
6805*67e74705SXin Li unsigned char __d = __c & 0x0F;
6806*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6807*67e74705SXin Li return vec_perm(
6808*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
6809*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
6810*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
6811*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
6812*67e74705SXin Li #else
6813*67e74705SXin Li return vec_perm(
6814*67e74705SXin Li __a, __b,
6815*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
6816*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
6817*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
6818*67e74705SXin Li #endif
6819*67e74705SXin Li }
6820*67e74705SXin Li
6821*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_sld(vector bool char __a,vector bool char __b,unsigned const int __c)6822*67e74705SXin Li vec_sld(vector bool char __a, vector bool char __b, unsigned const int __c) {
6823*67e74705SXin Li unsigned char __d = __c & 0x0F;
6824*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6825*67e74705SXin Li return vec_perm(
6826*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
6827*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
6828*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
6829*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
6830*67e74705SXin Li #else
6831*67e74705SXin Li return vec_perm(
6832*67e74705SXin Li __a, __b,
6833*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
6834*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
6835*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
6836*67e74705SXin Li #endif
6837*67e74705SXin Li }
6838*67e74705SXin Li
vec_sld(vector signed short __a,vector signed short __b,unsigned const int __c)6839*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai vec_sld(
6840*67e74705SXin Li vector signed short __a, vector signed short __b, unsigned const int __c) {
6841*67e74705SXin Li unsigned char __d = __c & 0x0F;
6842*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6843*67e74705SXin Li return vec_perm(
6844*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
6845*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
6846*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
6847*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
6848*67e74705SXin Li #else
6849*67e74705SXin Li return vec_perm(
6850*67e74705SXin Li __a, __b,
6851*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
6852*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
6853*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
6854*67e74705SXin Li #endif
6855*67e74705SXin Li }
6856*67e74705SXin Li
6857*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sld(vector unsigned short __a,vector unsigned short __b,unsigned const int __c)6858*67e74705SXin Li vec_sld(vector unsigned short __a, vector unsigned short __b,
6859*67e74705SXin Li unsigned const int __c) {
6860*67e74705SXin Li unsigned char __d = __c & 0x0F;
6861*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6862*67e74705SXin Li return vec_perm(
6863*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
6864*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
6865*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
6866*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
6867*67e74705SXin Li #else
6868*67e74705SXin Li return vec_perm(
6869*67e74705SXin Li __a, __b,
6870*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
6871*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
6872*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
6873*67e74705SXin Li #endif
6874*67e74705SXin Li }
6875*67e74705SXin Li
6876*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_sld(vector bool short __a,vector bool short __b,unsigned const int __c)6877*67e74705SXin Li vec_sld(vector bool short __a, vector bool short __b, unsigned const int __c) {
6878*67e74705SXin Li unsigned char __d = __c & 0x0F;
6879*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6880*67e74705SXin Li return vec_perm(
6881*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
6882*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
6883*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
6884*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
6885*67e74705SXin Li #else
6886*67e74705SXin Li return vec_perm(
6887*67e74705SXin Li __a, __b,
6888*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
6889*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
6890*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
6891*67e74705SXin Li #endif
6892*67e74705SXin Li }
6893*67e74705SXin Li
vec_sld(vector pixel __a,vector pixel __b,unsigned const int __c)6894*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_sld(vector pixel __a,
6895*67e74705SXin Li vector pixel __b,
6896*67e74705SXin Li unsigned const int __c) {
6897*67e74705SXin Li unsigned char __d = __c & 0x0F;
6898*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6899*67e74705SXin Li return vec_perm(
6900*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
6901*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
6902*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
6903*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
6904*67e74705SXin Li #else
6905*67e74705SXin Li return vec_perm(
6906*67e74705SXin Li __a, __b,
6907*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
6908*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
6909*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
6910*67e74705SXin Li #endif
6911*67e74705SXin Li }
6912*67e74705SXin Li
6913*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_sld(vector signed int __a,vector signed int __b,unsigned const int __c)6914*67e74705SXin Li vec_sld(vector signed int __a, vector signed int __b, unsigned const int __c) {
6915*67e74705SXin Li unsigned char __d = __c & 0x0F;
6916*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6917*67e74705SXin Li return vec_perm(
6918*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
6919*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
6920*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
6921*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
6922*67e74705SXin Li #else
6923*67e74705SXin Li return vec_perm(
6924*67e74705SXin Li __a, __b,
6925*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
6926*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
6927*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
6928*67e74705SXin Li #endif
6929*67e74705SXin Li }
6930*67e74705SXin Li
vec_sld(vector unsigned int __a,vector unsigned int __b,unsigned const int __c)6931*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai vec_sld(
6932*67e74705SXin Li vector unsigned int __a, vector unsigned int __b, unsigned const int __c) {
6933*67e74705SXin Li unsigned char __d = __c & 0x0F;
6934*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6935*67e74705SXin Li return vec_perm(
6936*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
6937*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
6938*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
6939*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
6940*67e74705SXin Li #else
6941*67e74705SXin Li return vec_perm(
6942*67e74705SXin Li __a, __b,
6943*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
6944*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
6945*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
6946*67e74705SXin Li #endif
6947*67e74705SXin Li }
6948*67e74705SXin Li
vec_sld(vector bool int __a,vector bool int __b,unsigned const int __c)6949*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_sld(vector bool int __a,
6950*67e74705SXin Li vector bool int __b,
6951*67e74705SXin Li unsigned const int __c) {
6952*67e74705SXin Li unsigned char __d = __c & 0x0F;
6953*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6954*67e74705SXin Li return vec_perm(
6955*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
6956*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
6957*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
6958*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
6959*67e74705SXin Li #else
6960*67e74705SXin Li return vec_perm(
6961*67e74705SXin Li __a, __b,
6962*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
6963*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
6964*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
6965*67e74705SXin Li #endif
6966*67e74705SXin Li }
6967*67e74705SXin Li
vec_sld(vector float __a,vector float __b,unsigned const int __c)6968*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_sld(vector float __a,
6969*67e74705SXin Li vector float __b,
6970*67e74705SXin Li unsigned const int __c) {
6971*67e74705SXin Li unsigned char __d = __c & 0x0F;
6972*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6973*67e74705SXin Li return vec_perm(
6974*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
6975*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
6976*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
6977*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
6978*67e74705SXin Li #else
6979*67e74705SXin Li return vec_perm(
6980*67e74705SXin Li __a, __b,
6981*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
6982*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
6983*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
6984*67e74705SXin Li #endif
6985*67e74705SXin Li }
6986*67e74705SXin Li
6987*67e74705SXin Li /* vec_vsldoi */
6988*67e74705SXin Li
6989*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsldoi(vector signed char __a,vector signed char __b,unsigned char __c)6990*67e74705SXin Li vec_vsldoi(vector signed char __a, vector signed char __b, unsigned char __c) {
6991*67e74705SXin Li unsigned char __d = __c & 0x0F;
6992*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
6993*67e74705SXin Li return vec_perm(
6994*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
6995*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
6996*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
6997*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
6998*67e74705SXin Li #else
6999*67e74705SXin Li return vec_perm(
7000*67e74705SXin Li __a, __b,
7001*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
7002*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
7003*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
7004*67e74705SXin Li #endif
7005*67e74705SXin Li }
7006*67e74705SXin Li
vec_vsldoi(vector unsigned char __a,vector unsigned char __b,unsigned char __c)7007*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai vec_vsldoi(
7008*67e74705SXin Li vector unsigned char __a, vector unsigned char __b, unsigned char __c) {
7009*67e74705SXin Li unsigned char __d = __c & 0x0F;
7010*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
7011*67e74705SXin Li return vec_perm(
7012*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
7013*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
7014*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
7015*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
7016*67e74705SXin Li #else
7017*67e74705SXin Li return vec_perm(
7018*67e74705SXin Li __a, __b,
7019*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
7020*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
7021*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
7022*67e74705SXin Li #endif
7023*67e74705SXin Li }
7024*67e74705SXin Li
vec_vsldoi(vector short __a,vector short __b,unsigned char __c)7025*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsldoi(vector short __a,
7026*67e74705SXin Li vector short __b,
7027*67e74705SXin Li unsigned char __c) {
7028*67e74705SXin Li unsigned char __d = __c & 0x0F;
7029*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
7030*67e74705SXin Li return vec_perm(
7031*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
7032*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
7033*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
7034*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
7035*67e74705SXin Li #else
7036*67e74705SXin Li return vec_perm(
7037*67e74705SXin Li __a, __b,
7038*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
7039*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
7040*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
7041*67e74705SXin Li #endif
7042*67e74705SXin Li }
7043*67e74705SXin Li
vec_vsldoi(vector unsigned short __a,vector unsigned short __b,unsigned char __c)7044*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai vec_vsldoi(
7045*67e74705SXin Li vector unsigned short __a, vector unsigned short __b, unsigned char __c) {
7046*67e74705SXin Li unsigned char __d = __c & 0x0F;
7047*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
7048*67e74705SXin Li return vec_perm(
7049*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
7050*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
7051*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
7052*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
7053*67e74705SXin Li #else
7054*67e74705SXin Li return vec_perm(
7055*67e74705SXin Li __a, __b,
7056*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
7057*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
7058*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
7059*67e74705SXin Li #endif
7060*67e74705SXin Li }
7061*67e74705SXin Li
vec_vsldoi(vector pixel __a,vector pixel __b,unsigned char __c)7062*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vsldoi(vector pixel __a,
7063*67e74705SXin Li vector pixel __b,
7064*67e74705SXin Li unsigned char __c) {
7065*67e74705SXin Li unsigned char __d = __c & 0x0F;
7066*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
7067*67e74705SXin Li return vec_perm(
7068*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
7069*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
7070*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
7071*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
7072*67e74705SXin Li #else
7073*67e74705SXin Li return vec_perm(
7074*67e74705SXin Li __a, __b,
7075*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
7076*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
7077*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
7078*67e74705SXin Li #endif
7079*67e74705SXin Li }
7080*67e74705SXin Li
vec_vsldoi(vector int __a,vector int __b,unsigned char __c)7081*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsldoi(vector int __a,
7082*67e74705SXin Li vector int __b,
7083*67e74705SXin Li unsigned char __c) {
7084*67e74705SXin Li unsigned char __d = __c & 0x0F;
7085*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
7086*67e74705SXin Li return vec_perm(
7087*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
7088*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
7089*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
7090*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
7091*67e74705SXin Li #else
7092*67e74705SXin Li return vec_perm(
7093*67e74705SXin Li __a, __b,
7094*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
7095*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
7096*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
7097*67e74705SXin Li #endif
7098*67e74705SXin Li }
7099*67e74705SXin Li
vec_vsldoi(vector unsigned int __a,vector unsigned int __b,unsigned char __c)7100*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai vec_vsldoi(
7101*67e74705SXin Li vector unsigned int __a, vector unsigned int __b, unsigned char __c) {
7102*67e74705SXin Li unsigned char __d = __c & 0x0F;
7103*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
7104*67e74705SXin Li return vec_perm(
7105*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
7106*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
7107*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
7108*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
7109*67e74705SXin Li #else
7110*67e74705SXin Li return vec_perm(
7111*67e74705SXin Li __a, __b,
7112*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
7113*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
7114*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
7115*67e74705SXin Li #endif
7116*67e74705SXin Li }
7117*67e74705SXin Li
vec_vsldoi(vector float __a,vector float __b,unsigned char __c)7118*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vsldoi(vector float __a,
7119*67e74705SXin Li vector float __b,
7120*67e74705SXin Li unsigned char __c) {
7121*67e74705SXin Li unsigned char __d = __c & 0x0F;
7122*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
7123*67e74705SXin Li return vec_perm(
7124*67e74705SXin Li __b, __a, (vector unsigned char)(16 - __d, 17 - __d, 18 - __d, 19 - __d,
7125*67e74705SXin Li 20 - __d, 21 - __d, 22 - __d, 23 - __d,
7126*67e74705SXin Li 24 - __d, 25 - __d, 26 - __d, 27 - __d,
7127*67e74705SXin Li 28 - __d, 29 - __d, 30 - __d, 31 - __d));
7128*67e74705SXin Li #else
7129*67e74705SXin Li return vec_perm(
7130*67e74705SXin Li __a, __b,
7131*67e74705SXin Li (vector unsigned char)(__d, __d + 1, __d + 2, __d + 3, __d + 4, __d + 5,
7132*67e74705SXin Li __d + 6, __d + 7, __d + 8, __d + 9, __d + 10,
7133*67e74705SXin Li __d + 11, __d + 12, __d + 13, __d + 14, __d + 15));
7134*67e74705SXin Li #endif
7135*67e74705SXin Li }
7136*67e74705SXin Li
7137*67e74705SXin Li /* vec_sll */
7138*67e74705SXin Li
7139*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_sll(vector signed char __a,vector unsigned char __b)7140*67e74705SXin Li vec_sll(vector signed char __a, vector unsigned char __b) {
7141*67e74705SXin Li return (vector signed char)__builtin_altivec_vsl((vector int)__a,
7142*67e74705SXin Li (vector int)__b);
7143*67e74705SXin Li }
7144*67e74705SXin Li
7145*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_sll(vector signed char __a,vector unsigned short __b)7146*67e74705SXin Li vec_sll(vector signed char __a, vector unsigned short __b) {
7147*67e74705SXin Li return (vector signed char)__builtin_altivec_vsl((vector int)__a,
7148*67e74705SXin Li (vector int)__b);
7149*67e74705SXin Li }
7150*67e74705SXin Li
7151*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_sll(vector signed char __a,vector unsigned int __b)7152*67e74705SXin Li vec_sll(vector signed char __a, vector unsigned int __b) {
7153*67e74705SXin Li return (vector signed char)__builtin_altivec_vsl((vector int)__a,
7154*67e74705SXin Li (vector int)__b);
7155*67e74705SXin Li }
7156*67e74705SXin Li
7157*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_sll(vector unsigned char __a,vector unsigned char __b)7158*67e74705SXin Li vec_sll(vector unsigned char __a, vector unsigned char __b) {
7159*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
7160*67e74705SXin Li (vector int)__b);
7161*67e74705SXin Li }
7162*67e74705SXin Li
7163*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_sll(vector unsigned char __a,vector unsigned short __b)7164*67e74705SXin Li vec_sll(vector unsigned char __a, vector unsigned short __b) {
7165*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
7166*67e74705SXin Li (vector int)__b);
7167*67e74705SXin Li }
7168*67e74705SXin Li
7169*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_sll(vector unsigned char __a,vector unsigned int __b)7170*67e74705SXin Li vec_sll(vector unsigned char __a, vector unsigned int __b) {
7171*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
7172*67e74705SXin Li (vector int)__b);
7173*67e74705SXin Li }
7174*67e74705SXin Li
7175*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_sll(vector bool char __a,vector unsigned char __b)7176*67e74705SXin Li vec_sll(vector bool char __a, vector unsigned char __b) {
7177*67e74705SXin Li return (vector bool char)__builtin_altivec_vsl((vector int)__a,
7178*67e74705SXin Li (vector int)__b);
7179*67e74705SXin Li }
7180*67e74705SXin Li
7181*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_sll(vector bool char __a,vector unsigned short __b)7182*67e74705SXin Li vec_sll(vector bool char __a, vector unsigned short __b) {
7183*67e74705SXin Li return (vector bool char)__builtin_altivec_vsl((vector int)__a,
7184*67e74705SXin Li (vector int)__b);
7185*67e74705SXin Li }
7186*67e74705SXin Li
7187*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_sll(vector bool char __a,vector unsigned int __b)7188*67e74705SXin Li vec_sll(vector bool char __a, vector unsigned int __b) {
7189*67e74705SXin Li return (vector bool char)__builtin_altivec_vsl((vector int)__a,
7190*67e74705SXin Li (vector int)__b);
7191*67e74705SXin Li }
7192*67e74705SXin Li
vec_sll(vector short __a,vector unsigned char __b)7193*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
7194*67e74705SXin Li vector unsigned char __b) {
7195*67e74705SXin Li return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
7196*67e74705SXin Li }
7197*67e74705SXin Li
vec_sll(vector short __a,vector unsigned short __b)7198*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
7199*67e74705SXin Li vector unsigned short __b) {
7200*67e74705SXin Li return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
7201*67e74705SXin Li }
7202*67e74705SXin Li
vec_sll(vector short __a,vector unsigned int __b)7203*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_sll(vector short __a,
7204*67e74705SXin Li vector unsigned int __b) {
7205*67e74705SXin Li return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
7206*67e74705SXin Li }
7207*67e74705SXin Li
7208*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sll(vector unsigned short __a,vector unsigned char __b)7209*67e74705SXin Li vec_sll(vector unsigned short __a, vector unsigned char __b) {
7210*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
7211*67e74705SXin Li (vector int)__b);
7212*67e74705SXin Li }
7213*67e74705SXin Li
7214*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sll(vector unsigned short __a,vector unsigned short __b)7215*67e74705SXin Li vec_sll(vector unsigned short __a, vector unsigned short __b) {
7216*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
7217*67e74705SXin Li (vector int)__b);
7218*67e74705SXin Li }
7219*67e74705SXin Li
7220*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sll(vector unsigned short __a,vector unsigned int __b)7221*67e74705SXin Li vec_sll(vector unsigned short __a, vector unsigned int __b) {
7222*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
7223*67e74705SXin Li (vector int)__b);
7224*67e74705SXin Li }
7225*67e74705SXin Li
7226*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_sll(vector bool short __a,vector unsigned char __b)7227*67e74705SXin Li vec_sll(vector bool short __a, vector unsigned char __b) {
7228*67e74705SXin Li return (vector bool short)__builtin_altivec_vsl((vector int)__a,
7229*67e74705SXin Li (vector int)__b);
7230*67e74705SXin Li }
7231*67e74705SXin Li
7232*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_sll(vector bool short __a,vector unsigned short __b)7233*67e74705SXin Li vec_sll(vector bool short __a, vector unsigned short __b) {
7234*67e74705SXin Li return (vector bool short)__builtin_altivec_vsl((vector int)__a,
7235*67e74705SXin Li (vector int)__b);
7236*67e74705SXin Li }
7237*67e74705SXin Li
7238*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_sll(vector bool short __a,vector unsigned int __b)7239*67e74705SXin Li vec_sll(vector bool short __a, vector unsigned int __b) {
7240*67e74705SXin Li return (vector bool short)__builtin_altivec_vsl((vector int)__a,
7241*67e74705SXin Li (vector int)__b);
7242*67e74705SXin Li }
7243*67e74705SXin Li
vec_sll(vector pixel __a,vector unsigned char __b)7244*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
7245*67e74705SXin Li vector unsigned char __b) {
7246*67e74705SXin Li return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
7247*67e74705SXin Li }
7248*67e74705SXin Li
vec_sll(vector pixel __a,vector unsigned short __b)7249*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
7250*67e74705SXin Li vector unsigned short __b) {
7251*67e74705SXin Li return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
7252*67e74705SXin Li }
7253*67e74705SXin Li
vec_sll(vector pixel __a,vector unsigned int __b)7254*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_sll(vector pixel __a,
7255*67e74705SXin Li vector unsigned int __b) {
7256*67e74705SXin Li return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
7257*67e74705SXin Li }
7258*67e74705SXin Li
vec_sll(vector int __a,vector unsigned char __b)7259*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
7260*67e74705SXin Li vector unsigned char __b) {
7261*67e74705SXin Li return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
7262*67e74705SXin Li }
7263*67e74705SXin Li
vec_sll(vector int __a,vector unsigned short __b)7264*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
7265*67e74705SXin Li vector unsigned short __b) {
7266*67e74705SXin Li return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
7267*67e74705SXin Li }
7268*67e74705SXin Li
vec_sll(vector int __a,vector unsigned int __b)7269*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sll(vector int __a,
7270*67e74705SXin Li vector unsigned int __b) {
7271*67e74705SXin Li return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
7272*67e74705SXin Li }
7273*67e74705SXin Li
7274*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_sll(vector unsigned int __a,vector unsigned char __b)7275*67e74705SXin Li vec_sll(vector unsigned int __a, vector unsigned char __b) {
7276*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
7277*67e74705SXin Li (vector int)__b);
7278*67e74705SXin Li }
7279*67e74705SXin Li
7280*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_sll(vector unsigned int __a,vector unsigned short __b)7281*67e74705SXin Li vec_sll(vector unsigned int __a, vector unsigned short __b) {
7282*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
7283*67e74705SXin Li (vector int)__b);
7284*67e74705SXin Li }
7285*67e74705SXin Li
7286*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_sll(vector unsigned int __a,vector unsigned int __b)7287*67e74705SXin Li vec_sll(vector unsigned int __a, vector unsigned int __b) {
7288*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
7289*67e74705SXin Li (vector int)__b);
7290*67e74705SXin Li }
7291*67e74705SXin Li
7292*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_sll(vector bool int __a,vector unsigned char __b)7293*67e74705SXin Li vec_sll(vector bool int __a, vector unsigned char __b) {
7294*67e74705SXin Li return (vector bool int)__builtin_altivec_vsl((vector int)__a,
7295*67e74705SXin Li (vector int)__b);
7296*67e74705SXin Li }
7297*67e74705SXin Li
7298*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_sll(vector bool int __a,vector unsigned short __b)7299*67e74705SXin Li vec_sll(vector bool int __a, vector unsigned short __b) {
7300*67e74705SXin Li return (vector bool int)__builtin_altivec_vsl((vector int)__a,
7301*67e74705SXin Li (vector int)__b);
7302*67e74705SXin Li }
7303*67e74705SXin Li
7304*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_sll(vector bool int __a,vector unsigned int __b)7305*67e74705SXin Li vec_sll(vector bool int __a, vector unsigned int __b) {
7306*67e74705SXin Li return (vector bool int)__builtin_altivec_vsl((vector int)__a,
7307*67e74705SXin Li (vector int)__b);
7308*67e74705SXin Li }
7309*67e74705SXin Li
7310*67e74705SXin Li /* vec_vsl */
7311*67e74705SXin Li
7312*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsl(vector signed char __a,vector unsigned char __b)7313*67e74705SXin Li vec_vsl(vector signed char __a, vector unsigned char __b) {
7314*67e74705SXin Li return (vector signed char)__builtin_altivec_vsl((vector int)__a,
7315*67e74705SXin Li (vector int)__b);
7316*67e74705SXin Li }
7317*67e74705SXin Li
7318*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsl(vector signed char __a,vector unsigned short __b)7319*67e74705SXin Li vec_vsl(vector signed char __a, vector unsigned short __b) {
7320*67e74705SXin Li return (vector signed char)__builtin_altivec_vsl((vector int)__a,
7321*67e74705SXin Li (vector int)__b);
7322*67e74705SXin Li }
7323*67e74705SXin Li
7324*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsl(vector signed char __a,vector unsigned int __b)7325*67e74705SXin Li vec_vsl(vector signed char __a, vector unsigned int __b) {
7326*67e74705SXin Li return (vector signed char)__builtin_altivec_vsl((vector int)__a,
7327*67e74705SXin Li (vector int)__b);
7328*67e74705SXin Li }
7329*67e74705SXin Li
7330*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsl(vector unsigned char __a,vector unsigned char __b)7331*67e74705SXin Li vec_vsl(vector unsigned char __a, vector unsigned char __b) {
7332*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
7333*67e74705SXin Li (vector int)__b);
7334*67e74705SXin Li }
7335*67e74705SXin Li
7336*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsl(vector unsigned char __a,vector unsigned short __b)7337*67e74705SXin Li vec_vsl(vector unsigned char __a, vector unsigned short __b) {
7338*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
7339*67e74705SXin Li (vector int)__b);
7340*67e74705SXin Li }
7341*67e74705SXin Li
7342*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsl(vector unsigned char __a,vector unsigned int __b)7343*67e74705SXin Li vec_vsl(vector unsigned char __a, vector unsigned int __b) {
7344*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsl((vector int)__a,
7345*67e74705SXin Li (vector int)__b);
7346*67e74705SXin Li }
7347*67e74705SXin Li
7348*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_vsl(vector bool char __a,vector unsigned char __b)7349*67e74705SXin Li vec_vsl(vector bool char __a, vector unsigned char __b) {
7350*67e74705SXin Li return (vector bool char)__builtin_altivec_vsl((vector int)__a,
7351*67e74705SXin Li (vector int)__b);
7352*67e74705SXin Li }
7353*67e74705SXin Li
7354*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_vsl(vector bool char __a,vector unsigned short __b)7355*67e74705SXin Li vec_vsl(vector bool char __a, vector unsigned short __b) {
7356*67e74705SXin Li return (vector bool char)__builtin_altivec_vsl((vector int)__a,
7357*67e74705SXin Li (vector int)__b);
7358*67e74705SXin Li }
7359*67e74705SXin Li
7360*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_vsl(vector bool char __a,vector unsigned int __b)7361*67e74705SXin Li vec_vsl(vector bool char __a, vector unsigned int __b) {
7362*67e74705SXin Li return (vector bool char)__builtin_altivec_vsl((vector int)__a,
7363*67e74705SXin Li (vector int)__b);
7364*67e74705SXin Li }
7365*67e74705SXin Li
vec_vsl(vector short __a,vector unsigned char __b)7366*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
7367*67e74705SXin Li vector unsigned char __b) {
7368*67e74705SXin Li return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
7369*67e74705SXin Li }
7370*67e74705SXin Li
vec_vsl(vector short __a,vector unsigned short __b)7371*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
7372*67e74705SXin Li vector unsigned short __b) {
7373*67e74705SXin Li return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
7374*67e74705SXin Li }
7375*67e74705SXin Li
vec_vsl(vector short __a,vector unsigned int __b)7376*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsl(vector short __a,
7377*67e74705SXin Li vector unsigned int __b) {
7378*67e74705SXin Li return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
7379*67e74705SXin Li }
7380*67e74705SXin Li
7381*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsl(vector unsigned short __a,vector unsigned char __b)7382*67e74705SXin Li vec_vsl(vector unsigned short __a, vector unsigned char __b) {
7383*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
7384*67e74705SXin Li (vector int)__b);
7385*67e74705SXin Li }
7386*67e74705SXin Li
7387*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsl(vector unsigned short __a,vector unsigned short __b)7388*67e74705SXin Li vec_vsl(vector unsigned short __a, vector unsigned short __b) {
7389*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
7390*67e74705SXin Li (vector int)__b);
7391*67e74705SXin Li }
7392*67e74705SXin Li
7393*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsl(vector unsigned short __a,vector unsigned int __b)7394*67e74705SXin Li vec_vsl(vector unsigned short __a, vector unsigned int __b) {
7395*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsl((vector int)__a,
7396*67e74705SXin Li (vector int)__b);
7397*67e74705SXin Li }
7398*67e74705SXin Li
7399*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vsl(vector bool short __a,vector unsigned char __b)7400*67e74705SXin Li vec_vsl(vector bool short __a, vector unsigned char __b) {
7401*67e74705SXin Li return (vector bool short)__builtin_altivec_vsl((vector int)__a,
7402*67e74705SXin Li (vector int)__b);
7403*67e74705SXin Li }
7404*67e74705SXin Li
7405*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vsl(vector bool short __a,vector unsigned short __b)7406*67e74705SXin Li vec_vsl(vector bool short __a, vector unsigned short __b) {
7407*67e74705SXin Li return (vector bool short)__builtin_altivec_vsl((vector int)__a,
7408*67e74705SXin Li (vector int)__b);
7409*67e74705SXin Li }
7410*67e74705SXin Li
7411*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vsl(vector bool short __a,vector unsigned int __b)7412*67e74705SXin Li vec_vsl(vector bool short __a, vector unsigned int __b) {
7413*67e74705SXin Li return (vector bool short)__builtin_altivec_vsl((vector int)__a,
7414*67e74705SXin Li (vector int)__b);
7415*67e74705SXin Li }
7416*67e74705SXin Li
vec_vsl(vector pixel __a,vector unsigned char __b)7417*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
7418*67e74705SXin Li vector unsigned char __b) {
7419*67e74705SXin Li return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
7420*67e74705SXin Li }
7421*67e74705SXin Li
vec_vsl(vector pixel __a,vector unsigned short __b)7422*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
7423*67e74705SXin Li vector unsigned short __b) {
7424*67e74705SXin Li return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
7425*67e74705SXin Li }
7426*67e74705SXin Li
vec_vsl(vector pixel __a,vector unsigned int __b)7427*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vsl(vector pixel __a,
7428*67e74705SXin Li vector unsigned int __b) {
7429*67e74705SXin Li return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b);
7430*67e74705SXin Li }
7431*67e74705SXin Li
vec_vsl(vector int __a,vector unsigned char __b)7432*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
7433*67e74705SXin Li vector unsigned char __b) {
7434*67e74705SXin Li return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
7435*67e74705SXin Li }
7436*67e74705SXin Li
vec_vsl(vector int __a,vector unsigned short __b)7437*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
7438*67e74705SXin Li vector unsigned short __b) {
7439*67e74705SXin Li return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
7440*67e74705SXin Li }
7441*67e74705SXin Li
vec_vsl(vector int __a,vector unsigned int __b)7442*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsl(vector int __a,
7443*67e74705SXin Li vector unsigned int __b) {
7444*67e74705SXin Li return (vector int)__builtin_altivec_vsl(__a, (vector int)__b);
7445*67e74705SXin Li }
7446*67e74705SXin Li
7447*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsl(vector unsigned int __a,vector unsigned char __b)7448*67e74705SXin Li vec_vsl(vector unsigned int __a, vector unsigned char __b) {
7449*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
7450*67e74705SXin Li (vector int)__b);
7451*67e74705SXin Li }
7452*67e74705SXin Li
7453*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsl(vector unsigned int __a,vector unsigned short __b)7454*67e74705SXin Li vec_vsl(vector unsigned int __a, vector unsigned short __b) {
7455*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
7456*67e74705SXin Li (vector int)__b);
7457*67e74705SXin Li }
7458*67e74705SXin Li
7459*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsl(vector unsigned int __a,vector unsigned int __b)7460*67e74705SXin Li vec_vsl(vector unsigned int __a, vector unsigned int __b) {
7461*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsl((vector int)__a,
7462*67e74705SXin Li (vector int)__b);
7463*67e74705SXin Li }
7464*67e74705SXin Li
7465*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_vsl(vector bool int __a,vector unsigned char __b)7466*67e74705SXin Li vec_vsl(vector bool int __a, vector unsigned char __b) {
7467*67e74705SXin Li return (vector bool int)__builtin_altivec_vsl((vector int)__a,
7468*67e74705SXin Li (vector int)__b);
7469*67e74705SXin Li }
7470*67e74705SXin Li
7471*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_vsl(vector bool int __a,vector unsigned short __b)7472*67e74705SXin Li vec_vsl(vector bool int __a, vector unsigned short __b) {
7473*67e74705SXin Li return (vector bool int)__builtin_altivec_vsl((vector int)__a,
7474*67e74705SXin Li (vector int)__b);
7475*67e74705SXin Li }
7476*67e74705SXin Li
7477*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_vsl(vector bool int __a,vector unsigned int __b)7478*67e74705SXin Li vec_vsl(vector bool int __a, vector unsigned int __b) {
7479*67e74705SXin Li return (vector bool int)__builtin_altivec_vsl((vector int)__a,
7480*67e74705SXin Li (vector int)__b);
7481*67e74705SXin Li }
7482*67e74705SXin Li
7483*67e74705SXin Li /* vec_slo */
7484*67e74705SXin Li
7485*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_slo(vector signed char __a,vector signed char __b)7486*67e74705SXin Li vec_slo(vector signed char __a, vector signed char __b) {
7487*67e74705SXin Li return (vector signed char)__builtin_altivec_vslo((vector int)__a,
7488*67e74705SXin Li (vector int)__b);
7489*67e74705SXin Li }
7490*67e74705SXin Li
7491*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_slo(vector signed char __a,vector unsigned char __b)7492*67e74705SXin Li vec_slo(vector signed char __a, vector unsigned char __b) {
7493*67e74705SXin Li return (vector signed char)__builtin_altivec_vslo((vector int)__a,
7494*67e74705SXin Li (vector int)__b);
7495*67e74705SXin Li }
7496*67e74705SXin Li
7497*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_slo(vector unsigned char __a,vector signed char __b)7498*67e74705SXin Li vec_slo(vector unsigned char __a, vector signed char __b) {
7499*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
7500*67e74705SXin Li (vector int)__b);
7501*67e74705SXin Li }
7502*67e74705SXin Li
7503*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_slo(vector unsigned char __a,vector unsigned char __b)7504*67e74705SXin Li vec_slo(vector unsigned char __a, vector unsigned char __b) {
7505*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
7506*67e74705SXin Li (vector int)__b);
7507*67e74705SXin Li }
7508*67e74705SXin Li
vec_slo(vector short __a,vector signed char __b)7509*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
7510*67e74705SXin Li vector signed char __b) {
7511*67e74705SXin Li return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
7512*67e74705SXin Li }
7513*67e74705SXin Li
vec_slo(vector short __a,vector unsigned char __b)7514*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_slo(vector short __a,
7515*67e74705SXin Li vector unsigned char __b) {
7516*67e74705SXin Li return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
7517*67e74705SXin Li }
7518*67e74705SXin Li
7519*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_slo(vector unsigned short __a,vector signed char __b)7520*67e74705SXin Li vec_slo(vector unsigned short __a, vector signed char __b) {
7521*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
7522*67e74705SXin Li (vector int)__b);
7523*67e74705SXin Li }
7524*67e74705SXin Li
7525*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_slo(vector unsigned short __a,vector unsigned char __b)7526*67e74705SXin Li vec_slo(vector unsigned short __a, vector unsigned char __b) {
7527*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
7528*67e74705SXin Li (vector int)__b);
7529*67e74705SXin Li }
7530*67e74705SXin Li
vec_slo(vector pixel __a,vector signed char __b)7531*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
7532*67e74705SXin Li vector signed char __b) {
7533*67e74705SXin Li return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
7534*67e74705SXin Li }
7535*67e74705SXin Li
vec_slo(vector pixel __a,vector unsigned char __b)7536*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_slo(vector pixel __a,
7537*67e74705SXin Li vector unsigned char __b) {
7538*67e74705SXin Li return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
7539*67e74705SXin Li }
7540*67e74705SXin Li
vec_slo(vector int __a,vector signed char __b)7541*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
7542*67e74705SXin Li vector signed char __b) {
7543*67e74705SXin Li return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
7544*67e74705SXin Li }
7545*67e74705SXin Li
vec_slo(vector int __a,vector unsigned char __b)7546*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_slo(vector int __a,
7547*67e74705SXin Li vector unsigned char __b) {
7548*67e74705SXin Li return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
7549*67e74705SXin Li }
7550*67e74705SXin Li
7551*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_slo(vector unsigned int __a,vector signed char __b)7552*67e74705SXin Li vec_slo(vector unsigned int __a, vector signed char __b) {
7553*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
7554*67e74705SXin Li (vector int)__b);
7555*67e74705SXin Li }
7556*67e74705SXin Li
7557*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_slo(vector unsigned int __a,vector unsigned char __b)7558*67e74705SXin Li vec_slo(vector unsigned int __a, vector unsigned char __b) {
7559*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
7560*67e74705SXin Li (vector int)__b);
7561*67e74705SXin Li }
7562*67e74705SXin Li
vec_slo(vector float __a,vector signed char __b)7563*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
7564*67e74705SXin Li vector signed char __b) {
7565*67e74705SXin Li return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
7566*67e74705SXin Li }
7567*67e74705SXin Li
vec_slo(vector float __a,vector unsigned char __b)7568*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_slo(vector float __a,
7569*67e74705SXin Li vector unsigned char __b) {
7570*67e74705SXin Li return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
7571*67e74705SXin Li }
7572*67e74705SXin Li
7573*67e74705SXin Li /* vec_vslo */
7574*67e74705SXin Li
7575*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vslo(vector signed char __a,vector signed char __b)7576*67e74705SXin Li vec_vslo(vector signed char __a, vector signed char __b) {
7577*67e74705SXin Li return (vector signed char)__builtin_altivec_vslo((vector int)__a,
7578*67e74705SXin Li (vector int)__b);
7579*67e74705SXin Li }
7580*67e74705SXin Li
7581*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vslo(vector signed char __a,vector unsigned char __b)7582*67e74705SXin Li vec_vslo(vector signed char __a, vector unsigned char __b) {
7583*67e74705SXin Li return (vector signed char)__builtin_altivec_vslo((vector int)__a,
7584*67e74705SXin Li (vector int)__b);
7585*67e74705SXin Li }
7586*67e74705SXin Li
7587*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vslo(vector unsigned char __a,vector signed char __b)7588*67e74705SXin Li vec_vslo(vector unsigned char __a, vector signed char __b) {
7589*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
7590*67e74705SXin Li (vector int)__b);
7591*67e74705SXin Li }
7592*67e74705SXin Li
7593*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vslo(vector unsigned char __a,vector unsigned char __b)7594*67e74705SXin Li vec_vslo(vector unsigned char __a, vector unsigned char __b) {
7595*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vslo((vector int)__a,
7596*67e74705SXin Li (vector int)__b);
7597*67e74705SXin Li }
7598*67e74705SXin Li
vec_vslo(vector short __a,vector signed char __b)7599*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
7600*67e74705SXin Li vector signed char __b) {
7601*67e74705SXin Li return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
7602*67e74705SXin Li }
7603*67e74705SXin Li
vec_vslo(vector short __a,vector unsigned char __b)7604*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vslo(vector short __a,
7605*67e74705SXin Li vector unsigned char __b) {
7606*67e74705SXin Li return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
7607*67e74705SXin Li }
7608*67e74705SXin Li
7609*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vslo(vector unsigned short __a,vector signed char __b)7610*67e74705SXin Li vec_vslo(vector unsigned short __a, vector signed char __b) {
7611*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
7612*67e74705SXin Li (vector int)__b);
7613*67e74705SXin Li }
7614*67e74705SXin Li
7615*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vslo(vector unsigned short __a,vector unsigned char __b)7616*67e74705SXin Li vec_vslo(vector unsigned short __a, vector unsigned char __b) {
7617*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vslo((vector int)__a,
7618*67e74705SXin Li (vector int)__b);
7619*67e74705SXin Li }
7620*67e74705SXin Li
vec_vslo(vector pixel __a,vector signed char __b)7621*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
7622*67e74705SXin Li vector signed char __b) {
7623*67e74705SXin Li return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
7624*67e74705SXin Li }
7625*67e74705SXin Li
vec_vslo(vector pixel __a,vector unsigned char __b)7626*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vslo(vector pixel __a,
7627*67e74705SXin Li vector unsigned char __b) {
7628*67e74705SXin Li return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
7629*67e74705SXin Li }
7630*67e74705SXin Li
vec_vslo(vector int __a,vector signed char __b)7631*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
7632*67e74705SXin Li vector signed char __b) {
7633*67e74705SXin Li return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
7634*67e74705SXin Li }
7635*67e74705SXin Li
vec_vslo(vector int __a,vector unsigned char __b)7636*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vslo(vector int __a,
7637*67e74705SXin Li vector unsigned char __b) {
7638*67e74705SXin Li return (vector int)__builtin_altivec_vslo(__a, (vector int)__b);
7639*67e74705SXin Li }
7640*67e74705SXin Li
7641*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vslo(vector unsigned int __a,vector signed char __b)7642*67e74705SXin Li vec_vslo(vector unsigned int __a, vector signed char __b) {
7643*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
7644*67e74705SXin Li (vector int)__b);
7645*67e74705SXin Li }
7646*67e74705SXin Li
7647*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vslo(vector unsigned int __a,vector unsigned char __b)7648*67e74705SXin Li vec_vslo(vector unsigned int __a, vector unsigned char __b) {
7649*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vslo((vector int)__a,
7650*67e74705SXin Li (vector int)__b);
7651*67e74705SXin Li }
7652*67e74705SXin Li
vec_vslo(vector float __a,vector signed char __b)7653*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
7654*67e74705SXin Li vector signed char __b) {
7655*67e74705SXin Li return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
7656*67e74705SXin Li }
7657*67e74705SXin Li
vec_vslo(vector float __a,vector unsigned char __b)7658*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vslo(vector float __a,
7659*67e74705SXin Li vector unsigned char __b) {
7660*67e74705SXin Li return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b);
7661*67e74705SXin Li }
7662*67e74705SXin Li
7663*67e74705SXin Li /* vec_splat */
7664*67e74705SXin Li
7665*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_splat(vector signed char __a,unsigned const int __b)7666*67e74705SXin Li vec_splat(vector signed char __a, unsigned const int __b) {
7667*67e74705SXin Li return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
7668*67e74705SXin Li }
7669*67e74705SXin Li
7670*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_splat(vector unsigned char __a,unsigned const int __b)7671*67e74705SXin Li vec_splat(vector unsigned char __a, unsigned const int __b) {
7672*67e74705SXin Li return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
7673*67e74705SXin Li }
7674*67e74705SXin Li
7675*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_splat(vector bool char __a,unsigned const int __b)7676*67e74705SXin Li vec_splat(vector bool char __a, unsigned const int __b) {
7677*67e74705SXin Li return vec_perm(__a, __a, (vector unsigned char)(__b & 0x0F));
7678*67e74705SXin Li }
7679*67e74705SXin Li
7680*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_splat(vector signed short __a,unsigned const int __b)7681*67e74705SXin Li vec_splat(vector signed short __a, unsigned const int __b) {
7682*67e74705SXin Li unsigned char b0 = (__b & 0x07) * 2;
7683*67e74705SXin Li unsigned char b1 = b0 + 1;
7684*67e74705SXin Li return vec_perm(__a, __a,
7685*67e74705SXin Li (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
7686*67e74705SXin Li b0, b1, b0, b1, b0, b1));
7687*67e74705SXin Li }
7688*67e74705SXin Li
7689*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_splat(vector unsigned short __a,unsigned const int __b)7690*67e74705SXin Li vec_splat(vector unsigned short __a, unsigned const int __b) {
7691*67e74705SXin Li unsigned char b0 = (__b & 0x07) * 2;
7692*67e74705SXin Li unsigned char b1 = b0 + 1;
7693*67e74705SXin Li return vec_perm(__a, __a,
7694*67e74705SXin Li (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
7695*67e74705SXin Li b0, b1, b0, b1, b0, b1));
7696*67e74705SXin Li }
7697*67e74705SXin Li
7698*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_splat(vector bool short __a,unsigned const int __b)7699*67e74705SXin Li vec_splat(vector bool short __a, unsigned const int __b) {
7700*67e74705SXin Li unsigned char b0 = (__b & 0x07) * 2;
7701*67e74705SXin Li unsigned char b1 = b0 + 1;
7702*67e74705SXin Li return vec_perm(__a, __a,
7703*67e74705SXin Li (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
7704*67e74705SXin Li b0, b1, b0, b1, b0, b1));
7705*67e74705SXin Li }
7706*67e74705SXin Li
vec_splat(vector pixel __a,unsigned const int __b)7707*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_splat(vector pixel __a,
7708*67e74705SXin Li unsigned const int __b) {
7709*67e74705SXin Li unsigned char b0 = (__b & 0x07) * 2;
7710*67e74705SXin Li unsigned char b1 = b0 + 1;
7711*67e74705SXin Li return vec_perm(__a, __a,
7712*67e74705SXin Li (vector unsigned char)(b0, b1, b0, b1, b0, b1, b0, b1, b0, b1,
7713*67e74705SXin Li b0, b1, b0, b1, b0, b1));
7714*67e74705SXin Li }
7715*67e74705SXin Li
7716*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_splat(vector signed int __a,unsigned const int __b)7717*67e74705SXin Li vec_splat(vector signed int __a, unsigned const int __b) {
7718*67e74705SXin Li unsigned char b0 = (__b & 0x03) * 4;
7719*67e74705SXin Li unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
7720*67e74705SXin Li return vec_perm(__a, __a,
7721*67e74705SXin Li (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
7722*67e74705SXin Li b2, b3, b0, b1, b2, b3));
7723*67e74705SXin Li }
7724*67e74705SXin Li
7725*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_splat(vector unsigned int __a,unsigned const int __b)7726*67e74705SXin Li vec_splat(vector unsigned int __a, unsigned const int __b) {
7727*67e74705SXin Li unsigned char b0 = (__b & 0x03) * 4;
7728*67e74705SXin Li unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
7729*67e74705SXin Li return vec_perm(__a, __a,
7730*67e74705SXin Li (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
7731*67e74705SXin Li b2, b3, b0, b1, b2, b3));
7732*67e74705SXin Li }
7733*67e74705SXin Li
7734*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_splat(vector bool int __a,unsigned const int __b)7735*67e74705SXin Li vec_splat(vector bool int __a, unsigned const int __b) {
7736*67e74705SXin Li unsigned char b0 = (__b & 0x03) * 4;
7737*67e74705SXin Li unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
7738*67e74705SXin Li return vec_perm(__a, __a,
7739*67e74705SXin Li (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
7740*67e74705SXin Li b2, b3, b0, b1, b2, b3));
7741*67e74705SXin Li }
7742*67e74705SXin Li
vec_splat(vector float __a,unsigned const int __b)7743*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_splat(vector float __a,
7744*67e74705SXin Li unsigned const int __b) {
7745*67e74705SXin Li unsigned char b0 = (__b & 0x03) * 4;
7746*67e74705SXin Li unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3;
7747*67e74705SXin Li return vec_perm(__a, __a,
7748*67e74705SXin Li (vector unsigned char)(b0, b1, b2, b3, b0, b1, b2, b3, b0, b1,
7749*67e74705SXin Li b2, b3, b0, b1, b2, b3));
7750*67e74705SXin Li }
7751*67e74705SXin Li
7752*67e74705SXin Li #ifdef __VSX__
vec_splat(vector double __a,unsigned const int __b)7753*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_splat(vector double __a,
7754*67e74705SXin Li unsigned const int __b) {
7755*67e74705SXin Li unsigned char b0 = (__b & 0x01) * 8;
7756*67e74705SXin Li unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
7757*67e74705SXin Li b6 = b0 + 6, b7 = b0 + 7;
7758*67e74705SXin Li return vec_perm(__a, __a,
7759*67e74705SXin Li (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
7760*67e74705SXin Li b2, b3, b4, b5, b6, b7));
7761*67e74705SXin Li }
7762*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_splat(vector bool long long __a,unsigned const int __b)7763*67e74705SXin Li vec_splat(vector bool long long __a, unsigned const int __b) {
7764*67e74705SXin Li unsigned char b0 = (__b & 0x01) * 8;
7765*67e74705SXin Li unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
7766*67e74705SXin Li b6 = b0 + 6, b7 = b0 + 7;
7767*67e74705SXin Li return vec_perm(__a, __a,
7768*67e74705SXin Li (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
7769*67e74705SXin Li b2, b3, b4, b5, b6, b7));
7770*67e74705SXin Li }
7771*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_splat(vector signed long long __a,unsigned const int __b)7772*67e74705SXin Li vec_splat(vector signed long long __a, unsigned const int __b) {
7773*67e74705SXin Li unsigned char b0 = (__b & 0x01) * 8;
7774*67e74705SXin Li unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
7775*67e74705SXin Li b6 = b0 + 6, b7 = b0 + 7;
7776*67e74705SXin Li return vec_perm(__a, __a,
7777*67e74705SXin Li (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
7778*67e74705SXin Li b2, b3, b4, b5, b6, b7));
7779*67e74705SXin Li }
7780*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_splat(vector unsigned long long __a,unsigned const int __b)7781*67e74705SXin Li vec_splat(vector unsigned long long __a, unsigned const int __b) {
7782*67e74705SXin Li unsigned char b0 = (__b & 0x01) * 8;
7783*67e74705SXin Li unsigned char b1 = b0 + 1, b2 = b0 + 2, b3 = b0 + 3, b4 = b0 + 4, b5 = b0 + 5,
7784*67e74705SXin Li b6 = b0 + 6, b7 = b0 + 7;
7785*67e74705SXin Li return vec_perm(__a, __a,
7786*67e74705SXin Li (vector unsigned char)(b0, b1, b2, b3, b4, b5, b6, b7, b0, b1,
7787*67e74705SXin Li b2, b3, b4, b5, b6, b7));
7788*67e74705SXin Li }
7789*67e74705SXin Li #endif
7790*67e74705SXin Li
7791*67e74705SXin Li /* vec_vspltb */
7792*67e74705SXin Li
7793*67e74705SXin Li #define __builtin_altivec_vspltb vec_vspltb
7794*67e74705SXin Li
7795*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vspltb(vector signed char __a,unsigned char __b)7796*67e74705SXin Li vec_vspltb(vector signed char __a, unsigned char __b) {
7797*67e74705SXin Li return vec_perm(__a, __a, (vector unsigned char)(__b));
7798*67e74705SXin Li }
7799*67e74705SXin Li
7800*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vspltb(vector unsigned char __a,unsigned char __b)7801*67e74705SXin Li vec_vspltb(vector unsigned char __a, unsigned char __b) {
7802*67e74705SXin Li return vec_perm(__a, __a, (vector unsigned char)(__b));
7803*67e74705SXin Li }
7804*67e74705SXin Li
vec_vspltb(vector bool char __a,unsigned char __b)7805*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_vspltb(vector bool char __a,
7806*67e74705SXin Li unsigned char __b) {
7807*67e74705SXin Li return vec_perm(__a, __a, (vector unsigned char)(__b));
7808*67e74705SXin Li }
7809*67e74705SXin Li
7810*67e74705SXin Li /* vec_vsplth */
7811*67e74705SXin Li
7812*67e74705SXin Li #define __builtin_altivec_vsplth vec_vsplth
7813*67e74705SXin Li
vec_vsplth(vector short __a,unsigned char __b)7814*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsplth(vector short __a,
7815*67e74705SXin Li unsigned char __b) {
7816*67e74705SXin Li __b *= 2;
7817*67e74705SXin Li unsigned char b1 = __b + 1;
7818*67e74705SXin Li return vec_perm(__a, __a,
7819*67e74705SXin Li (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
7820*67e74705SXin Li __b, b1, __b, b1, __b, b1, __b, b1));
7821*67e74705SXin Li }
7822*67e74705SXin Li
7823*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsplth(vector unsigned short __a,unsigned char __b)7824*67e74705SXin Li vec_vsplth(vector unsigned short __a, unsigned char __b) {
7825*67e74705SXin Li __b *= 2;
7826*67e74705SXin Li unsigned char b1 = __b + 1;
7827*67e74705SXin Li return vec_perm(__a, __a,
7828*67e74705SXin Li (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
7829*67e74705SXin Li __b, b1, __b, b1, __b, b1, __b, b1));
7830*67e74705SXin Li }
7831*67e74705SXin Li
7832*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vsplth(vector bool short __a,unsigned char __b)7833*67e74705SXin Li vec_vsplth(vector bool short __a, unsigned char __b) {
7834*67e74705SXin Li __b *= 2;
7835*67e74705SXin Li unsigned char b1 = __b + 1;
7836*67e74705SXin Li return vec_perm(__a, __a,
7837*67e74705SXin Li (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
7838*67e74705SXin Li __b, b1, __b, b1, __b, b1, __b, b1));
7839*67e74705SXin Li }
7840*67e74705SXin Li
vec_vsplth(vector pixel __a,unsigned char __b)7841*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vsplth(vector pixel __a,
7842*67e74705SXin Li unsigned char __b) {
7843*67e74705SXin Li __b *= 2;
7844*67e74705SXin Li unsigned char b1 = __b + 1;
7845*67e74705SXin Li return vec_perm(__a, __a,
7846*67e74705SXin Li (vector unsigned char)(__b, b1, __b, b1, __b, b1, __b, b1,
7847*67e74705SXin Li __b, b1, __b, b1, __b, b1, __b, b1));
7848*67e74705SXin Li }
7849*67e74705SXin Li
7850*67e74705SXin Li /* vec_vspltw */
7851*67e74705SXin Li
7852*67e74705SXin Li #define __builtin_altivec_vspltw vec_vspltw
7853*67e74705SXin Li
vec_vspltw(vector int __a,unsigned char __b)7854*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vspltw(vector int __a,
7855*67e74705SXin Li unsigned char __b) {
7856*67e74705SXin Li __b *= 4;
7857*67e74705SXin Li unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
7858*67e74705SXin Li return vec_perm(__a, __a,
7859*67e74705SXin Li (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
7860*67e74705SXin Li b1, b2, b3, __b, b1, b2, b3));
7861*67e74705SXin Li }
7862*67e74705SXin Li
7863*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vspltw(vector unsigned int __a,unsigned char __b)7864*67e74705SXin Li vec_vspltw(vector unsigned int __a, unsigned char __b) {
7865*67e74705SXin Li __b *= 4;
7866*67e74705SXin Li unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
7867*67e74705SXin Li return vec_perm(__a, __a,
7868*67e74705SXin Li (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
7869*67e74705SXin Li b1, b2, b3, __b, b1, b2, b3));
7870*67e74705SXin Li }
7871*67e74705SXin Li
vec_vspltw(vector bool int __a,unsigned char __b)7872*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_vspltw(vector bool int __a,
7873*67e74705SXin Li unsigned char __b) {
7874*67e74705SXin Li __b *= 4;
7875*67e74705SXin Li unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
7876*67e74705SXin Li return vec_perm(__a, __a,
7877*67e74705SXin Li (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
7878*67e74705SXin Li b1, b2, b3, __b, b1, b2, b3));
7879*67e74705SXin Li }
7880*67e74705SXin Li
vec_vspltw(vector float __a,unsigned char __b)7881*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vspltw(vector float __a,
7882*67e74705SXin Li unsigned char __b) {
7883*67e74705SXin Li __b *= 4;
7884*67e74705SXin Li unsigned char b1 = __b + 1, b2 = __b + 2, b3 = __b + 3;
7885*67e74705SXin Li return vec_perm(__a, __a,
7886*67e74705SXin Li (vector unsigned char)(__b, b1, b2, b3, __b, b1, b2, b3, __b,
7887*67e74705SXin Li b1, b2, b3, __b, b1, b2, b3));
7888*67e74705SXin Li }
7889*67e74705SXin Li
7890*67e74705SXin Li /* vec_splat_s8 */
7891*67e74705SXin Li
7892*67e74705SXin Li #define __builtin_altivec_vspltisb vec_splat_s8
7893*67e74705SXin Li
7894*67e74705SXin Li // FIXME: parameter should be treated as 5-bit signed literal
7895*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_splat_s8(signed char __a)7896*67e74705SXin Li vec_splat_s8(signed char __a) {
7897*67e74705SXin Li return (vector signed char)(__a);
7898*67e74705SXin Li }
7899*67e74705SXin Li
7900*67e74705SXin Li /* vec_vspltisb */
7901*67e74705SXin Li
7902*67e74705SXin Li // FIXME: parameter should be treated as 5-bit signed literal
7903*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vspltisb(signed char __a)7904*67e74705SXin Li vec_vspltisb(signed char __a) {
7905*67e74705SXin Li return (vector signed char)(__a);
7906*67e74705SXin Li }
7907*67e74705SXin Li
7908*67e74705SXin Li /* vec_splat_s16 */
7909*67e74705SXin Li
7910*67e74705SXin Li #define __builtin_altivec_vspltish vec_splat_s16
7911*67e74705SXin Li
7912*67e74705SXin Li // FIXME: parameter should be treated as 5-bit signed literal
vec_splat_s16(signed char __a)7913*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_splat_s16(signed char __a) {
7914*67e74705SXin Li return (vector short)(__a);
7915*67e74705SXin Li }
7916*67e74705SXin Li
7917*67e74705SXin Li /* vec_vspltish */
7918*67e74705SXin Li
7919*67e74705SXin Li // FIXME: parameter should be treated as 5-bit signed literal
vec_vspltish(signed char __a)7920*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vspltish(signed char __a) {
7921*67e74705SXin Li return (vector short)(__a);
7922*67e74705SXin Li }
7923*67e74705SXin Li
7924*67e74705SXin Li /* vec_splat_s32 */
7925*67e74705SXin Li
7926*67e74705SXin Li #define __builtin_altivec_vspltisw vec_splat_s32
7927*67e74705SXin Li
7928*67e74705SXin Li // FIXME: parameter should be treated as 5-bit signed literal
vec_splat_s32(signed char __a)7929*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_splat_s32(signed char __a) {
7930*67e74705SXin Li return (vector int)(__a);
7931*67e74705SXin Li }
7932*67e74705SXin Li
7933*67e74705SXin Li /* vec_vspltisw */
7934*67e74705SXin Li
7935*67e74705SXin Li // FIXME: parameter should be treated as 5-bit signed literal
vec_vspltisw(signed char __a)7936*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vspltisw(signed char __a) {
7937*67e74705SXin Li return (vector int)(__a);
7938*67e74705SXin Li }
7939*67e74705SXin Li
7940*67e74705SXin Li /* vec_splat_u8 */
7941*67e74705SXin Li
7942*67e74705SXin Li // FIXME: parameter should be treated as 5-bit signed literal
7943*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_splat_u8(unsigned char __a)7944*67e74705SXin Li vec_splat_u8(unsigned char __a) {
7945*67e74705SXin Li return (vector unsigned char)(__a);
7946*67e74705SXin Li }
7947*67e74705SXin Li
7948*67e74705SXin Li /* vec_splat_u16 */
7949*67e74705SXin Li
7950*67e74705SXin Li // FIXME: parameter should be treated as 5-bit signed literal
7951*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_splat_u16(signed char __a)7952*67e74705SXin Li vec_splat_u16(signed char __a) {
7953*67e74705SXin Li return (vector unsigned short)(__a);
7954*67e74705SXin Li }
7955*67e74705SXin Li
7956*67e74705SXin Li /* vec_splat_u32 */
7957*67e74705SXin Li
7958*67e74705SXin Li // FIXME: parameter should be treated as 5-bit signed literal
7959*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_splat_u32(signed char __a)7960*67e74705SXin Li vec_splat_u32(signed char __a) {
7961*67e74705SXin Li return (vector unsigned int)(__a);
7962*67e74705SXin Li }
7963*67e74705SXin Li
7964*67e74705SXin Li /* vec_sr */
7965*67e74705SXin Li
7966*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_sr(vector signed char __a,vector unsigned char __b)7967*67e74705SXin Li vec_sr(vector signed char __a, vector unsigned char __b) {
7968*67e74705SXin Li vector unsigned char __res = (vector unsigned char)__a >> __b;
7969*67e74705SXin Li return (vector signed char)__res;
7970*67e74705SXin Li }
7971*67e74705SXin Li
7972*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_sr(vector unsigned char __a,vector unsigned char __b)7973*67e74705SXin Li vec_sr(vector unsigned char __a, vector unsigned char __b) {
7974*67e74705SXin Li return __a >> __b;
7975*67e74705SXin Li }
7976*67e74705SXin Li
7977*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_sr(vector signed short __a,vector unsigned short __b)7978*67e74705SXin Li vec_sr(vector signed short __a, vector unsigned short __b) {
7979*67e74705SXin Li vector unsigned short __res = (vector unsigned short)__a >> __b;
7980*67e74705SXin Li return (vector signed short)__res;
7981*67e74705SXin Li }
7982*67e74705SXin Li
7983*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sr(vector unsigned short __a,vector unsigned short __b)7984*67e74705SXin Li vec_sr(vector unsigned short __a, vector unsigned short __b) {
7985*67e74705SXin Li return __a >> __b;
7986*67e74705SXin Li }
7987*67e74705SXin Li
7988*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_sr(vector signed int __a,vector unsigned int __b)7989*67e74705SXin Li vec_sr(vector signed int __a, vector unsigned int __b) {
7990*67e74705SXin Li vector unsigned int __res = (vector unsigned int)__a >> __b;
7991*67e74705SXin Li return (vector signed int)__res;
7992*67e74705SXin Li }
7993*67e74705SXin Li
7994*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_sr(vector unsigned int __a,vector unsigned int __b)7995*67e74705SXin Li vec_sr(vector unsigned int __a, vector unsigned int __b) {
7996*67e74705SXin Li return __a >> __b;
7997*67e74705SXin Li }
7998*67e74705SXin Li
7999*67e74705SXin Li #ifdef __POWER8_VECTOR__
8000*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_sr(vector signed long long __a,vector unsigned long long __b)8001*67e74705SXin Li vec_sr(vector signed long long __a, vector unsigned long long __b) {
8002*67e74705SXin Li vector unsigned long long __res = (vector unsigned long long)__a >> __b;
8003*67e74705SXin Li return (vector signed long long)__res;
8004*67e74705SXin Li }
8005*67e74705SXin Li
8006*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_sr(vector unsigned long long __a,vector unsigned long long __b)8007*67e74705SXin Li vec_sr(vector unsigned long long __a, vector unsigned long long __b) {
8008*67e74705SXin Li return __a >> __b;
8009*67e74705SXin Li }
8010*67e74705SXin Li #endif
8011*67e74705SXin Li
8012*67e74705SXin Li /* vec_vsrb */
8013*67e74705SXin Li
8014*67e74705SXin Li #define __builtin_altivec_vsrb vec_vsrb
8015*67e74705SXin Li
8016*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsrb(vector signed char __a,vector unsigned char __b)8017*67e74705SXin Li vec_vsrb(vector signed char __a, vector unsigned char __b) {
8018*67e74705SXin Li return __a >> (vector signed char)__b;
8019*67e74705SXin Li }
8020*67e74705SXin Li
8021*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsrb(vector unsigned char __a,vector unsigned char __b)8022*67e74705SXin Li vec_vsrb(vector unsigned char __a, vector unsigned char __b) {
8023*67e74705SXin Li return __a >> __b;
8024*67e74705SXin Li }
8025*67e74705SXin Li
8026*67e74705SXin Li /* vec_vsrh */
8027*67e74705SXin Li
8028*67e74705SXin Li #define __builtin_altivec_vsrh vec_vsrh
8029*67e74705SXin Li
8030*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai
vec_vsrh(vector short __a,vector unsigned short __b)8031*67e74705SXin Li vec_vsrh(vector short __a, vector unsigned short __b) {
8032*67e74705SXin Li return __a >> (vector short)__b;
8033*67e74705SXin Li }
8034*67e74705SXin Li
8035*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsrh(vector unsigned short __a,vector unsigned short __b)8036*67e74705SXin Li vec_vsrh(vector unsigned short __a, vector unsigned short __b) {
8037*67e74705SXin Li return __a >> __b;
8038*67e74705SXin Li }
8039*67e74705SXin Li
8040*67e74705SXin Li /* vec_vsrw */
8041*67e74705SXin Li
8042*67e74705SXin Li #define __builtin_altivec_vsrw vec_vsrw
8043*67e74705SXin Li
vec_vsrw(vector int __a,vector unsigned int __b)8044*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsrw(vector int __a,
8045*67e74705SXin Li vector unsigned int __b) {
8046*67e74705SXin Li return __a >> (vector int)__b;
8047*67e74705SXin Li }
8048*67e74705SXin Li
8049*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsrw(vector unsigned int __a,vector unsigned int __b)8050*67e74705SXin Li vec_vsrw(vector unsigned int __a, vector unsigned int __b) {
8051*67e74705SXin Li return __a >> __b;
8052*67e74705SXin Li }
8053*67e74705SXin Li
8054*67e74705SXin Li /* vec_sra */
8055*67e74705SXin Li
8056*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_sra(vector signed char __a,vector unsigned char __b)8057*67e74705SXin Li vec_sra(vector signed char __a, vector unsigned char __b) {
8058*67e74705SXin Li return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
8059*67e74705SXin Li }
8060*67e74705SXin Li
8061*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_sra(vector unsigned char __a,vector unsigned char __b)8062*67e74705SXin Li vec_sra(vector unsigned char __a, vector unsigned char __b) {
8063*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
8064*67e74705SXin Li }
8065*67e74705SXin Li
vec_sra(vector short __a,vector unsigned short __b)8066*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_sra(vector short __a,
8067*67e74705SXin Li vector unsigned short __b) {
8068*67e74705SXin Li return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
8069*67e74705SXin Li }
8070*67e74705SXin Li
8071*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sra(vector unsigned short __a,vector unsigned short __b)8072*67e74705SXin Li vec_sra(vector unsigned short __a, vector unsigned short __b) {
8073*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
8074*67e74705SXin Li }
8075*67e74705SXin Li
vec_sra(vector int __a,vector unsigned int __b)8076*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sra(vector int __a,
8077*67e74705SXin Li vector unsigned int __b) {
8078*67e74705SXin Li return __builtin_altivec_vsraw(__a, __b);
8079*67e74705SXin Li }
8080*67e74705SXin Li
8081*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_sra(vector unsigned int __a,vector unsigned int __b)8082*67e74705SXin Li vec_sra(vector unsigned int __a, vector unsigned int __b) {
8083*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
8084*67e74705SXin Li }
8085*67e74705SXin Li
8086*67e74705SXin Li #ifdef __POWER8_VECTOR__
8087*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_sra(vector signed long long __a,vector unsigned long long __b)8088*67e74705SXin Li vec_sra(vector signed long long __a, vector unsigned long long __b) {
8089*67e74705SXin Li return __a >> __b;
8090*67e74705SXin Li }
8091*67e74705SXin Li
8092*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_sra(vector unsigned long long __a,vector unsigned long long __b)8093*67e74705SXin Li vec_sra(vector unsigned long long __a, vector unsigned long long __b) {
8094*67e74705SXin Li return (vector unsigned long long)((vector signed long long)__a >> __b);
8095*67e74705SXin Li }
8096*67e74705SXin Li #endif
8097*67e74705SXin Li
8098*67e74705SXin Li /* vec_vsrab */
8099*67e74705SXin Li
8100*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsrab(vector signed char __a,vector unsigned char __b)8101*67e74705SXin Li vec_vsrab(vector signed char __a, vector unsigned char __b) {
8102*67e74705SXin Li return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b);
8103*67e74705SXin Li }
8104*67e74705SXin Li
8105*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsrab(vector unsigned char __a,vector unsigned char __b)8106*67e74705SXin Li vec_vsrab(vector unsigned char __a, vector unsigned char __b) {
8107*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b);
8108*67e74705SXin Li }
8109*67e74705SXin Li
8110*67e74705SXin Li /* vec_vsrah */
8111*67e74705SXin Li
8112*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai
vec_vsrah(vector short __a,vector unsigned short __b)8113*67e74705SXin Li vec_vsrah(vector short __a, vector unsigned short __b) {
8114*67e74705SXin Li return __builtin_altivec_vsrah(__a, (vector unsigned short)__b);
8115*67e74705SXin Li }
8116*67e74705SXin Li
8117*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsrah(vector unsigned short __a,vector unsigned short __b)8118*67e74705SXin Li vec_vsrah(vector unsigned short __a, vector unsigned short __b) {
8119*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b);
8120*67e74705SXin Li }
8121*67e74705SXin Li
8122*67e74705SXin Li /* vec_vsraw */
8123*67e74705SXin Li
vec_vsraw(vector int __a,vector unsigned int __b)8124*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsraw(vector int __a,
8125*67e74705SXin Li vector unsigned int __b) {
8126*67e74705SXin Li return __builtin_altivec_vsraw(__a, __b);
8127*67e74705SXin Li }
8128*67e74705SXin Li
8129*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsraw(vector unsigned int __a,vector unsigned int __b)8130*67e74705SXin Li vec_vsraw(vector unsigned int __a, vector unsigned int __b) {
8131*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b);
8132*67e74705SXin Li }
8133*67e74705SXin Li
8134*67e74705SXin Li /* vec_srl */
8135*67e74705SXin Li
8136*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_srl(vector signed char __a,vector unsigned char __b)8137*67e74705SXin Li vec_srl(vector signed char __a, vector unsigned char __b) {
8138*67e74705SXin Li return (vector signed char)__builtin_altivec_vsr((vector int)__a,
8139*67e74705SXin Li (vector int)__b);
8140*67e74705SXin Li }
8141*67e74705SXin Li
8142*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_srl(vector signed char __a,vector unsigned short __b)8143*67e74705SXin Li vec_srl(vector signed char __a, vector unsigned short __b) {
8144*67e74705SXin Li return (vector signed char)__builtin_altivec_vsr((vector int)__a,
8145*67e74705SXin Li (vector int)__b);
8146*67e74705SXin Li }
8147*67e74705SXin Li
8148*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_srl(vector signed char __a,vector unsigned int __b)8149*67e74705SXin Li vec_srl(vector signed char __a, vector unsigned int __b) {
8150*67e74705SXin Li return (vector signed char)__builtin_altivec_vsr((vector int)__a,
8151*67e74705SXin Li (vector int)__b);
8152*67e74705SXin Li }
8153*67e74705SXin Li
8154*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_srl(vector unsigned char __a,vector unsigned char __b)8155*67e74705SXin Li vec_srl(vector unsigned char __a, vector unsigned char __b) {
8156*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
8157*67e74705SXin Li (vector int)__b);
8158*67e74705SXin Li }
8159*67e74705SXin Li
8160*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_srl(vector unsigned char __a,vector unsigned short __b)8161*67e74705SXin Li vec_srl(vector unsigned char __a, vector unsigned short __b) {
8162*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
8163*67e74705SXin Li (vector int)__b);
8164*67e74705SXin Li }
8165*67e74705SXin Li
8166*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_srl(vector unsigned char __a,vector unsigned int __b)8167*67e74705SXin Li vec_srl(vector unsigned char __a, vector unsigned int __b) {
8168*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
8169*67e74705SXin Li (vector int)__b);
8170*67e74705SXin Li }
8171*67e74705SXin Li
8172*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_srl(vector bool char __a,vector unsigned char __b)8173*67e74705SXin Li vec_srl(vector bool char __a, vector unsigned char __b) {
8174*67e74705SXin Li return (vector bool char)__builtin_altivec_vsr((vector int)__a,
8175*67e74705SXin Li (vector int)__b);
8176*67e74705SXin Li }
8177*67e74705SXin Li
8178*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_srl(vector bool char __a,vector unsigned short __b)8179*67e74705SXin Li vec_srl(vector bool char __a, vector unsigned short __b) {
8180*67e74705SXin Li return (vector bool char)__builtin_altivec_vsr((vector int)__a,
8181*67e74705SXin Li (vector int)__b);
8182*67e74705SXin Li }
8183*67e74705SXin Li
8184*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_srl(vector bool char __a,vector unsigned int __b)8185*67e74705SXin Li vec_srl(vector bool char __a, vector unsigned int __b) {
8186*67e74705SXin Li return (vector bool char)__builtin_altivec_vsr((vector int)__a,
8187*67e74705SXin Li (vector int)__b);
8188*67e74705SXin Li }
8189*67e74705SXin Li
vec_srl(vector short __a,vector unsigned char __b)8190*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
8191*67e74705SXin Li vector unsigned char __b) {
8192*67e74705SXin Li return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
8193*67e74705SXin Li }
8194*67e74705SXin Li
vec_srl(vector short __a,vector unsigned short __b)8195*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
8196*67e74705SXin Li vector unsigned short __b) {
8197*67e74705SXin Li return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
8198*67e74705SXin Li }
8199*67e74705SXin Li
vec_srl(vector short __a,vector unsigned int __b)8200*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_srl(vector short __a,
8201*67e74705SXin Li vector unsigned int __b) {
8202*67e74705SXin Li return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
8203*67e74705SXin Li }
8204*67e74705SXin Li
8205*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_srl(vector unsigned short __a,vector unsigned char __b)8206*67e74705SXin Li vec_srl(vector unsigned short __a, vector unsigned char __b) {
8207*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
8208*67e74705SXin Li (vector int)__b);
8209*67e74705SXin Li }
8210*67e74705SXin Li
8211*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_srl(vector unsigned short __a,vector unsigned short __b)8212*67e74705SXin Li vec_srl(vector unsigned short __a, vector unsigned short __b) {
8213*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
8214*67e74705SXin Li (vector int)__b);
8215*67e74705SXin Li }
8216*67e74705SXin Li
8217*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_srl(vector unsigned short __a,vector unsigned int __b)8218*67e74705SXin Li vec_srl(vector unsigned short __a, vector unsigned int __b) {
8219*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
8220*67e74705SXin Li (vector int)__b);
8221*67e74705SXin Li }
8222*67e74705SXin Li
8223*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_srl(vector bool short __a,vector unsigned char __b)8224*67e74705SXin Li vec_srl(vector bool short __a, vector unsigned char __b) {
8225*67e74705SXin Li return (vector bool short)__builtin_altivec_vsr((vector int)__a,
8226*67e74705SXin Li (vector int)__b);
8227*67e74705SXin Li }
8228*67e74705SXin Li
8229*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_srl(vector bool short __a,vector unsigned short __b)8230*67e74705SXin Li vec_srl(vector bool short __a, vector unsigned short __b) {
8231*67e74705SXin Li return (vector bool short)__builtin_altivec_vsr((vector int)__a,
8232*67e74705SXin Li (vector int)__b);
8233*67e74705SXin Li }
8234*67e74705SXin Li
8235*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_srl(vector bool short __a,vector unsigned int __b)8236*67e74705SXin Li vec_srl(vector bool short __a, vector unsigned int __b) {
8237*67e74705SXin Li return (vector bool short)__builtin_altivec_vsr((vector int)__a,
8238*67e74705SXin Li (vector int)__b);
8239*67e74705SXin Li }
8240*67e74705SXin Li
vec_srl(vector pixel __a,vector unsigned char __b)8241*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
8242*67e74705SXin Li vector unsigned char __b) {
8243*67e74705SXin Li return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
8244*67e74705SXin Li }
8245*67e74705SXin Li
vec_srl(vector pixel __a,vector unsigned short __b)8246*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
8247*67e74705SXin Li vector unsigned short __b) {
8248*67e74705SXin Li return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
8249*67e74705SXin Li }
8250*67e74705SXin Li
vec_srl(vector pixel __a,vector unsigned int __b)8251*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_srl(vector pixel __a,
8252*67e74705SXin Li vector unsigned int __b) {
8253*67e74705SXin Li return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
8254*67e74705SXin Li }
8255*67e74705SXin Li
vec_srl(vector int __a,vector unsigned char __b)8256*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
8257*67e74705SXin Li vector unsigned char __b) {
8258*67e74705SXin Li return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
8259*67e74705SXin Li }
8260*67e74705SXin Li
vec_srl(vector int __a,vector unsigned short __b)8261*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
8262*67e74705SXin Li vector unsigned short __b) {
8263*67e74705SXin Li return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
8264*67e74705SXin Li }
8265*67e74705SXin Li
vec_srl(vector int __a,vector unsigned int __b)8266*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_srl(vector int __a,
8267*67e74705SXin Li vector unsigned int __b) {
8268*67e74705SXin Li return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
8269*67e74705SXin Li }
8270*67e74705SXin Li
8271*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_srl(vector unsigned int __a,vector unsigned char __b)8272*67e74705SXin Li vec_srl(vector unsigned int __a, vector unsigned char __b) {
8273*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
8274*67e74705SXin Li (vector int)__b);
8275*67e74705SXin Li }
8276*67e74705SXin Li
8277*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_srl(vector unsigned int __a,vector unsigned short __b)8278*67e74705SXin Li vec_srl(vector unsigned int __a, vector unsigned short __b) {
8279*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
8280*67e74705SXin Li (vector int)__b);
8281*67e74705SXin Li }
8282*67e74705SXin Li
8283*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_srl(vector unsigned int __a,vector unsigned int __b)8284*67e74705SXin Li vec_srl(vector unsigned int __a, vector unsigned int __b) {
8285*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
8286*67e74705SXin Li (vector int)__b);
8287*67e74705SXin Li }
8288*67e74705SXin Li
8289*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_srl(vector bool int __a,vector unsigned char __b)8290*67e74705SXin Li vec_srl(vector bool int __a, vector unsigned char __b) {
8291*67e74705SXin Li return (vector bool int)__builtin_altivec_vsr((vector int)__a,
8292*67e74705SXin Li (vector int)__b);
8293*67e74705SXin Li }
8294*67e74705SXin Li
8295*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_srl(vector bool int __a,vector unsigned short __b)8296*67e74705SXin Li vec_srl(vector bool int __a, vector unsigned short __b) {
8297*67e74705SXin Li return (vector bool int)__builtin_altivec_vsr((vector int)__a,
8298*67e74705SXin Li (vector int)__b);
8299*67e74705SXin Li }
8300*67e74705SXin Li
8301*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_srl(vector bool int __a,vector unsigned int __b)8302*67e74705SXin Li vec_srl(vector bool int __a, vector unsigned int __b) {
8303*67e74705SXin Li return (vector bool int)__builtin_altivec_vsr((vector int)__a,
8304*67e74705SXin Li (vector int)__b);
8305*67e74705SXin Li }
8306*67e74705SXin Li
8307*67e74705SXin Li /* vec_vsr */
8308*67e74705SXin Li
8309*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsr(vector signed char __a,vector unsigned char __b)8310*67e74705SXin Li vec_vsr(vector signed char __a, vector unsigned char __b) {
8311*67e74705SXin Li return (vector signed char)__builtin_altivec_vsr((vector int)__a,
8312*67e74705SXin Li (vector int)__b);
8313*67e74705SXin Li }
8314*67e74705SXin Li
8315*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsr(vector signed char __a,vector unsigned short __b)8316*67e74705SXin Li vec_vsr(vector signed char __a, vector unsigned short __b) {
8317*67e74705SXin Li return (vector signed char)__builtin_altivec_vsr((vector int)__a,
8318*67e74705SXin Li (vector int)__b);
8319*67e74705SXin Li }
8320*67e74705SXin Li
8321*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsr(vector signed char __a,vector unsigned int __b)8322*67e74705SXin Li vec_vsr(vector signed char __a, vector unsigned int __b) {
8323*67e74705SXin Li return (vector signed char)__builtin_altivec_vsr((vector int)__a,
8324*67e74705SXin Li (vector int)__b);
8325*67e74705SXin Li }
8326*67e74705SXin Li
8327*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsr(vector unsigned char __a,vector unsigned char __b)8328*67e74705SXin Li vec_vsr(vector unsigned char __a, vector unsigned char __b) {
8329*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
8330*67e74705SXin Li (vector int)__b);
8331*67e74705SXin Li }
8332*67e74705SXin Li
8333*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsr(vector unsigned char __a,vector unsigned short __b)8334*67e74705SXin Li vec_vsr(vector unsigned char __a, vector unsigned short __b) {
8335*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
8336*67e74705SXin Li (vector int)__b);
8337*67e74705SXin Li }
8338*67e74705SXin Li
8339*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsr(vector unsigned char __a,vector unsigned int __b)8340*67e74705SXin Li vec_vsr(vector unsigned char __a, vector unsigned int __b) {
8341*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsr((vector int)__a,
8342*67e74705SXin Li (vector int)__b);
8343*67e74705SXin Li }
8344*67e74705SXin Li
8345*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_vsr(vector bool char __a,vector unsigned char __b)8346*67e74705SXin Li vec_vsr(vector bool char __a, vector unsigned char __b) {
8347*67e74705SXin Li return (vector bool char)__builtin_altivec_vsr((vector int)__a,
8348*67e74705SXin Li (vector int)__b);
8349*67e74705SXin Li }
8350*67e74705SXin Li
8351*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_vsr(vector bool char __a,vector unsigned short __b)8352*67e74705SXin Li vec_vsr(vector bool char __a, vector unsigned short __b) {
8353*67e74705SXin Li return (vector bool char)__builtin_altivec_vsr((vector int)__a,
8354*67e74705SXin Li (vector int)__b);
8355*67e74705SXin Li }
8356*67e74705SXin Li
8357*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_vsr(vector bool char __a,vector unsigned int __b)8358*67e74705SXin Li vec_vsr(vector bool char __a, vector unsigned int __b) {
8359*67e74705SXin Li return (vector bool char)__builtin_altivec_vsr((vector int)__a,
8360*67e74705SXin Li (vector int)__b);
8361*67e74705SXin Li }
8362*67e74705SXin Li
vec_vsr(vector short __a,vector unsigned char __b)8363*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
8364*67e74705SXin Li vector unsigned char __b) {
8365*67e74705SXin Li return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
8366*67e74705SXin Li }
8367*67e74705SXin Li
vec_vsr(vector short __a,vector unsigned short __b)8368*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
8369*67e74705SXin Li vector unsigned short __b) {
8370*67e74705SXin Li return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
8371*67e74705SXin Li }
8372*67e74705SXin Li
vec_vsr(vector short __a,vector unsigned int __b)8373*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsr(vector short __a,
8374*67e74705SXin Li vector unsigned int __b) {
8375*67e74705SXin Li return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
8376*67e74705SXin Li }
8377*67e74705SXin Li
8378*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsr(vector unsigned short __a,vector unsigned char __b)8379*67e74705SXin Li vec_vsr(vector unsigned short __a, vector unsigned char __b) {
8380*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
8381*67e74705SXin Li (vector int)__b);
8382*67e74705SXin Li }
8383*67e74705SXin Li
8384*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsr(vector unsigned short __a,vector unsigned short __b)8385*67e74705SXin Li vec_vsr(vector unsigned short __a, vector unsigned short __b) {
8386*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
8387*67e74705SXin Li (vector int)__b);
8388*67e74705SXin Li }
8389*67e74705SXin Li
8390*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsr(vector unsigned short __a,vector unsigned int __b)8391*67e74705SXin Li vec_vsr(vector unsigned short __a, vector unsigned int __b) {
8392*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsr((vector int)__a,
8393*67e74705SXin Li (vector int)__b);
8394*67e74705SXin Li }
8395*67e74705SXin Li
8396*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vsr(vector bool short __a,vector unsigned char __b)8397*67e74705SXin Li vec_vsr(vector bool short __a, vector unsigned char __b) {
8398*67e74705SXin Li return (vector bool short)__builtin_altivec_vsr((vector int)__a,
8399*67e74705SXin Li (vector int)__b);
8400*67e74705SXin Li }
8401*67e74705SXin Li
8402*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vsr(vector bool short __a,vector unsigned short __b)8403*67e74705SXin Li vec_vsr(vector bool short __a, vector unsigned short __b) {
8404*67e74705SXin Li return (vector bool short)__builtin_altivec_vsr((vector int)__a,
8405*67e74705SXin Li (vector int)__b);
8406*67e74705SXin Li }
8407*67e74705SXin Li
8408*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vsr(vector bool short __a,vector unsigned int __b)8409*67e74705SXin Li vec_vsr(vector bool short __a, vector unsigned int __b) {
8410*67e74705SXin Li return (vector bool short)__builtin_altivec_vsr((vector int)__a,
8411*67e74705SXin Li (vector int)__b);
8412*67e74705SXin Li }
8413*67e74705SXin Li
vec_vsr(vector pixel __a,vector unsigned char __b)8414*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
8415*67e74705SXin Li vector unsigned char __b) {
8416*67e74705SXin Li return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
8417*67e74705SXin Li }
8418*67e74705SXin Li
vec_vsr(vector pixel __a,vector unsigned short __b)8419*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
8420*67e74705SXin Li vector unsigned short __b) {
8421*67e74705SXin Li return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
8422*67e74705SXin Li }
8423*67e74705SXin Li
vec_vsr(vector pixel __a,vector unsigned int __b)8424*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vsr(vector pixel __a,
8425*67e74705SXin Li vector unsigned int __b) {
8426*67e74705SXin Li return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b);
8427*67e74705SXin Li }
8428*67e74705SXin Li
vec_vsr(vector int __a,vector unsigned char __b)8429*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
8430*67e74705SXin Li vector unsigned char __b) {
8431*67e74705SXin Li return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
8432*67e74705SXin Li }
8433*67e74705SXin Li
vec_vsr(vector int __a,vector unsigned short __b)8434*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
8435*67e74705SXin Li vector unsigned short __b) {
8436*67e74705SXin Li return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
8437*67e74705SXin Li }
8438*67e74705SXin Li
vec_vsr(vector int __a,vector unsigned int __b)8439*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsr(vector int __a,
8440*67e74705SXin Li vector unsigned int __b) {
8441*67e74705SXin Li return (vector int)__builtin_altivec_vsr(__a, (vector int)__b);
8442*67e74705SXin Li }
8443*67e74705SXin Li
8444*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsr(vector unsigned int __a,vector unsigned char __b)8445*67e74705SXin Li vec_vsr(vector unsigned int __a, vector unsigned char __b) {
8446*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
8447*67e74705SXin Li (vector int)__b);
8448*67e74705SXin Li }
8449*67e74705SXin Li
8450*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsr(vector unsigned int __a,vector unsigned short __b)8451*67e74705SXin Li vec_vsr(vector unsigned int __a, vector unsigned short __b) {
8452*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
8453*67e74705SXin Li (vector int)__b);
8454*67e74705SXin Li }
8455*67e74705SXin Li
8456*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsr(vector unsigned int __a,vector unsigned int __b)8457*67e74705SXin Li vec_vsr(vector unsigned int __a, vector unsigned int __b) {
8458*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsr((vector int)__a,
8459*67e74705SXin Li (vector int)__b);
8460*67e74705SXin Li }
8461*67e74705SXin Li
8462*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_vsr(vector bool int __a,vector unsigned char __b)8463*67e74705SXin Li vec_vsr(vector bool int __a, vector unsigned char __b) {
8464*67e74705SXin Li return (vector bool int)__builtin_altivec_vsr((vector int)__a,
8465*67e74705SXin Li (vector int)__b);
8466*67e74705SXin Li }
8467*67e74705SXin Li
8468*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_vsr(vector bool int __a,vector unsigned short __b)8469*67e74705SXin Li vec_vsr(vector bool int __a, vector unsigned short __b) {
8470*67e74705SXin Li return (vector bool int)__builtin_altivec_vsr((vector int)__a,
8471*67e74705SXin Li (vector int)__b);
8472*67e74705SXin Li }
8473*67e74705SXin Li
8474*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_vsr(vector bool int __a,vector unsigned int __b)8475*67e74705SXin Li vec_vsr(vector bool int __a, vector unsigned int __b) {
8476*67e74705SXin Li return (vector bool int)__builtin_altivec_vsr((vector int)__a,
8477*67e74705SXin Li (vector int)__b);
8478*67e74705SXin Li }
8479*67e74705SXin Li
8480*67e74705SXin Li /* vec_sro */
8481*67e74705SXin Li
8482*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_sro(vector signed char __a,vector signed char __b)8483*67e74705SXin Li vec_sro(vector signed char __a, vector signed char __b) {
8484*67e74705SXin Li return (vector signed char)__builtin_altivec_vsro((vector int)__a,
8485*67e74705SXin Li (vector int)__b);
8486*67e74705SXin Li }
8487*67e74705SXin Li
8488*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_sro(vector signed char __a,vector unsigned char __b)8489*67e74705SXin Li vec_sro(vector signed char __a, vector unsigned char __b) {
8490*67e74705SXin Li return (vector signed char)__builtin_altivec_vsro((vector int)__a,
8491*67e74705SXin Li (vector int)__b);
8492*67e74705SXin Li }
8493*67e74705SXin Li
8494*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_sro(vector unsigned char __a,vector signed char __b)8495*67e74705SXin Li vec_sro(vector unsigned char __a, vector signed char __b) {
8496*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
8497*67e74705SXin Li (vector int)__b);
8498*67e74705SXin Li }
8499*67e74705SXin Li
8500*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_sro(vector unsigned char __a,vector unsigned char __b)8501*67e74705SXin Li vec_sro(vector unsigned char __a, vector unsigned char __b) {
8502*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
8503*67e74705SXin Li (vector int)__b);
8504*67e74705SXin Li }
8505*67e74705SXin Li
vec_sro(vector short __a,vector signed char __b)8506*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
8507*67e74705SXin Li vector signed char __b) {
8508*67e74705SXin Li return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
8509*67e74705SXin Li }
8510*67e74705SXin Li
vec_sro(vector short __a,vector unsigned char __b)8511*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_sro(vector short __a,
8512*67e74705SXin Li vector unsigned char __b) {
8513*67e74705SXin Li return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
8514*67e74705SXin Li }
8515*67e74705SXin Li
8516*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sro(vector unsigned short __a,vector signed char __b)8517*67e74705SXin Li vec_sro(vector unsigned short __a, vector signed char __b) {
8518*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
8519*67e74705SXin Li (vector int)__b);
8520*67e74705SXin Li }
8521*67e74705SXin Li
8522*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sro(vector unsigned short __a,vector unsigned char __b)8523*67e74705SXin Li vec_sro(vector unsigned short __a, vector unsigned char __b) {
8524*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
8525*67e74705SXin Li (vector int)__b);
8526*67e74705SXin Li }
8527*67e74705SXin Li
vec_sro(vector pixel __a,vector signed char __b)8528*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
8529*67e74705SXin Li vector signed char __b) {
8530*67e74705SXin Li return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
8531*67e74705SXin Li }
8532*67e74705SXin Li
vec_sro(vector pixel __a,vector unsigned char __b)8533*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_sro(vector pixel __a,
8534*67e74705SXin Li vector unsigned char __b) {
8535*67e74705SXin Li return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
8536*67e74705SXin Li }
8537*67e74705SXin Li
vec_sro(vector int __a,vector signed char __b)8538*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
8539*67e74705SXin Li vector signed char __b) {
8540*67e74705SXin Li return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
8541*67e74705SXin Li }
8542*67e74705SXin Li
vec_sro(vector int __a,vector unsigned char __b)8543*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sro(vector int __a,
8544*67e74705SXin Li vector unsigned char __b) {
8545*67e74705SXin Li return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
8546*67e74705SXin Li }
8547*67e74705SXin Li
8548*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_sro(vector unsigned int __a,vector signed char __b)8549*67e74705SXin Li vec_sro(vector unsigned int __a, vector signed char __b) {
8550*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
8551*67e74705SXin Li (vector int)__b);
8552*67e74705SXin Li }
8553*67e74705SXin Li
8554*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_sro(vector unsigned int __a,vector unsigned char __b)8555*67e74705SXin Li vec_sro(vector unsigned int __a, vector unsigned char __b) {
8556*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
8557*67e74705SXin Li (vector int)__b);
8558*67e74705SXin Li }
8559*67e74705SXin Li
vec_sro(vector float __a,vector signed char __b)8560*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
8561*67e74705SXin Li vector signed char __b) {
8562*67e74705SXin Li return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
8563*67e74705SXin Li }
8564*67e74705SXin Li
vec_sro(vector float __a,vector unsigned char __b)8565*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_sro(vector float __a,
8566*67e74705SXin Li vector unsigned char __b) {
8567*67e74705SXin Li return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
8568*67e74705SXin Li }
8569*67e74705SXin Li
8570*67e74705SXin Li /* vec_vsro */
8571*67e74705SXin Li
8572*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsro(vector signed char __a,vector signed char __b)8573*67e74705SXin Li vec_vsro(vector signed char __a, vector signed char __b) {
8574*67e74705SXin Li return (vector signed char)__builtin_altivec_vsro((vector int)__a,
8575*67e74705SXin Li (vector int)__b);
8576*67e74705SXin Li }
8577*67e74705SXin Li
8578*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsro(vector signed char __a,vector unsigned char __b)8579*67e74705SXin Li vec_vsro(vector signed char __a, vector unsigned char __b) {
8580*67e74705SXin Li return (vector signed char)__builtin_altivec_vsro((vector int)__a,
8581*67e74705SXin Li (vector int)__b);
8582*67e74705SXin Li }
8583*67e74705SXin Li
8584*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsro(vector unsigned char __a,vector signed char __b)8585*67e74705SXin Li vec_vsro(vector unsigned char __a, vector signed char __b) {
8586*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
8587*67e74705SXin Li (vector int)__b);
8588*67e74705SXin Li }
8589*67e74705SXin Li
8590*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsro(vector unsigned char __a,vector unsigned char __b)8591*67e74705SXin Li vec_vsro(vector unsigned char __a, vector unsigned char __b) {
8592*67e74705SXin Li return (vector unsigned char)__builtin_altivec_vsro((vector int)__a,
8593*67e74705SXin Li (vector int)__b);
8594*67e74705SXin Li }
8595*67e74705SXin Li
vec_vsro(vector short __a,vector signed char __b)8596*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
8597*67e74705SXin Li vector signed char __b) {
8598*67e74705SXin Li return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
8599*67e74705SXin Li }
8600*67e74705SXin Li
vec_vsro(vector short __a,vector unsigned char __b)8601*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsro(vector short __a,
8602*67e74705SXin Li vector unsigned char __b) {
8603*67e74705SXin Li return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
8604*67e74705SXin Li }
8605*67e74705SXin Li
8606*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsro(vector unsigned short __a,vector signed char __b)8607*67e74705SXin Li vec_vsro(vector unsigned short __a, vector signed char __b) {
8608*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
8609*67e74705SXin Li (vector int)__b);
8610*67e74705SXin Li }
8611*67e74705SXin Li
8612*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsro(vector unsigned short __a,vector unsigned char __b)8613*67e74705SXin Li vec_vsro(vector unsigned short __a, vector unsigned char __b) {
8614*67e74705SXin Li return (vector unsigned short)__builtin_altivec_vsro((vector int)__a,
8615*67e74705SXin Li (vector int)__b);
8616*67e74705SXin Li }
8617*67e74705SXin Li
vec_vsro(vector pixel __a,vector signed char __b)8618*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
8619*67e74705SXin Li vector signed char __b) {
8620*67e74705SXin Li return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
8621*67e74705SXin Li }
8622*67e74705SXin Li
vec_vsro(vector pixel __a,vector unsigned char __b)8623*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_vsro(vector pixel __a,
8624*67e74705SXin Li vector unsigned char __b) {
8625*67e74705SXin Li return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
8626*67e74705SXin Li }
8627*67e74705SXin Li
vec_vsro(vector int __a,vector signed char __b)8628*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
8629*67e74705SXin Li vector signed char __b) {
8630*67e74705SXin Li return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
8631*67e74705SXin Li }
8632*67e74705SXin Li
vec_vsro(vector int __a,vector unsigned char __b)8633*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsro(vector int __a,
8634*67e74705SXin Li vector unsigned char __b) {
8635*67e74705SXin Li return (vector int)__builtin_altivec_vsro(__a, (vector int)__b);
8636*67e74705SXin Li }
8637*67e74705SXin Li
8638*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsro(vector unsigned int __a,vector signed char __b)8639*67e74705SXin Li vec_vsro(vector unsigned int __a, vector signed char __b) {
8640*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
8641*67e74705SXin Li (vector int)__b);
8642*67e74705SXin Li }
8643*67e74705SXin Li
8644*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsro(vector unsigned int __a,vector unsigned char __b)8645*67e74705SXin Li vec_vsro(vector unsigned int __a, vector unsigned char __b) {
8646*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vsro((vector int)__a,
8647*67e74705SXin Li (vector int)__b);
8648*67e74705SXin Li }
8649*67e74705SXin Li
vec_vsro(vector float __a,vector signed char __b)8650*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
8651*67e74705SXin Li vector signed char __b) {
8652*67e74705SXin Li return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
8653*67e74705SXin Li }
8654*67e74705SXin Li
vec_vsro(vector float __a,vector unsigned char __b)8655*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vsro(vector float __a,
8656*67e74705SXin Li vector unsigned char __b) {
8657*67e74705SXin Li return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b);
8658*67e74705SXin Li }
8659*67e74705SXin Li
8660*67e74705SXin Li /* vec_st */
8661*67e74705SXin Li
vec_st(vector signed char __a,int __b,vector signed char * __c)8662*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, int __b,
8663*67e74705SXin Li vector signed char *__c) {
8664*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8665*67e74705SXin Li }
8666*67e74705SXin Li
vec_st(vector signed char __a,int __b,signed char * __c)8667*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector signed char __a, int __b,
8668*67e74705SXin Li signed char *__c) {
8669*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8670*67e74705SXin Li }
8671*67e74705SXin Li
vec_st(vector unsigned char __a,int __b,vector unsigned char * __c)8672*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, int __b,
8673*67e74705SXin Li vector unsigned char *__c) {
8674*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8675*67e74705SXin Li }
8676*67e74705SXin Li
vec_st(vector unsigned char __a,int __b,unsigned char * __c)8677*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector unsigned char __a, int __b,
8678*67e74705SXin Li unsigned char *__c) {
8679*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8680*67e74705SXin Li }
8681*67e74705SXin Li
vec_st(vector bool char __a,int __b,signed char * __c)8682*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, int __b,
8683*67e74705SXin Li signed char *__c) {
8684*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8685*67e74705SXin Li }
8686*67e74705SXin Li
vec_st(vector bool char __a,int __b,unsigned char * __c)8687*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, int __b,
8688*67e74705SXin Li unsigned char *__c) {
8689*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8690*67e74705SXin Li }
8691*67e74705SXin Li
vec_st(vector bool char __a,int __b,vector bool char * __c)8692*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector bool char __a, int __b,
8693*67e74705SXin Li vector bool char *__c) {
8694*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8695*67e74705SXin Li }
8696*67e74705SXin Li
vec_st(vector short __a,int __b,vector short * __c)8697*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector short __a, int __b,
8698*67e74705SXin Li vector short *__c) {
8699*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8700*67e74705SXin Li }
8701*67e74705SXin Li
vec_st(vector short __a,int __b,short * __c)8702*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector short __a, int __b,
8703*67e74705SXin Li short *__c) {
8704*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8705*67e74705SXin Li }
8706*67e74705SXin Li
vec_st(vector unsigned short __a,int __b,vector unsigned short * __c)8707*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, int __b,
8708*67e74705SXin Li vector unsigned short *__c) {
8709*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8710*67e74705SXin Li }
8711*67e74705SXin Li
vec_st(vector unsigned short __a,int __b,unsigned short * __c)8712*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector unsigned short __a, int __b,
8713*67e74705SXin Li unsigned short *__c) {
8714*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8715*67e74705SXin Li }
8716*67e74705SXin Li
vec_st(vector bool short __a,int __b,short * __c)8717*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, int __b,
8718*67e74705SXin Li short *__c) {
8719*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8720*67e74705SXin Li }
8721*67e74705SXin Li
vec_st(vector bool short __a,int __b,unsigned short * __c)8722*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, int __b,
8723*67e74705SXin Li unsigned short *__c) {
8724*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8725*67e74705SXin Li }
8726*67e74705SXin Li
vec_st(vector bool short __a,int __b,vector bool short * __c)8727*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector bool short __a, int __b,
8728*67e74705SXin Li vector bool short *__c) {
8729*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8730*67e74705SXin Li }
8731*67e74705SXin Li
vec_st(vector pixel __a,int __b,short * __c)8732*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, int __b,
8733*67e74705SXin Li short *__c) {
8734*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8735*67e74705SXin Li }
8736*67e74705SXin Li
vec_st(vector pixel __a,int __b,unsigned short * __c)8737*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, int __b,
8738*67e74705SXin Li unsigned short *__c) {
8739*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8740*67e74705SXin Li }
8741*67e74705SXin Li
vec_st(vector pixel __a,int __b,vector pixel * __c)8742*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector pixel __a, int __b,
8743*67e74705SXin Li vector pixel *__c) {
8744*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8745*67e74705SXin Li }
8746*67e74705SXin Li
vec_st(vector int __a,int __b,vector int * __c)8747*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector int __a, int __b,
8748*67e74705SXin Li vector int *__c) {
8749*67e74705SXin Li __builtin_altivec_stvx(__a, __b, __c);
8750*67e74705SXin Li }
8751*67e74705SXin Li
vec_st(vector int __a,int __b,int * __c)8752*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector int __a, int __b, int *__c) {
8753*67e74705SXin Li __builtin_altivec_stvx(__a, __b, __c);
8754*67e74705SXin Li }
8755*67e74705SXin Li
vec_st(vector unsigned int __a,int __b,vector unsigned int * __c)8756*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, int __b,
8757*67e74705SXin Li vector unsigned int *__c) {
8758*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8759*67e74705SXin Li }
8760*67e74705SXin Li
vec_st(vector unsigned int __a,int __b,unsigned int * __c)8761*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector unsigned int __a, int __b,
8762*67e74705SXin Li unsigned int *__c) {
8763*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8764*67e74705SXin Li }
8765*67e74705SXin Li
vec_st(vector bool int __a,int __b,int * __c)8766*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, int __b,
8767*67e74705SXin Li int *__c) {
8768*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8769*67e74705SXin Li }
8770*67e74705SXin Li
vec_st(vector bool int __a,int __b,unsigned int * __c)8771*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, int __b,
8772*67e74705SXin Li unsigned int *__c) {
8773*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8774*67e74705SXin Li }
8775*67e74705SXin Li
vec_st(vector bool int __a,int __b,vector bool int * __c)8776*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector bool int __a, int __b,
8777*67e74705SXin Li vector bool int *__c) {
8778*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8779*67e74705SXin Li }
8780*67e74705SXin Li
vec_st(vector float __a,int __b,vector float * __c)8781*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector float __a, int __b,
8782*67e74705SXin Li vector float *__c) {
8783*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8784*67e74705SXin Li }
8785*67e74705SXin Li
vec_st(vector float __a,int __b,float * __c)8786*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_st(vector float __a, int __b,
8787*67e74705SXin Li float *__c) {
8788*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8789*67e74705SXin Li }
8790*67e74705SXin Li
8791*67e74705SXin Li /* vec_stvx */
8792*67e74705SXin Li
vec_stvx(vector signed char __a,int __b,vector signed char * __c)8793*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, int __b,
8794*67e74705SXin Li vector signed char *__c) {
8795*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8796*67e74705SXin Li }
8797*67e74705SXin Li
vec_stvx(vector signed char __a,int __b,signed char * __c)8798*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector signed char __a, int __b,
8799*67e74705SXin Li signed char *__c) {
8800*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8801*67e74705SXin Li }
8802*67e74705SXin Li
vec_stvx(vector unsigned char __a,int __b,vector unsigned char * __c)8803*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, int __b,
8804*67e74705SXin Li vector unsigned char *__c) {
8805*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8806*67e74705SXin Li }
8807*67e74705SXin Li
vec_stvx(vector unsigned char __a,int __b,unsigned char * __c)8808*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned char __a, int __b,
8809*67e74705SXin Li unsigned char *__c) {
8810*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8811*67e74705SXin Li }
8812*67e74705SXin Li
vec_stvx(vector bool char __a,int __b,signed char * __c)8813*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, int __b,
8814*67e74705SXin Li signed char *__c) {
8815*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8816*67e74705SXin Li }
8817*67e74705SXin Li
vec_stvx(vector bool char __a,int __b,unsigned char * __c)8818*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, int __b,
8819*67e74705SXin Li unsigned char *__c) {
8820*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8821*67e74705SXin Li }
8822*67e74705SXin Li
vec_stvx(vector bool char __a,int __b,vector bool char * __c)8823*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector bool char __a, int __b,
8824*67e74705SXin Li vector bool char *__c) {
8825*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8826*67e74705SXin Li }
8827*67e74705SXin Li
vec_stvx(vector short __a,int __b,vector short * __c)8828*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, int __b,
8829*67e74705SXin Li vector short *__c) {
8830*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8831*67e74705SXin Li }
8832*67e74705SXin Li
vec_stvx(vector short __a,int __b,short * __c)8833*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector short __a, int __b,
8834*67e74705SXin Li short *__c) {
8835*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8836*67e74705SXin Li }
8837*67e74705SXin Li
vec_stvx(vector unsigned short __a,int __b,vector unsigned short * __c)8838*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, int __b,
8839*67e74705SXin Li vector unsigned short *__c) {
8840*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8841*67e74705SXin Li }
8842*67e74705SXin Li
vec_stvx(vector unsigned short __a,int __b,unsigned short * __c)8843*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned short __a, int __b,
8844*67e74705SXin Li unsigned short *__c) {
8845*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8846*67e74705SXin Li }
8847*67e74705SXin Li
vec_stvx(vector bool short __a,int __b,short * __c)8848*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, int __b,
8849*67e74705SXin Li short *__c) {
8850*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8851*67e74705SXin Li }
8852*67e74705SXin Li
vec_stvx(vector bool short __a,int __b,unsigned short * __c)8853*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, int __b,
8854*67e74705SXin Li unsigned short *__c) {
8855*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8856*67e74705SXin Li }
8857*67e74705SXin Li
vec_stvx(vector bool short __a,int __b,vector bool short * __c)8858*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector bool short __a, int __b,
8859*67e74705SXin Li vector bool short *__c) {
8860*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8861*67e74705SXin Li }
8862*67e74705SXin Li
vec_stvx(vector pixel __a,int __b,short * __c)8863*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, int __b,
8864*67e74705SXin Li short *__c) {
8865*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8866*67e74705SXin Li }
8867*67e74705SXin Li
vec_stvx(vector pixel __a,int __b,unsigned short * __c)8868*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, int __b,
8869*67e74705SXin Li unsigned short *__c) {
8870*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8871*67e74705SXin Li }
8872*67e74705SXin Li
vec_stvx(vector pixel __a,int __b,vector pixel * __c)8873*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector pixel __a, int __b,
8874*67e74705SXin Li vector pixel *__c) {
8875*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8876*67e74705SXin Li }
8877*67e74705SXin Li
vec_stvx(vector int __a,int __b,vector int * __c)8878*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, int __b,
8879*67e74705SXin Li vector int *__c) {
8880*67e74705SXin Li __builtin_altivec_stvx(__a, __b, __c);
8881*67e74705SXin Li }
8882*67e74705SXin Li
vec_stvx(vector int __a,int __b,int * __c)8883*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector int __a, int __b,
8884*67e74705SXin Li int *__c) {
8885*67e74705SXin Li __builtin_altivec_stvx(__a, __b, __c);
8886*67e74705SXin Li }
8887*67e74705SXin Li
vec_stvx(vector unsigned int __a,int __b,vector unsigned int * __c)8888*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, int __b,
8889*67e74705SXin Li vector unsigned int *__c) {
8890*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8891*67e74705SXin Li }
8892*67e74705SXin Li
vec_stvx(vector unsigned int __a,int __b,unsigned int * __c)8893*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector unsigned int __a, int __b,
8894*67e74705SXin Li unsigned int *__c) {
8895*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8896*67e74705SXin Li }
8897*67e74705SXin Li
vec_stvx(vector bool int __a,int __b,int * __c)8898*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, int __b,
8899*67e74705SXin Li int *__c) {
8900*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8901*67e74705SXin Li }
8902*67e74705SXin Li
vec_stvx(vector bool int __a,int __b,unsigned int * __c)8903*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, int __b,
8904*67e74705SXin Li unsigned int *__c) {
8905*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8906*67e74705SXin Li }
8907*67e74705SXin Li
vec_stvx(vector bool int __a,int __b,vector bool int * __c)8908*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector bool int __a, int __b,
8909*67e74705SXin Li vector bool int *__c) {
8910*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8911*67e74705SXin Li }
8912*67e74705SXin Li
vec_stvx(vector float __a,int __b,vector float * __c)8913*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, int __b,
8914*67e74705SXin Li vector float *__c) {
8915*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8916*67e74705SXin Li }
8917*67e74705SXin Li
vec_stvx(vector float __a,int __b,float * __c)8918*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvx(vector float __a, int __b,
8919*67e74705SXin Li float *__c) {
8920*67e74705SXin Li __builtin_altivec_stvx((vector int)__a, __b, __c);
8921*67e74705SXin Li }
8922*67e74705SXin Li
8923*67e74705SXin Li /* vec_ste */
8924*67e74705SXin Li
vec_ste(vector signed char __a,int __b,signed char * __c)8925*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector signed char __a, int __b,
8926*67e74705SXin Li signed char *__c) {
8927*67e74705SXin Li __builtin_altivec_stvebx((vector char)__a, __b, __c);
8928*67e74705SXin Li }
8929*67e74705SXin Li
vec_ste(vector unsigned char __a,int __b,unsigned char * __c)8930*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned char __a, int __b,
8931*67e74705SXin Li unsigned char *__c) {
8932*67e74705SXin Li __builtin_altivec_stvebx((vector char)__a, __b, __c);
8933*67e74705SXin Li }
8934*67e74705SXin Li
vec_ste(vector bool char __a,int __b,signed char * __c)8935*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, int __b,
8936*67e74705SXin Li signed char *__c) {
8937*67e74705SXin Li __builtin_altivec_stvebx((vector char)__a, __b, __c);
8938*67e74705SXin Li }
8939*67e74705SXin Li
vec_ste(vector bool char __a,int __b,unsigned char * __c)8940*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector bool char __a, int __b,
8941*67e74705SXin Li unsigned char *__c) {
8942*67e74705SXin Li __builtin_altivec_stvebx((vector char)__a, __b, __c);
8943*67e74705SXin Li }
8944*67e74705SXin Li
vec_ste(vector short __a,int __b,short * __c)8945*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector short __a, int __b,
8946*67e74705SXin Li short *__c) {
8947*67e74705SXin Li __builtin_altivec_stvehx(__a, __b, __c);
8948*67e74705SXin Li }
8949*67e74705SXin Li
vec_ste(vector unsigned short __a,int __b,unsigned short * __c)8950*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned short __a, int __b,
8951*67e74705SXin Li unsigned short *__c) {
8952*67e74705SXin Li __builtin_altivec_stvehx((vector short)__a, __b, __c);
8953*67e74705SXin Li }
8954*67e74705SXin Li
vec_ste(vector bool short __a,int __b,short * __c)8955*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, int __b,
8956*67e74705SXin Li short *__c) {
8957*67e74705SXin Li __builtin_altivec_stvehx((vector short)__a, __b, __c);
8958*67e74705SXin Li }
8959*67e74705SXin Li
vec_ste(vector bool short __a,int __b,unsigned short * __c)8960*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector bool short __a, int __b,
8961*67e74705SXin Li unsigned short *__c) {
8962*67e74705SXin Li __builtin_altivec_stvehx((vector short)__a, __b, __c);
8963*67e74705SXin Li }
8964*67e74705SXin Li
vec_ste(vector pixel __a,int __b,short * __c)8965*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, int __b,
8966*67e74705SXin Li short *__c) {
8967*67e74705SXin Li __builtin_altivec_stvehx((vector short)__a, __b, __c);
8968*67e74705SXin Li }
8969*67e74705SXin Li
vec_ste(vector pixel __a,int __b,unsigned short * __c)8970*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector pixel __a, int __b,
8971*67e74705SXin Li unsigned short *__c) {
8972*67e74705SXin Li __builtin_altivec_stvehx((vector short)__a, __b, __c);
8973*67e74705SXin Li }
8974*67e74705SXin Li
vec_ste(vector int __a,int __b,int * __c)8975*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector int __a, int __b, int *__c) {
8976*67e74705SXin Li __builtin_altivec_stvewx(__a, __b, __c);
8977*67e74705SXin Li }
8978*67e74705SXin Li
vec_ste(vector unsigned int __a,int __b,unsigned int * __c)8979*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector unsigned int __a, int __b,
8980*67e74705SXin Li unsigned int *__c) {
8981*67e74705SXin Li __builtin_altivec_stvewx((vector int)__a, __b, __c);
8982*67e74705SXin Li }
8983*67e74705SXin Li
vec_ste(vector bool int __a,int __b,int * __c)8984*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, int __b,
8985*67e74705SXin Li int *__c) {
8986*67e74705SXin Li __builtin_altivec_stvewx((vector int)__a, __b, __c);
8987*67e74705SXin Li }
8988*67e74705SXin Li
vec_ste(vector bool int __a,int __b,unsigned int * __c)8989*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector bool int __a, int __b,
8990*67e74705SXin Li unsigned int *__c) {
8991*67e74705SXin Li __builtin_altivec_stvewx((vector int)__a, __b, __c);
8992*67e74705SXin Li }
8993*67e74705SXin Li
vec_ste(vector float __a,int __b,float * __c)8994*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_ste(vector float __a, int __b,
8995*67e74705SXin Li float *__c) {
8996*67e74705SXin Li __builtin_altivec_stvewx((vector int)__a, __b, __c);
8997*67e74705SXin Li }
8998*67e74705SXin Li
8999*67e74705SXin Li /* vec_stvebx */
9000*67e74705SXin Li
vec_stvebx(vector signed char __a,int __b,signed char * __c)9001*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvebx(vector signed char __a, int __b,
9002*67e74705SXin Li signed char *__c) {
9003*67e74705SXin Li __builtin_altivec_stvebx((vector char)__a, __b, __c);
9004*67e74705SXin Li }
9005*67e74705SXin Li
vec_stvebx(vector unsigned char __a,int __b,unsigned char * __c)9006*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvebx(vector unsigned char __a,
9007*67e74705SXin Li int __b, unsigned char *__c) {
9008*67e74705SXin Li __builtin_altivec_stvebx((vector char)__a, __b, __c);
9009*67e74705SXin Li }
9010*67e74705SXin Li
vec_stvebx(vector bool char __a,int __b,signed char * __c)9011*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, int __b,
9012*67e74705SXin Li signed char *__c) {
9013*67e74705SXin Li __builtin_altivec_stvebx((vector char)__a, __b, __c);
9014*67e74705SXin Li }
9015*67e74705SXin Li
vec_stvebx(vector bool char __a,int __b,unsigned char * __c)9016*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvebx(vector bool char __a, int __b,
9017*67e74705SXin Li unsigned char *__c) {
9018*67e74705SXin Li __builtin_altivec_stvebx((vector char)__a, __b, __c);
9019*67e74705SXin Li }
9020*67e74705SXin Li
9021*67e74705SXin Li /* vec_stvehx */
9022*67e74705SXin Li
vec_stvehx(vector short __a,int __b,short * __c)9023*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvehx(vector short __a, int __b,
9024*67e74705SXin Li short *__c) {
9025*67e74705SXin Li __builtin_altivec_stvehx(__a, __b, __c);
9026*67e74705SXin Li }
9027*67e74705SXin Li
vec_stvehx(vector unsigned short __a,int __b,unsigned short * __c)9028*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvehx(vector unsigned short __a,
9029*67e74705SXin Li int __b, unsigned short *__c) {
9030*67e74705SXin Li __builtin_altivec_stvehx((vector short)__a, __b, __c);
9031*67e74705SXin Li }
9032*67e74705SXin Li
vec_stvehx(vector bool short __a,int __b,short * __c)9033*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, int __b,
9034*67e74705SXin Li short *__c) {
9035*67e74705SXin Li __builtin_altivec_stvehx((vector short)__a, __b, __c);
9036*67e74705SXin Li }
9037*67e74705SXin Li
vec_stvehx(vector bool short __a,int __b,unsigned short * __c)9038*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvehx(vector bool short __a, int __b,
9039*67e74705SXin Li unsigned short *__c) {
9040*67e74705SXin Li __builtin_altivec_stvehx((vector short)__a, __b, __c);
9041*67e74705SXin Li }
9042*67e74705SXin Li
vec_stvehx(vector pixel __a,int __b,short * __c)9043*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, int __b,
9044*67e74705SXin Li short *__c) {
9045*67e74705SXin Li __builtin_altivec_stvehx((vector short)__a, __b, __c);
9046*67e74705SXin Li }
9047*67e74705SXin Li
vec_stvehx(vector pixel __a,int __b,unsigned short * __c)9048*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvehx(vector pixel __a, int __b,
9049*67e74705SXin Li unsigned short *__c) {
9050*67e74705SXin Li __builtin_altivec_stvehx((vector short)__a, __b, __c);
9051*67e74705SXin Li }
9052*67e74705SXin Li
9053*67e74705SXin Li /* vec_stvewx */
9054*67e74705SXin Li
vec_stvewx(vector int __a,int __b,int * __c)9055*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvewx(vector int __a, int __b,
9056*67e74705SXin Li int *__c) {
9057*67e74705SXin Li __builtin_altivec_stvewx(__a, __b, __c);
9058*67e74705SXin Li }
9059*67e74705SXin Li
vec_stvewx(vector unsigned int __a,int __b,unsigned int * __c)9060*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvewx(vector unsigned int __a, int __b,
9061*67e74705SXin Li unsigned int *__c) {
9062*67e74705SXin Li __builtin_altivec_stvewx((vector int)__a, __b, __c);
9063*67e74705SXin Li }
9064*67e74705SXin Li
vec_stvewx(vector bool int __a,int __b,int * __c)9065*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, int __b,
9066*67e74705SXin Li int *__c) {
9067*67e74705SXin Li __builtin_altivec_stvewx((vector int)__a, __b, __c);
9068*67e74705SXin Li }
9069*67e74705SXin Li
vec_stvewx(vector bool int __a,int __b,unsigned int * __c)9070*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvewx(vector bool int __a, int __b,
9071*67e74705SXin Li unsigned int *__c) {
9072*67e74705SXin Li __builtin_altivec_stvewx((vector int)__a, __b, __c);
9073*67e74705SXin Li }
9074*67e74705SXin Li
vec_stvewx(vector float __a,int __b,float * __c)9075*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvewx(vector float __a, int __b,
9076*67e74705SXin Li float *__c) {
9077*67e74705SXin Li __builtin_altivec_stvewx((vector int)__a, __b, __c);
9078*67e74705SXin Li }
9079*67e74705SXin Li
9080*67e74705SXin Li /* vec_stl */
9081*67e74705SXin Li
vec_stl(vector signed char __a,int __b,vector signed char * __c)9082*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
9083*67e74705SXin Li vector signed char *__c) {
9084*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9085*67e74705SXin Li }
9086*67e74705SXin Li
vec_stl(vector signed char __a,int __b,signed char * __c)9087*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector signed char __a, int __b,
9088*67e74705SXin Li signed char *__c) {
9089*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9090*67e74705SXin Li }
9091*67e74705SXin Li
vec_stl(vector unsigned char __a,int __b,vector unsigned char * __c)9092*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
9093*67e74705SXin Li vector unsigned char *__c) {
9094*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9095*67e74705SXin Li }
9096*67e74705SXin Li
vec_stl(vector unsigned char __a,int __b,unsigned char * __c)9097*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned char __a, int __b,
9098*67e74705SXin Li unsigned char *__c) {
9099*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9100*67e74705SXin Li }
9101*67e74705SXin Li
vec_stl(vector bool char __a,int __b,signed char * __c)9102*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
9103*67e74705SXin Li signed char *__c) {
9104*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9105*67e74705SXin Li }
9106*67e74705SXin Li
vec_stl(vector bool char __a,int __b,unsigned char * __c)9107*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
9108*67e74705SXin Li unsigned char *__c) {
9109*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9110*67e74705SXin Li }
9111*67e74705SXin Li
vec_stl(vector bool char __a,int __b,vector bool char * __c)9112*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector bool char __a, int __b,
9113*67e74705SXin Li vector bool char *__c) {
9114*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9115*67e74705SXin Li }
9116*67e74705SXin Li
vec_stl(vector short __a,int __b,vector short * __c)9117*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
9118*67e74705SXin Li vector short *__c) {
9119*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9120*67e74705SXin Li }
9121*67e74705SXin Li
vec_stl(vector short __a,int __b,short * __c)9122*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector short __a, int __b,
9123*67e74705SXin Li short *__c) {
9124*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9125*67e74705SXin Li }
9126*67e74705SXin Li
vec_stl(vector unsigned short __a,int __b,vector unsigned short * __c)9127*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
9128*67e74705SXin Li vector unsigned short *__c) {
9129*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9130*67e74705SXin Li }
9131*67e74705SXin Li
vec_stl(vector unsigned short __a,int __b,unsigned short * __c)9132*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned short __a, int __b,
9133*67e74705SXin Li unsigned short *__c) {
9134*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9135*67e74705SXin Li }
9136*67e74705SXin Li
vec_stl(vector bool short __a,int __b,short * __c)9137*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
9138*67e74705SXin Li short *__c) {
9139*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9140*67e74705SXin Li }
9141*67e74705SXin Li
vec_stl(vector bool short __a,int __b,unsigned short * __c)9142*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
9143*67e74705SXin Li unsigned short *__c) {
9144*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9145*67e74705SXin Li }
9146*67e74705SXin Li
vec_stl(vector bool short __a,int __b,vector bool short * __c)9147*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector bool short __a, int __b,
9148*67e74705SXin Li vector bool short *__c) {
9149*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9150*67e74705SXin Li }
9151*67e74705SXin Li
vec_stl(vector pixel __a,int __b,short * __c)9152*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
9153*67e74705SXin Li short *__c) {
9154*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9155*67e74705SXin Li }
9156*67e74705SXin Li
vec_stl(vector pixel __a,int __b,unsigned short * __c)9157*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
9158*67e74705SXin Li unsigned short *__c) {
9159*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9160*67e74705SXin Li }
9161*67e74705SXin Li
vec_stl(vector pixel __a,int __b,vector pixel * __c)9162*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector pixel __a, int __b,
9163*67e74705SXin Li vector pixel *__c) {
9164*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9165*67e74705SXin Li }
9166*67e74705SXin Li
vec_stl(vector int __a,int __b,vector int * __c)9167*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b,
9168*67e74705SXin Li vector int *__c) {
9169*67e74705SXin Li __builtin_altivec_stvxl(__a, __b, __c);
9170*67e74705SXin Li }
9171*67e74705SXin Li
vec_stl(vector int __a,int __b,int * __c)9172*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector int __a, int __b, int *__c) {
9173*67e74705SXin Li __builtin_altivec_stvxl(__a, __b, __c);
9174*67e74705SXin Li }
9175*67e74705SXin Li
vec_stl(vector unsigned int __a,int __b,vector unsigned int * __c)9176*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
9177*67e74705SXin Li vector unsigned int *__c) {
9178*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9179*67e74705SXin Li }
9180*67e74705SXin Li
vec_stl(vector unsigned int __a,int __b,unsigned int * __c)9181*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector unsigned int __a, int __b,
9182*67e74705SXin Li unsigned int *__c) {
9183*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9184*67e74705SXin Li }
9185*67e74705SXin Li
vec_stl(vector bool int __a,int __b,int * __c)9186*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
9187*67e74705SXin Li int *__c) {
9188*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9189*67e74705SXin Li }
9190*67e74705SXin Li
vec_stl(vector bool int __a,int __b,unsigned int * __c)9191*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
9192*67e74705SXin Li unsigned int *__c) {
9193*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9194*67e74705SXin Li }
9195*67e74705SXin Li
vec_stl(vector bool int __a,int __b,vector bool int * __c)9196*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector bool int __a, int __b,
9197*67e74705SXin Li vector bool int *__c) {
9198*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9199*67e74705SXin Li }
9200*67e74705SXin Li
vec_stl(vector float __a,int __b,vector float * __c)9201*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
9202*67e74705SXin Li vector float *__c) {
9203*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9204*67e74705SXin Li }
9205*67e74705SXin Li
vec_stl(vector float __a,int __b,float * __c)9206*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stl(vector float __a, int __b,
9207*67e74705SXin Li float *__c) {
9208*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9209*67e74705SXin Li }
9210*67e74705SXin Li
9211*67e74705SXin Li /* vec_stvxl */
9212*67e74705SXin Li
vec_stvxl(vector signed char __a,int __b,vector signed char * __c)9213*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
9214*67e74705SXin Li vector signed char *__c) {
9215*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9216*67e74705SXin Li }
9217*67e74705SXin Li
vec_stvxl(vector signed char __a,int __b,signed char * __c)9218*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector signed char __a, int __b,
9219*67e74705SXin Li signed char *__c) {
9220*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9221*67e74705SXin Li }
9222*67e74705SXin Li
vec_stvxl(vector unsigned char __a,int __b,vector unsigned char * __c)9223*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
9224*67e74705SXin Li vector unsigned char *__c) {
9225*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9226*67e74705SXin Li }
9227*67e74705SXin Li
vec_stvxl(vector unsigned char __a,int __b,unsigned char * __c)9228*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned char __a, int __b,
9229*67e74705SXin Li unsigned char *__c) {
9230*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9231*67e74705SXin Li }
9232*67e74705SXin Li
vec_stvxl(vector bool char __a,int __b,signed char * __c)9233*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
9234*67e74705SXin Li signed char *__c) {
9235*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9236*67e74705SXin Li }
9237*67e74705SXin Li
vec_stvxl(vector bool char __a,int __b,unsigned char * __c)9238*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
9239*67e74705SXin Li unsigned char *__c) {
9240*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9241*67e74705SXin Li }
9242*67e74705SXin Li
vec_stvxl(vector bool char __a,int __b,vector bool char * __c)9243*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool char __a, int __b,
9244*67e74705SXin Li vector bool char *__c) {
9245*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9246*67e74705SXin Li }
9247*67e74705SXin Li
vec_stvxl(vector short __a,int __b,vector short * __c)9248*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
9249*67e74705SXin Li vector short *__c) {
9250*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9251*67e74705SXin Li }
9252*67e74705SXin Li
vec_stvxl(vector short __a,int __b,short * __c)9253*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector short __a, int __b,
9254*67e74705SXin Li short *__c) {
9255*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9256*67e74705SXin Li }
9257*67e74705SXin Li
vec_stvxl(vector unsigned short __a,int __b,vector unsigned short * __c)9258*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
9259*67e74705SXin Li int __b,
9260*67e74705SXin Li vector unsigned short *__c) {
9261*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9262*67e74705SXin Li }
9263*67e74705SXin Li
vec_stvxl(vector unsigned short __a,int __b,unsigned short * __c)9264*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned short __a,
9265*67e74705SXin Li int __b, unsigned short *__c) {
9266*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9267*67e74705SXin Li }
9268*67e74705SXin Li
vec_stvxl(vector bool short __a,int __b,short * __c)9269*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
9270*67e74705SXin Li short *__c) {
9271*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9272*67e74705SXin Li }
9273*67e74705SXin Li
vec_stvxl(vector bool short __a,int __b,unsigned short * __c)9274*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
9275*67e74705SXin Li unsigned short *__c) {
9276*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9277*67e74705SXin Li }
9278*67e74705SXin Li
vec_stvxl(vector bool short __a,int __b,vector bool short * __c)9279*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool short __a, int __b,
9280*67e74705SXin Li vector bool short *__c) {
9281*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9282*67e74705SXin Li }
9283*67e74705SXin Li
vec_stvxl(vector pixel __a,int __b,short * __c)9284*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
9285*67e74705SXin Li short *__c) {
9286*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9287*67e74705SXin Li }
9288*67e74705SXin Li
vec_stvxl(vector pixel __a,int __b,unsigned short * __c)9289*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
9290*67e74705SXin Li unsigned short *__c) {
9291*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9292*67e74705SXin Li }
9293*67e74705SXin Li
vec_stvxl(vector pixel __a,int __b,vector pixel * __c)9294*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector pixel __a, int __b,
9295*67e74705SXin Li vector pixel *__c) {
9296*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9297*67e74705SXin Li }
9298*67e74705SXin Li
vec_stvxl(vector int __a,int __b,vector int * __c)9299*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
9300*67e74705SXin Li vector int *__c) {
9301*67e74705SXin Li __builtin_altivec_stvxl(__a, __b, __c);
9302*67e74705SXin Li }
9303*67e74705SXin Li
vec_stvxl(vector int __a,int __b,int * __c)9304*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector int __a, int __b,
9305*67e74705SXin Li int *__c) {
9306*67e74705SXin Li __builtin_altivec_stvxl(__a, __b, __c);
9307*67e74705SXin Li }
9308*67e74705SXin Li
vec_stvxl(vector unsigned int __a,int __b,vector unsigned int * __c)9309*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
9310*67e74705SXin Li vector unsigned int *__c) {
9311*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9312*67e74705SXin Li }
9313*67e74705SXin Li
vec_stvxl(vector unsigned int __a,int __b,unsigned int * __c)9314*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector unsigned int __a, int __b,
9315*67e74705SXin Li unsigned int *__c) {
9316*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9317*67e74705SXin Li }
9318*67e74705SXin Li
vec_stvxl(vector bool int __a,int __b,int * __c)9319*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
9320*67e74705SXin Li int *__c) {
9321*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9322*67e74705SXin Li }
9323*67e74705SXin Li
vec_stvxl(vector bool int __a,int __b,unsigned int * __c)9324*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
9325*67e74705SXin Li unsigned int *__c) {
9326*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9327*67e74705SXin Li }
9328*67e74705SXin Li
vec_stvxl(vector bool int __a,int __b,vector bool int * __c)9329*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector bool int __a, int __b,
9330*67e74705SXin Li vector bool int *__c) {
9331*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9332*67e74705SXin Li }
9333*67e74705SXin Li
vec_stvxl(vector float __a,int __b,vector float * __c)9334*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
9335*67e74705SXin Li vector float *__c) {
9336*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9337*67e74705SXin Li }
9338*67e74705SXin Li
vec_stvxl(vector float __a,int __b,float * __c)9339*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvxl(vector float __a, int __b,
9340*67e74705SXin Li float *__c) {
9341*67e74705SXin Li __builtin_altivec_stvxl((vector int)__a, __b, __c);
9342*67e74705SXin Li }
9343*67e74705SXin Li
9344*67e74705SXin Li /* vec_sub */
9345*67e74705SXin Li
9346*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_sub(vector signed char __a,vector signed char __b)9347*67e74705SXin Li vec_sub(vector signed char __a, vector signed char __b) {
9348*67e74705SXin Li return __a - __b;
9349*67e74705SXin Li }
9350*67e74705SXin Li
9351*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_sub(vector bool char __a,vector signed char __b)9352*67e74705SXin Li vec_sub(vector bool char __a, vector signed char __b) {
9353*67e74705SXin Li return (vector signed char)__a - __b;
9354*67e74705SXin Li }
9355*67e74705SXin Li
9356*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_sub(vector signed char __a,vector bool char __b)9357*67e74705SXin Li vec_sub(vector signed char __a, vector bool char __b) {
9358*67e74705SXin Li return __a - (vector signed char)__b;
9359*67e74705SXin Li }
9360*67e74705SXin Li
9361*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_sub(vector unsigned char __a,vector unsigned char __b)9362*67e74705SXin Li vec_sub(vector unsigned char __a, vector unsigned char __b) {
9363*67e74705SXin Li return __a - __b;
9364*67e74705SXin Li }
9365*67e74705SXin Li
9366*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_sub(vector bool char __a,vector unsigned char __b)9367*67e74705SXin Li vec_sub(vector bool char __a, vector unsigned char __b) {
9368*67e74705SXin Li return (vector unsigned char)__a - __b;
9369*67e74705SXin Li }
9370*67e74705SXin Li
9371*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_sub(vector unsigned char __a,vector bool char __b)9372*67e74705SXin Li vec_sub(vector unsigned char __a, vector bool char __b) {
9373*67e74705SXin Li return __a - (vector unsigned char)__b;
9374*67e74705SXin Li }
9375*67e74705SXin Li
vec_sub(vector short __a,vector short __b)9376*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
9377*67e74705SXin Li vector short __b) {
9378*67e74705SXin Li return __a - __b;
9379*67e74705SXin Li }
9380*67e74705SXin Li
vec_sub(vector bool short __a,vector short __b)9381*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_sub(vector bool short __a,
9382*67e74705SXin Li vector short __b) {
9383*67e74705SXin Li return (vector short)__a - __b;
9384*67e74705SXin Li }
9385*67e74705SXin Li
vec_sub(vector short __a,vector bool short __b)9386*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_sub(vector short __a,
9387*67e74705SXin Li vector bool short __b) {
9388*67e74705SXin Li return __a - (vector short)__b;
9389*67e74705SXin Li }
9390*67e74705SXin Li
9391*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sub(vector unsigned short __a,vector unsigned short __b)9392*67e74705SXin Li vec_sub(vector unsigned short __a, vector unsigned short __b) {
9393*67e74705SXin Li return __a - __b;
9394*67e74705SXin Li }
9395*67e74705SXin Li
9396*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sub(vector bool short __a,vector unsigned short __b)9397*67e74705SXin Li vec_sub(vector bool short __a, vector unsigned short __b) {
9398*67e74705SXin Li return (vector unsigned short)__a - __b;
9399*67e74705SXin Li }
9400*67e74705SXin Li
9401*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_sub(vector unsigned short __a,vector bool short __b)9402*67e74705SXin Li vec_sub(vector unsigned short __a, vector bool short __b) {
9403*67e74705SXin Li return __a - (vector unsigned short)__b;
9404*67e74705SXin Li }
9405*67e74705SXin Li
vec_sub(vector int __a,vector int __b)9406*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
9407*67e74705SXin Li vector int __b) {
9408*67e74705SXin Li return __a - __b;
9409*67e74705SXin Li }
9410*67e74705SXin Li
vec_sub(vector bool int __a,vector int __b)9411*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sub(vector bool int __a,
9412*67e74705SXin Li vector int __b) {
9413*67e74705SXin Li return (vector int)__a - __b;
9414*67e74705SXin Li }
9415*67e74705SXin Li
vec_sub(vector int __a,vector bool int __b)9416*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sub(vector int __a,
9417*67e74705SXin Li vector bool int __b) {
9418*67e74705SXin Li return __a - (vector int)__b;
9419*67e74705SXin Li }
9420*67e74705SXin Li
9421*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_sub(vector unsigned int __a,vector unsigned int __b)9422*67e74705SXin Li vec_sub(vector unsigned int __a, vector unsigned int __b) {
9423*67e74705SXin Li return __a - __b;
9424*67e74705SXin Li }
9425*67e74705SXin Li
9426*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_sub(vector bool int __a,vector unsigned int __b)9427*67e74705SXin Li vec_sub(vector bool int __a, vector unsigned int __b) {
9428*67e74705SXin Li return (vector unsigned int)__a - __b;
9429*67e74705SXin Li }
9430*67e74705SXin Li
9431*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_sub(vector unsigned int __a,vector bool int __b)9432*67e74705SXin Li vec_sub(vector unsigned int __a, vector bool int __b) {
9433*67e74705SXin Li return __a - (vector unsigned int)__b;
9434*67e74705SXin Li }
9435*67e74705SXin Li
9436*67e74705SXin Li #if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
9437*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_sub(vector signed __int128 __a,vector signed __int128 __b)9438*67e74705SXin Li vec_sub(vector signed __int128 __a, vector signed __int128 __b) {
9439*67e74705SXin Li return __a - __b;
9440*67e74705SXin Li }
9441*67e74705SXin Li
9442*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_sub(vector unsigned __int128 __a,vector unsigned __int128 __b)9443*67e74705SXin Li vec_sub(vector unsigned __int128 __a, vector unsigned __int128 __b) {
9444*67e74705SXin Li return __a - __b;
9445*67e74705SXin Li }
9446*67e74705SXin Li #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
9447*67e74705SXin Li
9448*67e74705SXin Li #ifdef __VSX__
9449*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_sub(vector signed long long __a,vector signed long long __b)9450*67e74705SXin Li vec_sub(vector signed long long __a, vector signed long long __b) {
9451*67e74705SXin Li return __a - __b;
9452*67e74705SXin Li }
9453*67e74705SXin Li
9454*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_sub(vector unsigned long long __a,vector unsigned long long __b)9455*67e74705SXin Li vec_sub(vector unsigned long long __a, vector unsigned long long __b) {
9456*67e74705SXin Li return __a - __b;
9457*67e74705SXin Li }
9458*67e74705SXin Li
vec_sub(vector double __a,vector double __b)9459*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_sub(vector double __a,
9460*67e74705SXin Li vector double __b) {
9461*67e74705SXin Li return __a - __b;
9462*67e74705SXin Li }
9463*67e74705SXin Li #endif
9464*67e74705SXin Li
vec_sub(vector float __a,vector float __b)9465*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_sub(vector float __a,
9466*67e74705SXin Li vector float __b) {
9467*67e74705SXin Li return __a - __b;
9468*67e74705SXin Li }
9469*67e74705SXin Li
9470*67e74705SXin Li /* vec_vsububm */
9471*67e74705SXin Li
9472*67e74705SXin Li #define __builtin_altivec_vsububm vec_vsububm
9473*67e74705SXin Li
9474*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsububm(vector signed char __a,vector signed char __b)9475*67e74705SXin Li vec_vsububm(vector signed char __a, vector signed char __b) {
9476*67e74705SXin Li return __a - __b;
9477*67e74705SXin Li }
9478*67e74705SXin Li
9479*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsububm(vector bool char __a,vector signed char __b)9480*67e74705SXin Li vec_vsububm(vector bool char __a, vector signed char __b) {
9481*67e74705SXin Li return (vector signed char)__a - __b;
9482*67e74705SXin Li }
9483*67e74705SXin Li
9484*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsububm(vector signed char __a,vector bool char __b)9485*67e74705SXin Li vec_vsububm(vector signed char __a, vector bool char __b) {
9486*67e74705SXin Li return __a - (vector signed char)__b;
9487*67e74705SXin Li }
9488*67e74705SXin Li
9489*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsububm(vector unsigned char __a,vector unsigned char __b)9490*67e74705SXin Li vec_vsububm(vector unsigned char __a, vector unsigned char __b) {
9491*67e74705SXin Li return __a - __b;
9492*67e74705SXin Li }
9493*67e74705SXin Li
9494*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsububm(vector bool char __a,vector unsigned char __b)9495*67e74705SXin Li vec_vsububm(vector bool char __a, vector unsigned char __b) {
9496*67e74705SXin Li return (vector unsigned char)__a - __b;
9497*67e74705SXin Li }
9498*67e74705SXin Li
9499*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsububm(vector unsigned char __a,vector bool char __b)9500*67e74705SXin Li vec_vsububm(vector unsigned char __a, vector bool char __b) {
9501*67e74705SXin Li return __a - (vector unsigned char)__b;
9502*67e74705SXin Li }
9503*67e74705SXin Li
9504*67e74705SXin Li /* vec_vsubuhm */
9505*67e74705SXin Li
9506*67e74705SXin Li #define __builtin_altivec_vsubuhm vec_vsubuhm
9507*67e74705SXin Li
vec_vsubuhm(vector short __a,vector short __b)9508*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
9509*67e74705SXin Li vector short __b) {
9510*67e74705SXin Li return __a - __b;
9511*67e74705SXin Li }
9512*67e74705SXin Li
vec_vsubuhm(vector bool short __a,vector short __b)9513*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector bool short __a,
9514*67e74705SXin Li vector short __b) {
9515*67e74705SXin Li return (vector short)__a - __b;
9516*67e74705SXin Li }
9517*67e74705SXin Li
vec_vsubuhm(vector short __a,vector bool short __b)9518*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsubuhm(vector short __a,
9519*67e74705SXin Li vector bool short __b) {
9520*67e74705SXin Li return __a - (vector short)__b;
9521*67e74705SXin Li }
9522*67e74705SXin Li
9523*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsubuhm(vector unsigned short __a,vector unsigned short __b)9524*67e74705SXin Li vec_vsubuhm(vector unsigned short __a, vector unsigned short __b) {
9525*67e74705SXin Li return __a - __b;
9526*67e74705SXin Li }
9527*67e74705SXin Li
9528*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsubuhm(vector bool short __a,vector unsigned short __b)9529*67e74705SXin Li vec_vsubuhm(vector bool short __a, vector unsigned short __b) {
9530*67e74705SXin Li return (vector unsigned short)__a - __b;
9531*67e74705SXin Li }
9532*67e74705SXin Li
9533*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsubuhm(vector unsigned short __a,vector bool short __b)9534*67e74705SXin Li vec_vsubuhm(vector unsigned short __a, vector bool short __b) {
9535*67e74705SXin Li return __a - (vector unsigned short)__b;
9536*67e74705SXin Li }
9537*67e74705SXin Li
9538*67e74705SXin Li /* vec_vsubuwm */
9539*67e74705SXin Li
9540*67e74705SXin Li #define __builtin_altivec_vsubuwm vec_vsubuwm
9541*67e74705SXin Li
vec_vsubuwm(vector int __a,vector int __b)9542*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
9543*67e74705SXin Li vector int __b) {
9544*67e74705SXin Li return __a - __b;
9545*67e74705SXin Li }
9546*67e74705SXin Li
vec_vsubuwm(vector bool int __a,vector int __b)9547*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector bool int __a,
9548*67e74705SXin Li vector int __b) {
9549*67e74705SXin Li return (vector int)__a - __b;
9550*67e74705SXin Li }
9551*67e74705SXin Li
vec_vsubuwm(vector int __a,vector bool int __b)9552*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsubuwm(vector int __a,
9553*67e74705SXin Li vector bool int __b) {
9554*67e74705SXin Li return __a - (vector int)__b;
9555*67e74705SXin Li }
9556*67e74705SXin Li
9557*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsubuwm(vector unsigned int __a,vector unsigned int __b)9558*67e74705SXin Li vec_vsubuwm(vector unsigned int __a, vector unsigned int __b) {
9559*67e74705SXin Li return __a - __b;
9560*67e74705SXin Li }
9561*67e74705SXin Li
9562*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsubuwm(vector bool int __a,vector unsigned int __b)9563*67e74705SXin Li vec_vsubuwm(vector bool int __a, vector unsigned int __b) {
9564*67e74705SXin Li return (vector unsigned int)__a - __b;
9565*67e74705SXin Li }
9566*67e74705SXin Li
9567*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsubuwm(vector unsigned int __a,vector bool int __b)9568*67e74705SXin Li vec_vsubuwm(vector unsigned int __a, vector bool int __b) {
9569*67e74705SXin Li return __a - (vector unsigned int)__b;
9570*67e74705SXin Li }
9571*67e74705SXin Li
9572*67e74705SXin Li /* vec_vsubfp */
9573*67e74705SXin Li
9574*67e74705SXin Li #define __builtin_altivec_vsubfp vec_vsubfp
9575*67e74705SXin Li
9576*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vsubfp(vector float __a,vector float __b)9577*67e74705SXin Li vec_vsubfp(vector float __a, vector float __b) {
9578*67e74705SXin Li return __a - __b;
9579*67e74705SXin Li }
9580*67e74705SXin Li
9581*67e74705SXin Li /* vec_subc */
9582*67e74705SXin Li
9583*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_subc(vector unsigned int __a,vector unsigned int __b)9584*67e74705SXin Li vec_subc(vector unsigned int __a, vector unsigned int __b) {
9585*67e74705SXin Li return __builtin_altivec_vsubcuw(__a, __b);
9586*67e74705SXin Li }
9587*67e74705SXin Li
9588*67e74705SXin Li #if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
9589*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_subc(vector unsigned __int128 __a,vector unsigned __int128 __b)9590*67e74705SXin Li vec_subc(vector unsigned __int128 __a, vector unsigned __int128 __b) {
9591*67e74705SXin Li return __builtin_altivec_vsubcuq(__a, __b);
9592*67e74705SXin Li }
9593*67e74705SXin Li
9594*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_subc(vector signed __int128 __a,vector signed __int128 __b)9595*67e74705SXin Li vec_subc(vector signed __int128 __a, vector signed __int128 __b) {
9596*67e74705SXin Li return __builtin_altivec_vsubcuq(__a, __b);
9597*67e74705SXin Li }
9598*67e74705SXin Li #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
9599*67e74705SXin Li
9600*67e74705SXin Li /* vec_vsubcuw */
9601*67e74705SXin Li
9602*67e74705SXin Li static __inline__ vector unsigned int __attribute__((__always_inline__))
vec_vsubcuw(vector unsigned int __a,vector unsigned int __b)9603*67e74705SXin Li vec_vsubcuw(vector unsigned int __a, vector unsigned int __b) {
9604*67e74705SXin Li return __builtin_altivec_vsubcuw(__a, __b);
9605*67e74705SXin Li }
9606*67e74705SXin Li
9607*67e74705SXin Li /* vec_subs */
9608*67e74705SXin Li
9609*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_subs(vector signed char __a,vector signed char __b)9610*67e74705SXin Li vec_subs(vector signed char __a, vector signed char __b) {
9611*67e74705SXin Li return __builtin_altivec_vsubsbs(__a, __b);
9612*67e74705SXin Li }
9613*67e74705SXin Li
9614*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_subs(vector bool char __a,vector signed char __b)9615*67e74705SXin Li vec_subs(vector bool char __a, vector signed char __b) {
9616*67e74705SXin Li return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
9617*67e74705SXin Li }
9618*67e74705SXin Li
9619*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_subs(vector signed char __a,vector bool char __b)9620*67e74705SXin Li vec_subs(vector signed char __a, vector bool char __b) {
9621*67e74705SXin Li return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
9622*67e74705SXin Li }
9623*67e74705SXin Li
9624*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_subs(vector unsigned char __a,vector unsigned char __b)9625*67e74705SXin Li vec_subs(vector unsigned char __a, vector unsigned char __b) {
9626*67e74705SXin Li return __builtin_altivec_vsububs(__a, __b);
9627*67e74705SXin Li }
9628*67e74705SXin Li
9629*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_subs(vector bool char __a,vector unsigned char __b)9630*67e74705SXin Li vec_subs(vector bool char __a, vector unsigned char __b) {
9631*67e74705SXin Li return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
9632*67e74705SXin Li }
9633*67e74705SXin Li
9634*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_subs(vector unsigned char __a,vector bool char __b)9635*67e74705SXin Li vec_subs(vector unsigned char __a, vector bool char __b) {
9636*67e74705SXin Li return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
9637*67e74705SXin Li }
9638*67e74705SXin Li
vec_subs(vector short __a,vector short __b)9639*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
9640*67e74705SXin Li vector short __b) {
9641*67e74705SXin Li return __builtin_altivec_vsubshs(__a, __b);
9642*67e74705SXin Li }
9643*67e74705SXin Li
vec_subs(vector bool short __a,vector short __b)9644*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_subs(vector bool short __a,
9645*67e74705SXin Li vector short __b) {
9646*67e74705SXin Li return __builtin_altivec_vsubshs((vector short)__a, __b);
9647*67e74705SXin Li }
9648*67e74705SXin Li
vec_subs(vector short __a,vector bool short __b)9649*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_subs(vector short __a,
9650*67e74705SXin Li vector bool short __b) {
9651*67e74705SXin Li return __builtin_altivec_vsubshs(__a, (vector short)__b);
9652*67e74705SXin Li }
9653*67e74705SXin Li
9654*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_subs(vector unsigned short __a,vector unsigned short __b)9655*67e74705SXin Li vec_subs(vector unsigned short __a, vector unsigned short __b) {
9656*67e74705SXin Li return __builtin_altivec_vsubuhs(__a, __b);
9657*67e74705SXin Li }
9658*67e74705SXin Li
9659*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_subs(vector bool short __a,vector unsigned short __b)9660*67e74705SXin Li vec_subs(vector bool short __a, vector unsigned short __b) {
9661*67e74705SXin Li return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
9662*67e74705SXin Li }
9663*67e74705SXin Li
9664*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_subs(vector unsigned short __a,vector bool short __b)9665*67e74705SXin Li vec_subs(vector unsigned short __a, vector bool short __b) {
9666*67e74705SXin Li return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
9667*67e74705SXin Li }
9668*67e74705SXin Li
vec_subs(vector int __a,vector int __b)9669*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
9670*67e74705SXin Li vector int __b) {
9671*67e74705SXin Li return __builtin_altivec_vsubsws(__a, __b);
9672*67e74705SXin Li }
9673*67e74705SXin Li
vec_subs(vector bool int __a,vector int __b)9674*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_subs(vector bool int __a,
9675*67e74705SXin Li vector int __b) {
9676*67e74705SXin Li return __builtin_altivec_vsubsws((vector int)__a, __b);
9677*67e74705SXin Li }
9678*67e74705SXin Li
vec_subs(vector int __a,vector bool int __b)9679*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_subs(vector int __a,
9680*67e74705SXin Li vector bool int __b) {
9681*67e74705SXin Li return __builtin_altivec_vsubsws(__a, (vector int)__b);
9682*67e74705SXin Li }
9683*67e74705SXin Li
9684*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_subs(vector unsigned int __a,vector unsigned int __b)9685*67e74705SXin Li vec_subs(vector unsigned int __a, vector unsigned int __b) {
9686*67e74705SXin Li return __builtin_altivec_vsubuws(__a, __b);
9687*67e74705SXin Li }
9688*67e74705SXin Li
9689*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_subs(vector bool int __a,vector unsigned int __b)9690*67e74705SXin Li vec_subs(vector bool int __a, vector unsigned int __b) {
9691*67e74705SXin Li return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
9692*67e74705SXin Li }
9693*67e74705SXin Li
9694*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_subs(vector unsigned int __a,vector bool int __b)9695*67e74705SXin Li vec_subs(vector unsigned int __a, vector bool int __b) {
9696*67e74705SXin Li return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
9697*67e74705SXin Li }
9698*67e74705SXin Li
9699*67e74705SXin Li /* vec_vsubsbs */
9700*67e74705SXin Li
9701*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsubsbs(vector signed char __a,vector signed char __b)9702*67e74705SXin Li vec_vsubsbs(vector signed char __a, vector signed char __b) {
9703*67e74705SXin Li return __builtin_altivec_vsubsbs(__a, __b);
9704*67e74705SXin Li }
9705*67e74705SXin Li
9706*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsubsbs(vector bool char __a,vector signed char __b)9707*67e74705SXin Li vec_vsubsbs(vector bool char __a, vector signed char __b) {
9708*67e74705SXin Li return __builtin_altivec_vsubsbs((vector signed char)__a, __b);
9709*67e74705SXin Li }
9710*67e74705SXin Li
9711*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsubsbs(vector signed char __a,vector bool char __b)9712*67e74705SXin Li vec_vsubsbs(vector signed char __a, vector bool char __b) {
9713*67e74705SXin Li return __builtin_altivec_vsubsbs(__a, (vector signed char)__b);
9714*67e74705SXin Li }
9715*67e74705SXin Li
9716*67e74705SXin Li /* vec_vsububs */
9717*67e74705SXin Li
9718*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsububs(vector unsigned char __a,vector unsigned char __b)9719*67e74705SXin Li vec_vsububs(vector unsigned char __a, vector unsigned char __b) {
9720*67e74705SXin Li return __builtin_altivec_vsububs(__a, __b);
9721*67e74705SXin Li }
9722*67e74705SXin Li
9723*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsububs(vector bool char __a,vector unsigned char __b)9724*67e74705SXin Li vec_vsububs(vector bool char __a, vector unsigned char __b) {
9725*67e74705SXin Li return __builtin_altivec_vsububs((vector unsigned char)__a, __b);
9726*67e74705SXin Li }
9727*67e74705SXin Li
9728*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsububs(vector unsigned char __a,vector bool char __b)9729*67e74705SXin Li vec_vsububs(vector unsigned char __a, vector bool char __b) {
9730*67e74705SXin Li return __builtin_altivec_vsububs(__a, (vector unsigned char)__b);
9731*67e74705SXin Li }
9732*67e74705SXin Li
9733*67e74705SXin Li /* vec_vsubshs */
9734*67e74705SXin Li
vec_vsubshs(vector short __a,vector short __b)9735*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
9736*67e74705SXin Li vector short __b) {
9737*67e74705SXin Li return __builtin_altivec_vsubshs(__a, __b);
9738*67e74705SXin Li }
9739*67e74705SXin Li
vec_vsubshs(vector bool short __a,vector short __b)9740*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector bool short __a,
9741*67e74705SXin Li vector short __b) {
9742*67e74705SXin Li return __builtin_altivec_vsubshs((vector short)__a, __b);
9743*67e74705SXin Li }
9744*67e74705SXin Li
vec_vsubshs(vector short __a,vector bool short __b)9745*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vsubshs(vector short __a,
9746*67e74705SXin Li vector bool short __b) {
9747*67e74705SXin Li return __builtin_altivec_vsubshs(__a, (vector short)__b);
9748*67e74705SXin Li }
9749*67e74705SXin Li
9750*67e74705SXin Li /* vec_vsubuhs */
9751*67e74705SXin Li
9752*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsubuhs(vector unsigned short __a,vector unsigned short __b)9753*67e74705SXin Li vec_vsubuhs(vector unsigned short __a, vector unsigned short __b) {
9754*67e74705SXin Li return __builtin_altivec_vsubuhs(__a, __b);
9755*67e74705SXin Li }
9756*67e74705SXin Li
9757*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsubuhs(vector bool short __a,vector unsigned short __b)9758*67e74705SXin Li vec_vsubuhs(vector bool short __a, vector unsigned short __b) {
9759*67e74705SXin Li return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b);
9760*67e74705SXin Li }
9761*67e74705SXin Li
9762*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsubuhs(vector unsigned short __a,vector bool short __b)9763*67e74705SXin Li vec_vsubuhs(vector unsigned short __a, vector bool short __b) {
9764*67e74705SXin Li return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b);
9765*67e74705SXin Li }
9766*67e74705SXin Li
9767*67e74705SXin Li /* vec_vsubsws */
9768*67e74705SXin Li
vec_vsubsws(vector int __a,vector int __b)9769*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
9770*67e74705SXin Li vector int __b) {
9771*67e74705SXin Li return __builtin_altivec_vsubsws(__a, __b);
9772*67e74705SXin Li }
9773*67e74705SXin Li
vec_vsubsws(vector bool int __a,vector int __b)9774*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector bool int __a,
9775*67e74705SXin Li vector int __b) {
9776*67e74705SXin Li return __builtin_altivec_vsubsws((vector int)__a, __b);
9777*67e74705SXin Li }
9778*67e74705SXin Li
vec_vsubsws(vector int __a,vector bool int __b)9779*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vsubsws(vector int __a,
9780*67e74705SXin Li vector bool int __b) {
9781*67e74705SXin Li return __builtin_altivec_vsubsws(__a, (vector int)__b);
9782*67e74705SXin Li }
9783*67e74705SXin Li
9784*67e74705SXin Li /* vec_vsubuws */
9785*67e74705SXin Li
9786*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsubuws(vector unsigned int __a,vector unsigned int __b)9787*67e74705SXin Li vec_vsubuws(vector unsigned int __a, vector unsigned int __b) {
9788*67e74705SXin Li return __builtin_altivec_vsubuws(__a, __b);
9789*67e74705SXin Li }
9790*67e74705SXin Li
9791*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsubuws(vector bool int __a,vector unsigned int __b)9792*67e74705SXin Li vec_vsubuws(vector bool int __a, vector unsigned int __b) {
9793*67e74705SXin Li return __builtin_altivec_vsubuws((vector unsigned int)__a, __b);
9794*67e74705SXin Li }
9795*67e74705SXin Li
9796*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsubuws(vector unsigned int __a,vector bool int __b)9797*67e74705SXin Li vec_vsubuws(vector unsigned int __a, vector bool int __b) {
9798*67e74705SXin Li return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b);
9799*67e74705SXin Li }
9800*67e74705SXin Li
9801*67e74705SXin Li #if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
9802*67e74705SXin Li /* vec_vsubuqm */
9803*67e74705SXin Li
9804*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_vsubuqm(vector signed __int128 __a,vector signed __int128 __b)9805*67e74705SXin Li vec_vsubuqm(vector signed __int128 __a, vector signed __int128 __b) {
9806*67e74705SXin Li return __a - __b;
9807*67e74705SXin Li }
9808*67e74705SXin Li
9809*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_vsubuqm(vector unsigned __int128 __a,vector unsigned __int128 __b)9810*67e74705SXin Li vec_vsubuqm(vector unsigned __int128 __a, vector unsigned __int128 __b) {
9811*67e74705SXin Li return __a - __b;
9812*67e74705SXin Li }
9813*67e74705SXin Li
9814*67e74705SXin Li /* vec_vsubeuqm */
9815*67e74705SXin Li
9816*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_vsubeuqm(vector signed __int128 __a,vector signed __int128 __b,vector signed __int128 __c)9817*67e74705SXin Li vec_vsubeuqm(vector signed __int128 __a, vector signed __int128 __b,
9818*67e74705SXin Li vector signed __int128 __c) {
9819*67e74705SXin Li return __builtin_altivec_vsubeuqm(__a, __b, __c);
9820*67e74705SXin Li }
9821*67e74705SXin Li
9822*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_vsubeuqm(vector unsigned __int128 __a,vector unsigned __int128 __b,vector unsigned __int128 __c)9823*67e74705SXin Li vec_vsubeuqm(vector unsigned __int128 __a, vector unsigned __int128 __b,
9824*67e74705SXin Li vector unsigned __int128 __c) {
9825*67e74705SXin Li return __builtin_altivec_vsubeuqm(__a, __b, __c);
9826*67e74705SXin Li }
9827*67e74705SXin Li
9828*67e74705SXin Li /* vec_vsubcuq */
9829*67e74705SXin Li
9830*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_vsubcuq(vector signed __int128 __a,vector signed __int128 __b)9831*67e74705SXin Li vec_vsubcuq(vector signed __int128 __a, vector signed __int128 __b) {
9832*67e74705SXin Li return __builtin_altivec_vsubcuq(__a, __b);
9833*67e74705SXin Li }
9834*67e74705SXin Li
9835*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_vsubcuq(vector unsigned __int128 __a,vector unsigned __int128 __b)9836*67e74705SXin Li vec_vsubcuq(vector unsigned __int128 __a, vector unsigned __int128 __b) {
9837*67e74705SXin Li return __builtin_altivec_vsubcuq(__a, __b);
9838*67e74705SXin Li }
9839*67e74705SXin Li
9840*67e74705SXin Li /* vec_vsubecuq */
9841*67e74705SXin Li
9842*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_vsubecuq(vector signed __int128 __a,vector signed __int128 __b,vector signed __int128 __c)9843*67e74705SXin Li vec_vsubecuq(vector signed __int128 __a, vector signed __int128 __b,
9844*67e74705SXin Li vector signed __int128 __c) {
9845*67e74705SXin Li return __builtin_altivec_vsubecuq(__a, __b, __c);
9846*67e74705SXin Li }
9847*67e74705SXin Li
9848*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_vsubecuq(vector unsigned __int128 __a,vector unsigned __int128 __b,vector unsigned __int128 __c)9849*67e74705SXin Li vec_vsubecuq(vector unsigned __int128 __a, vector unsigned __int128 __b,
9850*67e74705SXin Li vector unsigned __int128 __c) {
9851*67e74705SXin Li return __builtin_altivec_vsubecuq(__a, __b, __c);
9852*67e74705SXin Li }
9853*67e74705SXin Li #endif // defined(__POWER8_VECTOR__) && defined(__powerpc64__)
9854*67e74705SXin Li
9855*67e74705SXin Li /* vec_sum4s */
9856*67e74705SXin Li
vec_sum4s(vector signed char __a,vector int __b)9857*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed char __a,
9858*67e74705SXin Li vector int __b) {
9859*67e74705SXin Li return __builtin_altivec_vsum4sbs(__a, __b);
9860*67e74705SXin Li }
9861*67e74705SXin Li
9862*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_sum4s(vector unsigned char __a,vector unsigned int __b)9863*67e74705SXin Li vec_sum4s(vector unsigned char __a, vector unsigned int __b) {
9864*67e74705SXin Li return __builtin_altivec_vsum4ubs(__a, __b);
9865*67e74705SXin Li }
9866*67e74705SXin Li
vec_sum4s(vector signed short __a,vector int __b)9867*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_sum4s(vector signed short __a,
9868*67e74705SXin Li vector int __b) {
9869*67e74705SXin Li return __builtin_altivec_vsum4shs(__a, __b);
9870*67e74705SXin Li }
9871*67e74705SXin Li
9872*67e74705SXin Li /* vec_vsum4sbs */
9873*67e74705SXin Li
9874*67e74705SXin Li static __inline__ vector int __attribute__((__always_inline__))
vec_vsum4sbs(vector signed char __a,vector int __b)9875*67e74705SXin Li vec_vsum4sbs(vector signed char __a, vector int __b) {
9876*67e74705SXin Li return __builtin_altivec_vsum4sbs(__a, __b);
9877*67e74705SXin Li }
9878*67e74705SXin Li
9879*67e74705SXin Li /* vec_vsum4ubs */
9880*67e74705SXin Li
9881*67e74705SXin Li static __inline__ vector unsigned int __attribute__((__always_inline__))
vec_vsum4ubs(vector unsigned char __a,vector unsigned int __b)9882*67e74705SXin Li vec_vsum4ubs(vector unsigned char __a, vector unsigned int __b) {
9883*67e74705SXin Li return __builtin_altivec_vsum4ubs(__a, __b);
9884*67e74705SXin Li }
9885*67e74705SXin Li
9886*67e74705SXin Li /* vec_vsum4shs */
9887*67e74705SXin Li
9888*67e74705SXin Li static __inline__ vector int __attribute__((__always_inline__))
vec_vsum4shs(vector signed short __a,vector int __b)9889*67e74705SXin Li vec_vsum4shs(vector signed short __a, vector int __b) {
9890*67e74705SXin Li return __builtin_altivec_vsum4shs(__a, __b);
9891*67e74705SXin Li }
9892*67e74705SXin Li
9893*67e74705SXin Li /* vec_sum2s */
9894*67e74705SXin Li
9895*67e74705SXin Li /* The vsum2sws instruction has a big-endian bias, so that the second
9896*67e74705SXin Li input vector and the result always reference big-endian elements
9897*67e74705SXin Li 1 and 3 (little-endian element 0 and 2). For ease of porting the
9898*67e74705SXin Li programmer wants elements 1 and 3 in both cases, so for little
9899*67e74705SXin Li endian we must perform some permutes. */
9900*67e74705SXin Li
9901*67e74705SXin Li static __inline__ vector signed int __attribute__((__always_inline__))
vec_sum2s(vector int __a,vector int __b)9902*67e74705SXin Li vec_sum2s(vector int __a, vector int __b) {
9903*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
9904*67e74705SXin Li vector int __c = (vector signed int)vec_perm(
9905*67e74705SXin Li __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
9906*67e74705SXin Li 8, 9, 10, 11));
9907*67e74705SXin Li __c = __builtin_altivec_vsum2sws(__a, __c);
9908*67e74705SXin Li return (vector signed int)vec_perm(
9909*67e74705SXin Li __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
9910*67e74705SXin Li 8, 9, 10, 11));
9911*67e74705SXin Li #else
9912*67e74705SXin Li return __builtin_altivec_vsum2sws(__a, __b);
9913*67e74705SXin Li #endif
9914*67e74705SXin Li }
9915*67e74705SXin Li
9916*67e74705SXin Li /* vec_vsum2sws */
9917*67e74705SXin Li
9918*67e74705SXin Li static __inline__ vector signed int __attribute__((__always_inline__))
vec_vsum2sws(vector int __a,vector int __b)9919*67e74705SXin Li vec_vsum2sws(vector int __a, vector int __b) {
9920*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
9921*67e74705SXin Li vector int __c = (vector signed int)vec_perm(
9922*67e74705SXin Li __b, __b, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
9923*67e74705SXin Li 8, 9, 10, 11));
9924*67e74705SXin Li __c = __builtin_altivec_vsum2sws(__a, __c);
9925*67e74705SXin Li return (vector signed int)vec_perm(
9926*67e74705SXin Li __c, __c, (vector unsigned char)(4, 5, 6, 7, 0, 1, 2, 3, 12, 13, 14, 15,
9927*67e74705SXin Li 8, 9, 10, 11));
9928*67e74705SXin Li #else
9929*67e74705SXin Li return __builtin_altivec_vsum2sws(__a, __b);
9930*67e74705SXin Li #endif
9931*67e74705SXin Li }
9932*67e74705SXin Li
9933*67e74705SXin Li /* vec_sums */
9934*67e74705SXin Li
9935*67e74705SXin Li /* The vsumsws instruction has a big-endian bias, so that the second
9936*67e74705SXin Li input vector and the result always reference big-endian element 3
9937*67e74705SXin Li (little-endian element 0). For ease of porting the programmer
9938*67e74705SXin Li wants element 3 in both cases, so for little endian we must perform
9939*67e74705SXin Li some permutes. */
9940*67e74705SXin Li
9941*67e74705SXin Li static __inline__ vector signed int __attribute__((__always_inline__))
vec_sums(vector signed int __a,vector signed int __b)9942*67e74705SXin Li vec_sums(vector signed int __a, vector signed int __b) {
9943*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
9944*67e74705SXin Li __b = (vector signed int)vec_splat(__b, 3);
9945*67e74705SXin Li __b = __builtin_altivec_vsumsws(__a, __b);
9946*67e74705SXin Li return (vector signed int)(0, 0, 0, __b[0]);
9947*67e74705SXin Li #else
9948*67e74705SXin Li return __builtin_altivec_vsumsws(__a, __b);
9949*67e74705SXin Li #endif
9950*67e74705SXin Li }
9951*67e74705SXin Li
9952*67e74705SXin Li /* vec_vsumsws */
9953*67e74705SXin Li
9954*67e74705SXin Li static __inline__ vector signed int __attribute__((__always_inline__))
vec_vsumsws(vector signed int __a,vector signed int __b)9955*67e74705SXin Li vec_vsumsws(vector signed int __a, vector signed int __b) {
9956*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
9957*67e74705SXin Li __b = (vector signed int)vec_splat(__b, 3);
9958*67e74705SXin Li __b = __builtin_altivec_vsumsws(__a, __b);
9959*67e74705SXin Li return (vector signed int)(0, 0, 0, __b[0]);
9960*67e74705SXin Li #else
9961*67e74705SXin Li return __builtin_altivec_vsumsws(__a, __b);
9962*67e74705SXin Li #endif
9963*67e74705SXin Li }
9964*67e74705SXin Li
9965*67e74705SXin Li /* vec_trunc */
9966*67e74705SXin Li
vec_trunc(vector float __a)9967*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_trunc(vector float __a) {
9968*67e74705SXin Li #ifdef __VSX__
9969*67e74705SXin Li return __builtin_vsx_xvrspiz(__a);
9970*67e74705SXin Li #else
9971*67e74705SXin Li return __builtin_altivec_vrfiz(__a);
9972*67e74705SXin Li #endif
9973*67e74705SXin Li }
9974*67e74705SXin Li
9975*67e74705SXin Li #ifdef __VSX__
vec_trunc(vector double __a)9976*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_trunc(vector double __a) {
9977*67e74705SXin Li return __builtin_vsx_xvrdpiz(__a);
9978*67e74705SXin Li }
9979*67e74705SXin Li #endif
9980*67e74705SXin Li
9981*67e74705SXin Li /* vec_vrfiz */
9982*67e74705SXin Li
9983*67e74705SXin Li static __inline__ vector float __attribute__((__always_inline__))
vec_vrfiz(vector float __a)9984*67e74705SXin Li vec_vrfiz(vector float __a) {
9985*67e74705SXin Li return __builtin_altivec_vrfiz(__a);
9986*67e74705SXin Li }
9987*67e74705SXin Li
9988*67e74705SXin Li /* vec_unpackh */
9989*67e74705SXin Li
9990*67e74705SXin Li /* The vector unpack instructions all have a big-endian bias, so for
9991*67e74705SXin Li little endian we must reverse the meanings of "high" and "low." */
9992*67e74705SXin Li
9993*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai
vec_unpackh(vector signed char __a)9994*67e74705SXin Li vec_unpackh(vector signed char __a) {
9995*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
9996*67e74705SXin Li return __builtin_altivec_vupklsb((vector char)__a);
9997*67e74705SXin Li #else
9998*67e74705SXin Li return __builtin_altivec_vupkhsb((vector char)__a);
9999*67e74705SXin Li #endif
10000*67e74705SXin Li }
10001*67e74705SXin Li
10002*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_unpackh(vector bool char __a)10003*67e74705SXin Li vec_unpackh(vector bool char __a) {
10004*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10005*67e74705SXin Li return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
10006*67e74705SXin Li #else
10007*67e74705SXin Li return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
10008*67e74705SXin Li #endif
10009*67e74705SXin Li }
10010*67e74705SXin Li
vec_unpackh(vector short __a)10011*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_unpackh(vector short __a) {
10012*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10013*67e74705SXin Li return __builtin_altivec_vupklsh(__a);
10014*67e74705SXin Li #else
10015*67e74705SXin Li return __builtin_altivec_vupkhsh(__a);
10016*67e74705SXin Li #endif
10017*67e74705SXin Li }
10018*67e74705SXin Li
10019*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_unpackh(vector bool short __a)10020*67e74705SXin Li vec_unpackh(vector bool short __a) {
10021*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10022*67e74705SXin Li return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
10023*67e74705SXin Li #else
10024*67e74705SXin Li return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
10025*67e74705SXin Li #endif
10026*67e74705SXin Li }
10027*67e74705SXin Li
10028*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_unpackh(vector pixel __a)10029*67e74705SXin Li vec_unpackh(vector pixel __a) {
10030*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10031*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
10032*67e74705SXin Li #else
10033*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
10034*67e74705SXin Li #endif
10035*67e74705SXin Li }
10036*67e74705SXin Li
10037*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_unpackh(vector int __a)10038*67e74705SXin Li static __inline__ vector long long __ATTRS_o_ai vec_unpackh(vector int __a) {
10039*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10040*67e74705SXin Li return __builtin_altivec_vupklsw(__a);
10041*67e74705SXin Li #else
10042*67e74705SXin Li return __builtin_altivec_vupkhsw(__a);
10043*67e74705SXin Li #endif
10044*67e74705SXin Li }
10045*67e74705SXin Li
10046*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_unpackh(vector bool int __a)10047*67e74705SXin Li vec_unpackh(vector bool int __a) {
10048*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10049*67e74705SXin Li return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
10050*67e74705SXin Li #else
10051*67e74705SXin Li return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
10052*67e74705SXin Li #endif
10053*67e74705SXin Li }
10054*67e74705SXin Li #endif
10055*67e74705SXin Li
10056*67e74705SXin Li /* vec_vupkhsb */
10057*67e74705SXin Li
10058*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai
vec_vupkhsb(vector signed char __a)10059*67e74705SXin Li vec_vupkhsb(vector signed char __a) {
10060*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10061*67e74705SXin Li return __builtin_altivec_vupklsb((vector char)__a);
10062*67e74705SXin Li #else
10063*67e74705SXin Li return __builtin_altivec_vupkhsb((vector char)__a);
10064*67e74705SXin Li #endif
10065*67e74705SXin Li }
10066*67e74705SXin Li
10067*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vupkhsb(vector bool char __a)10068*67e74705SXin Li vec_vupkhsb(vector bool char __a) {
10069*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10070*67e74705SXin Li return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
10071*67e74705SXin Li #else
10072*67e74705SXin Li return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
10073*67e74705SXin Li #endif
10074*67e74705SXin Li }
10075*67e74705SXin Li
10076*67e74705SXin Li /* vec_vupkhsh */
10077*67e74705SXin Li
vec_vupkhsh(vector short __a)10078*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vupkhsh(vector short __a) {
10079*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10080*67e74705SXin Li return __builtin_altivec_vupklsh(__a);
10081*67e74705SXin Li #else
10082*67e74705SXin Li return __builtin_altivec_vupkhsh(__a);
10083*67e74705SXin Li #endif
10084*67e74705SXin Li }
10085*67e74705SXin Li
10086*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_vupkhsh(vector bool short __a)10087*67e74705SXin Li vec_vupkhsh(vector bool short __a) {
10088*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10089*67e74705SXin Li return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
10090*67e74705SXin Li #else
10091*67e74705SXin Li return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
10092*67e74705SXin Li #endif
10093*67e74705SXin Li }
10094*67e74705SXin Li
10095*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vupkhsh(vector pixel __a)10096*67e74705SXin Li vec_vupkhsh(vector pixel __a) {
10097*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10098*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
10099*67e74705SXin Li #else
10100*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
10101*67e74705SXin Li #endif
10102*67e74705SXin Li }
10103*67e74705SXin Li
10104*67e74705SXin Li /* vec_vupkhsw */
10105*67e74705SXin Li
10106*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_vupkhsw(vector int __a)10107*67e74705SXin Li static __inline__ vector long long __ATTRS_o_ai vec_vupkhsw(vector int __a) {
10108*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10109*67e74705SXin Li return __builtin_altivec_vupklsw(__a);
10110*67e74705SXin Li #else
10111*67e74705SXin Li return __builtin_altivec_vupkhsw(__a);
10112*67e74705SXin Li #endif
10113*67e74705SXin Li }
10114*67e74705SXin Li
10115*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_vupkhsw(vector bool int __a)10116*67e74705SXin Li vec_vupkhsw(vector bool int __a) {
10117*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10118*67e74705SXin Li return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
10119*67e74705SXin Li #else
10120*67e74705SXin Li return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
10121*67e74705SXin Li #endif
10122*67e74705SXin Li }
10123*67e74705SXin Li #endif
10124*67e74705SXin Li
10125*67e74705SXin Li /* vec_unpackl */
10126*67e74705SXin Li
10127*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai
vec_unpackl(vector signed char __a)10128*67e74705SXin Li vec_unpackl(vector signed char __a) {
10129*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10130*67e74705SXin Li return __builtin_altivec_vupkhsb((vector char)__a);
10131*67e74705SXin Li #else
10132*67e74705SXin Li return __builtin_altivec_vupklsb((vector char)__a);
10133*67e74705SXin Li #endif
10134*67e74705SXin Li }
10135*67e74705SXin Li
10136*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_unpackl(vector bool char __a)10137*67e74705SXin Li vec_unpackl(vector bool char __a) {
10138*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10139*67e74705SXin Li return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
10140*67e74705SXin Li #else
10141*67e74705SXin Li return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
10142*67e74705SXin Li #endif
10143*67e74705SXin Li }
10144*67e74705SXin Li
vec_unpackl(vector short __a)10145*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_unpackl(vector short __a) {
10146*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10147*67e74705SXin Li return __builtin_altivec_vupkhsh(__a);
10148*67e74705SXin Li #else
10149*67e74705SXin Li return __builtin_altivec_vupklsh(__a);
10150*67e74705SXin Li #endif
10151*67e74705SXin Li }
10152*67e74705SXin Li
10153*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_unpackl(vector bool short __a)10154*67e74705SXin Li vec_unpackl(vector bool short __a) {
10155*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10156*67e74705SXin Li return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
10157*67e74705SXin Li #else
10158*67e74705SXin Li return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
10159*67e74705SXin Li #endif
10160*67e74705SXin Li }
10161*67e74705SXin Li
10162*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_unpackl(vector pixel __a)10163*67e74705SXin Li vec_unpackl(vector pixel __a) {
10164*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10165*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
10166*67e74705SXin Li #else
10167*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
10168*67e74705SXin Li #endif
10169*67e74705SXin Li }
10170*67e74705SXin Li
10171*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_unpackl(vector int __a)10172*67e74705SXin Li static __inline__ vector long long __ATTRS_o_ai vec_unpackl(vector int __a) {
10173*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10174*67e74705SXin Li return __builtin_altivec_vupkhsw(__a);
10175*67e74705SXin Li #else
10176*67e74705SXin Li return __builtin_altivec_vupklsw(__a);
10177*67e74705SXin Li #endif
10178*67e74705SXin Li }
10179*67e74705SXin Li
10180*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_unpackl(vector bool int __a)10181*67e74705SXin Li vec_unpackl(vector bool int __a) {
10182*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10183*67e74705SXin Li return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
10184*67e74705SXin Li #else
10185*67e74705SXin Li return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
10186*67e74705SXin Li #endif
10187*67e74705SXin Li }
10188*67e74705SXin Li #endif
10189*67e74705SXin Li
10190*67e74705SXin Li /* vec_vupklsb */
10191*67e74705SXin Li
10192*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai
vec_vupklsb(vector signed char __a)10193*67e74705SXin Li vec_vupklsb(vector signed char __a) {
10194*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10195*67e74705SXin Li return __builtin_altivec_vupkhsb((vector char)__a);
10196*67e74705SXin Li #else
10197*67e74705SXin Li return __builtin_altivec_vupklsb((vector char)__a);
10198*67e74705SXin Li #endif
10199*67e74705SXin Li }
10200*67e74705SXin Li
10201*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vupklsb(vector bool char __a)10202*67e74705SXin Li vec_vupklsb(vector bool char __a) {
10203*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10204*67e74705SXin Li return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a);
10205*67e74705SXin Li #else
10206*67e74705SXin Li return (vector bool short)__builtin_altivec_vupklsb((vector char)__a);
10207*67e74705SXin Li #endif
10208*67e74705SXin Li }
10209*67e74705SXin Li
10210*67e74705SXin Li /* vec_vupklsh */
10211*67e74705SXin Li
vec_vupklsh(vector short __a)10212*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vupklsh(vector short __a) {
10213*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10214*67e74705SXin Li return __builtin_altivec_vupkhsh(__a);
10215*67e74705SXin Li #else
10216*67e74705SXin Li return __builtin_altivec_vupklsh(__a);
10217*67e74705SXin Li #endif
10218*67e74705SXin Li }
10219*67e74705SXin Li
10220*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_vupklsh(vector bool short __a)10221*67e74705SXin Li vec_vupklsh(vector bool short __a) {
10222*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10223*67e74705SXin Li return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a);
10224*67e74705SXin Li #else
10225*67e74705SXin Li return (vector bool int)__builtin_altivec_vupklsh((vector short)__a);
10226*67e74705SXin Li #endif
10227*67e74705SXin Li }
10228*67e74705SXin Li
10229*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vupklsh(vector pixel __a)10230*67e74705SXin Li vec_vupklsh(vector pixel __a) {
10231*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10232*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vupkhpx((vector short)__a);
10233*67e74705SXin Li #else
10234*67e74705SXin Li return (vector unsigned int)__builtin_altivec_vupklpx((vector short)__a);
10235*67e74705SXin Li #endif
10236*67e74705SXin Li }
10237*67e74705SXin Li
10238*67e74705SXin Li /* vec_vupklsw */
10239*67e74705SXin Li
10240*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_vupklsw(vector int __a)10241*67e74705SXin Li static __inline__ vector long long __ATTRS_o_ai vec_vupklsw(vector int __a) {
10242*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10243*67e74705SXin Li return __builtin_altivec_vupkhsw(__a);
10244*67e74705SXin Li #else
10245*67e74705SXin Li return __builtin_altivec_vupklsw(__a);
10246*67e74705SXin Li #endif
10247*67e74705SXin Li }
10248*67e74705SXin Li
10249*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_vupklsw(vector bool int __a)10250*67e74705SXin Li vec_vupklsw(vector bool int __a) {
10251*67e74705SXin Li #ifdef __LITTLE_ENDIAN__
10252*67e74705SXin Li return (vector bool long long)__builtin_altivec_vupkhsw((vector int)__a);
10253*67e74705SXin Li #else
10254*67e74705SXin Li return (vector bool long long)__builtin_altivec_vupklsw((vector int)__a);
10255*67e74705SXin Li #endif
10256*67e74705SXin Li }
10257*67e74705SXin Li #endif
10258*67e74705SXin Li
10259*67e74705SXin Li /* vec_vsx_ld */
10260*67e74705SXin Li
10261*67e74705SXin Li #ifdef __VSX__
10262*67e74705SXin Li
10263*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_vsx_ld(int __a,const vector bool int * __b)10264*67e74705SXin Li vec_vsx_ld(int __a, const vector bool int *__b) {
10265*67e74705SXin Li return (vector bool int)__builtin_vsx_lxvw4x(__a, __b);
10266*67e74705SXin Li }
10267*67e74705SXin Li
10268*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_vsx_ld(int __a,const vector signed int * __b)10269*67e74705SXin Li vec_vsx_ld(int __a, const vector signed int *__b) {
10270*67e74705SXin Li return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
10271*67e74705SXin Li }
10272*67e74705SXin Li
10273*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_vsx_ld(int __a,const signed int * __b)10274*67e74705SXin Li vec_vsx_ld(int __a, const signed int *__b) {
10275*67e74705SXin Li return (vector signed int)__builtin_vsx_lxvw4x(__a, __b);
10276*67e74705SXin Li }
10277*67e74705SXin Li
10278*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsx_ld(int __a,const vector unsigned int * __b)10279*67e74705SXin Li vec_vsx_ld(int __a, const vector unsigned int *__b) {
10280*67e74705SXin Li return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
10281*67e74705SXin Li }
10282*67e74705SXin Li
10283*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vsx_ld(int __a,const unsigned int * __b)10284*67e74705SXin Li vec_vsx_ld(int __a, const unsigned int *__b) {
10285*67e74705SXin Li return (vector unsigned int)__builtin_vsx_lxvw4x(__a, __b);
10286*67e74705SXin Li }
10287*67e74705SXin Li
10288*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai
vec_vsx_ld(int __a,const vector float * __b)10289*67e74705SXin Li vec_vsx_ld(int __a, const vector float *__b) {
10290*67e74705SXin Li return (vector float)__builtin_vsx_lxvw4x(__a, __b);
10291*67e74705SXin Li }
10292*67e74705SXin Li
vec_vsx_ld(int __a,const float * __b)10293*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vsx_ld(int __a,
10294*67e74705SXin Li const float *__b) {
10295*67e74705SXin Li return (vector float)__builtin_vsx_lxvw4x(__a, __b);
10296*67e74705SXin Li }
10297*67e74705SXin Li
10298*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_vsx_ld(int __a,const vector signed long long * __b)10299*67e74705SXin Li vec_vsx_ld(int __a, const vector signed long long *__b) {
10300*67e74705SXin Li return (vector signed long long)__builtin_vsx_lxvd2x(__a, __b);
10301*67e74705SXin Li }
10302*67e74705SXin Li
10303*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vsx_ld(int __a,const vector unsigned long long * __b)10304*67e74705SXin Li vec_vsx_ld(int __a, const vector unsigned long long *__b) {
10305*67e74705SXin Li return (vector unsigned long long)__builtin_vsx_lxvd2x(__a, __b);
10306*67e74705SXin Li }
10307*67e74705SXin Li
10308*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_vsx_ld(int __a,const vector double * __b)10309*67e74705SXin Li vec_vsx_ld(int __a, const vector double *__b) {
10310*67e74705SXin Li return (vector double)__builtin_vsx_lxvd2x(__a, __b);
10311*67e74705SXin Li }
10312*67e74705SXin Li
10313*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_vsx_ld(int __a,const double * __b)10314*67e74705SXin Li vec_vsx_ld(int __a, const double *__b) {
10315*67e74705SXin Li return (vector double)__builtin_vsx_lxvd2x(__a, __b);
10316*67e74705SXin Li }
10317*67e74705SXin Li
10318*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vsx_ld(int __a,const vector bool short * __b)10319*67e74705SXin Li vec_vsx_ld(int __a, const vector bool short *__b) {
10320*67e74705SXin Li return (vector bool short)__builtin_vsx_lxvw4x(__a, __b);
10321*67e74705SXin Li }
10322*67e74705SXin Li
10323*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_vsx_ld(int __a,const vector signed short * __b)10324*67e74705SXin Li vec_vsx_ld(int __a, const vector signed short *__b) {
10325*67e74705SXin Li return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
10326*67e74705SXin Li }
10327*67e74705SXin Li
10328*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_vsx_ld(int __a,const signed short * __b)10329*67e74705SXin Li vec_vsx_ld(int __a, const signed short *__b) {
10330*67e74705SXin Li return (vector signed short)__builtin_vsx_lxvw4x(__a, __b);
10331*67e74705SXin Li }
10332*67e74705SXin Li
10333*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsx_ld(int __a,const vector unsigned short * __b)10334*67e74705SXin Li vec_vsx_ld(int __a, const vector unsigned short *__b) {
10335*67e74705SXin Li return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
10336*67e74705SXin Li }
10337*67e74705SXin Li
10338*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vsx_ld(int __a,const unsigned short * __b)10339*67e74705SXin Li vec_vsx_ld(int __a, const unsigned short *__b) {
10340*67e74705SXin Li return (vector unsigned short)__builtin_vsx_lxvw4x(__a, __b);
10341*67e74705SXin Li }
10342*67e74705SXin Li
10343*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_vsx_ld(int __a,const vector bool char * __b)10344*67e74705SXin Li vec_vsx_ld(int __a, const vector bool char *__b) {
10345*67e74705SXin Li return (vector bool char)__builtin_vsx_lxvw4x(__a, __b);
10346*67e74705SXin Li }
10347*67e74705SXin Li
10348*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsx_ld(int __a,const vector signed char * __b)10349*67e74705SXin Li vec_vsx_ld(int __a, const vector signed char *__b) {
10350*67e74705SXin Li return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
10351*67e74705SXin Li }
10352*67e74705SXin Li
10353*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vsx_ld(int __a,const signed char * __b)10354*67e74705SXin Li vec_vsx_ld(int __a, const signed char *__b) {
10355*67e74705SXin Li return (vector signed char)__builtin_vsx_lxvw4x(__a, __b);
10356*67e74705SXin Li }
10357*67e74705SXin Li
10358*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsx_ld(int __a,const vector unsigned char * __b)10359*67e74705SXin Li vec_vsx_ld(int __a, const vector unsigned char *__b) {
10360*67e74705SXin Li return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
10361*67e74705SXin Li }
10362*67e74705SXin Li
10363*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vsx_ld(int __a,const unsigned char * __b)10364*67e74705SXin Li vec_vsx_ld(int __a, const unsigned char *__b) {
10365*67e74705SXin Li return (vector unsigned char)__builtin_vsx_lxvw4x(__a, __b);
10366*67e74705SXin Li }
10367*67e74705SXin Li
10368*67e74705SXin Li #endif
10369*67e74705SXin Li
10370*67e74705SXin Li /* vec_vsx_st */
10371*67e74705SXin Li
10372*67e74705SXin Li #ifdef __VSX__
10373*67e74705SXin Li
vec_vsx_st(vector bool int __a,int __b,vector bool int * __c)10374*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
10375*67e74705SXin Li vector bool int *__c) {
10376*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10377*67e74705SXin Li }
10378*67e74705SXin Li
vec_vsx_st(vector bool int __a,int __b,signed int * __c)10379*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
10380*67e74705SXin Li signed int *__c) {
10381*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10382*67e74705SXin Li }
10383*67e74705SXin Li
vec_vsx_st(vector bool int __a,int __b,unsigned int * __c)10384*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool int __a, int __b,
10385*67e74705SXin Li unsigned int *__c) {
10386*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10387*67e74705SXin Li }
10388*67e74705SXin Li
vec_vsx_st(vector signed int __a,int __b,vector signed int * __c)10389*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
10390*67e74705SXin Li vector signed int *__c) {
10391*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10392*67e74705SXin Li }
10393*67e74705SXin Li
vec_vsx_st(vector signed int __a,int __b,signed int * __c)10394*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed int __a, int __b,
10395*67e74705SXin Li signed int *__c) {
10396*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10397*67e74705SXin Li }
10398*67e74705SXin Li
vec_vsx_st(vector unsigned int __a,int __b,vector unsigned int * __c)10399*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
10400*67e74705SXin Li vector unsigned int *__c) {
10401*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10402*67e74705SXin Li }
10403*67e74705SXin Li
vec_vsx_st(vector unsigned int __a,int __b,unsigned int * __c)10404*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned int __a, int __b,
10405*67e74705SXin Li unsigned int *__c) {
10406*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10407*67e74705SXin Li }
10408*67e74705SXin Li
vec_vsx_st(vector float __a,int __b,vector float * __c)10409*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
10410*67e74705SXin Li vector float *__c) {
10411*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10412*67e74705SXin Li }
10413*67e74705SXin Li
vec_vsx_st(vector float __a,int __b,float * __c)10414*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector float __a, int __b,
10415*67e74705SXin Li float *__c) {
10416*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10417*67e74705SXin Li }
10418*67e74705SXin Li
vec_vsx_st(vector signed long long __a,int __b,vector signed long long * __c)10419*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed long long __a,
10420*67e74705SXin Li int __b,
10421*67e74705SXin Li vector signed long long *__c) {
10422*67e74705SXin Li __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
10423*67e74705SXin Li }
10424*67e74705SXin Li
vec_vsx_st(vector unsigned long long __a,int __b,vector unsigned long long * __c)10425*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned long long __a,
10426*67e74705SXin Li int __b,
10427*67e74705SXin Li vector unsigned long long *__c) {
10428*67e74705SXin Li __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
10429*67e74705SXin Li }
10430*67e74705SXin Li
vec_vsx_st(vector double __a,int __b,vector double * __c)10431*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
10432*67e74705SXin Li vector double *__c) {
10433*67e74705SXin Li __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
10434*67e74705SXin Li }
10435*67e74705SXin Li
vec_vsx_st(vector double __a,int __b,double * __c)10436*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector double __a, int __b,
10437*67e74705SXin Li double *__c) {
10438*67e74705SXin Li __builtin_vsx_stxvd2x((vector double)__a, __b, __c);
10439*67e74705SXin Li }
10440*67e74705SXin Li
vec_vsx_st(vector bool short __a,int __b,vector bool short * __c)10441*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
10442*67e74705SXin Li vector bool short *__c) {
10443*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10444*67e74705SXin Li }
10445*67e74705SXin Li
vec_vsx_st(vector bool short __a,int __b,signed short * __c)10446*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
10447*67e74705SXin Li signed short *__c) {
10448*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10449*67e74705SXin Li }
10450*67e74705SXin Li
vec_vsx_st(vector bool short __a,int __b,unsigned short * __c)10451*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool short __a, int __b,
10452*67e74705SXin Li unsigned short *__c) {
10453*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10454*67e74705SXin Li }
vec_vsx_st(vector signed short __a,int __b,vector signed short * __c)10455*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
10456*67e74705SXin Li vector signed short *__c) {
10457*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10458*67e74705SXin Li }
10459*67e74705SXin Li
vec_vsx_st(vector signed short __a,int __b,signed short * __c)10460*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed short __a, int __b,
10461*67e74705SXin Li signed short *__c) {
10462*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10463*67e74705SXin Li }
10464*67e74705SXin Li
vec_vsx_st(vector unsigned short __a,int __b,vector unsigned short * __c)10465*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
10466*67e74705SXin Li int __b,
10467*67e74705SXin Li vector unsigned short *__c) {
10468*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10469*67e74705SXin Li }
10470*67e74705SXin Li
vec_vsx_st(vector unsigned short __a,int __b,unsigned short * __c)10471*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned short __a,
10472*67e74705SXin Li int __b, unsigned short *__c) {
10473*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10474*67e74705SXin Li }
10475*67e74705SXin Li
vec_vsx_st(vector bool char __a,int __b,vector bool char * __c)10476*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
10477*67e74705SXin Li vector bool char *__c) {
10478*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10479*67e74705SXin Li }
10480*67e74705SXin Li
vec_vsx_st(vector bool char __a,int __b,signed char * __c)10481*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
10482*67e74705SXin Li signed char *__c) {
10483*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10484*67e74705SXin Li }
10485*67e74705SXin Li
vec_vsx_st(vector bool char __a,int __b,unsigned char * __c)10486*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector bool char __a, int __b,
10487*67e74705SXin Li unsigned char *__c) {
10488*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10489*67e74705SXin Li }
10490*67e74705SXin Li
vec_vsx_st(vector signed char __a,int __b,vector signed char * __c)10491*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
10492*67e74705SXin Li vector signed char *__c) {
10493*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10494*67e74705SXin Li }
10495*67e74705SXin Li
vec_vsx_st(vector signed char __a,int __b,signed char * __c)10496*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector signed char __a, int __b,
10497*67e74705SXin Li signed char *__c) {
10498*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10499*67e74705SXin Li }
10500*67e74705SXin Li
vec_vsx_st(vector unsigned char __a,int __b,vector unsigned char * __c)10501*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
10502*67e74705SXin Li int __b,
10503*67e74705SXin Li vector unsigned char *__c) {
10504*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10505*67e74705SXin Li }
10506*67e74705SXin Li
vec_vsx_st(vector unsigned char __a,int __b,unsigned char * __c)10507*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_vsx_st(vector unsigned char __a,
10508*67e74705SXin Li int __b, unsigned char *__c) {
10509*67e74705SXin Li __builtin_vsx_stxvw4x((vector int)__a, __b, __c);
10510*67e74705SXin Li }
10511*67e74705SXin Li
10512*67e74705SXin Li #endif
10513*67e74705SXin Li
10514*67e74705SXin Li /* vec_xor */
10515*67e74705SXin Li
10516*67e74705SXin Li #define __builtin_altivec_vxor vec_xor
10517*67e74705SXin Li
10518*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_xor(vector signed char __a,vector signed char __b)10519*67e74705SXin Li vec_xor(vector signed char __a, vector signed char __b) {
10520*67e74705SXin Li return __a ^ __b;
10521*67e74705SXin Li }
10522*67e74705SXin Li
10523*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_xor(vector bool char __a,vector signed char __b)10524*67e74705SXin Li vec_xor(vector bool char __a, vector signed char __b) {
10525*67e74705SXin Li return (vector signed char)__a ^ __b;
10526*67e74705SXin Li }
10527*67e74705SXin Li
10528*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_xor(vector signed char __a,vector bool char __b)10529*67e74705SXin Li vec_xor(vector signed char __a, vector bool char __b) {
10530*67e74705SXin Li return __a ^ (vector signed char)__b;
10531*67e74705SXin Li }
10532*67e74705SXin Li
10533*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_xor(vector unsigned char __a,vector unsigned char __b)10534*67e74705SXin Li vec_xor(vector unsigned char __a, vector unsigned char __b) {
10535*67e74705SXin Li return __a ^ __b;
10536*67e74705SXin Li }
10537*67e74705SXin Li
10538*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_xor(vector bool char __a,vector unsigned char __b)10539*67e74705SXin Li vec_xor(vector bool char __a, vector unsigned char __b) {
10540*67e74705SXin Li return (vector unsigned char)__a ^ __b;
10541*67e74705SXin Li }
10542*67e74705SXin Li
10543*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_xor(vector unsigned char __a,vector bool char __b)10544*67e74705SXin Li vec_xor(vector unsigned char __a, vector bool char __b) {
10545*67e74705SXin Li return __a ^ (vector unsigned char)__b;
10546*67e74705SXin Li }
10547*67e74705SXin Li
vec_xor(vector bool char __a,vector bool char __b)10548*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_xor(vector bool char __a,
10549*67e74705SXin Li vector bool char __b) {
10550*67e74705SXin Li return __a ^ __b;
10551*67e74705SXin Li }
10552*67e74705SXin Li
vec_xor(vector short __a,vector short __b)10553*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
10554*67e74705SXin Li vector short __b) {
10555*67e74705SXin Li return __a ^ __b;
10556*67e74705SXin Li }
10557*67e74705SXin Li
vec_xor(vector bool short __a,vector short __b)10558*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_xor(vector bool short __a,
10559*67e74705SXin Li vector short __b) {
10560*67e74705SXin Li return (vector short)__a ^ __b;
10561*67e74705SXin Li }
10562*67e74705SXin Li
vec_xor(vector short __a,vector bool short __b)10563*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_xor(vector short __a,
10564*67e74705SXin Li vector bool short __b) {
10565*67e74705SXin Li return __a ^ (vector short)__b;
10566*67e74705SXin Li }
10567*67e74705SXin Li
10568*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_xor(vector unsigned short __a,vector unsigned short __b)10569*67e74705SXin Li vec_xor(vector unsigned short __a, vector unsigned short __b) {
10570*67e74705SXin Li return __a ^ __b;
10571*67e74705SXin Li }
10572*67e74705SXin Li
10573*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_xor(vector bool short __a,vector unsigned short __b)10574*67e74705SXin Li vec_xor(vector bool short __a, vector unsigned short __b) {
10575*67e74705SXin Li return (vector unsigned short)__a ^ __b;
10576*67e74705SXin Li }
10577*67e74705SXin Li
10578*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_xor(vector unsigned short __a,vector bool short __b)10579*67e74705SXin Li vec_xor(vector unsigned short __a, vector bool short __b) {
10580*67e74705SXin Li return __a ^ (vector unsigned short)__b;
10581*67e74705SXin Li }
10582*67e74705SXin Li
10583*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_xor(vector bool short __a,vector bool short __b)10584*67e74705SXin Li vec_xor(vector bool short __a, vector bool short __b) {
10585*67e74705SXin Li return __a ^ __b;
10586*67e74705SXin Li }
10587*67e74705SXin Li
vec_xor(vector int __a,vector int __b)10588*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
10589*67e74705SXin Li vector int __b) {
10590*67e74705SXin Li return __a ^ __b;
10591*67e74705SXin Li }
10592*67e74705SXin Li
vec_xor(vector bool int __a,vector int __b)10593*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_xor(vector bool int __a,
10594*67e74705SXin Li vector int __b) {
10595*67e74705SXin Li return (vector int)__a ^ __b;
10596*67e74705SXin Li }
10597*67e74705SXin Li
vec_xor(vector int __a,vector bool int __b)10598*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_xor(vector int __a,
10599*67e74705SXin Li vector bool int __b) {
10600*67e74705SXin Li return __a ^ (vector int)__b;
10601*67e74705SXin Li }
10602*67e74705SXin Li
10603*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_xor(vector unsigned int __a,vector unsigned int __b)10604*67e74705SXin Li vec_xor(vector unsigned int __a, vector unsigned int __b) {
10605*67e74705SXin Li return __a ^ __b;
10606*67e74705SXin Li }
10607*67e74705SXin Li
10608*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_xor(vector bool int __a,vector unsigned int __b)10609*67e74705SXin Li vec_xor(vector bool int __a, vector unsigned int __b) {
10610*67e74705SXin Li return (vector unsigned int)__a ^ __b;
10611*67e74705SXin Li }
10612*67e74705SXin Li
10613*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_xor(vector unsigned int __a,vector bool int __b)10614*67e74705SXin Li vec_xor(vector unsigned int __a, vector bool int __b) {
10615*67e74705SXin Li return __a ^ (vector unsigned int)__b;
10616*67e74705SXin Li }
10617*67e74705SXin Li
vec_xor(vector bool int __a,vector bool int __b)10618*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_xor(vector bool int __a,
10619*67e74705SXin Li vector bool int __b) {
10620*67e74705SXin Li return __a ^ __b;
10621*67e74705SXin Li }
10622*67e74705SXin Li
vec_xor(vector float __a,vector float __b)10623*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
10624*67e74705SXin Li vector float __b) {
10625*67e74705SXin Li vector unsigned int __res =
10626*67e74705SXin Li (vector unsigned int)__a ^ (vector unsigned int)__b;
10627*67e74705SXin Li return (vector float)__res;
10628*67e74705SXin Li }
10629*67e74705SXin Li
vec_xor(vector bool int __a,vector float __b)10630*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_xor(vector bool int __a,
10631*67e74705SXin Li vector float __b) {
10632*67e74705SXin Li vector unsigned int __res =
10633*67e74705SXin Li (vector unsigned int)__a ^ (vector unsigned int)__b;
10634*67e74705SXin Li return (vector float)__res;
10635*67e74705SXin Li }
10636*67e74705SXin Li
vec_xor(vector float __a,vector bool int __b)10637*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_xor(vector float __a,
10638*67e74705SXin Li vector bool int __b) {
10639*67e74705SXin Li vector unsigned int __res =
10640*67e74705SXin Li (vector unsigned int)__a ^ (vector unsigned int)__b;
10641*67e74705SXin Li return (vector float)__res;
10642*67e74705SXin Li }
10643*67e74705SXin Li
10644*67e74705SXin Li #ifdef __VSX__
10645*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_xor(vector signed long long __a,vector signed long long __b)10646*67e74705SXin Li vec_xor(vector signed long long __a, vector signed long long __b) {
10647*67e74705SXin Li return __a ^ __b;
10648*67e74705SXin Li }
10649*67e74705SXin Li
10650*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_xor(vector bool long long __a,vector signed long long __b)10651*67e74705SXin Li vec_xor(vector bool long long __a, vector signed long long __b) {
10652*67e74705SXin Li return (vector signed long long)__a ^ __b;
10653*67e74705SXin Li }
10654*67e74705SXin Li
10655*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_xor(vector signed long long __a,vector bool long long __b)10656*67e74705SXin Li vec_xor(vector signed long long __a, vector bool long long __b) {
10657*67e74705SXin Li return __a ^ (vector signed long long)__b;
10658*67e74705SXin Li }
10659*67e74705SXin Li
10660*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_xor(vector unsigned long long __a,vector unsigned long long __b)10661*67e74705SXin Li vec_xor(vector unsigned long long __a, vector unsigned long long __b) {
10662*67e74705SXin Li return __a ^ __b;
10663*67e74705SXin Li }
10664*67e74705SXin Li
10665*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_xor(vector bool long long __a,vector unsigned long long __b)10666*67e74705SXin Li vec_xor(vector bool long long __a, vector unsigned long long __b) {
10667*67e74705SXin Li return (vector unsigned long long)__a ^ __b;
10668*67e74705SXin Li }
10669*67e74705SXin Li
10670*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_xor(vector unsigned long long __a,vector bool long long __b)10671*67e74705SXin Li vec_xor(vector unsigned long long __a, vector bool long long __b) {
10672*67e74705SXin Li return __a ^ (vector unsigned long long)__b;
10673*67e74705SXin Li }
10674*67e74705SXin Li
10675*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_xor(vector bool long long __a,vector bool long long __b)10676*67e74705SXin Li vec_xor(vector bool long long __a, vector bool long long __b) {
10677*67e74705SXin Li return __a ^ __b;
10678*67e74705SXin Li }
10679*67e74705SXin Li
vec_xor(vector double __a,vector double __b)10680*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_xor(vector double __a,
10681*67e74705SXin Li vector double __b) {
10682*67e74705SXin Li return (vector double)((vector unsigned long long)__a ^
10683*67e74705SXin Li (vector unsigned long long)__b);
10684*67e74705SXin Li }
10685*67e74705SXin Li
10686*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai
vec_xor(vector double __a,vector bool long long __b)10687*67e74705SXin Li vec_xor(vector double __a, vector bool long long __b) {
10688*67e74705SXin Li return (vector double)((vector unsigned long long)__a ^
10689*67e74705SXin Li (vector unsigned long long)__b);
10690*67e74705SXin Li }
10691*67e74705SXin Li
vec_xor(vector bool long long __a,vector double __b)10692*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_xor(vector bool long long __a,
10693*67e74705SXin Li vector double __b) {
10694*67e74705SXin Li return (vector double)((vector unsigned long long)__a ^
10695*67e74705SXin Li (vector unsigned long long)__b);
10696*67e74705SXin Li }
10697*67e74705SXin Li #endif
10698*67e74705SXin Li
10699*67e74705SXin Li /* vec_vxor */
10700*67e74705SXin Li
10701*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vxor(vector signed char __a,vector signed char __b)10702*67e74705SXin Li vec_vxor(vector signed char __a, vector signed char __b) {
10703*67e74705SXin Li return __a ^ __b;
10704*67e74705SXin Li }
10705*67e74705SXin Li
10706*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vxor(vector bool char __a,vector signed char __b)10707*67e74705SXin Li vec_vxor(vector bool char __a, vector signed char __b) {
10708*67e74705SXin Li return (vector signed char)__a ^ __b;
10709*67e74705SXin Li }
10710*67e74705SXin Li
10711*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vxor(vector signed char __a,vector bool char __b)10712*67e74705SXin Li vec_vxor(vector signed char __a, vector bool char __b) {
10713*67e74705SXin Li return __a ^ (vector signed char)__b;
10714*67e74705SXin Li }
10715*67e74705SXin Li
10716*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vxor(vector unsigned char __a,vector unsigned char __b)10717*67e74705SXin Li vec_vxor(vector unsigned char __a, vector unsigned char __b) {
10718*67e74705SXin Li return __a ^ __b;
10719*67e74705SXin Li }
10720*67e74705SXin Li
10721*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vxor(vector bool char __a,vector unsigned char __b)10722*67e74705SXin Li vec_vxor(vector bool char __a, vector unsigned char __b) {
10723*67e74705SXin Li return (vector unsigned char)__a ^ __b;
10724*67e74705SXin Li }
10725*67e74705SXin Li
10726*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vxor(vector unsigned char __a,vector bool char __b)10727*67e74705SXin Li vec_vxor(vector unsigned char __a, vector bool char __b) {
10728*67e74705SXin Li return __a ^ (vector unsigned char)__b;
10729*67e74705SXin Li }
10730*67e74705SXin Li
vec_vxor(vector bool char __a,vector bool char __b)10731*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_vxor(vector bool char __a,
10732*67e74705SXin Li vector bool char __b) {
10733*67e74705SXin Li return __a ^ __b;
10734*67e74705SXin Li }
10735*67e74705SXin Li
vec_vxor(vector short __a,vector short __b)10736*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
10737*67e74705SXin Li vector short __b) {
10738*67e74705SXin Li return __a ^ __b;
10739*67e74705SXin Li }
10740*67e74705SXin Li
vec_vxor(vector bool short __a,vector short __b)10741*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vxor(vector bool short __a,
10742*67e74705SXin Li vector short __b) {
10743*67e74705SXin Li return (vector short)__a ^ __b;
10744*67e74705SXin Li }
10745*67e74705SXin Li
vec_vxor(vector short __a,vector bool short __b)10746*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_vxor(vector short __a,
10747*67e74705SXin Li vector bool short __b) {
10748*67e74705SXin Li return __a ^ (vector short)__b;
10749*67e74705SXin Li }
10750*67e74705SXin Li
10751*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vxor(vector unsigned short __a,vector unsigned short __b)10752*67e74705SXin Li vec_vxor(vector unsigned short __a, vector unsigned short __b) {
10753*67e74705SXin Li return __a ^ __b;
10754*67e74705SXin Li }
10755*67e74705SXin Li
10756*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vxor(vector bool short __a,vector unsigned short __b)10757*67e74705SXin Li vec_vxor(vector bool short __a, vector unsigned short __b) {
10758*67e74705SXin Li return (vector unsigned short)__a ^ __b;
10759*67e74705SXin Li }
10760*67e74705SXin Li
10761*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_vxor(vector unsigned short __a,vector bool short __b)10762*67e74705SXin Li vec_vxor(vector unsigned short __a, vector bool short __b) {
10763*67e74705SXin Li return __a ^ (vector unsigned short)__b;
10764*67e74705SXin Li }
10765*67e74705SXin Li
10766*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_vxor(vector bool short __a,vector bool short __b)10767*67e74705SXin Li vec_vxor(vector bool short __a, vector bool short __b) {
10768*67e74705SXin Li return __a ^ __b;
10769*67e74705SXin Li }
10770*67e74705SXin Li
vec_vxor(vector int __a,vector int __b)10771*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
10772*67e74705SXin Li vector int __b) {
10773*67e74705SXin Li return __a ^ __b;
10774*67e74705SXin Li }
10775*67e74705SXin Li
vec_vxor(vector bool int __a,vector int __b)10776*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vxor(vector bool int __a,
10777*67e74705SXin Li vector int __b) {
10778*67e74705SXin Li return (vector int)__a ^ __b;
10779*67e74705SXin Li }
10780*67e74705SXin Li
vec_vxor(vector int __a,vector bool int __b)10781*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_vxor(vector int __a,
10782*67e74705SXin Li vector bool int __b) {
10783*67e74705SXin Li return __a ^ (vector int)__b;
10784*67e74705SXin Li }
10785*67e74705SXin Li
10786*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vxor(vector unsigned int __a,vector unsigned int __b)10787*67e74705SXin Li vec_vxor(vector unsigned int __a, vector unsigned int __b) {
10788*67e74705SXin Li return __a ^ __b;
10789*67e74705SXin Li }
10790*67e74705SXin Li
10791*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vxor(vector bool int __a,vector unsigned int __b)10792*67e74705SXin Li vec_vxor(vector bool int __a, vector unsigned int __b) {
10793*67e74705SXin Li return (vector unsigned int)__a ^ __b;
10794*67e74705SXin Li }
10795*67e74705SXin Li
10796*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_vxor(vector unsigned int __a,vector bool int __b)10797*67e74705SXin Li vec_vxor(vector unsigned int __a, vector bool int __b) {
10798*67e74705SXin Li return __a ^ (vector unsigned int)__b;
10799*67e74705SXin Li }
10800*67e74705SXin Li
vec_vxor(vector bool int __a,vector bool int __b)10801*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_vxor(vector bool int __a,
10802*67e74705SXin Li vector bool int __b) {
10803*67e74705SXin Li return __a ^ __b;
10804*67e74705SXin Li }
10805*67e74705SXin Li
vec_vxor(vector float __a,vector float __b)10806*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
10807*67e74705SXin Li vector float __b) {
10808*67e74705SXin Li vector unsigned int __res =
10809*67e74705SXin Li (vector unsigned int)__a ^ (vector unsigned int)__b;
10810*67e74705SXin Li return (vector float)__res;
10811*67e74705SXin Li }
10812*67e74705SXin Li
vec_vxor(vector bool int __a,vector float __b)10813*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vxor(vector bool int __a,
10814*67e74705SXin Li vector float __b) {
10815*67e74705SXin Li vector unsigned int __res =
10816*67e74705SXin Li (vector unsigned int)__a ^ (vector unsigned int)__b;
10817*67e74705SXin Li return (vector float)__res;
10818*67e74705SXin Li }
10819*67e74705SXin Li
vec_vxor(vector float __a,vector bool int __b)10820*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_vxor(vector float __a,
10821*67e74705SXin Li vector bool int __b) {
10822*67e74705SXin Li vector unsigned int __res =
10823*67e74705SXin Li (vector unsigned int)__a ^ (vector unsigned int)__b;
10824*67e74705SXin Li return (vector float)__res;
10825*67e74705SXin Li }
10826*67e74705SXin Li
10827*67e74705SXin Li #ifdef __VSX__
10828*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_vxor(vector signed long long __a,vector signed long long __b)10829*67e74705SXin Li vec_vxor(vector signed long long __a, vector signed long long __b) {
10830*67e74705SXin Li return __a ^ __b;
10831*67e74705SXin Li }
10832*67e74705SXin Li
10833*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_vxor(vector bool long long __a,vector signed long long __b)10834*67e74705SXin Li vec_vxor(vector bool long long __a, vector signed long long __b) {
10835*67e74705SXin Li return (vector signed long long)__a ^ __b;
10836*67e74705SXin Li }
10837*67e74705SXin Li
10838*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_vxor(vector signed long long __a,vector bool long long __b)10839*67e74705SXin Li vec_vxor(vector signed long long __a, vector bool long long __b) {
10840*67e74705SXin Li return __a ^ (vector signed long long)__b;
10841*67e74705SXin Li }
10842*67e74705SXin Li
10843*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vxor(vector unsigned long long __a,vector unsigned long long __b)10844*67e74705SXin Li vec_vxor(vector unsigned long long __a, vector unsigned long long __b) {
10845*67e74705SXin Li return __a ^ __b;
10846*67e74705SXin Li }
10847*67e74705SXin Li
10848*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vxor(vector bool long long __a,vector unsigned long long __b)10849*67e74705SXin Li vec_vxor(vector bool long long __a, vector unsigned long long __b) {
10850*67e74705SXin Li return (vector unsigned long long)__a ^ __b;
10851*67e74705SXin Li }
10852*67e74705SXin Li
10853*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_vxor(vector unsigned long long __a,vector bool long long __b)10854*67e74705SXin Li vec_vxor(vector unsigned long long __a, vector bool long long __b) {
10855*67e74705SXin Li return __a ^ (vector unsigned long long)__b;
10856*67e74705SXin Li }
10857*67e74705SXin Li
10858*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_vxor(vector bool long long __a,vector bool long long __b)10859*67e74705SXin Li vec_vxor(vector bool long long __a, vector bool long long __b) {
10860*67e74705SXin Li return __a ^ __b;
10861*67e74705SXin Li }
10862*67e74705SXin Li #endif
10863*67e74705SXin Li
10864*67e74705SXin Li /* ------------------------ extensions for CBEA ----------------------------- */
10865*67e74705SXin Li
10866*67e74705SXin Li /* vec_extract */
10867*67e74705SXin Li
vec_extract(vector signed char __a,int __b)10868*67e74705SXin Li static __inline__ signed char __ATTRS_o_ai vec_extract(vector signed char __a,
10869*67e74705SXin Li int __b) {
10870*67e74705SXin Li return __a[__b];
10871*67e74705SXin Li }
10872*67e74705SXin Li
10873*67e74705SXin Li static __inline__ unsigned char __ATTRS_o_ai
vec_extract(vector unsigned char __a,int __b)10874*67e74705SXin Li vec_extract(vector unsigned char __a, int __b) {
10875*67e74705SXin Li return __a[__b];
10876*67e74705SXin Li }
10877*67e74705SXin Li
vec_extract(vector bool char __a,int __b)10878*67e74705SXin Li static __inline__ unsigned char __ATTRS_o_ai vec_extract(vector bool char __a,
10879*67e74705SXin Li int __b) {
10880*67e74705SXin Li return __a[__b];
10881*67e74705SXin Li }
10882*67e74705SXin Li
vec_extract(vector signed short __a,int __b)10883*67e74705SXin Li static __inline__ signed short __ATTRS_o_ai vec_extract(vector signed short __a,
10884*67e74705SXin Li int __b) {
10885*67e74705SXin Li return __a[__b];
10886*67e74705SXin Li }
10887*67e74705SXin Li
10888*67e74705SXin Li static __inline__ unsigned short __ATTRS_o_ai
vec_extract(vector unsigned short __a,int __b)10889*67e74705SXin Li vec_extract(vector unsigned short __a, int __b) {
10890*67e74705SXin Li return __a[__b];
10891*67e74705SXin Li }
10892*67e74705SXin Li
vec_extract(vector bool short __a,int __b)10893*67e74705SXin Li static __inline__ unsigned short __ATTRS_o_ai vec_extract(vector bool short __a,
10894*67e74705SXin Li int __b) {
10895*67e74705SXin Li return __a[__b];
10896*67e74705SXin Li }
10897*67e74705SXin Li
vec_extract(vector signed int __a,int __b)10898*67e74705SXin Li static __inline__ signed int __ATTRS_o_ai vec_extract(vector signed int __a,
10899*67e74705SXin Li int __b) {
10900*67e74705SXin Li return __a[__b];
10901*67e74705SXin Li }
10902*67e74705SXin Li
vec_extract(vector unsigned int __a,int __b)10903*67e74705SXin Li static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector unsigned int __a,
10904*67e74705SXin Li int __b) {
10905*67e74705SXin Li return __a[__b];
10906*67e74705SXin Li }
10907*67e74705SXin Li
vec_extract(vector bool int __a,int __b)10908*67e74705SXin Li static __inline__ unsigned int __ATTRS_o_ai vec_extract(vector bool int __a,
10909*67e74705SXin Li int __b) {
10910*67e74705SXin Li return __a[__b];
10911*67e74705SXin Li }
10912*67e74705SXin Li
10913*67e74705SXin Li #ifdef __VSX__
10914*67e74705SXin Li static __inline__ signed long long __ATTRS_o_ai
vec_extract(vector signed long long __a,int __b)10915*67e74705SXin Li vec_extract(vector signed long long __a, int __b) {
10916*67e74705SXin Li return __a[__b];
10917*67e74705SXin Li }
10918*67e74705SXin Li
10919*67e74705SXin Li static __inline__ unsigned long long __ATTRS_o_ai
vec_extract(vector unsigned long long __a,int __b)10920*67e74705SXin Li vec_extract(vector unsigned long long __a, int __b) {
10921*67e74705SXin Li return __a[__b];
10922*67e74705SXin Li }
10923*67e74705SXin Li
10924*67e74705SXin Li static __inline__ unsigned long long __ATTRS_o_ai
vec_extract(vector bool long long __a,int __b)10925*67e74705SXin Li vec_extract(vector bool long long __a, int __b) {
10926*67e74705SXin Li return __a[__b];
10927*67e74705SXin Li }
10928*67e74705SXin Li
vec_extract(vector double __a,int __b)10929*67e74705SXin Li static __inline__ double __ATTRS_o_ai vec_extract(vector double __a, int __b) {
10930*67e74705SXin Li return __a[__b];
10931*67e74705SXin Li }
10932*67e74705SXin Li #endif
10933*67e74705SXin Li
vec_extract(vector float __a,int __b)10934*67e74705SXin Li static __inline__ float __ATTRS_o_ai vec_extract(vector float __a, int __b) {
10935*67e74705SXin Li return __a[__b];
10936*67e74705SXin Li }
10937*67e74705SXin Li
10938*67e74705SXin Li /* vec_insert */
10939*67e74705SXin Li
10940*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_insert(signed char __a,vector signed char __b,int __c)10941*67e74705SXin Li vec_insert(signed char __a, vector signed char __b, int __c) {
10942*67e74705SXin Li __b[__c] = __a;
10943*67e74705SXin Li return __b;
10944*67e74705SXin Li }
10945*67e74705SXin Li
10946*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_insert(unsigned char __a,vector unsigned char __b,int __c)10947*67e74705SXin Li vec_insert(unsigned char __a, vector unsigned char __b, int __c) {
10948*67e74705SXin Li __b[__c] = __a;
10949*67e74705SXin Li return __b;
10950*67e74705SXin Li }
10951*67e74705SXin Li
vec_insert(unsigned char __a,vector bool char __b,int __c)10952*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai vec_insert(unsigned char __a,
10953*67e74705SXin Li vector bool char __b,
10954*67e74705SXin Li int __c) {
10955*67e74705SXin Li __b[__c] = __a;
10956*67e74705SXin Li return __b;
10957*67e74705SXin Li }
10958*67e74705SXin Li
10959*67e74705SXin Li static __inline__ vector signed short __ATTRS_o_ai
vec_insert(signed short __a,vector signed short __b,int __c)10960*67e74705SXin Li vec_insert(signed short __a, vector signed short __b, int __c) {
10961*67e74705SXin Li __b[__c] = __a;
10962*67e74705SXin Li return __b;
10963*67e74705SXin Li }
10964*67e74705SXin Li
10965*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_insert(unsigned short __a,vector unsigned short __b,int __c)10966*67e74705SXin Li vec_insert(unsigned short __a, vector unsigned short __b, int __c) {
10967*67e74705SXin Li __b[__c] = __a;
10968*67e74705SXin Li return __b;
10969*67e74705SXin Li }
10970*67e74705SXin Li
10971*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_insert(unsigned short __a,vector bool short __b,int __c)10972*67e74705SXin Li vec_insert(unsigned short __a, vector bool short __b, int __c) {
10973*67e74705SXin Li __b[__c] = __a;
10974*67e74705SXin Li return __b;
10975*67e74705SXin Li }
10976*67e74705SXin Li
10977*67e74705SXin Li static __inline__ vector signed int __ATTRS_o_ai
vec_insert(signed int __a,vector signed int __b,int __c)10978*67e74705SXin Li vec_insert(signed int __a, vector signed int __b, int __c) {
10979*67e74705SXin Li __b[__c] = __a;
10980*67e74705SXin Li return __b;
10981*67e74705SXin Li }
10982*67e74705SXin Li
10983*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_insert(unsigned int __a,vector unsigned int __b,int __c)10984*67e74705SXin Li vec_insert(unsigned int __a, vector unsigned int __b, int __c) {
10985*67e74705SXin Li __b[__c] = __a;
10986*67e74705SXin Li return __b;
10987*67e74705SXin Li }
10988*67e74705SXin Li
vec_insert(unsigned int __a,vector bool int __b,int __c)10989*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai vec_insert(unsigned int __a,
10990*67e74705SXin Li vector bool int __b,
10991*67e74705SXin Li int __c) {
10992*67e74705SXin Li __b[__c] = __a;
10993*67e74705SXin Li return __b;
10994*67e74705SXin Li }
10995*67e74705SXin Li
10996*67e74705SXin Li #ifdef __VSX__
10997*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_insert(signed long long __a,vector signed long long __b,int __c)10998*67e74705SXin Li vec_insert(signed long long __a, vector signed long long __b, int __c) {
10999*67e74705SXin Li __b[__c] = __a;
11000*67e74705SXin Li return __b;
11001*67e74705SXin Li }
11002*67e74705SXin Li
11003*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_insert(unsigned long long __a,vector unsigned long long __b,int __c)11004*67e74705SXin Li vec_insert(unsigned long long __a, vector unsigned long long __b, int __c) {
11005*67e74705SXin Li __b[__c] = __a;
11006*67e74705SXin Li return __b;
11007*67e74705SXin Li }
11008*67e74705SXin Li
11009*67e74705SXin Li static __inline__ vector bool long long __ATTRS_o_ai
vec_insert(unsigned long long __a,vector bool long long __b,int __c)11010*67e74705SXin Li vec_insert(unsigned long long __a, vector bool long long __b, int __c) {
11011*67e74705SXin Li __b[__c] = __a;
11012*67e74705SXin Li return __b;
11013*67e74705SXin Li }
vec_insert(double __a,vector double __b,int __c)11014*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_insert(double __a,
11015*67e74705SXin Li vector double __b,
11016*67e74705SXin Li int __c) {
11017*67e74705SXin Li __b[__c] = __a;
11018*67e74705SXin Li return __b;
11019*67e74705SXin Li }
11020*67e74705SXin Li #endif
11021*67e74705SXin Li
vec_insert(float __a,vector float __b,int __c)11022*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_insert(float __a,
11023*67e74705SXin Li vector float __b,
11024*67e74705SXin Li int __c) {
11025*67e74705SXin Li __b[__c] = __a;
11026*67e74705SXin Li return __b;
11027*67e74705SXin Li }
11028*67e74705SXin Li
11029*67e74705SXin Li /* vec_lvlx */
11030*67e74705SXin Li
11031*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lvlx(int __a,const signed char * __b)11032*67e74705SXin Li vec_lvlx(int __a, const signed char *__b) {
11033*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
11034*67e74705SXin Li vec_lvsl(__a, __b));
11035*67e74705SXin Li }
11036*67e74705SXin Li
11037*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lvlx(int __a,const vector signed char * __b)11038*67e74705SXin Li vec_lvlx(int __a, const vector signed char *__b) {
11039*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector signed char)(0),
11040*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11041*67e74705SXin Li }
11042*67e74705SXin Li
11043*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvlx(int __a,const unsigned char * __b)11044*67e74705SXin Li vec_lvlx(int __a, const unsigned char *__b) {
11045*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
11046*67e74705SXin Li vec_lvsl(__a, __b));
11047*67e74705SXin Li }
11048*67e74705SXin Li
11049*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvlx(int __a,const vector unsigned char * __b)11050*67e74705SXin Li vec_lvlx(int __a, const vector unsigned char *__b) {
11051*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector unsigned char)(0),
11052*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11053*67e74705SXin Li }
11054*67e74705SXin Li
11055*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_lvlx(int __a,const vector bool char * __b)11056*67e74705SXin Li vec_lvlx(int __a, const vector bool char *__b) {
11057*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector bool char)(0),
11058*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11059*67e74705SXin Li }
11060*67e74705SXin Li
vec_lvlx(int __a,const short * __b)11061*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
11062*67e74705SXin Li const short *__b) {
11063*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
11064*67e74705SXin Li }
11065*67e74705SXin Li
vec_lvlx(int __a,const vector short * __b)11066*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lvlx(int __a,
11067*67e74705SXin Li const vector short *__b) {
11068*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector short)(0),
11069*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11070*67e74705SXin Li }
11071*67e74705SXin Li
11072*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lvlx(int __a,const unsigned short * __b)11073*67e74705SXin Li vec_lvlx(int __a, const unsigned short *__b) {
11074*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
11075*67e74705SXin Li vec_lvsl(__a, __b));
11076*67e74705SXin Li }
11077*67e74705SXin Li
11078*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lvlx(int __a,const vector unsigned short * __b)11079*67e74705SXin Li vec_lvlx(int __a, const vector unsigned short *__b) {
11080*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector unsigned short)(0),
11081*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11082*67e74705SXin Li }
11083*67e74705SXin Li
11084*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_lvlx(int __a,const vector bool short * __b)11085*67e74705SXin Li vec_lvlx(int __a, const vector bool short *__b) {
11086*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector bool short)(0),
11087*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11088*67e74705SXin Li }
11089*67e74705SXin Li
vec_lvlx(int __a,const vector pixel * __b)11090*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_lvlx(int __a,
11091*67e74705SXin Li const vector pixel *__b) {
11092*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector pixel)(0),
11093*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11094*67e74705SXin Li }
11095*67e74705SXin Li
vec_lvlx(int __a,const int * __b)11096*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a, const int *__b) {
11097*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
11098*67e74705SXin Li }
11099*67e74705SXin Li
vec_lvlx(int __a,const vector int * __b)11100*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lvlx(int __a,
11101*67e74705SXin Li const vector int *__b) {
11102*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector int)(0),
11103*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11104*67e74705SXin Li }
11105*67e74705SXin Li
11106*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lvlx(int __a,const unsigned int * __b)11107*67e74705SXin Li vec_lvlx(int __a, const unsigned int *__b) {
11108*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
11109*67e74705SXin Li vec_lvsl(__a, __b));
11110*67e74705SXin Li }
11111*67e74705SXin Li
11112*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lvlx(int __a,const vector unsigned int * __b)11113*67e74705SXin Li vec_lvlx(int __a, const vector unsigned int *__b) {
11114*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector unsigned int)(0),
11115*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11116*67e74705SXin Li }
11117*67e74705SXin Li
11118*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_lvlx(int __a,const vector bool int * __b)11119*67e74705SXin Li vec_lvlx(int __a, const vector bool int *__b) {
11120*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector bool int)(0),
11121*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11122*67e74705SXin Li }
11123*67e74705SXin Li
vec_lvlx(int __a,const float * __b)11124*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
11125*67e74705SXin Li const float *__b) {
11126*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
11127*67e74705SXin Li }
11128*67e74705SXin Li
vec_lvlx(int __a,const vector float * __b)11129*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lvlx(int __a,
11130*67e74705SXin Li const vector float *__b) {
11131*67e74705SXin Li return vec_perm(vec_ld(__a, __b), (vector float)(0),
11132*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11133*67e74705SXin Li }
11134*67e74705SXin Li
11135*67e74705SXin Li /* vec_lvlxl */
11136*67e74705SXin Li
11137*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lvlxl(int __a,const signed char * __b)11138*67e74705SXin Li vec_lvlxl(int __a, const signed char *__b) {
11139*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
11140*67e74705SXin Li vec_lvsl(__a, __b));
11141*67e74705SXin Li }
11142*67e74705SXin Li
11143*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lvlxl(int __a,const vector signed char * __b)11144*67e74705SXin Li vec_lvlxl(int __a, const vector signed char *__b) {
11145*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector signed char)(0),
11146*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11147*67e74705SXin Li }
11148*67e74705SXin Li
11149*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvlxl(int __a,const unsigned char * __b)11150*67e74705SXin Li vec_lvlxl(int __a, const unsigned char *__b) {
11151*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
11152*67e74705SXin Li vec_lvsl(__a, __b));
11153*67e74705SXin Li }
11154*67e74705SXin Li
11155*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvlxl(int __a,const vector unsigned char * __b)11156*67e74705SXin Li vec_lvlxl(int __a, const vector unsigned char *__b) {
11157*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector unsigned char)(0),
11158*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11159*67e74705SXin Li }
11160*67e74705SXin Li
11161*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_lvlxl(int __a,const vector bool char * __b)11162*67e74705SXin Li vec_lvlxl(int __a, const vector bool char *__b) {
11163*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector bool char)(0),
11164*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11165*67e74705SXin Li }
11166*67e74705SXin Li
vec_lvlxl(int __a,const short * __b)11167*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
11168*67e74705SXin Li const short *__b) {
11169*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector short)(0), vec_lvsl(__a, __b));
11170*67e74705SXin Li }
11171*67e74705SXin Li
vec_lvlxl(int __a,const vector short * __b)11172*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lvlxl(int __a,
11173*67e74705SXin Li const vector short *__b) {
11174*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector short)(0),
11175*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11176*67e74705SXin Li }
11177*67e74705SXin Li
11178*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lvlxl(int __a,const unsigned short * __b)11179*67e74705SXin Li vec_lvlxl(int __a, const unsigned short *__b) {
11180*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
11181*67e74705SXin Li vec_lvsl(__a, __b));
11182*67e74705SXin Li }
11183*67e74705SXin Li
11184*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lvlxl(int __a,const vector unsigned short * __b)11185*67e74705SXin Li vec_lvlxl(int __a, const vector unsigned short *__b) {
11186*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector unsigned short)(0),
11187*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11188*67e74705SXin Li }
11189*67e74705SXin Li
11190*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_lvlxl(int __a,const vector bool short * __b)11191*67e74705SXin Li vec_lvlxl(int __a, const vector bool short *__b) {
11192*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector bool short)(0),
11193*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11194*67e74705SXin Li }
11195*67e74705SXin Li
vec_lvlxl(int __a,const vector pixel * __b)11196*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_lvlxl(int __a,
11197*67e74705SXin Li const vector pixel *__b) {
11198*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector pixel)(0),
11199*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11200*67e74705SXin Li }
11201*67e74705SXin Li
vec_lvlxl(int __a,const int * __b)11202*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a, const int *__b) {
11203*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector int)(0), vec_lvsl(__a, __b));
11204*67e74705SXin Li }
11205*67e74705SXin Li
vec_lvlxl(int __a,const vector int * __b)11206*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lvlxl(int __a,
11207*67e74705SXin Li const vector int *__b) {
11208*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector int)(0),
11209*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11210*67e74705SXin Li }
11211*67e74705SXin Li
11212*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lvlxl(int __a,const unsigned int * __b)11213*67e74705SXin Li vec_lvlxl(int __a, const unsigned int *__b) {
11214*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
11215*67e74705SXin Li vec_lvsl(__a, __b));
11216*67e74705SXin Li }
11217*67e74705SXin Li
11218*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lvlxl(int __a,const vector unsigned int * __b)11219*67e74705SXin Li vec_lvlxl(int __a, const vector unsigned int *__b) {
11220*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector unsigned int)(0),
11221*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11222*67e74705SXin Li }
11223*67e74705SXin Li
11224*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_lvlxl(int __a,const vector bool int * __b)11225*67e74705SXin Li vec_lvlxl(int __a, const vector bool int *__b) {
11226*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector bool int)(0),
11227*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11228*67e74705SXin Li }
11229*67e74705SXin Li
vec_lvlxl(int __a,const float * __b)11230*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
11231*67e74705SXin Li const float *__b) {
11232*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector float)(0), vec_lvsl(__a, __b));
11233*67e74705SXin Li }
11234*67e74705SXin Li
vec_lvlxl(int __a,vector float * __b)11235*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lvlxl(int __a,
11236*67e74705SXin Li vector float *__b) {
11237*67e74705SXin Li return vec_perm(vec_ldl(__a, __b), (vector float)(0),
11238*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11239*67e74705SXin Li }
11240*67e74705SXin Li
11241*67e74705SXin Li /* vec_lvrx */
11242*67e74705SXin Li
11243*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lvrx(int __a,const signed char * __b)11244*67e74705SXin Li vec_lvrx(int __a, const signed char *__b) {
11245*67e74705SXin Li return vec_perm((vector signed char)(0), vec_ld(__a, __b),
11246*67e74705SXin Li vec_lvsl(__a, __b));
11247*67e74705SXin Li }
11248*67e74705SXin Li
11249*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lvrx(int __a,const vector signed char * __b)11250*67e74705SXin Li vec_lvrx(int __a, const vector signed char *__b) {
11251*67e74705SXin Li return vec_perm((vector signed char)(0), vec_ld(__a, __b),
11252*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11253*67e74705SXin Li }
11254*67e74705SXin Li
11255*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvrx(int __a,const unsigned char * __b)11256*67e74705SXin Li vec_lvrx(int __a, const unsigned char *__b) {
11257*67e74705SXin Li return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
11258*67e74705SXin Li vec_lvsl(__a, __b));
11259*67e74705SXin Li }
11260*67e74705SXin Li
11261*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvrx(int __a,const vector unsigned char * __b)11262*67e74705SXin Li vec_lvrx(int __a, const vector unsigned char *__b) {
11263*67e74705SXin Li return vec_perm((vector unsigned char)(0), vec_ld(__a, __b),
11264*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11265*67e74705SXin Li }
11266*67e74705SXin Li
11267*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_lvrx(int __a,const vector bool char * __b)11268*67e74705SXin Li vec_lvrx(int __a, const vector bool char *__b) {
11269*67e74705SXin Li return vec_perm((vector bool char)(0), vec_ld(__a, __b),
11270*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11271*67e74705SXin Li }
11272*67e74705SXin Li
vec_lvrx(int __a,const short * __b)11273*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
11274*67e74705SXin Li const short *__b) {
11275*67e74705SXin Li return vec_perm((vector short)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
11276*67e74705SXin Li }
11277*67e74705SXin Li
vec_lvrx(int __a,const vector short * __b)11278*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lvrx(int __a,
11279*67e74705SXin Li const vector short *__b) {
11280*67e74705SXin Li return vec_perm((vector short)(0), vec_ld(__a, __b),
11281*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11282*67e74705SXin Li }
11283*67e74705SXin Li
11284*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lvrx(int __a,const unsigned short * __b)11285*67e74705SXin Li vec_lvrx(int __a, const unsigned short *__b) {
11286*67e74705SXin Li return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
11287*67e74705SXin Li vec_lvsl(__a, __b));
11288*67e74705SXin Li }
11289*67e74705SXin Li
11290*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lvrx(int __a,const vector unsigned short * __b)11291*67e74705SXin Li vec_lvrx(int __a, const vector unsigned short *__b) {
11292*67e74705SXin Li return vec_perm((vector unsigned short)(0), vec_ld(__a, __b),
11293*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11294*67e74705SXin Li }
11295*67e74705SXin Li
11296*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_lvrx(int __a,const vector bool short * __b)11297*67e74705SXin Li vec_lvrx(int __a, const vector bool short *__b) {
11298*67e74705SXin Li return vec_perm((vector bool short)(0), vec_ld(__a, __b),
11299*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11300*67e74705SXin Li }
11301*67e74705SXin Li
vec_lvrx(int __a,const vector pixel * __b)11302*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_lvrx(int __a,
11303*67e74705SXin Li const vector pixel *__b) {
11304*67e74705SXin Li return vec_perm((vector pixel)(0), vec_ld(__a, __b),
11305*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11306*67e74705SXin Li }
11307*67e74705SXin Li
vec_lvrx(int __a,const int * __b)11308*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a, const int *__b) {
11309*67e74705SXin Li return vec_perm((vector int)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
11310*67e74705SXin Li }
11311*67e74705SXin Li
vec_lvrx(int __a,const vector int * __b)11312*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lvrx(int __a,
11313*67e74705SXin Li const vector int *__b) {
11314*67e74705SXin Li return vec_perm((vector int)(0), vec_ld(__a, __b),
11315*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11316*67e74705SXin Li }
11317*67e74705SXin Li
11318*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lvrx(int __a,const unsigned int * __b)11319*67e74705SXin Li vec_lvrx(int __a, const unsigned int *__b) {
11320*67e74705SXin Li return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
11321*67e74705SXin Li vec_lvsl(__a, __b));
11322*67e74705SXin Li }
11323*67e74705SXin Li
11324*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lvrx(int __a,const vector unsigned int * __b)11325*67e74705SXin Li vec_lvrx(int __a, const vector unsigned int *__b) {
11326*67e74705SXin Li return vec_perm((vector unsigned int)(0), vec_ld(__a, __b),
11327*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11328*67e74705SXin Li }
11329*67e74705SXin Li
11330*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_lvrx(int __a,const vector bool int * __b)11331*67e74705SXin Li vec_lvrx(int __a, const vector bool int *__b) {
11332*67e74705SXin Li return vec_perm((vector bool int)(0), vec_ld(__a, __b),
11333*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11334*67e74705SXin Li }
11335*67e74705SXin Li
vec_lvrx(int __a,const float * __b)11336*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
11337*67e74705SXin Li const float *__b) {
11338*67e74705SXin Li return vec_perm((vector float)(0), vec_ld(__a, __b), vec_lvsl(__a, __b));
11339*67e74705SXin Li }
11340*67e74705SXin Li
vec_lvrx(int __a,const vector float * __b)11341*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lvrx(int __a,
11342*67e74705SXin Li const vector float *__b) {
11343*67e74705SXin Li return vec_perm((vector float)(0), vec_ld(__a, __b),
11344*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11345*67e74705SXin Li }
11346*67e74705SXin Li
11347*67e74705SXin Li /* vec_lvrxl */
11348*67e74705SXin Li
11349*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lvrxl(int __a,const signed char * __b)11350*67e74705SXin Li vec_lvrxl(int __a, const signed char *__b) {
11351*67e74705SXin Li return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
11352*67e74705SXin Li vec_lvsl(__a, __b));
11353*67e74705SXin Li }
11354*67e74705SXin Li
11355*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_lvrxl(int __a,const vector signed char * __b)11356*67e74705SXin Li vec_lvrxl(int __a, const vector signed char *__b) {
11357*67e74705SXin Li return vec_perm((vector signed char)(0), vec_ldl(__a, __b),
11358*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11359*67e74705SXin Li }
11360*67e74705SXin Li
11361*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvrxl(int __a,const unsigned char * __b)11362*67e74705SXin Li vec_lvrxl(int __a, const unsigned char *__b) {
11363*67e74705SXin Li return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
11364*67e74705SXin Li vec_lvsl(__a, __b));
11365*67e74705SXin Li }
11366*67e74705SXin Li
11367*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_lvrxl(int __a,const vector unsigned char * __b)11368*67e74705SXin Li vec_lvrxl(int __a, const vector unsigned char *__b) {
11369*67e74705SXin Li return vec_perm((vector unsigned char)(0), vec_ldl(__a, __b),
11370*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11371*67e74705SXin Li }
11372*67e74705SXin Li
11373*67e74705SXin Li static __inline__ vector bool char __ATTRS_o_ai
vec_lvrxl(int __a,const vector bool char * __b)11374*67e74705SXin Li vec_lvrxl(int __a, const vector bool char *__b) {
11375*67e74705SXin Li return vec_perm((vector bool char)(0), vec_ldl(__a, __b),
11376*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11377*67e74705SXin Li }
11378*67e74705SXin Li
vec_lvrxl(int __a,const short * __b)11379*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
11380*67e74705SXin Li const short *__b) {
11381*67e74705SXin Li return vec_perm((vector short)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
11382*67e74705SXin Li }
11383*67e74705SXin Li
vec_lvrxl(int __a,const vector short * __b)11384*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_lvrxl(int __a,
11385*67e74705SXin Li const vector short *__b) {
11386*67e74705SXin Li return vec_perm((vector short)(0), vec_ldl(__a, __b),
11387*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11388*67e74705SXin Li }
11389*67e74705SXin Li
11390*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lvrxl(int __a,const unsigned short * __b)11391*67e74705SXin Li vec_lvrxl(int __a, const unsigned short *__b) {
11392*67e74705SXin Li return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
11393*67e74705SXin Li vec_lvsl(__a, __b));
11394*67e74705SXin Li }
11395*67e74705SXin Li
11396*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_lvrxl(int __a,const vector unsigned short * __b)11397*67e74705SXin Li vec_lvrxl(int __a, const vector unsigned short *__b) {
11398*67e74705SXin Li return vec_perm((vector unsigned short)(0), vec_ldl(__a, __b),
11399*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11400*67e74705SXin Li }
11401*67e74705SXin Li
11402*67e74705SXin Li static __inline__ vector bool short __ATTRS_o_ai
vec_lvrxl(int __a,const vector bool short * __b)11403*67e74705SXin Li vec_lvrxl(int __a, const vector bool short *__b) {
11404*67e74705SXin Li return vec_perm((vector bool short)(0), vec_ldl(__a, __b),
11405*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11406*67e74705SXin Li }
11407*67e74705SXin Li
vec_lvrxl(int __a,const vector pixel * __b)11408*67e74705SXin Li static __inline__ vector pixel __ATTRS_o_ai vec_lvrxl(int __a,
11409*67e74705SXin Li const vector pixel *__b) {
11410*67e74705SXin Li return vec_perm((vector pixel)(0), vec_ldl(__a, __b),
11411*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11412*67e74705SXin Li }
11413*67e74705SXin Li
vec_lvrxl(int __a,const int * __b)11414*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a, const int *__b) {
11415*67e74705SXin Li return vec_perm((vector int)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
11416*67e74705SXin Li }
11417*67e74705SXin Li
vec_lvrxl(int __a,const vector int * __b)11418*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_lvrxl(int __a,
11419*67e74705SXin Li const vector int *__b) {
11420*67e74705SXin Li return vec_perm((vector int)(0), vec_ldl(__a, __b),
11421*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11422*67e74705SXin Li }
11423*67e74705SXin Li
11424*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lvrxl(int __a,const unsigned int * __b)11425*67e74705SXin Li vec_lvrxl(int __a, const unsigned int *__b) {
11426*67e74705SXin Li return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
11427*67e74705SXin Li vec_lvsl(__a, __b));
11428*67e74705SXin Li }
11429*67e74705SXin Li
11430*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_lvrxl(int __a,const vector unsigned int * __b)11431*67e74705SXin Li vec_lvrxl(int __a, const vector unsigned int *__b) {
11432*67e74705SXin Li return vec_perm((vector unsigned int)(0), vec_ldl(__a, __b),
11433*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11434*67e74705SXin Li }
11435*67e74705SXin Li
11436*67e74705SXin Li static __inline__ vector bool int __ATTRS_o_ai
vec_lvrxl(int __a,const vector bool int * __b)11437*67e74705SXin Li vec_lvrxl(int __a, const vector bool int *__b) {
11438*67e74705SXin Li return vec_perm((vector bool int)(0), vec_ldl(__a, __b),
11439*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11440*67e74705SXin Li }
11441*67e74705SXin Li
vec_lvrxl(int __a,const float * __b)11442*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
11443*67e74705SXin Li const float *__b) {
11444*67e74705SXin Li return vec_perm((vector float)(0), vec_ldl(__a, __b), vec_lvsl(__a, __b));
11445*67e74705SXin Li }
11446*67e74705SXin Li
vec_lvrxl(int __a,const vector float * __b)11447*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_lvrxl(int __a,
11448*67e74705SXin Li const vector float *__b) {
11449*67e74705SXin Li return vec_perm((vector float)(0), vec_ldl(__a, __b),
11450*67e74705SXin Li vec_lvsl(__a, (unsigned char *)__b));
11451*67e74705SXin Li }
11452*67e74705SXin Li
11453*67e74705SXin Li /* vec_stvlx */
11454*67e74705SXin Li
vec_stvlx(vector signed char __a,int __b,signed char * __c)11455*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
11456*67e74705SXin Li signed char *__c) {
11457*67e74705SXin Li return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
11458*67e74705SXin Li __c);
11459*67e74705SXin Li }
11460*67e74705SXin Li
vec_stvlx(vector signed char __a,int __b,vector signed char * __c)11461*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector signed char __a, int __b,
11462*67e74705SXin Li vector signed char *__c) {
11463*67e74705SXin Li return vec_st(
11464*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11465*67e74705SXin Li __b, __c);
11466*67e74705SXin Li }
11467*67e74705SXin Li
vec_stvlx(vector unsigned char __a,int __b,unsigned char * __c)11468*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
11469*67e74705SXin Li unsigned char *__c) {
11470*67e74705SXin Li return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
11471*67e74705SXin Li __c);
11472*67e74705SXin Li }
11473*67e74705SXin Li
vec_stvlx(vector unsigned char __a,int __b,vector unsigned char * __c)11474*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned char __a, int __b,
11475*67e74705SXin Li vector unsigned char *__c) {
11476*67e74705SXin Li return vec_st(
11477*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11478*67e74705SXin Li __b, __c);
11479*67e74705SXin Li }
11480*67e74705SXin Li
vec_stvlx(vector bool char __a,int __b,vector bool char * __c)11481*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool char __a, int __b,
11482*67e74705SXin Li vector bool char *__c) {
11483*67e74705SXin Li return vec_st(
11484*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11485*67e74705SXin Li __b, __c);
11486*67e74705SXin Li }
11487*67e74705SXin Li
vec_stvlx(vector short __a,int __b,short * __c)11488*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
11489*67e74705SXin Li short *__c) {
11490*67e74705SXin Li return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
11491*67e74705SXin Li __c);
11492*67e74705SXin Li }
11493*67e74705SXin Li
vec_stvlx(vector short __a,int __b,vector short * __c)11494*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector short __a, int __b,
11495*67e74705SXin Li vector short *__c) {
11496*67e74705SXin Li return vec_st(
11497*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11498*67e74705SXin Li __b, __c);
11499*67e74705SXin Li }
11500*67e74705SXin Li
vec_stvlx(vector unsigned short __a,int __b,unsigned short * __c)11501*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
11502*67e74705SXin Li int __b, unsigned short *__c) {
11503*67e74705SXin Li return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
11504*67e74705SXin Li __c);
11505*67e74705SXin Li }
11506*67e74705SXin Li
vec_stvlx(vector unsigned short __a,int __b,vector unsigned short * __c)11507*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned short __a,
11508*67e74705SXin Li int __b,
11509*67e74705SXin Li vector unsigned short *__c) {
11510*67e74705SXin Li return vec_st(
11511*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11512*67e74705SXin Li __b, __c);
11513*67e74705SXin Li }
11514*67e74705SXin Li
vec_stvlx(vector bool short __a,int __b,vector bool short * __c)11515*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool short __a, int __b,
11516*67e74705SXin Li vector bool short *__c) {
11517*67e74705SXin Li return vec_st(
11518*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11519*67e74705SXin Li __b, __c);
11520*67e74705SXin Li }
11521*67e74705SXin Li
vec_stvlx(vector pixel __a,int __b,vector pixel * __c)11522*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector pixel __a, int __b,
11523*67e74705SXin Li vector pixel *__c) {
11524*67e74705SXin Li return vec_st(
11525*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11526*67e74705SXin Li __b, __c);
11527*67e74705SXin Li }
11528*67e74705SXin Li
vec_stvlx(vector int __a,int __b,int * __c)11529*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
11530*67e74705SXin Li int *__c) {
11531*67e74705SXin Li return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
11532*67e74705SXin Li __c);
11533*67e74705SXin Li }
11534*67e74705SXin Li
vec_stvlx(vector int __a,int __b,vector int * __c)11535*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector int __a, int __b,
11536*67e74705SXin Li vector int *__c) {
11537*67e74705SXin Li return vec_st(
11538*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11539*67e74705SXin Li __b, __c);
11540*67e74705SXin Li }
11541*67e74705SXin Li
vec_stvlx(vector unsigned int __a,int __b,unsigned int * __c)11542*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
11543*67e74705SXin Li unsigned int *__c) {
11544*67e74705SXin Li return vec_st(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
11545*67e74705SXin Li __c);
11546*67e74705SXin Li }
11547*67e74705SXin Li
vec_stvlx(vector unsigned int __a,int __b,vector unsigned int * __c)11548*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector unsigned int __a, int __b,
11549*67e74705SXin Li vector unsigned int *__c) {
11550*67e74705SXin Li return vec_st(
11551*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11552*67e74705SXin Li __b, __c);
11553*67e74705SXin Li }
11554*67e74705SXin Li
vec_stvlx(vector bool int __a,int __b,vector bool int * __c)11555*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector bool int __a, int __b,
11556*67e74705SXin Li vector bool int *__c) {
11557*67e74705SXin Li return vec_st(
11558*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11559*67e74705SXin Li __b, __c);
11560*67e74705SXin Li }
11561*67e74705SXin Li
vec_stvlx(vector float __a,int __b,vector float * __c)11562*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlx(vector float __a, int __b,
11563*67e74705SXin Li vector float *__c) {
11564*67e74705SXin Li return vec_st(
11565*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11566*67e74705SXin Li __b, __c);
11567*67e74705SXin Li }
11568*67e74705SXin Li
11569*67e74705SXin Li /* vec_stvlxl */
11570*67e74705SXin Li
vec_stvlxl(vector signed char __a,int __b,signed char * __c)11571*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
11572*67e74705SXin Li signed char *__c) {
11573*67e74705SXin Li return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
11574*67e74705SXin Li __c);
11575*67e74705SXin Li }
11576*67e74705SXin Li
vec_stvlxl(vector signed char __a,int __b,vector signed char * __c)11577*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector signed char __a, int __b,
11578*67e74705SXin Li vector signed char *__c) {
11579*67e74705SXin Li return vec_stl(
11580*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11581*67e74705SXin Li __b, __c);
11582*67e74705SXin Li }
11583*67e74705SXin Li
vec_stvlxl(vector unsigned char __a,int __b,unsigned char * __c)11584*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
11585*67e74705SXin Li int __b, unsigned char *__c) {
11586*67e74705SXin Li return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
11587*67e74705SXin Li __c);
11588*67e74705SXin Li }
11589*67e74705SXin Li
vec_stvlxl(vector unsigned char __a,int __b,vector unsigned char * __c)11590*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned char __a,
11591*67e74705SXin Li int __b,
11592*67e74705SXin Li vector unsigned char *__c) {
11593*67e74705SXin Li return vec_stl(
11594*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11595*67e74705SXin Li __b, __c);
11596*67e74705SXin Li }
11597*67e74705SXin Li
vec_stvlxl(vector bool char __a,int __b,vector bool char * __c)11598*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool char __a, int __b,
11599*67e74705SXin Li vector bool char *__c) {
11600*67e74705SXin Li return vec_stl(
11601*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11602*67e74705SXin Li __b, __c);
11603*67e74705SXin Li }
11604*67e74705SXin Li
vec_stvlxl(vector short __a,int __b,short * __c)11605*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
11606*67e74705SXin Li short *__c) {
11607*67e74705SXin Li return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
11608*67e74705SXin Li __c);
11609*67e74705SXin Li }
11610*67e74705SXin Li
vec_stvlxl(vector short __a,int __b,vector short * __c)11611*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector short __a, int __b,
11612*67e74705SXin Li vector short *__c) {
11613*67e74705SXin Li return vec_stl(
11614*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11615*67e74705SXin Li __b, __c);
11616*67e74705SXin Li }
11617*67e74705SXin Li
vec_stvlxl(vector unsigned short __a,int __b,unsigned short * __c)11618*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
11619*67e74705SXin Li int __b, unsigned short *__c) {
11620*67e74705SXin Li return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
11621*67e74705SXin Li __c);
11622*67e74705SXin Li }
11623*67e74705SXin Li
vec_stvlxl(vector unsigned short __a,int __b,vector unsigned short * __c)11624*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned short __a,
11625*67e74705SXin Li int __b,
11626*67e74705SXin Li vector unsigned short *__c) {
11627*67e74705SXin Li return vec_stl(
11628*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11629*67e74705SXin Li __b, __c);
11630*67e74705SXin Li }
11631*67e74705SXin Li
vec_stvlxl(vector bool short __a,int __b,vector bool short * __c)11632*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool short __a, int __b,
11633*67e74705SXin Li vector bool short *__c) {
11634*67e74705SXin Li return vec_stl(
11635*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11636*67e74705SXin Li __b, __c);
11637*67e74705SXin Li }
11638*67e74705SXin Li
vec_stvlxl(vector pixel __a,int __b,vector pixel * __c)11639*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector pixel __a, int __b,
11640*67e74705SXin Li vector pixel *__c) {
11641*67e74705SXin Li return vec_stl(
11642*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11643*67e74705SXin Li __b, __c);
11644*67e74705SXin Li }
11645*67e74705SXin Li
vec_stvlxl(vector int __a,int __b,int * __c)11646*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
11647*67e74705SXin Li int *__c) {
11648*67e74705SXin Li return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
11649*67e74705SXin Li __c);
11650*67e74705SXin Li }
11651*67e74705SXin Li
vec_stvlxl(vector int __a,int __b,vector int * __c)11652*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector int __a, int __b,
11653*67e74705SXin Li vector int *__c) {
11654*67e74705SXin Li return vec_stl(
11655*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11656*67e74705SXin Li __b, __c);
11657*67e74705SXin Li }
11658*67e74705SXin Li
vec_stvlxl(vector unsigned int __a,int __b,unsigned int * __c)11659*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
11660*67e74705SXin Li unsigned int *__c) {
11661*67e74705SXin Li return vec_stl(vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, __c)), __b,
11662*67e74705SXin Li __c);
11663*67e74705SXin Li }
11664*67e74705SXin Li
vec_stvlxl(vector unsigned int __a,int __b,vector unsigned int * __c)11665*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector unsigned int __a, int __b,
11666*67e74705SXin Li vector unsigned int *__c) {
11667*67e74705SXin Li return vec_stl(
11668*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11669*67e74705SXin Li __b, __c);
11670*67e74705SXin Li }
11671*67e74705SXin Li
vec_stvlxl(vector bool int __a,int __b,vector bool int * __c)11672*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector bool int __a, int __b,
11673*67e74705SXin Li vector bool int *__c) {
11674*67e74705SXin Li return vec_stl(
11675*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11676*67e74705SXin Li __b, __c);
11677*67e74705SXin Li }
11678*67e74705SXin Li
vec_stvlxl(vector float __a,int __b,vector float * __c)11679*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvlxl(vector float __a, int __b,
11680*67e74705SXin Li vector float *__c) {
11681*67e74705SXin Li return vec_stl(
11682*67e74705SXin Li vec_perm(vec_lvrx(__b, __c), __a, vec_lvsr(__b, (unsigned char *)__c)),
11683*67e74705SXin Li __b, __c);
11684*67e74705SXin Li }
11685*67e74705SXin Li
11686*67e74705SXin Li /* vec_stvrx */
11687*67e74705SXin Li
vec_stvrx(vector signed char __a,int __b,signed char * __c)11688*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
11689*67e74705SXin Li signed char *__c) {
11690*67e74705SXin Li return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
11691*67e74705SXin Li __c);
11692*67e74705SXin Li }
11693*67e74705SXin Li
vec_stvrx(vector signed char __a,int __b,vector signed char * __c)11694*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector signed char __a, int __b,
11695*67e74705SXin Li vector signed char *__c) {
11696*67e74705SXin Li return vec_st(
11697*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11698*67e74705SXin Li __b, __c);
11699*67e74705SXin Li }
11700*67e74705SXin Li
vec_stvrx(vector unsigned char __a,int __b,unsigned char * __c)11701*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
11702*67e74705SXin Li unsigned char *__c) {
11703*67e74705SXin Li return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
11704*67e74705SXin Li __c);
11705*67e74705SXin Li }
11706*67e74705SXin Li
vec_stvrx(vector unsigned char __a,int __b,vector unsigned char * __c)11707*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned char __a, int __b,
11708*67e74705SXin Li vector unsigned char *__c) {
11709*67e74705SXin Li return vec_st(
11710*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11711*67e74705SXin Li __b, __c);
11712*67e74705SXin Li }
11713*67e74705SXin Li
vec_stvrx(vector bool char __a,int __b,vector bool char * __c)11714*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool char __a, int __b,
11715*67e74705SXin Li vector bool char *__c) {
11716*67e74705SXin Li return vec_st(
11717*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11718*67e74705SXin Li __b, __c);
11719*67e74705SXin Li }
11720*67e74705SXin Li
vec_stvrx(vector short __a,int __b,short * __c)11721*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
11722*67e74705SXin Li short *__c) {
11723*67e74705SXin Li return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
11724*67e74705SXin Li __c);
11725*67e74705SXin Li }
11726*67e74705SXin Li
vec_stvrx(vector short __a,int __b,vector short * __c)11727*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector short __a, int __b,
11728*67e74705SXin Li vector short *__c) {
11729*67e74705SXin Li return vec_st(
11730*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11731*67e74705SXin Li __b, __c);
11732*67e74705SXin Li }
11733*67e74705SXin Li
vec_stvrx(vector unsigned short __a,int __b,unsigned short * __c)11734*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
11735*67e74705SXin Li int __b, unsigned short *__c) {
11736*67e74705SXin Li return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
11737*67e74705SXin Li __c);
11738*67e74705SXin Li }
11739*67e74705SXin Li
vec_stvrx(vector unsigned short __a,int __b,vector unsigned short * __c)11740*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned short __a,
11741*67e74705SXin Li int __b,
11742*67e74705SXin Li vector unsigned short *__c) {
11743*67e74705SXin Li return vec_st(
11744*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11745*67e74705SXin Li __b, __c);
11746*67e74705SXin Li }
11747*67e74705SXin Li
vec_stvrx(vector bool short __a,int __b,vector bool short * __c)11748*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool short __a, int __b,
11749*67e74705SXin Li vector bool short *__c) {
11750*67e74705SXin Li return vec_st(
11751*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11752*67e74705SXin Li __b, __c);
11753*67e74705SXin Li }
11754*67e74705SXin Li
vec_stvrx(vector pixel __a,int __b,vector pixel * __c)11755*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector pixel __a, int __b,
11756*67e74705SXin Li vector pixel *__c) {
11757*67e74705SXin Li return vec_st(
11758*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11759*67e74705SXin Li __b, __c);
11760*67e74705SXin Li }
11761*67e74705SXin Li
vec_stvrx(vector int __a,int __b,int * __c)11762*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
11763*67e74705SXin Li int *__c) {
11764*67e74705SXin Li return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
11765*67e74705SXin Li __c);
11766*67e74705SXin Li }
11767*67e74705SXin Li
vec_stvrx(vector int __a,int __b,vector int * __c)11768*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector int __a, int __b,
11769*67e74705SXin Li vector int *__c) {
11770*67e74705SXin Li return vec_st(
11771*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11772*67e74705SXin Li __b, __c);
11773*67e74705SXin Li }
11774*67e74705SXin Li
vec_stvrx(vector unsigned int __a,int __b,unsigned int * __c)11775*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
11776*67e74705SXin Li unsigned int *__c) {
11777*67e74705SXin Li return vec_st(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
11778*67e74705SXin Li __c);
11779*67e74705SXin Li }
11780*67e74705SXin Li
vec_stvrx(vector unsigned int __a,int __b,vector unsigned int * __c)11781*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector unsigned int __a, int __b,
11782*67e74705SXin Li vector unsigned int *__c) {
11783*67e74705SXin Li return vec_st(
11784*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11785*67e74705SXin Li __b, __c);
11786*67e74705SXin Li }
11787*67e74705SXin Li
vec_stvrx(vector bool int __a,int __b,vector bool int * __c)11788*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector bool int __a, int __b,
11789*67e74705SXin Li vector bool int *__c) {
11790*67e74705SXin Li return vec_st(
11791*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11792*67e74705SXin Li __b, __c);
11793*67e74705SXin Li }
11794*67e74705SXin Li
vec_stvrx(vector float __a,int __b,vector float * __c)11795*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrx(vector float __a, int __b,
11796*67e74705SXin Li vector float *__c) {
11797*67e74705SXin Li return vec_st(
11798*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11799*67e74705SXin Li __b, __c);
11800*67e74705SXin Li }
11801*67e74705SXin Li
11802*67e74705SXin Li /* vec_stvrxl */
11803*67e74705SXin Li
vec_stvrxl(vector signed char __a,int __b,signed char * __c)11804*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
11805*67e74705SXin Li signed char *__c) {
11806*67e74705SXin Li return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
11807*67e74705SXin Li __c);
11808*67e74705SXin Li }
11809*67e74705SXin Li
vec_stvrxl(vector signed char __a,int __b,vector signed char * __c)11810*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector signed char __a, int __b,
11811*67e74705SXin Li vector signed char *__c) {
11812*67e74705SXin Li return vec_stl(
11813*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11814*67e74705SXin Li __b, __c);
11815*67e74705SXin Li }
11816*67e74705SXin Li
vec_stvrxl(vector unsigned char __a,int __b,unsigned char * __c)11817*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
11818*67e74705SXin Li int __b, unsigned char *__c) {
11819*67e74705SXin Li return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
11820*67e74705SXin Li __c);
11821*67e74705SXin Li }
11822*67e74705SXin Li
vec_stvrxl(vector unsigned char __a,int __b,vector unsigned char * __c)11823*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned char __a,
11824*67e74705SXin Li int __b,
11825*67e74705SXin Li vector unsigned char *__c) {
11826*67e74705SXin Li return vec_stl(
11827*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11828*67e74705SXin Li __b, __c);
11829*67e74705SXin Li }
11830*67e74705SXin Li
vec_stvrxl(vector bool char __a,int __b,vector bool char * __c)11831*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool char __a, int __b,
11832*67e74705SXin Li vector bool char *__c) {
11833*67e74705SXin Li return vec_stl(
11834*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11835*67e74705SXin Li __b, __c);
11836*67e74705SXin Li }
11837*67e74705SXin Li
vec_stvrxl(vector short __a,int __b,short * __c)11838*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
11839*67e74705SXin Li short *__c) {
11840*67e74705SXin Li return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
11841*67e74705SXin Li __c);
11842*67e74705SXin Li }
11843*67e74705SXin Li
vec_stvrxl(vector short __a,int __b,vector short * __c)11844*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector short __a, int __b,
11845*67e74705SXin Li vector short *__c) {
11846*67e74705SXin Li return vec_stl(
11847*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11848*67e74705SXin Li __b, __c);
11849*67e74705SXin Li }
11850*67e74705SXin Li
vec_stvrxl(vector unsigned short __a,int __b,unsigned short * __c)11851*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
11852*67e74705SXin Li int __b, unsigned short *__c) {
11853*67e74705SXin Li return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
11854*67e74705SXin Li __c);
11855*67e74705SXin Li }
11856*67e74705SXin Li
vec_stvrxl(vector unsigned short __a,int __b,vector unsigned short * __c)11857*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned short __a,
11858*67e74705SXin Li int __b,
11859*67e74705SXin Li vector unsigned short *__c) {
11860*67e74705SXin Li return vec_stl(
11861*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11862*67e74705SXin Li __b, __c);
11863*67e74705SXin Li }
11864*67e74705SXin Li
vec_stvrxl(vector bool short __a,int __b,vector bool short * __c)11865*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool short __a, int __b,
11866*67e74705SXin Li vector bool short *__c) {
11867*67e74705SXin Li return vec_stl(
11868*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11869*67e74705SXin Li __b, __c);
11870*67e74705SXin Li }
11871*67e74705SXin Li
vec_stvrxl(vector pixel __a,int __b,vector pixel * __c)11872*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector pixel __a, int __b,
11873*67e74705SXin Li vector pixel *__c) {
11874*67e74705SXin Li return vec_stl(
11875*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11876*67e74705SXin Li __b, __c);
11877*67e74705SXin Li }
11878*67e74705SXin Li
vec_stvrxl(vector int __a,int __b,int * __c)11879*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
11880*67e74705SXin Li int *__c) {
11881*67e74705SXin Li return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
11882*67e74705SXin Li __c);
11883*67e74705SXin Li }
11884*67e74705SXin Li
vec_stvrxl(vector int __a,int __b,vector int * __c)11885*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector int __a, int __b,
11886*67e74705SXin Li vector int *__c) {
11887*67e74705SXin Li return vec_stl(
11888*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11889*67e74705SXin Li __b, __c);
11890*67e74705SXin Li }
11891*67e74705SXin Li
vec_stvrxl(vector unsigned int __a,int __b,unsigned int * __c)11892*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
11893*67e74705SXin Li unsigned int *__c) {
11894*67e74705SXin Li return vec_stl(vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, __c)), __b,
11895*67e74705SXin Li __c);
11896*67e74705SXin Li }
11897*67e74705SXin Li
vec_stvrxl(vector unsigned int __a,int __b,vector unsigned int * __c)11898*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector unsigned int __a, int __b,
11899*67e74705SXin Li vector unsigned int *__c) {
11900*67e74705SXin Li return vec_stl(
11901*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11902*67e74705SXin Li __b, __c);
11903*67e74705SXin Li }
11904*67e74705SXin Li
vec_stvrxl(vector bool int __a,int __b,vector bool int * __c)11905*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector bool int __a, int __b,
11906*67e74705SXin Li vector bool int *__c) {
11907*67e74705SXin Li return vec_stl(
11908*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11909*67e74705SXin Li __b, __c);
11910*67e74705SXin Li }
11911*67e74705SXin Li
vec_stvrxl(vector float __a,int __b,vector float * __c)11912*67e74705SXin Li static __inline__ void __ATTRS_o_ai vec_stvrxl(vector float __a, int __b,
11913*67e74705SXin Li vector float *__c) {
11914*67e74705SXin Li return vec_stl(
11915*67e74705SXin Li vec_perm(__a, vec_lvlx(__b, __c), vec_lvsr(__b, (unsigned char *)__c)),
11916*67e74705SXin Li __b, __c);
11917*67e74705SXin Li }
11918*67e74705SXin Li
11919*67e74705SXin Li /* vec_promote */
11920*67e74705SXin Li
vec_promote(signed char __a,int __b)11921*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai vec_promote(signed char __a,
11922*67e74705SXin Li int __b) {
11923*67e74705SXin Li vector signed char __res = (vector signed char)(0);
11924*67e74705SXin Li __res[__b] = __a;
11925*67e74705SXin Li return __res;
11926*67e74705SXin Li }
11927*67e74705SXin Li
11928*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_promote(unsigned char __a,int __b)11929*67e74705SXin Li vec_promote(unsigned char __a, int __b) {
11930*67e74705SXin Li vector unsigned char __res = (vector unsigned char)(0);
11931*67e74705SXin Li __res[__b] = __a;
11932*67e74705SXin Li return __res;
11933*67e74705SXin Li }
11934*67e74705SXin Li
vec_promote(short __a,int __b)11935*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_promote(short __a, int __b) {
11936*67e74705SXin Li vector short __res = (vector short)(0);
11937*67e74705SXin Li __res[__b] = __a;
11938*67e74705SXin Li return __res;
11939*67e74705SXin Li }
11940*67e74705SXin Li
11941*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_promote(unsigned short __a,int __b)11942*67e74705SXin Li vec_promote(unsigned short __a, int __b) {
11943*67e74705SXin Li vector unsigned short __res = (vector unsigned short)(0);
11944*67e74705SXin Li __res[__b] = __a;
11945*67e74705SXin Li return __res;
11946*67e74705SXin Li }
11947*67e74705SXin Li
vec_promote(int __a,int __b)11948*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_promote(int __a, int __b) {
11949*67e74705SXin Li vector int __res = (vector int)(0);
11950*67e74705SXin Li __res[__b] = __a;
11951*67e74705SXin Li return __res;
11952*67e74705SXin Li }
11953*67e74705SXin Li
vec_promote(unsigned int __a,int __b)11954*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai vec_promote(unsigned int __a,
11955*67e74705SXin Li int __b) {
11956*67e74705SXin Li vector unsigned int __res = (vector unsigned int)(0);
11957*67e74705SXin Li __res[__b] = __a;
11958*67e74705SXin Li return __res;
11959*67e74705SXin Li }
11960*67e74705SXin Li
vec_promote(float __a,int __b)11961*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_promote(float __a, int __b) {
11962*67e74705SXin Li vector float __res = (vector float)(0);
11963*67e74705SXin Li __res[__b] = __a;
11964*67e74705SXin Li return __res;
11965*67e74705SXin Li }
11966*67e74705SXin Li
11967*67e74705SXin Li /* vec_splats */
11968*67e74705SXin Li
vec_splats(signed char __a)11969*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai vec_splats(signed char __a) {
11970*67e74705SXin Li return (vector signed char)(__a);
11971*67e74705SXin Li }
11972*67e74705SXin Li
11973*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_splats(unsigned char __a)11974*67e74705SXin Li vec_splats(unsigned char __a) {
11975*67e74705SXin Li return (vector unsigned char)(__a);
11976*67e74705SXin Li }
11977*67e74705SXin Li
vec_splats(short __a)11978*67e74705SXin Li static __inline__ vector short __ATTRS_o_ai vec_splats(short __a) {
11979*67e74705SXin Li return (vector short)(__a);
11980*67e74705SXin Li }
11981*67e74705SXin Li
11982*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
vec_splats(unsigned short __a)11983*67e74705SXin Li vec_splats(unsigned short __a) {
11984*67e74705SXin Li return (vector unsigned short)(__a);
11985*67e74705SXin Li }
11986*67e74705SXin Li
vec_splats(int __a)11987*67e74705SXin Li static __inline__ vector int __ATTRS_o_ai vec_splats(int __a) {
11988*67e74705SXin Li return (vector int)(__a);
11989*67e74705SXin Li }
11990*67e74705SXin Li
11991*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
vec_splats(unsigned int __a)11992*67e74705SXin Li vec_splats(unsigned int __a) {
11993*67e74705SXin Li return (vector unsigned int)(__a);
11994*67e74705SXin Li }
11995*67e74705SXin Li
11996*67e74705SXin Li #ifdef __VSX__
11997*67e74705SXin Li static __inline__ vector signed long long __ATTRS_o_ai
vec_splats(signed long long __a)11998*67e74705SXin Li vec_splats(signed long long __a) {
11999*67e74705SXin Li return (vector signed long long)(__a);
12000*67e74705SXin Li }
12001*67e74705SXin Li
12002*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
vec_splats(unsigned long long __a)12003*67e74705SXin Li vec_splats(unsigned long long __a) {
12004*67e74705SXin Li return (vector unsigned long long)(__a);
12005*67e74705SXin Li }
12006*67e74705SXin Li
12007*67e74705SXin Li #if defined(__POWER8_VECTOR__) && defined(__powerpc64__)
12008*67e74705SXin Li static __inline__ vector signed __int128 __ATTRS_o_ai
vec_splats(signed __int128 __a)12009*67e74705SXin Li vec_splats(signed __int128 __a) {
12010*67e74705SXin Li return (vector signed __int128)(__a);
12011*67e74705SXin Li }
12012*67e74705SXin Li
12013*67e74705SXin Li static __inline__ vector unsigned __int128 __ATTRS_o_ai
vec_splats(unsigned __int128 __a)12014*67e74705SXin Li vec_splats(unsigned __int128 __a) {
12015*67e74705SXin Li return (vector unsigned __int128)(__a);
12016*67e74705SXin Li }
12017*67e74705SXin Li
12018*67e74705SXin Li #endif
12019*67e74705SXin Li
vec_splats(double __a)12020*67e74705SXin Li static __inline__ vector double __ATTRS_o_ai vec_splats(double __a) {
12021*67e74705SXin Li return (vector double)(__a);
12022*67e74705SXin Li }
12023*67e74705SXin Li #endif
12024*67e74705SXin Li
vec_splats(float __a)12025*67e74705SXin Li static __inline__ vector float __ATTRS_o_ai vec_splats(float __a) {
12026*67e74705SXin Li return (vector float)(__a);
12027*67e74705SXin Li }
12028*67e74705SXin Li
12029*67e74705SXin Li /* ----------------------------- predicates --------------------------------- */
12030*67e74705SXin Li
12031*67e74705SXin Li /* vec_all_eq */
12032*67e74705SXin Li
vec_all_eq(vector signed char __a,vector signed char __b)12033*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
12034*67e74705SXin Li vector signed char __b) {
12035*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
12036*67e74705SXin Li (vector char)__b);
12037*67e74705SXin Li }
12038*67e74705SXin Li
vec_all_eq(vector signed char __a,vector bool char __b)12039*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed char __a,
12040*67e74705SXin Li vector bool char __b) {
12041*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
12042*67e74705SXin Li (vector char)__b);
12043*67e74705SXin Li }
12044*67e74705SXin Li
vec_all_eq(vector unsigned char __a,vector unsigned char __b)12045*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
12046*67e74705SXin Li vector unsigned char __b) {
12047*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
12048*67e74705SXin Li (vector char)__b);
12049*67e74705SXin Li }
12050*67e74705SXin Li
vec_all_eq(vector unsigned char __a,vector bool char __b)12051*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned char __a,
12052*67e74705SXin Li vector bool char __b) {
12053*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
12054*67e74705SXin Li (vector char)__b);
12055*67e74705SXin Li }
12056*67e74705SXin Li
vec_all_eq(vector bool char __a,vector signed char __b)12057*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
12058*67e74705SXin Li vector signed char __b) {
12059*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
12060*67e74705SXin Li (vector char)__b);
12061*67e74705SXin Li }
12062*67e74705SXin Li
vec_all_eq(vector bool char __a,vector unsigned char __b)12063*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
12064*67e74705SXin Li vector unsigned char __b) {
12065*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
12066*67e74705SXin Li (vector char)__b);
12067*67e74705SXin Li }
12068*67e74705SXin Li
vec_all_eq(vector bool char __a,vector bool char __b)12069*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool char __a,
12070*67e74705SXin Li vector bool char __b) {
12071*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a,
12072*67e74705SXin Li (vector char)__b);
12073*67e74705SXin Li }
12074*67e74705SXin Li
vec_all_eq(vector short __a,vector short __b)12075*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
12076*67e74705SXin Li vector short __b) {
12077*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, __b);
12078*67e74705SXin Li }
12079*67e74705SXin Li
vec_all_eq(vector short __a,vector bool short __b)12080*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector short __a,
12081*67e74705SXin Li vector bool short __b) {
12082*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, (vector short)__b);
12083*67e74705SXin Li }
12084*67e74705SXin Li
vec_all_eq(vector unsigned short __a,vector unsigned short __b)12085*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
12086*67e74705SXin Li vector unsigned short __b) {
12087*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
12088*67e74705SXin Li (vector short)__b);
12089*67e74705SXin Li }
12090*67e74705SXin Li
vec_all_eq(vector unsigned short __a,vector bool short __b)12091*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned short __a,
12092*67e74705SXin Li vector bool short __b) {
12093*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
12094*67e74705SXin Li (vector short)__b);
12095*67e74705SXin Li }
12096*67e74705SXin Li
vec_all_eq(vector bool short __a,vector short __b)12097*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
12098*67e74705SXin Li vector short __b) {
12099*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
12100*67e74705SXin Li (vector short)__b);
12101*67e74705SXin Li }
12102*67e74705SXin Li
vec_all_eq(vector bool short __a,vector unsigned short __b)12103*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
12104*67e74705SXin Li vector unsigned short __b) {
12105*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
12106*67e74705SXin Li (vector short)__b);
12107*67e74705SXin Li }
12108*67e74705SXin Li
vec_all_eq(vector bool short __a,vector bool short __b)12109*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool short __a,
12110*67e74705SXin Li vector bool short __b) {
12111*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
12112*67e74705SXin Li (vector short)__b);
12113*67e74705SXin Li }
12114*67e74705SXin Li
vec_all_eq(vector pixel __a,vector pixel __b)12115*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector pixel __a,
12116*67e74705SXin Li vector pixel __b) {
12117*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a,
12118*67e74705SXin Li (vector short)__b);
12119*67e74705SXin Li }
12120*67e74705SXin Li
vec_all_eq(vector int __a,vector int __b)12121*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a, vector int __b) {
12122*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, __b);
12123*67e74705SXin Li }
12124*67e74705SXin Li
vec_all_eq(vector int __a,vector bool int __b)12125*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector int __a,
12126*67e74705SXin Li vector bool int __b) {
12127*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, (vector int)__b);
12128*67e74705SXin Li }
12129*67e74705SXin Li
vec_all_eq(vector unsigned int __a,vector unsigned int __b)12130*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
12131*67e74705SXin Li vector unsigned int __b) {
12132*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
12133*67e74705SXin Li (vector int)__b);
12134*67e74705SXin Li }
12135*67e74705SXin Li
vec_all_eq(vector unsigned int __a,vector bool int __b)12136*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned int __a,
12137*67e74705SXin Li vector bool int __b) {
12138*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
12139*67e74705SXin Li (vector int)__b);
12140*67e74705SXin Li }
12141*67e74705SXin Li
vec_all_eq(vector bool int __a,vector int __b)12142*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
12143*67e74705SXin Li vector int __b) {
12144*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
12145*67e74705SXin Li (vector int)__b);
12146*67e74705SXin Li }
12147*67e74705SXin Li
vec_all_eq(vector bool int __a,vector unsigned int __b)12148*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
12149*67e74705SXin Li vector unsigned int __b) {
12150*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
12151*67e74705SXin Li (vector int)__b);
12152*67e74705SXin Li }
12153*67e74705SXin Li
vec_all_eq(vector bool int __a,vector bool int __b)12154*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool int __a,
12155*67e74705SXin Li vector bool int __b) {
12156*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a,
12157*67e74705SXin Li (vector int)__b);
12158*67e74705SXin Li }
12159*67e74705SXin Li
12160*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_all_eq(vector signed long long __a,vector signed long long __b)12161*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector signed long long __a,
12162*67e74705SXin Li vector signed long long __b) {
12163*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, __b);
12164*67e74705SXin Li }
12165*67e74705SXin Li
vec_all_eq(vector long long __a,vector bool long long __b)12166*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector long long __a,
12167*67e74705SXin Li vector bool long long __b) {
12168*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_LT, __a, (vector long long)__b);
12169*67e74705SXin Li }
12170*67e74705SXin Li
vec_all_eq(vector unsigned long long __a,vector unsigned long long __b)12171*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
12172*67e74705SXin Li vector unsigned long long __b) {
12173*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
12174*67e74705SXin Li (vector long long)__b);
12175*67e74705SXin Li }
12176*67e74705SXin Li
vec_all_eq(vector unsigned long long __a,vector bool long long __b)12177*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector unsigned long long __a,
12178*67e74705SXin Li vector bool long long __b) {
12179*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
12180*67e74705SXin Li (vector long long)__b);
12181*67e74705SXin Li }
12182*67e74705SXin Li
vec_all_eq(vector bool long long __a,vector long long __b)12183*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
12184*67e74705SXin Li vector long long __b) {
12185*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
12186*67e74705SXin Li (vector long long)__b);
12187*67e74705SXin Li }
12188*67e74705SXin Li
vec_all_eq(vector bool long long __a,vector unsigned long long __b)12189*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
12190*67e74705SXin Li vector unsigned long long __b) {
12191*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
12192*67e74705SXin Li (vector long long)__b);
12193*67e74705SXin Li }
12194*67e74705SXin Li
vec_all_eq(vector bool long long __a,vector bool long long __b)12195*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector bool long long __a,
12196*67e74705SXin Li vector bool long long __b) {
12197*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_LT, (vector long long)__a,
12198*67e74705SXin Li (vector long long)__b);
12199*67e74705SXin Li }
12200*67e74705SXin Li #endif
12201*67e74705SXin Li
vec_all_eq(vector float __a,vector float __b)12202*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector float __a,
12203*67e74705SXin Li vector float __b) {
12204*67e74705SXin Li #ifdef __VSX__
12205*67e74705SXin Li return __builtin_vsx_xvcmpeqsp_p(__CR6_LT, __a, __b);
12206*67e74705SXin Li #else
12207*67e74705SXin Li return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __b);
12208*67e74705SXin Li #endif
12209*67e74705SXin Li }
12210*67e74705SXin Li
12211*67e74705SXin Li #ifdef __VSX__
vec_all_eq(vector double __a,vector double __b)12212*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_eq(vector double __a,
12213*67e74705SXin Li vector double __b) {
12214*67e74705SXin Li return __builtin_vsx_xvcmpeqdp_p(__CR6_LT, __a, __b);
12215*67e74705SXin Li }
12216*67e74705SXin Li #endif
12217*67e74705SXin Li
12218*67e74705SXin Li /* vec_all_ge */
12219*67e74705SXin Li
vec_all_ge(vector signed char __a,vector signed char __b)12220*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
12221*67e74705SXin Li vector signed char __b) {
12222*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, __a);
12223*67e74705SXin Li }
12224*67e74705SXin Li
vec_all_ge(vector signed char __a,vector bool char __b)12225*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed char __a,
12226*67e74705SXin Li vector bool char __b) {
12227*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__b, __a);
12228*67e74705SXin Li }
12229*67e74705SXin Li
vec_all_ge(vector unsigned char __a,vector unsigned char __b)12230*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
12231*67e74705SXin Li vector unsigned char __b) {
12232*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, __a);
12233*67e74705SXin Li }
12234*67e74705SXin Li
vec_all_ge(vector unsigned char __a,vector bool char __b)12235*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned char __a,
12236*67e74705SXin Li vector bool char __b) {
12237*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, __a);
12238*67e74705SXin Li }
12239*67e74705SXin Li
vec_all_ge(vector bool char __a,vector signed char __b)12240*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
12241*67e74705SXin Li vector signed char __b) {
12242*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b,
12243*67e74705SXin Li (vector unsigned char)__a);
12244*67e74705SXin Li }
12245*67e74705SXin Li
vec_all_ge(vector bool char __a,vector unsigned char __b)12246*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
12247*67e74705SXin Li vector unsigned char __b) {
12248*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, (vector unsigned char)__a);
12249*67e74705SXin Li }
12250*67e74705SXin Li
vec_all_ge(vector bool char __a,vector bool char __b)12251*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool char __a,
12252*67e74705SXin Li vector bool char __b) {
12253*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b,
12254*67e74705SXin Li (vector unsigned char)__a);
12255*67e74705SXin Li }
12256*67e74705SXin Li
vec_all_ge(vector short __a,vector short __b)12257*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
12258*67e74705SXin Li vector short __b) {
12259*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, __a);
12260*67e74705SXin Li }
12261*67e74705SXin Li
vec_all_ge(vector short __a,vector bool short __b)12262*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector short __a,
12263*67e74705SXin Li vector bool short __b) {
12264*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector short)__b, __a);
12265*67e74705SXin Li }
12266*67e74705SXin Li
vec_all_ge(vector unsigned short __a,vector unsigned short __b)12267*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
12268*67e74705SXin Li vector unsigned short __b) {
12269*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, __a);
12270*67e74705SXin Li }
12271*67e74705SXin Li
vec_all_ge(vector unsigned short __a,vector bool short __b)12272*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned short __a,
12273*67e74705SXin Li vector bool short __b) {
12274*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
12275*67e74705SXin Li __a);
12276*67e74705SXin Li }
12277*67e74705SXin Li
vec_all_ge(vector bool short __a,vector short __b)12278*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
12279*67e74705SXin Li vector short __b) {
12280*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
12281*67e74705SXin Li (vector unsigned short)__a);
12282*67e74705SXin Li }
12283*67e74705SXin Li
vec_all_ge(vector bool short __a,vector unsigned short __b)12284*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
12285*67e74705SXin Li vector unsigned short __b) {
12286*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b,
12287*67e74705SXin Li (vector unsigned short)__a);
12288*67e74705SXin Li }
12289*67e74705SXin Li
vec_all_ge(vector bool short __a,vector bool short __b)12290*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool short __a,
12291*67e74705SXin Li vector bool short __b) {
12292*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b,
12293*67e74705SXin Li (vector unsigned short)__a);
12294*67e74705SXin Li }
12295*67e74705SXin Li
vec_all_ge(vector int __a,vector int __b)12296*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a, vector int __b) {
12297*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, __a);
12298*67e74705SXin Li }
12299*67e74705SXin Li
vec_all_ge(vector int __a,vector bool int __b)12300*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector int __a,
12301*67e74705SXin Li vector bool int __b) {
12302*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector int)__b, __a);
12303*67e74705SXin Li }
12304*67e74705SXin Li
vec_all_ge(vector unsigned int __a,vector unsigned int __b)12305*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
12306*67e74705SXin Li vector unsigned int __b) {
12307*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, __a);
12308*67e74705SXin Li }
12309*67e74705SXin Li
vec_all_ge(vector unsigned int __a,vector bool int __b)12310*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned int __a,
12311*67e74705SXin Li vector bool int __b) {
12312*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, __a);
12313*67e74705SXin Li }
12314*67e74705SXin Li
vec_all_ge(vector bool int __a,vector int __b)12315*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
12316*67e74705SXin Li vector int __b) {
12317*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b,
12318*67e74705SXin Li (vector unsigned int)__a);
12319*67e74705SXin Li }
12320*67e74705SXin Li
vec_all_ge(vector bool int __a,vector unsigned int __b)12321*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
12322*67e74705SXin Li vector unsigned int __b) {
12323*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, (vector unsigned int)__a);
12324*67e74705SXin Li }
12325*67e74705SXin Li
vec_all_ge(vector bool int __a,vector bool int __b)12326*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool int __a,
12327*67e74705SXin Li vector bool int __b) {
12328*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b,
12329*67e74705SXin Li (vector unsigned int)__a);
12330*67e74705SXin Li }
12331*67e74705SXin Li
12332*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_all_ge(vector signed long long __a,vector signed long long __b)12333*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
12334*67e74705SXin Li vector signed long long __b) {
12335*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __b, __a);
12336*67e74705SXin Li }
vec_all_ge(vector signed long long __a,vector bool long long __b)12337*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector signed long long __a,
12338*67e74705SXin Li vector bool long long __b) {
12339*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, (vector signed long long)__b,
12340*67e74705SXin Li __a);
12341*67e74705SXin Li }
12342*67e74705SXin Li
vec_all_ge(vector unsigned long long __a,vector unsigned long long __b)12343*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
12344*67e74705SXin Li vector unsigned long long __b) {
12345*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b, __a);
12346*67e74705SXin Li }
12347*67e74705SXin Li
vec_all_ge(vector unsigned long long __a,vector bool long long __b)12348*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector unsigned long long __a,
12349*67e74705SXin Li vector bool long long __b) {
12350*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
12351*67e74705SXin Li __a);
12352*67e74705SXin Li }
12353*67e74705SXin Li
vec_all_ge(vector bool long long __a,vector signed long long __b)12354*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
12355*67e74705SXin Li vector signed long long __b) {
12356*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
12357*67e74705SXin Li (vector unsigned long long)__a);
12358*67e74705SXin Li }
12359*67e74705SXin Li
vec_all_ge(vector bool long long __a,vector unsigned long long __b)12360*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
12361*67e74705SXin Li vector unsigned long long __b) {
12362*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __b,
12363*67e74705SXin Li (vector unsigned long long)__a);
12364*67e74705SXin Li }
12365*67e74705SXin Li
vec_all_ge(vector bool long long __a,vector bool long long __b)12366*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector bool long long __a,
12367*67e74705SXin Li vector bool long long __b) {
12368*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__b,
12369*67e74705SXin Li (vector unsigned long long)__a);
12370*67e74705SXin Li }
12371*67e74705SXin Li #endif
12372*67e74705SXin Li
vec_all_ge(vector float __a,vector float __b)12373*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector float __a,
12374*67e74705SXin Li vector float __b) {
12375*67e74705SXin Li #ifdef __VSX__
12376*67e74705SXin Li return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __a, __b);
12377*67e74705SXin Li #else
12378*67e74705SXin Li return __builtin_altivec_vcmpgefp_p(__CR6_LT, __a, __b);
12379*67e74705SXin Li #endif
12380*67e74705SXin Li }
12381*67e74705SXin Li
12382*67e74705SXin Li #ifdef __VSX__
vec_all_ge(vector double __a,vector double __b)12383*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ge(vector double __a,
12384*67e74705SXin Li vector double __b) {
12385*67e74705SXin Li return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __a, __b);
12386*67e74705SXin Li }
12387*67e74705SXin Li #endif
12388*67e74705SXin Li
12389*67e74705SXin Li /* vec_all_gt */
12390*67e74705SXin Li
vec_all_gt(vector signed char __a,vector signed char __b)12391*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
12392*67e74705SXin Li vector signed char __b) {
12393*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, __b);
12394*67e74705SXin Li }
12395*67e74705SXin Li
vec_all_gt(vector signed char __a,vector bool char __b)12396*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed char __a,
12397*67e74705SXin Li vector bool char __b) {
12398*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, (vector signed char)__b);
12399*67e74705SXin Li }
12400*67e74705SXin Li
vec_all_gt(vector unsigned char __a,vector unsigned char __b)12401*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
12402*67e74705SXin Li vector unsigned char __b) {
12403*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, __b);
12404*67e74705SXin Li }
12405*67e74705SXin Li
vec_all_gt(vector unsigned char __a,vector bool char __b)12406*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned char __a,
12407*67e74705SXin Li vector bool char __b) {
12408*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, (vector unsigned char)__b);
12409*67e74705SXin Li }
12410*67e74705SXin Li
vec_all_gt(vector bool char __a,vector signed char __b)12411*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
12412*67e74705SXin Li vector signed char __b) {
12413*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a,
12414*67e74705SXin Li (vector unsigned char)__b);
12415*67e74705SXin Li }
12416*67e74705SXin Li
vec_all_gt(vector bool char __a,vector unsigned char __b)12417*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
12418*67e74705SXin Li vector unsigned char __b) {
12419*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, __b);
12420*67e74705SXin Li }
12421*67e74705SXin Li
vec_all_gt(vector bool char __a,vector bool char __b)12422*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool char __a,
12423*67e74705SXin Li vector bool char __b) {
12424*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a,
12425*67e74705SXin Li (vector unsigned char)__b);
12426*67e74705SXin Li }
12427*67e74705SXin Li
vec_all_gt(vector short __a,vector short __b)12428*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
12429*67e74705SXin Li vector short __b) {
12430*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, __b);
12431*67e74705SXin Li }
12432*67e74705SXin Li
vec_all_gt(vector short __a,vector bool short __b)12433*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector short __a,
12434*67e74705SXin Li vector bool short __b) {
12435*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, (vector short)__b);
12436*67e74705SXin Li }
12437*67e74705SXin Li
vec_all_gt(vector unsigned short __a,vector unsigned short __b)12438*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
12439*67e74705SXin Li vector unsigned short __b) {
12440*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, __b);
12441*67e74705SXin Li }
12442*67e74705SXin Li
vec_all_gt(vector unsigned short __a,vector bool short __b)12443*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned short __a,
12444*67e74705SXin Li vector bool short __b) {
12445*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a,
12446*67e74705SXin Li (vector unsigned short)__b);
12447*67e74705SXin Li }
12448*67e74705SXin Li
vec_all_gt(vector bool short __a,vector short __b)12449*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
12450*67e74705SXin Li vector short __b) {
12451*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
12452*67e74705SXin Li (vector unsigned short)__b);
12453*67e74705SXin Li }
12454*67e74705SXin Li
vec_all_gt(vector bool short __a,vector unsigned short __b)12455*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
12456*67e74705SXin Li vector unsigned short __b) {
12457*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
12458*67e74705SXin Li __b);
12459*67e74705SXin Li }
12460*67e74705SXin Li
vec_all_gt(vector bool short __a,vector bool short __b)12461*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool short __a,
12462*67e74705SXin Li vector bool short __b) {
12463*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a,
12464*67e74705SXin Li (vector unsigned short)__b);
12465*67e74705SXin Li }
12466*67e74705SXin Li
vec_all_gt(vector int __a,vector int __b)12467*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a, vector int __b) {
12468*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, __b);
12469*67e74705SXin Li }
12470*67e74705SXin Li
vec_all_gt(vector int __a,vector bool int __b)12471*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector int __a,
12472*67e74705SXin Li vector bool int __b) {
12473*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, (vector int)__b);
12474*67e74705SXin Li }
12475*67e74705SXin Li
vec_all_gt(vector unsigned int __a,vector unsigned int __b)12476*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
12477*67e74705SXin Li vector unsigned int __b) {
12478*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, __b);
12479*67e74705SXin Li }
12480*67e74705SXin Li
vec_all_gt(vector unsigned int __a,vector bool int __b)12481*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned int __a,
12482*67e74705SXin Li vector bool int __b) {
12483*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, (vector unsigned int)__b);
12484*67e74705SXin Li }
12485*67e74705SXin Li
vec_all_gt(vector bool int __a,vector int __b)12486*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
12487*67e74705SXin Li vector int __b) {
12488*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a,
12489*67e74705SXin Li (vector unsigned int)__b);
12490*67e74705SXin Li }
12491*67e74705SXin Li
vec_all_gt(vector bool int __a,vector unsigned int __b)12492*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
12493*67e74705SXin Li vector unsigned int __b) {
12494*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, __b);
12495*67e74705SXin Li }
12496*67e74705SXin Li
vec_all_gt(vector bool int __a,vector bool int __b)12497*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool int __a,
12498*67e74705SXin Li vector bool int __b) {
12499*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a,
12500*67e74705SXin Li (vector unsigned int)__b);
12501*67e74705SXin Li }
12502*67e74705SXin Li
12503*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_all_gt(vector signed long long __a,vector signed long long __b)12504*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
12505*67e74705SXin Li vector signed long long __b) {
12506*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a, __b);
12507*67e74705SXin Li }
vec_all_gt(vector signed long long __a,vector bool long long __b)12508*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector signed long long __a,
12509*67e74705SXin Li vector bool long long __b) {
12510*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __a,
12511*67e74705SXin Li (vector signed long long)__b);
12512*67e74705SXin Li }
12513*67e74705SXin Li
vec_all_gt(vector unsigned long long __a,vector unsigned long long __b)12514*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
12515*67e74705SXin Li vector unsigned long long __b) {
12516*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a, __b);
12517*67e74705SXin Li }
12518*67e74705SXin Li
vec_all_gt(vector unsigned long long __a,vector bool long long __b)12519*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector unsigned long long __a,
12520*67e74705SXin Li vector bool long long __b) {
12521*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT, __a,
12522*67e74705SXin Li (vector unsigned long long)__b);
12523*67e74705SXin Li }
12524*67e74705SXin Li
vec_all_gt(vector bool long long __a,vector signed long long __b)12525*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
12526*67e74705SXin Li vector signed long long __b) {
12527*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
12528*67e74705SXin Li (vector unsigned long long)__b);
12529*67e74705SXin Li }
12530*67e74705SXin Li
vec_all_gt(vector bool long long __a,vector unsigned long long __b)12531*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
12532*67e74705SXin Li vector unsigned long long __b) {
12533*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
12534*67e74705SXin Li __b);
12535*67e74705SXin Li }
12536*67e74705SXin Li
vec_all_gt(vector bool long long __a,vector bool long long __b)12537*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector bool long long __a,
12538*67e74705SXin Li vector bool long long __b) {
12539*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__a,
12540*67e74705SXin Li (vector unsigned long long)__b);
12541*67e74705SXin Li }
12542*67e74705SXin Li #endif
12543*67e74705SXin Li
vec_all_gt(vector float __a,vector float __b)12544*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector float __a,
12545*67e74705SXin Li vector float __b) {
12546*67e74705SXin Li #ifdef __VSX__
12547*67e74705SXin Li return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __a, __b);
12548*67e74705SXin Li #else
12549*67e74705SXin Li return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __a, __b);
12550*67e74705SXin Li #endif
12551*67e74705SXin Li }
12552*67e74705SXin Li
12553*67e74705SXin Li #ifdef __VSX__
vec_all_gt(vector double __a,vector double __b)12554*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_gt(vector double __a,
12555*67e74705SXin Li vector double __b) {
12556*67e74705SXin Li return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __a, __b);
12557*67e74705SXin Li }
12558*67e74705SXin Li #endif
12559*67e74705SXin Li
12560*67e74705SXin Li /* vec_all_in */
12561*67e74705SXin Li
12562*67e74705SXin Li static __inline__ int __attribute__((__always_inline__))
vec_all_in(vector float __a,vector float __b)12563*67e74705SXin Li vec_all_in(vector float __a, vector float __b) {
12564*67e74705SXin Li return __builtin_altivec_vcmpbfp_p(__CR6_EQ, __a, __b);
12565*67e74705SXin Li }
12566*67e74705SXin Li
12567*67e74705SXin Li /* vec_all_le */
12568*67e74705SXin Li
vec_all_le(vector signed char __a,vector signed char __b)12569*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
12570*67e74705SXin Li vector signed char __b) {
12571*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, __b);
12572*67e74705SXin Li }
12573*67e74705SXin Li
vec_all_le(vector signed char __a,vector bool char __b)12574*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector signed char __a,
12575*67e74705SXin Li vector bool char __b) {
12576*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, (vector signed char)__b);
12577*67e74705SXin Li }
12578*67e74705SXin Li
vec_all_le(vector unsigned char __a,vector unsigned char __b)12579*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
12580*67e74705SXin Li vector unsigned char __b) {
12581*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, __b);
12582*67e74705SXin Li }
12583*67e74705SXin Li
vec_all_le(vector unsigned char __a,vector bool char __b)12584*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned char __a,
12585*67e74705SXin Li vector bool char __b) {
12586*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, (vector unsigned char)__b);
12587*67e74705SXin Li }
12588*67e74705SXin Li
vec_all_le(vector bool char __a,vector signed char __b)12589*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
12590*67e74705SXin Li vector signed char __b) {
12591*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a,
12592*67e74705SXin Li (vector unsigned char)__b);
12593*67e74705SXin Li }
12594*67e74705SXin Li
vec_all_le(vector bool char __a,vector unsigned char __b)12595*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
12596*67e74705SXin Li vector unsigned char __b) {
12597*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, __b);
12598*67e74705SXin Li }
12599*67e74705SXin Li
vec_all_le(vector bool char __a,vector bool char __b)12600*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector bool char __a,
12601*67e74705SXin Li vector bool char __b) {
12602*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a,
12603*67e74705SXin Li (vector unsigned char)__b);
12604*67e74705SXin Li }
12605*67e74705SXin Li
vec_all_le(vector short __a,vector short __b)12606*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
12607*67e74705SXin Li vector short __b) {
12608*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, __b);
12609*67e74705SXin Li }
12610*67e74705SXin Li
vec_all_le(vector short __a,vector bool short __b)12611*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector short __a,
12612*67e74705SXin Li vector bool short __b) {
12613*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, (vector short)__b);
12614*67e74705SXin Li }
12615*67e74705SXin Li
vec_all_le(vector unsigned short __a,vector unsigned short __b)12616*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
12617*67e74705SXin Li vector unsigned short __b) {
12618*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, __b);
12619*67e74705SXin Li }
12620*67e74705SXin Li
vec_all_le(vector unsigned short __a,vector bool short __b)12621*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned short __a,
12622*67e74705SXin Li vector bool short __b) {
12623*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a,
12624*67e74705SXin Li (vector unsigned short)__b);
12625*67e74705SXin Li }
12626*67e74705SXin Li
vec_all_le(vector bool short __a,vector short __b)12627*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
12628*67e74705SXin Li vector short __b) {
12629*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
12630*67e74705SXin Li (vector unsigned short)__b);
12631*67e74705SXin Li }
12632*67e74705SXin Li
vec_all_le(vector bool short __a,vector unsigned short __b)12633*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
12634*67e74705SXin Li vector unsigned short __b) {
12635*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
12636*67e74705SXin Li __b);
12637*67e74705SXin Li }
12638*67e74705SXin Li
vec_all_le(vector bool short __a,vector bool short __b)12639*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector bool short __a,
12640*67e74705SXin Li vector bool short __b) {
12641*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a,
12642*67e74705SXin Li (vector unsigned short)__b);
12643*67e74705SXin Li }
12644*67e74705SXin Li
vec_all_le(vector int __a,vector int __b)12645*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a, vector int __b) {
12646*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, __b);
12647*67e74705SXin Li }
12648*67e74705SXin Li
vec_all_le(vector int __a,vector bool int __b)12649*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector int __a,
12650*67e74705SXin Li vector bool int __b) {
12651*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, (vector int)__b);
12652*67e74705SXin Li }
12653*67e74705SXin Li
vec_all_le(vector unsigned int __a,vector unsigned int __b)12654*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
12655*67e74705SXin Li vector unsigned int __b) {
12656*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, __b);
12657*67e74705SXin Li }
12658*67e74705SXin Li
vec_all_le(vector unsigned int __a,vector bool int __b)12659*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned int __a,
12660*67e74705SXin Li vector bool int __b) {
12661*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, (vector unsigned int)__b);
12662*67e74705SXin Li }
12663*67e74705SXin Li
vec_all_le(vector bool int __a,vector int __b)12664*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
12665*67e74705SXin Li vector int __b) {
12666*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a,
12667*67e74705SXin Li (vector unsigned int)__b);
12668*67e74705SXin Li }
12669*67e74705SXin Li
vec_all_le(vector bool int __a,vector unsigned int __b)12670*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
12671*67e74705SXin Li vector unsigned int __b) {
12672*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, __b);
12673*67e74705SXin Li }
12674*67e74705SXin Li
vec_all_le(vector bool int __a,vector bool int __b)12675*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector bool int __a,
12676*67e74705SXin Li vector bool int __b) {
12677*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a,
12678*67e74705SXin Li (vector unsigned int)__b);
12679*67e74705SXin Li }
12680*67e74705SXin Li
12681*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_all_le(vector signed long long __a,vector signed long long __b)12682*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
12683*67e74705SXin Li vector signed long long __b) {
12684*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a, __b);
12685*67e74705SXin Li }
12686*67e74705SXin Li
vec_all_le(vector unsigned long long __a,vector unsigned long long __b)12687*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
12688*67e74705SXin Li vector unsigned long long __b) {
12689*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a, __b);
12690*67e74705SXin Li }
12691*67e74705SXin Li
vec_all_le(vector signed long long __a,vector bool long long __b)12692*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector signed long long __a,
12693*67e74705SXin Li vector bool long long __b) {
12694*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_EQ, __a,
12695*67e74705SXin Li (vector signed long long)__b);
12696*67e74705SXin Li }
12697*67e74705SXin Li
vec_all_le(vector unsigned long long __a,vector bool long long __b)12698*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector unsigned long long __a,
12699*67e74705SXin Li vector bool long long __b) {
12700*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ, __a,
12701*67e74705SXin Li (vector unsigned long long)__b);
12702*67e74705SXin Li }
12703*67e74705SXin Li
vec_all_le(vector bool long long __a,vector signed long long __b)12704*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
12705*67e74705SXin Li vector signed long long __b) {
12706*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
12707*67e74705SXin Li (vector unsigned long long)__b);
12708*67e74705SXin Li }
12709*67e74705SXin Li
vec_all_le(vector bool long long __a,vector unsigned long long __b)12710*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
12711*67e74705SXin Li vector unsigned long long __b) {
12712*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
12713*67e74705SXin Li __b);
12714*67e74705SXin Li }
12715*67e74705SXin Li
vec_all_le(vector bool long long __a,vector bool long long __b)12716*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector bool long long __a,
12717*67e74705SXin Li vector bool long long __b) {
12718*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ, (vector unsigned long long)__a,
12719*67e74705SXin Li (vector unsigned long long)__b);
12720*67e74705SXin Li }
12721*67e74705SXin Li #endif
12722*67e74705SXin Li
vec_all_le(vector float __a,vector float __b)12723*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector float __a,
12724*67e74705SXin Li vector float __b) {
12725*67e74705SXin Li #ifdef __VSX__
12726*67e74705SXin Li return __builtin_vsx_xvcmpgesp_p(__CR6_LT, __b, __a);
12727*67e74705SXin Li #else
12728*67e74705SXin Li return __builtin_altivec_vcmpgefp_p(__CR6_LT, __b, __a);
12729*67e74705SXin Li #endif
12730*67e74705SXin Li }
12731*67e74705SXin Li
12732*67e74705SXin Li #ifdef __VSX__
vec_all_le(vector double __a,vector double __b)12733*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_le(vector double __a,
12734*67e74705SXin Li vector double __b) {
12735*67e74705SXin Li return __builtin_vsx_xvcmpgedp_p(__CR6_LT, __b, __a);
12736*67e74705SXin Li }
12737*67e74705SXin Li #endif
12738*67e74705SXin Li
12739*67e74705SXin Li /* vec_all_lt */
12740*67e74705SXin Li
vec_all_lt(vector signed char __a,vector signed char __b)12741*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
12742*67e74705SXin Li vector signed char __b) {
12743*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, __a);
12744*67e74705SXin Li }
12745*67e74705SXin Li
vec_all_lt(vector signed char __a,vector bool char __b)12746*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed char __a,
12747*67e74705SXin Li vector bool char __b) {
12748*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__b, __a);
12749*67e74705SXin Li }
12750*67e74705SXin Li
vec_all_lt(vector unsigned char __a,vector unsigned char __b)12751*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
12752*67e74705SXin Li vector unsigned char __b) {
12753*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, __a);
12754*67e74705SXin Li }
12755*67e74705SXin Li
vec_all_lt(vector unsigned char __a,vector bool char __b)12756*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned char __a,
12757*67e74705SXin Li vector bool char __b) {
12758*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, __a);
12759*67e74705SXin Li }
12760*67e74705SXin Li
vec_all_lt(vector bool char __a,vector signed char __b)12761*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
12762*67e74705SXin Li vector signed char __b) {
12763*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b,
12764*67e74705SXin Li (vector unsigned char)__a);
12765*67e74705SXin Li }
12766*67e74705SXin Li
vec_all_lt(vector bool char __a,vector unsigned char __b)12767*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
12768*67e74705SXin Li vector unsigned char __b) {
12769*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, (vector unsigned char)__a);
12770*67e74705SXin Li }
12771*67e74705SXin Li
vec_all_lt(vector bool char __a,vector bool char __b)12772*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool char __a,
12773*67e74705SXin Li vector bool char __b) {
12774*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b,
12775*67e74705SXin Li (vector unsigned char)__a);
12776*67e74705SXin Li }
12777*67e74705SXin Li
vec_all_lt(vector short __a,vector short __b)12778*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
12779*67e74705SXin Li vector short __b) {
12780*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, __a);
12781*67e74705SXin Li }
12782*67e74705SXin Li
vec_all_lt(vector short __a,vector bool short __b)12783*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector short __a,
12784*67e74705SXin Li vector bool short __b) {
12785*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector short)__b, __a);
12786*67e74705SXin Li }
12787*67e74705SXin Li
vec_all_lt(vector unsigned short __a,vector unsigned short __b)12788*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
12789*67e74705SXin Li vector unsigned short __b) {
12790*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, __a);
12791*67e74705SXin Li }
12792*67e74705SXin Li
vec_all_lt(vector unsigned short __a,vector bool short __b)12793*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned short __a,
12794*67e74705SXin Li vector bool short __b) {
12795*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
12796*67e74705SXin Li __a);
12797*67e74705SXin Li }
12798*67e74705SXin Li
vec_all_lt(vector bool short __a,vector short __b)12799*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
12800*67e74705SXin Li vector short __b) {
12801*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
12802*67e74705SXin Li (vector unsigned short)__a);
12803*67e74705SXin Li }
12804*67e74705SXin Li
vec_all_lt(vector bool short __a,vector unsigned short __b)12805*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
12806*67e74705SXin Li vector unsigned short __b) {
12807*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b,
12808*67e74705SXin Li (vector unsigned short)__a);
12809*67e74705SXin Li }
12810*67e74705SXin Li
vec_all_lt(vector bool short __a,vector bool short __b)12811*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool short __a,
12812*67e74705SXin Li vector bool short __b) {
12813*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b,
12814*67e74705SXin Li (vector unsigned short)__a);
12815*67e74705SXin Li }
12816*67e74705SXin Li
vec_all_lt(vector int __a,vector int __b)12817*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a, vector int __b) {
12818*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, __a);
12819*67e74705SXin Li }
12820*67e74705SXin Li
vec_all_lt(vector int __a,vector bool int __b)12821*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector int __a,
12822*67e74705SXin Li vector bool int __b) {
12823*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector int)__b, __a);
12824*67e74705SXin Li }
12825*67e74705SXin Li
vec_all_lt(vector unsigned int __a,vector unsigned int __b)12826*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
12827*67e74705SXin Li vector unsigned int __b) {
12828*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, __a);
12829*67e74705SXin Li }
12830*67e74705SXin Li
vec_all_lt(vector unsigned int __a,vector bool int __b)12831*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned int __a,
12832*67e74705SXin Li vector bool int __b) {
12833*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, __a);
12834*67e74705SXin Li }
12835*67e74705SXin Li
vec_all_lt(vector bool int __a,vector int __b)12836*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
12837*67e74705SXin Li vector int __b) {
12838*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b,
12839*67e74705SXin Li (vector unsigned int)__a);
12840*67e74705SXin Li }
12841*67e74705SXin Li
vec_all_lt(vector bool int __a,vector unsigned int __b)12842*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
12843*67e74705SXin Li vector unsigned int __b) {
12844*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, (vector unsigned int)__a);
12845*67e74705SXin Li }
12846*67e74705SXin Li
vec_all_lt(vector bool int __a,vector bool int __b)12847*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool int __a,
12848*67e74705SXin Li vector bool int __b) {
12849*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b,
12850*67e74705SXin Li (vector unsigned int)__a);
12851*67e74705SXin Li }
12852*67e74705SXin Li
12853*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_all_lt(vector signed long long __a,vector signed long long __b)12854*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
12855*67e74705SXin Li vector signed long long __b) {
12856*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_LT, __b, __a);
12857*67e74705SXin Li }
12858*67e74705SXin Li
vec_all_lt(vector unsigned long long __a,vector unsigned long long __b)12859*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
12860*67e74705SXin Li vector unsigned long long __b) {
12861*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b, __a);
12862*67e74705SXin Li }
12863*67e74705SXin Li
vec_all_lt(vector signed long long __a,vector bool long long __b)12864*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector signed long long __a,
12865*67e74705SXin Li vector bool long long __b) {
12866*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_LT, (vector signed long long)__b,
12867*67e74705SXin Li __a);
12868*67e74705SXin Li }
12869*67e74705SXin Li
vec_all_lt(vector unsigned long long __a,vector bool long long __b)12870*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector unsigned long long __a,
12871*67e74705SXin Li vector bool long long __b) {
12872*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
12873*67e74705SXin Li __a);
12874*67e74705SXin Li }
12875*67e74705SXin Li
vec_all_lt(vector bool long long __a,vector signed long long __b)12876*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
12877*67e74705SXin Li vector signed long long __b) {
12878*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
12879*67e74705SXin Li (vector unsigned long long)__a);
12880*67e74705SXin Li }
12881*67e74705SXin Li
vec_all_lt(vector bool long long __a,vector unsigned long long __b)12882*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
12883*67e74705SXin Li vector unsigned long long __b) {
12884*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT, __b,
12885*67e74705SXin Li (vector unsigned long long)__a);
12886*67e74705SXin Li }
12887*67e74705SXin Li
vec_all_lt(vector bool long long __a,vector bool long long __b)12888*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector bool long long __a,
12889*67e74705SXin Li vector bool long long __b) {
12890*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT, (vector unsigned long long)__b,
12891*67e74705SXin Li (vector unsigned long long)__a);
12892*67e74705SXin Li }
12893*67e74705SXin Li #endif
12894*67e74705SXin Li
vec_all_lt(vector float __a,vector float __b)12895*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector float __a,
12896*67e74705SXin Li vector float __b) {
12897*67e74705SXin Li #ifdef __VSX__
12898*67e74705SXin Li return __builtin_vsx_xvcmpgtsp_p(__CR6_LT, __b, __a);
12899*67e74705SXin Li #else
12900*67e74705SXin Li return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __b, __a);
12901*67e74705SXin Li #endif
12902*67e74705SXin Li }
12903*67e74705SXin Li
12904*67e74705SXin Li #ifdef __VSX__
vec_all_lt(vector double __a,vector double __b)12905*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_lt(vector double __a,
12906*67e74705SXin Li vector double __b) {
12907*67e74705SXin Li return __builtin_vsx_xvcmpgtdp_p(__CR6_LT, __b, __a);
12908*67e74705SXin Li }
12909*67e74705SXin Li #endif
12910*67e74705SXin Li
12911*67e74705SXin Li /* vec_all_nan */
12912*67e74705SXin Li
vec_all_nan(vector float __a)12913*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_nan(vector float __a) {
12914*67e74705SXin Li #ifdef __VSX__
12915*67e74705SXin Li return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ, __a, __a);
12916*67e74705SXin Li #else
12917*67e74705SXin Li return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __a);
12918*67e74705SXin Li #endif
12919*67e74705SXin Li }
12920*67e74705SXin Li
12921*67e74705SXin Li #ifdef __VSX__
vec_all_nan(vector double __a)12922*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_nan(vector double __a) {
12923*67e74705SXin Li return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __a);
12924*67e74705SXin Li }
12925*67e74705SXin Li #endif
12926*67e74705SXin Li
12927*67e74705SXin Li /* vec_all_ne */
12928*67e74705SXin Li
vec_all_ne(vector signed char __a,vector signed char __b)12929*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
12930*67e74705SXin Li vector signed char __b) {
12931*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
12932*67e74705SXin Li (vector char)__b);
12933*67e74705SXin Li }
12934*67e74705SXin Li
vec_all_ne(vector signed char __a,vector bool char __b)12935*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed char __a,
12936*67e74705SXin Li vector bool char __b) {
12937*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
12938*67e74705SXin Li (vector char)__b);
12939*67e74705SXin Li }
12940*67e74705SXin Li
vec_all_ne(vector unsigned char __a,vector unsigned char __b)12941*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
12942*67e74705SXin Li vector unsigned char __b) {
12943*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
12944*67e74705SXin Li (vector char)__b);
12945*67e74705SXin Li }
12946*67e74705SXin Li
vec_all_ne(vector unsigned char __a,vector bool char __b)12947*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned char __a,
12948*67e74705SXin Li vector bool char __b) {
12949*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
12950*67e74705SXin Li (vector char)__b);
12951*67e74705SXin Li }
12952*67e74705SXin Li
vec_all_ne(vector bool char __a,vector signed char __b)12953*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
12954*67e74705SXin Li vector signed char __b) {
12955*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
12956*67e74705SXin Li (vector char)__b);
12957*67e74705SXin Li }
12958*67e74705SXin Li
vec_all_ne(vector bool char __a,vector unsigned char __b)12959*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
12960*67e74705SXin Li vector unsigned char __b) {
12961*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
12962*67e74705SXin Li (vector char)__b);
12963*67e74705SXin Li }
12964*67e74705SXin Li
vec_all_ne(vector bool char __a,vector bool char __b)12965*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool char __a,
12966*67e74705SXin Li vector bool char __b) {
12967*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a,
12968*67e74705SXin Li (vector char)__b);
12969*67e74705SXin Li }
12970*67e74705SXin Li
vec_all_ne(vector short __a,vector short __b)12971*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
12972*67e74705SXin Li vector short __b) {
12973*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, __b);
12974*67e74705SXin Li }
12975*67e74705SXin Li
vec_all_ne(vector short __a,vector bool short __b)12976*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector short __a,
12977*67e74705SXin Li vector bool short __b) {
12978*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, (vector short)__b);
12979*67e74705SXin Li }
12980*67e74705SXin Li
vec_all_ne(vector unsigned short __a,vector unsigned short __b)12981*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
12982*67e74705SXin Li vector unsigned short __b) {
12983*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
12984*67e74705SXin Li (vector short)__b);
12985*67e74705SXin Li }
12986*67e74705SXin Li
vec_all_ne(vector unsigned short __a,vector bool short __b)12987*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned short __a,
12988*67e74705SXin Li vector bool short __b) {
12989*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
12990*67e74705SXin Li (vector short)__b);
12991*67e74705SXin Li }
12992*67e74705SXin Li
vec_all_ne(vector bool short __a,vector short __b)12993*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
12994*67e74705SXin Li vector short __b) {
12995*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
12996*67e74705SXin Li (vector short)__b);
12997*67e74705SXin Li }
12998*67e74705SXin Li
vec_all_ne(vector bool short __a,vector unsigned short __b)12999*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
13000*67e74705SXin Li vector unsigned short __b) {
13001*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
13002*67e74705SXin Li (vector short)__b);
13003*67e74705SXin Li }
13004*67e74705SXin Li
vec_all_ne(vector bool short __a,vector bool short __b)13005*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool short __a,
13006*67e74705SXin Li vector bool short __b) {
13007*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
13008*67e74705SXin Li (vector short)__b);
13009*67e74705SXin Li }
13010*67e74705SXin Li
vec_all_ne(vector pixel __a,vector pixel __b)13011*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector pixel __a,
13012*67e74705SXin Li vector pixel __b) {
13013*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a,
13014*67e74705SXin Li (vector short)__b);
13015*67e74705SXin Li }
13016*67e74705SXin Li
vec_all_ne(vector int __a,vector int __b)13017*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a, vector int __b) {
13018*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, __b);
13019*67e74705SXin Li }
13020*67e74705SXin Li
vec_all_ne(vector int __a,vector bool int __b)13021*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector int __a,
13022*67e74705SXin Li vector bool int __b) {
13023*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, (vector int)__b);
13024*67e74705SXin Li }
13025*67e74705SXin Li
vec_all_ne(vector unsigned int __a,vector unsigned int __b)13026*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
13027*67e74705SXin Li vector unsigned int __b) {
13028*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
13029*67e74705SXin Li (vector int)__b);
13030*67e74705SXin Li }
13031*67e74705SXin Li
vec_all_ne(vector unsigned int __a,vector bool int __b)13032*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned int __a,
13033*67e74705SXin Li vector bool int __b) {
13034*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
13035*67e74705SXin Li (vector int)__b);
13036*67e74705SXin Li }
13037*67e74705SXin Li
vec_all_ne(vector bool int __a,vector int __b)13038*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
13039*67e74705SXin Li vector int __b) {
13040*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
13041*67e74705SXin Li (vector int)__b);
13042*67e74705SXin Li }
13043*67e74705SXin Li
vec_all_ne(vector bool int __a,vector unsigned int __b)13044*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
13045*67e74705SXin Li vector unsigned int __b) {
13046*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
13047*67e74705SXin Li (vector int)__b);
13048*67e74705SXin Li }
13049*67e74705SXin Li
vec_all_ne(vector bool int __a,vector bool int __b)13050*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool int __a,
13051*67e74705SXin Li vector bool int __b) {
13052*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a,
13053*67e74705SXin Li (vector int)__b);
13054*67e74705SXin Li }
13055*67e74705SXin Li
13056*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_all_ne(vector signed long long __a,vector signed long long __b)13057*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
13058*67e74705SXin Li vector signed long long __b) {
13059*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a, __b);
13060*67e74705SXin Li }
13061*67e74705SXin Li
vec_all_ne(vector unsigned long long __a,vector unsigned long long __b)13062*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
13063*67e74705SXin Li vector unsigned long long __b) {
13064*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector long long)__a,
13065*67e74705SXin Li (vector long long)__b);
13066*67e74705SXin Li }
13067*67e74705SXin Li
vec_all_ne(vector signed long long __a,vector bool long long __b)13068*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector signed long long __a,
13069*67e74705SXin Li vector bool long long __b) {
13070*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_EQ, __a,
13071*67e74705SXin Li (vector signed long long)__b);
13072*67e74705SXin Li }
13073*67e74705SXin Li
vec_all_ne(vector unsigned long long __a,vector bool long long __b)13074*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector unsigned long long __a,
13075*67e74705SXin Li vector bool long long __b) {
13076*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
13077*67e74705SXin Li (vector signed long long)__b);
13078*67e74705SXin Li }
13079*67e74705SXin Li
vec_all_ne(vector bool long long __a,vector signed long long __b)13080*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
13081*67e74705SXin Li vector signed long long __b) {
13082*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
13083*67e74705SXin Li (vector signed long long)__b);
13084*67e74705SXin Li }
13085*67e74705SXin Li
vec_all_ne(vector bool long long __a,vector unsigned long long __b)13086*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
13087*67e74705SXin Li vector unsigned long long __b) {
13088*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
13089*67e74705SXin Li (vector signed long long)__b);
13090*67e74705SXin Li }
13091*67e74705SXin Li
vec_all_ne(vector bool long long __a,vector bool long long __b)13092*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector bool long long __a,
13093*67e74705SXin Li vector bool long long __b) {
13094*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_EQ, (vector signed long long)__a,
13095*67e74705SXin Li (vector signed long long)__b);
13096*67e74705SXin Li }
13097*67e74705SXin Li #endif
13098*67e74705SXin Li
vec_all_ne(vector float __a,vector float __b)13099*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector float __a,
13100*67e74705SXin Li vector float __b) {
13101*67e74705SXin Li #ifdef __VSX__
13102*67e74705SXin Li return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __b);
13103*67e74705SXin Li #else
13104*67e74705SXin Li return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __b);
13105*67e74705SXin Li #endif
13106*67e74705SXin Li }
13107*67e74705SXin Li
13108*67e74705SXin Li #ifdef __VSX__
vec_all_ne(vector double __a,vector double __b)13109*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ne(vector double __a,
13110*67e74705SXin Li vector double __b) {
13111*67e74705SXin Li return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ, __a, __b);
13112*67e74705SXin Li }
13113*67e74705SXin Li #endif
13114*67e74705SXin Li
13115*67e74705SXin Li /* vec_all_nge */
13116*67e74705SXin Li
vec_all_nge(vector float __a,vector float __b)13117*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_nge(vector float __a,
13118*67e74705SXin Li vector float __b) {
13119*67e74705SXin Li #ifdef __VSX__
13120*67e74705SXin Li return __builtin_vsx_xvcmpgesp_p(__CR6_EQ, __a, __b);
13121*67e74705SXin Li #else
13122*67e74705SXin Li return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __a, __b);
13123*67e74705SXin Li #endif
13124*67e74705SXin Li }
13125*67e74705SXin Li
13126*67e74705SXin Li #ifdef __VSX__
vec_all_nge(vector double __a,vector double __b)13127*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_nge(vector double __a,
13128*67e74705SXin Li vector double __b) {
13129*67e74705SXin Li return __builtin_vsx_xvcmpgedp_p(__CR6_EQ, __a, __b);
13130*67e74705SXin Li }
13131*67e74705SXin Li #endif
13132*67e74705SXin Li
13133*67e74705SXin Li /* vec_all_ngt */
13134*67e74705SXin Li
vec_all_ngt(vector float __a,vector float __b)13135*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ngt(vector float __a,
13136*67e74705SXin Li vector float __b) {
13137*67e74705SXin Li #ifdef __VSX__
13138*67e74705SXin Li return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ, __a, __b);
13139*67e74705SXin Li #else
13140*67e74705SXin Li return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __a, __b);
13141*67e74705SXin Li #endif
13142*67e74705SXin Li }
13143*67e74705SXin Li
13144*67e74705SXin Li #ifdef __VSX__
vec_all_ngt(vector double __a,vector double __b)13145*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_all_ngt(vector double __a,
13146*67e74705SXin Li vector double __b) {
13147*67e74705SXin Li return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ, __a, __b);
13148*67e74705SXin Li }
13149*67e74705SXin Li #endif
13150*67e74705SXin Li
13151*67e74705SXin Li /* vec_all_nle */
13152*67e74705SXin Li
13153*67e74705SXin Li static __inline__ int __attribute__((__always_inline__))
vec_all_nle(vector float __a,vector float __b)13154*67e74705SXin Li vec_all_nle(vector float __a, vector float __b) {
13155*67e74705SXin Li return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __b, __a);
13156*67e74705SXin Li }
13157*67e74705SXin Li
13158*67e74705SXin Li /* vec_all_nlt */
13159*67e74705SXin Li
13160*67e74705SXin Li static __inline__ int __attribute__((__always_inline__))
vec_all_nlt(vector float __a,vector float __b)13161*67e74705SXin Li vec_all_nlt(vector float __a, vector float __b) {
13162*67e74705SXin Li return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __b, __a);
13163*67e74705SXin Li }
13164*67e74705SXin Li
13165*67e74705SXin Li /* vec_all_numeric */
13166*67e74705SXin Li
13167*67e74705SXin Li static __inline__ int __attribute__((__always_inline__))
vec_all_numeric(vector float __a)13168*67e74705SXin Li vec_all_numeric(vector float __a) {
13169*67e74705SXin Li return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __a);
13170*67e74705SXin Li }
13171*67e74705SXin Li
13172*67e74705SXin Li /* vec_any_eq */
13173*67e74705SXin Li
vec_any_eq(vector signed char __a,vector signed char __b)13174*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
13175*67e74705SXin Li vector signed char __b) {
13176*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
13177*67e74705SXin Li (vector char)__b);
13178*67e74705SXin Li }
13179*67e74705SXin Li
vec_any_eq(vector signed char __a,vector bool char __b)13180*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed char __a,
13181*67e74705SXin Li vector bool char __b) {
13182*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
13183*67e74705SXin Li (vector char)__b);
13184*67e74705SXin Li }
13185*67e74705SXin Li
vec_any_eq(vector unsigned char __a,vector unsigned char __b)13186*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
13187*67e74705SXin Li vector unsigned char __b) {
13188*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
13189*67e74705SXin Li (vector char)__b);
13190*67e74705SXin Li }
13191*67e74705SXin Li
vec_any_eq(vector unsigned char __a,vector bool char __b)13192*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned char __a,
13193*67e74705SXin Li vector bool char __b) {
13194*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
13195*67e74705SXin Li (vector char)__b);
13196*67e74705SXin Li }
13197*67e74705SXin Li
vec_any_eq(vector bool char __a,vector signed char __b)13198*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
13199*67e74705SXin Li vector signed char __b) {
13200*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
13201*67e74705SXin Li (vector char)__b);
13202*67e74705SXin Li }
13203*67e74705SXin Li
vec_any_eq(vector bool char __a,vector unsigned char __b)13204*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
13205*67e74705SXin Li vector unsigned char __b) {
13206*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
13207*67e74705SXin Li (vector char)__b);
13208*67e74705SXin Li }
13209*67e74705SXin Li
vec_any_eq(vector bool char __a,vector bool char __b)13210*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool char __a,
13211*67e74705SXin Li vector bool char __b) {
13212*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a,
13213*67e74705SXin Li (vector char)__b);
13214*67e74705SXin Li }
13215*67e74705SXin Li
vec_any_eq(vector short __a,vector short __b)13216*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
13217*67e74705SXin Li vector short __b) {
13218*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, __b);
13219*67e74705SXin Li }
13220*67e74705SXin Li
vec_any_eq(vector short __a,vector bool short __b)13221*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector short __a,
13222*67e74705SXin Li vector bool short __b) {
13223*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, (vector short)__b);
13224*67e74705SXin Li }
13225*67e74705SXin Li
vec_any_eq(vector unsigned short __a,vector unsigned short __b)13226*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
13227*67e74705SXin Li vector unsigned short __b) {
13228*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
13229*67e74705SXin Li (vector short)__b);
13230*67e74705SXin Li }
13231*67e74705SXin Li
vec_any_eq(vector unsigned short __a,vector bool short __b)13232*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned short __a,
13233*67e74705SXin Li vector bool short __b) {
13234*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
13235*67e74705SXin Li (vector short)__b);
13236*67e74705SXin Li }
13237*67e74705SXin Li
vec_any_eq(vector bool short __a,vector short __b)13238*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
13239*67e74705SXin Li vector short __b) {
13240*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
13241*67e74705SXin Li (vector short)__b);
13242*67e74705SXin Li }
13243*67e74705SXin Li
vec_any_eq(vector bool short __a,vector unsigned short __b)13244*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
13245*67e74705SXin Li vector unsigned short __b) {
13246*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
13247*67e74705SXin Li (vector short)__b);
13248*67e74705SXin Li }
13249*67e74705SXin Li
vec_any_eq(vector bool short __a,vector bool short __b)13250*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool short __a,
13251*67e74705SXin Li vector bool short __b) {
13252*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
13253*67e74705SXin Li (vector short)__b);
13254*67e74705SXin Li }
13255*67e74705SXin Li
vec_any_eq(vector pixel __a,vector pixel __b)13256*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector pixel __a,
13257*67e74705SXin Li vector pixel __b) {
13258*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, (vector short)__a,
13259*67e74705SXin Li (vector short)__b);
13260*67e74705SXin Li }
13261*67e74705SXin Li
vec_any_eq(vector int __a,vector int __b)13262*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a, vector int __b) {
13263*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, __b);
13264*67e74705SXin Li }
13265*67e74705SXin Li
vec_any_eq(vector int __a,vector bool int __b)13266*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector int __a,
13267*67e74705SXin Li vector bool int __b) {
13268*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, (vector int)__b);
13269*67e74705SXin Li }
13270*67e74705SXin Li
vec_any_eq(vector unsigned int __a,vector unsigned int __b)13271*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
13272*67e74705SXin Li vector unsigned int __b) {
13273*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
13274*67e74705SXin Li (vector int)__b);
13275*67e74705SXin Li }
13276*67e74705SXin Li
vec_any_eq(vector unsigned int __a,vector bool int __b)13277*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned int __a,
13278*67e74705SXin Li vector bool int __b) {
13279*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
13280*67e74705SXin Li (vector int)__b);
13281*67e74705SXin Li }
13282*67e74705SXin Li
vec_any_eq(vector bool int __a,vector int __b)13283*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
13284*67e74705SXin Li vector int __b) {
13285*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
13286*67e74705SXin Li (vector int)__b);
13287*67e74705SXin Li }
13288*67e74705SXin Li
vec_any_eq(vector bool int __a,vector unsigned int __b)13289*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
13290*67e74705SXin Li vector unsigned int __b) {
13291*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
13292*67e74705SXin Li (vector int)__b);
13293*67e74705SXin Li }
13294*67e74705SXin Li
vec_any_eq(vector bool int __a,vector bool int __b)13295*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool int __a,
13296*67e74705SXin Li vector bool int __b) {
13297*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a,
13298*67e74705SXin Li (vector int)__b);
13299*67e74705SXin Li }
13300*67e74705SXin Li
13301*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_any_eq(vector signed long long __a,vector signed long long __b)13302*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
13303*67e74705SXin Li vector signed long long __b) {
13304*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a, __b);
13305*67e74705SXin Li }
13306*67e74705SXin Li
vec_any_eq(vector unsigned long long __a,vector unsigned long long __b)13307*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
13308*67e74705SXin Li vector unsigned long long __b) {
13309*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, (vector long long)__a,
13310*67e74705SXin Li (vector long long)__b);
13311*67e74705SXin Li }
13312*67e74705SXin Li
vec_any_eq(vector signed long long __a,vector bool long long __b)13313*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector signed long long __a,
13314*67e74705SXin Li vector bool long long __b) {
13315*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_EQ_REV, __a,
13316*67e74705SXin Li (vector signed long long)__b);
13317*67e74705SXin Li }
13318*67e74705SXin Li
vec_any_eq(vector unsigned long long __a,vector bool long long __b)13319*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector unsigned long long __a,
13320*67e74705SXin Li vector bool long long __b) {
13321*67e74705SXin Li return __builtin_altivec_vcmpequd_p(
13322*67e74705SXin Li __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
13323*67e74705SXin Li }
13324*67e74705SXin Li
vec_any_eq(vector bool long long __a,vector signed long long __b)13325*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
13326*67e74705SXin Li vector signed long long __b) {
13327*67e74705SXin Li return __builtin_altivec_vcmpequd_p(
13328*67e74705SXin Li __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
13329*67e74705SXin Li }
13330*67e74705SXin Li
vec_any_eq(vector bool long long __a,vector unsigned long long __b)13331*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
13332*67e74705SXin Li vector unsigned long long __b) {
13333*67e74705SXin Li return __builtin_altivec_vcmpequd_p(
13334*67e74705SXin Li __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
13335*67e74705SXin Li }
13336*67e74705SXin Li
vec_any_eq(vector bool long long __a,vector bool long long __b)13337*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector bool long long __a,
13338*67e74705SXin Li vector bool long long __b) {
13339*67e74705SXin Li return __builtin_altivec_vcmpequd_p(
13340*67e74705SXin Li __CR6_EQ_REV, (vector signed long long)__a, (vector signed long long)__b);
13341*67e74705SXin Li }
13342*67e74705SXin Li #endif
13343*67e74705SXin Li
vec_any_eq(vector float __a,vector float __b)13344*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector float __a,
13345*67e74705SXin Li vector float __b) {
13346*67e74705SXin Li #ifdef __VSX__
13347*67e74705SXin Li return __builtin_vsx_xvcmpeqsp_p(__CR6_EQ_REV, __a, __b);
13348*67e74705SXin Li #else
13349*67e74705SXin Li return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __b);
13350*67e74705SXin Li #endif
13351*67e74705SXin Li }
13352*67e74705SXin Li
13353*67e74705SXin Li #ifdef __VSX__
vec_any_eq(vector double __a,vector double __b)13354*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_eq(vector double __a,
13355*67e74705SXin Li vector double __b) {
13356*67e74705SXin Li return __builtin_vsx_xvcmpeqdp_p(__CR6_EQ_REV, __a, __b);
13357*67e74705SXin Li }
13358*67e74705SXin Li #endif
13359*67e74705SXin Li
13360*67e74705SXin Li /* vec_any_ge */
13361*67e74705SXin Li
vec_any_ge(vector signed char __a,vector signed char __b)13362*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
13363*67e74705SXin Li vector signed char __b) {
13364*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b, __a);
13365*67e74705SXin Li }
13366*67e74705SXin Li
vec_any_ge(vector signed char __a,vector bool char __b)13367*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed char __a,
13368*67e74705SXin Li vector bool char __b) {
13369*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__b,
13370*67e74705SXin Li __a);
13371*67e74705SXin Li }
13372*67e74705SXin Li
vec_any_ge(vector unsigned char __a,vector unsigned char __b)13373*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
13374*67e74705SXin Li vector unsigned char __b) {
13375*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, __a);
13376*67e74705SXin Li }
13377*67e74705SXin Li
vec_any_ge(vector unsigned char __a,vector bool char __b)13378*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned char __a,
13379*67e74705SXin Li vector bool char __b) {
13380*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
13381*67e74705SXin Li __a);
13382*67e74705SXin Li }
13383*67e74705SXin Li
vec_any_ge(vector bool char __a,vector signed char __b)13384*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
13385*67e74705SXin Li vector signed char __b) {
13386*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
13387*67e74705SXin Li (vector unsigned char)__a);
13388*67e74705SXin Li }
13389*67e74705SXin Li
vec_any_ge(vector bool char __a,vector unsigned char __b)13390*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
13391*67e74705SXin Li vector unsigned char __b) {
13392*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b,
13393*67e74705SXin Li (vector unsigned char)__a);
13394*67e74705SXin Li }
13395*67e74705SXin Li
vec_any_ge(vector bool char __a,vector bool char __b)13396*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool char __a,
13397*67e74705SXin Li vector bool char __b) {
13398*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b,
13399*67e74705SXin Li (vector unsigned char)__a);
13400*67e74705SXin Li }
13401*67e74705SXin Li
vec_any_ge(vector short __a,vector short __b)13402*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
13403*67e74705SXin Li vector short __b) {
13404*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b, __a);
13405*67e74705SXin Li }
13406*67e74705SXin Li
vec_any_ge(vector short __a,vector bool short __b)13407*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector short __a,
13408*67e74705SXin Li vector bool short __b) {
13409*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector short)__b, __a);
13410*67e74705SXin Li }
13411*67e74705SXin Li
vec_any_ge(vector unsigned short __a,vector unsigned short __b)13412*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
13413*67e74705SXin Li vector unsigned short __b) {
13414*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, __a);
13415*67e74705SXin Li }
13416*67e74705SXin Li
vec_any_ge(vector unsigned short __a,vector bool short __b)13417*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned short __a,
13418*67e74705SXin Li vector bool short __b) {
13419*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
13420*67e74705SXin Li __a);
13421*67e74705SXin Li }
13422*67e74705SXin Li
vec_any_ge(vector bool short __a,vector short __b)13423*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
13424*67e74705SXin Li vector short __b) {
13425*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
13426*67e74705SXin Li (vector unsigned short)__a);
13427*67e74705SXin Li }
13428*67e74705SXin Li
vec_any_ge(vector bool short __a,vector unsigned short __b)13429*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
13430*67e74705SXin Li vector unsigned short __b) {
13431*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b,
13432*67e74705SXin Li (vector unsigned short)__a);
13433*67e74705SXin Li }
13434*67e74705SXin Li
vec_any_ge(vector bool short __a,vector bool short __b)13435*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool short __a,
13436*67e74705SXin Li vector bool short __b) {
13437*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b,
13438*67e74705SXin Li (vector unsigned short)__a);
13439*67e74705SXin Li }
13440*67e74705SXin Li
vec_any_ge(vector int __a,vector int __b)13441*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a, vector int __b) {
13442*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b, __a);
13443*67e74705SXin Li }
13444*67e74705SXin Li
vec_any_ge(vector int __a,vector bool int __b)13445*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector int __a,
13446*67e74705SXin Li vector bool int __b) {
13447*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector int)__b, __a);
13448*67e74705SXin Li }
13449*67e74705SXin Li
vec_any_ge(vector unsigned int __a,vector unsigned int __b)13450*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
13451*67e74705SXin Li vector unsigned int __b) {
13452*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, __a);
13453*67e74705SXin Li }
13454*67e74705SXin Li
vec_any_ge(vector unsigned int __a,vector bool int __b)13455*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned int __a,
13456*67e74705SXin Li vector bool int __b) {
13457*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
13458*67e74705SXin Li __a);
13459*67e74705SXin Li }
13460*67e74705SXin Li
vec_any_ge(vector bool int __a,vector int __b)13461*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
13462*67e74705SXin Li vector int __b) {
13463*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
13464*67e74705SXin Li (vector unsigned int)__a);
13465*67e74705SXin Li }
13466*67e74705SXin Li
vec_any_ge(vector bool int __a,vector unsigned int __b)13467*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
13468*67e74705SXin Li vector unsigned int __b) {
13469*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b,
13470*67e74705SXin Li (vector unsigned int)__a);
13471*67e74705SXin Li }
13472*67e74705SXin Li
vec_any_ge(vector bool int __a,vector bool int __b)13473*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool int __a,
13474*67e74705SXin Li vector bool int __b) {
13475*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b,
13476*67e74705SXin Li (vector unsigned int)__a);
13477*67e74705SXin Li }
13478*67e74705SXin Li
13479*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_any_ge(vector signed long long __a,vector signed long long __b)13480*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
13481*67e74705SXin Li vector signed long long __b) {
13482*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __b, __a);
13483*67e74705SXin Li }
13484*67e74705SXin Li
vec_any_ge(vector unsigned long long __a,vector unsigned long long __b)13485*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
13486*67e74705SXin Li vector unsigned long long __b) {
13487*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b, __a);
13488*67e74705SXin Li }
13489*67e74705SXin Li
vec_any_ge(vector signed long long __a,vector bool long long __b)13490*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector signed long long __a,
13491*67e74705SXin Li vector bool long long __b) {
13492*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV,
13493*67e74705SXin Li (vector signed long long)__b, __a);
13494*67e74705SXin Li }
13495*67e74705SXin Li
vec_any_ge(vector unsigned long long __a,vector bool long long __b)13496*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector unsigned long long __a,
13497*67e74705SXin Li vector bool long long __b) {
13498*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
13499*67e74705SXin Li (vector unsigned long long)__b, __a);
13500*67e74705SXin Li }
13501*67e74705SXin Li
vec_any_ge(vector bool long long __a,vector signed long long __b)13502*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
13503*67e74705SXin Li vector signed long long __b) {
13504*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
13505*67e74705SXin Li (vector unsigned long long)__b,
13506*67e74705SXin Li (vector unsigned long long)__a);
13507*67e74705SXin Li }
13508*67e74705SXin Li
vec_any_ge(vector bool long long __a,vector unsigned long long __b)13509*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
13510*67e74705SXin Li vector unsigned long long __b) {
13511*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __b,
13512*67e74705SXin Li (vector unsigned long long)__a);
13513*67e74705SXin Li }
13514*67e74705SXin Li
vec_any_ge(vector bool long long __a,vector bool long long __b)13515*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector bool long long __a,
13516*67e74705SXin Li vector bool long long __b) {
13517*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
13518*67e74705SXin Li (vector unsigned long long)__b,
13519*67e74705SXin Li (vector unsigned long long)__a);
13520*67e74705SXin Li }
13521*67e74705SXin Li #endif
13522*67e74705SXin Li
vec_any_ge(vector float __a,vector float __b)13523*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector float __a,
13524*67e74705SXin Li vector float __b) {
13525*67e74705SXin Li #ifdef __VSX__
13526*67e74705SXin Li return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __a, __b);
13527*67e74705SXin Li #else
13528*67e74705SXin Li return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __a, __b);
13529*67e74705SXin Li #endif
13530*67e74705SXin Li }
13531*67e74705SXin Li
13532*67e74705SXin Li #ifdef __VSX__
vec_any_ge(vector double __a,vector double __b)13533*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ge(vector double __a,
13534*67e74705SXin Li vector double __b) {
13535*67e74705SXin Li return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __a, __b);
13536*67e74705SXin Li }
13537*67e74705SXin Li #endif
13538*67e74705SXin Li
13539*67e74705SXin Li /* vec_any_gt */
13540*67e74705SXin Li
vec_any_gt(vector signed char __a,vector signed char __b)13541*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
13542*67e74705SXin Li vector signed char __b) {
13543*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, __b);
13544*67e74705SXin Li }
13545*67e74705SXin Li
vec_any_gt(vector signed char __a,vector bool char __b)13546*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed char __a,
13547*67e74705SXin Li vector bool char __b) {
13548*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a,
13549*67e74705SXin Li (vector signed char)__b);
13550*67e74705SXin Li }
13551*67e74705SXin Li
vec_any_gt(vector unsigned char __a,vector unsigned char __b)13552*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
13553*67e74705SXin Li vector unsigned char __b) {
13554*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, __b);
13555*67e74705SXin Li }
13556*67e74705SXin Li
vec_any_gt(vector unsigned char __a,vector bool char __b)13557*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned char __a,
13558*67e74705SXin Li vector bool char __b) {
13559*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a,
13560*67e74705SXin Li (vector unsigned char)__b);
13561*67e74705SXin Li }
13562*67e74705SXin Li
vec_any_gt(vector bool char __a,vector signed char __b)13563*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
13564*67e74705SXin Li vector signed char __b) {
13565*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
13566*67e74705SXin Li (vector unsigned char)__b);
13567*67e74705SXin Li }
13568*67e74705SXin Li
vec_any_gt(vector bool char __a,vector unsigned char __b)13569*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
13570*67e74705SXin Li vector unsigned char __b) {
13571*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
13572*67e74705SXin Li __b);
13573*67e74705SXin Li }
13574*67e74705SXin Li
vec_any_gt(vector bool char __a,vector bool char __b)13575*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool char __a,
13576*67e74705SXin Li vector bool char __b) {
13577*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a,
13578*67e74705SXin Li (vector unsigned char)__b);
13579*67e74705SXin Li }
13580*67e74705SXin Li
vec_any_gt(vector short __a,vector short __b)13581*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
13582*67e74705SXin Li vector short __b) {
13583*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, __b);
13584*67e74705SXin Li }
13585*67e74705SXin Li
vec_any_gt(vector short __a,vector bool short __b)13586*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector short __a,
13587*67e74705SXin Li vector bool short __b) {
13588*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, (vector short)__b);
13589*67e74705SXin Li }
13590*67e74705SXin Li
vec_any_gt(vector unsigned short __a,vector unsigned short __b)13591*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
13592*67e74705SXin Li vector unsigned short __b) {
13593*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, __b);
13594*67e74705SXin Li }
13595*67e74705SXin Li
vec_any_gt(vector unsigned short __a,vector bool short __b)13596*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned short __a,
13597*67e74705SXin Li vector bool short __b) {
13598*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a,
13599*67e74705SXin Li (vector unsigned short)__b);
13600*67e74705SXin Li }
13601*67e74705SXin Li
vec_any_gt(vector bool short __a,vector short __b)13602*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
13603*67e74705SXin Li vector short __b) {
13604*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
13605*67e74705SXin Li (vector unsigned short)__b);
13606*67e74705SXin Li }
13607*67e74705SXin Li
vec_any_gt(vector bool short __a,vector unsigned short __b)13608*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
13609*67e74705SXin Li vector unsigned short __b) {
13610*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
13611*67e74705SXin Li __b);
13612*67e74705SXin Li }
13613*67e74705SXin Li
vec_any_gt(vector bool short __a,vector bool short __b)13614*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool short __a,
13615*67e74705SXin Li vector bool short __b) {
13616*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a,
13617*67e74705SXin Li (vector unsigned short)__b);
13618*67e74705SXin Li }
13619*67e74705SXin Li
vec_any_gt(vector int __a,vector int __b)13620*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a, vector int __b) {
13621*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, __b);
13622*67e74705SXin Li }
13623*67e74705SXin Li
vec_any_gt(vector int __a,vector bool int __b)13624*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector int __a,
13625*67e74705SXin Li vector bool int __b) {
13626*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, (vector int)__b);
13627*67e74705SXin Li }
13628*67e74705SXin Li
vec_any_gt(vector unsigned int __a,vector unsigned int __b)13629*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
13630*67e74705SXin Li vector unsigned int __b) {
13631*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, __b);
13632*67e74705SXin Li }
13633*67e74705SXin Li
vec_any_gt(vector unsigned int __a,vector bool int __b)13634*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned int __a,
13635*67e74705SXin Li vector bool int __b) {
13636*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a,
13637*67e74705SXin Li (vector unsigned int)__b);
13638*67e74705SXin Li }
13639*67e74705SXin Li
vec_any_gt(vector bool int __a,vector int __b)13640*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
13641*67e74705SXin Li vector int __b) {
13642*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
13643*67e74705SXin Li (vector unsigned int)__b);
13644*67e74705SXin Li }
13645*67e74705SXin Li
vec_any_gt(vector bool int __a,vector unsigned int __b)13646*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
13647*67e74705SXin Li vector unsigned int __b) {
13648*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
13649*67e74705SXin Li __b);
13650*67e74705SXin Li }
13651*67e74705SXin Li
vec_any_gt(vector bool int __a,vector bool int __b)13652*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool int __a,
13653*67e74705SXin Li vector bool int __b) {
13654*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a,
13655*67e74705SXin Li (vector unsigned int)__b);
13656*67e74705SXin Li }
13657*67e74705SXin Li
13658*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_any_gt(vector signed long long __a,vector signed long long __b)13659*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
13660*67e74705SXin Li vector signed long long __b) {
13661*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a, __b);
13662*67e74705SXin Li }
13663*67e74705SXin Li
vec_any_gt(vector unsigned long long __a,vector unsigned long long __b)13664*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
13665*67e74705SXin Li vector unsigned long long __b) {
13666*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a, __b);
13667*67e74705SXin Li }
13668*67e74705SXin Li
vec_any_gt(vector signed long long __a,vector bool long long __b)13669*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector signed long long __a,
13670*67e74705SXin Li vector bool long long __b) {
13671*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __a,
13672*67e74705SXin Li (vector signed long long)__b);
13673*67e74705SXin Li }
13674*67e74705SXin Li
vec_any_gt(vector unsigned long long __a,vector bool long long __b)13675*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector unsigned long long __a,
13676*67e74705SXin Li vector bool long long __b) {
13677*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __a,
13678*67e74705SXin Li (vector unsigned long long)__b);
13679*67e74705SXin Li }
13680*67e74705SXin Li
vec_any_gt(vector bool long long __a,vector signed long long __b)13681*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
13682*67e74705SXin Li vector signed long long __b) {
13683*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
13684*67e74705SXin Li (vector unsigned long long)__a,
13685*67e74705SXin Li (vector unsigned long long)__b);
13686*67e74705SXin Li }
13687*67e74705SXin Li
vec_any_gt(vector bool long long __a,vector unsigned long long __b)13688*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
13689*67e74705SXin Li vector unsigned long long __b) {
13690*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
13691*67e74705SXin Li (vector unsigned long long)__a, __b);
13692*67e74705SXin Li }
13693*67e74705SXin Li
vec_any_gt(vector bool long long __a,vector bool long long __b)13694*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector bool long long __a,
13695*67e74705SXin Li vector bool long long __b) {
13696*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
13697*67e74705SXin Li (vector unsigned long long)__a,
13698*67e74705SXin Li (vector unsigned long long)__b);
13699*67e74705SXin Li }
13700*67e74705SXin Li #endif
13701*67e74705SXin Li
vec_any_gt(vector float __a,vector float __b)13702*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector float __a,
13703*67e74705SXin Li vector float __b) {
13704*67e74705SXin Li #ifdef __VSX__
13705*67e74705SXin Li return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __a, __b);
13706*67e74705SXin Li #else
13707*67e74705SXin Li return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __a, __b);
13708*67e74705SXin Li #endif
13709*67e74705SXin Li }
13710*67e74705SXin Li
13711*67e74705SXin Li #ifdef __VSX__
vec_any_gt(vector double __a,vector double __b)13712*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_gt(vector double __a,
13713*67e74705SXin Li vector double __b) {
13714*67e74705SXin Li return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __a, __b);
13715*67e74705SXin Li }
13716*67e74705SXin Li #endif
13717*67e74705SXin Li
13718*67e74705SXin Li /* vec_any_le */
13719*67e74705SXin Li
vec_any_le(vector signed char __a,vector signed char __b)13720*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
13721*67e74705SXin Li vector signed char __b) {
13722*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, __b);
13723*67e74705SXin Li }
13724*67e74705SXin Li
vec_any_le(vector signed char __a,vector bool char __b)13725*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector signed char __a,
13726*67e74705SXin Li vector bool char __b) {
13727*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a,
13728*67e74705SXin Li (vector signed char)__b);
13729*67e74705SXin Li }
13730*67e74705SXin Li
vec_any_le(vector unsigned char __a,vector unsigned char __b)13731*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
13732*67e74705SXin Li vector unsigned char __b) {
13733*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, __b);
13734*67e74705SXin Li }
13735*67e74705SXin Li
vec_any_le(vector unsigned char __a,vector bool char __b)13736*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned char __a,
13737*67e74705SXin Li vector bool char __b) {
13738*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a,
13739*67e74705SXin Li (vector unsigned char)__b);
13740*67e74705SXin Li }
13741*67e74705SXin Li
vec_any_le(vector bool char __a,vector signed char __b)13742*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
13743*67e74705SXin Li vector signed char __b) {
13744*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
13745*67e74705SXin Li (vector unsigned char)__b);
13746*67e74705SXin Li }
13747*67e74705SXin Li
vec_any_le(vector bool char __a,vector unsigned char __b)13748*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
13749*67e74705SXin Li vector unsigned char __b) {
13750*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
13751*67e74705SXin Li __b);
13752*67e74705SXin Li }
13753*67e74705SXin Li
vec_any_le(vector bool char __a,vector bool char __b)13754*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector bool char __a,
13755*67e74705SXin Li vector bool char __b) {
13756*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a,
13757*67e74705SXin Li (vector unsigned char)__b);
13758*67e74705SXin Li }
13759*67e74705SXin Li
vec_any_le(vector short __a,vector short __b)13760*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
13761*67e74705SXin Li vector short __b) {
13762*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, __b);
13763*67e74705SXin Li }
13764*67e74705SXin Li
vec_any_le(vector short __a,vector bool short __b)13765*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector short __a,
13766*67e74705SXin Li vector bool short __b) {
13767*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, (vector short)__b);
13768*67e74705SXin Li }
13769*67e74705SXin Li
vec_any_le(vector unsigned short __a,vector unsigned short __b)13770*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
13771*67e74705SXin Li vector unsigned short __b) {
13772*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, __b);
13773*67e74705SXin Li }
13774*67e74705SXin Li
vec_any_le(vector unsigned short __a,vector bool short __b)13775*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned short __a,
13776*67e74705SXin Li vector bool short __b) {
13777*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a,
13778*67e74705SXin Li (vector unsigned short)__b);
13779*67e74705SXin Li }
13780*67e74705SXin Li
vec_any_le(vector bool short __a,vector short __b)13781*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
13782*67e74705SXin Li vector short __b) {
13783*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
13784*67e74705SXin Li (vector unsigned short)__b);
13785*67e74705SXin Li }
13786*67e74705SXin Li
vec_any_le(vector bool short __a,vector unsigned short __b)13787*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
13788*67e74705SXin Li vector unsigned short __b) {
13789*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
13790*67e74705SXin Li __b);
13791*67e74705SXin Li }
13792*67e74705SXin Li
vec_any_le(vector bool short __a,vector bool short __b)13793*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector bool short __a,
13794*67e74705SXin Li vector bool short __b) {
13795*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a,
13796*67e74705SXin Li (vector unsigned short)__b);
13797*67e74705SXin Li }
13798*67e74705SXin Li
vec_any_le(vector int __a,vector int __b)13799*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a, vector int __b) {
13800*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, __b);
13801*67e74705SXin Li }
13802*67e74705SXin Li
vec_any_le(vector int __a,vector bool int __b)13803*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector int __a,
13804*67e74705SXin Li vector bool int __b) {
13805*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, (vector int)__b);
13806*67e74705SXin Li }
13807*67e74705SXin Li
vec_any_le(vector unsigned int __a,vector unsigned int __b)13808*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
13809*67e74705SXin Li vector unsigned int __b) {
13810*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, __b);
13811*67e74705SXin Li }
13812*67e74705SXin Li
vec_any_le(vector unsigned int __a,vector bool int __b)13813*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned int __a,
13814*67e74705SXin Li vector bool int __b) {
13815*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a,
13816*67e74705SXin Li (vector unsigned int)__b);
13817*67e74705SXin Li }
13818*67e74705SXin Li
vec_any_le(vector bool int __a,vector int __b)13819*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
13820*67e74705SXin Li vector int __b) {
13821*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
13822*67e74705SXin Li (vector unsigned int)__b);
13823*67e74705SXin Li }
13824*67e74705SXin Li
vec_any_le(vector bool int __a,vector unsigned int __b)13825*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
13826*67e74705SXin Li vector unsigned int __b) {
13827*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
13828*67e74705SXin Li __b);
13829*67e74705SXin Li }
13830*67e74705SXin Li
vec_any_le(vector bool int __a,vector bool int __b)13831*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector bool int __a,
13832*67e74705SXin Li vector bool int __b) {
13833*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a,
13834*67e74705SXin Li (vector unsigned int)__b);
13835*67e74705SXin Li }
13836*67e74705SXin Li
13837*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_any_le(vector signed long long __a,vector signed long long __b)13838*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
13839*67e74705SXin Li vector signed long long __b) {
13840*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a, __b);
13841*67e74705SXin Li }
13842*67e74705SXin Li
vec_any_le(vector unsigned long long __a,vector unsigned long long __b)13843*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
13844*67e74705SXin Li vector unsigned long long __b) {
13845*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a, __b);
13846*67e74705SXin Li }
13847*67e74705SXin Li
vec_any_le(vector signed long long __a,vector bool long long __b)13848*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector signed long long __a,
13849*67e74705SXin Li vector bool long long __b) {
13850*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_LT_REV, __a,
13851*67e74705SXin Li (vector signed long long)__b);
13852*67e74705SXin Li }
13853*67e74705SXin Li
vec_any_le(vector unsigned long long __a,vector bool long long __b)13854*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector unsigned long long __a,
13855*67e74705SXin Li vector bool long long __b) {
13856*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV, __a,
13857*67e74705SXin Li (vector unsigned long long)__b);
13858*67e74705SXin Li }
13859*67e74705SXin Li
vec_any_le(vector bool long long __a,vector signed long long __b)13860*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
13861*67e74705SXin Li vector signed long long __b) {
13862*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
13863*67e74705SXin Li (vector unsigned long long)__a,
13864*67e74705SXin Li (vector unsigned long long)__b);
13865*67e74705SXin Li }
13866*67e74705SXin Li
vec_any_le(vector bool long long __a,vector unsigned long long __b)13867*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
13868*67e74705SXin Li vector unsigned long long __b) {
13869*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
13870*67e74705SXin Li (vector unsigned long long)__a, __b);
13871*67e74705SXin Li }
13872*67e74705SXin Li
vec_any_le(vector bool long long __a,vector bool long long __b)13873*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector bool long long __a,
13874*67e74705SXin Li vector bool long long __b) {
13875*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_LT_REV,
13876*67e74705SXin Li (vector unsigned long long)__a,
13877*67e74705SXin Li (vector unsigned long long)__b);
13878*67e74705SXin Li }
13879*67e74705SXin Li #endif
13880*67e74705SXin Li
vec_any_le(vector float __a,vector float __b)13881*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector float __a,
13882*67e74705SXin Li vector float __b) {
13883*67e74705SXin Li #ifdef __VSX__
13884*67e74705SXin Li return __builtin_vsx_xvcmpgesp_p(__CR6_EQ_REV, __b, __a);
13885*67e74705SXin Li #else
13886*67e74705SXin Li return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __b, __a);
13887*67e74705SXin Li #endif
13888*67e74705SXin Li }
13889*67e74705SXin Li
13890*67e74705SXin Li #ifdef __VSX__
vec_any_le(vector double __a,vector double __b)13891*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_le(vector double __a,
13892*67e74705SXin Li vector double __b) {
13893*67e74705SXin Li return __builtin_vsx_xvcmpgedp_p(__CR6_EQ_REV, __b, __a);
13894*67e74705SXin Li }
13895*67e74705SXin Li #endif
13896*67e74705SXin Li
13897*67e74705SXin Li /* vec_any_lt */
13898*67e74705SXin Li
vec_any_lt(vector signed char __a,vector signed char __b)13899*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
13900*67e74705SXin Li vector signed char __b) {
13901*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b, __a);
13902*67e74705SXin Li }
13903*67e74705SXin Li
vec_any_lt(vector signed char __a,vector bool char __b)13904*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed char __a,
13905*67e74705SXin Li vector bool char __b) {
13906*67e74705SXin Li return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__b,
13907*67e74705SXin Li __a);
13908*67e74705SXin Li }
13909*67e74705SXin Li
vec_any_lt(vector unsigned char __a,vector unsigned char __b)13910*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
13911*67e74705SXin Li vector unsigned char __b) {
13912*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, __a);
13913*67e74705SXin Li }
13914*67e74705SXin Li
vec_any_lt(vector unsigned char __a,vector bool char __b)13915*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned char __a,
13916*67e74705SXin Li vector bool char __b) {
13917*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
13918*67e74705SXin Li __a);
13919*67e74705SXin Li }
13920*67e74705SXin Li
vec_any_lt(vector bool char __a,vector signed char __b)13921*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
13922*67e74705SXin Li vector signed char __b) {
13923*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
13924*67e74705SXin Li (vector unsigned char)__a);
13925*67e74705SXin Li }
13926*67e74705SXin Li
vec_any_lt(vector bool char __a,vector unsigned char __b)13927*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
13928*67e74705SXin Li vector unsigned char __b) {
13929*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b,
13930*67e74705SXin Li (vector unsigned char)__a);
13931*67e74705SXin Li }
13932*67e74705SXin Li
vec_any_lt(vector bool char __a,vector bool char __b)13933*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool char __a,
13934*67e74705SXin Li vector bool char __b) {
13935*67e74705SXin Li return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b,
13936*67e74705SXin Li (vector unsigned char)__a);
13937*67e74705SXin Li }
13938*67e74705SXin Li
vec_any_lt(vector short __a,vector short __b)13939*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
13940*67e74705SXin Li vector short __b) {
13941*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b, __a);
13942*67e74705SXin Li }
13943*67e74705SXin Li
vec_any_lt(vector short __a,vector bool short __b)13944*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector short __a,
13945*67e74705SXin Li vector bool short __b) {
13946*67e74705SXin Li return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector short)__b, __a);
13947*67e74705SXin Li }
13948*67e74705SXin Li
vec_any_lt(vector unsigned short __a,vector unsigned short __b)13949*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
13950*67e74705SXin Li vector unsigned short __b) {
13951*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, __a);
13952*67e74705SXin Li }
13953*67e74705SXin Li
vec_any_lt(vector unsigned short __a,vector bool short __b)13954*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned short __a,
13955*67e74705SXin Li vector bool short __b) {
13956*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
13957*67e74705SXin Li __a);
13958*67e74705SXin Li }
13959*67e74705SXin Li
vec_any_lt(vector bool short __a,vector short __b)13960*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
13961*67e74705SXin Li vector short __b) {
13962*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
13963*67e74705SXin Li (vector unsigned short)__a);
13964*67e74705SXin Li }
13965*67e74705SXin Li
vec_any_lt(vector bool short __a,vector unsigned short __b)13966*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
13967*67e74705SXin Li vector unsigned short __b) {
13968*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b,
13969*67e74705SXin Li (vector unsigned short)__a);
13970*67e74705SXin Li }
13971*67e74705SXin Li
vec_any_lt(vector bool short __a,vector bool short __b)13972*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool short __a,
13973*67e74705SXin Li vector bool short __b) {
13974*67e74705SXin Li return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b,
13975*67e74705SXin Li (vector unsigned short)__a);
13976*67e74705SXin Li }
13977*67e74705SXin Li
vec_any_lt(vector int __a,vector int __b)13978*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a, vector int __b) {
13979*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b, __a);
13980*67e74705SXin Li }
13981*67e74705SXin Li
vec_any_lt(vector int __a,vector bool int __b)13982*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector int __a,
13983*67e74705SXin Li vector bool int __b) {
13984*67e74705SXin Li return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector int)__b, __a);
13985*67e74705SXin Li }
13986*67e74705SXin Li
vec_any_lt(vector unsigned int __a,vector unsigned int __b)13987*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
13988*67e74705SXin Li vector unsigned int __b) {
13989*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, __a);
13990*67e74705SXin Li }
13991*67e74705SXin Li
vec_any_lt(vector unsigned int __a,vector bool int __b)13992*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned int __a,
13993*67e74705SXin Li vector bool int __b) {
13994*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
13995*67e74705SXin Li __a);
13996*67e74705SXin Li }
13997*67e74705SXin Li
vec_any_lt(vector bool int __a,vector int __b)13998*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
13999*67e74705SXin Li vector int __b) {
14000*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
14001*67e74705SXin Li (vector unsigned int)__a);
14002*67e74705SXin Li }
14003*67e74705SXin Li
vec_any_lt(vector bool int __a,vector unsigned int __b)14004*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
14005*67e74705SXin Li vector unsigned int __b) {
14006*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b,
14007*67e74705SXin Li (vector unsigned int)__a);
14008*67e74705SXin Li }
14009*67e74705SXin Li
vec_any_lt(vector bool int __a,vector bool int __b)14010*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool int __a,
14011*67e74705SXin Li vector bool int __b) {
14012*67e74705SXin Li return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b,
14013*67e74705SXin Li (vector unsigned int)__a);
14014*67e74705SXin Li }
14015*67e74705SXin Li
14016*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_any_lt(vector signed long long __a,vector signed long long __b)14017*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
14018*67e74705SXin Li vector signed long long __b) {
14019*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV, __b, __a);
14020*67e74705SXin Li }
14021*67e74705SXin Li
vec_any_lt(vector unsigned long long __a,vector unsigned long long __b)14022*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
14023*67e74705SXin Li vector unsigned long long __b) {
14024*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b, __a);
14025*67e74705SXin Li }
14026*67e74705SXin Li
vec_any_lt(vector signed long long __a,vector bool long long __b)14027*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector signed long long __a,
14028*67e74705SXin Li vector bool long long __b) {
14029*67e74705SXin Li return __builtin_altivec_vcmpgtsd_p(__CR6_EQ_REV,
14030*67e74705SXin Li (vector signed long long)__b, __a);
14031*67e74705SXin Li }
14032*67e74705SXin Li
vec_any_lt(vector unsigned long long __a,vector bool long long __b)14033*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector unsigned long long __a,
14034*67e74705SXin Li vector bool long long __b) {
14035*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
14036*67e74705SXin Li (vector unsigned long long)__b, __a);
14037*67e74705SXin Li }
14038*67e74705SXin Li
vec_any_lt(vector bool long long __a,vector signed long long __b)14039*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
14040*67e74705SXin Li vector signed long long __b) {
14041*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
14042*67e74705SXin Li (vector unsigned long long)__b,
14043*67e74705SXin Li (vector unsigned long long)__a);
14044*67e74705SXin Li }
14045*67e74705SXin Li
vec_any_lt(vector bool long long __a,vector unsigned long long __b)14046*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
14047*67e74705SXin Li vector unsigned long long __b) {
14048*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV, __b,
14049*67e74705SXin Li (vector unsigned long long)__a);
14050*67e74705SXin Li }
14051*67e74705SXin Li
vec_any_lt(vector bool long long __a,vector bool long long __b)14052*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector bool long long __a,
14053*67e74705SXin Li vector bool long long __b) {
14054*67e74705SXin Li return __builtin_altivec_vcmpgtud_p(__CR6_EQ_REV,
14055*67e74705SXin Li (vector unsigned long long)__b,
14056*67e74705SXin Li (vector unsigned long long)__a);
14057*67e74705SXin Li }
14058*67e74705SXin Li #endif
14059*67e74705SXin Li
vec_any_lt(vector float __a,vector float __b)14060*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector float __a,
14061*67e74705SXin Li vector float __b) {
14062*67e74705SXin Li #ifdef __VSX__
14063*67e74705SXin Li return __builtin_vsx_xvcmpgtsp_p(__CR6_EQ_REV, __b, __a);
14064*67e74705SXin Li #else
14065*67e74705SXin Li return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __b, __a);
14066*67e74705SXin Li #endif
14067*67e74705SXin Li }
14068*67e74705SXin Li
14069*67e74705SXin Li #ifdef __VSX__
vec_any_lt(vector double __a,vector double __b)14070*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_lt(vector double __a,
14071*67e74705SXin Li vector double __b) {
14072*67e74705SXin Li return __builtin_vsx_xvcmpgtdp_p(__CR6_EQ_REV, __b, __a);
14073*67e74705SXin Li }
14074*67e74705SXin Li #endif
14075*67e74705SXin Li
14076*67e74705SXin Li /* vec_any_nan */
14077*67e74705SXin Li
14078*67e74705SXin Li static __inline__ int __attribute__((__always_inline__))
vec_any_nan(vector float __a)14079*67e74705SXin Li vec_any_nan(vector float __a) {
14080*67e74705SXin Li return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __a);
14081*67e74705SXin Li }
14082*67e74705SXin Li
14083*67e74705SXin Li /* vec_any_ne */
14084*67e74705SXin Li
vec_any_ne(vector signed char __a,vector signed char __b)14085*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
14086*67e74705SXin Li vector signed char __b) {
14087*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
14088*67e74705SXin Li (vector char)__b);
14089*67e74705SXin Li }
14090*67e74705SXin Li
vec_any_ne(vector signed char __a,vector bool char __b)14091*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed char __a,
14092*67e74705SXin Li vector bool char __b) {
14093*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
14094*67e74705SXin Li (vector char)__b);
14095*67e74705SXin Li }
14096*67e74705SXin Li
vec_any_ne(vector unsigned char __a,vector unsigned char __b)14097*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
14098*67e74705SXin Li vector unsigned char __b) {
14099*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
14100*67e74705SXin Li (vector char)__b);
14101*67e74705SXin Li }
14102*67e74705SXin Li
vec_any_ne(vector unsigned char __a,vector bool char __b)14103*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned char __a,
14104*67e74705SXin Li vector bool char __b) {
14105*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
14106*67e74705SXin Li (vector char)__b);
14107*67e74705SXin Li }
14108*67e74705SXin Li
vec_any_ne(vector bool char __a,vector signed char __b)14109*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
14110*67e74705SXin Li vector signed char __b) {
14111*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
14112*67e74705SXin Li (vector char)__b);
14113*67e74705SXin Li }
14114*67e74705SXin Li
vec_any_ne(vector bool char __a,vector unsigned char __b)14115*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
14116*67e74705SXin Li vector unsigned char __b) {
14117*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
14118*67e74705SXin Li (vector char)__b);
14119*67e74705SXin Li }
14120*67e74705SXin Li
vec_any_ne(vector bool char __a,vector bool char __b)14121*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool char __a,
14122*67e74705SXin Li vector bool char __b) {
14123*67e74705SXin Li return __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a,
14124*67e74705SXin Li (vector char)__b);
14125*67e74705SXin Li }
14126*67e74705SXin Li
vec_any_ne(vector short __a,vector short __b)14127*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
14128*67e74705SXin Li vector short __b) {
14129*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, __b);
14130*67e74705SXin Li }
14131*67e74705SXin Li
vec_any_ne(vector short __a,vector bool short __b)14132*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector short __a,
14133*67e74705SXin Li vector bool short __b) {
14134*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, (vector short)__b);
14135*67e74705SXin Li }
14136*67e74705SXin Li
vec_any_ne(vector unsigned short __a,vector unsigned short __b)14137*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
14138*67e74705SXin Li vector unsigned short __b) {
14139*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
14140*67e74705SXin Li (vector short)__b);
14141*67e74705SXin Li }
14142*67e74705SXin Li
vec_any_ne(vector unsigned short __a,vector bool short __b)14143*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned short __a,
14144*67e74705SXin Li vector bool short __b) {
14145*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
14146*67e74705SXin Li (vector short)__b);
14147*67e74705SXin Li }
14148*67e74705SXin Li
vec_any_ne(vector bool short __a,vector short __b)14149*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
14150*67e74705SXin Li vector short __b) {
14151*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
14152*67e74705SXin Li (vector short)__b);
14153*67e74705SXin Li }
14154*67e74705SXin Li
vec_any_ne(vector bool short __a,vector unsigned short __b)14155*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
14156*67e74705SXin Li vector unsigned short __b) {
14157*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
14158*67e74705SXin Li (vector short)__b);
14159*67e74705SXin Li }
14160*67e74705SXin Li
vec_any_ne(vector bool short __a,vector bool short __b)14161*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool short __a,
14162*67e74705SXin Li vector bool short __b) {
14163*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
14164*67e74705SXin Li (vector short)__b);
14165*67e74705SXin Li }
14166*67e74705SXin Li
vec_any_ne(vector pixel __a,vector pixel __b)14167*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector pixel __a,
14168*67e74705SXin Li vector pixel __b) {
14169*67e74705SXin Li return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, (vector short)__a,
14170*67e74705SXin Li (vector short)__b);
14171*67e74705SXin Li }
14172*67e74705SXin Li
vec_any_ne(vector int __a,vector int __b)14173*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a, vector int __b) {
14174*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, __b);
14175*67e74705SXin Li }
14176*67e74705SXin Li
vec_any_ne(vector int __a,vector bool int __b)14177*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector int __a,
14178*67e74705SXin Li vector bool int __b) {
14179*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, (vector int)__b);
14180*67e74705SXin Li }
14181*67e74705SXin Li
vec_any_ne(vector unsigned int __a,vector unsigned int __b)14182*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
14183*67e74705SXin Li vector unsigned int __b) {
14184*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
14185*67e74705SXin Li (vector int)__b);
14186*67e74705SXin Li }
14187*67e74705SXin Li
vec_any_ne(vector unsigned int __a,vector bool int __b)14188*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned int __a,
14189*67e74705SXin Li vector bool int __b) {
14190*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
14191*67e74705SXin Li (vector int)__b);
14192*67e74705SXin Li }
14193*67e74705SXin Li
vec_any_ne(vector bool int __a,vector int __b)14194*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
14195*67e74705SXin Li vector int __b) {
14196*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
14197*67e74705SXin Li (vector int)__b);
14198*67e74705SXin Li }
14199*67e74705SXin Li
vec_any_ne(vector bool int __a,vector unsigned int __b)14200*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
14201*67e74705SXin Li vector unsigned int __b) {
14202*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
14203*67e74705SXin Li (vector int)__b);
14204*67e74705SXin Li }
14205*67e74705SXin Li
vec_any_ne(vector bool int __a,vector bool int __b)14206*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool int __a,
14207*67e74705SXin Li vector bool int __b) {
14208*67e74705SXin Li return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a,
14209*67e74705SXin Li (vector int)__b);
14210*67e74705SXin Li }
14211*67e74705SXin Li
14212*67e74705SXin Li #ifdef __POWER8_VECTOR__
vec_any_ne(vector signed long long __a,vector signed long long __b)14213*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
14214*67e74705SXin Li vector signed long long __b) {
14215*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a, __b);
14216*67e74705SXin Li }
14217*67e74705SXin Li
vec_any_ne(vector unsigned long long __a,vector unsigned long long __b)14218*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
14219*67e74705SXin Li vector unsigned long long __b) {
14220*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, (vector long long)__a,
14221*67e74705SXin Li (vector long long)__b);
14222*67e74705SXin Li }
14223*67e74705SXin Li
vec_any_ne(vector signed long long __a,vector bool long long __b)14224*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector signed long long __a,
14225*67e74705SXin Li vector bool long long __b) {
14226*67e74705SXin Li return __builtin_altivec_vcmpequd_p(__CR6_LT_REV, __a,
14227*67e74705SXin Li (vector signed long long)__b);
14228*67e74705SXin Li }
14229*67e74705SXin Li
vec_any_ne(vector unsigned long long __a,vector bool long long __b)14230*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector unsigned long long __a,
14231*67e74705SXin Li vector bool long long __b) {
14232*67e74705SXin Li return __builtin_altivec_vcmpequd_p(
14233*67e74705SXin Li __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b);
14234*67e74705SXin Li }
14235*67e74705SXin Li
vec_any_ne(vector bool long long __a,vector signed long long __b)14236*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
14237*67e74705SXin Li vector signed long long __b) {
14238*67e74705SXin Li return __builtin_altivec_vcmpequd_p(
14239*67e74705SXin Li __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b);
14240*67e74705SXin Li }
14241*67e74705SXin Li
vec_any_ne(vector bool long long __a,vector unsigned long long __b)14242*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
14243*67e74705SXin Li vector unsigned long long __b) {
14244*67e74705SXin Li return __builtin_altivec_vcmpequd_p(
14245*67e74705SXin Li __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b);
14246*67e74705SXin Li }
14247*67e74705SXin Li
vec_any_ne(vector bool long long __a,vector bool long long __b)14248*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector bool long long __a,
14249*67e74705SXin Li vector bool long long __b) {
14250*67e74705SXin Li return __builtin_altivec_vcmpequd_p(
14251*67e74705SXin Li __CR6_LT_REV, (vector signed long long)__a, (vector signed long long)__b);
14252*67e74705SXin Li }
14253*67e74705SXin Li #endif
14254*67e74705SXin Li
vec_any_ne(vector float __a,vector float __b)14255*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector float __a,
14256*67e74705SXin Li vector float __b) {
14257*67e74705SXin Li #ifdef __VSX__
14258*67e74705SXin Li return __builtin_vsx_xvcmpeqsp_p(__CR6_LT_REV, __a, __b);
14259*67e74705SXin Li #else
14260*67e74705SXin Li return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __b);
14261*67e74705SXin Li #endif
14262*67e74705SXin Li }
14263*67e74705SXin Li
14264*67e74705SXin Li #ifdef __VSX__
vec_any_ne(vector double __a,vector double __b)14265*67e74705SXin Li static __inline__ int __ATTRS_o_ai vec_any_ne(vector double __a,
14266*67e74705SXin Li vector double __b) {
14267*67e74705SXin Li return __builtin_vsx_xvcmpeqdp_p(__CR6_LT_REV, __a, __b);
14268*67e74705SXin Li }
14269*67e74705SXin Li #endif
14270*67e74705SXin Li
14271*67e74705SXin Li /* vec_any_nge */
14272*67e74705SXin Li
14273*67e74705SXin Li static __inline__ int __attribute__((__always_inline__))
vec_any_nge(vector float __a,vector float __b)14274*67e74705SXin Li vec_any_nge(vector float __a, vector float __b) {
14275*67e74705SXin Li return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __a, __b);
14276*67e74705SXin Li }
14277*67e74705SXin Li
14278*67e74705SXin Li /* vec_any_ngt */
14279*67e74705SXin Li
14280*67e74705SXin Li static __inline__ int __attribute__((__always_inline__))
vec_any_ngt(vector float __a,vector float __b)14281*67e74705SXin Li vec_any_ngt(vector float __a, vector float __b) {
14282*67e74705SXin Li return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __a, __b);
14283*67e74705SXin Li }
14284*67e74705SXin Li
14285*67e74705SXin Li /* vec_any_nle */
14286*67e74705SXin Li
14287*67e74705SXin Li static __inline__ int __attribute__((__always_inline__))
vec_any_nle(vector float __a,vector float __b)14288*67e74705SXin Li vec_any_nle(vector float __a, vector float __b) {
14289*67e74705SXin Li return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __b, __a);
14290*67e74705SXin Li }
14291*67e74705SXin Li
14292*67e74705SXin Li /* vec_any_nlt */
14293*67e74705SXin Li
14294*67e74705SXin Li static __inline__ int __attribute__((__always_inline__))
vec_any_nlt(vector float __a,vector float __b)14295*67e74705SXin Li vec_any_nlt(vector float __a, vector float __b) {
14296*67e74705SXin Li return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __b, __a);
14297*67e74705SXin Li }
14298*67e74705SXin Li
14299*67e74705SXin Li /* vec_any_numeric */
14300*67e74705SXin Li
14301*67e74705SXin Li static __inline__ int __attribute__((__always_inline__))
vec_any_numeric(vector float __a)14302*67e74705SXin Li vec_any_numeric(vector float __a) {
14303*67e74705SXin Li return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __a);
14304*67e74705SXin Li }
14305*67e74705SXin Li
14306*67e74705SXin Li /* vec_any_out */
14307*67e74705SXin Li
14308*67e74705SXin Li static __inline__ int __attribute__((__always_inline__))
vec_any_out(vector float __a,vector float __b)14309*67e74705SXin Li vec_any_out(vector float __a, vector float __b) {
14310*67e74705SXin Li return __builtin_altivec_vcmpbfp_p(__CR6_EQ_REV, __a, __b);
14311*67e74705SXin Li }
14312*67e74705SXin Li
14313*67e74705SXin Li /* Power 8 Crypto functions
14314*67e74705SXin Li Note: We diverge from the current GCC implementation with regard
14315*67e74705SXin Li to cryptography and related functions as follows:
14316*67e74705SXin Li - Only the SHA and AES instructions and builtins are disabled by -mno-crypto
14317*67e74705SXin Li - The remaining ones are only available on Power8 and up so
14318*67e74705SXin Li require -mpower8-vector
14319*67e74705SXin Li The justification for this is that export requirements require that
14320*67e74705SXin Li Category:Vector.Crypto is optional (i.e. compliant hardware may not provide
14321*67e74705SXin Li support). As a result, we need to be able to turn off support for those.
14322*67e74705SXin Li The remaining ones (currently controlled by -mcrypto for GCC) still
14323*67e74705SXin Li need to be provided on compliant hardware even if Vector.Crypto is not
14324*67e74705SXin Li provided.
14325*67e74705SXin Li */
14326*67e74705SXin Li #ifdef __CRYPTO__
14327*67e74705SXin Li #define vec_sbox_be __builtin_altivec_crypto_vsbox
14328*67e74705SXin Li #define vec_cipher_be __builtin_altivec_crypto_vcipher
14329*67e74705SXin Li #define vec_cipherlast_be __builtin_altivec_crypto_vcipherlast
14330*67e74705SXin Li #define vec_ncipher_be __builtin_altivec_crypto_vncipher
14331*67e74705SXin Li #define vec_ncipherlast_be __builtin_altivec_crypto_vncipherlast
14332*67e74705SXin Li
14333*67e74705SXin Li static __inline__ vector unsigned long long __attribute__((__always_inline__))
__builtin_crypto_vsbox(vector unsigned long long __a)14334*67e74705SXin Li __builtin_crypto_vsbox(vector unsigned long long __a) {
14335*67e74705SXin Li return __builtin_altivec_crypto_vsbox(__a);
14336*67e74705SXin Li }
14337*67e74705SXin Li
14338*67e74705SXin Li static __inline__ vector unsigned long long __attribute__((__always_inline__))
__builtin_crypto_vcipher(vector unsigned long long __a,vector unsigned long long __b)14339*67e74705SXin Li __builtin_crypto_vcipher(vector unsigned long long __a,
14340*67e74705SXin Li vector unsigned long long __b) {
14341*67e74705SXin Li return __builtin_altivec_crypto_vcipher(__a, __b);
14342*67e74705SXin Li }
14343*67e74705SXin Li
14344*67e74705SXin Li static __inline__ vector unsigned long long __attribute__((__always_inline__))
__builtin_crypto_vcipherlast(vector unsigned long long __a,vector unsigned long long __b)14345*67e74705SXin Li __builtin_crypto_vcipherlast(vector unsigned long long __a,
14346*67e74705SXin Li vector unsigned long long __b) {
14347*67e74705SXin Li return __builtin_altivec_crypto_vcipherlast(__a, __b);
14348*67e74705SXin Li }
14349*67e74705SXin Li
14350*67e74705SXin Li static __inline__ vector unsigned long long __attribute__((__always_inline__))
__builtin_crypto_vncipher(vector unsigned long long __a,vector unsigned long long __b)14351*67e74705SXin Li __builtin_crypto_vncipher(vector unsigned long long __a,
14352*67e74705SXin Li vector unsigned long long __b) {
14353*67e74705SXin Li return __builtin_altivec_crypto_vncipher(__a, __b);
14354*67e74705SXin Li }
14355*67e74705SXin Li
14356*67e74705SXin Li static __inline__ vector unsigned long long __attribute__((__always_inline__))
__builtin_crypto_vncipherlast(vector unsigned long long __a,vector unsigned long long __b)14357*67e74705SXin Li __builtin_crypto_vncipherlast(vector unsigned long long __a,
14358*67e74705SXin Li vector unsigned long long __b) {
14359*67e74705SXin Li return __builtin_altivec_crypto_vncipherlast(__a, __b);
14360*67e74705SXin Li }
14361*67e74705SXin Li
14362*67e74705SXin Li #define __builtin_crypto_vshasigmad __builtin_altivec_crypto_vshasigmad
14363*67e74705SXin Li #define __builtin_crypto_vshasigmaw __builtin_altivec_crypto_vshasigmaw
14364*67e74705SXin Li
14365*67e74705SXin Li #define vec_shasigma_be(X, Y, Z) \
14366*67e74705SXin Li _Generic((X), vector unsigned int \
14367*67e74705SXin Li : __builtin_crypto_vshasigmaw, vector unsigned long long \
14368*67e74705SXin Li : __builtin_crypto_vshasigmad)((X), (Y), (Z))
14369*67e74705SXin Li #endif
14370*67e74705SXin Li
14371*67e74705SXin Li #ifdef __POWER8_VECTOR__
14372*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
__builtin_crypto_vpermxor(vector unsigned char __a,vector unsigned char __b,vector unsigned char __c)14373*67e74705SXin Li __builtin_crypto_vpermxor(vector unsigned char __a, vector unsigned char __b,
14374*67e74705SXin Li vector unsigned char __c) {
14375*67e74705SXin Li return __builtin_altivec_crypto_vpermxor(__a, __b, __c);
14376*67e74705SXin Li }
14377*67e74705SXin Li
14378*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
__builtin_crypto_vpermxor(vector unsigned short __a,vector unsigned short __b,vector unsigned short __c)14379*67e74705SXin Li __builtin_crypto_vpermxor(vector unsigned short __a, vector unsigned short __b,
14380*67e74705SXin Li vector unsigned short __c) {
14381*67e74705SXin Li return (vector unsigned short)__builtin_altivec_crypto_vpermxor(
14382*67e74705SXin Li (vector unsigned char)__a, (vector unsigned char)__b,
14383*67e74705SXin Li (vector unsigned char)__c);
14384*67e74705SXin Li }
14385*67e74705SXin Li
__builtin_crypto_vpermxor(vector unsigned int __a,vector unsigned int __b,vector unsigned int __c)14386*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai __builtin_crypto_vpermxor(
14387*67e74705SXin Li vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) {
14388*67e74705SXin Li return (vector unsigned int)__builtin_altivec_crypto_vpermxor(
14389*67e74705SXin Li (vector unsigned char)__a, (vector unsigned char)__b,
14390*67e74705SXin Li (vector unsigned char)__c);
14391*67e74705SXin Li }
14392*67e74705SXin Li
14393*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
__builtin_crypto_vpermxor(vector unsigned long long __a,vector unsigned long long __b,vector unsigned long long __c)14394*67e74705SXin Li __builtin_crypto_vpermxor(vector unsigned long long __a,
14395*67e74705SXin Li vector unsigned long long __b,
14396*67e74705SXin Li vector unsigned long long __c) {
14397*67e74705SXin Li return (vector unsigned long long)__builtin_altivec_crypto_vpermxor(
14398*67e74705SXin Li (vector unsigned char)__a, (vector unsigned char)__b,
14399*67e74705SXin Li (vector unsigned char)__c);
14400*67e74705SXin Li }
14401*67e74705SXin Li
14402*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
__builtin_crypto_vpmsumb(vector unsigned char __a,vector unsigned char __b)14403*67e74705SXin Li __builtin_crypto_vpmsumb(vector unsigned char __a, vector unsigned char __b) {
14404*67e74705SXin Li return __builtin_altivec_crypto_vpmsumb(__a, __b);
14405*67e74705SXin Li }
14406*67e74705SXin Li
14407*67e74705SXin Li static __inline__ vector unsigned short __ATTRS_o_ai
__builtin_crypto_vpmsumb(vector unsigned short __a,vector unsigned short __b)14408*67e74705SXin Li __builtin_crypto_vpmsumb(vector unsigned short __a, vector unsigned short __b) {
14409*67e74705SXin Li return __builtin_altivec_crypto_vpmsumh(__a, __b);
14410*67e74705SXin Li }
14411*67e74705SXin Li
14412*67e74705SXin Li static __inline__ vector unsigned int __ATTRS_o_ai
__builtin_crypto_vpmsumb(vector unsigned int __a,vector unsigned int __b)14413*67e74705SXin Li __builtin_crypto_vpmsumb(vector unsigned int __a, vector unsigned int __b) {
14414*67e74705SXin Li return __builtin_altivec_crypto_vpmsumw(__a, __b);
14415*67e74705SXin Li }
14416*67e74705SXin Li
14417*67e74705SXin Li static __inline__ vector unsigned long long __ATTRS_o_ai
__builtin_crypto_vpmsumb(vector unsigned long long __a,vector unsigned long long __b)14418*67e74705SXin Li __builtin_crypto_vpmsumb(vector unsigned long long __a,
14419*67e74705SXin Li vector unsigned long long __b) {
14420*67e74705SXin Li return __builtin_altivec_crypto_vpmsumd(__a, __b);
14421*67e74705SXin Li }
14422*67e74705SXin Li
14423*67e74705SXin Li static __inline__ vector signed char __ATTRS_o_ai
vec_vgbbd(vector signed char __a)14424*67e74705SXin Li vec_vgbbd(vector signed char __a) {
14425*67e74705SXin Li return __builtin_altivec_vgbbd((vector unsigned char)__a);
14426*67e74705SXin Li }
14427*67e74705SXin Li
14428*67e74705SXin Li #define vec_pmsum_be __builtin_crypto_vpmsumb
14429*67e74705SXin Li #define vec_gb __builtin_altivec_vgbbd
14430*67e74705SXin Li
14431*67e74705SXin Li static __inline__ vector unsigned char __ATTRS_o_ai
vec_vgbbd(vector unsigned char __a)14432*67e74705SXin Li vec_vgbbd(vector unsigned char __a) {
14433*67e74705SXin Li return __builtin_altivec_vgbbd(__a);
14434*67e74705SXin Li }
14435*67e74705SXin Li
14436*67e74705SXin Li static __inline__ vector long long __ATTRS_o_ai
vec_vbpermq(vector signed char __a,vector signed char __b)14437*67e74705SXin Li vec_vbpermq(vector signed char __a, vector signed char __b) {
14438*67e74705SXin Li return __builtin_altivec_vbpermq((vector unsigned char)__a,
14439*67e74705SXin Li (vector unsigned char)__b);
14440*67e74705SXin Li }
14441*67e74705SXin Li
14442*67e74705SXin Li static __inline__ vector long long __ATTRS_o_ai
vec_vbpermq(vector unsigned char __a,vector unsigned char __b)14443*67e74705SXin Li vec_vbpermq(vector unsigned char __a, vector unsigned char __b) {
14444*67e74705SXin Li return __builtin_altivec_vbpermq(__a, __b);
14445*67e74705SXin Li }
14446*67e74705SXin Li
14447*67e74705SXin Li #ifdef __powerpc64__
14448*67e74705SXin Li static __inline__ vector unsigned long long __attribute__((__always_inline__))
vec_bperm(vector unsigned __int128 __a,vector unsigned char __b)14449*67e74705SXin Li vec_bperm(vector unsigned __int128 __a, vector unsigned char __b) {
14450*67e74705SXin Li return __builtin_altivec_vbpermq((vector unsigned char)__a,
14451*67e74705SXin Li (vector unsigned char)__b);
14452*67e74705SXin Li }
14453*67e74705SXin Li #endif
14454*67e74705SXin Li #endif
14455*67e74705SXin Li
14456*67e74705SXin Li #undef __ATTRS_o_ai
14457*67e74705SXin Li
14458*67e74705SXin Li #endif /* __ALTIVEC_H */
14459