OSDN Git Service

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