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