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