OSDN Git Service

2002-04-22 Aldy Hernandez <aldyh@redhat.com>
[pf3gnuchains/gcc-fork.git] / gcc / config / rs6000 / altivec.h
1 /* PowerPC AltiVec include file.
2    Copyright (C) 2002 Free Software Foundation, Inc.
3    Contributed by Aldy Hernandez (aldyh@redhat.com).
4
5 This file is part of GNU CC.
6
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, 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 unsigned
48 #define pixel short
49 #define __pixel short
50
51 /* Dummy prototype.  */
52 extern 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 #ifdef __cplusplus
76
77 /* Prototypes for builtins that take literals and must always be
78    inlined.  */
79 inline vector float vec_ctf (vector unsigned int, const char) __attribute__ ((always_inline));
80 inline vector float vec_ctf (vector signed int, const char) __attribute__ ((always_inline));
81 inline vector signed int vec_cts (vector float, const char) __attribute__ ((always_inline));
82 inline vector unsigned int vec_ctu (vector float, const char) __attribute__ ((always_inline));
83 inline void vec_dss (const char) __attribute__ ((always_inline));
84 inline void vec_dst (void *, int, const char) __attribute__ ((always_inline));
85 inline void vec_dstst (void *, int, const char) __attribute__ ((always_inline));
86 inline void vec_dststt (void *, int, const char) __attribute__ ((always_inline));
87 inline void vec_dstt (void *, int, const char) __attribute__ ((always_inline));
88 inline vector float vec_sld (vector float, vector float, const char) __attribute__ ((always_inline));
89 inline vector signed int vec_sld (vector signed int, vector signed int, const char) __attribute__ ((always_inline));
90 inline vector unsigned int vec_sld (vector unsigned int, vector unsigned int, const char) __attribute__ ((always_inline));
91 inline vector signed short vec_sld (vector signed short, vector signed short, const char) __attribute__ ((always_inline));
92 inline vector unsigned short vec_sld (vector unsigned short, vector unsigned short, const char) __attribute__ ((always_inline));
93 inline vector signed char vec_sld (vector signed char, vector signed char, const char) __attribute__ ((always_inline));
94 inline vector unsigned char vec_sld (vector unsigned char, vector unsigned char, const char) __attribute__ ((always_inline));
95 inline vector signed char vec_splat (vector signed char, const char) __attribute__ ((always_inline));
96 inline vector unsigned char vec_splat (vector unsigned char, const char) __attribute__ ((always_inline));
97 inline vector signed short vec_splat (vector signed short, const char) __attribute__ ((always_inline));
98 inline vector unsigned short vec_splat (vector unsigned short, const char) __attribute__ ((always_inline));
99 inline vector float vec_splat (vector float, const char) __attribute__ ((always_inline));
100 inline vector signed int vec_splat (vector signed int, const char) __attribute__ ((always_inline));
101 inline vector unsigned int vec_splat (vector unsigned int, const char) __attribute__ ((always_inline));
102 inline vector signed char vec_splat_s8 (const char) __attribute__ ((always_inline));
103 inline vector signed short vec_splat_s16 (const char) __attribute__ ((always_inline));
104 inline vector signed int vec_splat_s32 (const char) __attribute__ ((always_inline));
105 inline vector unsigned char vec_splat_u8 (const char) __attribute__ ((always_inline));
106 inline vector unsigned short vec_splat_u16 (const char) __attribute__ ((always_inline));
107 inline vector unsigned int vec_splat_u32 (const char) __attribute__ ((always_inline));
108
109 /* vec_abs */
110
111 inline vector signed char
112 vec_abs (vector signed char a1)
113 {
114   return __builtin_altivec_abs_v16qi (a1);
115 }
116
117 inline vector signed short
118 vec_abs (vector signed short a1)
119 {
120   return __builtin_altivec_abs_v8hi (a1);
121 }
122
123 inline vector signed int
124 vec_abs (vector signed int a1)
125 {
126   return __builtin_altivec_abs_v4si (a1);
127 }
128
129 inline vector float
130 vec_abs (vector float a1)
131 {
132   return __builtin_altivec_abs_v4sf (a1);
133 }
134
135 /* vec_abss */
136
137 inline vector signed char
138 vec_abss (vector signed char a1)
139 {
140   return __builtin_altivec_abss_v16qi (a1);
141 }
142
143 inline vector signed short
144 vec_abss (vector signed short a1)
145 {
146   return __builtin_altivec_abss_v8hi (a1);
147 }
148
149 inline vector signed int
150 vec_abss (vector signed int a1)
151 {
152   return __builtin_altivec_abss_v4si (a1);
153 }
154
155 /* vec_add */
156
157 inline vector signed char
158 vec_add (vector signed char a1, vector signed char a2)
159 {
160   return (vector signed char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
161 }
162
163 inline vector unsigned char
164 vec_add (vector signed char a1, vector unsigned char a2)
165 {
166   return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
167 }
168
169 inline vector unsigned char
170 vec_add (vector unsigned char a1, vector signed char a2)
171 {
172   return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
173 }
174
175 inline vector unsigned char
176 vec_add (vector unsigned char a1, vector unsigned char a2)
177 {
178   return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
179 }
180
181 inline vector signed short
182 vec_add (vector signed short a1, vector signed short a2)
183 {
184   return (vector signed short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
185 }
186
187 inline vector unsigned short
188 vec_add (vector signed short a1, vector unsigned short a2)
189 {
190   return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
191 }
192
193 inline vector unsigned short
194 vec_add (vector unsigned short a1, vector signed short a2)
195 {
196   return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
197 }
198
199 inline vector unsigned short
200 vec_add (vector unsigned short a1, vector unsigned short a2)
201 {
202   return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
203 }
204
205 inline vector signed int
206 vec_add (vector signed int a1, vector signed int a2)
207 {
208   return (vector signed int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
209 }
210
211 inline vector unsigned int
212 vec_add (vector signed int a1, vector unsigned int a2)
213 {
214   return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
215 }
216
217 inline vector unsigned int
218 vec_add (vector unsigned int a1, vector signed int a2)
219 {
220   return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
221 }
222
223 inline vector unsigned int
224 vec_add (vector unsigned int a1, vector unsigned int a2)
225 {
226   return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
227 }
228
229 inline vector float
230 vec_add (vector float a1, vector float a2)
231 {
232   return (vector float) __builtin_altivec_vaddfp ((vector float) a1, (vector float) a2);
233 }
234
235 /* vec_addc */
236
237 inline vector unsigned int
238 vec_addc (vector unsigned int a1, vector unsigned int a2)
239 {
240   return (vector unsigned int) __builtin_altivec_vaddcuw ((vector signed int) a1, (vector signed int) a2);
241 }
242
243 /* vec_adds */
244
245 inline vector unsigned char
246 vec_adds (vector signed char a1, vector unsigned char a2)
247 {
248   return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
249 }
250
251 inline vector unsigned char
252 vec_adds (vector unsigned char a1, vector signed char a2)
253 {
254   return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
255 }
256
257 inline vector unsigned char
258 vec_adds (vector unsigned char a1, vector unsigned char a2)
259 {
260   return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
261 }
262
263 inline vector signed char
264 vec_adds (vector signed char a1, vector signed char a2)
265 {
266   return (vector signed char) __builtin_altivec_vaddsbs ((vector signed char) a1, (vector signed char) a2);
267 }
268
269 inline vector unsigned short
270 vec_adds (vector signed short a1, vector unsigned short a2)
271 {
272   return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
273 }
274
275 inline vector unsigned short
276 vec_adds (vector unsigned short a1, vector signed short a2)
277 {
278   return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
279 }
280
281 inline vector unsigned short
282 vec_adds (vector unsigned short a1, vector unsigned short a2)
283 {
284   return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
285 }
286
287 inline vector signed short
288 vec_adds (vector signed short a1, vector signed short a2)
289 {
290   return (vector signed short) __builtin_altivec_vaddshs ((vector signed short) a1, (vector signed short) a2);
291 }
292
293 inline vector unsigned int
294 vec_adds (vector signed int a1, vector unsigned int a2)
295 {
296   return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
297 }
298
299 inline vector unsigned int
300 vec_adds (vector unsigned int a1, vector signed int a2)
301 {
302   return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
303 }
304
305 inline vector unsigned int
306 vec_adds (vector unsigned int a1, vector unsigned int a2)
307 {
308   return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
309 }
310
311 inline vector signed int
312 vec_adds (vector signed int a1, vector signed int a2)
313 {
314   return (vector signed int) __builtin_altivec_vaddsws ((vector signed int) a1, (vector signed int) a2);
315 }
316
317 /* vec_and */
318
319 inline vector float
320 vec_and (vector float a1, vector float a2)
321 {
322   return (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
323 }
324
325 inline vector float
326 vec_and (vector float a1, vector signed int a2)
327 {
328   return (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
329 }
330
331 inline vector float
332 vec_and (vector signed int a1, vector float a2)
333 {
334   return (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
335 }
336
337 inline vector signed int
338 vec_and (vector signed int a1, vector signed int a2)
339 {
340   return (vector signed int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
341 }
342
343 inline vector unsigned int
344 vec_and (vector signed int a1, vector unsigned int a2)
345 {
346   return (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
347 }
348
349 inline vector unsigned int
350 vec_and (vector unsigned int a1, vector signed int a2)
351 {
352   return (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
353 }
354
355 inline vector unsigned int
356 vec_and (vector unsigned int a1, vector unsigned int a2)
357 {
358   return (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
359 }
360
361 inline vector signed short
362 vec_and (vector signed short a1, vector signed short a2)
363 {
364   return (vector signed short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
365 }
366
367 inline vector unsigned short
368 vec_and (vector signed short a1, vector unsigned short a2)
369 {
370   return (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
371 }
372
373 inline vector unsigned short
374 vec_and (vector unsigned short a1, vector signed short a2)
375 {
376   return (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
377 }
378
379 inline vector unsigned short
380 vec_and (vector unsigned short a1, vector unsigned short a2)
381 {
382   return (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
383 }
384
385 inline vector signed char
386 vec_and (vector signed char a1, vector signed char a2)
387 {
388   return (vector signed char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
389 }
390
391 inline vector unsigned char
392 vec_and (vector signed char a1, vector unsigned char a2)
393 {
394   return (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
395 }
396
397 inline vector unsigned char
398 vec_and (vector unsigned char a1, vector signed char a2)
399 {
400   return (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
401 }
402
403 inline vector unsigned char
404 vec_and (vector unsigned char a1, vector unsigned char a2)
405 {
406   return (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
407 }
408
409 /* vec_andc */
410
411 inline vector float
412 vec_andc (vector float a1, vector float a2)
413 {
414   return (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
415 }
416
417 inline vector float
418 vec_andc (vector float a1, vector signed int a2)
419 {
420   return (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
421 }
422
423 inline vector float
424 vec_andc (vector signed int a1, vector float a2)
425 {
426   return (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
427 }
428
429 inline vector signed int
430 vec_andc (vector signed int a1, vector signed int a2)
431 {
432   return (vector signed int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
433 }
434
435 inline vector unsigned int
436 vec_andc (vector signed int a1, vector unsigned int a2)
437 {
438   return (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
439 }
440
441 inline vector unsigned int
442 vec_andc (vector unsigned int a1, vector signed int a2)
443 {
444   return (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
445 }
446
447 inline vector unsigned int
448 vec_andc (vector unsigned int a1, vector unsigned int a2)
449 {
450   return (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
451 }
452
453 inline vector signed short
454 vec_andc (vector signed short a1, vector signed short a2)
455 {
456   return (vector signed short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
457 }
458
459 inline vector unsigned short
460 vec_andc (vector signed short a1, vector unsigned short a2)
461 {
462   return (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
463 }
464
465 inline vector unsigned short
466 vec_andc (vector unsigned short a1, vector signed short a2)
467 {
468   return (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
469 }
470
471 inline vector unsigned short
472 vec_andc (vector unsigned short a1, vector unsigned short a2)
473 {
474   return (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
475 }
476
477 inline vector signed char
478 vec_andc (vector signed char a1, vector signed char a2)
479 {
480   return (vector signed char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
481 }
482
483 inline vector unsigned char
484 vec_andc (vector signed char a1, vector unsigned char a2)
485 {
486   return (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
487 }
488
489 inline vector unsigned char
490 vec_andc (vector unsigned char a1, vector signed char a2)
491 {
492   return (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
493 }
494
495 inline vector unsigned char
496 vec_andc (vector unsigned char a1, vector unsigned char a2)
497 {
498   return (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
499 }
500
501 /* vec_avg */
502
503 inline vector unsigned char
504 vec_avg (vector unsigned char a1, vector unsigned char a2)
505 {
506   return (vector unsigned char) __builtin_altivec_vavgub ((vector signed char) a1, (vector signed char) a2);
507 }
508
509 inline vector signed char
510 vec_avg (vector signed char a1, vector signed char a2)
511 {
512   return (vector signed char) __builtin_altivec_vavgsb ((vector signed char) a1, (vector signed char) a2);
513 }
514
515 inline vector unsigned short
516 vec_avg (vector unsigned short a1, vector unsigned short a2)
517 {
518   return (vector unsigned short) __builtin_altivec_vavguh ((vector signed short) a1, (vector signed short) a2);
519 }
520
521 inline vector signed short
522 vec_avg (vector signed short a1, vector signed short a2)
523 {
524   return (vector signed short) __builtin_altivec_vavgsh ((vector signed short) a1, (vector signed short) a2);
525 }
526
527 inline vector unsigned int
528 vec_avg (vector unsigned int a1, vector unsigned int a2)
529 {
530   return (vector unsigned int) __builtin_altivec_vavguw ((vector signed int) a1, (vector signed int) a2);
531 }
532
533 inline vector signed int
534 vec_avg (vector signed int a1, vector signed int a2)
535 {
536   return (vector signed int) __builtin_altivec_vavgsw ((vector signed int) a1, (vector signed int) a2);
537 }
538
539 /* vec_ceil */
540
541 inline vector float
542 vec_ceil (vector float a1)
543 {
544   return (vector float) __builtin_altivec_vrfip ((vector float) a1);
545 }
546
547 /* vec_cmpb */
548
549 inline vector signed int
550 vec_cmpb (vector float a1, vector float a2)
551 {
552   return (vector signed int) __builtin_altivec_vcmpbfp ((vector float) a1, (vector float) a2);
553 }
554
555 /* vec_cmpeq */
556
557 inline vector signed char
558 vec_cmpeq (vector signed char a1, vector signed char a2)
559 {
560   return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
561 }
562
563 inline vector signed char
564 vec_cmpeq (vector unsigned char a1, vector unsigned char a2)
565 {
566   return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
567 }
568
569 inline vector signed short
570 vec_cmpeq (vector signed short a1, vector signed short a2)
571 {
572   return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
573 }
574
575 inline vector signed short
576 vec_cmpeq (vector unsigned short a1, vector unsigned short a2)
577 {
578   return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
579 }
580
581 inline vector signed int
582 vec_cmpeq (vector signed int a1, vector signed int a2)
583 {
584   return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
585 }
586
587 inline vector signed int
588 vec_cmpeq (vector unsigned int a1, vector unsigned int a2)
589 {
590   return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
591 }
592
593 inline vector signed int
594 vec_cmpeq (vector float a1, vector float a2)
595 {
596   return (vector signed int) __builtin_altivec_vcmpeqfp ((vector float) a1, (vector float) a2);
597 }
598
599 /* vec_cmpge */
600
601 inline vector signed int
602 vec_cmpge (vector float a1, vector float a2)
603 {
604   return (vector signed int) __builtin_altivec_vcmpgefp ((vector float) a1, (vector float) a2);
605 }
606
607 /* vec_cmpgt */
608
609 inline vector signed char
610 vec_cmpgt (vector unsigned char a1, vector unsigned char a2)
611 {
612   return (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2);
613 }
614
615 inline vector signed char
616 vec_cmpgt (vector signed char a1, vector signed char a2)
617 {
618   return (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2);
619 }
620
621 inline vector signed short
622 vec_cmpgt (vector unsigned short a1, vector unsigned short a2)
623 {
624   return (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2);
625 }
626
627 inline vector signed short
628 vec_cmpgt (vector signed short a1, vector signed short a2)
629 {
630   return (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2);
631 }
632
633 inline vector signed int
634 vec_cmpgt (vector unsigned int a1, vector unsigned int a2)
635 {
636   return (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2);
637 }
638
639 inline vector signed int
640 vec_cmpgt (vector signed int a1, vector signed int a2)
641 {
642   return (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2);
643 }
644
645 inline vector signed int
646 vec_cmpgt (vector float a1, vector float a2)
647 {
648   return (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2);
649 }
650
651 /* vec_cmple */
652
653 inline vector signed int
654 vec_cmple (vector float a1, vector float a2)
655 {
656   return (vector signed int) __builtin_altivec_vcmpgefp ((vector float) a1, (vector float) a2);
657 }
658
659 /* vec_cmplt */
660
661 inline vector signed char
662 vec_cmplt (vector unsigned char a1, vector unsigned char a2)
663 {
664   return (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2);
665 }
666
667 inline vector signed char
668 vec_cmplt (vector signed char a1, vector signed char a2)
669 {
670   return (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2);
671 }
672
673 inline vector signed short
674 vec_cmplt (vector unsigned short a1, vector unsigned short a2)
675 {
676   return (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2);
677 }
678
679 inline vector signed short
680 vec_cmplt (vector signed short a1, vector signed short a2)
681 {
682   return (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2);
683 }
684
685 inline vector signed int
686 vec_cmplt (vector unsigned int a1, vector unsigned int a2)
687 {
688   return (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2);
689 }
690
691 inline vector signed int
692 vec_cmplt (vector signed int a1, vector signed int a2)
693 {
694   return (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2);
695 }
696
697 inline vector signed int
698 vec_cmplt (vector float a1, vector float a2)
699 {
700   return (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2);
701 }
702
703 /* vec_ctf */
704
705 inline vector float
706 vec_ctf (vector unsigned int a1, const char a2)
707 {
708   return (vector float) __builtin_altivec_vcfux ((vector signed int) a1, a2);
709 }
710
711 inline vector float
712 vec_vcfux (vector unsigned int a1, const char a2)
713 {
714   return (vector float) __builtin_altivec_vcfux ((vector signed int) a1, a2);
715 }
716
717 inline vector float
718 vec_ctf (vector signed int a1, const char a2)
719 {
720   return (vector float) __builtin_altivec_vcfsx ((vector signed int) a1, a2);
721 }
722
723 /* vec_cts */
724
725 inline vector signed int
726 vec_cts (vector float a1, const char a2)
727 {
728   return (vector signed int) __builtin_altivec_vctsxs ((vector float) a1, a2);
729 }
730
731 /* vec_ctu */
732
733 inline vector unsigned int
734 vec_ctu (vector float a1, const char a2)
735 {
736   return (vector unsigned int) __builtin_altivec_vctuxs ((vector float) a1, a2);
737 }
738
739 /* vec_dss */
740
741 inline void
742 vec_dss (const char a1)
743 {
744   __builtin_altivec_dss (a1);
745 }
746
747 /* vec_dssall */
748
749 inline void
750 vec_dssall ()
751 {
752   __builtin_altivec_dssall ();
753 }
754
755 /* vec_dst */
756
757 inline void
758 vec_dst (void *a1, int a2, const char a3)
759 {
760   __builtin_altivec_dst ((void *) a1, a2, a3);
761 }
762
763 /* vec_dstst */
764
765 inline void
766 vec_dstst (void *a1, int a2, const char a3)
767 {
768   __builtin_altivec_dstst ((void *) a1, a2, a3);
769 }
770
771 /* vec_dststt */
772
773 inline void
774 vec_dststt (void *a1, int a2, const char a3)
775 {
776   __builtin_altivec_dststt ((void *) a1, a2, a3);
777 }
778
779 /* vec_dstt */
780
781 inline void
782 vec_dstt (void *a1, int a2, const char a3)
783 {
784   __builtin_altivec_dstt ((void *) a1, a2, a3);
785 }
786
787 /* vec_expte */
788
789 inline vector float
790 vec_expte (vector float a1)
791 {
792   return (vector float) __builtin_altivec_vexptefp ((vector float) a1);
793 }
794
795 /* vec_floor */
796
797 inline vector float
798 vec_floor (vector float a1)
799 {
800   return (vector float) __builtin_altivec_vrfim ((vector float) a1);
801 }
802
803 /* vec_ld */
804
805 inline vector float
806 vec_ld (int a1, vector float *a2)
807 {
808   return (vector float) __builtin_altivec_lvx (a1, (void *) a2);
809 }
810
811 inline vector float
812 vec_ld (int a1, float *a2)
813 {
814   return (vector float) __builtin_altivec_lvx (a1, (void *) a2);
815 }
816
817 inline vector signed int
818 vec_ld (int a1, vector signed int *a2)
819 {
820   return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2);
821 }
822
823 inline vector signed int
824 vec_ld (int a1, signed int *a2)
825 {
826   return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2);
827 }
828
829 inline vector unsigned int
830 vec_ld (int a1, vector unsigned int *a2)
831 {
832   return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2);
833 }
834
835 inline vector unsigned int
836 vec_ld (int a1, unsigned int *a2)
837 {
838   return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2);
839 }
840
841 inline vector signed short
842 vec_ld (int a1, vector signed short *a2)
843 {
844   return (vector signed short) __builtin_altivec_lvx (a1, (void *) a2);
845 }
846
847 inline vector signed short
848 vec_ld (int a1, signed short *a2)
849 {
850   return (vector signed short) __builtin_altivec_lvx (a1, (void *) a2);
851 }
852
853 inline vector unsigned short
854 vec_ld (int a1, vector unsigned short *a2)
855 {
856   return (vector unsigned short) __builtin_altivec_lvx (a1, (void *) a2);
857 }
858
859 inline vector unsigned short
860 vec_ld (int a1, unsigned short *a2)
861 {
862   return (vector unsigned short) __builtin_altivec_lvx (a1, (void *) a2);
863 }
864
865 inline vector signed char
866 vec_ld (int a1, vector signed char *a2)
867 {
868   return (vector signed char) __builtin_altivec_lvx (a1, (void *) a2);
869 }
870
871 inline vector signed char
872 vec_ld (int a1, signed char *a2)
873 {
874   return (vector signed char) __builtin_altivec_lvx (a1, (void *) a2);
875 }
876
877 inline vector unsigned char
878 vec_ld (int a1, vector unsigned char *a2)
879 {
880   return (vector unsigned char) __builtin_altivec_lvx (a1, (void *) a2);
881 }
882
883 inline vector unsigned char
884 vec_ld (int a1, unsigned char *a2)
885 {
886   return (vector unsigned char) __builtin_altivec_lvx (a1, (void *) a2);
887 }
888
889 /* vec_lde */
890
891 inline vector signed char
892 vec_lde (int a1, signed char *a2)
893 {
894   return (vector signed char) __builtin_altivec_lvebx (a1, (void *) a2);
895 }
896
897 inline vector unsigned char
898 vec_lde (int a1, unsigned char *a2)
899 {
900   return (vector unsigned char) __builtin_altivec_lvebx (a1, (void *) a2);
901 }
902
903 inline vector signed short
904 vec_lde (int a1, signed short *a2)
905 {
906   return (vector signed short) __builtin_altivec_lvehx (a1, (void *) a2);
907 }
908
909 inline vector unsigned short
910 vec_lde (int a1, unsigned short *a2)
911 {
912   return (vector unsigned short) __builtin_altivec_lvehx (a1, (void *) a2);
913 }
914
915 inline vector float
916 vec_lde (int a1, float *a2)
917 {
918   return (vector float) __builtin_altivec_lvewx (a1, (void *) a2);
919 }
920
921 inline vector signed int
922 vec_lde (int a1, signed int *a2)
923 {
924   return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2);
925 }
926
927 inline vector unsigned int
928 vec_lde (int a1, unsigned int *a2)
929 {
930   return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2);
931 }
932
933 /* vec_ldl */
934
935 inline vector float
936 vec_ldl (int a1, vector float *a2)
937 {
938   return (vector float) __builtin_altivec_lvxl (a1, (void *) a2);
939 }
940
941 inline vector float
942 vec_ldl (int a1, float *a2)
943 {
944   return (vector float) __builtin_altivec_lvxl (a1, (void *) a2);
945 }
946
947 inline vector signed int
948 vec_ldl (int a1, vector signed int *a2)
949 {
950   return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2);
951 }
952
953 inline vector signed int
954 vec_ldl (int a1, signed int *a2)
955 {
956   return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2);
957 }
958
959 inline vector unsigned int
960 vec_ldl (int a1, vector unsigned int *a2)
961 {
962   return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2);
963 }
964
965 inline vector unsigned int
966 vec_ldl (int a1, unsigned int *a2)
967 {
968   return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2);
969 }
970
971 inline vector signed short
972 vec_ldl (int a1, vector signed short *a2)
973 {
974   return (vector signed short) __builtin_altivec_lvxl (a1, (void *) a2);
975 }
976
977 inline vector signed short
978 vec_ldl (int a1, signed short *a2)
979 {
980   return (vector signed short) __builtin_altivec_lvxl (a1, (void *) a2);
981 }
982
983 inline vector unsigned short
984 vec_ldl (int a1, vector unsigned short *a2)
985 {
986   return (vector unsigned short) __builtin_altivec_lvxl (a1, (void *) a2);
987 }
988
989 inline vector unsigned short
990 vec_ldl (int a1, unsigned short *a2)
991 {
992   return (vector unsigned short) __builtin_altivec_lvxl (a1, (void *) a2);
993 }
994
995 inline vector signed char
996 vec_ldl (int a1, vector signed char *a2)
997 {
998   return (vector signed char) __builtin_altivec_lvxl (a1, (void *) a2);
999 }
1000
1001 inline vector signed char
1002 vec_ldl (int a1, signed char *a2)
1003 {
1004   return (vector signed char) __builtin_altivec_lvxl (a1, (void *) a2);
1005 }
1006
1007 inline vector unsigned char
1008 vec_ldl (int a1, vector unsigned char *a2)
1009 {
1010   return (vector unsigned char) __builtin_altivec_lvxl (a1, (void *) a2);
1011 }
1012
1013 inline vector unsigned char
1014 vec_ldl (int a1, unsigned char *a2)
1015 {
1016   return (vector unsigned char) __builtin_altivec_lvxl (a1, (void *) a2);
1017 }
1018
1019 /* vec_loge */
1020
1021 inline vector float
1022 vec_loge (vector float a1)
1023 {
1024   return (vector float) __builtin_altivec_vlogefp ((vector float) a1);
1025 }
1026
1027 /* vec_lvsl */
1028
1029 inline vector unsigned char
1030 vec_lvsl (int a1, unsigned char *a2)
1031 {
1032   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1033 }
1034
1035 inline vector unsigned char
1036 vec_lvsl (int a1, signed char *a2)
1037 {
1038   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1039 }
1040
1041 inline vector unsigned char
1042 vec_lvsl (int a1, unsigned short *a2)
1043 {
1044   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1045 }
1046
1047 inline vector unsigned char
1048 vec_lvsl (int a1, signed short *a2)
1049 {
1050   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1051 }
1052
1053 inline vector unsigned char
1054 vec_lvsl (int a1, unsigned int *a2)
1055 {
1056   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1057 }
1058
1059 inline vector unsigned char
1060 vec_lvsl (int a1, signed int *a2)
1061 {
1062   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1063 }
1064
1065 inline vector unsigned char
1066 vec_lvsl (int a1, float *a2)
1067 {
1068   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
1069 }
1070
1071 /* vec_lvsr */
1072
1073 inline vector unsigned char
1074 vec_lvsr (int a1, unsigned char *a2)
1075 {
1076   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
1077 }
1078
1079 inline vector unsigned char
1080 vec_lvsr (int a1, signed char *a2)
1081 {
1082   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
1083 }
1084
1085 inline vector unsigned char
1086 vec_lvsr (int a1, unsigned short *a2)
1087 {
1088   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
1089 }
1090
1091 inline vector unsigned char
1092 vec_lvsr (int a1, signed short *a2)
1093 {
1094   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
1095 }
1096
1097 inline vector unsigned char
1098 vec_lvsr (int a1, unsigned int *a2)
1099 {
1100   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
1101 }
1102
1103 inline vector unsigned char
1104 vec_lvsr (int a1, signed int *a2)
1105 {
1106   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
1107 }
1108
1109 inline vector unsigned char
1110 vec_lvsr (int a1, float *a2)
1111 {
1112   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
1113 }
1114
1115 /* vec_madd */
1116
1117 inline vector float
1118 vec_madd (vector float a1, vector float a2, vector float a3)
1119 {
1120   return (vector float) __builtin_altivec_vmaddfp ((vector float) a1, (vector float) a2, (vector float) a3);
1121 }
1122
1123
1124 inline vector float
1125 vec_vmaddfp (vector float a1, vector float a2, vector float a3)
1126 {
1127   return (vector float) __builtin_altivec_vmaddfp ((vector float) a1, (vector float) a2, (vector float) a3);
1128 }
1129
1130 /* vec_madds */
1131
1132 inline vector signed short
1133 vec_madds (vector signed short a1, vector signed short a2, vector signed short a3)
1134 {
1135   return (vector signed short) __builtin_altivec_vmhaddshs ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
1136 }
1137
1138 /* vec_max */
1139
1140 inline vector unsigned char
1141 vec_max (vector signed char a1, vector unsigned char a2)
1142 {
1143   return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
1144 }
1145
1146 inline vector unsigned char
1147 vec_max (vector unsigned char a1, vector signed char a2)
1148 {
1149   return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
1150 }
1151
1152 inline vector unsigned char
1153 vec_max (vector unsigned char a1, vector unsigned char a2)
1154 {
1155   return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
1156 }
1157
1158 inline vector signed char
1159 vec_max (vector signed char a1, vector signed char a2)
1160 {
1161   return (vector signed char) __builtin_altivec_vmaxsb ((vector signed char) a1, (vector signed char) a2);
1162 }
1163
1164 inline vector unsigned short
1165 vec_max (vector signed short a1, vector unsigned short a2)
1166 {
1167   return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
1168 }
1169
1170 inline vector unsigned short
1171 vec_max (vector unsigned short a1, vector signed short a2)
1172 {
1173   return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
1174 }
1175
1176 inline vector unsigned short
1177 vec_max (vector unsigned short a1, vector unsigned short a2)
1178 {
1179   return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
1180 }
1181
1182 inline vector signed short
1183 vec_max (vector signed short a1, vector signed short a2)
1184 {
1185   return (vector signed short) __builtin_altivec_vmaxsh ((vector signed short) a1, (vector signed short) a2);
1186 }
1187
1188 inline vector unsigned int
1189 vec_max (vector signed int a1, vector unsigned int a2)
1190 {
1191   return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
1192 }
1193
1194 inline vector unsigned int
1195 vec_max (vector unsigned int a1, vector signed int a2)
1196 {
1197   return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
1198 }
1199
1200 inline vector unsigned int
1201 vec_max (vector unsigned int a1, vector unsigned int a2)
1202 {
1203   return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
1204 }
1205
1206 inline vector signed int
1207 vec_max (vector signed int a1, vector signed int a2)
1208 {
1209   return (vector signed int) __builtin_altivec_vmaxsw ((vector signed int) a1, (vector signed int) a2);
1210 }
1211
1212 inline vector float
1213 vec_max (vector float a1, vector float a2)
1214 {
1215   return (vector float) __builtin_altivec_vmaxfp ((vector float) a1, (vector float) a2);
1216 }
1217
1218 /* vec_mergeh */
1219
1220 inline vector signed char
1221 vec_mergeh (vector signed char a1, vector signed char a2)
1222 {
1223   return (vector signed char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2);
1224 }
1225
1226 inline vector unsigned char
1227 vec_mergeh (vector unsigned char a1, vector unsigned char a2)
1228 {
1229   return (vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2);
1230 }
1231
1232 inline vector signed short
1233 vec_mergeh (vector signed short a1, vector signed short a2)
1234 {
1235   return (vector signed short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2);
1236 }
1237
1238 inline vector unsigned short
1239 vec_mergeh (vector unsigned short a1, vector unsigned short a2)
1240 {
1241   return (vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2);
1242 }
1243
1244 inline vector float
1245 vec_mergeh (vector float a1, vector float a2)
1246 {
1247   return (vector float) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
1248 }
1249
1250 inline vector signed int
1251 vec_mergeh (vector signed int a1, vector signed int a2)
1252 {
1253   return (vector signed int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
1254 }
1255
1256 inline vector unsigned int
1257 vec_mergeh (vector unsigned int a1, vector unsigned int a2)
1258 {
1259   return (vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
1260 }
1261
1262 /* vec_mergel */
1263
1264 inline vector signed char
1265 vec_mergel (vector signed char a1, vector signed char a2)
1266 {
1267   return (vector signed char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2);
1268 }
1269
1270 inline vector unsigned char
1271 vec_mergel (vector unsigned char a1, vector unsigned char a2)
1272 {
1273   return (vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2);
1274 }
1275
1276 inline vector signed short
1277 vec_mergel (vector signed short a1, vector signed short a2)
1278 {
1279   return (vector signed short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2);
1280 }
1281
1282 inline vector unsigned short
1283 vec_mergel (vector unsigned short a1, vector unsigned short a2)
1284 {
1285   return (vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2);
1286 }
1287
1288 inline vector float
1289 vec_mergel (vector float a1, vector float a2)
1290 {
1291   return (vector float) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
1292 }
1293
1294 inline vector signed int
1295 vec_mergel (vector signed int a1, vector signed int a2)
1296 {
1297   return (vector signed int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
1298 }
1299
1300 inline vector unsigned int
1301 vec_mergel (vector unsigned int a1, vector unsigned int a2)
1302 {
1303   return (vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
1304 }
1305
1306 /* vec_mfvscr */
1307
1308 inline vector unsigned short
1309 vec_mfvscr ()
1310 {
1311   return (vector unsigned short) __builtin_altivec_mfvscr ();
1312 }
1313
1314 /* vec_min */
1315
1316 inline vector unsigned char
1317 vec_min (vector signed char a1, vector unsigned char a2)
1318 {
1319   return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
1320 }
1321
1322 inline vector unsigned char
1323 vec_min (vector unsigned char a1, vector signed char a2)
1324 {
1325   return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
1326 }
1327
1328 inline vector unsigned char
1329 vec_min (vector unsigned char a1, vector unsigned char a2)
1330 {
1331   return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
1332 }
1333
1334 inline vector signed char
1335 vec_min (vector signed char a1, vector signed char a2)
1336 {
1337   return (vector signed char) __builtin_altivec_vminsb ((vector signed char) a1, (vector signed char) a2);
1338 }
1339
1340 inline vector unsigned short
1341 vec_min (vector signed short a1, vector unsigned short a2)
1342 {
1343   return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
1344 }
1345
1346 inline vector unsigned short
1347 vec_min (vector unsigned short a1, vector signed short a2)
1348 {
1349   return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
1350 }
1351
1352 inline vector unsigned short
1353 vec_min (vector unsigned short a1, vector unsigned short a2)
1354 {
1355   return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
1356 }
1357
1358 inline vector signed short
1359 vec_min (vector signed short a1, vector signed short a2)
1360 {
1361   return (vector signed short) __builtin_altivec_vminsh ((vector signed short) a1, (vector signed short) a2);
1362 }
1363
1364 inline vector unsigned int
1365 vec_min (vector signed int a1, vector unsigned int a2)
1366 {
1367   return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
1368 }
1369
1370 inline vector unsigned int
1371 vec_min (vector unsigned int a1, vector signed int a2)
1372 {
1373   return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
1374 }
1375
1376 inline vector unsigned int
1377 vec_min (vector unsigned int a1, vector unsigned int a2)
1378 {
1379   return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
1380 }
1381
1382 inline vector signed int
1383 vec_min (vector signed int a1, vector signed int a2)
1384 {
1385   return (vector signed int) __builtin_altivec_vminsw ((vector signed int) a1, (vector signed int) a2);
1386 }
1387
1388 inline vector float
1389 vec_min (vector float a1, vector float a2)
1390 {
1391   return (vector float) __builtin_altivec_vminfp ((vector float) a1, (vector float) a2);
1392 }
1393
1394 /* vec_mladd */
1395
1396 inline vector signed short
1397 vec_mladd (vector signed short a1, vector signed short a2, vector signed short a3)
1398 {
1399   return (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
1400 }
1401
1402 inline vector signed short
1403 vec_mladd (vector signed short a1, vector unsigned short a2, vector unsigned short a3)
1404 {
1405   return (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
1406 }
1407
1408 inline vector signed short
1409 vec_mladd (vector unsigned short a1, vector signed short a2, vector signed short a3)
1410 {
1411   return (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
1412 }
1413
1414 inline vector unsigned short
1415 vec_mladd (vector unsigned short a1, vector unsigned short a2, vector unsigned short a3)
1416 {
1417   return (vector unsigned short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
1418 }
1419
1420 /* vec_mradds */
1421
1422 inline vector signed short
1423 vec_mradds (vector signed short a1, vector signed short a2, vector signed short a3)
1424 {
1425   return (vector signed short) __builtin_altivec_vmhraddshs ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
1426 }
1427
1428 /* vec_msum */
1429
1430 inline vector unsigned int
1431 vec_msum (vector unsigned char a1, vector unsigned char a2, vector unsigned int a3)
1432 {
1433   return (vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3);
1434 }
1435
1436 inline vector signed int
1437 vec_msum (vector signed char a1, vector unsigned char a2, vector signed int a3)
1438 {
1439   return (vector signed int) __builtin_altivec_vmsummbm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3);
1440 }
1441
1442 inline vector unsigned int
1443 vec_msum (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3)
1444 {
1445   return (vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
1446 }
1447
1448 inline vector signed int
1449 vec_msum (vector signed short a1, vector signed short a2, vector signed int a3)
1450 {
1451   return (vector signed int) __builtin_altivec_vmsumshm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
1452 }
1453
1454 /* vec_msums */
1455
1456 inline vector unsigned int
1457 vec_msums (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3)
1458 {
1459   return (vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
1460 }
1461
1462 inline vector signed int
1463 vec_msums (vector signed short a1, vector signed short a2, vector signed int a3)
1464 {
1465   return (vector signed int) __builtin_altivec_vmsumshs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
1466 }
1467
1468 /* vec_mtvscr */
1469
1470 inline void
1471 vec_mtvscr (vector signed int a1)
1472 {
1473   __builtin_altivec_mtvscr ((vector signed int) a1);
1474 }
1475
1476 inline void
1477 vec_mtvscr (vector unsigned int a1)
1478 {
1479   __builtin_altivec_mtvscr ((vector signed int) a1);
1480 }
1481
1482 inline void
1483 vec_mtvscr (vector signed short a1)
1484 {
1485   __builtin_altivec_mtvscr ((vector signed int) a1);
1486 }
1487
1488 inline void
1489 vec_mtvscr (vector unsigned short a1)
1490 {
1491   __builtin_altivec_mtvscr ((vector signed int) a1);
1492 }
1493
1494 inline void
1495 vec_mtvscr (vector signed char a1)
1496 {
1497   __builtin_altivec_mtvscr ((vector signed int) a1);
1498 }
1499
1500 inline void
1501 vec_mtvscr (vector unsigned char a1)
1502 {
1503   __builtin_altivec_mtvscr ((vector signed int) a1);
1504 }
1505
1506 /* vec_mule */
1507
1508 inline vector unsigned short
1509 vec_mule (vector unsigned char a1, vector unsigned char a2)
1510 {
1511   return (vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) a1, (vector signed char) a2);
1512 }
1513
1514 inline vector signed short
1515 vec_mule (vector signed char a1, vector signed char a2)
1516 {
1517   return (vector signed short) __builtin_altivec_vmulesb ((vector signed char) a1, (vector signed char) a2);
1518 }
1519
1520 inline vector unsigned int
1521 vec_mule (vector unsigned short a1, vector unsigned short a2)
1522 {
1523   return (vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) a1, (vector signed short) a2);
1524 }
1525
1526 inline vector signed int
1527 vec_mule (vector signed short a1, vector signed short a2)
1528 {
1529   return (vector signed int) __builtin_altivec_vmulesh ((vector signed short) a1, (vector signed short) a2);
1530 }
1531
1532 /* vec_mulo */
1533
1534 inline vector unsigned short
1535 vec_mulo (vector unsigned char a1, vector unsigned char a2)
1536 {
1537   return (vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) a1, (vector signed char) a2);
1538 }
1539
1540 inline vector signed short
1541 vec_mulo (vector signed char a1, vector signed char a2)
1542 {
1543   return (vector signed short) __builtin_altivec_vmulosb ((vector signed char) a1, (vector signed char) a2);
1544 }
1545
1546 inline vector unsigned int
1547 vec_mulo (vector unsigned short a1, vector unsigned short a2)
1548 {
1549   return (vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) a1, (vector signed short) a2);
1550 }
1551
1552 inline vector signed int
1553 vec_mulo (vector signed short a1, vector signed short a2)
1554 {
1555   return (vector signed int) __builtin_altivec_vmulosh ((vector signed short) a1, (vector signed short) a2);
1556 }
1557
1558 /* vec_nmsub */
1559
1560 inline vector float
1561 vec_nmsub (vector float a1, vector float a2, vector float a3)
1562 {
1563   return (vector float) __builtin_altivec_vnmsubfp ((vector float) a1, (vector float) a2, (vector float) a3);
1564 }
1565
1566 /* vec_nor */
1567
1568 inline vector float
1569 vec_nor (vector float a1, vector float a2)
1570 {
1571   return (vector float) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
1572 }
1573
1574 inline vector signed int
1575 vec_nor (vector signed int a1, vector signed int a2)
1576 {
1577   return (vector signed int) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
1578 }
1579
1580 inline vector unsigned int
1581 vec_nor (vector unsigned int a1, vector unsigned int a2)
1582 {
1583   return (vector unsigned int) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
1584 }
1585
1586 inline vector signed short
1587 vec_nor (vector signed short a1, vector signed short a2)
1588 {
1589   return (vector signed short) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
1590 }
1591
1592 inline vector unsigned short
1593 vec_nor (vector unsigned short a1, vector unsigned short a2)
1594 {
1595   return (vector unsigned short) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
1596 }
1597
1598 inline vector signed char
1599 vec_nor (vector signed char a1, vector signed char a2)
1600 {
1601   return (vector signed char) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
1602 }
1603
1604 inline vector unsigned char
1605 vec_nor (vector unsigned char a1, vector unsigned char a2)
1606 {
1607   return (vector unsigned char) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
1608 }
1609
1610 /* vec_or */
1611
1612 inline vector float
1613 vec_or (vector float a1, vector float a2)
1614 {
1615   return (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1616 }
1617
1618 inline vector float
1619 vec_or (vector float a1, vector signed int a2)
1620 {
1621   return (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1622 }
1623
1624 inline vector float
1625 vec_or (vector signed int a1, vector float a2)
1626 {
1627   return (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1628 }
1629
1630 inline vector signed int
1631 vec_or (vector signed int a1, vector signed int a2)
1632 {
1633   return (vector signed int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1634 }
1635
1636 inline vector unsigned int
1637 vec_or (vector signed int a1, vector unsigned int a2)
1638 {
1639   return (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1640 }
1641
1642 inline vector unsigned int
1643 vec_or (vector unsigned int a1, vector signed int a2)
1644 {
1645   return (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1646 }
1647
1648 inline vector unsigned int
1649 vec_or (vector unsigned int a1, vector unsigned int a2)
1650 {
1651   return (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1652 }
1653
1654 inline vector signed short
1655 vec_or (vector signed short a1, vector signed short a2)
1656 {
1657   return (vector signed short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1658 }
1659
1660 inline vector unsigned short
1661 vec_or (vector signed short a1, vector unsigned short a2)
1662 {
1663   return (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1664 }
1665
1666 inline vector unsigned short
1667 vec_or (vector unsigned short a1, vector signed short a2)
1668 {
1669   return (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1670 }
1671
1672 inline vector unsigned short
1673 vec_or (vector unsigned short a1, vector unsigned short a2)
1674 {
1675   return (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1676 }
1677
1678 inline vector signed char
1679 vec_or (vector signed char a1, vector signed char a2)
1680 {
1681   return (vector signed char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1682 }
1683
1684 inline vector unsigned char
1685 vec_or (vector signed char a1, vector unsigned char a2)
1686 {
1687   return (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1688 }
1689
1690 inline vector unsigned char
1691 vec_or (vector unsigned char a1, vector signed char a2)
1692 {
1693   return (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1694 }
1695
1696 inline vector unsigned char
1697 vec_or (vector unsigned char a1, vector unsigned char a2)
1698 {
1699   return (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
1700 }
1701
1702 /* vec_pack */
1703
1704 inline vector signed char
1705 vec_pack (vector signed short a1, vector signed short a2)
1706 {
1707   return (vector signed char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2);
1708 }
1709
1710 inline vector unsigned char
1711 vec_pack (vector unsigned short a1, vector unsigned short a2)
1712 {
1713   return (vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2);
1714 }
1715
1716 inline vector signed short
1717 vec_pack (vector signed int a1, vector signed int a2)
1718 {
1719   return (vector signed short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2);
1720 }
1721
1722 inline vector unsigned short
1723 vec_pack (vector unsigned int a1, vector unsigned int a2)
1724 {
1725   return (vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2);
1726 }
1727
1728 /* vec_packpx */
1729
1730 inline vector signed short
1731 vec_packpx (vector unsigned int a1, vector unsigned int a2)
1732 {
1733   return (vector signed short) __builtin_altivec_vpkpx ((vector signed int) a1, (vector signed int) a2);
1734 }
1735
1736 /* vec_packs */
1737
1738 inline vector unsigned char
1739 vec_packs (vector unsigned short a1, vector unsigned short a2)
1740 {
1741   return (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2);
1742 }
1743
1744 inline vector signed char
1745 vec_packs (vector signed short a1, vector signed short a2)
1746 {
1747   return (vector signed char) __builtin_altivec_vpkshss ((vector signed short) a1, (vector signed short) a2);
1748 }
1749
1750 inline vector unsigned short
1751 vec_packs (vector unsigned int a1, vector unsigned int a2)
1752 {
1753   return (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2);
1754 }
1755
1756 inline vector signed short
1757 vec_packs (vector signed int a1, vector signed int a2)
1758 {
1759   return (vector signed short) __builtin_altivec_vpkswss ((vector signed int) a1, (vector signed int) a2);
1760 }
1761
1762 /* vec_packsu */
1763
1764 inline vector unsigned char
1765 vec_packsu (vector unsigned short a1, vector unsigned short a2)
1766 {
1767   return (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2);
1768 }
1769
1770 inline vector unsigned char
1771 vec_packsu (vector signed short a1, vector signed short a2)
1772 {
1773   return (vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) a1, (vector signed short) a2);
1774 }
1775
1776 inline vector unsigned short
1777 vec_packsu (vector unsigned int a1, vector unsigned int a2)
1778 {
1779   return (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2);
1780 }
1781
1782 inline vector unsigned short
1783 vec_packsu (vector signed int a1, vector signed int a2)
1784 {
1785   return (vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) a1, (vector signed int) a2);
1786 }
1787
1788 /* vec_perm */
1789
1790 inline vector float
1791 vec_perm (vector float a1, vector float a2, vector unsigned char a3)
1792 {
1793   return (vector float) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
1794 }
1795
1796 inline vector signed int
1797 vec_perm (vector signed int a1, vector signed int a2, vector unsigned char a3)
1798 {
1799   return (vector signed int) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
1800 }
1801
1802 inline vector unsigned int
1803 vec_perm (vector unsigned int a1, vector unsigned int a2, vector unsigned char a3)
1804 {
1805   return (vector unsigned int) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
1806 }
1807
1808 inline vector signed short
1809 vec_perm (vector signed short a1, vector signed short a2, vector unsigned char a3)
1810 {
1811   return (vector signed short) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
1812 }
1813
1814 inline vector unsigned short
1815 vec_perm (vector unsigned short a1, vector unsigned short a2, vector unsigned char a3)
1816 {
1817   return (vector unsigned short) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
1818 }
1819
1820 inline vector signed char
1821 vec_perm (vector signed char a1, vector signed char a2, vector unsigned char a3)
1822 {
1823   return (vector signed char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
1824 }
1825
1826 inline vector unsigned char
1827 vec_perm (vector unsigned char a1, vector unsigned char a2, vector unsigned char a3)
1828 {
1829   return (vector unsigned char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
1830 }
1831
1832 /* vec_re */
1833
1834 inline vector float
1835 vec_re (vector float a1)
1836 {
1837   return (vector float) __builtin_altivec_vrefp ((vector float) a1);
1838 }
1839
1840 /* vec_rl */
1841
1842 inline vector signed char
1843 vec_rl (vector signed char a1, vector unsigned char a2)
1844 {
1845   return (vector signed char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2);
1846 }
1847
1848 inline vector unsigned char
1849 vec_rl (vector unsigned char a1, vector unsigned char a2)
1850 {
1851   return (vector unsigned char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2);
1852 }
1853
1854 inline vector signed short
1855 vec_rl (vector signed short a1, vector unsigned short a2)
1856 {
1857   return (vector signed short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2);
1858 }
1859
1860 inline vector unsigned short
1861 vec_rl (vector unsigned short a1, vector unsigned short a2)
1862 {
1863   return (vector unsigned short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2);
1864 }
1865
1866 inline vector signed int
1867 vec_rl (vector signed int a1, vector unsigned int a2)
1868 {
1869   return (vector signed int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2);
1870 }
1871
1872 inline vector unsigned int
1873 vec_rl (vector unsigned int a1, vector unsigned int a2)
1874 {
1875   return (vector unsigned int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2);
1876 }
1877
1878 /* vec_round */
1879
1880 inline vector float
1881 vec_round (vector float a1)
1882 {
1883   return (vector float) __builtin_altivec_vrfin ((vector float) a1);
1884 }
1885
1886 /* vec_rsqrte */
1887
1888 inline vector float
1889 vec_rsqrte (vector float a1)
1890 {
1891   return (vector float) __builtin_altivec_vrsqrtefp ((vector float) a1);
1892 }
1893
1894 /* vec_sel */
1895
1896 inline vector float
1897 vec_sel (vector float a1, vector float a2, vector signed int a3)
1898 {
1899   return (vector float) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1900 }
1901
1902 inline vector float
1903 vec_sel (vector float a1, vector float a2, vector unsigned int a3)
1904 {
1905   return (vector float) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1906 }
1907
1908 inline vector signed int
1909 vec_sel (vector signed int a1, vector signed int a2, vector signed int a3)
1910 {
1911   return (vector signed int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1912 }
1913
1914 inline vector signed int
1915 vec_sel (vector signed int a1, vector signed int a2, vector unsigned int a3)
1916 {
1917   return (vector signed int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1918 }
1919
1920 inline vector unsigned int
1921 vec_sel (vector unsigned int a1, vector unsigned int a2, vector signed int a3)
1922 {
1923   return (vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1924 }
1925
1926 inline vector unsigned int
1927 vec_sel (vector unsigned int a1, vector unsigned int a2, vector unsigned int a3)
1928 {
1929   return (vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1930 }
1931
1932 inline vector signed short
1933 vec_sel (vector signed short a1, vector signed short a2, vector signed short a3)
1934 {
1935   return (vector signed short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1936 }
1937
1938 inline vector signed short
1939 vec_sel (vector signed short a1, vector signed short a2, vector unsigned short a3)
1940 {
1941   return (vector signed short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1942 }
1943
1944 inline vector unsigned short
1945 vec_sel (vector unsigned short a1, vector unsigned short a2, vector signed short a3)
1946 {
1947   return (vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1948 }
1949
1950 inline vector unsigned short
1951 vec_sel (vector unsigned short a1, vector unsigned short a2, vector unsigned short a3)
1952 {
1953   return (vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1954 }
1955
1956 inline vector signed char
1957 vec_sel (vector signed char a1, vector signed char a2, vector signed char a3)
1958 {
1959   return (vector signed char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1960 }
1961
1962 inline vector signed char
1963 vec_sel (vector signed char a1, vector signed char a2, vector unsigned char a3)
1964 {
1965   return (vector signed char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1966 }
1967
1968 inline vector unsigned char
1969 vec_sel (vector unsigned char a1, vector unsigned char a2, vector signed char a3)
1970 {
1971   return (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1972 }
1973
1974 inline vector unsigned char
1975 vec_sel (vector unsigned char a1, vector unsigned char a2, vector unsigned char a3)
1976 {
1977   return (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
1978 }
1979
1980 /* vec_sl */
1981
1982 inline vector signed char
1983 vec_sl (vector signed char a1, vector unsigned char a2)
1984 {
1985   return (vector signed char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2);
1986 }
1987
1988 inline vector unsigned char
1989 vec_sl (vector unsigned char a1, vector unsigned char a2)
1990 {
1991   return (vector unsigned char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2);
1992 }
1993
1994 inline vector signed short
1995 vec_sl (vector signed short a1, vector unsigned short a2)
1996 {
1997   return (vector signed short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2);
1998 }
1999
2000 inline vector unsigned short
2001 vec_sl (vector unsigned short a1, vector unsigned short a2)
2002 {
2003   return (vector unsigned short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2);
2004 }
2005
2006 inline vector signed int
2007 vec_sl (vector signed int a1, vector unsigned int a2)
2008 {
2009   return (vector signed int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2);
2010 }
2011
2012 inline vector unsigned int
2013 vec_sl (vector unsigned int a1, vector unsigned int a2)
2014 {
2015   return (vector unsigned int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2);
2016 }
2017
2018 /* vec_sld */
2019
2020 inline vector float
2021 vec_sld (vector float a1, vector float a2, const char a3)
2022 {
2023   return (vector float) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
2024 }
2025
2026 inline vector float
2027 vec_vsldoi (vector float a1, vector float a2, const char a3)
2028 {
2029   return (vector float) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
2030 }
2031
2032 inline vector signed int
2033 vec_sld (vector signed int a1, vector signed int a2, const char a3)
2034 {
2035   return (vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
2036 }
2037
2038 inline vector unsigned int
2039 vec_sld (vector unsigned int a1, vector unsigned int a2, const char a3)
2040 {
2041   return (vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
2042 }
2043
2044 inline vector signed short
2045 vec_sld (vector signed short a1, vector signed short a2, const char a3)
2046 {
2047   return (vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
2048 }
2049
2050 inline vector unsigned short
2051 vec_sld (vector unsigned short a1, vector unsigned short a2, const char a3)
2052 {
2053   return (vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
2054 }
2055
2056 inline vector signed char
2057 vec_sld (vector signed char a1, vector signed char a2, const char a3)
2058 {
2059   return (vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
2060 }
2061
2062 inline vector unsigned char
2063 vec_sld (vector unsigned char a1, vector unsigned char a2, const char a3)
2064 {
2065   return (vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
2066 }
2067
2068 /* vec_sll */
2069
2070 inline vector signed int
2071 vec_sll (vector signed int a1, vector unsigned int a2)
2072 {
2073   return (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2074 }
2075
2076 inline vector signed int
2077 vec_sll (vector signed int a1, vector unsigned short a2)
2078 {
2079   return (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2080 }
2081
2082 inline vector signed int
2083 vec_sll (vector signed int a1, vector unsigned char a2)
2084 {
2085   return (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2086 }
2087
2088 inline vector unsigned int
2089 vec_sll (vector unsigned int a1, vector unsigned int a2)
2090 {
2091   return (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2092 }
2093
2094 inline vector unsigned int
2095 vec_sll (vector unsigned int a1, vector unsigned short a2)
2096 {
2097   return (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2098 }
2099
2100 inline vector unsigned int
2101 vec_sll (vector unsigned int a1, vector unsigned char a2)
2102 {
2103   return (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2104 }
2105
2106 inline vector signed short
2107 vec_sll (vector signed short a1, vector unsigned int a2)
2108 {
2109   return (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2110 }
2111
2112 inline vector signed short
2113 vec_sll (vector signed short a1, vector unsigned short a2)
2114 {
2115   return (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2116 }
2117
2118 inline vector signed short
2119 vec_sll (vector signed short a1, vector unsigned char a2)
2120 {
2121   return (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2122 }
2123
2124 inline vector unsigned short
2125 vec_sll (vector unsigned short a1, vector unsigned int a2)
2126 {
2127   return (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2128 }
2129
2130 inline vector unsigned short
2131 vec_sll (vector unsigned short a1, vector unsigned short a2)
2132 {
2133   return (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2134 }
2135
2136 inline vector unsigned short
2137 vec_sll (vector unsigned short a1, vector unsigned char a2)
2138 {
2139   return (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2140 }
2141
2142 inline vector signed char
2143 vec_sll (vector signed char a1, vector unsigned int a2)
2144 {
2145   return (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2146 }
2147
2148 inline vector signed char
2149 vec_sll (vector signed char a1, vector unsigned short a2)
2150 {
2151   return (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2152 }
2153
2154 inline vector signed char
2155 vec_sll (vector signed char a1, vector unsigned char a2)
2156 {
2157   return (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2158 }
2159
2160 inline vector unsigned char
2161 vec_sll (vector unsigned char a1, vector unsigned int a2)
2162 {
2163   return (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2164 }
2165
2166 inline vector unsigned char
2167 vec_sll (vector unsigned char a1, vector unsigned short a2)
2168 {
2169   return (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2170 }
2171
2172 inline vector unsigned char
2173 vec_sll (vector unsigned char a1, vector unsigned char a2)
2174 {
2175   return (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
2176 }
2177
2178 /* vec_slo */
2179
2180 inline vector float
2181 vec_slo (vector float a1, vector signed char a2)
2182 {
2183   return (vector float) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2184 }
2185
2186 inline vector float
2187 vec_slo (vector float a1, vector unsigned char a2)
2188 {
2189   return (vector float) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2190 }
2191
2192 inline vector signed int
2193 vec_slo (vector signed int a1, vector signed char a2)
2194 {
2195   return (vector signed int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2196 }
2197
2198 inline vector signed int
2199 vec_slo (vector signed int a1, vector unsigned char a2)
2200 {
2201   return (vector signed int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2202 }
2203
2204 inline vector unsigned int
2205 vec_slo (vector unsigned int a1, vector signed char a2)
2206 {
2207   return (vector unsigned int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2208 }
2209
2210 inline vector unsigned int
2211 vec_slo (vector unsigned int a1, vector unsigned char a2)
2212 {
2213   return (vector unsigned int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2214 }
2215
2216 inline vector signed short
2217 vec_slo (vector signed short a1, vector signed char a2)
2218 {
2219   return (vector signed short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2220 }
2221
2222 inline vector signed short
2223 vec_slo (vector signed short a1, vector unsigned char a2)
2224 {
2225   return (vector signed short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2226 }
2227
2228 inline vector unsigned short
2229 vec_slo (vector unsigned short a1, vector signed char a2)
2230 {
2231   return (vector unsigned short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2232 }
2233
2234 inline vector unsigned short
2235 vec_slo (vector unsigned short a1, vector unsigned char a2)
2236 {
2237   return (vector unsigned short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2238 }
2239
2240 inline vector signed char
2241 vec_slo (vector signed char a1, vector signed char a2)
2242 {
2243   return (vector signed char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2244 }
2245
2246 inline vector signed char
2247 vec_slo (vector signed char a1, vector unsigned char a2)
2248 {
2249   return (vector signed char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2250 }
2251
2252 inline vector unsigned char
2253 vec_slo (vector unsigned char a1, vector signed char a2)
2254 {
2255   return (vector unsigned char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2256 }
2257
2258 inline vector unsigned char
2259 vec_slo (vector unsigned char a1, vector unsigned char a2)
2260 {
2261   return (vector unsigned char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
2262 }
2263
2264 /* vec_splat */
2265
2266 inline vector signed char
2267 vec_splat (vector signed char a1, const char a2)
2268 {
2269   return (vector signed char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
2270 }
2271
2272 inline vector unsigned char
2273 vec_splat (vector unsigned char a1, const char a2)
2274 {
2275   return (vector unsigned char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
2276 }
2277
2278 inline vector signed short
2279 vec_splat (vector signed short a1, const char a2)
2280 {
2281   return (vector signed short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
2282 }
2283
2284 inline vector unsigned short
2285 vec_splat (vector unsigned short a1, const char a2)
2286 {
2287   return (vector unsigned short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
2288 }
2289
2290 inline vector float
2291 vec_splat (vector float a1, const char a2)
2292 {
2293   return (vector float) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
2294 }
2295
2296 inline vector signed int
2297 vec_splat (vector signed int a1, const char a2)
2298 {
2299   return (vector signed int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
2300 }
2301
2302 inline vector unsigned int
2303 vec_splat (vector unsigned int a1, const char a2)
2304 {
2305   return (vector unsigned int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
2306 }
2307
2308 /* vec_splat_s8 */
2309
2310 inline vector signed char
2311 vec_splat_s8 (const char a1)
2312 {
2313   return (vector signed char) __builtin_altivec_vspltisb (a1);
2314 }
2315
2316 /* vec_splat_s16 */
2317
2318 inline vector signed short
2319 vec_splat_s16 (const char a1)
2320 {
2321   return (vector signed short) __builtin_altivec_vspltish (a1);
2322 }
2323
2324 /* vec_splat_s32 */
2325
2326 inline vector signed int
2327 vec_splat_s32 (const char a1)
2328 {
2329   return (vector signed int) __builtin_altivec_vspltisw (a1);
2330 }
2331
2332 /* vec_splat_u8 */
2333
2334 inline vector unsigned char
2335 vec_splat_u8 (const char a1)
2336 {
2337   return (vector unsigned char) __builtin_altivec_vspltisb (a1);
2338 }
2339
2340 /* vec_splat_u16 */
2341
2342 inline vector unsigned short
2343 vec_splat_u16 (const char a1)
2344 {
2345   return (vector unsigned short) __builtin_altivec_vspltish (a1);
2346 }
2347
2348 /* vec_splat_u32 */
2349
2350 inline vector unsigned int
2351 vec_splat_u32 (const char a1)
2352 {
2353   return (vector unsigned int) __builtin_altivec_vspltisw (a1);
2354 }
2355
2356 /* vec_sr */
2357
2358 inline vector signed char
2359 vec_sr (vector signed char a1, vector unsigned char a2)
2360 {
2361   return (vector signed char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2);
2362 }
2363
2364 inline vector unsigned char
2365 vec_sr (vector unsigned char a1, vector unsigned char a2)
2366 {
2367   return (vector unsigned char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2);
2368 }
2369
2370 inline vector signed short
2371 vec_sr (vector signed short a1, vector unsigned short a2)
2372 {
2373   return (vector signed short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2);
2374 }
2375
2376 inline vector unsigned short
2377 vec_sr (vector unsigned short a1, vector unsigned short a2)
2378 {
2379   return (vector unsigned short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2);
2380 }
2381
2382 inline vector signed int
2383 vec_sr (vector signed int a1, vector unsigned int a2)
2384 {
2385   return (vector signed int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2);
2386 }
2387
2388 inline vector unsigned int
2389 vec_sr (vector unsigned int a1, vector unsigned int a2)
2390 {
2391   return (vector unsigned int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2);
2392 }
2393
2394 /* vec_sra */
2395
2396 inline vector signed char
2397 vec_sra (vector signed char a1, vector unsigned char a2)
2398 {
2399   return (vector signed char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2);
2400 }
2401
2402 inline vector unsigned char
2403 vec_sra (vector unsigned char a1, vector unsigned char a2)
2404 {
2405   return (vector unsigned char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2);
2406 }
2407
2408 inline vector signed short
2409 vec_sra (vector signed short a1, vector unsigned short a2)
2410 {
2411   return (vector signed short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2);
2412 }
2413
2414 inline vector unsigned short
2415 vec_sra (vector unsigned short a1, vector unsigned short a2)
2416 {
2417   return (vector unsigned short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2);
2418 }
2419
2420 inline vector signed int
2421 vec_sra (vector signed int a1, vector unsigned int a2)
2422 {
2423   return (vector signed int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2);
2424 }
2425
2426 inline vector unsigned int
2427 vec_sra (vector unsigned int a1, vector unsigned int a2)
2428 {
2429   return (vector unsigned int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2);
2430 }
2431
2432 /* vec_srl */
2433
2434 inline vector signed int
2435 vec_srl (vector signed int a1, vector unsigned int a2)
2436 {
2437   return (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2438 }
2439
2440 inline vector signed int
2441 vec_srl (vector signed int a1, vector unsigned short a2)
2442 {
2443   return (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2444 }
2445
2446 inline vector signed int
2447 vec_srl (vector signed int a1, vector unsigned char a2)
2448 {
2449   return (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2450 }
2451
2452 inline vector unsigned int
2453 vec_srl (vector unsigned int a1, vector unsigned int a2)
2454 {
2455   return (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2456 }
2457
2458 inline vector unsigned int
2459 vec_srl (vector unsigned int a1, vector unsigned short a2)
2460 {
2461   return (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2462 }
2463
2464 inline vector unsigned int
2465 vec_srl (vector unsigned int a1, vector unsigned char a2)
2466 {
2467   return (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2468 }
2469
2470 inline vector signed short
2471 vec_srl (vector signed short a1, vector unsigned int a2)
2472 {
2473   return (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2474 }
2475
2476 inline vector signed short
2477 vec_srl (vector signed short a1, vector unsigned short a2)
2478 {
2479   return (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2480 }
2481
2482 inline vector signed short
2483 vec_srl (vector signed short a1, vector unsigned char a2)
2484 {
2485   return (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2486 }
2487
2488 inline vector unsigned short
2489 vec_srl (vector unsigned short a1, vector unsigned int a2)
2490 {
2491   return (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2492 }
2493
2494 inline vector unsigned short
2495 vec_srl (vector unsigned short a1, vector unsigned short a2)
2496 {
2497   return (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2498 }
2499
2500 inline vector unsigned short
2501 vec_srl (vector unsigned short a1, vector unsigned char a2)
2502 {
2503   return (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2504 }
2505
2506 inline vector signed char
2507 vec_srl (vector signed char a1, vector unsigned int a2)
2508 {
2509   return (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2510 }
2511
2512 inline vector signed char
2513 vec_srl (vector signed char a1, vector unsigned short a2)
2514 {
2515   return (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2516 }
2517
2518 inline vector signed char
2519 vec_srl (vector signed char a1, vector unsigned char a2)
2520 {
2521   return (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2522 }
2523
2524 inline vector unsigned char
2525 vec_srl (vector unsigned char a1, vector unsigned int a2)
2526 {
2527   return (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2528 }
2529
2530 inline vector unsigned char
2531 vec_srl (vector unsigned char a1, vector unsigned short a2)
2532 {
2533   return (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2534 }
2535
2536 inline vector unsigned char
2537 vec_srl (vector unsigned char a1, vector unsigned char a2)
2538 {
2539   return (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
2540 }
2541
2542 /* vec_sro */
2543
2544 inline vector float
2545 vec_sro (vector float a1, vector signed char a2)
2546 {
2547   return (vector float) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2548 }
2549
2550 inline vector float
2551 vec_sro (vector float a1, vector unsigned char a2)
2552 {
2553   return (vector float) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2554 }
2555
2556 inline vector signed int
2557 vec_sro (vector signed int a1, vector signed char a2)
2558 {
2559   return (vector signed int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2560 }
2561
2562 inline vector signed int
2563 vec_sro (vector signed int a1, vector unsigned char a2)
2564 {
2565   return (vector signed int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2566 }
2567
2568 inline vector unsigned int
2569 vec_sro (vector unsigned int a1, vector signed char a2)
2570 {
2571   return (vector unsigned int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2572 }
2573
2574 inline vector unsigned int
2575 vec_sro (vector unsigned int a1, vector unsigned char a2)
2576 {
2577   return (vector unsigned int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2578 }
2579
2580 inline vector signed short
2581 vec_sro (vector signed short a1, vector signed char a2)
2582 {
2583   return (vector signed short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2584 }
2585
2586 inline vector signed short
2587 vec_sro (vector signed short a1, vector unsigned char a2)
2588 {
2589   return (vector signed short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2590 }
2591
2592 inline vector unsigned short
2593 vec_sro (vector unsigned short a1, vector signed char a2)
2594 {
2595   return (vector unsigned short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2596 }
2597
2598 inline vector unsigned short
2599 vec_sro (vector unsigned short a1, vector unsigned char a2)
2600 {
2601   return (vector unsigned short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2602 }
2603
2604 inline vector signed char
2605 vec_sro (vector signed char a1, vector signed char a2)
2606 {
2607   return (vector signed char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2608 }
2609
2610 inline vector signed char
2611 vec_sro (vector signed char a1, vector unsigned char a2)
2612 {
2613   return (vector signed char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2614 }
2615
2616 inline vector unsigned char
2617 vec_sro (vector unsigned char a1, vector signed char a2)
2618 {
2619   return (vector unsigned char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2620 }
2621
2622 inline vector unsigned char
2623 vec_sro (vector unsigned char a1, vector unsigned char a2)
2624 {
2625   return (vector unsigned char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
2626 }
2627
2628 /* vec_st */
2629
2630 inline void
2631 vec_st (vector float a1, int a2, void *a3)
2632 {
2633   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
2634 }
2635
2636 inline void
2637 vec_st (vector signed int a1, int a2, void *a3)
2638 {
2639   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
2640 }
2641
2642 inline void
2643 vec_st (vector unsigned int a1, int a2, void *a3)
2644 {
2645   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
2646 }
2647
2648 inline void
2649 vec_st (vector signed short a1, int a2, void *a3)
2650 {
2651   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
2652 }
2653
2654 inline void
2655 vec_st (vector unsigned short a1, int a2, void *a3)
2656 {
2657   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
2658 }
2659
2660 inline void
2661 vec_st (vector signed char a1, int a2, void *a3)
2662 {
2663   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
2664 }
2665
2666 inline void
2667 vec_st (vector unsigned char a1, int a2, void *a3)
2668 {
2669   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
2670 }
2671
2672 /* vec_ste */
2673
2674 inline void
2675 vec_ste (vector signed char a1, int a2, void *a3)
2676 {
2677   __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
2678 }
2679
2680 inline void
2681 vec_ste (vector unsigned char a1, int a2, void *a3)
2682 {
2683   __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
2684 }
2685
2686 inline void
2687 vec_ste (vector signed short a1, int a2, void *a3)
2688 {
2689   __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
2690 }
2691
2692 inline void
2693 vec_ste (vector unsigned short a1, int a2, void *a3)
2694 {
2695   __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
2696 }
2697
2698 inline void
2699 vec_ste (vector float a1, int a2, void *a3)
2700 {
2701   __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
2702 }
2703
2704 inline void
2705 vec_ste (vector signed int a1, int a2, void *a3)
2706 {
2707   __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
2708 }
2709
2710 inline void
2711 vec_ste (vector unsigned int a1, int a2, void *a3)
2712 {
2713   __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
2714 }
2715
2716 /* vec_stl */
2717
2718 inline void
2719 vec_stl (vector float a1, int a2, void *a3)
2720 {
2721   __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
2722 }
2723
2724 inline void
2725 vec_stl (vector signed int a1, int a2, void *a3)
2726 {
2727   __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
2728 }
2729
2730 inline void
2731 vec_stl (vector unsigned int a1, int a2, void *a3)
2732 {
2733   __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
2734 }
2735
2736 inline void
2737 vec_stl (vector signed short a1, int a2, void *a3)
2738 {
2739   __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
2740 }
2741
2742 inline void
2743 vec_stl (vector unsigned short a1, int a2, void *a3)
2744 {
2745   __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
2746 }
2747
2748 inline void
2749 vec_stl (vector signed char a1, int a2, void *a3)
2750 {
2751   __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
2752 }
2753
2754 inline void
2755 vec_stl (vector unsigned char a1, int a2, void *a3)
2756 {
2757   __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
2758 }
2759
2760 /* vec_sub */
2761
2762 inline vector signed char
2763 vec_sub (vector signed char a1, vector signed char a2)
2764 {
2765   return (vector signed char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
2766 }
2767
2768 inline vector unsigned char
2769 vec_sub (vector signed char a1, vector unsigned char a2)
2770 {
2771   return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
2772 }
2773
2774 inline vector unsigned char
2775 vec_sub (vector unsigned char a1, vector signed char a2)
2776 {
2777   return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
2778 }
2779
2780 inline vector unsigned char
2781 vec_sub (vector unsigned char a1, vector unsigned char a2)
2782 {
2783   return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
2784 }
2785
2786 inline vector signed short
2787 vec_sub (vector signed short a1, vector signed short a2)
2788 {
2789   return (vector signed short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
2790 }
2791
2792 inline vector unsigned short
2793 vec_sub (vector signed short a1, vector unsigned short a2)
2794 {
2795   return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
2796 }
2797
2798 inline vector unsigned short
2799 vec_sub (vector unsigned short a1, vector signed short a2)
2800 {
2801   return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
2802 }
2803
2804 inline vector unsigned short
2805 vec_sub (vector unsigned short a1, vector unsigned short a2)
2806 {
2807   return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
2808 }
2809
2810 inline vector signed int
2811 vec_sub (vector signed int a1, vector signed int a2)
2812 {
2813   return (vector signed int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
2814 }
2815
2816 inline vector unsigned int
2817 vec_sub (vector signed int a1, vector unsigned int a2)
2818 {
2819   return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
2820 }
2821
2822 inline vector unsigned int
2823 vec_sub (vector unsigned int a1, vector signed int a2)
2824 {
2825   return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
2826 }
2827
2828 inline vector unsigned int
2829 vec_sub (vector unsigned int a1, vector unsigned int a2)
2830 {
2831   return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
2832 }
2833
2834 inline vector float
2835 vec_sub (vector float a1, vector float a2)
2836 {
2837   return (vector float) __builtin_altivec_vsubfp ((vector float) a1, (vector float) a2);
2838 }
2839
2840 /* vec_subc */
2841
2842 inline vector unsigned int
2843 vec_subc (vector unsigned int a1, vector unsigned int a2)
2844 {
2845   return (vector unsigned int) __builtin_altivec_vsubcuw ((vector signed int) a1, (vector signed int) a2);
2846 }
2847
2848 /* vec_subs */
2849
2850 inline vector unsigned char
2851 vec_subs (vector signed char a1, vector unsigned char a2)
2852 {
2853   return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
2854 }
2855
2856 inline vector unsigned char
2857 vec_subs (vector unsigned char a1, vector signed char a2)
2858 {
2859   return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
2860 }
2861
2862 inline vector unsigned char
2863 vec_subs (vector unsigned char a1, vector unsigned char a2)
2864 {
2865   return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
2866 }
2867
2868 inline vector signed char
2869 vec_subs (vector signed char a1, vector signed char a2)
2870 {
2871   return (vector signed char) __builtin_altivec_vsubsbs ((vector signed char) a1, (vector signed char) a2);
2872 }
2873
2874 inline vector unsigned short
2875 vec_subs (vector signed short a1, vector unsigned short a2)
2876 {
2877   return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
2878 }
2879
2880 inline vector unsigned short
2881 vec_subs (vector unsigned short a1, vector signed short a2)
2882 {
2883   return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
2884 }
2885
2886 inline vector unsigned short
2887 vec_subs (vector unsigned short a1, vector unsigned short a2)
2888 {
2889   return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
2890 }
2891
2892 inline vector signed short
2893 vec_subs (vector signed short a1, vector signed short a2)
2894 {
2895   return (vector signed short) __builtin_altivec_vsubshs ((vector signed short) a1, (vector signed short) a2);
2896 }
2897
2898 inline vector unsigned int
2899 vec_subs (vector signed int a1, vector unsigned int a2)
2900 {
2901   return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
2902 }
2903
2904 inline vector unsigned int
2905 vec_subs (vector unsigned int a1, vector signed int a2)
2906 {
2907   return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
2908 }
2909
2910 inline vector unsigned int
2911 vec_subs (vector unsigned int a1, vector unsigned int a2)
2912 {
2913   return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
2914 }
2915
2916 inline vector signed int
2917 vec_subs (vector signed int a1, vector signed int a2)
2918 {
2919   return (vector signed int) __builtin_altivec_vsubsws ((vector signed int) a1, (vector signed int) a2);
2920 }
2921
2922 /* vec_sum4s */
2923
2924 inline vector unsigned int
2925 vec_sum4s (vector unsigned char a1, vector unsigned int a2)
2926 {
2927   return (vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) a1, (vector signed int) a2);
2928 }
2929
2930 inline vector signed int
2931 vec_sum4s (vector signed char a1, vector signed int a2)
2932 {
2933   return (vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) a1, (vector signed int) a2);
2934 }
2935
2936 inline vector signed int
2937 vec_sum4s (vector signed short a1, vector signed int a2)
2938 {
2939   return (vector signed int) __builtin_altivec_vsum4shs ((vector signed short) a1, (vector signed int) a2);
2940 }
2941
2942 /* vec_sum2s */
2943
2944 inline vector signed int
2945 vec_sum2s (vector signed int a1, vector signed int a2)
2946 {
2947   return (vector signed int) __builtin_altivec_vsum2sws ((vector signed int) a1, (vector signed int) a2);
2948 }
2949
2950 /* vec_sums */
2951
2952 inline vector signed int
2953 vec_sums (vector signed int a1, vector signed int a2)
2954 {
2955   return (vector signed int) __builtin_altivec_vsumsws ((vector signed int) a1, (vector signed int) a2);
2956 }
2957
2958 /* vec_trunc */
2959
2960 inline vector float
2961 vec_trunc (vector float a1)
2962 {
2963   return (vector float) __builtin_altivec_vrfiz ((vector float) a1);
2964 }
2965
2966 /* vec_unpackh */
2967
2968 inline vector signed short
2969 vec_unpackh (vector signed char a1)
2970 {
2971   return (vector signed short) __builtin_altivec_vupkhsb ((vector signed char) a1);
2972 }
2973
2974 inline vector signed int
2975 vec_unpackh (vector signed short a1)
2976 {
2977   return (vector signed int) __builtin_altivec_vupkhsh ((vector signed short) a1);
2978 }
2979
2980 /* vec_unpackl */
2981
2982 inline vector signed short
2983 vec_unpackl (vector signed char a1)
2984 {
2985   return (vector signed short) __builtin_altivec_vupklsb ((vector signed char) a1);
2986 }
2987
2988 inline vector signed int
2989 vec_unpackl (vector signed short a1)
2990 {
2991   return (vector signed int) __builtin_altivec_vupklsh ((vector signed short) a1);
2992 }
2993
2994 /* vec_xor */
2995
2996 inline vector float
2997 vec_xor (vector float a1, vector float a2)
2998 {
2999   return (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3000 }
3001
3002 inline vector float
3003 vec_xor (vector float a1, vector signed int a2)
3004 {
3005   return (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3006 }
3007
3008 inline vector float
3009 vec_xor (vector signed int a1, vector float a2)
3010 {
3011   return (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3012 }
3013
3014 inline vector signed int
3015 vec_xor (vector signed int a1, vector signed int a2)
3016 {
3017   return (vector signed int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3018 }
3019
3020 inline vector unsigned int
3021 vec_xor (vector signed int a1, vector unsigned int a2)
3022 {
3023   return (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3024 }
3025
3026 inline vector unsigned int
3027 vec_xor (vector unsigned int a1, vector signed int a2)
3028 {
3029   return (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3030 }
3031
3032 inline vector unsigned int
3033 vec_xor (vector unsigned int a1, vector unsigned int a2)
3034 {
3035   return (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3036 }
3037
3038 inline vector signed short
3039 vec_xor (vector signed short a1, vector signed short a2)
3040 {
3041   return (vector signed short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3042 }
3043
3044 inline vector unsigned short
3045 vec_xor (vector signed short a1, vector unsigned short a2)
3046 {
3047   return (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3048 }
3049
3050 inline vector unsigned short
3051 vec_xor (vector unsigned short a1, vector signed short a2)
3052 {
3053   return (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3054 }
3055
3056 inline vector unsigned short
3057 vec_xor (vector unsigned short a1, vector unsigned short a2)
3058 {
3059   return (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3060 }
3061
3062 inline vector signed char
3063 vec_xor (vector signed char a1, vector signed char a2)
3064 {
3065   return (vector signed char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3066 }
3067
3068 inline vector unsigned char
3069 vec_xor (vector signed char a1, vector unsigned char a2)
3070 {
3071   return (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3072 }
3073
3074 inline vector unsigned char
3075 vec_xor (vector unsigned char a1, vector signed char a2)
3076 {
3077   return (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3078 }
3079
3080 inline vector unsigned char
3081 vec_xor (vector unsigned char a1, vector unsigned char a2)
3082 {
3083   return (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
3084 }
3085
3086 /* vec_all_eq */
3087
3088 inline int
3089 vec_all_eq (vector signed char a1, vector unsigned char a2)
3090 {
3091   return __builtin_altivec_vcmpequb_p (__CR6_LT, a1, (vector signed char) a2);
3092 }
3093
3094 inline int
3095 vec_all_eq (vector signed char a1, vector signed char a2)
3096 {
3097   return __builtin_altivec_vcmpequb_p (__CR6_LT, a1, a2);
3098 }
3099
3100 inline int
3101 vec_all_eq (vector unsigned char a1, vector signed char a2)
3102 {
3103   return __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
3104 }
3105
3106 inline int
3107 vec_all_eq (vector unsigned char a1, vector unsigned char a2)
3108 {
3109   return __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
3110 }
3111
3112 inline int
3113 vec_all_eq (vector signed short a1, vector unsigned short a2)
3114 {
3115   return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
3116 }
3117
3118 inline int
3119 vec_all_eq (vector signed short a1, vector signed short a2)
3120 {
3121   return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
3122 }
3123
3124 inline int
3125 vec_all_eq (vector unsigned short a1, vector signed short a2)
3126 {
3127   return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
3128 }
3129
3130 inline int
3131 vec_all_eq (vector unsigned short a1, vector unsigned short a2)
3132 {
3133   return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
3134 }
3135
3136 inline int
3137 vec_all_eq (vector signed int a1, vector unsigned int a2)
3138 {
3139   return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
3140 }
3141
3142 inline int
3143 vec_all_eq (vector signed int a1, vector signed int a2)
3144 {
3145   return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
3146 }
3147
3148 inline int
3149 vec_all_eq (vector unsigned int a1, vector signed int a2)
3150 {
3151   return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
3152 }
3153
3154 inline int
3155 vec_all_eq (vector unsigned int a1, vector unsigned int a2)
3156 {
3157   return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
3158 }
3159
3160 inline int
3161 vec_all_eq (vector float a1, vector float a2)
3162 {
3163   return __builtin_altivec_vcmpeqfp_p (__CR6_LT, a1, a2);
3164 }
3165
3166 /* vec_all_ge */
3167
3168 inline int
3169 vec_all_ge (vector signed char a1, vector unsigned char a2)
3170 {
3171   return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
3172 }
3173
3174 inline int
3175 vec_all_ge (vector unsigned char a1, vector signed char a2)
3176 {
3177   return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
3178 }
3179
3180 inline int
3181 vec_all_ge (vector unsigned char a1, vector unsigned char a2)
3182 {
3183   return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
3184 }
3185
3186 inline int
3187 vec_all_ge (vector signed char a1, vector signed char a2)
3188 {
3189   return __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
3190 }
3191
3192 inline int
3193 vec_all_ge (vector signed short a1, vector unsigned short a2)
3194 {
3195   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
3196 }
3197
3198 inline int
3199 vec_all_ge (vector unsigned short a1, vector signed short a2)
3200 {
3201   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
3202 }
3203
3204 inline int
3205 vec_all_ge (vector unsigned short a1, vector unsigned short a2)
3206 {
3207   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
3208 }
3209
3210 inline int
3211 vec_all_ge (vector signed short a1, vector signed short a2)
3212 {
3213   return __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
3214 }
3215
3216 inline int
3217 vec_all_ge (vector signed int a1, vector unsigned int a2)
3218 {
3219   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
3220 }
3221
3222 inline int
3223 vec_all_ge (vector unsigned int a1, vector signed int a2)
3224 {
3225   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
3226 }
3227
3228 inline int
3229 vec_all_ge (vector unsigned int a1, vector unsigned int a2)
3230 {
3231   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
3232 }
3233
3234 inline int
3235 vec_all_ge (vector signed int a1, vector signed int a2)
3236 {
3237   return __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
3238 }
3239
3240 inline int
3241 vec_all_ge (vector float a1, vector float a2)
3242 {
3243   return __builtin_altivec_vcmpgefp_p (__CR6_EQ, a1, a2);
3244 }
3245
3246 /* vec_all_gt */
3247
3248 inline int
3249 vec_all_gt (vector signed char a1, vector unsigned char a2)
3250 {
3251   return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
3252 }
3253
3254 inline int
3255 vec_all_gt (vector unsigned char a1, vector signed char a2)
3256 {
3257   return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
3258 }
3259
3260 inline int
3261 vec_all_gt (vector unsigned char a1, vector unsigned char a2)
3262 {
3263   return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
3264 }
3265
3266 inline int
3267 vec_all_gt (vector signed char a1, vector signed char a2)
3268 {
3269   return __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
3270 }
3271
3272 inline int
3273 vec_all_gt (vector signed short a1, vector unsigned short a2)
3274 {
3275   return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
3276 }
3277
3278 inline int
3279 vec_all_gt (vector unsigned short a1, vector signed short a2)
3280 {
3281   return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
3282 }
3283
3284 inline int
3285 vec_all_gt (vector unsigned short a1, vector unsigned short a2)
3286 {
3287   return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
3288 }
3289
3290 inline int
3291 vec_all_gt (vector signed short a1, vector signed short a2)
3292 {
3293   return __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
3294 }
3295
3296 inline int
3297 vec_all_gt (vector signed int a1, vector unsigned int a2)
3298 {
3299   return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
3300 }
3301
3302 inline int
3303 vec_all_gt (vector unsigned int a1, vector signed int a2)
3304 {
3305   return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
3306 }
3307
3308 inline int
3309 vec_all_gt (vector unsigned int a1, vector unsigned int a2)
3310 {
3311   return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
3312 }
3313
3314 inline int
3315 vec_all_gt (vector signed int a1, vector signed int a2)
3316 {
3317   return __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
3318 }
3319
3320 inline int
3321 vec_all_gt (vector float a1, vector float a2)
3322 {
3323   return __builtin_altivec_vcmpgtfp_p (__CR6_LT, a1, a2);
3324 }
3325
3326 /* vec_all_in */
3327
3328 inline int
3329 vec_all_in (vector float a1, vector float a2)
3330 {
3331   return __builtin_altivec_vcmpbfp_p (__CR6_EQ, a1, a2);
3332 }
3333
3334 /* vec_all_le */
3335
3336 inline int
3337 vec_all_le (vector signed char a1, vector unsigned char a2)
3338 {
3339   return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
3340 }
3341
3342 inline int
3343 vec_all_le (vector unsigned char a1, vector signed char a2)
3344 {
3345   return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
3346 }
3347
3348 inline int
3349 vec_all_le (vector unsigned char a1, vector unsigned char a2)
3350 {
3351   return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
3352 }
3353
3354 inline int
3355 vec_all_le (vector signed char a1, vector signed char a2)
3356 {
3357   return __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
3358 }
3359
3360 inline int
3361 vec_all_le (vector signed short a1, vector unsigned short a2)
3362 {
3363   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
3364 }
3365
3366 inline int
3367 vec_all_le (vector unsigned short a1, vector signed short a2)
3368 {
3369   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
3370 }
3371
3372 inline int
3373 vec_all_le (vector unsigned short a1, vector unsigned short a2)
3374 {
3375   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
3376 }
3377
3378 inline int
3379 vec_all_le (vector signed short a1, vector signed short a2)
3380 {
3381   return __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
3382 }
3383
3384 inline int
3385 vec_all_le (vector signed int a1, vector unsigned int a2)
3386 {
3387   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
3388 }
3389
3390 inline int
3391 vec_all_le (vector unsigned int a1, vector signed int a2)
3392 {
3393   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
3394 }
3395
3396 inline int
3397 vec_all_le (vector unsigned int a1, vector unsigned int a2)
3398 {
3399   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
3400 }
3401
3402 inline int
3403 vec_all_le (vector signed int a1, vector signed int a2)
3404 {
3405   return __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
3406 }
3407
3408 inline int
3409 vec_all_le (vector float a1, vector float a2)
3410 {
3411   return __builtin_altivec_vcmpgefp_p (__CR6_LT, a2, a1);
3412 }
3413
3414 /* vec_all_lt */
3415
3416 inline int
3417 vec_all_lt (vector signed char a1, vector unsigned char a2)
3418 {
3419   return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
3420 }
3421
3422 inline int
3423 vec_all_lt (vector unsigned char a1, vector signed char a2)
3424 {
3425   return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
3426 }
3427
3428 inline int
3429 vec_all_lt (vector unsigned char a1, vector unsigned char a2)
3430 {
3431   return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
3432 }
3433
3434 inline int
3435 vec_all_lt (vector signed char a1, vector signed char a2)
3436 {
3437   return __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
3438 }
3439
3440 inline int
3441 vec_all_lt (vector signed short a1, vector unsigned short a2)
3442 {
3443   return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
3444 }
3445
3446 inline int
3447 vec_all_lt (vector unsigned short a1, vector signed short a2)
3448 {
3449   return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
3450 }
3451
3452 inline int
3453 vec_all_lt (vector unsigned short a1, vector unsigned short a2)
3454 {
3455   return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
3456 }
3457
3458 inline int
3459 vec_all_lt (vector signed short a1, vector signed short a2)
3460 {
3461   return __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
3462 }
3463
3464 inline int
3465 vec_all_lt (vector signed int a1, vector unsigned int a2)
3466 {
3467   return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
3468 }
3469
3470 inline int
3471 vec_all_lt (vector unsigned int a1, vector signed int a2)
3472 {
3473   return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
3474 }
3475
3476 inline int
3477 vec_all_lt (vector unsigned int a1, vector unsigned int a2)
3478 {
3479   return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
3480 }
3481
3482 inline int
3483 vec_all_lt (vector signed int a1, vector signed int a2)
3484 {
3485   return __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
3486 }
3487
3488 inline int
3489 vec_all_lt (vector float a1, vector float a2)
3490 {
3491   return __builtin_altivec_vcmpgtfp_p (__CR6_LT, a2, a1);
3492 }
3493
3494 /* vec_all_nan */
3495
3496 inline int
3497 vec_all_nan (vector float a1)
3498 {
3499   return __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, a1);
3500 }
3501
3502 /* vec_all_ne */
3503
3504 inline int
3505 vec_all_ne (vector signed char a1, vector unsigned char a2)
3506 {
3507   return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
3508 }
3509
3510 inline int
3511 vec_all_ne (vector signed char a1, vector signed char a2)
3512 {
3513   return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
3514 }
3515
3516 inline int
3517 vec_all_ne (vector unsigned char a1, vector signed char a2)
3518 {
3519   return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
3520 }
3521
3522 inline int
3523 vec_all_ne (vector unsigned char a1, vector unsigned char a2)
3524 {
3525   return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
3526 }
3527
3528 inline int
3529 vec_all_ne (vector signed short a1, vector unsigned short a2)
3530 {
3531   return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
3532 }
3533
3534 inline int
3535 vec_all_ne (vector signed short a1, vector signed short a2)
3536 {
3537   return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
3538 }
3539
3540 inline int
3541 vec_all_ne (vector unsigned short a1, vector signed short a2)
3542 {
3543   return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
3544 }
3545
3546 inline int
3547 vec_all_ne (vector unsigned short a1, vector unsigned short a2)
3548 {
3549   return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
3550 }
3551
3552 inline int
3553 vec_all_ne (vector signed int a1, vector unsigned int a2)
3554 {
3555   return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
3556 }
3557
3558 inline int
3559 vec_all_ne (vector signed int a1, vector signed int a2)
3560 {
3561   return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
3562 }
3563
3564 inline int
3565 vec_all_ne (vector unsigned int a1, vector signed int a2)
3566 {
3567   return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
3568 }
3569
3570 inline int
3571 vec_all_ne (vector unsigned int a1, vector unsigned int a2)
3572 {
3573   return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
3574 }
3575
3576 inline int
3577 vec_all_ne (vector float a1, vector float a2)
3578 {
3579   return __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, a2);
3580 }
3581
3582 /* vec_all_nge */
3583
3584 inline int
3585 vec_all_nge (vector float a1, vector float a2)
3586 {
3587   return __builtin_altivec_vcmpgefp_p (__CR6_EQ, a1, a2);
3588 }
3589
3590 /* vec_all_ngt */
3591
3592 inline int
3593 vec_all_ngt (vector float a1, vector float a2)
3594 {
3595   return __builtin_altivec_vcmpgtfp_p (__CR6_EQ, a1, a2);
3596 }
3597
3598 /* vec_all_nle */
3599
3600 inline int
3601 vec_all_nle (vector float a1, vector float a2)
3602 {
3603   return __builtin_altivec_vcmpgefp_p (__CR6_EQ, a2, a1);
3604 }
3605
3606 /* vec_all_nlt */
3607
3608 inline int
3609 vec_all_nlt (vector float a1, vector float a2)
3610 {
3611   return __builtin_altivec_vcmpgtfp_p (__CR6_EQ, a2, a1);
3612 }
3613
3614 /* vec_all_numeric */
3615
3616 inline int
3617 vec_all_numeric (vector float a1)
3618 {
3619   return __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, a1);
3620 }
3621
3622 /* vec_any_eq */
3623
3624 inline int
3625 vec_any_eq (vector signed char a1, vector unsigned char a2)
3626 {
3627   return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
3628 }
3629
3630 inline int
3631 vec_any_eq (vector signed char a1, vector signed char a2)
3632 {
3633   return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
3634 }
3635
3636 inline int
3637 vec_any_eq (vector unsigned char a1, vector signed char a2)
3638 {
3639   return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
3640 }
3641
3642 inline int
3643 vec_any_eq (vector unsigned char a1, vector unsigned char a2)
3644 {
3645   return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
3646 }
3647
3648 inline int
3649 vec_any_eq (vector signed short a1, vector unsigned short a2)
3650 {
3651   return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
3652 }
3653
3654 inline int
3655 vec_any_eq (vector signed short a1, vector signed short a2)
3656 {
3657   return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
3658 }
3659
3660 inline int
3661 vec_any_eq (vector unsigned short a1, vector signed short a2)
3662 {
3663   return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
3664 }
3665
3666 inline int
3667 vec_any_eq (vector unsigned short a1, vector unsigned short a2)
3668 {
3669   return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
3670 }
3671
3672 inline int
3673 vec_any_eq (vector signed int a1, vector unsigned int a2)
3674 {
3675   return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
3676 }
3677
3678 inline int
3679 vec_any_eq (vector signed int a1, vector signed int a2)
3680 {
3681   return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
3682 }
3683
3684 inline int
3685 vec_any_eq (vector unsigned int a1, vector signed int a2)
3686 {
3687   return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
3688 }
3689
3690 inline int
3691 vec_any_eq (vector unsigned int a1, vector unsigned int a2)
3692 {
3693   return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
3694 }
3695
3696 inline int
3697 vec_any_eq (vector float a1, vector float a2)
3698 {
3699   return __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, a1, a2);
3700 }
3701
3702 /* vec_any_ge */
3703
3704 inline int
3705 vec_any_ge (vector signed char a1, vector unsigned char a2)
3706 {
3707   return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
3708 }
3709
3710 inline int
3711 vec_any_ge (vector unsigned char a1, vector signed char a2)
3712 {
3713   return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
3714 }
3715
3716 inline int
3717 vec_any_ge (vector unsigned char a1, vector unsigned char a2)
3718 {
3719   return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
3720 }
3721
3722 inline int
3723 vec_any_ge (vector signed char a1, vector signed char a2)
3724 {
3725   return __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
3726 }
3727
3728 inline int
3729 vec_any_ge (vector signed short a1, vector unsigned short a2)
3730 {
3731   return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
3732 }
3733
3734 inline int
3735 vec_any_ge (vector unsigned short a1, vector signed short a2)
3736 {
3737   return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
3738 }
3739
3740 inline int
3741 vec_any_ge (vector unsigned short a1, vector unsigned short a2)
3742 {
3743   return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
3744 }
3745
3746 inline int
3747 vec_any_ge (vector signed short a1, vector signed short a2)
3748 {
3749   return __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
3750 }
3751
3752 inline int
3753 vec_any_ge (vector signed int a1, vector unsigned int a2)
3754 {
3755   return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
3756 }
3757
3758 inline int
3759 vec_any_ge (vector unsigned int a1, vector signed int a2)
3760 {
3761   return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
3762 }
3763
3764 inline int
3765 vec_any_ge (vector unsigned int a1, vector unsigned int a2)
3766 {
3767   return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
3768 }
3769
3770 inline int
3771 vec_any_ge (vector signed int a1, vector signed int a2)
3772 {
3773   return __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
3774 }
3775
3776 inline int
3777 vec_any_ge (vector float a1, vector float a2)
3778 {
3779   return __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, a1, a2);
3780 }
3781
3782 /* vec_any_gt */
3783
3784 inline int
3785 vec_any_gt (vector signed char a1, vector unsigned char a2)
3786 {
3787   return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
3788 }
3789
3790 inline int
3791 vec_any_gt (vector unsigned char a1, vector signed char a2)
3792 {
3793   return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
3794 }
3795
3796 inline int
3797 vec_any_gt (vector unsigned char a1, vector unsigned char a2)
3798 {
3799   return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
3800 }
3801
3802 inline int
3803 vec_any_gt (vector signed char a1, vector signed char a2)
3804 {
3805   return __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
3806 }
3807
3808 inline int
3809 vec_any_gt (vector signed short a1, vector unsigned short a2)
3810 {
3811   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
3812 }
3813
3814 inline int
3815 vec_any_gt (vector unsigned short a1, vector signed short a2)
3816 {
3817   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
3818 }
3819
3820 inline int
3821 vec_any_gt (vector unsigned short a1, vector unsigned short a2)
3822 {
3823   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
3824 }
3825
3826 inline int
3827 vec_any_gt (vector signed short a1, vector signed short a2)
3828 {
3829   return __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
3830 }
3831
3832 inline int
3833 vec_any_gt (vector signed int a1, vector unsigned int a2)
3834 {
3835   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
3836 }
3837
3838 inline int
3839 vec_any_gt (vector unsigned int a1, vector signed int a2)
3840 {
3841   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
3842 }
3843
3844 inline int
3845 vec_any_gt (vector unsigned int a1, vector unsigned int a2)
3846 {
3847   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
3848 }
3849
3850 inline int
3851 vec_any_gt (vector signed int a1, vector signed int a2)
3852 {
3853   return __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
3854 }
3855
3856 inline int
3857 vec_any_gt (vector float a1, vector float a2)
3858 {
3859   return __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, a1, a2);
3860 }
3861
3862 /* vec_any_le */
3863
3864 inline int
3865 vec_any_le (vector signed char a1, vector unsigned char a2)
3866 {
3867   return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
3868 }
3869
3870 inline int
3871 vec_any_le (vector unsigned char a1, vector signed char a2)
3872 {
3873   return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
3874 }
3875
3876 inline int
3877 vec_any_le (vector unsigned char a1, vector unsigned char a2)
3878 {
3879   return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
3880 }
3881
3882 inline int
3883 vec_any_le (vector signed char a1, vector signed char a2)
3884 {
3885   return __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
3886 }
3887
3888 inline int
3889 vec_any_le (vector signed short a1, vector unsigned short a2)
3890 {
3891   return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
3892 }
3893
3894 inline int
3895 vec_any_le (vector unsigned short a1, vector signed short a2)
3896 {
3897   return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
3898 }
3899
3900 inline int
3901 vec_any_le (vector unsigned short a1, vector unsigned short a2)
3902 {
3903   return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
3904 }
3905
3906 inline int
3907 vec_any_le (vector signed short a1, vector signed short a2)
3908 {
3909   return __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
3910 }
3911
3912 inline int
3913 vec_any_le (vector signed int a1, vector unsigned int a2)
3914 {
3915   return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
3916 }
3917
3918 inline int
3919 vec_any_le (vector unsigned int a1, vector signed int a2)
3920 {
3921   return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
3922 }
3923
3924 inline int
3925 vec_any_le (vector unsigned int a1, vector unsigned int a2)
3926 {
3927   return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
3928 }
3929
3930 inline int
3931 vec_any_le (vector signed int a1, vector signed int a2)
3932 {
3933   return __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
3934 }
3935
3936 inline int
3937 vec_any_le (vector float a1, vector float a2)
3938 {
3939   return __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a2, a1);
3940 }
3941
3942 /* vec_any_lt */
3943
3944 inline int
3945 vec_any_lt (vector signed char a1, vector unsigned char a2)
3946 {
3947   return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
3948 }
3949
3950 inline int
3951 vec_any_lt (vector unsigned char a1, vector signed char a2)
3952 {
3953   return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
3954 }
3955
3956 inline int
3957 vec_any_lt (vector unsigned char a1, vector unsigned char a2)
3958 {
3959   return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
3960 }
3961
3962 inline int
3963 vec_any_lt (vector signed char a1, vector signed char a2)
3964 {
3965   return __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
3966 }
3967
3968 inline int
3969 vec_any_lt (vector signed short a1, vector unsigned short a2)
3970 {
3971   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
3972 }
3973
3974 inline int
3975 vec_any_lt (vector unsigned short a1, vector signed short a2)
3976 {
3977   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
3978 }
3979
3980 inline int
3981 vec_any_lt (vector unsigned short a1, vector unsigned short a2)
3982 {
3983   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
3984 }
3985
3986 inline int
3987 vec_any_lt (vector signed short a1, vector signed short a2)
3988 {
3989   return __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
3990 }
3991
3992 inline int
3993 vec_any_lt (vector signed int a1, vector unsigned int a2)
3994 {
3995   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
3996 }
3997
3998 inline int
3999 vec_any_lt (vector unsigned int a1, vector signed int a2)
4000 {
4001   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
4002 }
4003
4004 inline int
4005 vec_any_lt (vector unsigned int a1, vector unsigned int a2)
4006 {
4007   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
4008 }
4009
4010 inline int
4011 vec_any_lt (vector signed int a1, vector signed int a2)
4012 {
4013   return __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
4014 }
4015
4016 inline int
4017 vec_any_lt (vector float a1, vector float a2)
4018 {
4019   return __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, a2, a1);
4020 }
4021
4022 /* vec_any_nan */
4023
4024 inline int
4025 vec_any_nan (vector float a1)
4026 {
4027   return __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a1);
4028 }
4029
4030 /* vec_any_ne */
4031
4032 inline int
4033 vec_any_ne (vector signed char a1, vector unsigned char a2)
4034 {
4035   return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
4036 }
4037
4038 inline int
4039 vec_any_ne (vector signed char a1, vector signed char a2)
4040 {
4041   return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
4042 }
4043
4044 inline int
4045 vec_any_ne (vector unsigned char a1, vector signed char a2)
4046 {
4047   return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
4048 }
4049
4050 inline int
4051 vec_any_ne (vector unsigned char a1, vector unsigned char a2)
4052 {
4053   return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
4054 }
4055
4056 inline int
4057 vec_any_ne (vector signed short a1, vector unsigned short a2)
4058 {
4059   return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
4060 }
4061
4062 inline int
4063 vec_any_ne (vector signed short a1, vector signed short a2)
4064 {
4065   return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
4066 }
4067
4068 inline int
4069 vec_any_ne (vector unsigned short a1, vector signed short a2)
4070 {
4071   return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
4072 }
4073
4074 inline int
4075 vec_any_ne (vector unsigned short a1, vector unsigned short a2)
4076 {
4077   return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
4078 }
4079
4080 inline int
4081 vec_any_ne (vector signed int a1, vector unsigned int a2)
4082 {
4083   return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
4084 }
4085
4086 inline int
4087 vec_any_ne (vector signed int a1, vector signed int a2)
4088 {
4089   return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
4090 }
4091
4092 inline int
4093 vec_any_ne (vector unsigned int a1, vector signed int a2)
4094 {
4095   return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
4096 }
4097
4098 inline int
4099 vec_any_ne (vector unsigned int a1, vector unsigned int a2)
4100 {
4101   return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
4102 }
4103
4104 inline int
4105 vec_any_ne (vector float a1, vector float a2)
4106 {
4107   return __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a2);
4108 }
4109
4110 /* vec_any_nge */
4111
4112 inline int
4113 vec_any_nge (vector float a1, vector float a2)
4114 {
4115   return __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a1, a2);
4116 }
4117
4118 /* vec_any_ngt */
4119
4120 inline int
4121 vec_any_ngt (vector float a1, vector float a2)
4122 {
4123   return __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, a1, a2);
4124 }
4125
4126 /* vec_any_nle */
4127
4128 inline int
4129 vec_any_nle (vector float a1, vector float a2)
4130 {
4131   return __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a2, a1);
4132 }
4133
4134 /* vec_any_nlt */
4135
4136 inline int
4137 vec_any_nlt (vector float a1, vector float a2)
4138 {
4139   return __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, a2, a1);
4140 }
4141
4142 /* vec_any_numeric */
4143
4144 inline int
4145 vec_any_numeric (vector float a1)
4146 {
4147   return __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, a1, a1);
4148 }
4149
4150 /* vec_any_out */
4151
4152 inline int
4153 vec_any_out (vector float a1, vector float a2)
4154 {
4155   return __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, a1, a2);
4156 }
4157
4158 /* vec_step */
4159
4160 template<typename _Tp>
4161 struct __vec_step_help
4162 {
4163   // All proper vector types will specialize _S_elem.
4164 };
4165
4166 template<>
4167 struct __vec_step_help<vector signed short>
4168 {
4169   static const int _S_elem = 8;
4170 };
4171
4172 template<>
4173 struct __vec_step_help<vector unsigned short>
4174 {
4175   static const int _S_elem = 8;
4176 };
4177
4178 template<>
4179 struct __vec_step_help<vector signed int>
4180 {
4181   static const int _S_elem = 4;
4182 };
4183
4184 template<>
4185 struct __vec_step_help<vector unsigned int>
4186 {
4187   static const int _S_elem = 4;
4188 };
4189
4190 template<>
4191 struct __vec_step_help<vector unsigned char>
4192 {
4193   static const int _S_elem = 16;
4194 };
4195
4196 template<>
4197 struct __vec_step_help<vector signed char>
4198 {
4199   static const int _S_elem = 16;
4200 };
4201
4202 template<>
4203 struct __vec_step_help<vector float>
4204 {
4205   static const int _S_elem = 4;
4206 };
4207
4208 #define vec_step(t)  __vec_step_help<t>::_S_elem
4209
4210 #else /* not C++ */
4211
4212 /* "... and so I think no man in a century will suffer as greatly as
4213    you will."  */
4214
4215 #define vec_abs(a) \
4216   __ch (__un_args_eq (vector signed char, (a)), \
4217         ((vector signed char) __builtin_altivec_abs_v16qi ((vector signed char) (a))), \
4218   __ch (__un_args_eq (vector signed short, (a)), \
4219         ((vector signed short) __builtin_altivec_abs_v8hi ((vector signed short) (a))), \
4220   __ch (__un_args_eq (vector signed int, (a)), \
4221         ((vector signed int) __builtin_altivec_abs_v4si ((vector signed int) (a))), \
4222   __ch (__un_args_eq (vector float, (a)), \
4223         ((vector float) __builtin_altivec_abs_v4sf ((vector float) (a))), \
4224   __altivec_link_error_invalid_argument ()))))
4225
4226 #define vec_abss(a) \
4227   __ch (__un_args_eq (vector signed char, (a)), \
4228         ((vector signed char) __builtin_altivec_abss_v16qi ((vector signed char) (a))), \
4229   __ch (__un_args_eq (vector signed short, (a)), \
4230         ((vector signed short) __builtin_altivec_abss_v8hi ((vector signed short) (a))), \
4231   __ch (__un_args_eq (vector signed int, (a)), \
4232         ((vector signed int) __builtin_altivec_abss_v4si ((vector signed int) (a))), \
4233   __altivec_link_error_invalid_argument ())))
4234
4235 #define vec_step(t) \
4236   __ch (__builtin_types_compatible_p ((t), vector signed int), 4,               \
4237   __ch (__builtin_types_compatible_p ((t), vector unsigned int), 4,     \
4238   __ch (__builtin_types_compatible_p ((t), vector signed short), 8,     \
4239   __ch (__builtin_types_compatible_p ((t), vector unsigned short), 8,   \
4240   __ch (__builtin_types_compatible_p ((t), vector signed char), 16,     \
4241   __ch (__builtin_types_compatible_p ((t), vector unsigned char), 16,   \
4242   __ch (__builtin_types_compatible_p ((t), vector float), 4,            \
4243   __altivec_link_error_invalid_argument ())))))))
4244
4245 #define vec_add(a1, a2) \
4246 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4247       ((vector signed char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
4248 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
4249       ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
4250 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
4251       ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
4252 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4253       ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
4254 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4255       ((vector signed short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
4256 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
4257       ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
4258 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
4259       ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
4260 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4261       ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
4262 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4263       ((vector signed int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
4264 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
4265       ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
4266 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
4267       ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
4268 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4269       ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
4270 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
4271       ((vector float) __builtin_altivec_vaddfp ((vector float) (a1), (vector float) (a2))), \
4272     __altivec_link_error_invalid_argument ())))))))))))))
4273
4274 #define vec_addc(a1, a2) \
4275 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4276       ((vector unsigned int) __builtin_altivec_vaddcuw ((vector signed int) (a1), (vector signed int) (a2))), \
4277     __altivec_link_error_invalid_argument ())
4278
4279 #define vec_vaddcuw(a1, a2) \
4280 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4281       ((vector unsigned int) __builtin_altivec_vaddcuw ((vector signed int) (a1), (vector signed int) (a2))), \
4282 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4283       ((vector unsigned int) __builtin_altivec_vaddcuw ((vector signed int) (a1), (vector signed int) (a2))), \
4284 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
4285       ((vector unsigned int) __builtin_altivec_vaddcuw ((vector signed int ) (a1), (vector signed int ) (a2))), \
4286     __altivec_link_error_invalid_argument ())))
4287
4288 #define vec_adds(a1, a2) \
4289 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
4290       ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
4291 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
4292       ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
4293 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4294       ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
4295 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4296       ((vector signed char) __builtin_altivec_vaddsbs ((vector signed char) (a1), (vector signed char) (a2))), \
4297 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
4298       ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
4299 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
4300       ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
4301 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4302       ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
4303 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4304       ((vector signed short) __builtin_altivec_vaddshs ((vector signed short) (a1), (vector signed short) (a2))), \
4305 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
4306       ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
4307 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
4308       ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
4309 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4310       ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
4311 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4312       ((vector signed int) __builtin_altivec_vaddsws ((vector signed int) (a1), (vector signed int) (a2))), \
4313     __altivec_link_error_invalid_argument ()))))))))))))
4314
4315 #define vec_and(a1, a2) \
4316 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
4317       ((vector float) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4318 __ch (__bin_args_eq (vector float, (a1), vector signed int, (a2)), \
4319       ((vector float) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4320 __ch (__bin_args_eq (vector signed int, (a1), vector float, (a2)), \
4321       ((vector float) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4322 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4323       ((vector signed int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4324 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
4325       ((vector unsigned int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4326 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
4327       ((vector unsigned int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4328 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4329       ((vector unsigned int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4330 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4331       ((vector signed short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4332 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
4333       ((vector unsigned short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4334 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
4335       ((vector unsigned short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4336 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4337       ((vector unsigned short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4338 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4339       ((vector signed char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4340 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
4341       ((vector unsigned char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4342 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
4343       ((vector unsigned char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4344 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4345       ((vector unsigned char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
4346     __altivec_link_error_invalid_argument ())))))))))))))))
4347
4348 #define vec_andc(a1, a2) \
4349 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
4350       ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4351 __ch (__bin_args_eq (vector float, (a1), vector unsigned int, (a2)), \
4352       ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4353 __ch (__bin_args_eq (vector unsigned int, (a1), vector float, (a2)), \
4354       ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4355 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4356       ((vector unsigned int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4357 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
4358       ((vector unsigned int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4359 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4360       ((vector signed int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4361 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
4362       ((vector unsigned int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4363 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4364       ((vector unsigned int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4365 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4366       ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4367 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
4368       ((vector signed short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4369 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
4370       ((vector signed short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4371 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4372       ((vector signed short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4373 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4374       ((vector signed short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4375 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
4376       ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4377 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
4378       ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4379 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4380       ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4381 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4382       ((vector unsigned char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4383 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
4384       ((vector unsigned char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4385 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
4386       ((vector unsigned char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4387 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4388       ((vector signed char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4389 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4390       ((vector signed char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4391 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
4392       ((vector signed char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
4393     __altivec_link_error_invalid_argument ()))))))))))))))))))))))
4394
4395 #define vec_avg(a1, a2) \
4396 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4397       ((vector unsigned char) __builtin_altivec_vavgub ((vector signed char) (a1), (vector signed char) (a2))), \
4398 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4399       ((vector signed char) __builtin_altivec_vavgsb ((vector signed char) (a1), (vector signed char) (a2))), \
4400 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4401       ((vector unsigned short) __builtin_altivec_vavguh ((vector signed short) (a1), (vector signed short) (a2))), \
4402 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4403       ((vector signed short) __builtin_altivec_vavgsh ((vector signed short) (a1), (vector signed short) (a2))), \
4404 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4405       ((vector unsigned int) __builtin_altivec_vavguw ((vector signed int) (a1), (vector signed int) (a2))), \
4406 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4407       ((vector signed int) __builtin_altivec_vavgsw ((vector signed int) (a1), (vector signed int) (a2))), \
4408     __altivec_link_error_invalid_argument ()))))))
4409
4410 #define vec_ceil(a1) __builtin_altivec_vrfip ((a1))
4411
4412 #define vec_cmpb(a1, a2) __builtin_altivec_vcmpbfp ((a1), (a2))
4413
4414 #define vec_cmpeq(a1, a2) \
4415 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4416       ((vector signed char) __builtin_altivec_vcmpequb ((vector signed char) (a1), (vector signed char) (a2))), \
4417 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4418       ((vector signed char) __builtin_altivec_vcmpequb ((vector signed char) (a1), (vector signed char) (a2))), \
4419 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4420       ((vector signed short) __builtin_altivec_vcmpequh ((vector signed short) (a1), (vector signed short) (a2))), \
4421 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4422       ((vector signed short) __builtin_altivec_vcmpequh ((vector signed short) (a1), (vector signed short) (a2))), \
4423 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4424       ((vector signed int) __builtin_altivec_vcmpequw ((vector signed int) (a1), (vector signed int) (a2))), \
4425 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4426       ((vector signed int) __builtin_altivec_vcmpequw ((vector signed int) (a1), (vector signed int) (a2))), \
4427 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
4428       ((vector signed int) __builtin_altivec_vcmpeqfp ((vector float) (a1), (vector float) (a2))), \
4429     __altivec_link_error_invalid_argument ())))))))
4430
4431 #define vec_cmpge(a1, a2) __builtin_altivec_vcmpgefp ((a1), (a2))
4432
4433 #define vec_cmpgt(a1, a2) \
4434 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4435       ((vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) (a1), (vector signed char) (a2))), \
4436 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4437       ((vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) (a1), (vector signed char) (a2))), \
4438 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4439       ((vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) (a1), (vector signed short) (a2))), \
4440 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4441       ((vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) (a1), (vector signed short) (a2))), \
4442 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4443       ((vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) (a1), (vector signed int) (a2))), \
4444 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4445       ((vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) (a1), (vector signed int) (a2))), \
4446 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
4447       ((vector signed int) __builtin_altivec_vcmpgtfp ((vector float) (a1), (vector float) (a2))), \
4448     __altivec_link_error_invalid_argument ())))))))
4449
4450 #define vec_cmple(a1, a2) __builtin_altivec_vcmpgefp ((a1), (a2))
4451
4452 #define vec_cmplt(a1, a2) \
4453 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4454       ((vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) (a1), (vector signed char) (a2))), \
4455 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4456       ((vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) (a1), (vector signed char) (a2))), \
4457 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4458       ((vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) (a1), (vector signed short) (a2))), \
4459 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4460       ((vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) (a1), (vector signed short) (a2))), \
4461 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4462       ((vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) (a1), (vector signed int) (a2))), \
4463 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4464       ((vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) (a1), (vector signed int) (a2))), \
4465 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
4466       ((vector signed int) __builtin_altivec_vcmpgtfp ((vector float) (a1), (vector float) (a2))), \
4467     __altivec_link_error_invalid_argument ())))))))
4468
4469 #define vec_ctf(a1, a2) \
4470 __ch (__bin_args_eq (vector unsigned int, (a1), int, (a2)), \
4471       ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const char) (a2))), \
4472 __ch (__bin_args_eq (vector signed int, (a1), int, (a2)), \
4473       ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const char) (a2))), \
4474     __altivec_link_error_invalid_argument ()))
4475
4476 #define vec_vcfux(a1, a2) __builtin_altivec_vcfux ((vector signed int)(a1), (a2))
4477
4478 #define vec_cts(a1, a2) __builtin_altivec_vctsxs ((a1), (a2))
4479
4480 #define vec_ctu(a1, a2) __builtin_altivec_vctuxs ((a1), (a2))
4481
4482 #define vec_dss(a1) __builtin_altivec_dss ((a1))
4483
4484 #define vec_dssall() __builtin_altivec_dssall ()
4485
4486 #define vec_dst(a1, a2, a3) __builtin_altivec_dst ((a1), (a2), (a3))
4487
4488 #define vec_dstst(a1, a2, a3) __builtin_altivec_dstst ((a1), (a2), (a3))
4489
4490 #define vec_dststt(a1, a2, a3) __builtin_altivec_dststt ((a1), (a2), (a3))
4491
4492 #define vec_dstt(a1, a2, a3) __builtin_altivec_dstt ((a1), (a2), (a3))
4493
4494 #define vec_expte(a1) __builtin_altivec_vexptefp ((a1))
4495
4496 #define vec_vexptefp(a1) \
4497 __ch (__un_args_eq (vector float, (a1)), \
4498     ((vector float) __builtin_altivec_vexptefp ((a1))), \
4499     __altivec_link_error_invalid_argument ())
4500
4501 #define vec_floor(a1) __builtin_altivec_vrfim (a1)
4502
4503 #define vec_ld(a, b) \
4504 __ch (__un_args_eq (vector unsigned char *, (b)), \
4505       ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \
4506 __ch (__un_args_eq (vector unsigned char [], (b)), \
4507       ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \
4508 __ch (__un_args_eq (unsigned char *, (b)), \
4509       ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \
4510 __ch (__un_args_eq (unsigned char [], (b)), \
4511       ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \
4512 __ch (__un_args_eq (vector signed char *, (b)), \
4513       ((vector signed char) __builtin_altivec_lvx ((a), (b))), \
4514 __ch (__un_args_eq (vector signed char [], (b)), \
4515       ((vector signed char) __builtin_altivec_lvx ((a), (b))), \
4516 __ch (__un_args_eq (signed char *, (b)), \
4517       ((vector signed char) __builtin_altivec_lvx ((a), (b))), \
4518 __ch (__un_args_eq (signed char [], (b)), \
4519       ((vector signed char) __builtin_altivec_lvx ((a), (b))), \
4520 __ch (__un_args_eq (vector unsigned short *, (b)), \
4521       ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \
4522 __ch (__un_args_eq (vector unsigned short [], (b)), \
4523       ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \
4524 __ch (__un_args_eq (unsigned short *, (b)), \
4525       ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \
4526 __ch (__un_args_eq (unsigned short [], (b)), \
4527       ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \
4528 __ch (__un_args_eq (vector signed short *, (b)), \
4529       ((vector signed short) __builtin_altivec_lvx ((a), (b))), \
4530 __ch (__un_args_eq (vector signed short [], (b)), \
4531       ((vector signed short) __builtin_altivec_lvx ((a), (b))), \
4532 __ch (__un_args_eq (signed short *, (b)), \
4533       ((vector signed short) __builtin_altivec_lvx ((a), (b))), \
4534 __ch (__un_args_eq (signed short [], (b)), \
4535       ((vector signed short) __builtin_altivec_lvx ((a), (b))), \
4536 __ch (__un_args_eq (vector unsigned int *, (b)), \
4537       ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
4538 __ch (__un_args_eq (vector unsigned int [], (b)), \
4539       ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
4540 __ch (__un_args_eq (unsigned int *, (b)), \
4541       ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
4542 __ch (__un_args_eq (unsigned int [], (b)), \
4543       ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
4544 __ch (__un_args_eq (vector signed int *, (b)), \
4545       ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
4546 __ch (__un_args_eq (vector signed int [], (b)), \
4547       ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
4548 __ch (__un_args_eq (signed int *, (b)), \
4549       ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
4550 __ch (__un_args_eq (signed int [], (b)), \
4551       ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
4552 __ch (__un_args_eq (vector float *, (b)), \
4553       ((vector float) __builtin_altivec_lvx ((a), (b))), \
4554 __ch (__un_args_eq (vector float [], (b)), \
4555       ((vector float) __builtin_altivec_lvx ((a), (b))), \
4556 __ch (__un_args_eq (float *, (b)), \
4557       ((vector float) __builtin_altivec_lvx ((a), (b))), \
4558 __ch (__un_args_eq (float [], (b)), \
4559       ((vector float) __builtin_altivec_lvx ((a), (b))), \
4560 __altivec_link_error_invalid_argument ()))))))))))))))))))))))))))))
4561
4562 #define vec_lde(a, b) \
4563 __ch (__un_args_eq (unsigned char *, (b)), \
4564       ((vector unsigned char) __builtin_altivec_lvebx ((a), (b))), \
4565 __ch (__un_args_eq (unsigned char [], (b)), \
4566       ((vector unsigned char) __builtin_altivec_lvebx ((a), (b))), \
4567 __ch (__un_args_eq (signed char *, (b)), \
4568       ((vector signed char) __builtin_altivec_lvebx ((a), (b))), \
4569 __ch (__un_args_eq (signed char [], (b)), \
4570       ((vector signed char) __builtin_altivec_lvebx ((a), (b))), \
4571 __ch (__un_args_eq (unsigned short *, (b)), \
4572       ((vector unsigned short) __builtin_altivec_lvehx ((a), (b))), \
4573 __ch (__un_args_eq (unsigned short [], (b)), \
4574       ((vector unsigned short) __builtin_altivec_lvehx ((a), (b))), \
4575 __ch (__un_args_eq (signed short *, (b)), \
4576       ((vector signed short) __builtin_altivec_lvehx ((a), (b))), \
4577 __ch (__un_args_eq (signed short [], (b)), \
4578       ((vector signed short) __builtin_altivec_lvehx ((a), (b))), \
4579 __ch (__un_args_eq (unsigned int *, (b)), \
4580       ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \
4581 __ch (__un_args_eq (unsigned int [], (b)), \
4582       ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \
4583 __ch (__un_args_eq (signed int *, (b)), \
4584       ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \
4585 __ch (__un_args_eq (signed int [], (b)), \
4586       ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \
4587 __altivec_link_error_invalid_argument ()))))))))))))
4588
4589 #define vec_ldl(a, b) \
4590 __ch (__un_args_eq (vector unsigned char *, (b)), \
4591       ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \
4592 __ch (__un_args_eq (vector unsigned char [], (b)), \
4593       ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \
4594 __ch (__un_args_eq (unsigned char *, (b)), \
4595       ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \
4596 __ch (__un_args_eq (unsigned char [], (b)), \
4597       ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \
4598 __ch (__un_args_eq (vector signed char *, (b)), \
4599       ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \
4600 __ch (__un_args_eq (vector signed char [], (b)), \
4601       ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \
4602 __ch (__un_args_eq (signed char *, (b)), \
4603       ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \
4604 __ch (__un_args_eq (signed char [], (b)), \
4605       ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \
4606 __ch (__un_args_eq (vector unsigned short *, (b)), \
4607       ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \
4608 __ch (__un_args_eq (vector unsigned short [], (b)), \
4609       ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \
4610 __ch (__un_args_eq (unsigned short *, (b)), \
4611       ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \
4612 __ch (__un_args_eq (unsigned short [], (b)), \
4613       ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \
4614 __ch (__un_args_eq (vector signed short *, (b)), \
4615       ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \
4616 __ch (__un_args_eq (vector signed short [], (b)), \
4617       ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \
4618 __ch (__un_args_eq (signed short *, (b)), \
4619       ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \
4620 __ch (__un_args_eq (signed short [], (b)), \
4621       ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \
4622 __ch (__un_args_eq (vector unsigned int *, (b)), \
4623       ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
4624 __ch (__un_args_eq (vector unsigned int [], (b)), \
4625       ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
4626 __ch (__un_args_eq (unsigned int *, (b)), \
4627       ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
4628 __ch (__un_args_eq (unsigned int [], (b)), \
4629       ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
4630 __ch (__un_args_eq (vector signed int *, (b)), \
4631       ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
4632 __ch (__un_args_eq (vector signed int [], (b)), \
4633       ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
4634 __ch (__un_args_eq (signed int *, (b)), \
4635       ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
4636 __ch (__un_args_eq (signed int [], (b)), \
4637       ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
4638 __ch (__un_args_eq (vector float *, (b)), \
4639       ((vector float) __builtin_altivec_lvxl ((a), (b))), \
4640 __ch (__un_args_eq (vector float [], (b)), \
4641       ((vector float) __builtin_altivec_lvxl ((a), (b))), \
4642 __ch (__un_args_eq (float *, (b)), \
4643       ((vector float) __builtin_altivec_lvxl ((a), (b))), \
4644 __ch (__un_args_eq (float [], (b)), \
4645       ((vector float) __builtin_altivec_lvxl ((a), (b))), \
4646 __altivec_link_error_invalid_argument ()))))))))))))))))))))))))))))
4647
4648 #define vec_loge(a1) __builtin_altivec_vlogefp ((a1))
4649
4650 #define vec_lvsl(a1, a2) ((vector unsigned char) __builtin_altivec_lvsl ((a1), (a2)))
4651
4652 #define vec_lvsr(a1, a2) ((vector unsigned char) __builtin_altivec_lvsr ((a1), (a2)))
4653
4654 #define vec_madd(a1, a2, a3) (__builtin_altivec_vmaddfp ((a1), (a2), (a3)))
4655
4656 #define vec_vmaddfp(a1, a2, a3) ((vector float)(__builtin_altivec_vmaddfp ((a1), (a2), (a3))))
4657
4658 #define vec_madds(a1, a2, a3) __builtin_altivec_vmhaddshs ((a1), (a2), (a3))
4659
4660 #define vec_max(a1, a2) \
4661 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
4662       ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
4663 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
4664       ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
4665 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4666       ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
4667 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4668       ((vector signed char) __builtin_altivec_vmaxsb ((vector signed char) (a1), (vector signed char) (a2))), \
4669 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
4670       ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
4671 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
4672       ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
4673 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4674       ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
4675 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4676       ((vector signed short) __builtin_altivec_vmaxsh ((vector signed short) (a1), (vector signed short) (a2))), \
4677 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
4678       ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
4679 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
4680       ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
4681 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4682       ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
4683 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4684       ((vector signed int) __builtin_altivec_vmaxsw ((vector signed int) (a1), (vector signed int) (a2))), \
4685 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
4686       ((vector float) __builtin_altivec_vmaxfp ((vector float) (a1), (vector float) (a2))), \
4687     __altivec_link_error_invalid_argument ())))))))))))))
4688
4689 #define vec_mergeh(a1, a2) \
4690 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4691       ((vector signed char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \
4692 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4693       ((vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \
4694 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4695       ((vector signed short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \
4696 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4697       ((vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \
4698 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
4699       ((vector float) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
4700 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4701       ((vector signed int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
4702 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4703       ((vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
4704     __altivec_link_error_invalid_argument ())))))))
4705
4706 #define vec_mergel(a1, a2) \
4707 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4708       ((vector signed char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \
4709 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4710       ((vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \
4711 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4712       ((vector signed short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \
4713 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4714       ((vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \
4715 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
4716       ((vector float) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
4717 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4718       ((vector signed int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
4719 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4720       ((vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
4721     __altivec_link_error_invalid_argument ())))))))
4722
4723 #define vec_mfvscr()  (((vector unsigned short) __builtin_altivec_mfvscr ()))
4724
4725 #define vec_min(a1, a2) \
4726 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
4727       ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
4728 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
4729       ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
4730 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4731       ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
4732 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4733       ((vector signed char) __builtin_altivec_vminsb ((vector signed char) (a1), (vector signed char) (a2))), \
4734 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
4735       ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
4736 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
4737       ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
4738 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4739       ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
4740 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4741       ((vector signed short) __builtin_altivec_vminsh ((vector signed short) (a1), (vector signed short) (a2))), \
4742 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
4743       ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
4744 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
4745       ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
4746 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4747       ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
4748 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4749       ((vector signed int) __builtin_altivec_vminsw ((vector signed int) (a1), (vector signed int) (a2))), \
4750 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
4751       ((vector float) __builtin_altivec_vminfp ((vector float) (a1), (vector float) (a2))), \
4752     __altivec_link_error_invalid_argument ())))))))))))))
4753
4754 #define vec_mladd(a1, a2, a3) \
4755 __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \
4756       ((vector signed short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \
4757 __ch (__tern_args_eq (vector signed short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \
4758       ((vector signed short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \
4759 __ch (__tern_args_eq (vector unsigned short, (a1), vector signed short, (a2), vector signed short, (a3)), \
4760       ((vector signed short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \
4761 __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \
4762       ((vector unsigned short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \
4763     __altivec_link_error_invalid_argument ()))))
4764
4765 #define vec_mradds(a1, a2, a3) __builtin_altivec_vmhraddshs ((a1), (a2), (a3))
4766
4767 #define vec_msum(a1, a2, a3) \
4768 __ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned int, (a3)), \
4769       ((vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \
4770 __ch (__tern_args_eq (vector signed char, (a1), vector unsigned char, (a2), vector signed int, (a3)), \
4771       ((vector signed int) __builtin_altivec_vmsummbm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \
4772 __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \
4773       ((vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
4774 __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \
4775       ((vector signed int) __builtin_altivec_vmsumshm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
4776     __altivec_link_error_invalid_argument ()))))
4777
4778 #define vec_msums(a1, a2, a3) \
4779 __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \
4780       ((vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
4781 __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \
4782       ((vector signed int) __builtin_altivec_vmsumshs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
4783     __altivec_link_error_invalid_argument ()))
4784
4785 #define vec_mtvscr(a1) \
4786 __ch (__un_args_eq (vector signed int, (a1)), \
4787       __builtin_altivec_mtvscr ((vector signed int) (a1)), \
4788 __ch (__un_args_eq (vector unsigned int, (a1)), \
4789       __builtin_altivec_mtvscr ((vector signed int) (a1)), \
4790 __ch (__un_args_eq (vector signed short, (a1)), \
4791       __builtin_altivec_mtvscr ((vector signed int) (a1)), \
4792 __ch (__un_args_eq (vector unsigned short, (a1)), \
4793       __builtin_altivec_mtvscr ((vector signed int) (a1)), \
4794 __ch (__un_args_eq (vector signed char, (a1)), \
4795       __builtin_altivec_mtvscr ((vector signed int) (a1)), \
4796 __ch (__un_args_eq (vector unsigned char, (a1)), \
4797       __builtin_altivec_mtvscr ((vector signed int) (a1)), \
4798     __altivec_link_error_invalid_argument ()))))))
4799
4800 #define vec_mule(a1, a2) \
4801 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4802       ((vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) (a1), (vector signed char) (a2))), \
4803 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4804       ((vector signed short) __builtin_altivec_vmulesb ((vector signed char) (a1), (vector signed char) (a2))), \
4805 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4806       ((vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) (a1), (vector signed short) (a2))), \
4807 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4808       ((vector signed int) __builtin_altivec_vmulesh ((vector signed short) (a1), (vector signed short) (a2))), \
4809     __altivec_link_error_invalid_argument ()))))
4810
4811 #define vec_mulo(a1, a2) \
4812 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4813       ((vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) (a1), (vector signed char) (a2))), \
4814 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4815       ((vector signed short) __builtin_altivec_vmulosb ((vector signed char) (a1), (vector signed char) (a2))), \
4816 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4817       ((vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) (a1), (vector signed short) (a2))), \
4818 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4819       ((vector signed int) __builtin_altivec_vmulosh ((vector signed short) (a1), (vector signed short) (a2))), \
4820     __altivec_link_error_invalid_argument ()))))
4821
4822 #define vec_nmsub(a1, a2, a3) \
4823 __ch (__tern_args_eq (vector float, ((a1)), vector float, ((a2)) , vector float, ((a3))), \
4824       ((vector float) __builtin_altivec_vnmsubfp ((vector float) ((a1)), (vector float) ((a2)), (vector float)((a3)))), \
4825     __altivec_link_error_invalid_argument ())
4826
4827 #define vec_nor(a1, a2) \
4828 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
4829       ((vector float) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
4830 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4831       ((vector signed int) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
4832 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4833       ((vector unsigned int) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
4834 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4835       ((vector signed short) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
4836 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4837       ((vector unsigned short) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
4838 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4839       ((vector signed char) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
4840 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4841       ((vector unsigned char) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
4842     __altivec_link_error_invalid_argument ())))))))
4843
4844 #define vec_or(a1, a2) \
4845 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
4846       ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4847 __ch (__bin_args_eq (vector float, (a1), vector signed int, (a2)), \
4848       ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4849 __ch (__bin_args_eq (vector signed int, (a1), vector float, (a2)), \
4850       ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4851 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4852       ((vector signed int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4853 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
4854       ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4855 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
4856       ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4857 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4858       ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4859 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4860       ((vector signed short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4861 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
4862       ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4863 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
4864       ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4865 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4866       ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4867 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
4868       ((vector signed char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4869 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
4870       ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4871 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
4872       ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4873 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4874       ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
4875     __altivec_link_error_invalid_argument ())))))))))))))))
4876
4877 #define vec_pack(a1, a2) \
4878 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4879       ((vector signed char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \
4880 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4881       ((vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \
4882 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4883       ((vector signed short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \
4884 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4885       ((vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \
4886     __altivec_link_error_invalid_argument ()))))
4887
4888 #define vec_packpx(a1, a2) __builtin_altivec_vpkpx ((a1), (a2))
4889
4890 #define vec_packs(a1, a2) \
4891 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4892       ((vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) (a1), (vector signed short) (a2))), \
4893 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4894       ((vector signed char) __builtin_altivec_vpkshss ((vector signed short) (a1), (vector signed short) (a2))), \
4895 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4896       ((vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) (a1), (vector signed int) (a2))), \
4897 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4898       ((vector signed short) __builtin_altivec_vpkswss ((vector signed int) (a1), (vector signed int) (a2))), \
4899     __altivec_link_error_invalid_argument ()))))
4900
4901 #define vec_packsu(a1, a2) \
4902 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4903       ((vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) (a1), (vector signed short) (a2))), \
4904 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
4905       ((vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) (a1), (vector signed short) (a2))), \
4906 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4907       ((vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) (a1), (vector signed int) (a2))), \
4908 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
4909       ((vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) (a1), (vector signed int) (a2))), \
4910     __altivec_link_error_invalid_argument ()))))
4911
4912 #define vec_perm(a1, a2, a3) \
4913 __ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector unsigned char, (a3)), \
4914       ((vector float) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
4915 __ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector unsigned char, (a3)), \
4916       ((vector signed int) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
4917 __ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector unsigned char, (a3)), \
4918       ((vector unsigned int) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
4919 __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector unsigned char, (a3)), \
4920       ((vector signed short) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
4921 __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned char, (a3)), \
4922       ((vector unsigned short) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
4923 __ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector unsigned char, (a3)), \
4924       ((vector signed char) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
4925 __ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned char, (a3)), \
4926       ((vector unsigned char) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
4927     __altivec_link_error_invalid_argument ())))))))
4928
4929 #define vec_vperm(a1, a2, a3) \
4930 __ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned char, (a3)), \
4931       ((vector unsigned char) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
4932     __altivec_link_error_invalid_argument ())
4933
4934 #define vec_re(a1) __builtin_altivec_vrefp ((a1))
4935
4936 #define vec_vrefp(a1) __builtin_altivec_vrefp ((a1))
4937
4938 #define vec_rl(a1, a2) \
4939 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
4940       ((vector signed char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \
4941 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4942       ((vector unsigned char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \
4943 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
4944       ((vector signed short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \
4945 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4946       ((vector unsigned short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \
4947 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
4948       ((vector signed int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \
4949 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
4950       ((vector unsigned int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \
4951     __altivec_link_error_invalid_argument ()))))))
4952
4953 #define vec_round(a1) __builtin_altivec_vrfin ((a1))
4954
4955 #define vec_rsqrte(a1) __builtin_altivec_vrsqrtefp ((a1))
4956
4957 #define vec_sel(a1, a2, a3) \
4958 __ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector signed int, (a3)), \
4959       ((vector float) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4960 __ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector unsigned int, (a3)), \
4961       ((vector float) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4962 __ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector signed int, (a3)), \
4963       ((vector signed int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4964 __ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector unsigned int, (a3)), \
4965       ((vector signed int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4966 __ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector signed int, (a3)), \
4967       ((vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4968 __ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector unsigned int, (a3)), \
4969       ((vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4970 __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \
4971       ((vector signed short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4972 __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector unsigned short, (a3)), \
4973       ((vector signed short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4974 __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector signed short, (a3)), \
4975       ((vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4976 __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \
4977       ((vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4978 __ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector signed char, (a3)), \
4979       ((vector signed char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4980 __ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector unsigned char, (a3)), \
4981       ((vector signed char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4982 __ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector signed char, (a3)), \
4983       ((vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4984 __ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned char, (a3)), \
4985       ((vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
4986     __altivec_link_error_invalid_argument ()))))))))))))))
4987
4988 #define vec_sl(a1, a2) \
4989 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
4990       ((vector signed char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \
4991 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
4992       ((vector unsigned char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \
4993 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
4994       ((vector signed short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \
4995 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
4996       ((vector unsigned short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \
4997 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
4998       ((vector signed int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \
4999 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5000       ((vector unsigned int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \
5001     __altivec_link_error_invalid_argument ()))))))
5002
5003 #define vec_vsldoi(a1,a2,a3)   ((vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3)))
5004
5005 #define vec_sld(a1, a2, a3) \
5006 __ch (__tern_args_eq (vector float, (a1), vector float, (a2), int, (a3)), \
5007       ((vector float) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
5008 __ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), int, (a3)), \
5009       ((vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
5010 __ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), int, (a3)), \
5011       ((vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
5012 __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), int, (a3)), \
5013       ((vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
5014 __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), int, (a3)), \
5015       ((vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
5016 __ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), int, (a3)), \
5017       ((vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
5018 __ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), int, (a3)), \
5019       ((vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
5020     __altivec_link_error_invalid_argument ())))))))
5021
5022 #define vec_sll(a1, a2) \
5023 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5024       ((vector signed int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5025 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned short, (a2)), \
5026       ((vector signed int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5027 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \
5028       ((vector signed int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5029 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5030       ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5031 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned short, (a2)), \
5032       ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5033 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \
5034       ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5035 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned int, (a2)), \
5036       ((vector signed short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5037 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5038       ((vector signed short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5039 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \
5040       ((vector signed short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5041 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned int, (a2)), \
5042       ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5043 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5044       ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5045 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \
5046       ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5047 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned int, (a2)), \
5048       ((vector signed char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5049 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned short, (a2)), \
5050       ((vector signed char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5051 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5052       ((vector signed char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5053 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \
5054       ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5055 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned short, (a2)), \
5056       ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5057 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5058       ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
5059     __altivec_link_error_invalid_argument ()))))))))))))))))))
5060
5061 #define vec_slo(a1, a2) \
5062 __ch (__bin_args_eq (vector float, (a1), vector signed char, (a2)), \
5063       ((vector float) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5064 __ch (__bin_args_eq (vector float, (a1), vector unsigned char, (a2)), \
5065       ((vector float) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5066 __ch (__bin_args_eq (vector signed int, (a1), vector signed char, (a2)), \
5067       ((vector signed int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5068 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \
5069       ((vector signed int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5070 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed char, (a2)), \
5071       ((vector unsigned int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5072 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \
5073       ((vector unsigned int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5074 __ch (__bin_args_eq (vector signed short, (a1), vector signed char, (a2)), \
5075       ((vector signed short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5076 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \
5077       ((vector signed short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5078 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed char, (a2)), \
5079       ((vector unsigned short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5080 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \
5081       ((vector unsigned short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5082 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5083       ((vector signed char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5084 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5085       ((vector signed char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5086 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5087       ((vector unsigned char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5088 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5089       ((vector unsigned char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
5090     __altivec_link_error_invalid_argument ()))))))))))))))
5091
5092 #define vec_splat(a1, a2) \
5093 __ch (__bin_args_eq (vector signed char, ((a1)), int, ((a2))), \
5094       ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
5095 __ch (__bin_args_eq (vector unsigned char, ((a1)), int, ((a2))), \
5096       ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
5097 __ch (__bin_args_eq (vector signed short, ((a1)), int, ((a2))), \
5098       ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
5099 __ch (__bin_args_eq (vector unsigned short, ((a1)), int, ((a2))), \
5100       ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
5101 __ch (__bin_args_eq (vector float, ((a1)), int, ((a2))), \
5102       ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
5103 __ch (__bin_args_eq (vector signed int, ((a1)), int, ((a2))), \
5104       ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
5105 __ch (__bin_args_eq (vector unsigned int, ((a1)), int, ((a2))), \
5106       ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \
5107     __altivec_link_error_invalid_argument ())))))))
5108
5109 #define vec_splat_s8(a1) __builtin_altivec_vspltisb ((a1))
5110
5111 #define vec_splat_s16(a1) __builtin_altivec_vspltish ((a1))
5112
5113 #define vec_splat_s32(a1) __builtin_altivec_vspltisw ((a1))
5114
5115 #define vec_splat_u8(a1) ((vector unsigned char) __builtin_altivec_vspltisb ((a1)))
5116
5117 #define vec_splat_u16(a1) ((vector unsigned short) __builtin_altivec_vspltish ((a1)))
5118
5119 #define vec_splat_u32(a1) ((vector unsigned int) __builtin_altivec_vspltisw ((a1)))
5120
5121 #define vec_sr(a1, a2) \
5122 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5123       ((vector signed char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \
5124 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5125       ((vector unsigned char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \
5126 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5127       ((vector signed short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \
5128 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5129       ((vector unsigned short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \
5130 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5131       ((vector signed int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \
5132 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5133       ((vector unsigned int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \
5134     __altivec_link_error_invalid_argument ()))))))
5135
5136 #define vec_sra(a1, a2) \
5137 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5138       ((vector signed char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \
5139 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5140       ((vector unsigned char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \
5141 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5142       ((vector signed short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \
5143 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5144       ((vector unsigned short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \
5145 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5146       ((vector signed int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \
5147 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5148       ((vector unsigned int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \
5149     __altivec_link_error_invalid_argument ()))))))
5150
5151 #define vec_srl(a1, a2) \
5152 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5153       ((vector signed int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5154 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned short, (a2)), \
5155       ((vector signed int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5156 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \
5157       ((vector signed int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5158 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5159       ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5160 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned short, (a2)), \
5161       ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5162 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \
5163       ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5164 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned int, (a2)), \
5165       ((vector signed short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5166 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5167       ((vector signed short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5168 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \
5169       ((vector signed short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5170 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned int, (a2)), \
5171       ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5172 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5173       ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5174 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \
5175       ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5176 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned int, (a2)), \
5177       ((vector signed char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5178 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned short, (a2)), \
5179       ((vector signed char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5180 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5181       ((vector signed char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5182 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \
5183       ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5184 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned short, (a2)), \
5185       ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5186 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5187       ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
5188     __altivec_link_error_invalid_argument ()))))))))))))))))))
5189
5190 #define vec_sro(a1, a2) \
5191 __ch (__bin_args_eq (vector float, (a1), vector signed char, (a2)), \
5192       ((vector float) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5193 __ch (__bin_args_eq (vector float, (a1), vector unsigned char, (a2)), \
5194       ((vector float) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5195 __ch (__bin_args_eq (vector signed int, (a1), vector signed char, (a2)), \
5196       ((vector signed int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5197 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \
5198       ((vector signed int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5199 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed char, (a2)), \
5200       ((vector unsigned int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5201 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \
5202       ((vector unsigned int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5203 __ch (__bin_args_eq (vector signed short, (a1), vector signed char, (a2)), \
5204       ((vector signed short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5205 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \
5206       ((vector signed short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5207 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed char, (a2)), \
5208       ((vector unsigned short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5209 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \
5210       ((vector unsigned short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5211 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5212       ((vector signed char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5213 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5214       ((vector signed char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5215 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5216       ((vector unsigned char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5217 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5218       ((vector unsigned char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
5219     __altivec_link_error_invalid_argument ()))))))))))))))
5220
5221 #define vec_st(a1, a2, a3) \
5222   __builtin_altivec_stvx ((vector signed int) (a1), (a2), (a3))
5223
5224 #define vec_stl(a1, a2, a3) \
5225   __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (a3))
5226
5227 #define vec_ste(a, b, c) \
5228 __ch (__un_args_eq (vector unsigned char, (a)), \
5229       __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \
5230 __ch (__un_args_eq (vector signed char, (a)), \
5231       __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \
5232 __ch (__un_args_eq (vector unsigned short, (a)), \
5233      __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \
5234 __ch (__un_args_eq (vector signed short, (a)), \
5235      __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \
5236 __ch (__un_args_eq (vector unsigned int, (a)), \
5237      __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
5238 __ch (__un_args_eq (vector signed int, (a)), \
5239      __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
5240 __ch (__un_args_eq (vector float, (a)), \
5241      __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
5242      __altivec_link_error_invalid_argument ())))))))
5243
5244 #define vec_sub(a1, a2) \
5245 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5246       ((vector signed char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
5247 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5248       ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
5249 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5250       ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
5251 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5252       ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
5253 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5254       ((vector signed short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
5255 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5256       ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
5257 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5258       ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
5259 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5260       ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
5261 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5262       ((vector signed int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
5263 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5264       ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
5265 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5266       ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
5267 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5268       ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
5269 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
5270       ((vector float) __builtin_altivec_vsubfp ((vector float) (a1), (vector float) (a2))), \
5271     __altivec_link_error_invalid_argument ())))))))))))))
5272
5273 #define vec_subc(a1, a2) ((vector unsigned int) __builtin_altivec_vsubcuw ((vector unsigned int) (a1), (vector unsigned int) (a2)))
5274
5275 #define vec_subs(a1, a2) \
5276 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5277       ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
5278 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5279       ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
5280 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5281       ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
5282 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5283       ((vector signed char) __builtin_altivec_vsubsbs ((vector signed char) (a1), (vector signed char) (a2))), \
5284 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5285       ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
5286 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5287       ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
5288 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5289       ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
5290 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5291       ((vector signed short) __builtin_altivec_vsubshs ((vector signed short) (a1), (vector signed short) (a2))), \
5292 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5293       ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
5294 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5295       ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
5296 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5297       ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
5298 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5299       ((vector signed int) __builtin_altivec_vsubsws ((vector signed int) (a1), (vector signed int) (a2))), \
5300     __altivec_link_error_invalid_argument ()))))))))))))
5301
5302 #define vec_sum4s(a1, a2) \
5303 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \
5304       ((vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) (a1), (vector signed int) (a2))), \
5305 __ch (__bin_args_eq (vector signed char, (a1), vector signed int, (a2)), \
5306       ((vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) (a1), (vector signed int) (a2))), \
5307 __ch (__bin_args_eq (vector signed short, (a1), vector signed int, (a2)), \
5308       ((vector signed int) __builtin_altivec_vsum4shs ((vector signed short) (a1), (vector signed int) (a2))), \
5309     __altivec_link_error_invalid_argument ())))
5310
5311 #define vec_sum2s(a1, a2) __builtin_altivec_vsum2sws ((a1), (a2))
5312
5313 #define vec_sums(a1, a2) __builtin_altivec_vsumsws ((a1), (a2))
5314
5315 #define vec_trunc(a1) __builtin_altivec_vrfiz ((a1))
5316
5317 #define vec_unpackh(a1) \
5318 __ch (__un_args_eq (vector signed char, (a1)), \
5319       ((vector signed short) __builtin_altivec_vupkhsb ((vector signed char) (a1))), \
5320 __ch (__un_args_eq (vector signed short, (a1)), \
5321       ((vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) (a1))), \
5322 __ch (__un_args_eq (vector signed short, (a1)), \
5323       ((vector signed int) __builtin_altivec_vupkhsh ((vector signed short) (a1))), \
5324     __altivec_link_error_invalid_argument ())))
5325
5326 #define vec_unpackl(a1) \
5327 __ch (__un_args_eq (vector signed char, (a1)), \
5328       ((vector signed short) __builtin_altivec_vupklsb ((vector signed char) (a1))), \
5329 __ch (__un_args_eq (vector signed short, (a1)), \
5330       ((vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) (a1))), \
5331 __ch (__un_args_eq (vector signed short, (a1)), \
5332       ((vector signed int) __builtin_altivec_vupklsh ((vector signed short) (a1))), \
5333     __altivec_link_error_invalid_argument ())))
5334
5335 #define vec_xor(a1, a2) \
5336 __ch (__bin_args_eq (vector float, ((a1)), vector float, ((a2))), \
5337       ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5338 __ch (__bin_args_eq (vector float, ((a1)), vector unsigned int, ((a2))), \
5339       ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5340 __ch (__bin_args_eq (vector unsigned int, ((a1)), vector float, ((a2))), \
5341       ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5342 __ch (__bin_args_eq (vector signed int, ((a1)), vector signed int, ((a2))), \
5343       ((vector signed int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5344 __ch (__bin_args_eq (vector unsigned int, ((a1)), vector unsigned int, ((a2))), \
5345       ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5346 __ch (__bin_args_eq (vector signed int, ((a1)), vector unsigned int, ((a2))), \
5347       ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5348 __ch (__bin_args_eq (vector unsigned int, ((a1)), vector signed int, ((a2))), \
5349       ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5350 __ch (__bin_args_eq (vector unsigned int, ((a1)), vector unsigned int, ((a2))), \
5351       ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5352 __ch (__bin_args_eq (vector unsigned short, ((a1)), vector unsigned short, ((a2))), \
5353       ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5354 __ch (__bin_args_eq (vector signed short, ((a1)), vector unsigned short, ((a2))), \
5355       ((vector signed short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5356 __ch (__bin_args_eq (vector unsigned short, ((a1)), vector signed short, ((a2))), \
5357       ((vector signed short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5358 __ch (__bin_args_eq (vector unsigned short, ((a1)), vector unsigned short, ((a2))), \
5359       ((vector signed short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5360 __ch (__bin_args_eq (vector signed short, ((a1)), vector signed short, ((a2))), \
5361       ((vector signed short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5362 __ch (__bin_args_eq (vector signed short, ((a1)), vector unsigned short, ((a2))), \
5363       ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5364 __ch (__bin_args_eq (vector unsigned short, ((a1)), vector signed short, ((a2))), \
5365       ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5366 __ch (__bin_args_eq (vector unsigned short, ((a1)), vector unsigned short, ((a2))), \
5367       ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5368 __ch (__bin_args_eq (vector unsigned char, ((a1)), vector unsigned char, ((a2))), \
5369       ((vector unsigned char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5370 __ch (__bin_args_eq (vector signed char, ((a1)), vector unsigned char, ((a2))), \
5371       ((vector unsigned char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5372 __ch (__bin_args_eq (vector signed char, ((a1)), vector signed char, ((a2))), \
5373       ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5374 __ch (__bin_args_eq (vector unsigned char, ((a1)), vector unsigned char, ((a2))), \
5375       ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5376 __ch (__bin_args_eq (vector signed char, ((a1)), vector unsigned char, ((a2))), \
5377       ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5378 __ch (__bin_args_eq (vector unsigned char, ((a1)), vector signed char, ((a2))), \
5379       ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
5380     __altivec_link_error_invalid_argument ()))))))))))))))))))))))
5381
5382 /* Predicates.  */
5383
5384 #define vec_all_eq(a1, a2) \
5385 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5386       __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
5387 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5388       __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
5389 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5390       __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
5391 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5392       __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
5393 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5394       __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
5395 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5396       __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
5397 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5398       __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
5399 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5400       __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
5401 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5402       __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
5403 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5404       __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
5405 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5406       __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
5407 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5408       __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
5409 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
5410       __builtin_altivec_vcmpeqfp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \
5411     __altivec_link_error_invalid_argument ())))))))))))))
5412
5413 #define vec_all_ge(a1, a2) \
5414 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5415       __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
5416 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5417       __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
5418 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5419       __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
5420 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5421       __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
5422 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5423       __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
5424 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5425       __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
5426 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5427       __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
5428 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5429       __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
5430 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5431       __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
5432 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5433       __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
5434 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5435       __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
5436 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5437       __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
5438 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
5439       __builtin_altivec_vcmpgefp_p (__CR6_EQ, (vector float) (a1), (vector float) (a2)), \
5440     __altivec_link_error_invalid_argument ())))))))))))))
5441
5442 #define vec_all_gt(a1, a2) \
5443 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5444       __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
5445 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5446       __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
5447 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5448       __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
5449 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5450       __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
5451 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5452       __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
5453 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5454       __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
5455 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5456       __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
5457 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5458       __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
5459 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5460       __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
5461 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5462       __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
5463 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5464       __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
5465 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5466       __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
5467 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
5468       __builtin_altivec_vcmpgtfp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \
5469     __altivec_link_error_invalid_argument ())))))))))))))
5470
5471 #define vec_all_in(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ, (a1), (a2))
5472
5473 #define vec_all_le(a1, a2) \
5474 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5475       __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
5476 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5477       __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
5478 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5479       __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
5480 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5481       __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
5482 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5483       __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
5484 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5485       __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
5486 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5487       __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
5488 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5489       __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
5490 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5491       __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
5492 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5493       __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
5494 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5495       __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
5496 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5497       __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
5498 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
5499       __builtin_altivec_vcmpgefp_p (__CR6_LT, (vector float) (a2), (vector float) (a1)), \
5500     __altivec_link_error_invalid_argument ())))))))))))))
5501
5502 #define vec_all_lt(a1, a2) \
5503 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5504       __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
5505 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5506       __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
5507 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5508       __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
5509 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5510       __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
5511 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5512       __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
5513 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5514       __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
5515 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5516       __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
5517 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5518       __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
5519 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5520       __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
5521 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5522       __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
5523 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5524       __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
5525 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5526       __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
5527 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
5528       __builtin_altivec_vcmpgtfp_p (__CR6_LT, (vector float) (a2), (vector float) (a1)), \
5529     __altivec_link_error_invalid_argument ())))))))))))))
5530
5531 #define vec_all_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1))
5532
5533 #define vec_all_ne(a1, a2) \
5534 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5535       __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
5536 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5537       __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
5538 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5539       __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
5540 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5541       __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
5542 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5543       __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
5544 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5545       __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
5546 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5547       __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
5548 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5549       __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
5550 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5551       __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
5552 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5553       __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
5554 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5555       __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
5556 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5557       __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
5558 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
5559       __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (vector float) (a1), (vector float) (a2)), \
5560     __altivec_link_error_invalid_argument ())))))))))))))
5561
5562 #define vec_all_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a1), (a2))
5563
5564 #define vec_all_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a1), (a2))
5565
5566 #define vec_all_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a2), (a1))
5567
5568 #define vec_all_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a2), (a1))
5569
5570 #define vec_all_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1))
5571
5572 #define vec_any_eq(a1, a2) \
5573 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5574       __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5575 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5576       __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5577 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5578       __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5579 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5580       __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5581 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5582       __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5583 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5584       __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5585 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5586       __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5587 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5588       __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5589 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5590       __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5591 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5592       __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5593 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5594       __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5595 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5596       __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5597 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
5598       __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \
5599     __altivec_link_error_invalid_argument ())))))))))))))
5600
5601 #define vec_any_ge(a1, a2) \
5602 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5603       __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
5604 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5605       __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
5606 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5607       __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
5608 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5609       __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
5610 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5611       __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
5612 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5613       __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
5614 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5615       __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
5616 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5617       __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
5618 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5619       __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
5620 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5621       __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
5622 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5623       __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
5624 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5625       __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
5626 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
5627       __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \
5628     __altivec_link_error_invalid_argument ())))))))))))))
5629
5630 #define vec_any_gt(a1, a2) \
5631 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5632       __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5633 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5634       __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5635 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5636       __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5637 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5638       __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5639 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5640       __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5641 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5642       __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5643 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5644       __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5645 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5646       __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5647 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5648       __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5649 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5650       __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5651 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5652       __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5653 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5654       __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5655 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
5656       __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \
5657     __altivec_link_error_invalid_argument ())))))))))))))
5658
5659 #define vec_any_le(a1, a2) \
5660 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5661       __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5662 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5663       __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5664 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5665       __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5666 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5667       __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5668 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5669       __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5670 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5671       __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5672 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5673       __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5674 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5675       __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5676 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5677       __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5678 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5679       __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5680 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5681       __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5682 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5683       __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5684 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
5685       __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, (vector float) (a2), (vector float) (a1)), \
5686     __altivec_link_error_invalid_argument ())))))))))))))
5687
5688 #define vec_any_lt(a1, a2) \
5689 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5690       __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
5691 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5692       __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
5693 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5694       __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
5695 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5696       __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
5697 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5698       __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
5699 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5700       __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
5701 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5702       __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
5703 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5704       __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
5705 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5706       __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
5707 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5708       __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
5709 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5710       __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
5711 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5712       __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
5713 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
5714       __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, (vector float) (a2), (vector float) (a1)), \
5715     __altivec_link_error_invalid_argument ())))))))))))))
5716
5717 #define vec_any_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a1)
5718
5719 #define vec_any_ne(a1, a2) \
5720 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
5721       __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5722 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
5723       __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5724 __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
5725       __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5726 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
5727       __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
5728 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
5729       __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5730 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
5731       __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5732 __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
5733       __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5734 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
5735       __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
5736 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
5737       __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5738 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
5739       __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5740 __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
5741       __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5742 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
5743       __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
5744 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
5745       __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, (vector float) (a1), (vector float) (a2)), \
5746     __altivec_link_error_invalid_argument ())))))))))))))
5747
5748 #define vec_any_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a1), (a2))
5749
5750 #define vec_any_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a1), (a2))
5751
5752 #define vec_any_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a2), (a1))
5753
5754 #define vec_any_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a2), (a1))
5755
5756 #define vec_any_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (a1), (a1))
5757
5758 #define vec_any_out(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, (a1), (a2))
5759
5760 #endif /* __cplusplus */
5761
5762 #endif /* _ALTIVEC_H */