altivec.h revision 132718
1/* PowerPC AltiVec include file.
2   Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
3   Contributed by Aldy Hernandez (aldyh@redhat.com).
4
5   This file is part of GCC.
6
7   GCC is free software; you can redistribute it and/or modify it
8   under the terms of the GNU General Public License as published
9   by the Free Software Foundation; either version 2, or (at your
10   option) any later version.
11
12   GCC is distributed in the hope that it will be useful, but WITHOUT
13   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
15   License for more details.
16
17   You should have received a copy of the GNU General Public License
18   along with GCC; see the file COPYING.  If not, write to the
19   Free Software Foundation, 59 Temple Place - Suite 330, Boston,
20   MA 02111-1307, USA.  */
21
22/* As a special exception, if you include this header file into source
23   files compiled by GCC, this header file does not by itself cause
24   the resulting executable to be covered by the GNU General Public
25   License.  This exception does not however invalidate any other
26   reasons why the executable file might be covered by the GNU General
27   Public License.  */
28
29/* Implemented to conform to the specification included in the AltiVec
30   Technology Programming Interface Manual (ALTIVECPIM/D 6/1999 Rev 0).  */
31
32#ifndef _ALTIVEC_H
33#define _ALTIVEC_H 1
34
35/* Required by Motorola specs.  */
36#define __VEC__ 10206
37
38#ifndef __ALTIVEC__
39#define __ALTIVEC__ 1
40#endif
41
42#define __vector __attribute__((vector_size(16)))
43
44/* You are allowed to undef this for C++ compatibility.  */
45#define vector __vector
46
47#define bool signed
48#define pixel unsigned short
49#define __pixel unsigned short
50
51/* Dummy prototype.  */
52extern int __altivec_link_error_invalid_argument ();
53
54/* Helper macros.  */
55
56#define __CR6_EQ		0
57#define __CR6_EQ_REV		1
58#define __CR6_LT		2
59#define __CR6_LT_REV		3
60
61#define __bin_args_eq(xtype, x, ytype, y)				\
62	(__builtin_types_compatible_p (xtype, typeof (x))		\
63	 && __builtin_types_compatible_p (ytype, typeof (y)))
64
65#define __un_args_eq(xtype, x)						\
66	__builtin_types_compatible_p (xtype, typeof (x))
67
68#define __tern_args_eq(xtype, x, ytype, y, ztype, z)                    \
69        (__builtin_types_compatible_p (xtype, typeof (x))               \
70         && __builtin_types_compatible_p (ytype, typeof (y))		\
71	 && __builtin_types_compatible_p (ztype, typeof (z)))
72
73#define __ch(x, y, z)	__builtin_choose_expr (x, y, z)
74
75/* These are easy... Same exact arguments.  */
76
77#define vec_vaddcuw vec_addc
78#define vec_vand vec_and
79#define vec_vandc vec_andc
80#define vec_vrfip vec_ceil
81#define vec_vcmpbfp vec_cmpb
82#define vec_vcmpgefp vec_cmpge
83#define vec_vctsxs vec_cts
84#define vec_vctuxs vec_ctu
85#define vec_vexptefp vec_expte
86#define vec_vrfim vec_floor
87#define vec_lvx vec_ld
88#define vec_lvxl vec_ldl
89#define vec_vlogefp vec_loge
90#define vec_vmaddfp vec_madd
91#define vec_vmhaddshs vec_madds
92#define vec_vmladduhm vec_mladd
93#define vec_vmhraddshs vec_mradds
94#define vec_vnmsubfp vec_nmsub
95#define vec_vnor vec_nor
96#define vec_vor vec_or
97#define vec_vpkpx vec_packpx
98#define vec_vperm vec_perm
99#define vec_vrefp vec_re
100#define vec_vrfin vec_round
101#define vec_vrsqrtefp vec_rsqrte
102#define vec_vsel vec_sel
103#define vec_vsldoi vec_sld
104#define vec_vsl vec_sll
105#define vec_vslo vec_slo
106#define vec_vspltisb vec_splat_s8
107#define vec_vspltish vec_splat_s16
108#define vec_vspltisw vec_splat_s32
109#define vec_vsr vec_srl
110#define vec_vsro vec_sro
111#define vec_stvx vec_st
112#define vec_stvxl vec_stl
113#define vec_vsubcuw vec_subc
114#define vec_vsum2sws vec_sum2s
115#define vec_vsumsws vec_sums
116#define vec_vrfiz vec_trunc
117#define vec_vxor vec_xor
118
119#ifdef __cplusplus
120
121extern "C++" {
122
123/* Prototypes for builtins that take literals and must always be
124   inlined.  */
125inline vector float vec_ctf (vector unsigned int, const char) __attribute__ ((always_inline));
126inline vector float vec_ctf (vector signed int, const char) __attribute__ ((always_inline));
127inline vector float vec_vcfsx (vector signed int a1, const char a2) __attribute__ ((always_inline));
128inline vector float vec_vcfux (vector unsigned int a1, const char a2) __attribute__ ((always_inline));
129inline vector signed int vec_cts (vector float, const char) __attribute__ ((always_inline));
130inline vector unsigned int vec_ctu (vector float, const char) __attribute__ ((always_inline));
131inline void vec_dss (const char) __attribute__ ((always_inline));
132
133inline void vec_dst (vector unsigned char *, int, const char) __attribute__ ((always_inline));
134inline void vec_dst (vector signed char *, int, const char) __attribute__ ((always_inline));
135inline void vec_dst (vector unsigned short *, int, const char) __attribute__ ((always_inline));
136inline void vec_dst (vector signed short *, int, const char) __attribute__ ((always_inline));
137inline void vec_dst (vector unsigned int *, int, const char) __attribute__ ((always_inline));
138inline void vec_dst (vector signed int *, int, const char) __attribute__ ((always_inline));
139inline void vec_dst (vector float *, int, const char) __attribute__ ((always_inline));
140inline void vec_dst (unsigned char *, int, const char) __attribute__ ((always_inline));
141inline void vec_dst (signed char *, int, const char) __attribute__ ((always_inline));
142inline void vec_dst (unsigned short *, int, const char) __attribute__ ((always_inline));
143inline void vec_dst (signed short *, int, const char) __attribute__ ((always_inline));
144inline void vec_dst (unsigned int *, int, const char) __attribute__ ((always_inline));
145inline void vec_dst (signed int *, int, const char) __attribute__ ((always_inline));
146inline void vec_dst (unsigned long *, int, const char) __attribute__ ((always_inline));
147inline void vec_dst (signed long *, int, const char) __attribute__ ((always_inline));
148inline void vec_dst (float *, int, const char) __attribute__ ((always_inline));
149
150inline void vec_dstst (vector unsigned char *, int, const char) __attribute__ ((always_inline));
151inline void vec_dstst (vector signed char *, int, const char) __attribute__ ((always_inline));
152inline void vec_dstst (vector unsigned short *, int, const char) __attribute__ ((always_inline));
153inline void vec_dstst (vector signed short *, int, const char) __attribute__ ((always_inline));
154inline void vec_dstst (vector unsigned int *, int, const char) __attribute__ ((always_inline));
155inline void vec_dstst (vector signed int *, int, const char) __attribute__ ((always_inline));
156inline void vec_dstst (vector float *, int, const char) __attribute__ ((always_inline));
157inline void vec_dstst (unsigned char *, int, const char) __attribute__ ((always_inline));
158inline void vec_dstst (signed char *, int, const char) __attribute__ ((always_inline));
159inline void vec_dstst (unsigned short *, int, const char) __attribute__ ((always_inline));
160inline void vec_dstst (signed short *, int, const char) __attribute__ ((always_inline));
161inline void vec_dstst (unsigned int *, int, const char) __attribute__ ((always_inline));
162inline void vec_dstst (signed int *, int, const char) __attribute__ ((always_inline));
163inline void vec_dstst (unsigned long *, int, const char) __attribute__ ((always_inline));
164inline void vec_dstst (signed long *, int, const char) __attribute__ ((always_inline));
165inline void vec_dstst (float *, int, const char) __attribute__ ((always_inline));
166
167inline void vec_dststt (vector unsigned char *, int, const char) __attribute__ ((always_inline));
168inline void vec_dststt (vector signed char *, int, const char) __attribute__ ((always_inline));
169inline void vec_dststt (vector unsigned short *, int, const char) __attribute__ ((always_inline));
170inline void vec_dststt (vector signed short *, int, const char) __attribute__ ((always_inline));
171inline void vec_dststt (vector unsigned int *, int, const char) __attribute__ ((always_inline));
172inline void vec_dststt (vector signed int *, int, const char) __attribute__ ((always_inline));
173inline void vec_dststt (vector float *, int, const char) __attribute__ ((always_inline));
174inline void vec_dststt (unsigned char *, int, const char) __attribute__ ((always_inline));
175inline void vec_dststt (signed char *, int, const char) __attribute__ ((always_inline));
176inline void vec_dststt (unsigned short *, int, const char) __attribute__ ((always_inline));
177inline void vec_dststt (signed short *, int, const char) __attribute__ ((always_inline));
178inline void vec_dststt (unsigned int *, int, const char) __attribute__ ((always_inline));
179inline void vec_dststt (signed int *, int, const char) __attribute__ ((always_inline));
180inline void vec_dststt (unsigned long *, int, const char) __attribute__ ((always_inline));
181inline void vec_dststt (signed long *, int, const char) __attribute__ ((always_inline));
182inline void vec_dststt (float *, int, const char) __attribute__ ((always_inline));
183
184inline void vec_dstt (vector unsigned char *, int, const char) __attribute__ ((always_inline));
185inline void vec_dstt (vector signed char *, int, const char) __attribute__ ((always_inline));
186inline void vec_dstt (vector unsigned short *, int, const char) __attribute__ ((always_inline));
187inline void vec_dstt (vector signed short *, int, const char) __attribute__ ((always_inline));
188inline void vec_dstt (vector unsigned int *, int, const char) __attribute__ ((always_inline));
189inline void vec_dstt (vector signed int *, int, const char) __attribute__ ((always_inline));
190inline void vec_dstt (vector float *, int, const char) __attribute__ ((always_inline));
191inline void vec_dstt (unsigned char *, int, const char) __attribute__ ((always_inline));
192inline void vec_dstt (signed char *, int, const char) __attribute__ ((always_inline));
193inline void vec_dstt (unsigned short *, int, const char) __attribute__ ((always_inline));
194inline void vec_dstt (signed short *, int, const char) __attribute__ ((always_inline));
195inline void vec_dstt (unsigned int *, int, const char) __attribute__ ((always_inline));
196inline void vec_dstt (signed int *, int, const char) __attribute__ ((always_inline));
197inline void vec_dstt (unsigned long *, int, const char) __attribute__ ((always_inline));
198inline void vec_dstt (signed long *, int, const char) __attribute__ ((always_inline));
199inline void vec_dstt (float *, int, const char) __attribute__ ((always_inline));
200
201inline vector float vec_sld (vector float, vector float, const char) __attribute__ ((always_inline));
202inline vector signed int vec_sld (vector signed int, vector signed int, const char) __attribute__ ((always_inline));
203inline vector unsigned int vec_sld (vector unsigned int, vector unsigned int, const char) __attribute__ ((always_inline));
204inline vector signed short vec_sld (vector signed short, vector signed short, const char) __attribute__ ((always_inline));
205inline vector unsigned short vec_sld (vector unsigned short, vector unsigned short, const char) __attribute__ ((always_inline));
206inline vector signed char vec_sld (vector signed char, vector signed char, const char) __attribute__ ((always_inline));
207inline vector unsigned char vec_sld (vector unsigned char, vector unsigned char, const char) __attribute__ ((always_inline));
208inline vector signed char vec_splat (vector signed char, const char) __attribute__ ((always_inline));
209inline vector unsigned char vec_splat (vector unsigned char, const char) __attribute__ ((always_inline));
210inline vector signed short vec_splat (vector signed short, const char) __attribute__ ((always_inline));
211inline vector unsigned short vec_splat (vector unsigned short, const char) __attribute__ ((always_inline));
212inline vector float vec_splat (vector float, const char) __attribute__ ((always_inline));
213inline vector signed int vec_splat (vector signed int, const char) __attribute__ ((always_inline));
214inline vector unsigned int vec_splat (vector unsigned int, const char) __attribute__ ((always_inline));
215inline vector signed char vec_splat_s8 (const char) __attribute__ ((always_inline));
216inline vector signed short vec_splat_s16 (const char) __attribute__ ((always_inline));
217inline vector signed int vec_splat_s32 (const char) __attribute__ ((always_inline));
218inline vector unsigned char vec_splat_u8 (const char) __attribute__ ((always_inline));
219inline vector unsigned short vec_splat_u16 (const char) __attribute__ ((always_inline));
220inline vector unsigned int vec_splat_u32 (const char) __attribute__ ((always_inline));
221inline vector float vec_vspltw (vector float a1, const char a2) __attribute__ ((always_inline));
222inline vector signed int vec_vspltw (vector signed int a1, const char a2) __attribute__ ((always_inline));
223inline vector unsigned int vec_vspltw (vector unsigned int a1, const char a2) __attribute__ ((always_inline));
224inline vector signed short vec_vsplth (vector signed short a1, const char a2) __attribute__ ((always_inline));
225inline vector unsigned short vec_vsplth (vector unsigned short a1, const char a2) __attribute__ ((always_inline));
226inline vector signed char vec_vspltb (vector signed char a1, const char a2) __attribute__ ((always_inline));
227inline vector unsigned char vec_vspltb (vector unsigned char a1, const char a2) __attribute__ ((always_inline));
228
229/* vec_abs */
230
231inline vector signed char
232vec_abs (vector signed char a1)
233{
234  return __builtin_altivec_abs_v16qi (a1);
235}
236
237inline vector signed short
238vec_abs (vector signed short a1)
239{
240  return __builtin_altivec_abs_v8hi (a1);
241}
242
243inline vector signed int
244vec_abs (vector signed int a1)
245{
246  return __builtin_altivec_abs_v4si (a1);
247}
248
249inline vector float
250vec_abs (vector float a1)
251{
252  return __builtin_altivec_abs_v4sf (a1);
253}
254
255/* vec_abss */
256
257inline vector signed char
258vec_abss (vector signed char a1)
259{
260  return __builtin_altivec_abss_v16qi (a1);
261}
262
263inline vector signed short
264vec_abss (vector signed short a1)
265{
266  return __builtin_altivec_abss_v8hi (a1);
267}
268
269inline vector signed int
270vec_abss (vector signed int a1)
271{
272  return __builtin_altivec_abss_v4si (a1);
273}
274
275/* vec_add */
276
277inline vector signed char
278vec_add (vector signed char a1, vector signed char a2)
279{
280  return (vector signed char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
281}
282
283inline vector unsigned char
284vec_add (vector signed char a1, vector unsigned char a2)
285{
286  return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
287}
288
289inline vector unsigned char
290vec_add (vector unsigned char a1, vector signed char a2)
291{
292  return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
293}
294
295inline vector unsigned char
296vec_add (vector unsigned char a1, vector unsigned char a2)
297{
298  return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
299}
300
301inline vector signed short
302vec_add (vector signed short a1, vector signed short a2)
303{
304  return (vector signed short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
305}
306
307inline vector unsigned short
308vec_add (vector signed short a1, vector unsigned short a2)
309{
310  return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
311}
312
313inline vector unsigned short
314vec_add (vector unsigned short a1, vector signed short a2)
315{
316  return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
317}
318
319inline vector unsigned short
320vec_add (vector unsigned short a1, vector unsigned short a2)
321{
322  return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
323}
324
325inline vector signed int
326vec_add (vector signed int a1, vector signed int a2)
327{
328  return (vector signed int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
329}
330
331inline vector unsigned int
332vec_add (vector signed int a1, vector unsigned int a2)
333{
334  return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
335}
336
337inline vector unsigned int
338vec_add (vector unsigned int a1, vector signed int a2)
339{
340  return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
341}
342
343inline vector unsigned int
344vec_add (vector unsigned int a1, vector unsigned int a2)
345{
346  return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
347}
348
349inline vector float
350vec_add (vector float a1, vector float a2)
351{
352  return (vector float) __builtin_altivec_vaddfp ((vector float) a1, (vector float) a2);
353}
354
355/* vec_vaddfp */
356
357inline vector float
358vec_vaddfp (vector float a1, vector float a2)
359{
360  return (vector float) __builtin_altivec_vaddfp ((vector float) a1, (vector float) a2);
361}
362
363/* vec_vadduwm */
364
365inline vector signed int
366vec_vadduwm (vector signed int a1, vector signed int a2)
367{
368  return (vector signed int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
369}
370
371inline vector unsigned int
372vec_vadduwm (vector signed int a1, vector unsigned int a2)
373{
374  return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
375}
376
377inline vector unsigned int
378vec_vadduwm (vector unsigned int a1, vector signed int a2)
379{
380  return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
381}
382
383inline vector unsigned int
384vec_vadduwm (vector unsigned int a1, vector unsigned int a2)
385{
386  return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
387}
388
389/* vec_vadduhm */
390
391inline vector signed short
392vec_vadduhm (vector signed short a1, vector signed short a2)
393{
394  return (vector signed short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
395}
396
397inline vector unsigned short
398vec_vadduhm (vector signed short a1, vector unsigned short a2)
399{
400  return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
401}
402
403inline vector unsigned short
404vec_vadduhm (vector unsigned short a1, vector signed short a2)
405{
406  return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
407}
408
409inline vector unsigned short
410vec_vadduhm (vector unsigned short a1, vector unsigned short a2)
411{
412  return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
413}
414
415/* vec_vaddubm */
416
417inline vector signed char
418vec_vaddubm (vector signed char a1, vector signed char a2)
419{
420  return (vector signed char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
421}
422
423inline vector unsigned char
424vec_vaddubm (vector signed char a1, vector unsigned char a2)
425{
426  return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
427}
428
429inline vector unsigned char
430vec_vaddubm (vector unsigned char a1, vector signed char a2)
431{
432  return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
433}
434
435inline vector unsigned char
436vec_vaddubm (vector unsigned char a1, vector unsigned char a2)
437{
438  return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
439}
440
441/* vec_addc */
442
443inline vector unsigned int
444vec_addc (vector unsigned int a1, vector unsigned int a2)
445{
446  return (vector unsigned int) __builtin_altivec_vaddcuw ((vector signed int) a1, (vector signed int) a2);
447}
448
449/* vec_adds */
450
451inline vector unsigned char
452vec_adds (vector signed char a1, vector unsigned char a2)
453{
454  return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
455}
456
457inline vector unsigned char
458vec_adds (vector unsigned char a1, vector signed char a2)
459{
460  return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
461}
462
463inline vector unsigned char
464vec_adds (vector unsigned char a1, vector unsigned char a2)
465{
466  return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
467}
468
469inline vector signed char
470vec_adds (vector signed char a1, vector signed char a2)
471{
472  return (vector signed char) __builtin_altivec_vaddsbs ((vector signed char) a1, (vector signed char) a2);
473}
474
475inline vector unsigned short
476vec_adds (vector signed short a1, vector unsigned short a2)
477{
478  return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
479}
480
481inline vector unsigned short
482vec_adds (vector unsigned short a1, vector signed short a2)
483{
484  return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
485}
486
487inline vector unsigned short
488vec_adds (vector unsigned short a1, vector unsigned short a2)
489{
490  return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
491}
492
493inline vector signed short
494vec_adds (vector signed short a1, vector signed short a2)
495{
496  return (vector signed short) __builtin_altivec_vaddshs ((vector signed short) a1, (vector signed short) a2);
497}
498
499inline vector unsigned int
500vec_adds (vector signed int a1, vector unsigned int a2)
501{
502  return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
503}
504
505inline vector unsigned int
506vec_adds (vector unsigned int a1, vector signed int a2)
507{
508  return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
509}
510
511inline vector unsigned int
512vec_adds (vector unsigned int a1, vector unsigned int a2)
513{
514  return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
515}
516
517inline vector signed int
518vec_adds (vector signed int a1, vector signed int a2)
519{
520  return (vector signed int) __builtin_altivec_vaddsws ((vector signed int) a1, (vector signed int) a2);
521}
522
523/* vec_vaddsws */
524
525inline vector signed int
526vec_vaddsws (vector signed int a1, vector signed int a2)
527{
528  return (vector signed int) __builtin_altivec_vaddsws ((vector signed int) a1, (vector signed int) a2);
529}
530
531/* vec_vadduws */
532
533inline vector unsigned int
534vec_vadduws (vector signed int a1, vector unsigned int a2)
535{
536  return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
537}
538
539inline vector unsigned int
540vec_vadduws (vector unsigned int a1, vector signed int a2)
541{
542  return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
543}
544
545inline vector unsigned int
546vec_vadduws (vector unsigned int a1, vector unsigned int a2)
547{
548  return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
549}
550
551/* vec_vaddshs */
552inline vector signed short
553vec_vaddshs (vector signed short a1, vector signed short a2)
554{
555  return (vector signed short) __builtin_altivec_vaddshs ((vector signed short) a1, (vector signed short) a2);
556}
557
558/* vec_vadduhs */
559
560inline vector unsigned short
561vec_vadduhs (vector signed short a1, vector unsigned short a2)
562{
563  return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
564}
565
566inline vector unsigned short
567vec_vadduhs (vector unsigned short a1, vector signed short a2)
568{
569  return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
570}
571
572inline vector unsigned short
573vec_vadduhs (vector unsigned short a1, vector unsigned short a2)
574{
575  return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
576}
577
578/* vec_vaddsbs */
579
580inline vector signed char
581vec_vaddsbs (vector signed char a1, vector signed char a2)
582{
583  return (vector signed char) __builtin_altivec_vaddsbs ((vector signed char) a1, (vector signed char) a2);
584}
585
586/* vec_vaddubs */
587
588inline vector unsigned char
589vec_vaddubs (vector signed char a1, vector unsigned char a2)
590{
591  return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
592}
593
594inline vector unsigned char
595vec_vaddubs (vector unsigned char a1, vector signed char a2)
596{
597  return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
598}
599
600inline vector unsigned char
601vec_vaddubs (vector unsigned char a1, vector unsigned char a2)
602{
603  return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
604}
605
606/* vec_and */
607
608inline vector float
609vec_and (vector float a1, vector float a2)
610{
611  return (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
612}
613
614inline vector float
615vec_and (vector float a1, vector signed int a2)
616{
617  return (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
618}
619
620inline vector float
621vec_and (vector signed int a1, vector float a2)
622{
623  return (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
624}
625
626inline vector signed int
627vec_and (vector signed int a1, vector signed int a2)
628{
629  return (vector signed int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
630}
631
632inline vector unsigned int
633vec_and (vector signed int a1, vector unsigned int a2)
634{
635  return (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
636}
637
638inline vector unsigned int
639vec_and (vector unsigned int a1, vector signed int a2)
640{
641  return (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
642}
643
644inline vector unsigned int
645vec_and (vector unsigned int a1, vector unsigned int a2)
646{
647  return (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
648}
649
650inline vector signed short
651vec_and (vector signed short a1, vector signed short a2)
652{
653  return (vector signed short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
654}
655
656inline vector unsigned short
657vec_and (vector signed short a1, vector unsigned short a2)
658{
659  return (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
660}
661
662inline vector unsigned short
663vec_and (vector unsigned short a1, vector signed short a2)
664{
665  return (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
666}
667
668inline vector unsigned short
669vec_and (vector unsigned short a1, vector unsigned short a2)
670{
671  return (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
672}
673
674inline vector signed char
675vec_and (vector signed char a1, vector signed char a2)
676{
677  return (vector signed char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
678}
679
680inline vector unsigned char
681vec_and (vector signed char a1, vector unsigned char a2)
682{
683  return (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
684}
685
686inline vector unsigned char
687vec_and (vector unsigned char a1, vector signed char a2)
688{
689  return (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
690}
691
692inline vector unsigned char
693vec_and (vector unsigned char a1, vector unsigned char a2)
694{
695  return (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
696}
697
698/* vec_andc */
699
700inline vector float
701vec_andc (vector float a1, vector float a2)
702{
703  return (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
704}
705
706inline vector float
707vec_andc (vector float a1, vector signed int a2)
708{
709  return (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
710}
711
712inline vector float
713vec_andc (vector signed int a1, vector float a2)
714{
715  return (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
716}
717
718inline vector signed int
719vec_andc (vector signed int a1, vector signed int a2)
720{
721  return (vector signed int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
722}
723
724inline vector unsigned int
725vec_andc (vector signed int a1, vector unsigned int a2)
726{
727  return (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
728}
729
730inline vector unsigned int
731vec_andc (vector unsigned int a1, vector signed int a2)
732{
733  return (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
734}
735
736inline vector unsigned int
737vec_andc (vector unsigned int a1, vector unsigned int a2)
738{
739  return (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
740}
741
742inline vector signed short
743vec_andc (vector signed short a1, vector signed short a2)
744{
745  return (vector signed short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
746}
747
748inline vector unsigned short
749vec_andc (vector signed short a1, vector unsigned short a2)
750{
751  return (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
752}
753
754inline vector unsigned short
755vec_andc (vector unsigned short a1, vector signed short a2)
756{
757  return (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
758}
759
760inline vector unsigned short
761vec_andc (vector unsigned short a1, vector unsigned short a2)
762{
763  return (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
764}
765
766inline vector signed char
767vec_andc (vector signed char a1, vector signed char a2)
768{
769  return (vector signed char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
770}
771
772inline vector unsigned char
773vec_andc (vector signed char a1, vector unsigned char a2)
774{
775  return (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
776}
777
778inline vector unsigned char
779vec_andc (vector unsigned char a1, vector signed char a2)
780{
781  return (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
782}
783
784inline vector unsigned char
785vec_andc (vector unsigned char a1, vector unsigned char a2)
786{
787  return (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
788}
789
790/* vec_avg */
791
792inline vector unsigned char
793vec_avg (vector unsigned char a1, vector unsigned char a2)
794{
795  return (vector unsigned char) __builtin_altivec_vavgub ((vector signed char) a1, (vector signed char) a2);
796}
797
798inline vector signed char
799vec_avg (vector signed char a1, vector signed char a2)
800{
801  return (vector signed char) __builtin_altivec_vavgsb ((vector signed char) a1, (vector signed char) a2);
802}
803
804inline vector unsigned short
805vec_avg (vector unsigned short a1, vector unsigned short a2)
806{
807  return (vector unsigned short) __builtin_altivec_vavguh ((vector signed short) a1, (vector signed short) a2);
808}
809
810inline vector signed short
811vec_avg (vector signed short a1, vector signed short a2)
812{
813  return (vector signed short) __builtin_altivec_vavgsh ((vector signed short) a1, (vector signed short) a2);
814}
815
816inline vector unsigned int
817vec_avg (vector unsigned int a1, vector unsigned int a2)
818{
819  return (vector unsigned int) __builtin_altivec_vavguw ((vector signed int) a1, (vector signed int) a2);
820}
821
822inline vector signed int
823vec_avg (vector signed int a1, vector signed int a2)
824{
825  return (vector signed int) __builtin_altivec_vavgsw ((vector signed int) a1, (vector signed int) a2);
826}
827
828/* vec_vavgsw */
829
830inline vector signed int
831vec_vavgsw (vector signed int a1, vector signed int a2)
832{
833  return (vector signed int) __builtin_altivec_vavgsw ((vector signed int) a1, (vector signed int) a2);
834}
835
836/* vec_vavguw */
837
838inline vector unsigned int
839vec_vavguw (vector unsigned int a1, vector unsigned int a2)
840{
841  return (vector unsigned int) __builtin_altivec_vavguw ((vector signed int) a1, (vector signed int) a2);
842}
843
844/* vec_vavgsh */
845
846inline vector signed short
847vec_vavgsh (vector signed short a1, vector signed short a2)
848{
849  return (vector signed short) __builtin_altivec_vavgsh ((vector signed short) a1, (vector signed short) a2);
850}
851
852/* vec_vavguh */
853
854inline vector unsigned short
855vec_vavguh (vector unsigned short a1, vector unsigned short a2)
856{
857  return (vector unsigned short) __builtin_altivec_vavguh ((vector signed short) a1, (vector signed short) a2);
858}
859
860/* vec_vavgsb */
861
862inline vector signed char
863vec_vavgsb (vector signed char a1, vector signed char a2)
864{
865  return (vector signed char) __builtin_altivec_vavgsb ((vector signed char) a1, (vector signed char) a2);
866}
867
868/* vec_vavgub */
869
870inline vector unsigned char
871vec_vavgub (vector unsigned char a1, vector unsigned char a2)
872{
873  return (vector unsigned char) __builtin_altivec_vavgub ((vector signed char) a1, (vector signed char) a2);
874}
875
876/* vec_ceil */
877
878inline vector float
879vec_ceil (vector float a1)
880{
881  return (vector float) __builtin_altivec_vrfip ((vector float) a1);
882}
883
884/* vec_cmpb */
885
886inline vector signed int
887vec_cmpb (vector float a1, vector float a2)
888{
889  return (vector signed int) __builtin_altivec_vcmpbfp ((vector float) a1, (vector float) a2);
890}
891
892/* vec_cmpeq */
893
894inline vector signed char
895vec_cmpeq (vector signed char a1, vector signed char a2)
896{
897  return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
898}
899
900inline vector signed char
901vec_cmpeq (vector unsigned char a1, vector unsigned char a2)
902{
903  return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
904}
905
906inline vector signed short
907vec_cmpeq (vector signed short a1, vector signed short a2)
908{
909  return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
910}
911
912inline vector signed short
913vec_cmpeq (vector unsigned short a1, vector unsigned short a2)
914{
915  return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
916}
917
918inline vector signed int
919vec_cmpeq (vector signed int a1, vector signed int a2)
920{
921  return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
922}
923
924inline vector signed int
925vec_cmpeq (vector unsigned int a1, vector unsigned int a2)
926{
927  return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
928}
929
930inline vector signed int
931vec_cmpeq (vector float a1, vector float a2)
932{
933  return (vector signed int) __builtin_altivec_vcmpeqfp ((vector float) a1, (vector float) a2);
934}
935
936/* vec_vcmpeqfp */
937
938inline vector signed int
939vec_vcmpeqfp (vector float a1, vector float a2)
940{
941  return (vector signed int) __builtin_altivec_vcmpeqfp ((vector float) a1, (vector float) a2);
942}
943
944/* vec_vcmpequw */
945
946inline vector signed int
947vec_vcmpequw (vector signed int a1, vector signed int a2)
948{
949  return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
950}
951
952inline vector signed int
953vec_vcmpequw (vector unsigned int a1, vector unsigned int a2)
954{
955  return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
956}
957
958/* vec_vcmpequh */
959
960inline vector signed short
961vec_vcmpequh (vector signed short a1, vector signed short a2)
962{
963  return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
964}
965
966inline vector signed short
967vec_vcmpequh (vector unsigned short a1, vector unsigned short a2)
968{
969  return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
970}
971
972/* vec_vcmpequb */
973
974inline vector signed char
975vec_vcmpequb (vector signed char a1, vector signed char a2)
976{
977  return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
978}
979
980inline vector signed char
981vec_vcmpequb (vector unsigned char a1, vector unsigned char a2)
982{
983  return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
984}
985
986/* vec_cmpge */
987
988inline vector signed int
989vec_cmpge (vector float a1, vector float a2)
990{
991  return (vector signed int) __builtin_altivec_vcmpgefp ((vector float) a1, (vector float) a2);
992}
993
994/* vec_cmpgt */
995
996inline vector signed char
997vec_cmpgt (vector unsigned char a1, vector unsigned char a2)
998{
999  return (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2);
1000}
1001
1002inline vector signed char
1003vec_cmpgt (vector signed char a1, vector signed char a2)
1004{
1005  return (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2);
1006}
1007
1008inline vector signed short
1009vec_cmpgt (vector unsigned short a1, vector unsigned short a2)
1010{
1011  return (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2);
1012}
1013
1014inline vector signed short
1015vec_cmpgt (vector signed short a1, vector signed short a2)
1016{
1017  return (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2);
1018}
1019
1020inline vector signed int
1021vec_cmpgt (vector unsigned int a1, vector unsigned int a2)
1022{
1023  return (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2);
1024}
1025
1026inline vector signed int
1027vec_cmpgt (vector signed int a1, vector signed int a2)
1028{
1029  return (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2);
1030}
1031
1032inline vector signed int
1033vec_cmpgt (vector float a1, vector float a2)
1034{
1035  return (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2);
1036}
1037
1038/* vec_vcmpgtfp */
1039
1040inline vector signed int
1041vec_vcmpgtfp (vector float a1, vector float a2)
1042{
1043  return (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2);
1044}
1045
1046/* vec_vcmpgtsw */
1047
1048inline vector signed int
1049vec_vcmpgtsw (vector signed int a1, vector signed int a2)
1050{
1051  return (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2);
1052}
1053
1054/* vec_vcmpgtuw */
1055
1056inline vector signed int
1057vec_vcmpgtuw (vector unsigned int a1, vector unsigned int a2)
1058{
1059  return (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2);
1060}
1061
1062/* vec_vcmpgtsh */
1063
1064inline vector signed short
1065vec_cmpgtsh (vector signed short a1, vector signed short a2)
1066{
1067  return (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2);
1068}
1069
1070/* vec_vcmpgtuh */
1071
1072inline vector signed short
1073vec_vcmpgtuh (vector unsigned short a1, vector unsigned short a2)
1074{
1075  return (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2);
1076}
1077
1078/* vec_vcmpgtsb */
1079
1080inline vector signed char
1081vec_vcmpgtsb (vector signed char a1, vector signed char a2)
1082{
1083  return (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2);
1084}
1085
1086/* vec_vcmpgtub */
1087
1088inline vector signed char
1089vec_vcmpgtub (vector unsigned char a1, vector unsigned char a2)
1090{
1091  return (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2);
1092}
1093
1094/* vec_cmple */
1095
1096inline vector signed int
1097vec_cmple (vector float a1, vector float a2)
1098{
1099  return (vector signed int) __builtin_altivec_vcmpgefp ((vector float) a2, (vector float) a1);
1100}
1101
1102/* vec_cmplt */
1103
1104inline vector signed char
1105vec_cmplt (vector unsigned char a1, vector unsigned char a2)
1106{
1107  return (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a2, (vector signed char) a1);
1108}
1109
1110inline vector signed char
1111vec_cmplt (vector signed char a1, vector signed char a2)
1112{
1113  return (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a2, (vector signed char) a1);
1114}
1115
1116inline vector signed short
1117vec_cmplt (vector unsigned short a1, vector unsigned short a2)
1118{
1119  return (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a2, (vector signed short) a1);
1120}
1121
1122inline vector signed short
1123vec_cmplt (vector signed short a1, vector signed short a2)
1124{
1125  return (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a2, (vector signed short) a1);
1126}
1127
1128inline vector signed int
1129vec_cmplt (vector unsigned int a1, vector unsigned int a2)
1130{
1131  return (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a2, (vector signed int) a1);
1132}
1133
1134inline vector signed int
1135vec_cmplt (vector signed int a1, vector signed int a2)
1136{
1137  return (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a2, (vector signed int) a1);
1138}
1139
1140inline vector signed int
1141vec_cmplt (vector float a1, vector float a2)
1142{
1143  return (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a2, (vector float) a1);
1144}
1145
1146/* vec_ctf */
1147
1148inline vector float
1149vec_ctf (vector unsigned int a1, const char a2)
1150{
1151  return (vector float) __builtin_altivec_vcfux ((vector signed int) a1, a2);
1152}
1153
1154inline vector float
1155vec_ctf (vector signed int a1, const char a2)
1156{
1157  return (vector float) __builtin_altivec_vcfsx ((vector signed int) a1, a2);
1158}
1159
1160/* vec_vcfsx */
1161
1162inline vector float
1163vec_vcfsx (vector signed int a1, const char a2)
1164{
1165  return (vector float) __builtin_altivec_vcfsx ((vector signed int) a1, a2);
1166}
1167
1168/* vec_vcfux */
1169
1170inline vector float
1171vec_vcfux (vector unsigned int a1, const char a2)
1172{
1173  return (vector float) __builtin_altivec_vcfux ((vector signed int) a1, a2);
1174}
1175
1176/* vec_cts */
1177
1178inline vector signed int
1179vec_cts (vector float a1, const char a2)
1180{
1181  return (vector signed int) __builtin_altivec_vctsxs ((vector float) a1, a2);
1182}
1183
1184/* vec_ctu */
1185
1186inline vector unsigned int
1187vec_ctu (vector float a1, const char a2)
1188{
1189  return (vector unsigned int) __builtin_altivec_vctuxs ((vector float) a1, a2);
1190}
1191
1192/* vec_dss */
1193
1194inline void
1195vec_dss (const char a1)
1196{
1197  __builtin_altivec_dss (a1);
1198}
1199
1200/* vec_dssall */
1201
1202inline void
1203vec_dssall (void)
1204{
1205  __builtin_altivec_dssall ();
1206}
1207
1208/* vec_dst */
1209
1210inline void
1211vec_dst (vector unsigned char *a1, int a2, const char a3)
1212{
1213  __builtin_altivec_dst ((void *) a1, a2, a3);
1214}
1215
1216inline void
1217vec_dst (vector signed char *a1, int a2, const char a3)
1218{
1219  __builtin_altivec_dst ((void *) a1, a2, a3);
1220}
1221
1222inline void
1223vec_dst (vector unsigned short *a1, int a2, const char a3)
1224{
1225  __builtin_altivec_dst ((void *) a1, a2, a3);
1226}
1227
1228inline void
1229vec_dst (vector signed short *a1, int a2, const char a3)
1230{
1231  __builtin_altivec_dst ((void *) a1, a2, a3);
1232}
1233
1234inline void
1235vec_dst (vector unsigned int *a1, int a2, const char a3)
1236{
1237  __builtin_altivec_dst ((void *) a1, a2, a3);
1238}
1239
1240inline void
1241vec_dst (vector signed int *a1, int a2, const char a3)
1242{
1243  __builtin_altivec_dst ((void *) a1, a2, a3);
1244}
1245
1246inline void
1247vec_dst (vector float *a1, int a2, const char a3)
1248{
1249  __builtin_altivec_dst ((void *) a1, a2, a3);
1250}
1251
1252inline void
1253vec_dst (unsigned char *a1, int a2, const char a3)
1254{
1255  __builtin_altivec_dst ((void *) a1, a2, a3);
1256}
1257
1258inline void
1259vec_dst (signed char *a1, int a2, const char a3)
1260{
1261  __builtin_altivec_dst ((void *) a1, a2, a3);
1262}
1263
1264inline void
1265vec_dst (unsigned short *a1, int a2, const char a3)
1266{
1267  __builtin_altivec_dst ((void *) a1, a2, a3);
1268}
1269
1270inline void
1271vec_dst (signed short *a1, int a2, const char a3)
1272{
1273  __builtin_altivec_dst ((void *) a1, a2, a3);
1274}
1275
1276inline void
1277vec_dst (unsigned int *a1, int a2, const char a3)
1278{
1279  __builtin_altivec_dst ((void *) a1, a2, a3);
1280}
1281
1282inline void
1283vec_dst (signed int *a1, int a2, const char a3)
1284{
1285  __builtin_altivec_dst ((void *) a1, a2, a3);
1286}
1287
1288inline void
1289vec_dst (unsigned long *a1, int a2, const char a3)
1290{
1291  __builtin_altivec_dst ((void *) a1, a2, a3);
1292}
1293
1294inline void
1295vec_dst (signed long *a1, int a2, const char a3)
1296{
1297  __builtin_altivec_dst ((void *) a1, a2, a3);
1298}
1299
1300inline void
1301vec_dst (float *a1, int a2, const char a3)
1302{
1303  __builtin_altivec_dst ((void *) a1, a2, a3);
1304}
1305
1306/* vec_dstst */
1307
1308inline void
1309vec_dstst (vector unsigned char *a1, int a2, const char a3)
1310{
1311  __builtin_altivec_dstst ((void *) a1, a2, a3);
1312}
1313
1314inline void
1315vec_dstst (vector signed char *a1, int a2, const char a3)
1316{
1317  __builtin_altivec_dstst ((void *) a1, a2, a3);
1318}
1319
1320inline void
1321vec_dstst (vector unsigned short *a1, int a2, const char a3)
1322{
1323  __builtin_altivec_dstst ((void *) a1, a2, a3);
1324}
1325
1326inline void
1327vec_dstst (vector signed short *a1, int a2, const char a3)
1328{
1329  __builtin_altivec_dstst ((void *) a1, a2, a3);
1330}
1331
1332inline void
1333vec_dstst (vector unsigned int *a1, int a2, const char a3)
1334{
1335  __builtin_altivec_dstst ((void *) a1, a2, a3);
1336}
1337
1338inline void
1339vec_dstst (vector signed int *a1, int a2, const char a3)
1340{
1341  __builtin_altivec_dstst ((void *) a1, a2, a3);
1342}
1343
1344inline void
1345vec_dstst (vector float *a1, int a2, const char a3)
1346{
1347  __builtin_altivec_dstst ((void *) a1, a2, a3);
1348}
1349
1350inline void
1351vec_dstst (unsigned char *a1, int a2, const char a3)
1352{
1353  __builtin_altivec_dstst ((void *) a1, a2, a3);
1354}
1355
1356inline void
1357vec_dstst (signed char *a1, int a2, const char a3)
1358{
1359  __builtin_altivec_dstst ((void *) a1, a2, a3);
1360}
1361
1362inline void
1363vec_dstst (unsigned short *a1, int a2, const char a3)
1364{
1365  __builtin_altivec_dstst ((void *) a1, a2, a3);
1366}
1367
1368inline void
1369vec_dstst (signed short *a1, int a2, const char a3)
1370{
1371  __builtin_altivec_dstst ((void *) a1, a2, a3);
1372}
1373
1374inline void
1375vec_dstst (unsigned int *a1, int a2, const char a3)
1376{
1377  __builtin_altivec_dstst ((void *) a1, a2, a3);
1378}
1379
1380inline void
1381vec_dstst (signed int *a1, int a2, const char a3)
1382{
1383  __builtin_altivec_dstst ((void *) a1, a2, a3);
1384}
1385
1386inline void
1387vec_dstst (unsigned long *a1, int a2, const char a3)
1388{
1389  __builtin_altivec_dstst ((void *) a1, a2, a3);
1390}
1391
1392inline void
1393vec_dstst (signed long *a1, int a2, const char a3)
1394{
1395  __builtin_altivec_dstst ((void *) a1, a2, a3);
1396}
1397
1398inline void
1399vec_dstst (float *a1, int a2, const char a3)
1400{
1401  __builtin_altivec_dstst ((void *) a1, a2, a3);
1402}
1403
1404/* vec_dststt */
1405
1406inline void
1407vec_dststt (vector unsigned char *a1, int a2, const char a3)
1408{
1409  __builtin_altivec_dststt ((void *) a1, a2, a3);
1410}
1411
1412inline void
1413vec_dststt (vector signed char *a1, int a2, const char a3)
1414{
1415  __builtin_altivec_dststt ((void *) a1, a2, a3);
1416}
1417
1418inline void
1419vec_dststt (vector unsigned short *a1, int a2, const char a3)
1420{
1421  __builtin_altivec_dststt ((void *) a1, a2, a3);
1422}
1423
1424inline void
1425vec_dststt (vector signed short *a1, int a2, const char a3)
1426{
1427  __builtin_altivec_dststt ((void *) a1, a2, a3);
1428}
1429
1430inline void
1431vec_dststt (vector unsigned int *a1, int a2, const char a3)
1432{
1433  __builtin_altivec_dststt ((void *) a1, a2, a3);
1434}
1435
1436inline void
1437vec_dststt (vector signed int *a1, int a2, const char a3)
1438{
1439  __builtin_altivec_dststt ((void *) a1, a2, a3);
1440}
1441
1442inline void
1443vec_dststt (vector float *a1, int a2, const char a3)
1444{
1445  __builtin_altivec_dststt ((void *) a1, a2, a3);
1446}
1447
1448inline void
1449vec_dststt (unsigned char *a1, int a2, const char a3)
1450{
1451  __builtin_altivec_dststt ((void *) a1, a2, a3);
1452}
1453
1454inline void
1455vec_dststt (signed char *a1, int a2, const char a3)
1456{
1457  __builtin_altivec_dststt ((void *) a1, a2, a3);
1458}
1459
1460inline void
1461vec_dststt (unsigned short *a1, int a2, const char a3)
1462{
1463  __builtin_altivec_dststt ((void *) a1, a2, a3);
1464}
1465
1466inline void
1467vec_dststt (signed short *a1, int a2, const char a3)
1468{
1469  __builtin_altivec_dststt ((void *) a1, a2, a3);
1470}
1471
1472inline void
1473vec_dststt (unsigned int *a1, int a2, const char a3)
1474{
1475  __builtin_altivec_dststt ((void *) a1, a2, a3);
1476}
1477
1478inline void
1479vec_dststt (signed int *a1, int a2, const char a3)
1480{
1481  __builtin_altivec_dststt ((void *) a1, a2, a3);
1482}
1483
1484inline void
1485vec_dststt (unsigned long *a1, int a2, const char a3)
1486{
1487  __builtin_altivec_dststt ((void *) a1, a2, a3);
1488}
1489
1490inline void
1491vec_dststt (signed long *a1, int a2, const char a3)
1492{
1493  __builtin_altivec_dststt ((void *) a1, a2, a3);
1494}
1495
1496inline void
1497vec_dststt (float *a1, int a2, const char a3)
1498{
1499  __builtin_altivec_dststt ((void *) a1, a2, a3);
1500}
1501
1502/* vec_dstt */
1503
1504inline void
1505vec_dstt (vector unsigned char *a1, int a2, const char a3)
1506{
1507  __builtin_altivec_dstt ((void *) a1, a2, a3);
1508}
1509
1510inline void
1511vec_dstt (vector signed char *a1, int a2, const char a3)
1512{
1513  __builtin_altivec_dstt ((void *) a1, a2, a3);
1514}
1515
1516inline void
1517vec_dstt (vector unsigned short *a1, int a2, const char a3)
1518{
1519  __builtin_altivec_dstt ((void *) a1, a2, a3);
1520}
1521
1522inline void
1523vec_dstt (vector signed short *a1, int a2, const char a3)
1524{
1525  __builtin_altivec_dstt ((void *) a1, a2, a3);
1526}
1527
1528inline void
1529vec_dstt (vector unsigned int *a1, int a2, const char a3)
1530{
1531  __builtin_altivec_dstt ((void *) a1, a2, a3);
1532}
1533
1534inline void
1535vec_dstt (vector signed int *a1, int a2, const char a3)
1536{
1537  __builtin_altivec_dstt ((void *) a1, a2, a3);
1538}
1539
1540inline void
1541vec_dstt (vector float *a1, int a2, const char a3)
1542{
1543  __builtin_altivec_dstt ((void *) a1, a2, a3);
1544}
1545
1546inline void
1547vec_dstt (unsigned char *a1, int a2, const char a3)
1548{
1549  __builtin_altivec_dstt ((void *) a1, a2, a3);
1550}
1551
1552inline void
1553vec_dstt (signed char *a1, int a2, const char a3)
1554{
1555  __builtin_altivec_dstt ((void *) a1, a2, a3);
1556}
1557
1558inline void
1559vec_dstt (unsigned short *a1, int a2, const char a3)
1560{
1561  __builtin_altivec_dstt ((void *) a1, a2, a3);
1562}
1563
1564inline void
1565vec_dstt (signed short *a1, int a2, const char a3)
1566{
1567  __builtin_altivec_dstt ((void *) a1, a2, a3);
1568}
1569
1570inline void
1571vec_dstt (unsigned int *a1, int a2, const char a3)
1572{
1573  __builtin_altivec_dstt ((void *) a1, a2, a3);
1574}
1575
1576inline void
1577vec_dstt (signed int *a1, int a2, const char a3)
1578{
1579  __builtin_altivec_dstt ((void *) a1, a2, a3);
1580}
1581
1582inline void
1583vec_dstt (unsigned long *a1, int a2, const char a3)
1584{
1585  __builtin_altivec_dstt ((void *) a1, a2, a3);
1586}
1587
1588inline void
1589vec_dstt (signed long *a1, int a2, const char a3)
1590{
1591  __builtin_altivec_dstt ((void *) a1, a2, a3);
1592}
1593
1594inline void
1595vec_dstt (float *a1, int a2, const char a3)
1596{
1597  __builtin_altivec_dstt ((void *) a1, a2, a3);
1598}
1599
1600/* vec_expte */
1601
1602inline vector float
1603vec_expte (vector float a1)
1604{
1605  return (vector float) __builtin_altivec_vexptefp ((vector float) a1);
1606}
1607
1608/* vec_floor */
1609
1610inline vector float
1611vec_floor (vector float a1)
1612{
1613  return (vector float) __builtin_altivec_vrfim ((vector float) a1);
1614}
1615
1616/* vec_ld */
1617
1618inline vector float
1619vec_ld (int a1, vector float *a2)
1620{
1621  return (vector float) __builtin_altivec_lvx (a1, (void *) a2);
1622}
1623
1624inline vector float
1625vec_ld (int a1, float *a2)
1626{
1627  return (vector float) __builtin_altivec_lvx (a1, (void *) a2);
1628}
1629
1630inline vector signed int
1631vec_ld (int a1, vector signed int *a2)
1632{
1633  return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2);
1634}
1635
1636inline vector signed int
1637vec_ld (int a1, signed int *a2)
1638{
1639  return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2);
1640}
1641
1642inline vector signed int
1643vec_ld (int a1, signed long *a2)
1644{
1645  return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2);
1646}
1647
1648inline vector unsigned int
1649vec_ld (int a1, vector unsigned int *a2)
1650{
1651  return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2);
1652}
1653
1654inline vector unsigned int
1655vec_ld (int a1, unsigned int *a2)
1656{
1657  return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2);
1658}
1659
1660inline vector unsigned int
1661vec_ld (int a1, unsigned long *a2)
1662{
1663  return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2);
1664}
1665
1666inline vector signed short
1667vec_ld (int a1, vector signed short *a2)
1668{
1669  return (vector signed short) __builtin_altivec_lvx (a1, (void *) a2);
1670}
1671
1672inline vector signed short
1673vec_ld (int a1, signed short *a2)
1674{
1675  return (vector signed short) __builtin_altivec_lvx (a1, (void *) a2);
1676}
1677
1678inline vector unsigned short
1679vec_ld (int a1, vector unsigned short *a2)
1680{
1681  return (vector unsigned short) __builtin_altivec_lvx (a1, (void *) a2);
1682}
1683
1684inline vector unsigned short
1685vec_ld (int a1, unsigned short *a2)
1686{
1687  return (vector unsigned short) __builtin_altivec_lvx (a1, (void *) a2);
1688}
1689
1690inline vector signed char
1691vec_ld (int a1, vector signed char *a2)
1692{
1693  return (vector signed char) __builtin_altivec_lvx (a1, (void *) a2);
1694}
1695
1696inline vector signed char
1697vec_ld (int a1, signed char *a2)
1698{
1699  return (vector signed char) __builtin_altivec_lvx (a1, (void *) a2);
1700}
1701
1702inline vector unsigned char
1703vec_ld (int a1, vector unsigned char *a2)
1704{
1705  return (vector unsigned char) __builtin_altivec_lvx (a1, (void *) a2);
1706}
1707
1708inline vector unsigned char
1709vec_ld (int a1, unsigned char *a2)
1710{
1711  return (vector unsigned char) __builtin_altivec_lvx (a1, (void *) a2);
1712}
1713
1714/* vec_lde */
1715
1716inline vector signed char
1717vec_lde (int a1, signed char *a2)
1718{
1719  return (vector signed char) __builtin_altivec_lvebx (a1, (void *) a2);
1720}
1721
1722inline vector unsigned char
1723vec_lde (int a1, unsigned char *a2)
1724{
1725  return (vector unsigned char) __builtin_altivec_lvebx (a1, (void *) a2);
1726}
1727
1728inline vector signed short
1729vec_lde (int a1, signed short *a2)
1730{
1731  return (vector signed short) __builtin_altivec_lvehx (a1, (void *) a2);
1732}
1733
1734inline vector unsigned short
1735vec_lde (int a1, unsigned short *a2)
1736{
1737  return (vector unsigned short) __builtin_altivec_lvehx (a1, (void *) a2);
1738}
1739
1740inline vector float
1741vec_lde (int a1, float *a2)
1742{
1743  return (vector float) __builtin_altivec_lvewx (a1, (void *) a2);
1744}
1745
1746inline vector signed int
1747vec_lde (int a1, signed int *a2)
1748{
1749  return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2);
1750}
1751
1752inline vector unsigned int
1753vec_lde (int a1, unsigned int *a2)
1754{
1755  return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2);
1756}
1757
1758inline vector signed int
1759vec_lde (int a1, signed long *a2)
1760{
1761  return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2);
1762}
1763
1764inline vector unsigned int
1765vec_lde (int a1, unsigned long *a2)
1766{
1767  return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2);
1768}
1769
1770/* vec_lvewx */
1771
1772inline vector float
1773vec_lvewx (int a1, float *a2)
1774{
1775  return (vector float) __builtin_altivec_lvewx (a1, (void *) a2);
1776}
1777
1778inline vector signed int
1779vec_lvewx (int a1, signed int *a2)
1780{
1781  return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2);
1782}
1783
1784inline vector unsigned int
1785vec_lvewx (int a1, unsigned int *a2)
1786{
1787  return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2);
1788}
1789
1790inline vector signed int
1791vec_lvewx (int a1, signed long *a2)
1792{
1793  return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2);
1794}
1795
1796inline vector unsigned int
1797vec_lvewx (int a1, unsigned long *a2)
1798{
1799  return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2);
1800}
1801
1802/* vec_lvehx */
1803
1804inline vector signed short
1805vec_lvehx (int a1, signed short *a2)
1806{
1807  return (vector signed short) __builtin_altivec_lvehx (a1, (void *) a2);
1808}
1809
1810inline vector unsigned short
1811vec_lvehx (int a1, unsigned short *a2)
1812{
1813  return (vector unsigned short) __builtin_altivec_lvehx (a1, (void *) a2);
1814}
1815
1816/* vec_lvebx */
1817
1818inline vector signed char
1819vec_lvebx (int a1, signed char *a2)
1820{
1821  return (vector signed char) __builtin_altivec_lvebx (a1, (void *) a2);
1822}
1823
1824inline vector unsigned char
1825vec_lvebx (int a1, unsigned char *a2)
1826{
1827  return (vector unsigned char) __builtin_altivec_lvebx (a1, (void *) a2);
1828}
1829
1830/* vec_ldl */
1831
1832inline vector float
1833vec_ldl (int a1, vector float *a2)
1834{
1835  return (vector float) __builtin_altivec_lvxl (a1, (void *) a2);
1836}
1837
1838inline vector float
1839vec_ldl (int a1, float *a2)
1840{
1841  return (vector float) __builtin_altivec_lvxl (a1, (void *) a2);
1842}
1843
1844inline vector signed int
1845vec_ldl (int a1, vector signed int *a2)
1846{
1847  return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2);
1848}
1849
1850inline vector signed int
1851vec_ldl (int a1, signed int *a2)
1852{
1853  return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2);
1854}
1855
1856inline vector signed int
1857vec_ldl (int a1, signed long *a2)
1858{
1859  return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2);
1860}
1861
1862inline vector unsigned int
1863vec_ldl (int a1, vector unsigned int *a2)
1864{
1865  return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2);
1866}
1867
1868inline vector unsigned int
1869vec_ldl (int a1, unsigned int *a2)
1870{
1871  return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2);
1872}
1873
1874inline vector unsigned int
1875vec_ldl (int a1, unsigned long *a2)
1876{
1877  return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2);
1878}
1879
1880inline vector signed short
1881vec_ldl (int a1, vector signed short *a2)
1882{
1883  return (vector signed short) __builtin_altivec_lvxl (a1, (void *) a2);
1884}
1885
1886inline vector signed short
1887vec_ldl (int a1, signed short *a2)
1888{
1889  return (vector signed short) __builtin_altivec_lvxl (a1, (void *) a2);
1890}
1891
1892inline vector unsigned short
1893vec_ldl (int a1, vector unsigned short *a2)
1894{
1895  return (vector unsigned short) __builtin_altivec_lvxl (a1, (void *) a2);
1896}
1897
1898inline vector unsigned short
1899vec_ldl (int a1, unsigned short *a2)
1900{
1901  return (vector unsigned short) __builtin_altivec_lvxl (a1, (void *) a2);
1902}
1903
1904inline vector signed char
1905vec_ldl (int a1, vector signed char *a2)
1906{
1907  return (vector signed char) __builtin_altivec_lvxl (a1, (void *) a2);
1908}
1909
1910inline vector signed char
1911vec_ldl (int a1, signed char *a2)
1912{
1913  return (vector signed char) __builtin_altivec_lvxl (a1, (void *) a2);
1914}
1915
1916inline vector unsigned char
1917vec_ldl (int a1, vector unsigned char *a2)
1918{
1919  return (vector unsigned char) __builtin_altivec_lvxl (a1, (void *) a2);
1920}
1921
1922inline vector unsigned char
1923vec_ldl (int a1, unsigned char *a2)
1924{
1925  return (vector unsigned char) __builtin_altivec_lvxl (a1, (void *) a2);
1926}
1927
1928/* vec_loge */
1929
1930inline vector float
1931vec_loge (vector float a1)
1932{
1933  return (vector float) __builtin_altivec_vlogefp ((vector float) a1);
1934}
1935
1936/* vec_lvsl */
1937
1938inline vector unsigned char
1939vec_lvsl (int a1, unsigned char *a2)
1940{
1941  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1942}
1943
1944inline vector unsigned char
1945vec_lvsl (int a1, signed char *a2)
1946{
1947  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1948}
1949
1950inline vector unsigned char
1951vec_lvsl (int a1, unsigned short *a2)
1952{
1953  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1954}
1955
1956inline vector unsigned char
1957vec_lvsl (int a1, signed short *a2)
1958{
1959  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1960}
1961
1962inline vector unsigned char
1963vec_lvsl (int a1, unsigned int *a2)
1964{
1965  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1966}
1967
1968inline vector unsigned char
1969vec_lvsl (int a1, signed int *a2)
1970{
1971  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1972}
1973
1974inline vector unsigned char
1975vec_lvsl (int a1, unsigned long *a2)
1976{
1977  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1978}
1979
1980inline vector unsigned char
1981vec_lvsl (int a1, signed long *a2)
1982{
1983  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1984}
1985
1986inline vector unsigned char
1987vec_lvsl (int a1, float *a2)
1988{
1989  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1990}
1991
1992/* vec_lvsr */
1993
1994inline vector unsigned char
1995vec_lvsr (int a1, unsigned char *a2)
1996{
1997  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
1998}
1999
2000inline vector unsigned char
2001vec_lvsr (int a1, signed char *a2)
2002{
2003  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
2004}
2005
2006inline vector unsigned char
2007vec_lvsr (int a1, unsigned short *a2)
2008{
2009  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
2010}
2011
2012inline vector unsigned char
2013vec_lvsr (int a1, signed short *a2)
2014{
2015  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
2016}
2017
2018inline vector unsigned char
2019vec_lvsr (int a1, unsigned int *a2)
2020{
2021  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
2022}
2023
2024inline vector unsigned char
2025vec_lvsr (int a1, signed int *a2)
2026{
2027  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
2028}
2029
2030inline vector unsigned char
2031vec_lvsr (int a1, unsigned long *a2)
2032{
2033  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
2034}
2035
2036inline vector unsigned char
2037vec_lvsr (int a1, signed long *a2)
2038{
2039  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
2040}
2041
2042inline vector unsigned char
2043vec_lvsr (int a1, float *a2)
2044{
2045  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
2046}
2047
2048/* vec_madd */
2049
2050inline vector float
2051vec_madd (vector float a1, vector float a2, vector float a3)
2052{
2053  return (vector float) __builtin_altivec_vmaddfp ((vector float) a1, (vector float) a2, (vector float) a3);
2054}
2055
2056
2057/* vec_madds */
2058
2059inline vector signed short
2060vec_madds (vector signed short a1, vector signed short a2, vector signed short a3)
2061{
2062  return (vector signed short) __builtin_altivec_vmhaddshs ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
2063}
2064
2065/* vec_max */
2066
2067inline vector unsigned char
2068vec_max (vector signed char a1, vector unsigned char a2)
2069{
2070  return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
2071}
2072
2073inline vector unsigned char
2074vec_max (vector unsigned char a1, vector signed char a2)
2075{
2076  return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
2077}
2078
2079inline vector unsigned char
2080vec_max (vector unsigned char a1, vector unsigned char a2)
2081{
2082  return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
2083}
2084
2085inline vector signed char
2086vec_max (vector signed char a1, vector signed char a2)
2087{
2088  return (vector signed char) __builtin_altivec_vmaxsb ((vector signed char) a1, (vector signed char) a2);
2089}
2090
2091inline vector unsigned short
2092vec_max (vector signed short a1, vector unsigned short a2)
2093{
2094  return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
2095}
2096
2097inline vector unsigned short
2098vec_max (vector unsigned short a1, vector signed short a2)
2099{
2100  return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
2101}
2102
2103inline vector unsigned short
2104vec_max (vector unsigned short a1, vector unsigned short a2)
2105{
2106  return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
2107}
2108
2109inline vector signed short
2110vec_max (vector signed short a1, vector signed short a2)
2111{
2112  return (vector signed short) __builtin_altivec_vmaxsh ((vector signed short) a1, (vector signed short) a2);
2113}
2114
2115inline vector unsigned int
2116vec_max (vector signed int a1, vector unsigned int a2)
2117{
2118  return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
2119}
2120
2121inline vector unsigned int
2122vec_max (vector unsigned int a1, vector signed int a2)
2123{
2124  return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
2125}
2126
2127inline vector unsigned int
2128vec_max (vector unsigned int a1, vector unsigned int a2)
2129{
2130  return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
2131}
2132
2133inline vector signed int
2134vec_max (vector signed int a1, vector signed int a2)
2135{
2136  return (vector signed int) __builtin_altivec_vmaxsw ((vector signed int) a1, (vector signed int) a2);
2137}
2138
2139inline vector float
2140vec_max (vector float a1, vector float a2)
2141{
2142  return (vector float) __builtin_altivec_vmaxfp ((vector float) a1, (vector float) a2);
2143}
2144
2145/* vec_vmaxfp */
2146
2147inline vector float
2148vec_vmaxfp (vector float a1, vector float a2)
2149{
2150  return (vector float) __builtin_altivec_vmaxfp ((vector float) a1, (vector float) a2);
2151}
2152
2153/* vec_vmaxsw */
2154
2155inline vector signed int
2156vec_vmaxsw (vector signed int a1, vector signed int a2)
2157{
2158  return (vector signed int) __builtin_altivec_vmaxsw ((vector signed int) a1, (vector signed int) a2);
2159}
2160
2161/* vec_vmaxuw */
2162
2163inline vector unsigned int
2164vec_vmaxuw (vector signed int a1, vector unsigned int a2)
2165{
2166  return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
2167}
2168
2169inline vector unsigned int
2170vec_vmaxuw (vector unsigned int a1, vector signed int a2)
2171{
2172  return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
2173}
2174
2175inline vector unsigned int
2176vec_vmaxuw (vector unsigned int a1, vector unsigned int a2)
2177{
2178  return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
2179}
2180
2181/* vec_vmaxsh */
2182
2183inline vector signed short
2184vec_vmaxsh (vector signed short a1, vector signed short a2)
2185{
2186  return (vector signed short) __builtin_altivec_vmaxsh ((vector signed short) a1, (vector signed short) a2);
2187}
2188
2189/* vec_vmaxuh */
2190
2191inline vector unsigned short
2192vec_vmaxuh (vector signed short a1, vector unsigned short a2)
2193{
2194  return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
2195}
2196
2197inline vector unsigned short
2198vec_vmaxuh (vector unsigned short a1, vector signed short a2)
2199{
2200  return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
2201}
2202
2203inline vector unsigned short
2204vec_vmaxuh (vector unsigned short a1, vector unsigned short a2)
2205{
2206  return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
2207}
2208
2209/* vec_vmaxsb */
2210
2211inline vector signed char
2212vec_vmaxsb (vector signed char a1, vector signed char a2)
2213{
2214  return (vector signed char) __builtin_altivec_vmaxsb ((vector signed char) a1, (vector signed char) a2);
2215}
2216
2217/* vec_vmaxub */
2218
2219inline vector unsigned char
2220vec_vmaxub (vector signed char a1, vector unsigned char a2)
2221{
2222  return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
2223}
2224
2225inline vector unsigned char
2226vec_vmaxub (vector unsigned char a1, vector signed char a2)
2227{
2228  return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
2229}
2230
2231inline vector unsigned char
2232vec_vmaxub (vector unsigned char a1, vector unsigned char a2)
2233{
2234  return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
2235}
2236
2237/* vec_mergeh */
2238
2239inline vector signed char
2240vec_mergeh (vector signed char a1, vector signed char a2)
2241{
2242  return (vector signed char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2);
2243}
2244
2245inline vector unsigned char
2246vec_mergeh (vector unsigned char a1, vector unsigned char a2)
2247{
2248  return (vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2);
2249}
2250
2251inline vector signed short
2252vec_mergeh (vector signed short a1, vector signed short a2)
2253{
2254  return (vector signed short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2);
2255}
2256
2257inline vector unsigned short
2258vec_mergeh (vector unsigned short a1, vector unsigned short a2)
2259{
2260  return (vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2);
2261}
2262
2263inline vector float
2264vec_mergeh (vector float a1, vector float a2)
2265{
2266  return (vector float) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
2267}
2268
2269inline vector signed int
2270vec_mergeh (vector signed int a1, vector signed int a2)
2271{
2272  return (vector signed int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
2273}
2274
2275inline vector unsigned int
2276vec_mergeh (vector unsigned int a1, vector unsigned int a2)
2277{
2278  return (vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
2279}
2280
2281/* vec_vmrghw */
2282
2283inline vector float
2284vec_vmrghw (vector float a1, vector float a2)
2285{
2286  return (vector float) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
2287}
2288
2289inline vector signed int
2290vec_vmrghw (vector signed int a1, vector signed int a2)
2291{
2292  return (vector signed int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
2293}
2294
2295inline vector unsigned int
2296vec_vmrghw (vector unsigned int a1, vector unsigned int a2)
2297{
2298  return (vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
2299}
2300
2301/* vec_vmrghh */
2302
2303inline vector signed short
2304vec_vmrghh (vector signed short a1, vector signed short a2)
2305{
2306  return (vector signed short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2);
2307}
2308
2309inline vector unsigned short
2310vec_vmrghh (vector unsigned short a1, vector unsigned short a2)
2311{
2312  return (vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2);
2313}
2314
2315/* vec_vmrghb */
2316
2317inline vector signed char
2318vec_vmrghb (vector signed char a1, vector signed char a2)
2319{
2320  return (vector signed char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2);
2321}
2322
2323inline vector unsigned char
2324vec_vmrghb (vector unsigned char a1, vector unsigned char a2)
2325{
2326  return (vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2);
2327}
2328
2329/* vec_mergel */
2330
2331inline vector signed char
2332vec_mergel (vector signed char a1, vector signed char a2)
2333{
2334  return (vector signed char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2);
2335}
2336
2337inline vector unsigned char
2338vec_mergel (vector unsigned char a1, vector unsigned char a2)
2339{
2340  return (vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2);
2341}
2342
2343inline vector signed short
2344vec_mergel (vector signed short a1, vector signed short a2)
2345{
2346  return (vector signed short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2);
2347}
2348
2349inline vector unsigned short
2350vec_mergel (vector unsigned short a1, vector unsigned short a2)
2351{
2352  return (vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2);
2353}
2354
2355inline vector float
2356vec_mergel (vector float a1, vector float a2)
2357{
2358  return (vector float) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
2359}
2360
2361inline vector signed int
2362vec_mergel (vector signed int a1, vector signed int a2)
2363{
2364  return (vector signed int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
2365}
2366
2367inline vector unsigned int
2368vec_mergel (vector unsigned int a1, vector unsigned int a2)
2369{
2370  return (vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
2371}
2372
2373/* vec_vmrglw */
2374
2375inline vector float
2376vec_vmrglw (vector float a1, vector float a2)
2377{
2378  return (vector float) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
2379}
2380
2381inline vector signed int
2382vec_vmrglw (vector signed int a1, vector signed int a2)
2383{
2384  return (vector signed int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
2385}
2386
2387inline vector unsigned int
2388vec_vmrglw (vector unsigned int a1, vector unsigned int a2)
2389{
2390  return (vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
2391}
2392
2393/* vec_vmrglh */
2394
2395inline vector signed short
2396vec_vmrglh (vector signed short a1, vector signed short a2)
2397{
2398  return (vector signed short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2);
2399}
2400
2401inline vector unsigned short
2402vec_vmrglh (vector unsigned short a1, vector unsigned short a2)
2403{
2404  return (vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2);
2405}
2406
2407/* vec_vmrglb */
2408
2409inline vector signed char
2410vec_vmrglb (vector signed char a1, vector signed char a2)
2411{
2412  return (vector signed char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2);
2413}
2414
2415inline vector unsigned char
2416vec_vmrglb (vector unsigned char a1, vector unsigned char a2)
2417{
2418  return (vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2);
2419}
2420
2421/* vec_mfvscr */
2422
2423inline vector unsigned short
2424vec_mfvscr (void)
2425{
2426  return (vector unsigned short) __builtin_altivec_mfvscr ();
2427}
2428
2429/* vec_min */
2430
2431inline vector unsigned char
2432vec_min (vector signed char a1, vector unsigned char a2)
2433{
2434  return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
2435}
2436
2437inline vector unsigned char
2438vec_min (vector unsigned char a1, vector signed char a2)
2439{
2440  return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
2441}
2442
2443inline vector unsigned char
2444vec_min (vector unsigned char a1, vector unsigned char a2)
2445{
2446  return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
2447}
2448
2449inline vector signed char
2450vec_min (vector signed char a1, vector signed char a2)
2451{
2452  return (vector signed char) __builtin_altivec_vminsb ((vector signed char) a1, (vector signed char) a2);
2453}
2454
2455inline vector unsigned short
2456vec_min (vector signed short a1, vector unsigned short a2)
2457{
2458  return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
2459}
2460
2461inline vector unsigned short
2462vec_min (vector unsigned short a1, vector signed short a2)
2463{
2464  return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
2465}
2466
2467inline vector unsigned short
2468vec_min (vector unsigned short a1, vector unsigned short a2)
2469{
2470  return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
2471}
2472
2473inline vector signed short
2474vec_min (vector signed short a1, vector signed short a2)
2475{
2476  return (vector signed short) __builtin_altivec_vminsh ((vector signed short) a1, (vector signed short) a2);
2477}
2478
2479inline vector unsigned int
2480vec_min (vector signed int a1, vector unsigned int a2)
2481{
2482  return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
2483}
2484
2485inline vector unsigned int
2486vec_min (vector unsigned int a1, vector signed int a2)
2487{
2488  return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
2489}
2490
2491inline vector unsigned int
2492vec_min (vector unsigned int a1, vector unsigned int a2)
2493{
2494  return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
2495}
2496
2497inline vector signed int
2498vec_min (vector signed int a1, vector signed int a2)
2499{
2500  return (vector signed int) __builtin_altivec_vminsw ((vector signed int) a1, (vector signed int) a2);
2501}
2502
2503inline vector float
2504vec_min (vector float a1, vector float a2)
2505{
2506  return (vector float) __builtin_altivec_vminfp ((vector float) a1, (vector float) a2);
2507}
2508
2509/* vec_vminfp */
2510
2511inline vector float
2512vec_vminfp (vector float a1, vector float a2)
2513{
2514  return (vector float) __builtin_altivec_vminfp ((vector float) a1, (vector float) a2);
2515}
2516
2517/* vec_vminsw */
2518
2519inline vector signed int
2520vec_vminsw (vector signed int a1, vector signed int a2)
2521{
2522  return (vector signed int) __builtin_altivec_vminsw ((vector signed int) a1, (vector signed int) a2);
2523}
2524
2525/* vec_vminuw */
2526
2527inline vector unsigned int
2528vec_vminuw (vector signed int a1, vector unsigned int a2)
2529{
2530  return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
2531}
2532
2533inline vector unsigned int
2534vec_vminuw (vector unsigned int a1, vector signed int a2)
2535{
2536  return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
2537}
2538
2539inline vector unsigned int
2540vec_vminuw (vector unsigned int a1, vector unsigned int a2)
2541{
2542  return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
2543}
2544
2545/* vec_vminsh */
2546
2547inline vector signed short
2548vec_vminsh (vector signed short a1, vector signed short a2)
2549{
2550  return (vector signed short) __builtin_altivec_vminsh ((vector signed short) a1, (vector signed short) a2);
2551}
2552
2553/* vec_vminuh */
2554
2555inline vector unsigned short
2556vec_vminuh (vector signed short a1, vector unsigned short a2)
2557{
2558  return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
2559}
2560
2561inline vector unsigned short
2562vec_vminuh (vector unsigned short a1, vector signed short a2)
2563{
2564  return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
2565}
2566
2567inline vector unsigned short
2568vec_vminuh (vector unsigned short a1, vector unsigned short a2)
2569{
2570  return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
2571}
2572
2573/* vec_vminsb */
2574
2575inline vector signed char
2576vec_vminsb (vector signed char a1, vector signed char a2)
2577{
2578  return (vector signed char) __builtin_altivec_vminsb ((vector signed char) a1, (vector signed char) a2);
2579}
2580
2581/* vec_vminub */
2582
2583inline vector unsigned char
2584vec_vminub (vector signed char a1, vector unsigned char a2)
2585{
2586  return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
2587}
2588
2589inline vector unsigned char
2590vec_vminub (vector unsigned char a1, vector signed char a2)
2591{
2592  return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
2593}
2594
2595inline vector unsigned char
2596vec_vminub (vector unsigned char a1, vector unsigned char a2)
2597{
2598  return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
2599}
2600
2601/* vec_mladd */
2602
2603inline vector signed short
2604vec_mladd (vector signed short a1, vector signed short a2, vector signed short a3)
2605{
2606  return (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
2607}
2608
2609inline vector signed short
2610vec_mladd (vector signed short a1, vector unsigned short a2, vector unsigned short a3)
2611{
2612  return (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
2613}
2614
2615inline vector signed short
2616vec_mladd (vector unsigned short a1, vector signed short a2, vector signed short a3)
2617{
2618  return (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
2619}
2620
2621inline vector unsigned short
2622vec_mladd (vector unsigned short a1, vector unsigned short a2, vector unsigned short a3)
2623{
2624  return (vector unsigned short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
2625}
2626
2627/* vec_mradds */
2628
2629inline vector signed short
2630vec_mradds (vector signed short a1, vector signed short a2, vector signed short a3)
2631{
2632  return (vector signed short) __builtin_altivec_vmhraddshs ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
2633}
2634
2635/* vec_msum */
2636
2637inline vector unsigned int
2638vec_msum (vector unsigned char a1, vector unsigned char a2, vector unsigned int a3)
2639{
2640  return (vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3);
2641}
2642
2643inline vector signed int
2644vec_msum (vector signed char a1, vector unsigned char a2, vector signed int a3)
2645{
2646  return (vector signed int) __builtin_altivec_vmsummbm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3);
2647}
2648
2649inline vector unsigned int
2650vec_msum (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3)
2651{
2652  return (vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
2653}
2654
2655inline vector signed int
2656vec_msum (vector signed short a1, vector signed short a2, vector signed int a3)
2657{
2658  return (vector signed int) __builtin_altivec_vmsumshm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
2659}
2660
2661/* vec_vmsumshm */
2662
2663inline vector signed int
2664vec_vmsumshm (vector signed short a1, vector signed short a2, vector signed int a3)
2665{
2666  return (vector signed int) __builtin_altivec_vmsumshm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
2667}
2668
2669/* vec_vmsumuhm */
2670
2671inline vector unsigned int
2672vec_vmsumuhm (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3)
2673{
2674  return (vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
2675}
2676
2677/* vec_vmsummbm */
2678
2679inline vector signed int
2680vec_vmsummbm (vector signed char a1, vector unsigned char a2, vector signed int a3)
2681{
2682  return (vector signed int) __builtin_altivec_vmsummbm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3);
2683}
2684
2685/* vec_vmsumubm */
2686
2687inline vector unsigned int
2688vec_vmsumubm (vector unsigned char a1, vector unsigned char a2, vector unsigned int a3)
2689{
2690  return (vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3);
2691}
2692
2693/* vec_msums */
2694
2695inline vector unsigned int
2696vec_msums (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3)
2697{
2698  return (vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
2699}
2700
2701inline vector signed int
2702vec_msums (vector signed short a1, vector signed short a2, vector signed int a3)
2703{
2704  return (vector signed int) __builtin_altivec_vmsumshs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
2705}
2706
2707/* vec_vmsumshs */
2708
2709inline vector signed int
2710vec_vmsumshs (vector signed short a1, vector signed short a2, vector signed int a3)
2711{
2712  return (vector signed int) __builtin_altivec_vmsumshs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
2713}
2714
2715/* vec_vmsumuhs */
2716
2717inline vector unsigned int
2718vec_vmsumuhs (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3)
2719{
2720  return (vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
2721}
2722
2723/* vec_mtvscr */
2724
2725inline void
2726vec_mtvscr (vector signed int a1)
2727{
2728  __builtin_altivec_mtvscr ((vector signed int) a1);
2729}
2730
2731inline void
2732vec_mtvscr (vector unsigned int a1)
2733{
2734  __builtin_altivec_mtvscr ((vector signed int) a1);
2735}
2736
2737inline void
2738vec_mtvscr (vector signed short a1)
2739{
2740  __builtin_altivec_mtvscr ((vector signed int) a1);
2741}
2742
2743inline void
2744vec_mtvscr (vector unsigned short a1)
2745{
2746  __builtin_altivec_mtvscr ((vector signed int) a1);
2747}
2748
2749inline void
2750vec_mtvscr (vector signed char a1)
2751{
2752  __builtin_altivec_mtvscr ((vector signed int) a1);
2753}
2754
2755inline void
2756vec_mtvscr (vector unsigned char a1)
2757{
2758  __builtin_altivec_mtvscr ((vector signed int) a1);
2759}
2760
2761/* vec_mule */
2762
2763inline vector unsigned short
2764vec_mule (vector unsigned char a1, vector unsigned char a2)
2765{
2766  return (vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) a1, (vector signed char) a2);
2767}
2768
2769inline vector signed short
2770vec_mule (vector signed char a1, vector signed char a2)
2771{
2772  return (vector signed short) __builtin_altivec_vmulesb ((vector signed char) a1, (vector signed char) a2);
2773}
2774
2775inline vector unsigned int
2776vec_mule (vector unsigned short a1, vector unsigned short a2)
2777{
2778  return (vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) a1, (vector signed short) a2);
2779}
2780
2781inline vector signed int
2782vec_mule (vector signed short a1, vector signed short a2)
2783{
2784  return (vector signed int) __builtin_altivec_vmulesh ((vector signed short) a1, (vector signed short) a2);
2785}
2786
2787/* vec_vmulesh */
2788
2789inline vector signed int
2790vec_vmulesh (vector signed short a1, vector signed short a2)
2791{
2792  return (vector signed int) __builtin_altivec_vmulesh ((vector signed short) a1, (vector signed short) a2);
2793}
2794
2795/* vec_vmuleuh */
2796
2797inline vector unsigned int
2798vec_vmuleuh (vector unsigned short a1, vector unsigned short a2)
2799{
2800  return (vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) a1, (vector signed short) a2);
2801}
2802
2803/* vec_vmuleub */
2804inline vector unsigned short
2805vec_vmuleub (vector unsigned char a1, vector unsigned char a2)
2806{
2807  return (vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) a1, (vector signed char) a2);
2808}
2809
2810/* vec_mulo */
2811
2812inline vector unsigned short
2813vec_mulo (vector unsigned char a1, vector unsigned char a2)
2814{
2815  return (vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) a1, (vector signed char) a2);
2816}
2817
2818inline vector signed short
2819vec_mulo (vector signed char a1, vector signed char a2)
2820{
2821  return (vector signed short) __builtin_altivec_vmulosb ((vector signed char) a1, (vector signed char) a2);
2822}
2823
2824inline vector unsigned int
2825vec_mulo (vector unsigned short a1, vector unsigned short a2)
2826{
2827  return (vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) a1, (vector signed short) a2);
2828}
2829
2830inline vector signed int
2831vec_mulo (vector signed short a1, vector signed short a2)
2832{
2833  return (vector signed int) __builtin_altivec_vmulosh ((vector signed short) a1, (vector signed short) a2);
2834}
2835
2836/* vec_vmulosh */
2837
2838inline vector signed int
2839vec_vmulosh (vector signed short a1, vector signed short a2)
2840{
2841  return (vector signed int) __builtin_altivec_vmulosh ((vector signed short) a1, (vector signed short) a2);
2842}
2843
2844/* vec_vmulouh */
2845
2846inline vector unsigned int
2847vec_vmulouh (vector unsigned short a1, vector unsigned short a2)
2848{
2849  return (vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) a1, (vector signed short) a2);
2850}
2851
2852/* vec_vmulosb */
2853
2854inline vector signed short
2855vec_vmulosb (vector signed char a1, vector signed char a2)
2856{
2857  return (vector signed short) __builtin_altivec_vmulosb ((vector signed char) a1, (vector signed char) a2);
2858}
2859
2860/* vec_vmuloub */
2861
2862inline vector unsigned short
2863vec_vmuloub (vector unsigned char a1, vector unsigned char a2)
2864{
2865  return (vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) a1, (vector signed char) a2);
2866}
2867
2868/* vec_nmsub */
2869
2870inline vector float
2871vec_nmsub (vector float a1, vector float a2, vector float a3)
2872{
2873  return (vector float) __builtin_altivec_vnmsubfp ((vector float) a1, (vector float) a2, (vector float) a3);
2874}
2875
2876/* vec_nor */
2877
2878inline vector float
2879vec_nor (vector float a1, vector float a2)
2880{
2881  return (vector float) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
2882}
2883
2884inline vector signed int
2885vec_nor (vector signed int a1, vector signed int a2)
2886{
2887  return (vector signed int) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
2888}
2889
2890inline vector unsigned int
2891vec_nor (vector unsigned int a1, vector unsigned int a2)
2892{
2893  return (vector unsigned int) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
2894}
2895
2896inline vector signed short
2897vec_nor (vector signed short a1, vector signed short a2)
2898{
2899  return (vector signed short) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
2900}
2901
2902inline vector unsigned short
2903vec_nor (vector unsigned short a1, vector unsigned short a2)
2904{
2905  return (vector unsigned short) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
2906}
2907
2908inline vector signed char
2909vec_nor (vector signed char a1, vector signed char a2)
2910{
2911  return (vector signed char) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
2912}
2913
2914inline vector unsigned char
2915vec_nor (vector unsigned char a1, vector unsigned char a2)
2916{
2917  return (vector unsigned char) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
2918}
2919
2920/* vec_or */
2921
2922inline vector float
2923vec_or (vector float a1, vector float a2)
2924{
2925  return (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
2926}
2927
2928inline vector float
2929vec_or (vector float a1, vector signed int a2)
2930{
2931  return (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
2932}
2933
2934inline vector float
2935vec_or (vector signed int a1, vector float a2)
2936{
2937  return (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
2938}
2939
2940inline vector signed int
2941vec_or (vector signed int a1, vector signed int a2)
2942{
2943  return (vector signed int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
2944}
2945
2946inline vector unsigned int
2947vec_or (vector signed int a1, vector unsigned int a2)
2948{
2949  return (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
2950}
2951
2952inline vector unsigned int
2953vec_or (vector unsigned int a1, vector signed int a2)
2954{
2955  return (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
2956}
2957
2958inline vector unsigned int
2959vec_or (vector unsigned int a1, vector unsigned int a2)
2960{
2961  return (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
2962}
2963
2964inline vector signed short
2965vec_or (vector signed short a1, vector signed short a2)
2966{
2967  return (vector signed short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
2968}
2969
2970inline vector unsigned short
2971vec_or (vector signed short a1, vector unsigned short a2)
2972{
2973  return (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
2974}
2975
2976inline vector unsigned short
2977vec_or (vector unsigned short a1, vector signed short a2)
2978{
2979  return (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
2980}
2981
2982inline vector unsigned short
2983vec_or (vector unsigned short a1, vector unsigned short a2)
2984{
2985  return (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
2986}
2987
2988inline vector signed char
2989vec_or (vector signed char a1, vector signed char a2)
2990{
2991  return (vector signed char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
2992}
2993
2994inline vector unsigned char
2995vec_or (vector signed char a1, vector unsigned char a2)
2996{
2997  return (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
2998}
2999
3000inline vector unsigned char
3001vec_or (vector unsigned char a1, vector signed char a2)
3002{
3003  return (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
3004}
3005
3006inline vector unsigned char
3007vec_or (vector unsigned char a1, vector unsigned char a2)
3008{
3009  return (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
3010}
3011
3012/* vec_pack */
3013
3014inline vector signed char
3015vec_pack (vector signed short a1, vector signed short a2)
3016{
3017  return (vector signed char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2);
3018}
3019
3020inline vector unsigned char
3021vec_pack (vector unsigned short a1, vector unsigned short a2)
3022{
3023  return (vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2);
3024}
3025
3026inline vector signed short
3027vec_pack (vector signed int a1, vector signed int a2)
3028{
3029  return (vector signed short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2);
3030}
3031
3032inline vector unsigned short
3033vec_pack (vector unsigned int a1, vector unsigned int a2)
3034{
3035  return (vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2);
3036}
3037
3038/* vec_vpkuwum */
3039
3040inline vector signed short
3041vec_vpkuwum (vector signed int a1, vector signed int a2)
3042{
3043  return (vector signed short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2);
3044}
3045
3046inline vector unsigned short
3047vec_vpkuwum (vector unsigned int a1, vector unsigned int a2)
3048{
3049  return (vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2);
3050}
3051
3052/* vec_vpkuhum */
3053
3054inline vector signed char
3055vec_vpkuhum (vector signed short a1, vector signed short a2)
3056{
3057  return (vector signed char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2);
3058}
3059
3060inline vector unsigned char
3061vec_vpkuhum (vector unsigned short a1, vector unsigned short a2)
3062{
3063  return (vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2);
3064}
3065
3066/* vec_packpx */
3067
3068inline vector unsigned short
3069vec_packpx (vector unsigned int a1, vector unsigned int a2)
3070{
3071  return (vector unsigned short) __builtin_altivec_vpkpx ((vector signed int) a1, (vector signed int) a2);
3072}
3073
3074/* vec_packs */
3075
3076inline vector unsigned char
3077vec_packs (vector unsigned short a1, vector unsigned short a2)
3078{
3079  return (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2);
3080}
3081
3082inline vector signed char
3083vec_packs (vector signed short a1, vector signed short a2)
3084{
3085  return (vector signed char) __builtin_altivec_vpkshss ((vector signed short) a1, (vector signed short) a2);
3086}
3087
3088inline vector unsigned short
3089vec_packs (vector unsigned int a1, vector unsigned int a2)
3090{
3091  return (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2);
3092}
3093
3094inline vector signed short
3095vec_packs (vector signed int a1, vector signed int a2)
3096{
3097  return (vector signed short) __builtin_altivec_vpkswss ((vector signed int) a1, (vector signed int) a2);
3098}
3099
3100/* vec_vpkswss */
3101
3102inline vector signed short
3103vec_vpkswss (vector signed int a1, vector signed int a2)
3104{
3105  return (vector signed short) __builtin_altivec_vpkswss ((vector signed int) a1, (vector signed int) a2);
3106}
3107
3108/* vec_vpkuwus */
3109
3110inline vector unsigned short
3111vec_vpkuwus (vector unsigned int a1, vector unsigned int a2)
3112{
3113  return (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2);
3114}
3115
3116/* vec_vpkshss */
3117
3118inline vector signed char
3119vec_vpkshss (vector signed short a1, vector signed short a2)
3120{
3121  return (vector signed char) __builtin_altivec_vpkshss ((vector signed short) a1, (vector signed short) a2);
3122}
3123
3124/* vec_vpkuhus */
3125
3126inline vector unsigned char
3127vec_vpkuhus (vector unsigned short a1, vector unsigned short a2)
3128{
3129  return (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2);
3130}
3131
3132/* vec_packsu */
3133
3134inline vector unsigned char
3135vec_packsu (vector unsigned short a1, vector unsigned short a2)
3136{
3137  return (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2);
3138}
3139
3140inline vector unsigned char
3141vec_packsu (vector signed short a1, vector signed short a2)
3142{
3143  return (vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) a1, (vector signed short) a2);
3144}
3145
3146inline vector unsigned short
3147vec_packsu (vector unsigned int a1, vector unsigned int a2)
3148{
3149  return (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2);
3150}
3151
3152inline vector unsigned short
3153vec_packsu (vector signed int a1, vector signed int a2)
3154{
3155  return (vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) a1, (vector signed int) a2);
3156}
3157
3158/* vec_vpkswus */
3159
3160inline vector unsigned short
3161vec_vpkswus (vector signed int a1, vector signed int a2)
3162{
3163  return (vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) a1, (vector signed int) a2);
3164}
3165
3166/* vec_vpkshus */
3167
3168inline vector unsigned char
3169vec_vpkshus (vector signed short a1, vector signed short a2)
3170{
3171  return (vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) a1, (vector signed short) a2);
3172}
3173
3174/* vec_perm */
3175
3176inline vector float
3177vec_perm (vector float a1, vector float a2, vector unsigned char a3)
3178{
3179  return (vector float) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
3180}
3181
3182inline vector signed int
3183vec_perm (vector signed int a1, vector signed int a2, vector unsigned char a3)
3184{
3185  return (vector signed int) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
3186}
3187
3188inline vector unsigned int
3189vec_perm (vector unsigned int a1, vector unsigned int a2, vector unsigned char a3)
3190{
3191  return (vector unsigned int) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
3192}
3193
3194inline vector signed short
3195vec_perm (vector signed short a1, vector signed short a2, vector unsigned char a3)
3196{
3197  return (vector signed short) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
3198}
3199
3200inline vector unsigned short
3201vec_perm (vector unsigned short a1, vector unsigned short a2, vector unsigned char a3)
3202{
3203  return (vector unsigned short) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
3204}
3205
3206inline vector signed char
3207vec_perm (vector signed char a1, vector signed char a2, vector unsigned char a3)
3208{
3209  return (vector signed char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
3210}
3211
3212inline vector unsigned char
3213vec_perm (vector unsigned char a1, vector unsigned char a2, vector unsigned char a3)
3214{
3215  return (vector unsigned char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
3216}
3217
3218/* vec_re */
3219
3220inline vector float
3221vec_re (vector float a1)
3222{
3223  return (vector float) __builtin_altivec_vrefp ((vector float) a1);
3224}
3225
3226/* vec_rl */
3227
3228inline vector signed char
3229vec_rl (vector signed char a1, vector unsigned char a2)
3230{
3231  return (vector signed char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2);
3232}
3233
3234inline vector unsigned char
3235vec_rl (vector unsigned char a1, vector unsigned char a2)
3236{
3237  return (vector unsigned char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2);
3238}
3239
3240inline vector signed short
3241vec_rl (vector signed short a1, vector unsigned short a2)
3242{
3243  return (vector signed short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2);
3244}
3245
3246inline vector unsigned short
3247vec_rl (vector unsigned short a1, vector unsigned short a2)
3248{
3249  return (vector unsigned short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2);
3250}
3251
3252inline vector signed int
3253vec_rl (vector signed int a1, vector unsigned int a2)
3254{
3255  return (vector signed int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2);
3256}
3257
3258inline vector unsigned int
3259vec_rl (vector unsigned int a1, vector unsigned int a2)
3260{
3261  return (vector unsigned int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2);
3262}
3263
3264/* vec_vrlw */
3265
3266inline vector signed int
3267vec_vrlw (vector signed int a1, vector unsigned int a2)
3268{
3269  return (vector signed int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2);
3270}
3271
3272inline vector unsigned int
3273vec_vrlw (vector unsigned int a1, vector unsigned int a2)
3274{
3275  return (vector unsigned int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2);
3276}
3277
3278/* vec_vrlh */
3279
3280inline vector signed short
3281vec_vrlh (vector signed short a1, vector unsigned short a2)
3282{
3283  return (vector signed short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2);
3284}
3285
3286inline vector unsigned short
3287vec_vrlh (vector unsigned short a1, vector unsigned short a2)
3288{
3289  return (vector unsigned short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2);
3290}
3291
3292/* vec_vrlb */
3293
3294inline vector signed char
3295vec_vrlb (vector signed char a1, vector unsigned char a2)
3296{
3297  return (vector signed char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2);
3298}
3299
3300inline vector unsigned char
3301vec_vrlb (vector unsigned char a1, vector unsigned char a2)
3302{
3303  return (vector unsigned char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2);
3304}
3305
3306/* vec_round */
3307
3308inline vector float
3309vec_round (vector float a1)
3310{
3311  return (vector float) __builtin_altivec_vrfin ((vector float) a1);
3312}
3313
3314/* vec_rsqrte */
3315
3316inline vector float
3317vec_rsqrte (vector float a1)
3318{
3319  return (vector float) __builtin_altivec_vrsqrtefp ((vector float) a1);
3320}
3321
3322/* vec_sel */
3323
3324inline vector float
3325vec_sel (vector float a1, vector float a2, vector signed int a3)
3326{
3327  return (vector float) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3328}
3329
3330inline vector float
3331vec_sel (vector float a1, vector float a2, vector unsigned int a3)
3332{
3333  return (vector float) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3334}
3335
3336inline vector signed int
3337vec_sel (vector signed int a1, vector signed int a2, vector signed int a3)
3338{
3339  return (vector signed int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3340}
3341
3342inline vector signed int
3343vec_sel (vector signed int a1, vector signed int a2, vector unsigned int a3)
3344{
3345  return (vector signed int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3346}
3347
3348inline vector unsigned int
3349vec_sel (vector unsigned int a1, vector unsigned int a2, vector signed int a3)
3350{
3351  return (vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3352}
3353
3354inline vector unsigned int
3355vec_sel (vector unsigned int a1, vector unsigned int a2, vector unsigned int a3)
3356{
3357  return (vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3358}
3359
3360inline vector signed short
3361vec_sel (vector signed short a1, vector signed short a2, vector signed short a3)
3362{
3363  return (vector signed short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3364}
3365
3366inline vector signed short
3367vec_sel (vector signed short a1, vector signed short a2, vector unsigned short a3)
3368{
3369  return (vector signed short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3370}
3371
3372inline vector unsigned short
3373vec_sel (vector unsigned short a1, vector unsigned short a2, vector signed short a3)
3374{
3375  return (vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3376}
3377
3378inline vector unsigned short
3379vec_sel (vector unsigned short a1, vector unsigned short a2, vector unsigned short a3)
3380{
3381  return (vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3382}
3383
3384inline vector signed char
3385vec_sel (vector signed char a1, vector signed char a2, vector signed char a3)
3386{
3387  return (vector signed char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3388}
3389
3390inline vector signed char
3391vec_sel (vector signed char a1, vector signed char a2, vector unsigned char a3)
3392{
3393  return (vector signed char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3394}
3395
3396inline vector unsigned char
3397vec_sel (vector unsigned char a1, vector unsigned char a2, vector signed char a3)
3398{
3399  return (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3400}
3401
3402inline vector unsigned char
3403vec_sel (vector unsigned char a1, vector unsigned char a2, vector unsigned char a3)
3404{
3405  return (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
3406}
3407
3408/* vec_sl */
3409
3410inline vector signed char
3411vec_sl (vector signed char a1, vector unsigned char a2)
3412{
3413  return (vector signed char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2);
3414}
3415
3416inline vector unsigned char
3417vec_sl (vector unsigned char a1, vector unsigned char a2)
3418{
3419  return (vector unsigned char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2);
3420}
3421
3422inline vector signed short
3423vec_sl (vector signed short a1, vector unsigned short a2)
3424{
3425  return (vector signed short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2);
3426}
3427
3428inline vector unsigned short
3429vec_sl (vector unsigned short a1, vector unsigned short a2)
3430{
3431  return (vector unsigned short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2);
3432}
3433
3434inline vector signed int
3435vec_sl (vector signed int a1, vector unsigned int a2)
3436{
3437  return (vector signed int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2);
3438}
3439
3440inline vector unsigned int
3441vec_sl (vector unsigned int a1, vector unsigned int a2)
3442{
3443  return (vector unsigned int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2);
3444}
3445
3446/* vec_vslw */
3447
3448inline vector signed int
3449vec_vslw (vector signed int a1, vector unsigned int a2)
3450{
3451  return (vector signed int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2);
3452}
3453
3454inline vector unsigned int
3455vec_vslw (vector unsigned int a1, vector unsigned int a2)
3456{
3457  return (vector unsigned int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2);
3458}
3459
3460/* vec_vslh */
3461
3462inline vector signed short
3463vec_vslh (vector signed short a1, vector unsigned short a2)
3464{
3465  return (vector signed short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2);
3466}
3467
3468inline vector unsigned short
3469vec_vslh (vector unsigned short a1, vector unsigned short a2)
3470{
3471  return (vector unsigned short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2);
3472}
3473
3474/* vec_vslb */
3475
3476inline vector signed char
3477vec_vslb (vector signed char a1, vector unsigned char a2)
3478{
3479  return (vector signed char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2);
3480}
3481
3482inline vector unsigned char
3483vec_vslb (vector unsigned char a1, vector unsigned char a2)
3484{
3485  return (vector unsigned char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2);
3486}
3487
3488/* vec_sld */
3489
3490inline vector float
3491vec_sld (vector float a1, vector float a2, const char a3)
3492{
3493  return (vector float) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
3494}
3495
3496inline vector signed int
3497vec_sld (vector signed int a1, vector signed int a2, const char a3)
3498{
3499  return (vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
3500}
3501
3502inline vector unsigned int
3503vec_sld (vector unsigned int a1, vector unsigned int a2, const char a3)
3504{
3505  return (vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
3506}
3507
3508inline vector signed short
3509vec_sld (vector signed short a1, vector signed short a2, const char a3)
3510{
3511  return (vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
3512}
3513
3514inline vector unsigned short
3515vec_sld (vector unsigned short a1, vector unsigned short a2, const char a3)
3516{
3517  return (vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
3518}
3519
3520inline vector signed char
3521vec_sld (vector signed char a1, vector signed char a2, const char a3)
3522{
3523  return (vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
3524}
3525
3526inline vector unsigned char
3527vec_sld (vector unsigned char a1, vector unsigned char a2, const char a3)
3528{
3529  return (vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
3530}
3531
3532/* vec_sll */
3533
3534inline vector signed int
3535vec_sll (vector signed int a1, vector unsigned int a2)
3536{
3537  return (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3538}
3539
3540inline vector signed int
3541vec_sll (vector signed int a1, vector unsigned short a2)
3542{
3543  return (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3544}
3545
3546inline vector signed int
3547vec_sll (vector signed int a1, vector unsigned char a2)
3548{
3549  return (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3550}
3551
3552inline vector unsigned int
3553vec_sll (vector unsigned int a1, vector unsigned int a2)
3554{
3555  return (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3556}
3557
3558inline vector unsigned int
3559vec_sll (vector unsigned int a1, vector unsigned short a2)
3560{
3561  return (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3562}
3563
3564inline vector unsigned int
3565vec_sll (vector unsigned int a1, vector unsigned char a2)
3566{
3567  return (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3568}
3569
3570inline vector signed short
3571vec_sll (vector signed short a1, vector unsigned int a2)
3572{
3573  return (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3574}
3575
3576inline vector signed short
3577vec_sll (vector signed short a1, vector unsigned short a2)
3578{
3579  return (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3580}
3581
3582inline vector signed short
3583vec_sll (vector signed short a1, vector unsigned char a2)
3584{
3585  return (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3586}
3587
3588inline vector unsigned short
3589vec_sll (vector unsigned short a1, vector unsigned int a2)
3590{
3591  return (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3592}
3593
3594inline vector unsigned short
3595vec_sll (vector unsigned short a1, vector unsigned short a2)
3596{
3597  return (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3598}
3599
3600inline vector unsigned short
3601vec_sll (vector unsigned short a1, vector unsigned char a2)
3602{
3603  return (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3604}
3605
3606inline vector signed char
3607vec_sll (vector signed char a1, vector unsigned int a2)
3608{
3609  return (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3610}
3611
3612inline vector signed char
3613vec_sll (vector signed char a1, vector unsigned short a2)
3614{
3615  return (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3616}
3617
3618inline vector signed char
3619vec_sll (vector signed char a1, vector unsigned char a2)
3620{
3621  return (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3622}
3623
3624inline vector unsigned char
3625vec_sll (vector unsigned char a1, vector unsigned int a2)
3626{
3627  return (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3628}
3629
3630inline vector unsigned char
3631vec_sll (vector unsigned char a1, vector unsigned short a2)
3632{
3633  return (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3634}
3635
3636inline vector unsigned char
3637vec_sll (vector unsigned char a1, vector unsigned char a2)
3638{
3639  return (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
3640}
3641
3642/* vec_slo */
3643
3644inline vector float
3645vec_slo (vector float a1, vector signed char a2)
3646{
3647  return (vector float) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3648}
3649
3650inline vector float
3651vec_slo (vector float a1, vector unsigned char a2)
3652{
3653  return (vector float) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3654}
3655
3656inline vector signed int
3657vec_slo (vector signed int a1, vector signed char a2)
3658{
3659  return (vector signed int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3660}
3661
3662inline vector signed int
3663vec_slo (vector signed int a1, vector unsigned char a2)
3664{
3665  return (vector signed int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3666}
3667
3668inline vector unsigned int
3669vec_slo (vector unsigned int a1, vector signed char a2)
3670{
3671  return (vector unsigned int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3672}
3673
3674inline vector unsigned int
3675vec_slo (vector unsigned int a1, vector unsigned char a2)
3676{
3677  return (vector unsigned int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3678}
3679
3680inline vector signed short
3681vec_slo (vector signed short a1, vector signed char a2)
3682{
3683  return (vector signed short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3684}
3685
3686inline vector signed short
3687vec_slo (vector signed short a1, vector unsigned char a2)
3688{
3689  return (vector signed short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3690}
3691
3692inline vector unsigned short
3693vec_slo (vector unsigned short a1, vector signed char a2)
3694{
3695  return (vector unsigned short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3696}
3697
3698inline vector unsigned short
3699vec_slo (vector unsigned short a1, vector unsigned char a2)
3700{
3701  return (vector unsigned short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3702}
3703
3704inline vector signed char
3705vec_slo (vector signed char a1, vector signed char a2)
3706{
3707  return (vector signed char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3708}
3709
3710inline vector signed char
3711vec_slo (vector signed char a1, vector unsigned char a2)
3712{
3713  return (vector signed char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3714}
3715
3716inline vector unsigned char
3717vec_slo (vector unsigned char a1, vector signed char a2)
3718{
3719  return (vector unsigned char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3720}
3721
3722inline vector unsigned char
3723vec_slo (vector unsigned char a1, vector unsigned char a2)
3724{
3725  return (vector unsigned char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
3726}
3727
3728/* vec_splat */
3729
3730inline vector signed char
3731vec_splat (vector signed char a1, const char a2)
3732{
3733  return (vector signed char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
3734}
3735
3736inline vector unsigned char
3737vec_splat (vector unsigned char a1, const char a2)
3738{
3739  return (vector unsigned char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
3740}
3741
3742inline vector signed short
3743vec_splat (vector signed short a1, const char a2)
3744{
3745  return (vector signed short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
3746}
3747
3748inline vector unsigned short
3749vec_splat (vector unsigned short a1, const char a2)
3750{
3751  return (vector unsigned short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
3752}
3753
3754inline vector float
3755vec_splat (vector float a1, const char a2)
3756{
3757  return (vector float) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
3758}
3759
3760inline vector signed int
3761vec_splat (vector signed int a1, const char a2)
3762{
3763  return (vector signed int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
3764}
3765
3766inline vector unsigned int
3767vec_splat (vector unsigned int a1, const char a2)
3768{
3769  return (vector unsigned int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
3770}
3771
3772/* vec_vspltw */
3773
3774inline vector float
3775vec_vspltw (vector float a1, const char a2)
3776{
3777  return (vector float) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
3778}
3779
3780inline vector signed int
3781vec_vspltw (vector signed int a1, const char a2)
3782{
3783  return (vector signed int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
3784}
3785
3786inline vector unsigned int
3787vec_vspltw (vector unsigned int a1, const char a2)
3788{
3789  return (vector unsigned int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
3790}
3791
3792/* vec_vsplth */
3793
3794inline vector signed short
3795vec_vsplth (vector signed short a1, const char a2)
3796{
3797  return (vector signed short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
3798}
3799
3800inline vector unsigned short
3801vec_vsplth (vector unsigned short a1, const char a2)
3802{
3803  return (vector unsigned short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
3804}
3805
3806/* vec_vspltb */
3807
3808inline vector signed char
3809vec_vspltb (vector signed char a1, const char a2)
3810{
3811  return (vector signed char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
3812}
3813
3814inline vector unsigned char
3815vec_vspltb (vector unsigned char a1, const char a2)
3816{
3817  return (vector unsigned char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
3818}
3819
3820/* vec_splat_s8 */
3821
3822inline vector signed char
3823vec_splat_s8 (const char a1)
3824{
3825  return (vector signed char) __builtin_altivec_vspltisb (a1);
3826}
3827
3828/* vec_splat_s16 */
3829
3830inline vector signed short
3831vec_splat_s16 (const char a1)
3832{
3833  return (vector signed short) __builtin_altivec_vspltish (a1);
3834}
3835
3836/* vec_splat_s32 */
3837
3838inline vector signed int
3839vec_splat_s32 (const char a1)
3840{
3841  return (vector signed int) __builtin_altivec_vspltisw (a1);
3842}
3843
3844/* vec_splat_u8 */
3845
3846inline vector unsigned char
3847vec_splat_u8 (const char a1)
3848{
3849  return (vector unsigned char) __builtin_altivec_vspltisb (a1);
3850}
3851
3852/* vec_splat_u16 */
3853
3854inline vector unsigned short
3855vec_splat_u16 (const char a1)
3856{
3857  return (vector unsigned short) __builtin_altivec_vspltish (a1);
3858}
3859
3860/* vec_splat_u32 */
3861
3862inline vector unsigned int
3863vec_splat_u32 (const char a1)
3864{
3865  return (vector unsigned int) __builtin_altivec_vspltisw (a1);
3866}
3867
3868/* vec_sr */
3869
3870inline vector signed char
3871vec_sr (vector signed char a1, vector unsigned char a2)
3872{
3873  return (vector signed char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2);
3874}
3875
3876inline vector unsigned char
3877vec_sr (vector unsigned char a1, vector unsigned char a2)
3878{
3879  return (vector unsigned char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2);
3880}
3881
3882inline vector signed short
3883vec_sr (vector signed short a1, vector unsigned short a2)
3884{
3885  return (vector signed short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2);
3886}
3887
3888inline vector unsigned short
3889vec_sr (vector unsigned short a1, vector unsigned short a2)
3890{
3891  return (vector unsigned short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2);
3892}
3893
3894inline vector signed int
3895vec_sr (vector signed int a1, vector unsigned int a2)
3896{
3897  return (vector signed int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2);
3898}
3899
3900inline vector unsigned int
3901vec_sr (vector unsigned int a1, vector unsigned int a2)
3902{
3903  return (vector unsigned int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2);
3904}
3905
3906/* vec_vsrw */
3907
3908inline vector signed int
3909vec_vsrw (vector signed int a1, vector unsigned int a2)
3910{
3911  return (vector signed int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2);
3912}
3913
3914inline vector unsigned int
3915vec_vsrw (vector unsigned int a1, vector unsigned int a2)
3916{
3917  return (vector unsigned int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2);
3918}
3919
3920/* vec_vsrh */
3921
3922inline vector signed short
3923vec_vsrh (vector signed short a1, vector unsigned short a2)
3924{
3925  return (vector signed short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2);
3926}
3927
3928inline vector unsigned short
3929vec_vsrh (vector unsigned short a1, vector unsigned short a2)
3930{
3931  return (vector unsigned short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2);
3932}
3933
3934/* vec_vsrb */
3935
3936inline vector signed char
3937vec_vsrb (vector signed char a1, vector unsigned char a2)
3938{
3939  return (vector signed char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2);
3940}
3941
3942inline vector unsigned char
3943vec_vsrb (vector unsigned char a1, vector unsigned char a2)
3944{
3945  return (vector unsigned char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2);
3946}
3947
3948/* vec_sra */
3949
3950inline vector signed char
3951vec_sra (vector signed char a1, vector unsigned char a2)
3952{
3953  return (vector signed char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2);
3954}
3955
3956inline vector unsigned char
3957vec_sra (vector unsigned char a1, vector unsigned char a2)
3958{
3959  return (vector unsigned char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2);
3960}
3961
3962inline vector signed short
3963vec_sra (vector signed short a1, vector unsigned short a2)
3964{
3965  return (vector signed short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2);
3966}
3967
3968inline vector unsigned short
3969vec_sra (vector unsigned short a1, vector unsigned short a2)
3970{
3971  return (vector unsigned short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2);
3972}
3973
3974inline vector signed int
3975vec_sra (vector signed int a1, vector unsigned int a2)
3976{
3977  return (vector signed int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2);
3978}
3979
3980inline vector unsigned int
3981vec_sra (vector unsigned int a1, vector unsigned int a2)
3982{
3983  return (vector unsigned int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2);
3984}
3985
3986/* vec_vsraw */
3987
3988inline vector signed int
3989vec_vsraw (vector signed int a1, vector unsigned int a2)
3990{
3991  return (vector signed int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2);
3992}
3993
3994inline vector unsigned int
3995vec_vsraw (vector unsigned int a1, vector unsigned int a2)
3996{
3997  return (vector unsigned int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2);
3998}
3999
4000/* vec_vsrah */
4001
4002inline vector signed short
4003vec_vsrah (vector signed short a1, vector unsigned short a2)
4004{
4005  return (vector signed short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2);
4006}
4007
4008inline vector unsigned short
4009vec_vsrah (vector unsigned short a1, vector unsigned short a2)
4010{
4011  return (vector unsigned short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2);
4012}
4013
4014/* vec_vsrab */
4015
4016inline vector signed char
4017vec_vsrab (vector signed char a1, vector unsigned char a2)
4018{
4019  return (vector signed char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2);
4020}
4021
4022inline vector unsigned char
4023vec_vsrab (vector unsigned char a1, vector unsigned char a2)
4024{
4025  return (vector unsigned char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2);
4026}
4027
4028/* vec_srl */
4029
4030inline vector signed int
4031vec_srl (vector signed int a1, vector unsigned int a2)
4032{
4033  return (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4034}
4035
4036inline vector signed int
4037vec_srl (vector signed int a1, vector unsigned short a2)
4038{
4039  return (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4040}
4041
4042inline vector signed int
4043vec_srl (vector signed int a1, vector unsigned char a2)
4044{
4045  return (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4046}
4047
4048inline vector unsigned int
4049vec_srl (vector unsigned int a1, vector unsigned int a2)
4050{
4051  return (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4052}
4053
4054inline vector unsigned int
4055vec_srl (vector unsigned int a1, vector unsigned short a2)
4056{
4057  return (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4058}
4059
4060inline vector unsigned int
4061vec_srl (vector unsigned int a1, vector unsigned char a2)
4062{
4063  return (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4064}
4065
4066inline vector signed short
4067vec_srl (vector signed short a1, vector unsigned int a2)
4068{
4069  return (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4070}
4071
4072inline vector signed short
4073vec_srl (vector signed short a1, vector unsigned short a2)
4074{
4075  return (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4076}
4077
4078inline vector signed short
4079vec_srl (vector signed short a1, vector unsigned char a2)
4080{
4081  return (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4082}
4083
4084inline vector unsigned short
4085vec_srl (vector unsigned short a1, vector unsigned int a2)
4086{
4087  return (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4088}
4089
4090inline vector unsigned short
4091vec_srl (vector unsigned short a1, vector unsigned short a2)
4092{
4093  return (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4094}
4095
4096inline vector unsigned short
4097vec_srl (vector unsigned short a1, vector unsigned char a2)
4098{
4099  return (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4100}
4101
4102inline vector signed char
4103vec_srl (vector signed char a1, vector unsigned int a2)
4104{
4105  return (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4106}
4107
4108inline vector signed char
4109vec_srl (vector signed char a1, vector unsigned short a2)
4110{
4111  return (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4112}
4113
4114inline vector signed char
4115vec_srl (vector signed char a1, vector unsigned char a2)
4116{
4117  return (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4118}
4119
4120inline vector unsigned char
4121vec_srl (vector unsigned char a1, vector unsigned int a2)
4122{
4123  return (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4124}
4125
4126inline vector unsigned char
4127vec_srl (vector unsigned char a1, vector unsigned short a2)
4128{
4129  return (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4130}
4131
4132inline vector unsigned char
4133vec_srl (vector unsigned char a1, vector unsigned char a2)
4134{
4135  return (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
4136}
4137
4138/* vec_sro */
4139
4140inline vector float
4141vec_sro (vector float a1, vector signed char a2)
4142{
4143  return (vector float) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4144}
4145
4146inline vector float
4147vec_sro (vector float a1, vector unsigned char a2)
4148{
4149  return (vector float) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4150}
4151
4152inline vector signed int
4153vec_sro (vector signed int a1, vector signed char a2)
4154{
4155  return (vector signed int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4156}
4157
4158inline vector signed int
4159vec_sro (vector signed int a1, vector unsigned char a2)
4160{
4161  return (vector signed int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4162}
4163
4164inline vector unsigned int
4165vec_sro (vector unsigned int a1, vector signed char a2)
4166{
4167  return (vector unsigned int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4168}
4169
4170inline vector unsigned int
4171vec_sro (vector unsigned int a1, vector unsigned char a2)
4172{
4173  return (vector unsigned int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4174}
4175
4176inline vector signed short
4177vec_sro (vector signed short a1, vector signed char a2)
4178{
4179  return (vector signed short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4180}
4181
4182inline vector signed short
4183vec_sro (vector signed short a1, vector unsigned char a2)
4184{
4185  return (vector signed short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4186}
4187
4188inline vector unsigned short
4189vec_sro (vector unsigned short a1, vector signed char a2)
4190{
4191  return (vector unsigned short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4192}
4193
4194inline vector unsigned short
4195vec_sro (vector unsigned short a1, vector unsigned char a2)
4196{
4197  return (vector unsigned short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4198}
4199
4200inline vector signed char
4201vec_sro (vector signed char a1, vector signed char a2)
4202{
4203  return (vector signed char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4204}
4205
4206inline vector signed char
4207vec_sro (vector signed char a1, vector unsigned char a2)
4208{
4209  return (vector signed char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4210}
4211
4212inline vector unsigned char
4213vec_sro (vector unsigned char a1, vector signed char a2)
4214{
4215  return (vector unsigned char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4216}
4217
4218inline vector unsigned char
4219vec_sro (vector unsigned char a1, vector unsigned char a2)
4220{
4221  return (vector unsigned char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
4222}
4223
4224/* vec_st */
4225
4226inline void
4227vec_st (vector float a1, int a2, void *a3)
4228{
4229  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
4230}
4231
4232inline void
4233vec_st (vector signed int a1, int a2, void *a3)
4234{
4235  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
4236}
4237
4238inline void
4239vec_st (vector unsigned int a1, int a2, void *a3)
4240{
4241  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
4242}
4243
4244inline void
4245vec_st (vector signed short a1, int a2, void *a3)
4246{
4247  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
4248}
4249
4250inline void
4251vec_st (vector unsigned short a1, int a2, void *a3)
4252{
4253  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
4254}
4255
4256inline void
4257vec_st (vector signed char a1, int a2, void *a3)
4258{
4259  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
4260}
4261
4262inline void
4263vec_st (vector unsigned char a1, int a2, void *a3)
4264{
4265  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
4266}
4267
4268/* vec_ste */
4269
4270inline void
4271vec_ste (vector signed char a1, int a2, void *a3)
4272{
4273  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
4274}
4275
4276inline void
4277vec_ste (vector unsigned char a1, int a2, void *a3)
4278{
4279  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
4280}
4281
4282inline void
4283vec_ste (vector signed short a1, int a2, void *a3)
4284{
4285  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
4286}
4287
4288inline void
4289vec_ste (vector unsigned short a1, int a2, void *a3)
4290{
4291  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
4292}
4293
4294inline void
4295vec_ste (vector float a1, int a2, void *a3)
4296{
4297  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
4298}
4299
4300inline void
4301vec_ste (vector signed int a1, int a2, void *a3)
4302{
4303  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
4304}
4305
4306inline void
4307vec_ste (vector unsigned int a1, int a2, void *a3)
4308{
4309  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
4310}
4311
4312/* vec_stvewx */
4313
4314inline void
4315vec_stvewx (vector float a1, int a2, void *a3)
4316{
4317  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
4318}
4319
4320inline void
4321vec_stvewx (vector signed int a1, int a2, void *a3)
4322{
4323  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
4324}
4325
4326inline void
4327vec_stvewx (vector unsigned int a1, int a2, void *a3)
4328{
4329  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
4330}
4331
4332/* vec_stvehx */
4333
4334inline void
4335vec_stvehx (vector signed short a1, int a2, void *a3)
4336{
4337  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
4338}
4339
4340inline void
4341vec_stvehx (vector unsigned short a1, int a2, void *a3)
4342{
4343  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
4344}
4345
4346/* vec_stvebx */
4347
4348inline void
4349vec_stvebx (vector signed char a1, int a2, void *a3)
4350{
4351  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
4352}
4353
4354inline void
4355vec_stvebx (vector unsigned char a1, int a2, void *a3)
4356{
4357  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
4358}
4359
4360/* vec_stl */
4361
4362inline void
4363vec_stl (vector float a1, int a2, void *a3)
4364{
4365  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
4366}
4367
4368inline void
4369vec_stl (vector signed int a1, int a2, void *a3)
4370{
4371  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
4372}
4373
4374inline void
4375vec_stl (vector unsigned int a1, int a2, void *a3)
4376{
4377  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
4378}
4379
4380inline void
4381vec_stl (vector signed short a1, int a2, void *a3)
4382{
4383  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
4384}
4385
4386inline void
4387vec_stl (vector unsigned short a1, int a2, void *a3)
4388{
4389  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
4390}
4391
4392inline void
4393vec_stl (vector signed char a1, int a2, void *a3)
4394{
4395  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
4396}
4397
4398inline void
4399vec_stl (vector unsigned char a1, int a2, void *a3)
4400{
4401  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
4402}
4403
4404/* vec_sub */
4405
4406inline vector signed char
4407vec_sub (vector signed char a1, vector signed char a2)
4408{
4409  return (vector signed char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
4410}
4411
4412inline vector unsigned char
4413vec_sub (vector signed char a1, vector unsigned char a2)
4414{
4415  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
4416}
4417
4418inline vector unsigned char
4419vec_sub (vector unsigned char a1, vector signed char a2)
4420{
4421  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
4422}
4423
4424inline vector unsigned char
4425vec_sub (vector unsigned char a1, vector unsigned char a2)
4426{
4427  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
4428}
4429
4430inline vector signed short
4431vec_sub (vector signed short a1, vector signed short a2)
4432{
4433  return (vector signed short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
4434}
4435
4436inline vector unsigned short
4437vec_sub (vector signed short a1, vector unsigned short a2)
4438{
4439  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
4440}
4441
4442inline vector unsigned short
4443vec_sub (vector unsigned short a1, vector signed short a2)
4444{
4445  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
4446}
4447
4448inline vector unsigned short
4449vec_sub (vector unsigned short a1, vector unsigned short a2)
4450{
4451  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
4452}
4453
4454inline vector signed int
4455vec_sub (vector signed int a1, vector signed int a2)
4456{
4457  return (vector signed int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
4458}
4459
4460inline vector unsigned int
4461vec_sub (vector signed int a1, vector unsigned int a2)
4462{
4463  return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
4464}
4465
4466inline vector unsigned int
4467vec_sub (vector unsigned int a1, vector signed int a2)
4468{
4469  return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
4470}
4471
4472inline vector unsigned int
4473vec_sub (vector unsigned int a1, vector unsigned int a2)
4474{
4475  return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
4476}
4477
4478inline vector float
4479vec_sub (vector float a1, vector float a2)
4480{
4481  return (vector float) __builtin_altivec_vsubfp ((vector float) a1, (vector float) a2);
4482}
4483
4484/* vec_vsubfp */
4485
4486inline vector float
4487vec_vsubfp (vector float a1, vector float a2)
4488{
4489  return (vector float) __builtin_altivec_vsubfp ((vector float) a1, (vector float) a2);
4490}
4491
4492/* vec_vsubuwm */
4493
4494inline vector signed int
4495vec_vsubuwm (vector signed int a1, vector signed int a2)
4496{
4497  return (vector signed int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
4498}
4499
4500inline vector unsigned int
4501vec_vsubuwm (vector signed int a1, vector unsigned int a2)
4502{
4503  return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
4504}
4505
4506inline vector unsigned int
4507vec_vsubuwm (vector unsigned int a1, vector signed int a2)
4508{
4509  return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
4510}
4511
4512inline vector unsigned int
4513vec_vsubuwm (vector unsigned int a1, vector unsigned int a2)
4514{
4515  return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
4516}
4517
4518/* vec_vsubuhm */
4519
4520inline vector signed short
4521vec_vsubuhm (vector signed short a1, vector signed short a2)
4522{
4523  return (vector signed short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
4524}
4525
4526inline vector unsigned short
4527vec_vsubuhm (vector signed short a1, vector unsigned short a2)
4528{
4529  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
4530}
4531
4532inline vector unsigned short
4533vec_vsubuhm (vector unsigned short a1, vector signed short a2)
4534{
4535  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
4536}
4537
4538inline vector unsigned short
4539vec_vsubuhm (vector unsigned short a1, vector unsigned short a2)
4540{
4541  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
4542}
4543
4544/* vec_vsububm */
4545
4546inline vector signed char
4547vec_vsububm (vector signed char a1, vector signed char a2)
4548{
4549  return (vector signed char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
4550}
4551
4552inline vector unsigned char
4553vec_vsububm (vector signed char a1, vector unsigned char a2)
4554{
4555  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
4556}
4557
4558inline vector unsigned char
4559vec_vsububm (vector unsigned char a1, vector signed char a2)
4560{
4561  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
4562}
4563
4564inline vector unsigned char
4565vec_vsububm (vector unsigned char a1, vector unsigned char a2)
4566{
4567  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
4568}
4569
4570/* vec_subc */
4571
4572inline vector unsigned int
4573vec_subc (vector unsigned int a1, vector unsigned int a2)
4574{
4575  return (vector unsigned int) __builtin_altivec_vsubcuw ((vector signed int) a1, (vector signed int) a2);
4576}
4577
4578/* vec_subs */
4579
4580inline vector unsigned char
4581vec_subs (vector signed char a1, vector unsigned char a2)
4582{
4583  return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
4584}
4585
4586inline vector unsigned char
4587vec_subs (vector unsigned char a1, vector signed char a2)
4588{
4589  return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
4590}
4591
4592inline vector unsigned char
4593vec_subs (vector unsigned char a1, vector unsigned char a2)
4594{
4595  return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
4596}
4597
4598inline vector signed char
4599vec_subs (vector signed char a1, vector signed char a2)
4600{
4601  return (vector signed char) __builtin_altivec_vsubsbs ((vector signed char) a1, (vector signed char) a2);
4602}
4603
4604inline vector unsigned short
4605vec_subs (vector signed short a1, vector unsigned short a2)
4606{
4607  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
4608}
4609
4610inline vector unsigned short
4611vec_subs (vector unsigned short a1, vector signed short a2)
4612{
4613  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
4614}
4615
4616inline vector unsigned short
4617vec_subs (vector unsigned short a1, vector unsigned short a2)
4618{
4619  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
4620}
4621
4622inline vector signed short
4623vec_subs (vector signed short a1, vector signed short a2)
4624{
4625  return (vector signed short) __builtin_altivec_vsubshs ((vector signed short) a1, (vector signed short) a2);
4626}
4627
4628inline vector unsigned int
4629vec_subs (vector signed int a1, vector unsigned int a2)
4630{
4631  return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
4632}
4633
4634inline vector unsigned int
4635vec_subs (vector unsigned int a1, vector signed int a2)
4636{
4637  return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
4638}
4639
4640inline vector unsigned int
4641vec_subs (vector unsigned int a1, vector unsigned int a2)
4642{
4643  return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
4644}
4645
4646inline vector signed int
4647vec_subs (vector signed int a1, vector signed int a2)
4648{
4649  return (vector signed int) __builtin_altivec_vsubsws ((vector signed int) a1, (vector signed int) a2);
4650}
4651
4652/* vec_vsubsws */
4653
4654inline vector signed int
4655vec_vsubsws (vector signed int a1, vector signed int a2)
4656{
4657  return (vector signed int) __builtin_altivec_vsubsws ((vector signed int) a1, (vector signed int) a2);
4658}
4659
4660/* vec_vsubuws */
4661
4662inline vector unsigned int
4663vec_vsubuws (vector signed int a1, vector unsigned int a2)
4664{
4665  return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
4666}
4667
4668inline vector unsigned int
4669vec_vsubuws (vector unsigned int a1, vector signed int a2)
4670{
4671  return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
4672}
4673
4674inline vector unsigned int
4675vec_vsubuws (vector unsigned int a1, vector unsigned int a2)
4676{
4677  return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
4678}
4679
4680/* vec_vsubshs */
4681
4682inline vector signed short
4683vec_vsubshs (vector signed short a1, vector signed short a2)
4684{
4685  return (vector signed short) __builtin_altivec_vsubshs ((vector signed short) a1, (vector signed short) a2);
4686}
4687
4688/* vec_vsubuhs */
4689
4690inline vector unsigned short
4691vec_vsubuhs (vector signed short a1, vector unsigned short a2)
4692{
4693  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
4694}
4695
4696inline vector unsigned short
4697vec_vsubuhs (vector unsigned short a1, vector signed short a2)
4698{
4699  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
4700}
4701
4702inline vector unsigned short
4703vec_vsubuhs (vector unsigned short a1, vector unsigned short a2)
4704{
4705  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
4706}
4707
4708/* vec_vsubsbs */
4709
4710inline vector signed char
4711vec_vsubsbs (vector signed char a1, vector signed char a2)
4712{
4713  return (vector signed char) __builtin_altivec_vsubsbs ((vector signed char) a1, (vector signed char) a2);
4714}
4715
4716/* vec_vsububs */
4717
4718inline vector unsigned char
4719vec_vsububs (vector signed char a1, vector unsigned char a2)
4720{
4721  return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
4722}
4723
4724inline vector unsigned char
4725vec_vsububs (vector unsigned char a1, vector signed char a2)
4726{
4727  return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
4728}
4729
4730inline vector unsigned char
4731vec_vsububs (vector unsigned char a1, vector unsigned char a2)
4732{
4733  return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
4734}
4735
4736/* vec_sum4s */
4737
4738inline vector unsigned int
4739vec_sum4s (vector unsigned char a1, vector unsigned int a2)
4740{
4741  return (vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) a1, (vector signed int) a2);
4742}
4743
4744inline vector signed int
4745vec_sum4s (vector signed char a1, vector signed int a2)
4746{
4747  return (vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) a1, (vector signed int) a2);
4748}
4749
4750inline vector signed int
4751vec_sum4s (vector signed short a1, vector signed int a2)
4752{
4753  return (vector signed int) __builtin_altivec_vsum4shs ((vector signed short) a1, (vector signed int) a2);
4754}
4755
4756/* vec_vsum4shs */
4757
4758inline vector signed int
4759vec_vsum4shss (vector signed short a1, vector signed int a2)
4760{
4761  return (vector signed int) __builtin_altivec_vsum4shs ((vector signed short) a1, (vector signed int) a2);
4762}
4763
4764/* vec_vsum4sbs */
4765
4766inline vector signed int
4767vec_vsum4sbs (vector signed char a1, vector signed int a2)
4768{
4769  return (vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) a1, (vector signed int) a2);
4770}
4771
4772/* vec_vsum4ubs */
4773
4774inline vector unsigned int
4775vec_vsum4ubs (vector unsigned char a1, vector unsigned int a2)
4776{
4777  return (vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) a1, (vector signed int) a2);
4778}
4779
4780/* vec_sum2s */
4781
4782inline vector signed int
4783vec_sum2s (vector signed int a1, vector signed int a2)
4784{
4785  return (vector signed int) __builtin_altivec_vsum2sws ((vector signed int) a1, (vector signed int) a2);
4786}
4787
4788/* vec_sums */
4789
4790inline vector signed int
4791vec_sums (vector signed int a1, vector signed int a2)
4792{
4793  return (vector signed int) __builtin_altivec_vsumsws ((vector signed int) a1, (vector signed int) a2);
4794}
4795
4796/* vec_trunc */
4797
4798inline vector float
4799vec_trunc (vector float a1)
4800{
4801  return (vector float) __builtin_altivec_vrfiz ((vector float) a1);
4802}
4803
4804/* vec_unpackh */
4805
4806inline vector signed short
4807vec_unpackh (vector signed char a1)
4808{
4809  return (vector signed short) __builtin_altivec_vupkhsb ((vector signed char) a1);
4810}
4811
4812inline vector signed int
4813vec_unpackh (vector signed short a1)
4814{
4815  return (vector signed int) __builtin_altivec_vupkhsh ((vector signed short) a1);
4816}
4817
4818inline vector unsigned int
4819vec_unpackh (vector unsigned short a1)
4820{
4821  return (vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) a1);
4822}
4823
4824/* vec_vupkhsh */
4825
4826inline vector signed int
4827vec_vupkhsh (vector signed short a1)
4828{
4829  return (vector signed int) __builtin_altivec_vupkhsh ((vector signed short) a1);
4830}
4831
4832/* vec_vupkhpx */
4833
4834inline vector unsigned int
4835vec_vupkhpx (vector unsigned short a1)
4836{
4837  return (vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) a1);
4838}
4839
4840/* vec_vupkhsb */
4841
4842inline vector signed short
4843vec_vupkhsb (vector signed char a1)
4844{
4845  return (vector signed short) __builtin_altivec_vupkhsb ((vector signed char) a1);
4846}
4847
4848/* vec_unpackl */
4849
4850inline vector signed short
4851vec_unpackl (vector signed char a1)
4852{
4853  return (vector signed short) __builtin_altivec_vupklsb ((vector signed char) a1);
4854}
4855
4856inline vector unsigned int
4857vec_unpackl (vector unsigned short a1)
4858{
4859  return (vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) a1);
4860}
4861
4862inline vector signed int
4863vec_unpackl (vector signed short a1)
4864{
4865  return (vector signed int) __builtin_altivec_vupklsh ((vector signed short) a1);
4866}
4867
4868/* vec_vupklpx */
4869
4870inline vector unsigned int
4871vec_vupklpx (vector unsigned short a1)
4872{
4873  return (vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) a1);
4874}
4875
4876/* vec_upklsh */
4877
4878inline vector signed int
4879vec_vupklsh (vector signed short a1)
4880{
4881  return (vector signed int) __builtin_altivec_vupklsh ((vector signed short) a1);
4882}
4883
4884/* vec_vupklsb */
4885
4886inline vector signed short
4887vec_vupklsb (vector signed char a1)
4888{
4889  return (vector signed short) __builtin_altivec_vupklsb ((vector signed char) a1);
4890}
4891
4892/* vec_xor */
4893
4894inline vector float
4895vec_xor (vector float a1, vector float a2)
4896{
4897  return (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4898}
4899
4900inline vector float
4901vec_xor (vector float a1, vector signed int a2)
4902{
4903  return (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4904}
4905
4906inline vector float
4907vec_xor (vector signed int a1, vector float a2)
4908{
4909  return (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4910}
4911
4912inline vector signed int
4913vec_xor (vector signed int a1, vector signed int a2)
4914{
4915  return (vector signed int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4916}
4917
4918inline vector unsigned int
4919vec_xor (vector signed int a1, vector unsigned int a2)
4920{
4921  return (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4922}
4923
4924inline vector unsigned int
4925vec_xor (vector unsigned int a1, vector signed int a2)
4926{
4927  return (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4928}
4929
4930inline vector unsigned int
4931vec_xor (vector unsigned int a1, vector unsigned int a2)
4932{
4933  return (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4934}
4935
4936inline vector signed short
4937vec_xor (vector signed short a1, vector signed short a2)
4938{
4939  return (vector signed short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4940}
4941
4942inline vector unsigned short
4943vec_xor (vector signed short a1, vector unsigned short a2)
4944{
4945  return (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4946}
4947
4948inline vector unsigned short
4949vec_xor (vector unsigned short a1, vector signed short a2)
4950{
4951  return (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4952}
4953
4954inline vector unsigned short
4955vec_xor (vector unsigned short a1, vector unsigned short a2)
4956{
4957  return (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4958}
4959
4960inline vector signed char
4961vec_xor (vector signed char a1, vector signed char a2)
4962{
4963  return (vector signed char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4964}
4965
4966inline vector unsigned char
4967vec_xor (vector signed char a1, vector unsigned char a2)
4968{
4969  return (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4970}
4971
4972inline vector unsigned char
4973vec_xor (vector unsigned char a1, vector signed char a2)
4974{
4975  return (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4976}
4977
4978inline vector unsigned char
4979vec_xor (vector unsigned char a1, vector unsigned char a2)
4980{
4981  return (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
4982}
4983
4984/* vec_all_eq */
4985
4986inline int
4987vec_all_eq (vector signed char a1, vector unsigned char a2)
4988{
4989  return __builtin_altivec_vcmpequb_p (__CR6_LT, a1, (vector signed char) a2);
4990}
4991
4992inline int
4993vec_all_eq (vector signed char a1, vector signed char a2)
4994{
4995  return __builtin_altivec_vcmpequb_p (__CR6_LT, a1, a2);
4996}
4997
4998inline int
4999vec_all_eq (vector unsigned char a1, vector signed char a2)
5000{
5001  return __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
5002}
5003
5004inline int
5005vec_all_eq (vector unsigned char a1, vector unsigned char a2)
5006{
5007  return __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
5008}
5009
5010inline int
5011vec_all_eq (vector signed short a1, vector unsigned short a2)
5012{
5013  return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
5014}
5015
5016inline int
5017vec_all_eq (vector signed short a1, vector signed short a2)
5018{
5019  return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
5020}
5021
5022inline int
5023vec_all_eq (vector unsigned short a1, vector signed short a2)
5024{
5025  return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
5026}
5027
5028inline int
5029vec_all_eq (vector unsigned short a1, vector unsigned short a2)
5030{
5031  return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
5032}
5033
5034inline int
5035vec_all_eq (vector signed int a1, vector unsigned int a2)
5036{
5037  return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
5038}
5039
5040inline int
5041vec_all_eq (vector signed int a1, vector signed int a2)
5042{
5043  return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
5044}
5045
5046inline int
5047vec_all_eq (vector unsigned int a1, vector signed int a2)
5048{
5049  return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
5050}
5051
5052inline int
5053vec_all_eq (vector unsigned int a1, vector unsigned int a2)
5054{
5055  return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
5056}
5057
5058inline int
5059vec_all_eq (vector float a1, vector float a2)
5060{
5061  return __builtin_altivec_vcmpeqfp_p (__CR6_LT, a1, a2);
5062}
5063
5064/* vec_all_ge */
5065
5066inline int
5067vec_all_ge (vector signed char a1, vector unsigned char a2)
5068{
5069  return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
5070}
5071
5072inline int
5073vec_all_ge (vector unsigned char a1, vector signed char a2)
5074{
5075  return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
5076}
5077
5078inline int
5079vec_all_ge (vector unsigned char a1, vector unsigned char a2)
5080{
5081  return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
5082}
5083
5084inline int
5085vec_all_ge (vector signed char a1, vector signed char a2)
5086{
5087  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
5088}
5089
5090inline int
5091vec_all_ge (vector signed short a1, vector unsigned short a2)
5092{
5093  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
5094}
5095
5096inline int
5097vec_all_ge (vector unsigned short a1, vector signed short a2)
5098{
5099  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
5100}
5101
5102inline int
5103vec_all_ge (vector unsigned short a1, vector unsigned short a2)
5104{
5105  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
5106}
5107
5108inline int
5109vec_all_ge (vector signed short a1, vector signed short a2)
5110{
5111  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
5112}
5113
5114inline int
5115vec_all_ge (vector signed int a1, vector unsigned int a2)
5116{
5117  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
5118}
5119
5120inline int
5121vec_all_ge (vector unsigned int a1, vector signed int a2)
5122{
5123  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
5124}
5125
5126inline int
5127vec_all_ge (vector unsigned int a1, vector unsigned int a2)
5128{
5129  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
5130}
5131
5132inline int
5133vec_all_ge (vector signed int a1, vector signed int a2)
5134{
5135  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
5136}
5137
5138inline int
5139vec_all_ge (vector float a1, vector float a2)
5140{
5141  return __builtin_altivec_vcmpgefp_p (__CR6_LT, a1, a2);
5142}
5143
5144/* vec_all_gt */
5145
5146inline int
5147vec_all_gt (vector signed char a1, vector unsigned char a2)
5148{
5149  return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
5150}
5151
5152inline int
5153vec_all_gt (vector unsigned char a1, vector signed char a2)
5154{
5155  return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
5156}
5157
5158inline int
5159vec_all_gt (vector unsigned char a1, vector unsigned char a2)
5160{
5161  return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
5162}
5163
5164inline int
5165vec_all_gt (vector signed char a1, vector signed char a2)
5166{
5167  return __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
5168}
5169
5170inline int
5171vec_all_gt (vector signed short a1, vector unsigned short a2)
5172{
5173  return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
5174}
5175
5176inline int
5177vec_all_gt (vector unsigned short a1, vector signed short a2)
5178{
5179  return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
5180}
5181
5182inline int
5183vec_all_gt (vector unsigned short a1, vector unsigned short a2)
5184{
5185  return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
5186}
5187
5188inline int
5189vec_all_gt (vector signed short a1, vector signed short a2)
5190{
5191  return __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
5192}
5193
5194inline int
5195vec_all_gt (vector signed int a1, vector unsigned int a2)
5196{
5197  return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
5198}
5199
5200inline int
5201vec_all_gt (vector unsigned int a1, vector signed int a2)
5202{
5203  return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
5204}
5205
5206inline int
5207vec_all_gt (vector unsigned int a1, vector unsigned int a2)
5208{
5209  return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
5210}
5211
5212inline int
5213vec_all_gt (vector signed int a1, vector signed int a2)
5214{
5215  return __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
5216}
5217
5218inline int
5219vec_all_gt (vector float a1, vector float a2)
5220{
5221  return __builtin_altivec_vcmpgtfp_p (__CR6_LT, a1, a2);
5222}
5223
5224/* vec_all_in */
5225
5226inline int
5227vec_all_in (vector float a1, vector float a2)
5228{
5229  return __builtin_altivec_vcmpbfp_p (__CR6_EQ, a1, a2);
5230}
5231
5232/* vec_all_le */
5233
5234inline int
5235vec_all_le (vector signed char a1, vector unsigned char a2)
5236{
5237  return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
5238}
5239
5240inline int
5241vec_all_le (vector unsigned char a1, vector signed char a2)
5242{
5243  return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
5244}
5245
5246inline int
5247vec_all_le (vector unsigned char a1, vector unsigned char a2)
5248{
5249  return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
5250}
5251
5252inline int
5253vec_all_le (vector signed char a1, vector signed char a2)
5254{
5255  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
5256}
5257
5258inline int
5259vec_all_le (vector signed short a1, vector unsigned short a2)
5260{
5261  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
5262}
5263
5264inline int
5265vec_all_le (vector unsigned short a1, vector signed short a2)
5266{
5267  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
5268}
5269
5270inline int
5271vec_all_le (vector unsigned short a1, vector unsigned short a2)
5272{
5273  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
5274}
5275
5276inline int
5277vec_all_le (vector signed short a1, vector signed short a2)
5278{
5279  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
5280}
5281
5282inline int
5283vec_all_le (vector signed int a1, vector unsigned int a2)
5284{
5285  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
5286}
5287
5288inline int
5289vec_all_le (vector unsigned int a1, vector signed int a2)
5290{
5291  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
5292}
5293
5294inline int
5295vec_all_le (vector unsigned int a1, vector unsigned int a2)
5296{
5297  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
5298}
5299
5300inline int
5301vec_all_le (vector signed int a1, vector signed int a2)
5302{
5303  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
5304}
5305
5306inline int
5307vec_all_le (vector float a1, vector float a2)
5308{
5309  return __builtin_altivec_vcmpgefp_p (__CR6_LT, a2, a1);
5310}
5311
5312/* vec_all_lt */
5313
5314inline int
5315vec_all_lt (vector signed char a1, vector unsigned char a2)
5316{
5317  return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
5318}
5319
5320inline int
5321vec_all_lt (vector unsigned char a1, vector signed char a2)
5322{
5323  return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
5324}
5325
5326inline int
5327vec_all_lt (vector unsigned char a1, vector unsigned char a2)
5328{
5329  return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
5330}
5331
5332inline int
5333vec_all_lt (vector signed char a1, vector signed char a2)
5334{
5335  return __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
5336}
5337
5338inline int
5339vec_all_lt (vector signed short a1, vector unsigned short a2)
5340{
5341  return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
5342}
5343
5344inline int
5345vec_all_lt (vector unsigned short a1, vector signed short a2)
5346{
5347  return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
5348}
5349
5350inline int
5351vec_all_lt (vector unsigned short a1, vector unsigned short a2)
5352{
5353  return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
5354}
5355
5356inline int
5357vec_all_lt (vector signed short a1, vector signed short a2)
5358{
5359  return __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
5360}
5361
5362inline int
5363vec_all_lt (vector signed int a1, vector unsigned int a2)
5364{
5365  return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
5366}
5367
5368inline int
5369vec_all_lt (vector unsigned int a1, vector signed int a2)
5370{
5371  return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
5372}
5373
5374inline int
5375vec_all_lt (vector unsigned int a1, vector unsigned int a2)
5376{
5377  return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
5378}
5379
5380inline int
5381vec_all_lt (vector signed int a1, vector signed int a2)
5382{
5383  return __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
5384}
5385
5386inline int
5387vec_all_lt (vector float a1, vector float a2)
5388{
5389  return __builtin_altivec_vcmpgtfp_p (__CR6_LT, a2, a1);
5390}
5391
5392/* vec_all_nan */
5393
5394inline int
5395vec_all_nan (vector float a1)
5396{
5397  return __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, a1);
5398}
5399
5400/* vec_all_ne */
5401
5402inline int
5403vec_all_ne (vector signed char a1, vector unsigned char a2)
5404{
5405  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
5406}
5407
5408inline int
5409vec_all_ne (vector signed char a1, vector signed char a2)
5410{
5411  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
5412}
5413
5414inline int
5415vec_all_ne (vector unsigned char a1, vector signed char a2)
5416{
5417  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
5418}
5419
5420inline int
5421vec_all_ne (vector unsigned char a1, vector unsigned char a2)
5422{
5423  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
5424}
5425
5426inline int
5427vec_all_ne (vector signed short a1, vector unsigned short a2)
5428{
5429  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
5430}
5431
5432inline int
5433vec_all_ne (vector signed short a1, vector signed short a2)
5434{
5435  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
5436}
5437
5438inline int
5439vec_all_ne (vector unsigned short a1, vector signed short a2)
5440{
5441  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
5442}
5443
5444inline int
5445vec_all_ne (vector unsigned short a1, vector unsigned short a2)
5446{
5447  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
5448}
5449
5450inline int
5451vec_all_ne (vector signed int a1, vector unsigned int a2)
5452{
5453  return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
5454}
5455
5456inline int
5457vec_all_ne (vector signed int a1, vector signed int a2)
5458{
5459  return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
5460}
5461
5462inline int
5463vec_all_ne (vector unsigned int a1, vector signed int a2)
5464{
5465  return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
5466}
5467
5468inline int
5469vec_all_ne (vector unsigned int a1, vector unsigned int a2)
5470{
5471  return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
5472}
5473
5474inline int
5475vec_all_ne (vector float a1, vector float a2)
5476{
5477  return __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, a2);
5478}
5479
5480/* vec_all_nge */
5481
5482inline int
5483vec_all_nge (vector float a1, vector float a2)
5484{
5485  return __builtin_altivec_vcmpgefp_p (__CR6_EQ, a1, a2);
5486}
5487
5488/* vec_all_ngt */
5489
5490inline int
5491vec_all_ngt (vector float a1, vector float a2)
5492{
5493  return __builtin_altivec_vcmpgtfp_p (__CR6_EQ, a1, a2);
5494}
5495
5496/* vec_all_nle */
5497
5498inline int
5499vec_all_nle (vector float a1, vector float a2)
5500{
5501  return __builtin_altivec_vcmpgefp_p (__CR6_EQ, a2, a1);
5502}
5503
5504/* vec_all_nlt */
5505
5506inline int
5507vec_all_nlt (vector float a1, vector float a2)
5508{
5509  return __builtin_altivec_vcmpgtfp_p (__CR6_EQ, a2, a1);
5510}
5511
5512/* vec_all_numeric */
5513
5514inline int
5515vec_all_numeric (vector float a1)
5516{
5517  return __builtin_altivec_vcmpeqfp_p (__CR6_LT, a1, a1);
5518}
5519
5520/* vec_any_eq */
5521
5522inline int
5523vec_any_eq (vector signed char a1, vector unsigned char a2)
5524{
5525  return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
5526}
5527
5528inline int
5529vec_any_eq (vector signed char a1, vector signed char a2)
5530{
5531  return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
5532}
5533
5534inline int
5535vec_any_eq (vector unsigned char a1, vector signed char a2)
5536{
5537  return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
5538}
5539
5540inline int
5541vec_any_eq (vector unsigned char a1, vector unsigned char a2)
5542{
5543  return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
5544}
5545
5546inline int
5547vec_any_eq (vector signed short a1, vector unsigned short a2)
5548{
5549  return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
5550}
5551
5552inline int
5553vec_any_eq (vector signed short a1, vector signed short a2)
5554{
5555  return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
5556}
5557
5558inline int
5559vec_any_eq (vector unsigned short a1, vector signed short a2)
5560{
5561  return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
5562}
5563
5564inline int
5565vec_any_eq (vector unsigned short a1, vector unsigned short a2)
5566{
5567  return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
5568}
5569
5570inline int
5571vec_any_eq (vector signed int a1, vector unsigned int a2)
5572{
5573  return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
5574}
5575
5576inline int
5577vec_any_eq (vector signed int a1, vector signed int a2)
5578{
5579  return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
5580}
5581
5582inline int
5583vec_any_eq (vector unsigned int a1, vector signed int a2)
5584{
5585  return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
5586}
5587
5588inline int
5589vec_any_eq (vector unsigned int a1, vector unsigned int a2)
5590{
5591  return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
5592}
5593
5594inline int
5595vec_any_eq (vector float a1, vector float a2)
5596{
5597  return __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, a1, a2);
5598}
5599
5600/* vec_any_ge */
5601
5602inline int
5603vec_any_ge (vector signed char a1, vector unsigned char a2)
5604{
5605  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
5606}
5607
5608inline int
5609vec_any_ge (vector unsigned char a1, vector signed char a2)
5610{
5611  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
5612}
5613
5614inline int
5615vec_any_ge (vector unsigned char a1, vector unsigned char a2)
5616{
5617  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
5618}
5619
5620inline int
5621vec_any_ge (vector signed char a1, vector signed char a2)
5622{
5623  return __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
5624}
5625
5626inline int
5627vec_any_ge (vector signed short a1, vector unsigned short a2)
5628{
5629  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
5630}
5631
5632inline int
5633vec_any_ge (vector unsigned short a1, vector signed short a2)
5634{
5635  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
5636}
5637
5638inline int
5639vec_any_ge (vector unsigned short a1, vector unsigned short a2)
5640{
5641  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
5642}
5643
5644inline int
5645vec_any_ge (vector signed short a1, vector signed short a2)
5646{
5647  return __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
5648}
5649
5650inline int
5651vec_any_ge (vector signed int a1, vector unsigned int a2)
5652{
5653  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
5654}
5655
5656inline int
5657vec_any_ge (vector unsigned int a1, vector signed int a2)
5658{
5659  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
5660}
5661
5662inline int
5663vec_any_ge (vector unsigned int a1, vector unsigned int a2)
5664{
5665  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
5666}
5667
5668inline int
5669vec_any_ge (vector signed int a1, vector signed int a2)
5670{
5671  return __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
5672}
5673
5674inline int
5675vec_any_ge (vector float a1, vector float a2)
5676{
5677  return __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, a1, a2);
5678}
5679
5680/* vec_any_gt */
5681
5682inline int
5683vec_any_gt (vector signed char a1, vector unsigned char a2)
5684{
5685  return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
5686}
5687
5688inline int
5689vec_any_gt (vector unsigned char a1, vector signed char a2)
5690{
5691  return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
5692}
5693
5694inline int
5695vec_any_gt (vector unsigned char a1, vector unsigned char a2)
5696{
5697  return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
5698}
5699
5700inline int
5701vec_any_gt (vector signed char a1, vector signed char a2)
5702{
5703  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
5704}
5705
5706inline int
5707vec_any_gt (vector signed short a1, vector unsigned short a2)
5708{
5709  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
5710}
5711
5712inline int
5713vec_any_gt (vector unsigned short a1, vector signed short a2)
5714{
5715  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
5716}
5717
5718inline int
5719vec_any_gt (vector unsigned short a1, vector unsigned short a2)
5720{
5721  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
5722}
5723
5724inline int
5725vec_any_gt (vector signed short a1, vector signed short a2)
5726{
5727  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
5728}
5729
5730inline int
5731vec_any_gt (vector signed int a1, vector unsigned int a2)
5732{
5733  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
5734}
5735
5736inline int
5737vec_any_gt (vector unsigned int a1, vector signed int a2)
5738{
5739  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
5740}
5741
5742inline int
5743vec_any_gt (vector unsigned int a1, vector unsigned int a2)
5744{
5745  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
5746}
5747
5748inline int
5749vec_any_gt (vector signed int a1, vector signed int a2)
5750{
5751  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
5752}
5753
5754inline int
5755vec_any_gt (vector float a1, vector float a2)
5756{
5757  return __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, a1, a2);
5758}
5759
5760/* vec_any_le */
5761
5762inline int
5763vec_any_le (vector signed char a1, vector unsigned char a2)
5764{
5765  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
5766}
5767
5768inline int
5769vec_any_le (vector unsigned char a1, vector signed char a2)
5770{
5771  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
5772}
5773
5774inline int
5775vec_any_le (vector unsigned char a1, vector unsigned char a2)
5776{
5777  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
5778}
5779
5780inline int
5781vec_any_le (vector signed char a1, vector signed char a2)
5782{
5783  return __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
5784}
5785
5786inline int
5787vec_any_le (vector signed short a1, vector unsigned short a2)
5788{
5789  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
5790}
5791
5792inline int
5793vec_any_le (vector unsigned short a1, vector signed short a2)
5794{
5795  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
5796}
5797
5798inline int
5799vec_any_le (vector unsigned short a1, vector unsigned short a2)
5800{
5801  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
5802}
5803
5804inline int
5805vec_any_le (vector signed short a1, vector signed short a2)
5806{
5807  return __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
5808}
5809
5810inline int
5811vec_any_le (vector signed int a1, vector unsigned int a2)
5812{
5813  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
5814}
5815
5816inline int
5817vec_any_le (vector unsigned int a1, vector signed int a2)
5818{
5819  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
5820}
5821
5822inline int
5823vec_any_le (vector unsigned int a1, vector unsigned int a2)
5824{
5825  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
5826}
5827
5828inline int
5829vec_any_le (vector signed int a1, vector signed int a2)
5830{
5831  return __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
5832}
5833
5834inline int
5835vec_any_le (vector float a1, vector float a2)
5836{
5837  return __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, a2, a1);
5838}
5839
5840/* vec_any_lt */
5841
5842inline int
5843vec_any_lt (vector signed char a1, vector unsigned char a2)
5844{
5845  return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
5846}
5847
5848inline int
5849vec_any_lt (vector unsigned char a1, vector signed char a2)
5850{
5851  return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
5852}
5853
5854inline int
5855vec_any_lt (vector unsigned char a1, vector unsigned char a2)
5856{
5857  return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
5858}
5859
5860inline int
5861vec_any_lt (vector signed char a1, vector signed char a2)
5862{
5863  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
5864}
5865
5866inline int
5867vec_any_lt (vector signed short a1, vector unsigned short a2)
5868{
5869  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
5870}
5871
5872inline int
5873vec_any_lt (vector unsigned short a1, vector signed short a2)
5874{
5875  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
5876}
5877
5878inline int
5879vec_any_lt (vector unsigned short a1, vector unsigned short a2)
5880{
5881  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
5882}
5883
5884inline int
5885vec_any_lt (vector signed short a1, vector signed short a2)
5886{
5887  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
5888}
5889
5890inline int
5891vec_any_lt (vector signed int a1, vector unsigned int a2)
5892{
5893  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
5894}
5895
5896inline int
5897vec_any_lt (vector unsigned int a1, vector signed int a2)
5898{
5899  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
5900}
5901
5902inline int
5903vec_any_lt (vector unsigned int a1, vector unsigned int a2)
5904{
5905  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
5906}
5907
5908inline int
5909vec_any_lt (vector signed int a1, vector signed int a2)
5910{
5911  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
5912}
5913
5914inline int
5915vec_any_lt (vector float a1, vector float a2)
5916{
5917  return __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, a2, a1);
5918}
5919
5920/* vec_any_nan */
5921
5922inline int
5923vec_any_nan (vector float a1)
5924{
5925  return __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a1);
5926}
5927
5928/* vec_any_ne */
5929
5930inline int
5931vec_any_ne (vector signed char a1, vector unsigned char a2)
5932{
5933  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
5934}
5935
5936inline int
5937vec_any_ne (vector signed char a1, vector signed char a2)
5938{
5939  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
5940}
5941
5942inline int
5943vec_any_ne (vector unsigned char a1, vector signed char a2)
5944{
5945  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
5946}
5947
5948inline int
5949vec_any_ne (vector unsigned char a1, vector unsigned char a2)
5950{
5951  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
5952}
5953
5954inline int
5955vec_any_ne (vector signed short a1, vector unsigned short a2)
5956{
5957  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
5958}
5959
5960inline int
5961vec_any_ne (vector signed short a1, vector signed short a2)
5962{
5963  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
5964}
5965
5966inline int
5967vec_any_ne (vector unsigned short a1, vector signed short a2)
5968{
5969  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
5970}
5971
5972inline int
5973vec_any_ne (vector unsigned short a1, vector unsigned short a2)
5974{
5975  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
5976}
5977
5978inline int
5979vec_any_ne (vector signed int a1, vector unsigned int a2)
5980{
5981  return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
5982}
5983
5984inline int
5985vec_any_ne (vector signed int a1, vector signed int a2)
5986{
5987  return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
5988}
5989
5990inline int
5991vec_any_ne (vector unsigned int a1, vector signed int a2)
5992{
5993  return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
5994}
5995
5996inline int
5997vec_any_ne (vector unsigned int a1, vector unsigned int a2)
5998{
5999  return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
6000}
6001
6002inline int
6003vec_any_ne (vector float a1, vector float a2)
6004{
6005  return __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a2);
6006}
6007
6008/* vec_any_nge */
6009
6010inline int
6011vec_any_nge (vector float a1, vector float a2)
6012{
6013  return __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a1, a2);
6014}
6015
6016/* vec_any_ngt */
6017
6018inline int
6019vec_any_ngt (vector float a1, vector float a2)
6020{
6021  return __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, a1, a2);
6022}
6023
6024/* vec_any_nle */
6025
6026inline int
6027vec_any_nle (vector float a1, vector float a2)
6028{
6029  return __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a2, a1);
6030}
6031
6032/* vec_any_nlt */
6033
6034inline int
6035vec_any_nlt (vector float a1, vector float a2)
6036{
6037  return __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, a2, a1);
6038}
6039
6040/* vec_any_numeric */
6041
6042inline int
6043vec_any_numeric (vector float a1)
6044{
6045  return __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, a1, a1);
6046}
6047
6048/* vec_any_out */
6049
6050inline int
6051vec_any_out (vector float a1, vector float a2)
6052{
6053  return __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, a1, a2);
6054}
6055
6056/* vec_step */
6057
6058template<typename _Tp>
6059struct __vec_step_help
6060{
6061  // All proper vector types will specialize _S_elem.
6062};
6063
6064template<>
6065struct __vec_step_help<vector signed short>
6066{
6067  static const int _S_elem = 8;
6068};
6069
6070template<>
6071struct __vec_step_help<vector unsigned short>
6072{
6073  static const int _S_elem = 8;
6074};
6075
6076template<>
6077struct __vec_step_help<vector signed int>
6078{
6079  static const int _S_elem = 4;
6080};
6081
6082template<>
6083struct __vec_step_help<vector unsigned int>
6084{
6085  static const int _S_elem = 4;
6086};
6087
6088template<>
6089struct __vec_step_help<vector unsigned char>
6090{
6091  static const int _S_elem = 16;
6092};
6093
6094template<>
6095struct __vec_step_help<vector signed char>
6096{
6097  static const int _S_elem = 16;
6098};
6099
6100template<>
6101struct __vec_step_help<vector float>
6102{
6103  static const int _S_elem = 4;
6104};
6105
6106#define vec_step(t)  __vec_step_help<typeof(t)>::_S_elem
6107
6108}//extern "C++"
6109
6110#else /* not C++ */
6111
6112/* "... and so I think no man in a century will suffer as greatly as
6113   you will."  */
6114
6115#define vec_abs(a) \
6116  __ch (__un_args_eq (vector signed char, (a)), \
6117        ((vector signed char) __builtin_altivec_abs_v16qi ((vector signed char) (a))), \
6118  __ch (__un_args_eq (vector signed short, (a)), \
6119        ((vector signed short) __builtin_altivec_abs_v8hi ((vector signed short) (a))), \
6120  __ch (__un_args_eq (vector signed int, (a)), \
6121        ((vector signed int) __builtin_altivec_abs_v4si ((vector signed int) (a))), \
6122  __ch (__un_args_eq (vector float, (a)), \
6123        ((vector float) __builtin_altivec_abs_v4sf ((vector float) (a))), \
6124  __altivec_link_error_invalid_argument ()))))
6125
6126#define vec_abss(a) \
6127  __ch (__un_args_eq (vector signed char, (a)), \
6128        ((vector signed char) __builtin_altivec_abss_v16qi ((vector signed char) (a))), \
6129  __ch (__un_args_eq (vector signed short, (a)), \
6130        ((vector signed short) __builtin_altivec_abss_v8hi ((vector signed short) (a))), \
6131  __ch (__un_args_eq (vector signed int, (a)), \
6132        ((vector signed int) __builtin_altivec_abss_v4si ((vector signed int) (a))), \
6133  __altivec_link_error_invalid_argument ())))
6134
6135#define vec_step(t) \
6136  __ch (__builtin_types_compatible_p (typeof (t), vector signed int), 4,      \
6137  __ch (__builtin_types_compatible_p (typeof (t), vector unsigned int), 4,    \
6138  __ch (__builtin_types_compatible_p (typeof (t), vector signed short), 8,    \
6139  __ch (__builtin_types_compatible_p (typeof (t), vector unsigned short), 8,  \
6140  __ch (__builtin_types_compatible_p (typeof (t), vector signed char), 16,    \
6141  __ch (__builtin_types_compatible_p (typeof (t), vector unsigned char), 16,  \
6142  __ch (__builtin_types_compatible_p (typeof (t), vector float), 4,           \
6143  __altivec_link_error_invalid_argument ())))))))
6144
6145#define vec_vaddubm(a1, a2) \
6146__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6147      ((vector signed char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
6148__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
6149      ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
6150__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
6151      ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
6152__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6153      ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
6154  __altivec_link_error_invalid_argument ()))))
6155
6156#define vec_vadduhm(a1, a2) \
6157__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6158      ((vector signed short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
6159__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
6160      ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
6161__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
6162      ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
6163__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6164      ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
6165  __altivec_link_error_invalid_argument ()))))
6166
6167#define vec_vadduwm(a1, a2) \
6168__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6169      ((vector signed int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
6170__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
6171      ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
6172__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
6173      ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
6174__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6175      ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
6176  __altivec_link_error_invalid_argument ()))))
6177
6178#define vec_vaddfp(a1, a2) \
6179__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
6180      ((vector float) __builtin_altivec_vaddfp ((vector float) (a1), (vector float) (a2))), \
6181  __altivec_link_error_invalid_argument ())
6182
6183#define vec_add(a1, a2) \
6184__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6185      ((vector signed char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
6186__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
6187      ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
6188__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
6189      ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
6190__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6191      ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
6192__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6193      ((vector signed short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
6194__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
6195      ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
6196__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
6197      ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
6198__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6199      ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
6200__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6201      ((vector signed int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
6202__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
6203      ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
6204__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
6205      ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
6206__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6207      ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
6208__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
6209      ((vector float) __builtin_altivec_vaddfp ((vector float) (a1), (vector float) (a2))), \
6210    __altivec_link_error_invalid_argument ())))))))))))))
6211
6212#define vec_addc(a1, a2) \
6213__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6214      ((vector unsigned int) __builtin_altivec_vaddcuw ((vector signed int) (a1), (vector signed int) (a2))), \
6215    __altivec_link_error_invalid_argument ())
6216
6217#define vec_adds(a1, a2) \
6218__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
6219      ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
6220__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
6221      ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
6222__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6223      ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
6224__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6225      ((vector signed char) __builtin_altivec_vaddsbs ((vector signed char) (a1), (vector signed char) (a2))), \
6226__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
6227      ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
6228__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
6229      ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
6230__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6231      ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
6232__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6233      ((vector signed short) __builtin_altivec_vaddshs ((vector signed short) (a1), (vector signed short) (a2))), \
6234__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
6235      ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
6236__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
6237      ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
6238__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6239      ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
6240__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6241      ((vector signed int) __builtin_altivec_vaddsws ((vector signed int) (a1), (vector signed int) (a2))), \
6242    __altivec_link_error_invalid_argument ()))))))))))))
6243
6244#define vec_vaddsws(a1, a2) \
6245__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6246      ((vector signed int) __builtin_altivec_vaddsws ((vector signed int) (a1), (vector signed int) (a2))), \
6247  __altivec_link_error_invalid_argument ())
6248
6249#define vec_vadduws(a1, a2) \
6250__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
6251      ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
6252__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
6253      ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
6254__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6255      ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
6256  __altivec_link_error_invalid_argument ())))
6257
6258#define vec_vaddshs(a1, a2) \
6259__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6260      ((vector signed short) __builtin_altivec_vaddshs ((vector signed short) (a1), (vector signed short) (a2))), \
6261  __altivec_link_error_invalid_argument ())
6262
6263#define vec_vadduhs(a1, a2) \
6264__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
6265      ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
6266__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
6267      ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
6268__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6269      ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
6270  __altivec_link_error_invalid_argument ())))
6271
6272#define vec_vaddsbs(a1, a2) \
6273__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6274      ((vector signed char) __builtin_altivec_vaddsbs ((vector signed char) (a1), (vector signed char) (a2))), \
6275  __altivec_link_error_invalid_argument ())
6276
6277#define vec_vaddubs(a1, a2) \
6278__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
6279      ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
6280__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
6281      ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
6282__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6283      ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
6284  __altivec_link_error_invalid_argument ())))
6285
6286#define vec_and(a1, a2) \
6287__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
6288      ((vector float) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6289__ch (__bin_args_eq (vector float, (a1), vector signed int, (a2)), \
6290      ((vector float) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6291__ch (__bin_args_eq (vector signed int, (a1), vector float, (a2)), \
6292      ((vector float) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6293__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6294      ((vector signed int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6295__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
6296      ((vector unsigned int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6297__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
6298      ((vector unsigned int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6299__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6300      ((vector unsigned int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6301__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6302      ((vector signed short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6303__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
6304      ((vector unsigned short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6305__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
6306      ((vector unsigned short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6307__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6308      ((vector unsigned short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6309__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6310      ((vector signed char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6311__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
6312      ((vector unsigned char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6313__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
6314      ((vector unsigned char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6315__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6316      ((vector unsigned char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
6317    __altivec_link_error_invalid_argument ())))))))))))))))
6318
6319#define vec_andc(a1, a2) \
6320__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
6321      ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6322__ch (__bin_args_eq (vector float, (a1), vector unsigned int, (a2)), \
6323      ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6324__ch (__bin_args_eq (vector unsigned int, (a1), vector float, (a2)), \
6325      ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6326__ch (__bin_args_eq (vector signed int, (a1), vector float, (a2)), \
6327      ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6328__ch (__bin_args_eq (vector float, (a1), vector signed int, (a2)), \
6329      ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6330__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
6331      ((vector unsigned int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6332__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6333      ((vector signed int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6334__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
6335      ((vector unsigned int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6336__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6337      ((vector unsigned int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6338__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6339      ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6340__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
6341      ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6342__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
6343      ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6344__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6345      ((vector signed short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6346__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6347      ((vector signed short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6348__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
6349      ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6350__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
6351      ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6352__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6353      ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6354__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6355      ((vector unsigned char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6356__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
6357      ((vector unsigned char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6358__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
6359      ((vector unsigned char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6360__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6361      ((vector signed char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6362__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6363      ((vector signed char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6364__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
6365      ((vector signed char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
6366    __altivec_link_error_invalid_argument ())))))))))))))))))))))))
6367
6368#define vec_avg(a1, a2) \
6369__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6370      ((vector unsigned char) __builtin_altivec_vavgub ((vector signed char) (a1), (vector signed char) (a2))), \
6371__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6372      ((vector signed char) __builtin_altivec_vavgsb ((vector signed char) (a1), (vector signed char) (a2))), \
6373__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6374      ((vector unsigned short) __builtin_altivec_vavguh ((vector signed short) (a1), (vector signed short) (a2))), \
6375__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6376      ((vector signed short) __builtin_altivec_vavgsh ((vector signed short) (a1), (vector signed short) (a2))), \
6377__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6378      ((vector unsigned int) __builtin_altivec_vavguw ((vector signed int) (a1), (vector signed int) (a2))), \
6379__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6380      ((vector signed int) __builtin_altivec_vavgsw ((vector signed int) (a1), (vector signed int) (a2))), \
6381    __altivec_link_error_invalid_argument ()))))))
6382
6383#define vec_vavgsw(a1, a2) \
6384__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6385      ((vector signed int) __builtin_altivec_vavgsw ((vector signed int) (a1), (vector signed int) (a2))), \
6386  __altivec_link_error_invalid_argument ())
6387
6388#define vec_vavguw(a1, a2) \
6389__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6390      ((vector unsigned int) __builtin_altivec_vavguw ((vector signed int) (a1), (vector signed int) (a2))), \
6391  __altivec_link_error_invalid_argument ())
6392
6393#define vec_vavgsh(a1, a2) \
6394__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6395      ((vector signed short) __builtin_altivec_vavgsh ((vector signed short) (a1), (vector signed short) (a2))), \
6396  __altivec_link_error_invalid_argument ())
6397
6398#define vec_vavguh(a1, a2) \
6399__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6400      ((vector unsigned short) __builtin_altivec_vavguh ((vector signed short) (a1), (vector signed short) (a2))), \
6401  __altivec_link_error_invalid_argument ())
6402
6403#define vec_vavgsb(a1, a2) \
6404__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6405      ((vector signed char) __builtin_altivec_vavgsb ((vector signed char) (a1), (vector signed char) (a2))), \
6406  __altivec_link_error_invalid_argument ())
6407
6408#define vec_vavgub(a1, a2) \
6409__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6410      ((vector unsigned char) __builtin_altivec_vavgub ((vector signed char) (a1), (vector signed char) (a2))), \
6411  __altivec_link_error_invalid_argument ())
6412
6413#define vec_ceil(a1) __builtin_altivec_vrfip ((a1))
6414
6415#define vec_cmpb(a1, a2) __builtin_altivec_vcmpbfp ((a1), (a2))
6416
6417#define vec_cmpeq(a1, a2) \
6418__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6419      ((vector signed char) __builtin_altivec_vcmpequb ((vector signed char) (a1), (vector signed char) (a2))), \
6420__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6421      ((vector signed char) __builtin_altivec_vcmpequb ((vector signed char) (a1), (vector signed char) (a2))), \
6422__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6423      ((vector signed short) __builtin_altivec_vcmpequh ((vector signed short) (a1), (vector signed short) (a2))), \
6424__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6425      ((vector signed short) __builtin_altivec_vcmpequh ((vector signed short) (a1), (vector signed short) (a2))), \
6426__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6427      ((vector signed int) __builtin_altivec_vcmpequw ((vector signed int) (a1), (vector signed int) (a2))), \
6428__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6429      ((vector signed int) __builtin_altivec_vcmpequw ((vector signed int) (a1), (vector signed int) (a2))), \
6430__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
6431      ((vector signed int) __builtin_altivec_vcmpeqfp ((vector float) (a1), (vector float) (a2))), \
6432    __altivec_link_error_invalid_argument ())))))))
6433
6434#define vec_vcmpeqfp(a1, a2) \
6435__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
6436      ((vector signed int) __builtin_altivec_vcmpeqfp ((vector float) (a1), (vector float) (a2))), \
6437  __altivec_link_error_invalid_argument ())
6438
6439#define vec_vcmpequw(a1, a2) \
6440__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6441      ((vector signed int) __builtin_altivec_vcmpequw ((vector signed int) (a1), (vector signed int) (a2))), \
6442__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6443      ((vector signed int) __builtin_altivec_vcmpequw ((vector signed int) (a1), (vector signed int) (a2))), \
6444  __altivec_link_error_invalid_argument ()))
6445
6446#define vec_vcmpequh(a1, a2) \
6447__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6448      ((vector signed short) __builtin_altivec_vcmpequh ((vector signed short) (a1), (vector signed short) (a2))), \
6449__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6450      ((vector signed short) __builtin_altivec_vcmpequh ((vector signed short) (a1), (vector signed short) (a2))), \
6451  __altivec_link_error_invalid_argument ()))
6452
6453#define vec_vcmpequb(a1, a2) \
6454__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6455      ((vector signed char) __builtin_altivec_vcmpequb ((vector signed char) (a1), (vector signed char) (a2))), \
6456__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6457      ((vector signed char) __builtin_altivec_vcmpequb ((vector signed char) (a1), (vector signed char) (a2))), \
6458  __altivec_link_error_invalid_argument ()))
6459
6460#define vec_cmpge(a1, a2) (vector signed int) __builtin_altivec_vcmpgefp ((a1), (a2))
6461
6462#define vec_cmpgt(a1, a2) \
6463__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6464      ((vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) (a1), (vector signed char) (a2))), \
6465__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6466      ((vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) (a1), (vector signed char) (a2))), \
6467__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6468      ((vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) (a1), (vector signed short) (a2))), \
6469__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6470      ((vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) (a1), (vector signed short) (a2))), \
6471__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6472      ((vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) (a1), (vector signed int) (a2))), \
6473__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6474      ((vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) (a1), (vector signed int) (a2))), \
6475__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
6476      ((vector signed int) __builtin_altivec_vcmpgtfp ((vector float) (a1), (vector float) (a2))), \
6477    __altivec_link_error_invalid_argument ())))))))
6478
6479#define vec_vcmpgtfp(a1, a2) \
6480__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
6481      ((vector signed int) __builtin_altivec_vcmpgtfp ((vector float) (a1), (vector float) (a2))), \
6482  __altivec_link_error_invalid_argument ())
6483
6484#define vec_vcmpgtsw(a1, a2) \
6485__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6486      ((vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) (a1), (vector signed int) (a2))), \
6487  __altivec_link_error_invalid_argument ())
6488
6489#define vec_vcmpgtuw(a1, a2) \
6490__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6491      ((vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) (a1), (vector signed int) (a2))), \
6492  __altivec_link_error_invalid_argument ())
6493
6494#define vec_vcmpgtsh(a1, a2) \
6495__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6496      ((vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) (a1), (vector signed short) (a2))), \
6497  __altivec_link_error_invalid_argument ())
6498
6499#define vec_vcmpgtuh(a1, a2) \
6500__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6501      ((vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) (a1), (vector signed short) (a2))), \
6502  __altivec_link_error_invalid_argument ())
6503
6504#define vec_vcmpgtsb(a1, a2) \
6505__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6506      ((vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) (a1), (vector signed char) (a2))), \
6507  __altivec_link_error_invalid_argument ())
6508
6509#define vec_vcmpgtub(a1, a2) \
6510__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6511      ((vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) (a1), (vector signed char) (a2))), \
6512  __altivec_link_error_invalid_argument ())
6513
6514#define vec_cmple(a1, a2) __builtin_altivec_vcmpgefp ((a2), (a1))
6515
6516#define vec_cmplt(a2, a1) \
6517__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6518      ((vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) (a1), (vector signed char) (a2))), \
6519__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6520      ((vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) (a1), (vector signed char) (a2))), \
6521__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6522      ((vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) (a1), (vector signed short) (a2))), \
6523__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6524      ((vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) (a1), (vector signed short) (a2))), \
6525__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6526      ((vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) (a1), (vector signed int) (a2))), \
6527__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6528      ((vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) (a1), (vector signed int) (a2))), \
6529__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
6530      ((vector signed int) __builtin_altivec_vcmpgtfp ((vector float) (a1), (vector float) (a2))), \
6531    __altivec_link_error_invalid_argument ())))))))
6532
6533#define vec_ctf(a1, a2) \
6534__ch (__bin_args_eq (vector unsigned int, (a1), int, (a2)), \
6535      ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const char) (a2))), \
6536__ch (__bin_args_eq (vector signed int, (a1), int, (a2)), \
6537      ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const char) (a2))), \
6538__ch (__bin_args_eq (vector unsigned int, (a1), unsigned int, (a2)), \
6539      ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const char) (a2))), \
6540__ch (__bin_args_eq (vector signed int, (a1), unsigned int, (a2)), \
6541      ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const char) (a2))), \
6542    __altivec_link_error_invalid_argument ()))))
6543
6544#define vec_vcfsx(a1, a2) \
6545__ch (__bin_args_eq (vector signed int, (a1), int, (a2)), \
6546      ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const char) (a2))), \
6547__ch (__bin_args_eq (vector signed int, (a1), unsigned int, (a2)), \
6548      ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const char) (a2))), \
6549  __altivec_link_error_invalid_argument ()))
6550
6551#define vec_vcfux(a1, a2) \
6552__ch (__bin_args_eq (vector unsigned int, (a1), int, (a2)), \
6553      ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const char) (a2))), \
6554__ch (__bin_args_eq (vector unsigned int, (a1), unsigned int, (a2)), \
6555      ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const char) (a2))), \
6556  __altivec_link_error_invalid_argument ()))
6557
6558#define vec_cts(a1, a2) __builtin_altivec_vctsxs ((a1), (a2))
6559
6560#define vec_ctu(a1, a2) (vector unsigned int) __builtin_altivec_vctuxs ((a1), (a2))
6561
6562#define vec_dss(a1) __builtin_altivec_dss ((a1))
6563
6564#define vec_dssall() __builtin_altivec_dssall ()
6565
6566#define vec_dst(a1, a2, a3) \
6567__ch (__un_args_eq (vector unsigned char, *(a1)), \
6568      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6569__ch (__un_args_eq (vector signed char, *(a1)), \
6570      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6571__ch (__un_args_eq (vector unsigned short, *(a1)), \
6572      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6573__ch (__un_args_eq (vector signed short, *(a1)), \
6574      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6575__ch (__un_args_eq (vector unsigned int, *(a1)), \
6576      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6577__ch (__un_args_eq (vector signed int, *(a1)), \
6578      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6579__ch (__un_args_eq (vector float, *(a1)), \
6580      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6581__ch (__un_args_eq (unsigned char, *(a1)), \
6582      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6583__ch (__un_args_eq (signed char, *(a1)), \
6584      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6585__ch (__un_args_eq (unsigned short, *(a1)), \
6586      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6587__ch (__un_args_eq (signed short, *(a1)), \
6588      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6589__ch (__un_args_eq (unsigned int, *(a1)), \
6590      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6591__ch (__un_args_eq (signed int, *(a1)), \
6592      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6593__ch (__un_args_eq (unsigned long, *(a1)), \
6594      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6595__ch (__un_args_eq (signed long, *(a1)), \
6596      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6597__ch (__un_args_eq (float, *(a1)), \
6598      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
6599  __altivec_link_error_invalid_argument ()))))))))))))))))
6600
6601#define vec_dstst(a1, a2, a3) \
6602__ch (__un_args_eq (vector unsigned char, *(a1)), \
6603      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6604__ch (__un_args_eq (vector signed char, *(a1)), \
6605      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6606__ch (__un_args_eq (vector unsigned short, *(a1)), \
6607      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6608__ch (__un_args_eq (vector signed short, *(a1)), \
6609      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6610__ch (__un_args_eq (vector unsigned int, *(a1)), \
6611      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6612__ch (__un_args_eq (vector signed int, *(a1)), \
6613      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6614__ch (__un_args_eq (vector float, *(a1)), \
6615      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6616__ch (__un_args_eq (unsigned char, *(a1)), \
6617      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6618__ch (__un_args_eq (signed char, *(a1)), \
6619      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6620__ch (__un_args_eq (unsigned short, *(a1)), \
6621      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6622__ch (__un_args_eq (signed short, *(a1)), \
6623      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6624__ch (__un_args_eq (unsigned int, *(a1)), \
6625      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6626__ch (__un_args_eq (signed int, *(a1)), \
6627      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6628__ch (__un_args_eq (unsigned long, *(a1)), \
6629      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6630__ch (__un_args_eq (signed long, *(a1)), \
6631      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6632__ch (__un_args_eq (float, *(a1)), \
6633      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
6634  __altivec_link_error_invalid_argument ()))))))))))))))))
6635
6636#define vec_dststt(a1, a2, a3) \
6637__ch (__un_args_eq (vector unsigned char, *(a1)), \
6638      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6639__ch (__un_args_eq (vector signed char, *(a1)), \
6640      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6641__ch (__un_args_eq (vector unsigned short, *(a1)), \
6642      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6643__ch (__un_args_eq (vector signed short, *(a1)), \
6644      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6645__ch (__un_args_eq (vector unsigned int, *(a1)), \
6646      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6647__ch (__un_args_eq (vector signed int, *(a1)), \
6648      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6649__ch (__un_args_eq (vector float, *(a1)), \
6650      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6651__ch (__un_args_eq (unsigned char, *(a1)), \
6652      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6653__ch (__un_args_eq (signed char, *(a1)), \
6654      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6655__ch (__un_args_eq (unsigned short, *(a1)), \
6656      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6657__ch (__un_args_eq (signed short, *(a1)), \
6658      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6659__ch (__un_args_eq (unsigned int, *(a1)), \
6660      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6661__ch (__un_args_eq (signed int, *(a1)), \
6662      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6663__ch (__un_args_eq (unsigned long, *(a1)), \
6664      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6665__ch (__un_args_eq (signed long, *(a1)), \
6666      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6667__ch (__un_args_eq (float, *(a1)), \
6668      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
6669  __altivec_link_error_invalid_argument ()))))))))))))))))
6670
6671#define vec_dstt(a1, a2, a3) \
6672__ch (__un_args_eq (vector unsigned char, *(a1)), \
6673      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6674__ch (__un_args_eq (vector signed char, *(a1)), \
6675      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6676__ch (__un_args_eq (vector unsigned short, *(a1)), \
6677      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6678__ch (__un_args_eq (vector signed short, *(a1)), \
6679      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6680__ch (__un_args_eq (vector unsigned int, *(a1)), \
6681      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6682__ch (__un_args_eq (vector signed int, *(a1)), \
6683      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6684__ch (__un_args_eq (vector float, *(a1)), \
6685      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6686__ch (__un_args_eq (unsigned char, *(a1)), \
6687      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6688__ch (__un_args_eq (signed char, *(a1)), \
6689      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6690__ch (__un_args_eq (unsigned short, *(a1)), \
6691      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6692__ch (__un_args_eq (signed short, *(a1)), \
6693      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6694__ch (__un_args_eq (unsigned int, *(a1)), \
6695      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6696__ch (__un_args_eq (signed int, *(a1)), \
6697      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6698__ch (__un_args_eq (unsigned long, *(a1)), \
6699      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6700__ch (__un_args_eq (signed long, *(a1)), \
6701      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6702__ch (__un_args_eq (float, *(a1)), \
6703      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
6704  __altivec_link_error_invalid_argument ()))))))))))))))))
6705
6706#define vec_expte(a1) __builtin_altivec_vexptefp ((a1))
6707
6708#define vec_floor(a1) __builtin_altivec_vrfim (a1)
6709
6710#define vec_ld(a, b) \
6711__ch (__un_args_eq (vector unsigned char, *(b)), \
6712      ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \
6713__ch (__un_args_eq (unsigned char, *(b)), \
6714      ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \
6715__ch (__un_args_eq (vector signed char, *(b)), \
6716      ((vector signed char) __builtin_altivec_lvx ((a), (b))), \
6717__ch (__un_args_eq (signed char, *(b)), \
6718      ((vector signed char) __builtin_altivec_lvx ((a), (b))), \
6719__ch (__un_args_eq (vector unsigned short, *(b)), \
6720      ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \
6721__ch (__un_args_eq (unsigned short, *(b)), \
6722      ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \
6723__ch (__un_args_eq (vector signed short, *(b)), \
6724      ((vector signed short) __builtin_altivec_lvx ((a), (b))), \
6725__ch (__un_args_eq (signed short, *(b)), \
6726      ((vector signed short) __builtin_altivec_lvx ((a), (b))), \
6727__ch (__un_args_eq (vector unsigned int, *(b)), \
6728      ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
6729__ch (__un_args_eq (unsigned int, *(b)), \
6730      ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
6731__ch (__un_args_eq (unsigned long, *(b)), \
6732      ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
6733__ch (__un_args_eq (vector signed int, *(b)), \
6734      ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
6735__ch (__un_args_eq (signed int, *(b)), \
6736      ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
6737__ch (__un_args_eq (signed long, *(b)), \
6738      ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
6739__ch (__un_args_eq (vector float, *(b)), \
6740      ((vector float) __builtin_altivec_lvx ((a), (b))), \
6741__ch (__un_args_eq (float, *(b)), \
6742      ((vector float) __builtin_altivec_lvx ((a), (b))), \
6743__altivec_link_error_invalid_argument ()))))))))))))))))
6744
6745#define vec_lde(a, b) \
6746__ch (__un_args_eq (unsigned char, *(b)), \
6747      ((vector unsigned char) __builtin_altivec_lvebx ((a), (b))), \
6748__ch (__un_args_eq (signed char, *(b)), \
6749      ((vector signed char) __builtin_altivec_lvebx ((a), (b))), \
6750__ch (__un_args_eq (unsigned short, *(b)), \
6751      ((vector unsigned short) __builtin_altivec_lvehx ((a), (b))), \
6752__ch (__un_args_eq (signed short, *(b)), \
6753      ((vector signed short) __builtin_altivec_lvehx ((a), (b))), \
6754__ch (__un_args_eq (unsigned long, *(b)), \
6755      ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \
6756__ch (__un_args_eq (signed long, *(b)), \
6757      ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \
6758__ch (__un_args_eq (unsigned int, *(b)), \
6759      ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \
6760__ch (__un_args_eq (signed int, *(b)), \
6761      ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \
6762__ch (__un_args_eq (float, *(b)), \
6763      ((vector float) __builtin_altivec_lvewx ((a), (b))), \
6764__altivec_link_error_invalid_argument ())))))))))
6765
6766#define vec_lvewx(a, b) \
6767__ch (__un_args_eq (unsigned int, *(b)), \
6768      ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \
6769__ch (__un_args_eq (signed int, *(b)), \
6770      ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \
6771__ch (__un_args_eq (unsigned long, *(b)), \
6772      ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \
6773__ch (__un_args_eq (signed long, *(b)), \
6774      ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \
6775__ch (__un_args_eq (float, *(b)), \
6776      ((vector float) __builtin_altivec_lvewx ((a), (b))), \
6777__altivec_link_error_invalid_argument ())))))
6778
6779#define vec_lvehx(a, b) \
6780__ch (__un_args_eq (unsigned short, *(b)), \
6781      ((vector unsigned short) __builtin_altivec_lvehx ((a), (b))), \
6782__ch (__un_args_eq (signed short, *(b)), \
6783      ((vector signed short) __builtin_altivec_lvehx ((a), (b))), \
6784__altivec_link_error_invalid_argument ()))
6785
6786#define vec_lvebx(a, b) \
6787__ch (__un_args_eq (unsigned char, *(b)), \
6788      ((vector unsigned char) __builtin_altivec_lvebx ((a), (b))), \
6789__ch (__un_args_eq (signed char, *(b)), \
6790      ((vector signed char) __builtin_altivec_lvebx ((a), (b))), \
6791__altivec_link_error_invalid_argument ()))
6792
6793#define vec_ldl(a, b) \
6794__ch (__un_args_eq (vector unsigned char, *(b)), \
6795      ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \
6796__ch (__un_args_eq (unsigned char, *(b)), \
6797      ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \
6798__ch (__un_args_eq (vector signed char, *(b)), \
6799      ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \
6800__ch (__un_args_eq (signed char, *(b)), \
6801      ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \
6802__ch (__un_args_eq (vector unsigned short, *(b)), \
6803      ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \
6804__ch (__un_args_eq (unsigned short, *(b)), \
6805      ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \
6806__ch (__un_args_eq (vector signed short, *(b)), \
6807      ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \
6808__ch (__un_args_eq (signed short, *(b)), \
6809      ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \
6810__ch (__un_args_eq (vector unsigned int, *(b)), \
6811      ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
6812__ch (__un_args_eq (unsigned int, *(b)), \
6813      ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
6814__ch (__un_args_eq (unsigned long, *(b)), \
6815      ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
6816__ch (__un_args_eq (vector signed int, *(b)), \
6817      ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
6818__ch (__un_args_eq (signed int, *(b)), \
6819      ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
6820__ch (__un_args_eq (signed long, *(b)), \
6821      ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
6822__ch (__un_args_eq (vector float, *(b)), \
6823      ((vector float) __builtin_altivec_lvxl ((a), (b))), \
6824__ch (__un_args_eq (float, *(b)), \
6825      ((vector float) __builtin_altivec_lvxl ((a), (b))), \
6826__altivec_link_error_invalid_argument ()))))))))))))))))
6827
6828#define vec_loge(a1) __builtin_altivec_vlogefp ((a1))
6829
6830#define vec_lvsl(a1, a2) \
6831__ch (__un_args_eq (unsigned char, *(a2)), \
6832      ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
6833__ch (__un_args_eq (signed char, *(a2)), \
6834      ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
6835__ch (__un_args_eq (unsigned short, *(a2)), \
6836      ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
6837__ch (__un_args_eq (signed short, *(a2)), \
6838      ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
6839__ch (__un_args_eq (unsigned int, *(a2)), \
6840      ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
6841__ch (__un_args_eq (signed int, *(a2)), \
6842      ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
6843__ch (__un_args_eq (unsigned long, *(a2)), \
6844      ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
6845__ch (__un_args_eq (signed long, *(a2)), \
6846      ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
6847__ch (__un_args_eq (float, *(a2)), \
6848      ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
6849__altivec_link_error_invalid_argument ())))))))))
6850
6851#define vec_lvsr(a1, a2) \
6852__ch (__un_args_eq (unsigned char, *(a2)), \
6853      ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
6854__ch (__un_args_eq (signed char, *(a2)), \
6855      ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
6856__ch (__un_args_eq (unsigned short, *(a2)), \
6857      ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
6858__ch (__un_args_eq (signed short, *(a2)), \
6859      ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
6860__ch (__un_args_eq (unsigned int, *(a2)), \
6861      ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
6862__ch (__un_args_eq (signed int, *(a2)), \
6863      ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
6864__ch (__un_args_eq (unsigned long, *(a2)), \
6865      ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
6866__ch (__un_args_eq (signed long, *(a2)), \
6867      ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
6868__ch (__un_args_eq (float, *(a2)), \
6869      ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
6870__altivec_link_error_invalid_argument ())))))))))
6871
6872#define vec_madd(a1, a2, a3) (__builtin_altivec_vmaddfp ((a1), (a2), (a3)))
6873
6874#define vec_madds(a1, a2, a3) __builtin_altivec_vmhaddshs ((a1), (a2), (a3))
6875
6876#define vec_max(a1, a2) \
6877__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
6878      ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
6879__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
6880      ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
6881__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6882      ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
6883__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6884      ((vector signed char) __builtin_altivec_vmaxsb ((vector signed char) (a1), (vector signed char) (a2))), \
6885__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
6886      ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
6887__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
6888      ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
6889__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6890      ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
6891__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6892      ((vector signed short) __builtin_altivec_vmaxsh ((vector signed short) (a1), (vector signed short) (a2))), \
6893__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
6894      ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
6895__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
6896      ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
6897__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6898      ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
6899__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6900      ((vector signed int) __builtin_altivec_vmaxsw ((vector signed int) (a1), (vector signed int) (a2))), \
6901__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
6902      ((vector float) __builtin_altivec_vmaxfp ((vector float) (a1), (vector float) (a2))), \
6903    __altivec_link_error_invalid_argument ())))))))))))))
6904
6905#define vec_vmaxfp(a1, a2) \
6906__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
6907      ((vector float) __builtin_altivec_vmaxfp ((vector float) (a1), (vector float) (a2))), \
6908__altivec_link_error_invalid_argument ())
6909
6910#define vec_vmaxsw(a1, a2) \
6911__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6912      ((vector signed int) __builtin_altivec_vmaxsw ((vector signed int) (a1), (vector signed int) (a2))), \
6913__altivec_link_error_invalid_argument ())
6914
6915#define vec_vmaxuw(a1, a2) \
6916__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
6917      ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
6918__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
6919      ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
6920__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6921      ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
6922__altivec_link_error_invalid_argument ())))
6923
6924#define vec_vmaxsh(a1, a2) \
6925__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6926      ((vector signed short) __builtin_altivec_vmaxsh ((vector signed short) (a1), (vector signed short) (a2))), \
6927__altivec_link_error_invalid_argument ())
6928
6929#define vec_vmaxuh(a1, a2) \
6930__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
6931      ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
6932__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
6933      ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
6934__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6935      ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
6936__altivec_link_error_invalid_argument ())))
6937
6938#define vec_vmaxsb(a1, a2) \
6939__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6940      ((vector signed char) __builtin_altivec_vmaxsb ((vector signed char) (a1), (vector signed char) (a2))), \
6941__altivec_link_error_invalid_argument ())
6942
6943#define vec_vmaxub(a1, a2) \
6944__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
6945      ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
6946__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
6947      ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
6948__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6949      ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
6950__altivec_link_error_invalid_argument ())))
6951
6952#define vec_mergeh(a1, a2) \
6953__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6954      ((vector signed char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \
6955__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6956      ((vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \
6957__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6958      ((vector signed short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \
6959__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6960      ((vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \
6961__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
6962      ((vector float) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
6963__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6964      ((vector signed int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
6965__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6966      ((vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
6967    __altivec_link_error_invalid_argument ())))))))
6968
6969#define vec_vmrghw(a1, a2) \
6970__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
6971      ((vector float) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
6972__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
6973      ((vector signed int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
6974__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
6975      ((vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
6976__altivec_link_error_invalid_argument ())))
6977
6978#define vec_vmrghh(a1, a2) \
6979__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6980      ((vector signed short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \
6981__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
6982      ((vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \
6983__altivec_link_error_invalid_argument ()))
6984
6985#define vec_vmrghb(a1, a2) \
6986__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6987      ((vector signed char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \
6988__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6989      ((vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \
6990__altivec_link_error_invalid_argument ()))
6991
6992#define vec_mergel(a1, a2) \
6993__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
6994      ((vector signed char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \
6995__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
6996      ((vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \
6997__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
6998      ((vector signed short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \
6999__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7000      ((vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \
7001__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
7002      ((vector float) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
7003__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7004      ((vector signed int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
7005__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7006      ((vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
7007    __altivec_link_error_invalid_argument ())))))))
7008
7009#define vec_vmrglw(a1, a2) \
7010__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
7011      ((vector float) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
7012__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7013      ((vector signed int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
7014__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7015      ((vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
7016__altivec_link_error_invalid_argument ())))
7017
7018#define vec_vmrglh(a1, a2) \
7019__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7020      ((vector signed short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \
7021__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7022      ((vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \
7023__altivec_link_error_invalid_argument ()))
7024
7025#define vec_vmrglb(a1, a2) \
7026__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7027      ((vector signed char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \
7028__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7029      ((vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \
7030__altivec_link_error_invalid_argument ()))
7031
7032#define vec_mfvscr()  (((vector unsigned short) __builtin_altivec_mfvscr ()))
7033
7034#define vec_min(a1, a2) \
7035__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7036      ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
7037__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
7038      ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
7039__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7040      ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
7041__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7042      ((vector signed char) __builtin_altivec_vminsb ((vector signed char) (a1), (vector signed char) (a2))), \
7043__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7044      ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
7045__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
7046      ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
7047__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7048      ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
7049__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7050      ((vector signed short) __builtin_altivec_vminsh ((vector signed short) (a1), (vector signed short) (a2))), \
7051__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7052      ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
7053__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
7054      ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
7055__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7056      ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
7057__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7058      ((vector signed int) __builtin_altivec_vminsw ((vector signed int) (a1), (vector signed int) (a2))), \
7059__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
7060      ((vector float) __builtin_altivec_vminfp ((vector float) (a1), (vector float) (a2))), \
7061    __altivec_link_error_invalid_argument ())))))))))))))
7062
7063#define vec_vminfp(a1, a2) \
7064__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
7065      ((vector float) __builtin_altivec_vminfp ((vector float) (a1), (vector float) (a2))), \
7066__altivec_link_error_invalid_argument ())
7067
7068#define vec_vminsw(a1, a2) \
7069__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7070      ((vector signed int) __builtin_altivec_vminsw ((vector signed int) (a1), (vector signed int) (a2))), \
7071__altivec_link_error_invalid_argument ())
7072
7073#define vec_vminuw(a1, a2) \
7074__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7075      ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
7076__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
7077      ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
7078__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7079      ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
7080__altivec_link_error_invalid_argument ())))
7081
7082#define vec_vminsh(a1, a2) \
7083__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7084      ((vector signed short) __builtin_altivec_vminsh ((vector signed short) (a1), (vector signed short) (a2))), \
7085__altivec_link_error_invalid_argument ())
7086
7087#define vec_vminuh(a1, a2) \
7088__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7089      ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
7090__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
7091      ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
7092__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7093      ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
7094__altivec_link_error_invalid_argument ())))
7095
7096#define vec_vminsb(a1, a2) \
7097__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7098      ((vector signed char) __builtin_altivec_vminsb ((vector signed char) (a1), (vector signed char) (a2))), \
7099__altivec_link_error_invalid_argument ())
7100
7101#define vec_vminub(a1, a2) \
7102__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7103      ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
7104__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
7105      ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
7106__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7107      ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
7108__altivec_link_error_invalid_argument ())))
7109
7110#define vec_mladd(a1, a2, a3) \
7111__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \
7112      ((vector signed short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \
7113__ch (__tern_args_eq (vector signed short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \
7114      ((vector signed short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \
7115__ch (__tern_args_eq (vector unsigned short, (a1), vector signed short, (a2), vector signed short, (a3)), \
7116      ((vector signed short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \
7117__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \
7118      ((vector unsigned short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \
7119    __altivec_link_error_invalid_argument ()))))
7120
7121#define vec_mradds(a1, a2, a3) __builtin_altivec_vmhraddshs ((a1), (a2), (a3))
7122
7123#define vec_msum(a1, a2, a3) \
7124__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned int, (a3)), \
7125      ((vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \
7126__ch (__tern_args_eq (vector signed char, (a1), vector unsigned char, (a2), vector signed int, (a3)), \
7127      ((vector signed int) __builtin_altivec_vmsummbm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \
7128__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \
7129      ((vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
7130__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \
7131      ((vector signed int) __builtin_altivec_vmsumshm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
7132    __altivec_link_error_invalid_argument ()))))
7133
7134#define vec_vmsumshm(a1, a2, a3) \
7135__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \
7136      ((vector signed int) __builtin_altivec_vmsumshm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
7137__altivec_link_error_invalid_argument ())
7138
7139#define vec_vmsumuhm(a1, a2, a3) \
7140__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \
7141      ((vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
7142__altivec_link_error_invalid_argument ())
7143
7144#define vec_vmsummbm(a1, a2, a3) \
7145__ch (__tern_args_eq (vector signed char, (a1), vector unsigned char, (a2), vector signed int, (a3)), \
7146      ((vector signed int) __builtin_altivec_vmsummbm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \
7147__altivec_link_error_invalid_argument ())
7148
7149#define vec_vmsumubm(a1, a2, a3) \
7150__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned int, (a3)), \
7151      ((vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \
7152__altivec_link_error_invalid_argument ())
7153
7154#define vec_msums(a1, a2, a3) \
7155__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \
7156      ((vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
7157__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \
7158      ((vector signed int) __builtin_altivec_vmsumshs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
7159    __altivec_link_error_invalid_argument ()))
7160
7161#define vec_vmsumshs(a1, a2, a3) \
7162__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \
7163      ((vector signed int) __builtin_altivec_vmsumshs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
7164__altivec_link_error_invalid_argument ())
7165
7166#define vec_vmsumuhs(a1, a2, a3) \
7167__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \
7168      ((vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
7169__altivec_link_error_invalid_argument ())
7170
7171#define vec_mtvscr(a1) \
7172__ch (__un_args_eq (vector signed int, (a1)), \
7173      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
7174__ch (__un_args_eq (vector unsigned int, (a1)), \
7175      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
7176__ch (__un_args_eq (vector signed short, (a1)), \
7177      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
7178__ch (__un_args_eq (vector unsigned short, (a1)), \
7179      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
7180__ch (__un_args_eq (vector signed char, (a1)), \
7181      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
7182__ch (__un_args_eq (vector unsigned char, (a1)), \
7183      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
7184    __altivec_link_error_invalid_argument ()))))))
7185
7186#define vec_mule(a1, a2) \
7187__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7188      ((vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) (a1), (vector signed char) (a2))), \
7189__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7190      ((vector signed short) __builtin_altivec_vmulesb ((vector signed char) (a1), (vector signed char) (a2))), \
7191__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7192      ((vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) (a1), (vector signed short) (a2))), \
7193__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7194      ((vector signed int) __builtin_altivec_vmulesh ((vector signed short) (a1), (vector signed short) (a2))), \
7195    __altivec_link_error_invalid_argument ()))))
7196
7197#define vec_vmulesh(a1, a2) \
7198__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7199      ((vector signed int) __builtin_altivec_vmulesh ((vector signed short) (a1), (vector signed short) (a2))), \
7200__altivec_link_error_invalid_argument ())
7201
7202#define vec_vmuleuh(a1, a2) \
7203__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7204      ((vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) (a1), (vector signed short) (a2))), \
7205__altivec_link_error_invalid_argument ())
7206
7207#define vec_vmulesb(a1, a2) \
7208__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7209      ((vector signed short) __builtin_altivec_vmulesb ((vector signed char) (a1), (vector signed char) (a2))), \
7210__altivec_link_error_invalid_argument ())
7211
7212#define vec_vmuleub(a1, a2) \
7213__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7214      ((vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) (a1), (vector signed char) (a2))), \
7215__altivec_link_error_invalid_argument ())
7216
7217#define vec_mulo(a1, a2) \
7218__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7219      ((vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) (a1), (vector signed char) (a2))), \
7220__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7221      ((vector signed short) __builtin_altivec_vmulosb ((vector signed char) (a1), (vector signed char) (a2))), \
7222__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7223      ((vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) (a1), (vector signed short) (a2))), \
7224__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7225      ((vector signed int) __builtin_altivec_vmulosh ((vector signed short) (a1), (vector signed short) (a2))), \
7226    __altivec_link_error_invalid_argument ()))))
7227
7228#define vec_vmulosh(a1, a2) \
7229__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7230      ((vector signed int) __builtin_altivec_vmulosh ((vector signed short) (a1), (vector signed short) (a2))), \
7231__altivec_link_error_invalid_argument ())
7232
7233#define vec_vmulouh(a1, a2) \
7234__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7235      ((vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) (a1), (vector signed short) (a2))), \
7236__altivec_link_error_invalid_argument ())
7237
7238#define vec_vmulosb(a1, a2) \
7239__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7240      ((vector signed short) __builtin_altivec_vmulosb ((vector signed char) (a1), (vector signed char) (a2))), \
7241__altivec_link_error_invalid_argument ())
7242
7243#define vec_vmuloub(a1, a2) \
7244__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7245      ((vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) (a1), (vector signed char) (a2))), \
7246__altivec_link_error_invalid_argument ())
7247
7248#define vec_nmsub(a1, a2, a3) \
7249__ch (__tern_args_eq (vector float, ((a1)), vector float, ((a2)) , vector float, ((a3))), \
7250      ((vector float) __builtin_altivec_vnmsubfp ((vector float) ((a1)), (vector float) ((a2)), (vector float)((a3)))), \
7251    __altivec_link_error_invalid_argument ())
7252
7253#define vec_nor(a1, a2) \
7254__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
7255      ((vector float) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
7256__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7257      ((vector signed int) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
7258__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7259      ((vector unsigned int) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
7260__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7261      ((vector signed short) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
7262__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7263      ((vector unsigned short) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
7264__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7265      ((vector signed char) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
7266__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7267      ((vector unsigned char) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
7268    __altivec_link_error_invalid_argument ())))))))
7269
7270#define vec_or(a1, a2) \
7271__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
7272      ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7273__ch (__bin_args_eq (vector float, (a1), vector signed int, (a2)), \
7274      ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7275__ch (__bin_args_eq (vector signed int, (a1), vector float, (a2)), \
7276      ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7277__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7278      ((vector signed int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7279__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7280      ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7281__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
7282      ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7283__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7284      ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7285__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7286      ((vector signed short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7287__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7288      ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7289__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
7290      ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7291__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7292      ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7293__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7294      ((vector signed char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7295__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7296      ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7297__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
7298      ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7299__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7300      ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
7301    __altivec_link_error_invalid_argument ())))))))))))))))
7302
7303#define vec_pack(a1, a2) \
7304__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7305      ((vector signed char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \
7306__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7307      ((vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \
7308__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7309      ((vector signed short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \
7310__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7311      ((vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \
7312    __altivec_link_error_invalid_argument ()))))
7313
7314#define vec_vpkuwum(a1, a2) \
7315__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7316      ((vector signed short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \
7317__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7318      ((vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \
7319__altivec_link_error_invalid_argument ()))
7320
7321#define vec_vpkuhum(a1, a2) \
7322__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7323      ((vector signed char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \
7324__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7325      ((vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \
7326__altivec_link_error_invalid_argument ()))
7327
7328#define vec_packpx(a1, a2) \
7329__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7330  (vector unsigned short) __builtin_altivec_vpkpx ((vector signed int) (a1), (vector signed int) (a2)), \
7331__altivec_link_error_invalid_argument ())
7332
7333#define vec_packs(a1, a2) \
7334__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7335      ((vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) (a1), (vector signed short) (a2))), \
7336__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7337      ((vector signed char) __builtin_altivec_vpkshss ((vector signed short) (a1), (vector signed short) (a2))), \
7338__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7339      ((vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) (a1), (vector signed int) (a2))), \
7340__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7341      ((vector signed short) __builtin_altivec_vpkswss ((vector signed int) (a1), (vector signed int) (a2))), \
7342    __altivec_link_error_invalid_argument ()))))
7343
7344#define vec_vpkswss(a1, a2) \
7345__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7346      ((vector signed short) __builtin_altivec_vpkswss ((vector signed int) (a1), (vector signed int) (a2))), \
7347__altivec_link_error_invalid_argument ())
7348
7349#define vec_vpkuwus(a1, a2) \
7350__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7351      ((vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) (a1), (vector signed int) (a2))), \
7352__altivec_link_error_invalid_argument ())
7353
7354#define vec_vpkshss(a1, a2) \
7355__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7356      ((vector signed char) __builtin_altivec_vpkshss ((vector signed short) (a1), (vector signed short) (a2))), \
7357__altivec_link_error_invalid_argument ())
7358
7359#define vec_vpkuhus(a1, a2) \
7360__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7361      ((vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) (a1), (vector signed short) (a2))), \
7362__altivec_link_error_invalid_argument ())
7363
7364#define vec_packsu(a1, a2) \
7365__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7366      ((vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) (a1), (vector signed short) (a2))), \
7367__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7368      ((vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) (a1), (vector signed short) (a2))), \
7369__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7370      ((vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) (a1), (vector signed int) (a2))), \
7371__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7372      ((vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) (a1), (vector signed int) (a2))), \
7373    __altivec_link_error_invalid_argument ()))))
7374
7375#define vec_vpkswus(a1, a2) \
7376__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7377      ((vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) (a1), (vector signed int) (a2))), \
7378__altivec_link_error_invalid_argument ())
7379
7380#define vec_vpkshus(a1, a2) \
7381__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7382      ((vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) (a1), (vector signed short) (a2))), \
7383__altivec_link_error_invalid_argument ())
7384
7385#define vec_perm(a1, a2, a3) \
7386__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector unsigned char, (a3)), \
7387      ((vector float) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
7388__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector unsigned char, (a3)), \
7389      ((vector signed int) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
7390__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector unsigned char, (a3)), \
7391      ((vector unsigned int) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
7392__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector unsigned char, (a3)), \
7393      ((vector signed short) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
7394__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned char, (a3)), \
7395      ((vector unsigned short) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
7396__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector unsigned char, (a3)), \
7397      ((vector signed char) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
7398__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned char, (a3)), \
7399      ((vector unsigned char) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
7400    __altivec_link_error_invalid_argument ())))))))
7401
7402#define vec_re(a1) __builtin_altivec_vrefp ((a1))
7403
7404#define vec_rl(a1, a2) \
7405__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7406      ((vector signed char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \
7407__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7408      ((vector unsigned char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \
7409__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7410      ((vector signed short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \
7411__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7412      ((vector unsigned short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \
7413__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7414      ((vector signed int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \
7415__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7416      ((vector unsigned int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \
7417    __altivec_link_error_invalid_argument ()))))))
7418
7419#define vec_vrlw(a1, a2) \
7420__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7421      ((vector signed int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \
7422__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7423      ((vector unsigned int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \
7424__altivec_link_error_invalid_argument ()))
7425
7426#define vec_vrlh(a1, a2) \
7427__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7428      ((vector signed short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \
7429__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7430      ((vector unsigned short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \
7431__altivec_link_error_invalid_argument ()))
7432
7433#define vec_vrlb(a1, a2) \
7434__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7435      ((vector signed char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \
7436__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7437      ((vector unsigned char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \
7438__altivec_link_error_invalid_argument ()))
7439
7440#define vec_round(a1) __builtin_altivec_vrfin ((a1))
7441
7442#define vec_rsqrte(a1) __builtin_altivec_vrsqrtefp ((a1))
7443
7444#define vec_sel(a1, a2, a3) \
7445__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector signed int, (a3)), \
7446      ((vector float) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7447__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector unsigned int, (a3)), \
7448      ((vector float) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7449__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector signed int, (a3)), \
7450      ((vector signed int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7451__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector unsigned int, (a3)), \
7452      ((vector signed int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7453__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector signed int, (a3)), \
7454      ((vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7455__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector unsigned int, (a3)), \
7456      ((vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7457__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \
7458      ((vector signed short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7459__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector unsigned short, (a3)), \
7460      ((vector signed short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7461__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector signed short, (a3)), \
7462      ((vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7463__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \
7464      ((vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7465__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector signed char, (a3)), \
7466      ((vector signed char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7467__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector unsigned char, (a3)), \
7468      ((vector signed char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7469__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector signed char, (a3)), \
7470      ((vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7471__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned char, (a3)), \
7472      ((vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
7473    __altivec_link_error_invalid_argument ()))))))))))))))
7474
7475#define vec_sl(a1, a2) \
7476__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7477      ((vector signed char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \
7478__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7479      ((vector unsigned char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \
7480__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7481      ((vector signed short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \
7482__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7483      ((vector unsigned short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \
7484__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7485      ((vector signed int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \
7486__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7487      ((vector unsigned int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \
7488    __altivec_link_error_invalid_argument ()))))))
7489
7490#define vec_vslw(a1, a2) \
7491__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7492      ((vector signed int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \
7493__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7494      ((vector unsigned int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \
7495__altivec_link_error_invalid_argument ()))
7496
7497#define vec_vslh(a1, a2) \
7498__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7499      ((vector signed short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \
7500__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7501      ((vector unsigned short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \
7502__altivec_link_error_invalid_argument ()))
7503
7504#define vec_vslb(a1, a2) \
7505__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7506      ((vector signed char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \
7507__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7508      ((vector unsigned char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \
7509__altivec_link_error_invalid_argument ()))
7510
7511#define vec_sld(a1, a2, a3) \
7512__ch (__tern_args_eq (vector float, (a1), vector float, (a2), int, (a3)), \
7513      ((vector float) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7514__ch (__tern_args_eq (vector float, (a1), vector float, (a2), unsigned int, (a3)), \
7515      ((vector float) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7516__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), int, (a3)), \
7517      ((vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7518__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), unsigned int, (a3)), \
7519      ((vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7520__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), int, (a3)), \
7521      ((vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7522__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), unsigned int, (a3)), \
7523      ((vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7524__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), int, (a3)), \
7525      ((vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7526__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), unsigned int, (a3)), \
7527      ((vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7528__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), int, (a3)), \
7529      ((vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7530__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), unsigned int, (a3)), \
7531      ((vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7532__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), int, (a3)), \
7533      ((vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7534__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), unsigned int, (a3)), \
7535      ((vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7536__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), int, (a3)), \
7537      ((vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7538__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), unsigned int, (a3)), \
7539      ((vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
7540    __altivec_link_error_invalid_argument ()))))))))))))))
7541
7542#define vec_sll(a1, a2) \
7543__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7544      ((vector signed int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7545__ch (__bin_args_eq (vector signed int, (a1), vector unsigned short, (a2)), \
7546      ((vector signed int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7547__ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \
7548      ((vector signed int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7549__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7550      ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7551__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned short, (a2)), \
7552      ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7553__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \
7554      ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7555__ch (__bin_args_eq (vector signed short, (a1), vector unsigned int, (a2)), \
7556      ((vector signed short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7557__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7558      ((vector signed short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7559__ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \
7560      ((vector signed short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7561__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned int, (a2)), \
7562      ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7563__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7564      ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7565__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \
7566      ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7567__ch (__bin_args_eq (vector signed char, (a1), vector unsigned int, (a2)), \
7568      ((vector signed char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7569__ch (__bin_args_eq (vector signed char, (a1), vector unsigned short, (a2)), \
7570      ((vector signed char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7571__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7572      ((vector signed char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7573__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \
7574      ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7575__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned short, (a2)), \
7576      ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7577__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7578      ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
7579    __altivec_link_error_invalid_argument ()))))))))))))))))))
7580
7581#define vec_slo(a1, a2) \
7582__ch (__bin_args_eq (vector float, (a1), vector signed char, (a2)), \
7583      ((vector float) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7584__ch (__bin_args_eq (vector float, (a1), vector unsigned char, (a2)), \
7585      ((vector float) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7586__ch (__bin_args_eq (vector signed int, (a1), vector signed char, (a2)), \
7587      ((vector signed int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7588__ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \
7589      ((vector signed int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7590__ch (__bin_args_eq (vector unsigned int, (a1), vector signed char, (a2)), \
7591      ((vector unsigned int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7592__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \
7593      ((vector unsigned int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7594__ch (__bin_args_eq (vector signed short, (a1), vector signed char, (a2)), \
7595      ((vector signed short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7596__ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \
7597      ((vector signed short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7598__ch (__bin_args_eq (vector unsigned short, (a1), vector signed char, (a2)), \
7599      ((vector unsigned short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7600__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \
7601      ((vector unsigned short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7602__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7603      ((vector signed char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7604__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7605      ((vector signed char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7606__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
7607      ((vector unsigned char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7608__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7609      ((vector unsigned char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
7610    __altivec_link_error_invalid_argument ()))))))))))))))
7611
7612#define vec_splat(a1, a2) \
7613__ch (__bin_args_eq (vector signed char, ((a1)), int, ((a2))), \
7614      ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
7615__ch (__bin_args_eq (vector signed char, ((a1)), unsigned int, ((a2))), \
7616      ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
7617__ch (__bin_args_eq (vector unsigned char, ((a1)), int, ((a2))), \
7618      ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
7619__ch (__bin_args_eq (vector unsigned char, ((a1)), unsigned int, ((a2))), \
7620      ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
7621__ch (__bin_args_eq (vector signed short, ((a1)), int, ((a2))), \
7622      ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
7623__ch (__bin_args_eq (vector signed short, ((a1)), unsigned int, ((a2))), \
7624      ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
7625__ch (__bin_args_eq (vector unsigned short, ((a1)), int, ((a2))), \
7626      ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
7627__ch (__bin_args_eq (vector unsigned short, ((a1)), unsigned int, ((a2))), \
7628      ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
7629__ch (__bin_args_eq (vector float, ((a1)), int, ((a2))), \
7630      ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
7631__ch (__bin_args_eq (vector float, ((a1)), unsigned int, ((a2))), \
7632      ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
7633__ch (__bin_args_eq (vector signed int, ((a1)), int, ((a2))), \
7634      ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
7635__ch (__bin_args_eq (vector signed int, ((a1)), unsigned int, ((a2))), \
7636      ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
7637__ch (__bin_args_eq (vector unsigned int, ((a1)), int, ((a2))), \
7638      ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \
7639__ch (__bin_args_eq (vector unsigned int, ((a1)), unsigned int, ((a2))), \
7640      ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \
7641    __altivec_link_error_invalid_argument ()))))))))))))))
7642
7643#define vec_vspltw(a1, a2) \
7644__ch (__bin_args_eq (vector float, ((a1)), int, ((a2))), \
7645      ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
7646__ch (__bin_args_eq (vector float, ((a1)), unsigned int, ((a2))), \
7647      ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
7648__ch (__bin_args_eq (vector signed int, ((a1)), int, ((a2))), \
7649      ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
7650__ch (__bin_args_eq (vector signed int, ((a1)), unsigned int, ((a2))), \
7651      ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
7652__ch (__bin_args_eq (vector unsigned int, ((a1)), int, ((a2))), \
7653      ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \
7654__ch (__bin_args_eq (vector unsigned int, ((a1)), unsigned int, ((a2))), \
7655      ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \
7656__altivec_link_error_invalid_argument ()))))))
7657
7658#define vec_vsplth(a1, a2) \
7659__ch (__bin_args_eq (vector signed short, ((a1)), int, ((a2))), \
7660      ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
7661__ch (__bin_args_eq (vector signed short, ((a1)), unsigned int, ((a2))), \
7662      ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
7663__ch (__bin_args_eq (vector unsigned short, ((a1)), int, ((a2))), \
7664      ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
7665__ch (__bin_args_eq (vector unsigned short, ((a1)), unsigned int, ((a2))), \
7666      ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
7667__altivec_link_error_invalid_argument ()))))
7668
7669#define vec_vspltb(a1, a2) \
7670__ch (__bin_args_eq (vector signed char, ((a1)), int, ((a2))), \
7671      ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
7672__ch (__bin_args_eq (vector signed char, ((a1)), unsigned int, ((a2))), \
7673      ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
7674__ch (__bin_args_eq (vector unsigned char, ((a1)), int, ((a2))), \
7675      ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
7676__ch (__bin_args_eq (vector unsigned char, ((a1)), unsigned int, ((a2))), \
7677      ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
7678__altivec_link_error_invalid_argument ()))))
7679
7680#define vec_splat_s8(a1) __builtin_altivec_vspltisb ((a1))
7681
7682#define vec_splat_s16(a1) __builtin_altivec_vspltish ((a1))
7683
7684#define vec_splat_s32(a1) __builtin_altivec_vspltisw ((a1))
7685
7686#define vec_splat_u8(a1) ((vector unsigned char) __builtin_altivec_vspltisb ((a1)))
7687
7688#define vec_splat_u16(a1) ((vector unsigned short) __builtin_altivec_vspltish ((a1)))
7689
7690#define vec_splat_u32(a1) ((vector unsigned int) __builtin_altivec_vspltisw ((a1)))
7691
7692#define vec_sr(a1, a2) \
7693__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7694      ((vector signed char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \
7695__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7696      ((vector unsigned char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \
7697__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7698      ((vector signed short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \
7699__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7700      ((vector unsigned short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \
7701__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7702      ((vector signed int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \
7703__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7704      ((vector unsigned int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \
7705    __altivec_link_error_invalid_argument ()))))))
7706
7707#define vec_vsrw(a1, a2) \
7708__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7709      ((vector signed int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \
7710__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7711      ((vector unsigned int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \
7712__altivec_link_error_invalid_argument ()))
7713
7714#define vec_vsrh(a1, a2) \
7715__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7716      ((vector signed short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \
7717__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7718      ((vector unsigned short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \
7719__altivec_link_error_invalid_argument ()))
7720
7721#define vec_vsrb(a1, a2) \
7722__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7723      ((vector signed char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \
7724__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7725      ((vector unsigned char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \
7726__altivec_link_error_invalid_argument ()))
7727
7728#define vec_sra(a1, a2) \
7729__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7730      ((vector signed char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \
7731__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7732      ((vector unsigned char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \
7733__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7734      ((vector signed short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \
7735__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7736      ((vector unsigned short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \
7737__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7738      ((vector signed int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \
7739__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7740      ((vector unsigned int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \
7741    __altivec_link_error_invalid_argument ()))))))
7742
7743#define vec_vsraw(a1, a2) \
7744__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7745      ((vector signed int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \
7746__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7747      ((vector unsigned int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \
7748__altivec_link_error_invalid_argument ()))
7749
7750#define vec_vsrah(a1, a2) \
7751__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7752      ((vector signed short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \
7753__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7754      ((vector unsigned short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \
7755__altivec_link_error_invalid_argument ()))
7756
7757#define vec_vsrab(a1, a2) \
7758__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7759      ((vector signed char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \
7760__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7761      ((vector unsigned char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \
7762__altivec_link_error_invalid_argument ()))
7763
7764#define vec_srl(a1, a2) \
7765__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7766      ((vector signed int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7767__ch (__bin_args_eq (vector signed int, (a1), vector unsigned short, (a2)), \
7768      ((vector signed int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7769__ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \
7770      ((vector signed int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7771__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7772      ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7773__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned short, (a2)), \
7774      ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7775__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \
7776      ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7777__ch (__bin_args_eq (vector signed short, (a1), vector unsigned int, (a2)), \
7778      ((vector signed short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7779__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7780      ((vector signed short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7781__ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \
7782      ((vector signed short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7783__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned int, (a2)), \
7784      ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7785__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7786      ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7787__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \
7788      ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7789__ch (__bin_args_eq (vector signed char, (a1), vector unsigned int, (a2)), \
7790      ((vector signed char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7791__ch (__bin_args_eq (vector signed char, (a1), vector unsigned short, (a2)), \
7792      ((vector signed char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7793__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7794      ((vector signed char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7795__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \
7796      ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7797__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned short, (a2)), \
7798      ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7799__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7800      ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
7801    __altivec_link_error_invalid_argument ()))))))))))))))))))
7802
7803#define vec_sro(a1, a2) \
7804__ch (__bin_args_eq (vector float, (a1), vector signed char, (a2)), \
7805      ((vector float) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7806__ch (__bin_args_eq (vector float, (a1), vector unsigned char, (a2)), \
7807      ((vector float) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7808__ch (__bin_args_eq (vector signed int, (a1), vector signed char, (a2)), \
7809      ((vector signed int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7810__ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \
7811      ((vector signed int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7812__ch (__bin_args_eq (vector unsigned int, (a1), vector signed char, (a2)), \
7813      ((vector unsigned int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7814__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \
7815      ((vector unsigned int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7816__ch (__bin_args_eq (vector signed short, (a1), vector signed char, (a2)), \
7817      ((vector signed short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7818__ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \
7819      ((vector signed short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7820__ch (__bin_args_eq (vector unsigned short, (a1), vector signed char, (a2)), \
7821      ((vector unsigned short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7822__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \
7823      ((vector unsigned short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7824__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7825      ((vector signed char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7826__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7827      ((vector signed char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7828__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
7829      ((vector unsigned char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7830__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7831      ((vector unsigned char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
7832    __altivec_link_error_invalid_argument ()))))))))))))))
7833
7834#define vec_st(a1, a2, a3) \
7835  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (a3))
7836
7837#define vec_stl(a1, a2, a3) \
7838  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (a3))
7839
7840#define vec_ste(a, b, c) \
7841__ch (__un_args_eq (vector unsigned char, (a)), \
7842      __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \
7843__ch (__un_args_eq (vector signed char, (a)), \
7844      __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \
7845__ch (__un_args_eq (vector unsigned short, (a)), \
7846     __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \
7847__ch (__un_args_eq (vector signed short, (a)), \
7848     __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \
7849__ch (__un_args_eq (vector unsigned int, (a)), \
7850     __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
7851__ch (__un_args_eq (vector signed int, (a)), \
7852     __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
7853__ch (__un_args_eq (vector float, (a)), \
7854     __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
7855     __altivec_link_error_invalid_argument ())))))))
7856
7857#define vec_stvewx(a, b, c) \
7858__ch (__un_args_eq (vector unsigned int, (a)), \
7859     __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
7860__ch (__un_args_eq (vector signed int, (a)), \
7861     __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
7862__ch (__un_args_eq (vector float, (a)), \
7863     __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
7864__altivec_link_error_invalid_argument ())))
7865
7866#define vec_stvehx(a, b, c) \
7867__ch (__un_args_eq (vector unsigned short, (a)), \
7868     __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \
7869__ch (__un_args_eq (vector signed short, (a)), \
7870     __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \
7871__altivec_link_error_invalid_argument ()))
7872
7873#define vec_stvebx(a, b, c) \
7874__ch (__un_args_eq (vector unsigned char, (a)), \
7875      __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \
7876__ch (__un_args_eq (vector signed char, (a)), \
7877      __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \
7878__altivec_link_error_invalid_argument ()))
7879
7880#define vec_sub(a1, a2) \
7881__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7882      ((vector signed char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
7883__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7884      ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
7885__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
7886      ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
7887__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7888      ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
7889__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7890      ((vector signed short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
7891__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7892      ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
7893__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
7894      ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
7895__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7896      ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
7897__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7898      ((vector signed int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
7899__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7900      ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
7901__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
7902      ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
7903__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7904      ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
7905__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
7906      ((vector float) __builtin_altivec_vsubfp ((vector float) (a1), (vector float) (a2))), \
7907    __altivec_link_error_invalid_argument ())))))))))))))
7908
7909#define vec_vsubfp(a1, a2) \
7910__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
7911      ((vector float) __builtin_altivec_vsubfp ((vector float) (a1), (vector float) (a2))), \
7912__altivec_link_error_invalid_argument ())
7913
7914#define vec_vsubuwm(a1, a2) \
7915__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7916      ((vector signed int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
7917__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7918      ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
7919__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
7920      ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
7921__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7922      ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
7923__altivec_link_error_invalid_argument ()))))
7924
7925#define vec_vsubuhm(a1, a2) \
7926__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7927      ((vector signed short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
7928__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7929      ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
7930__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
7931      ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
7932__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7933      ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
7934__altivec_link_error_invalid_argument ()))))
7935
7936#define vec_vsububm(a1, a2) \
7937__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7938      ((vector signed char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
7939__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7940      ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
7941__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
7942      ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
7943__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7944      ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
7945__altivec_link_error_invalid_argument ()))))
7946
7947#define vec_subc(a1, a2) \
7948__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7949  ((vector unsigned int) __builtin_altivec_vsubcuw ((vector signed int) (a1), (vector signed int) (a2))), \
7950__altivec_link_error_invalid_argument ())
7951
7952#define vec_subs(a1, a2) \
7953__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
7954      ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
7955__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
7956      ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
7957__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
7958      ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
7959__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
7960      ((vector signed char) __builtin_altivec_vsubsbs ((vector signed char) (a1), (vector signed char) (a2))), \
7961__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
7962      ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
7963__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
7964      ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
7965__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
7966      ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
7967__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7968      ((vector signed short) __builtin_altivec_vsubshs ((vector signed short) (a1), (vector signed short) (a2))), \
7969__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7970      ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
7971__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
7972      ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
7973__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7974      ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
7975__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7976      ((vector signed int) __builtin_altivec_vsubsws ((vector signed int) (a1), (vector signed int) (a2))), \
7977    __altivec_link_error_invalid_argument ()))))))))))))
7978
7979#define vec_vsubsws(a1, a2) \
7980__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
7981      ((vector signed int) __builtin_altivec_vsubsws ((vector signed int) (a1), (vector signed int) (a2))), \
7982__altivec_link_error_invalid_argument ())
7983
7984#define vec_vsubuws(a1, a2) \
7985__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
7986      ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
7987__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
7988      ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
7989__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
7990      ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
7991__altivec_link_error_invalid_argument ())))
7992
7993#define vec_vsubshs(a1, a2) \
7994__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
7995      ((vector signed short) __builtin_altivec_vsubshs ((vector signed short) (a1), (vector signed short) (a2))), \
7996__altivec_link_error_invalid_argument ())
7997
7998#define vec_vsubuhs(a1, a2) \
7999__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
8000      ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
8001__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
8002      ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
8003__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
8004      ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
8005__altivec_link_error_invalid_argument ())))
8006
8007#define vec_vsubsbs(a1, a2) \
8008__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
8009      ((vector signed char) __builtin_altivec_vsubsbs ((vector signed char) (a1), (vector signed char) (a2))), \
8010__altivec_link_error_invalid_argument ())
8011
8012#define vec_vsububs(a1, a2) \
8013__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
8014      ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
8015__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
8016      ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
8017__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
8018      ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
8019__altivec_link_error_invalid_argument ())))
8020
8021#define vec_sum4s(a1, a2) \
8022__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \
8023      ((vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) (a1), (vector signed int) (a2))), \
8024__ch (__bin_args_eq (vector signed char, (a1), vector signed int, (a2)), \
8025      ((vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) (a1), (vector signed int) (a2))), \
8026__ch (__bin_args_eq (vector signed short, (a1), vector signed int, (a2)), \
8027      ((vector signed int) __builtin_altivec_vsum4shs ((vector signed short) (a1), (vector signed int) (a2))), \
8028    __altivec_link_error_invalid_argument ())))
8029
8030#define vec_vsum4shs(a1, a2) \
8031__ch (__bin_args_eq (vector signed short, (a1), vector signed int, (a2)), \
8032      ((vector signed int) __builtin_altivec_vsum4shs ((vector signed short) (a1), (vector signed int) (a2))), \
8033__altivec_link_error_invalid_argument ())
8034
8035#define vec_vsum4sbs(a1, a2) \
8036__ch (__bin_args_eq (vector signed char, (a1), vector signed int, (a2)), \
8037      ((vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) (a1), (vector signed int) (a2))), \
8038__altivec_link_error_invalid_argument ())
8039
8040#define vec_vsum4ubs(a1, a2) \
8041__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \
8042      ((vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) (a1), (vector signed int) (a2))), \
8043__altivec_link_error_invalid_argument ())
8044
8045#define vec_sum2s(a1, a2) __builtin_altivec_vsum2sws ((a1), (a2))
8046
8047#define vec_sums(a1, a2) __builtin_altivec_vsumsws ((a1), (a2))
8048
8049#define vec_trunc(a1) __builtin_altivec_vrfiz ((a1))
8050
8051#define vec_unpackh(a1) \
8052__ch (__un_args_eq (vector signed char, (a1)), \
8053      ((vector signed short) __builtin_altivec_vupkhsb ((vector signed char) (a1))), \
8054__ch (__un_args_eq (vector unsigned short, (a1)), \
8055      ((vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) (a1))), \
8056__ch (__un_args_eq (vector signed short, (a1)), \
8057      ((vector signed int) __builtin_altivec_vupkhsh ((vector signed short) (a1))), \
8058    __altivec_link_error_invalid_argument ())))
8059
8060#define vec_vupkhsh(a1) \
8061__ch (__un_args_eq (vector signed short, (a1)), \
8062      ((vector signed int) __builtin_altivec_vupkhsh ((vector signed short) (a1))), \
8063__altivec_link_error_invalid_argument ())
8064
8065#define vec_vupkhpx(a1) \
8066__ch (__un_args_eq (vector unsigned short, (a1)), \
8067      ((vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) (a1))), \
8068__altivec_link_error_invalid_argument ())
8069
8070#define vec_vupkhsb(a1) \
8071__ch (__un_args_eq (vector signed char, (a1)), \
8072      ((vector signed short) __builtin_altivec_vupkhsb ((vector signed char) (a1))), \
8073__altivec_link_error_invalid_argument ())
8074
8075#define vec_unpackl(a1) \
8076__ch (__un_args_eq (vector signed char, (a1)), \
8077      ((vector signed short) __builtin_altivec_vupklsb ((vector signed char) (a1))), \
8078__ch (__un_args_eq (vector unsigned short, (a1)), \
8079      ((vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) (a1))), \
8080__ch (__un_args_eq (vector signed short, (a1)), \
8081      ((vector signed int) __builtin_altivec_vupklsh ((vector signed short) (a1))), \
8082    __altivec_link_error_invalid_argument ())))
8083
8084#define vec_vupklsh(a1) \
8085__ch (__un_args_eq (vector signed short, (a1)), \
8086      ((vector signed int) __builtin_altivec_vupklsh ((vector signed short) (a1))), \
8087__altivec_link_error_invalid_argument ())
8088
8089#define vec_vupklpx(a1) \
8090__ch (__un_args_eq (vector unsigned short, (a1)), \
8091      ((vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) (a1))), \
8092__altivec_link_error_invalid_argument ())
8093
8094#define vec_vupklsb(a1) \
8095__ch (__un_args_eq (vector signed char, (a1)), \
8096      ((vector signed short) __builtin_altivec_vupklsb ((vector signed char) (a1))), \
8097__altivec_link_error_invalid_argument ())
8098
8099#define vec_xor(a1, a2) \
8100__ch (__bin_args_eq (vector float, ((a1)), vector float, ((a2))), \
8101      ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8102__ch (__bin_args_eq (vector float, ((a1)), vector unsigned int, ((a2))), \
8103      ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8104__ch (__bin_args_eq (vector unsigned int, ((a1)), vector float, ((a2))), \
8105      ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8106__ch (__bin_args_eq (vector signed int, ((a1)), vector float, ((a2))), \
8107      ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8108__ch (__bin_args_eq (vector float, ((a1)), vector signed int, ((a2))), \
8109      ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8110__ch (__bin_args_eq (vector signed int, ((a1)), vector signed int, ((a2))), \
8111      ((vector signed int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8112__ch (__bin_args_eq (vector signed int, ((a1)), vector unsigned int, ((a2))), \
8113      ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8114__ch (__bin_args_eq (vector unsigned int, ((a1)), vector signed int, ((a2))), \
8115      ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8116__ch (__bin_args_eq (vector unsigned int, ((a1)), vector unsigned int, ((a2))), \
8117      ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8118__ch (__bin_args_eq (vector unsigned short, ((a1)), vector unsigned short, ((a2))), \
8119      ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8120__ch (__bin_args_eq (vector signed short, ((a1)), vector unsigned short, ((a2))), \
8121      ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8122__ch (__bin_args_eq (vector unsigned short, ((a1)), vector signed short, ((a2))), \
8123      ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8124__ch (__bin_args_eq (vector unsigned short, ((a1)), vector unsigned short, ((a2))), \
8125      ((vector signed short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8126__ch (__bin_args_eq (vector signed short, ((a1)), vector signed short, ((a2))), \
8127      ((vector signed short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8128__ch (__bin_args_eq (vector signed short, ((a1)), vector unsigned short, ((a2))), \
8129      ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8130__ch (__bin_args_eq (vector unsigned short, ((a1)), vector signed short, ((a2))), \
8131      ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8132__ch (__bin_args_eq (vector unsigned short, ((a1)), vector unsigned short, ((a2))), \
8133      ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8134__ch (__bin_args_eq (vector unsigned char, ((a1)), vector unsigned char, ((a2))), \
8135      ((vector unsigned char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8136__ch (__bin_args_eq (vector signed char, ((a1)), vector unsigned char, ((a2))), \
8137      ((vector unsigned char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8138__ch (__bin_args_eq (vector signed char, ((a1)), vector signed char, ((a2))), \
8139      ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8140__ch (__bin_args_eq (vector unsigned char, ((a1)), vector unsigned char, ((a2))), \
8141      ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8142__ch (__bin_args_eq (vector signed char, ((a1)), vector unsigned char, ((a2))), \
8143      ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8144__ch (__bin_args_eq (vector unsigned char, ((a1)), vector signed char, ((a2))), \
8145      ((vector unsigned char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
8146    __altivec_link_error_invalid_argument ())))))))))))))))))))))))
8147
8148/* Predicates.  */
8149
8150#define vec_all_eq(a1, a2) \
8151__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
8152      __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
8153__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
8154      __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
8155__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
8156      __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
8157__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
8158      __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
8159__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
8160      __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
8161__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
8162      __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
8163__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
8164      __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
8165__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
8166      __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
8167__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
8168      __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
8169__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
8170      __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
8171__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
8172      __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
8173__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
8174      __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
8175__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
8176      __builtin_altivec_vcmpeqfp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \
8177    __altivec_link_error_invalid_argument ())))))))))))))
8178
8179#define vec_all_ge(a1, a2) \
8180__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
8181      __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
8182__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
8183      __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
8184__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
8185      __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
8186__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
8187      __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
8188__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
8189      __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
8190__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
8191      __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
8192__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
8193      __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
8194__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
8195      __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
8196__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
8197      __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
8198__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
8199      __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
8200__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
8201      __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
8202__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
8203      __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
8204__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
8205      __builtin_altivec_vcmpgefp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \
8206    __altivec_link_error_invalid_argument ())))))))))))))
8207
8208#define vec_all_gt(a1, a2) \
8209__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
8210      __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
8211__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
8212      __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
8213__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
8214      __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
8215__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
8216      __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
8217__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
8218      __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
8219__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
8220      __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
8221__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
8222      __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
8223__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
8224      __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
8225__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
8226      __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
8227__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
8228      __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
8229__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
8230      __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
8231__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
8232      __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
8233__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
8234      __builtin_altivec_vcmpgtfp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \
8235    __altivec_link_error_invalid_argument ())))))))))))))
8236
8237#define vec_all_in(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ, (a1), (a2))
8238
8239#define vec_all_le(a1, a2) \
8240__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
8241      __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
8242__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
8243      __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
8244__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
8245      __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
8246__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
8247      __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
8248__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
8249      __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
8250__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
8251      __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
8252__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
8253      __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
8254__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
8255      __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
8256__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
8257      __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
8258__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
8259      __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
8260__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
8261      __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
8262__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
8263      __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
8264__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
8265      __builtin_altivec_vcmpgefp_p (__CR6_LT, (vector float) (a2), (vector float) (a1)), \
8266    __altivec_link_error_invalid_argument ())))))))))))))
8267
8268#define vec_all_lt(a1, a2) \
8269__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
8270      __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
8271__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
8272      __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
8273__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
8274      __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
8275__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
8276      __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
8277__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
8278      __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
8279__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
8280      __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
8281__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
8282      __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
8283__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
8284      __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
8285__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
8286      __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
8287__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
8288      __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
8289__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
8290      __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
8291__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
8292      __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
8293__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
8294      __builtin_altivec_vcmpgtfp_p (__CR6_LT, (vector float) (a2), (vector float) (a1)), \
8295    __altivec_link_error_invalid_argument ())))))))))))))
8296
8297#define vec_all_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1))
8298
8299#define vec_all_ne(a1, a2) \
8300__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
8301      __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
8302__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
8303      __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
8304__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
8305      __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
8306__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
8307      __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
8308__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
8309      __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
8310__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
8311      __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
8312__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
8313      __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
8314__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
8315      __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
8316__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
8317      __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
8318__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
8319      __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
8320__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
8321      __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
8322__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
8323      __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
8324__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
8325      __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (vector float) (a1), (vector float) (a2)), \
8326    __altivec_link_error_invalid_argument ())))))))))))))
8327
8328#define vec_all_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a1), (a2))
8329
8330#define vec_all_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a1), (a2))
8331
8332#define vec_all_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a2), (a1))
8333
8334#define vec_all_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a2), (a1))
8335
8336#define vec_all_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT, (a1), (a1))
8337
8338#define vec_any_eq(a1, a2) \
8339__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
8340      __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8341__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
8342      __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8343__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
8344      __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8345__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
8346      __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8347__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
8348      __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8349__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
8350      __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8351__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
8352      __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8353__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
8354      __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8355__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
8356      __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8357__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
8358      __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8359__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
8360      __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8361__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
8362      __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8363__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
8364      __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \
8365    __altivec_link_error_invalid_argument ())))))))))))))
8366
8367#define vec_any_ge(a1, a2) \
8368__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
8369      __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
8370__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
8371      __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
8372__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
8373      __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
8374__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
8375      __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
8376__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
8377      __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
8378__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
8379      __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
8380__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
8381      __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
8382__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
8383      __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
8384__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
8385      __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
8386__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
8387      __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
8388__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
8389      __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
8390__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
8391      __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
8392__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
8393      __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \
8394    __altivec_link_error_invalid_argument ())))))))))))))
8395
8396#define vec_any_gt(a1, a2) \
8397__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
8398      __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8399__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
8400      __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8401__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
8402      __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8403__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
8404      __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8405__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
8406      __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8407__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
8408      __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8409__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
8410      __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8411__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
8412      __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8413__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
8414      __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8415__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
8416      __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8417__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
8418      __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8419__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
8420      __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8421__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
8422      __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \
8423    __altivec_link_error_invalid_argument ())))))))))))))
8424
8425#define vec_any_le(a1, a2) \
8426__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
8427      __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8428__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
8429      __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8430__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
8431      __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8432__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
8433      __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8434__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
8435      __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8436__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
8437      __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8438__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
8439      __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8440__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
8441      __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8442__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
8443      __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8444__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
8445      __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8446__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
8447      __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8448__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
8449      __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8450__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
8451      __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, (vector float) (a2), (vector float) (a1)), \
8452    __altivec_link_error_invalid_argument ())))))))))))))
8453
8454#define vec_any_lt(a1, a2) \
8455__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
8456      __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
8457__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
8458      __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
8459__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
8460      __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
8461__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
8462      __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
8463__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
8464      __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
8465__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
8466      __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
8467__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
8468      __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
8469__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
8470      __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
8471__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
8472      __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
8473__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
8474      __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
8475__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
8476      __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
8477__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
8478      __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
8479__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
8480      __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, (vector float) (a2), (vector float) (a1)), \
8481    __altivec_link_error_invalid_argument ())))))))))))))
8482
8483#define vec_any_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a1)
8484
8485#define vec_any_ne(a1, a2) \
8486__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
8487      __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8488__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
8489      __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8490__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
8491      __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8492__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
8493      __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
8494__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
8495      __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8496__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
8497      __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8498__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
8499      __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8500__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
8501      __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
8502__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
8503      __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8504__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
8505      __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8506__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
8507      __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8508__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
8509      __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
8510__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
8511      __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, (vector float) (a1), (vector float) (a2)), \
8512    __altivec_link_error_invalid_argument ())))))))))))))
8513
8514#define vec_any_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a1), (a2))
8515
8516#define vec_any_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a1), (a2))
8517
8518#define vec_any_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a2), (a1))
8519
8520#define vec_any_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a2), (a1))
8521
8522#define vec_any_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (a1), (a1))
8523
8524#define vec_any_out(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, (a1), (a2))
8525
8526
8527#endif /* __cplusplus */
8528
8529#endif /* _ALTIVEC_H */
8530