altivec.h revision 90075
150276Speter/* PowerPC AltiVec include file.
2184989Srafan   Copyright (C) 2002 Free Software Foundation, Inc.
350276Speter   Contributed by Aldy Hernandez (aldyh@redhat.com).
450276Speter
550276SpeterThis file is part of GNU CC.
650276Speter
750276SpeterGNU CC is free software; you can redistribute it and/or modify
850276Speterit under the terms of the GNU General Public License as published by
950276Speterthe Free Software Foundation; either version 2, or (at your option)
1050276Speterany later version.
1150276Speter
1250276SpeterGNU CC is distributed in the hope that it will be useful,
1350276Speterbut WITHOUT ANY WARRANTY; without even the implied warranty of
1450276SpeterMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1550276SpeterGNU General Public License for more details.
1650276Speter
1750276SpeterYou should have received a copy of the GNU General Public License
1850276Speteralong with GNU CC; see the file COPYING.  If not, write to
1950276Speterthe Free Software Foundation, 59 Temple Place - Suite 330,
2050276SpeterBoston, MA 02111-1307, USA.  */
2150276Speter
2250276Speter/* As a special exception, if you include this header file into source
2350276Speter   files compiled by GCC, this header file does not by itself cause
2450276Speter   the resulting executable to be covered by the GNU General Public
2550276Speter   License.  This exception does not however invalidate any other
2650276Speter   reasons why the executable file might be covered by the GNU General
2750276Speter   Public License.  */
2850276Speter
2950276Speter/* Implemented to conform to the specification included in the AltiVec
3050276Speter   Technology Programming Interface Manual (ALTIVECPIM/D 6/1999 Rev 0).  */
3150276Speter
3250276Speter#ifndef _ALTIVEC_H
3350276Speter#define _ALTIVEC_H 1
3450276Speter
3550276Speter/* Required by Motorola specs.  */
3650276Speter#define __VEC__ 10206
3750276Speter
3850276Speter#define __ALTIVEC__ 1
3950276Speter
4050276Speter#define __vector __attribute__((vector_size(16)))
41174993Srafan
4250276Speter/* Dummy prototype.  */
4366963Speterextern void __altivec_link_error_invalid_argument ();
4466963Speter
45184989Srafan/* You are allowed to undef this for C++ compatability.  */
4650276Speter#define vector __vector
4750276Speter
4866963Speter/* Helper macros.  */
4950276Speter
50184989Srafan#define __bin_args_eq(xtype, x, ytype, y)				\
5150276Speter	(__builtin_types_compatible_p (xtype, typeof (x))		\
5250276Speter	 && __builtin_types_compatible_p (ytype, typeof (y)))
5350276Speter
5450276Speter#define __un_args_eq(xtype, x)						\
5550276Speter	__builtin_types_compatible_p (xtype, typeof (x))
5666963Speter
5766963Speter#define __tern_args_eq(xtype, x, ytype, y, ztype, z)                    \
5866963Speter        (__builtin_types_compatible_p (xtype, typeof (x))               \
5966963Speter         && __builtin_types_compatible_p (ytype, typeof (y))		\
6066963Speter	 && __builtin_types_compatible_p (ztype, typeof (z)))
6166963Speter
6250276Speter#define __ch(x, y, z)	__builtin_choose_expr (x, y, z)
6366963Speter
6466963Speter#ifdef __cplusplus
6550276Speter
6662449Speter/* C++ stuff here.  */
6762449Speter
6850276Speter#else /* not C++ */
6962449Speter
7050276Speter/* Hairy macros that implement the AltiVec high-level programming
7162449Speter   interface for C.  */
72166124Srafan
7362449Speter#define vec_add(a1, a2) \
7462449Speter__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
7562449Speter      (vector signed char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2), \
76166124Srafan__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
7750276Speter      (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2), \
7850276Speter__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
7962449Speter      (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2), \
8062449Speter__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
8150276Speter      (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2), \
8266963Speter__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
83166124Srafan      (vector signed short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2), \
8450276Speter__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
8550276Speter      (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2), \
8666963Speter__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
8766963Speter      (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2), \
8866963Speter__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
8966963Speter      (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2), \
9066963Speter__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
9166963Speter      (vector signed int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2), \
9266963Speter__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
9366963Speter      (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2), \
9466963Speter__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
9566963Speter      (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2), \
9666963Speter__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
9766963Speter      (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2), \
9866963Speter__ch (__bin_args_eq (vector float, a1, vector float, a2), \
9966963Speter      (vector float) __builtin_altivec_vaddfp ((vector float) a1, (vector float) a2), \
10066963Speter    __altivec_link_error_invalid_argument ())))))))))))))
10166963Speter
10276726Speter#define vec_addc(a1, a2) __builtin_altivec_vaddcuw (a1, a2)
10366963Speter
10466963Speter#define vec_adds(a1, a2) \
10566963Speter__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
10666963Speter      (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2), \
10766963Speter__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
10866963Speter      (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2), \
10966963Speter__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
11066963Speter      (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2), \
11166963Speter__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
11266963Speter      (vector signed char) __builtin_altivec_vaddsbs ((vector signed char) a1, (vector signed char) a2), \
11366963Speter__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
11466963Speter      (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2), \
11566963Speter__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
11666963Speter      (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2), \
11766963Speter__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
11866963Speter      (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2), \
11966963Speter__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
12066963Speter      (vector signed short) __builtin_altivec_vaddshs ((vector signed short) a1, (vector signed short) a2), \
12166963Speter__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
12266963Speter      (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2), \
12366963Speter__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
12466963Speter      (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2), \
12566963Speter__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
12666963Speter      (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2), \
12766963Speter__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
12866963Speter      (vector signed int) __builtin_altivec_vaddsws ((vector signed int) a1, (vector signed int) a2), \
12962449Speter    __altivec_link_error_invalid_argument ()))))))))))))
130166124Srafan
131166124Srafan#define vec_and(a1, a2) \
132166124Srafan__ch (__bin_args_eq (vector float, a1, vector float, a2), \
133166124Srafan      (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
134166124Srafan__ch (__bin_args_eq (vector float, a1, vector signed int, a2), \
135166124Srafan      (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
136166124Srafan__ch (__bin_args_eq (vector signed int, a1, vector float, a2), \
137166124Srafan      (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
138166124Srafan__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
139166124Srafan      (vector signed int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
140166124Srafan__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
141166124Srafan      (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
142166124Srafan__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
143166124Srafan      (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
144166124Srafan__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
145166124Srafan      (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
146166124Srafan__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
147166124Srafan      (vector signed short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
148166124Srafan__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
14962449Speter      (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
15050276Speter__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
15162449Speter      (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
15262449Speter__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
15362449Speter      (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
15466963Speter__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
15562449Speter      (vector signed char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
15650276Speter__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
15797049Speter      (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
15897049Speter__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
15997049Speter      (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
16066963Speter__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
16162449Speter      (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
16262449Speter    __altivec_link_error_invalid_argument ())))))))))))))))
16350276Speter
16462449Speter#define vec_andc(a1, a2) \
16550276Speter__ch (__bin_args_eq (vector float, a1, vector float, a2), \
16666963Speter      (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
16762449Speter__ch (__bin_args_eq (vector float, a1, vector signed int, a2), \
16862449Speter      (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
16962449Speter__ch (__bin_args_eq (vector signed int, a1, vector float, a2), \
17062449Speter      (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
17162449Speter__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
17250276Speter      (vector signed int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
17366963Speter__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
17462449Speter      (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
17562449Speter__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
17662449Speter      (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
17762449Speter__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
17862449Speter      (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
17950276Speter__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
18097049Speter      (vector signed short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
18162449Speter__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
182166124Srafan      (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
18397049Speter__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
18497049Speter      (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
18597049Speter__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
18697049Speter      (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
18797049Speter__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
188166124Srafan      (vector signed char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
189166124Srafan__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
19097049Speter      (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
19197049Speter__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
19297049Speter      (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
19397049Speter__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
19497049Speter      (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
19562449Speter    __altivec_link_error_invalid_argument ())))))))))))))))
19662449Speter
19762449Speter#define vec_avg(a1, a2) \
19862449Speter__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
19962449Speter      (vector unsigned char) __builtin_altivec_vavgub ((vector signed char) a1, (vector signed char) a2), \
20062449Speter__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
20162449Speter      (vector signed char) __builtin_altivec_vavgsb ((vector signed char) a1, (vector signed char) a2), \
20262449Speter__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
203166124Srafan      (vector unsigned short) __builtin_altivec_vavguh ((vector signed short) a1, (vector signed short) a2), \
20462449Speter__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
20562449Speter      (vector signed short) __builtin_altivec_vavgsh ((vector signed short) a1, (vector signed short) a2), \
20662449Speter__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
20750276Speter      (vector unsigned int) __builtin_altivec_vavguw ((vector signed int) a1, (vector signed int) a2), \
20862449Speter__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
20962449Speter      (vector signed int) __builtin_altivec_vavgsw ((vector signed int) a1, (vector signed int) a2), \
21062449Speter    __altivec_link_error_invalid_argument ()))))))
21162449Speter
21262449Speter#define vec_ceil(a1) __builtin_altivec_vrfip (a1)
21362449Speter
21462449Speter#define vec_cmpb(a1, a2) __builtin_altivec_vcmpbfp (a1, a2)
21562449Speter
21662449Speter#define vec_cmpeq(a1, a2) \
21750276Speter__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
21862449Speter      (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2), \
21962449Speter__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
22062449Speter      (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2), \
22162449Speter__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
222166124Srafan      (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2), \
22362449Speter__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
22462449Speter      (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2), \
22562449Speter__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
22662449Speter      (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2), \
22762449Speter__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
22850276Speter      (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2), \
22950276Speter__ch (__bin_args_eq (vector float, a1, vector float, a2), \
23062449Speter      (vector signed int) __builtin_altivec_vcmpeqfp ((vector float) a1, (vector float) a2), \
23162449Speter    __altivec_link_error_invalid_argument ())))))))
23250276Speter
23366963Speter#define vec_cmpge(a1, a2) __builtin_altivec_vcmpgefp (a1, a2)
23462449Speter
23562449Speter#define vec_cmpgt(a1, a2) \
236166124Srafan__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
23762449Speter      (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2), \
23862449Speter__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
23962449Speter      (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2), \
24062449Speter__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
24162449Speter      (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2), \
24262449Speter__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
24362449Speter      (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2), \
24462449Speter__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
245166124Srafan      (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2), \
24662449Speter__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
24762449Speter      (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2), \
24862449Speter__ch (__bin_args_eq (vector float, a1, vector float, a2), \
24962449Speter      (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2), \
25062449Speter    __altivec_link_error_invalid_argument ())))))))
25150276Speter
25262449Speter#define vec_cmple(a1, a2) __builtin_altivec_vcmpgefp (a1, a2)
25350276Speter
25466963Speter#define vec_cmplt(a1, a2) \
25562449Speter__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
256166124Srafan      (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2), \
257166124Srafan__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
25850276Speter      (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2), \
25962449Speter__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
26062449Speter      (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2), \
26162449Speter__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
26250276Speter      (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2), \
26362449Speter__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
26462449Speter      (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2), \
26562449Speter__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
26662449Speter      (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2), \
26766963Speter__ch (__bin_args_eq (vector float, a1, vector float, a2), \
26862449Speter      (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2), \
26962449Speter    __altivec_link_error_invalid_argument ())))))))
27050276Speter
27162449Speter#define vec_ctf(a1, a2) \
27262449Speter__ch (__bin_args_eq (vector unsigned int, a1, const char, a2), \
27362449Speter      (vector float) __builtin_altivec_vcfux ((vector signed int) a1, (const char) a2), \
27462449Speter__ch (__bin_args_eq (vector signed int, a1, const char, a2), \
27562449Speter      (vector float) __builtin_altivec_vcfsx ((vector signed int) a1, (const char) a2), \
27662449Speter    __altivec_link_error_invalid_argument ()))
27750276Speter
27862449Speter#define vec_cts(a1, a2) __builtin_altivec_vctsxs (a1, a2)
27962449Speter
28062449Speter#define vec_ctu(a1, a2) __builtin_altivec_vctuxs (a1, a2)
28162449Speter
28250276Speter#define vec_dss(a1) __builtin_altivec_dss (a1)
28362449Speter
28462449Speter#define vec_dssall() __builtin_altivec_dssall ()
28562449Speter
28662449Speter#define vec_dst(a1, a2, a3) __builtin_altivec_dst (a1, a2, a3)
28762449Speter
28862449Speter#define vec_dstst(a1, a2, a3) __builtin_altivec_dstst (a1, a2, a3)
28950276Speter
29050276Speter#define vec_dststt(a1, a2, a3) __builtin_altivec_dststt (a1, a2, a3)
29162449Speter
292166124Srafan#define vec_dstt(a1, a2, a3) __builtin_altivec_dstt (a1, a2, a3)
29362449Speter
29462449Speter#define vec_expte(a1) __builtin_altivec_vexptefp (a1)
295166124Srafan
29662449Speter#define vec_floor(a1) __builtin_altivec_vrfim (a1)
297166124Srafan
29866963Speter#define vec_ld(a, b) \
29962449Speter__ch (__un_args_eq (vector unsigned char *, b), \
30062449Speter      (vector unsigned char) __builtin_altivec_lvx (a, b), \
301166124Srafan__ch (__un_args_eq (unsigned char *, b), \
302166124Srafan      (vector unsigned char) __builtin_altivec_lvx (a, b), \
303166124Srafan__ch (__un_args_eq (vector signed char *, b), \
304166124Srafan      (vector signed char) __builtin_altivec_lvx (a, b), \
30550276Speter__ch (__un_args_eq (signed char *, b), \
30662449Speter      (vector signed char) __builtin_altivec_lvx (a, b), \
30762449Speter__ch (__un_args_eq (vector unsigned short *, b), \
30862449Speter      (vector unsigned short) __builtin_altivec_lvx (a, b), \
30962449Speter__ch (__un_args_eq (unsigned short *, b), \
31050276Speter      (vector unsigned short) __builtin_altivec_lvx (a, b), \
31162449Speter__ch (__un_args_eq (vector signed short *, b), \
31266963Speter      (vector signed short) __builtin_altivec_lvx (a, b), \
31366963Speter__ch (__un_args_eq (signed short *, b), \
31466963Speter      (vector signed short) __builtin_altivec_lvx (a, b), \
31566963Speter__ch (__un_args_eq (vector unsigned int *, b), \
31666963Speter      (vector unsigned int) __builtin_altivec_lvx (a, b), \
31762449Speter__ch (__un_args_eq (unsigned int *, b), \
318166124Srafan      (vector unsigned int) __builtin_altivec_lvx (a, b), \
31966963Speter__ch (__un_args_eq (vector signed int *, b), \
32066963Speter      (vector signed int) __builtin_altivec_lvx (a, b), \
32166963Speter__ch (__un_args_eq (signed int *, b), \
32250276Speter      (vector signed int) __builtin_altivec_lvx (a, b), \
32366963Speter__ch (__un_args_eq (vector float *, b), \
32466963Speter      (vector float) __builtin_altivec_lvx (a, b), \
325166124Srafan__ch (__un_args_eq (float *, b), \
32666963Speter      (vector float) __builtin_altivec_lvx (a, b), \
32766963Speter__altivec_link_error_invalid_argument ()))))))))))))))
328166124Srafan
32966963Speter#define vec_lde(a, b) \
330174993Srafan__ch (__un_args_eq (unsigned char *, b), \
33166963Speter      (vector unsigned char) __builtin_altivec_lvebx (a, b), \
332166124Srafan__ch (__un_args_eq (signed char *, b), \
333166124Srafan      (vector signed char) __builtin_altivec_lvebx (a, b), \
334166124Srafan__ch (__un_args_eq (unsigned short *, b), \
335166124Srafan      (vector unsigned short) __builtin_altivec_lvehx (a, b), \
336166124Srafan__ch (__un_args_eq (signed short *, b), \
337166124Srafan      (vector signed short) __builtin_altivec_lvehx (a, b), \
338166124Srafan__ch (__un_args_eq (unsigned int *, b), \
339166124Srafan      (vector unsigned int) __builtin_altivec_lvewx (a, b), \
340166124Srafan__ch (__un_args_eq (signed int *, b), \
341166124Srafan      (vector signed int) __builtin_altivec_lvewx (a, b), \
342166124Srafan__altivec_link_error_invalid_argument ()))))))
343166124Srafan
34466963Speter#define vec_ldl(a, b) \
34566963Speter__ch (__un_args_eq (vector unsigned char *, b), \
34650276Speter      (vector unsigned char) __builtin_altivec_lvxl (a, b), \
34762449Speter__ch (__un_args_eq (unsigned char *, b), \
34862449Speter      (vector unsigned char) __builtin_altivec_lvxl (a, b), \
34962449Speter__ch (__un_args_eq (vector signed char *, b), \
350166124Srafan      (vector signed char) __builtin_altivec_lvxl (a, b), \
35162449Speter__ch (__un_args_eq (signed char *, b), \
352166124Srafan      (vector signed char) __builtin_altivec_lvxl (a, b), \
35350276Speter__ch (__un_args_eq (vector unsigned short *, b), \
35450276Speter      (vector unsigned short) __builtin_altivec_lvxl (a, b), \
35562449Speter__ch (__un_args_eq (unsigned short *, b), \
35662449Speter      (vector unsigned short) __builtin_altivec_lvxl (a, b), \
35750276Speter__ch (__un_args_eq (vector signed short *, b), \
35866963Speter      (vector signed short) __builtin_altivec_lvxl (a, b), \
35966963Speter__ch (__un_args_eq (signed short *, b), \
36066963Speter      (vector signed short) __builtin_altivec_lvxl (a, b), \
36162449Speter__ch (__un_args_eq (vector unsigned int *, b), \
36262449Speter      (vector unsigned int) __builtin_altivec_lvxl (a, b), \
363166124Srafan__ch (__un_args_eq (unsigned int *, b), \
36450276Speter      (vector unsigned int) __builtin_altivec_lvxl (a, b), \
36597049Speter__ch (__un_args_eq (vector signed int *, b), \
36650276Speter      (vector signed int) __builtin_altivec_lvxl (a, b), \
36762449Speter__ch (__un_args_eq (signed int *, b), \
36850276Speter      (vector signed int) __builtin_altivec_lvxl (a, b), \
369174993Srafan__ch (__un_args_eq (vector float *, b), \
37062449Speter      (vector float) __builtin_altivec_lvxl (a, b), \
37162449Speter__ch (__un_args_eq (float *, b), \
37266963Speter      (vector float) __builtin_altivec_lvxl (a, b), \
37362449Speter__altivec_link_error_invalid_argument ()))))))))))))))
37462449Speter
37562449Speter#define vec_loge(a1) __builtin_altivec_vlogefp (a1)
37662449Speter
37762449Speter#define vec_lvsl(a1, a2) __builtin_altivec_lvsl (a1, a2)
37866963Speter
37966963Speter#define vec_lvsr(a1, a2) __builtin_altivec_lvsr (a1, a2)
380166124Srafan
38162449Speter#define vec_madd(a1, a2, a3) __builtin_altivec_vmaddfp (a1, a2, a3)
38262449Speter
38362449Speter#define vec_madds(a1, a2, a3) __builtin_altivec_vmhaddshs (a1, a2, a3)
38450276Speter
38566963Speter#define vec_max(a1, a2) \
38650276Speter__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
38766963Speter      (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2), \
38866963Speter__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
38966963Speter      (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2), \
39066963Speter__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
39166963Speter      (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2), \
39266963Speter__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
39366963Speter      (vector signed char) __builtin_altivec_vmaxsb ((vector signed char) a1, (vector signed char) a2), \
39466963Speter__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
39566963Speter      (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2), \
39666963Speter__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
39766963Speter      (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2), \
39866963Speter__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
39962449Speter      (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2), \
40050276Speter__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
40162449Speter      (vector signed short) __builtin_altivec_vmaxsh ((vector signed short) a1, (vector signed short) a2), \
40262449Speter__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
40350276Speter      (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2), \
40462449Speter__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
40562449Speter      (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2), \
40650276Speter__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
40766963Speter      (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2), \
40866963Speter__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
40966963Speter      (vector signed int) __builtin_altivec_vmaxsw ((vector signed int) a1, (vector signed int) a2), \
410166124Srafan__ch (__bin_args_eq (vector float, a1, vector float, a2), \
41166963Speter      (vector float) __builtin_altivec_vmaxfp ((vector float) a1, (vector float) a2), \
41250276Speter    __altivec_link_error_invalid_argument ())))))))))))))
41362449Speter
41462449Speter#define vec_mergeh(a1, a2) \
41562449Speter__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
41662449Speter      (vector signed char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2), \
41750276Speter__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
41862449Speter      (vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2), \
41962449Speter__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
42097049Speter      (vector signed short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2), \
42162449Speter__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
42297049Speter      (vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2), \
42362449Speter__ch (__bin_args_eq (vector float, a1, vector float, a2), \
42497049Speter      (vector float) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2), \
42597049Speter__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
42697049Speter      (vector signed int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2), \
42750276Speter__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
42862449Speter      (vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2), \
42950276Speter    __altivec_link_error_invalid_argument ())))))))
43097049Speter
431166124Srafan#define vec_mergel(a1, a2) \
432166124Srafan__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
433166124Srafan      (vector signed char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2), \
434166124Srafan__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
435166124Srafan      (vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2), \
43662449Speter__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
43762449Speter      (vector signed short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2), \
438166124Srafan__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
43950276Speter      (vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2), \
440__ch (__bin_args_eq (vector float, a1, vector float, a2), \
441      (vector float) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2), \
442__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
443      (vector signed int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2), \
444__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
445      (vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2), \
446    __altivec_link_error_invalid_argument ())))))))
447
448#define vec_mfvscr() __builtin_altivec_mfvscr ()
449
450#define vec_min(a1, a2) \
451__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
452      (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2), \
453__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
454      (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2), \
455__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
456      (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2), \
457__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
458      (vector signed char) __builtin_altivec_vminsb ((vector signed char) a1, (vector signed char) a2), \
459__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
460      (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2), \
461__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
462      (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2), \
463__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
464      (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2), \
465__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
466      (vector signed short) __builtin_altivec_vminsh ((vector signed short) a1, (vector signed short) a2), \
467__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
468      (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2), \
469__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
470      (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2), \
471__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
472      (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2), \
473__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
474      (vector signed int) __builtin_altivec_vminsw ((vector signed int) a1, (vector signed int) a2), \
475__ch (__bin_args_eq (vector float, a1, vector float, a2), \
476      (vector float) __builtin_altivec_vminfp ((vector float) a1, (vector float) a2), \
477    __altivec_link_error_invalid_argument ())))))))))))))
478
479#define vec_mladd(a1, a2, a3) \
480__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, vector signed short, a3), \
481      (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3), \
482__ch (__tern_args_eq (vector signed short, a1, vector unsigned short, a2, vector unsigned short, a3), \
483      (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3), \
484__ch (__tern_args_eq (vector unsigned short, a1, vector signed short, a2, vector signed short, a3), \
485      (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3), \
486__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, vector unsigned short, a3), \
487      (vector unsigned short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3), \
488    __altivec_link_error_invalid_argument ()))))
489
490#define vec_mradds(a1, a2, a3) __builtin_altivec_vmhraddshs (a1, a2, a3)
491
492#define vec_msum(a1, a2, a3) \
493__ch (__tern_args_eq (vector unsigned char, a1, vector unsigned char, a2, vector unsigned int, a3), \
494      (vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3), \
495__ch (__tern_args_eq (vector signed char, a1, vector unsigned char, a2, vector signed int, a3), \
496      (vector signed int) __builtin_altivec_vmsummbm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3), \
497__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, vector unsigned int, a3), \
498      (vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3), \
499__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, vector signed int, a3), \
500      (vector signed int) __builtin_altivec_vmsumshm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3), \
501    __altivec_link_error_invalid_argument ()))))
502
503#define vec_msums(a1, a2, a3) \
504__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, vector unsigned int, a3), \
505      (vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3), \
506__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, vector signed int, a3), \
507      (vector signed int) __builtin_altivec_vmsumshs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3), \
508    __altivec_link_error_invalid_argument ()))
509
510#define vec_mtvscr(a1) \
511__ch (__un_args_eq (vector signed int, a1), \
512      __builtin_altivec_mtvscr ((vector signed int) a1), \
513__ch (__un_args_eq (vector unsigned int, a1), \
514      __builtin_altivec_mtvscr ((vector signed int) a1), \
515__ch (__un_args_eq (vector signed short, a1), \
516      __builtin_altivec_mtvscr ((vector signed int) a1), \
517__ch (__un_args_eq (vector unsigned short, a1), \
518      __builtin_altivec_mtvscr ((vector signed int) a1), \
519__ch (__un_args_eq (vector signed char, a1), \
520      __builtin_altivec_mtvscr ((vector signed int) a1), \
521__ch (__un_args_eq (vector unsigned char, a1), \
522      __builtin_altivec_mtvscr ((vector signed int) a1), \
523    __altivec_link_error_invalid_argument ()))))))
524
525#define vec_mule(a1, a2) \
526__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
527      (vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) a1, (vector signed char) a2), \
528__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
529      (vector signed short) __builtin_altivec_vmulesb ((vector signed char) a1, (vector signed char) a2), \
530__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
531      (vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) a1, (vector signed short) a2), \
532__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
533      (vector signed int) __builtin_altivec_vmulesh ((vector signed short) a1, (vector signed short) a2), \
534    __altivec_link_error_invalid_argument ()))))
535
536#define vec_mulo(a1, a2) \
537__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
538      (vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) a1, (vector signed char) a2), \
539__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
540      (vector signed short) __builtin_altivec_vmulosb ((vector signed char) a1, (vector signed char) a2), \
541__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
542      (vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) a1, (vector signed short) a2), \
543__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
544      (vector signed int) __builtin_altivec_vmulosh ((vector signed short) a1, (vector signed short) a2), \
545    __altivec_link_error_invalid_argument ()))))
546
547#define vec_nmsub(a1, a2, a3) __builtin_altivec_vnmsubfp (a1, a2, a3)
548
549#define vec_nor(a1, a2) \
550__ch (__bin_args_eq (vector float, a1, vector float, a2), \
551      (vector float) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
552__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
553      (vector signed int) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
554__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
555      (vector unsigned int) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
556__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
557      (vector signed short) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
558__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
559      (vector unsigned short) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
560__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
561      (vector signed char) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
562__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
563      (vector unsigned char) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
564    __altivec_link_error_invalid_argument ())))))))
565
566#define vec_or(a1, a2) \
567__ch (__bin_args_eq (vector float, a1, vector float, a2), \
568      (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
569__ch (__bin_args_eq (vector float, a1, vector signed int, a2), \
570      (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
571__ch (__bin_args_eq (vector signed int, a1, vector float, a2), \
572      (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
573__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
574      (vector signed int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
575__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
576      (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
577__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
578      (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
579__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
580      (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
581__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
582      (vector signed short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
583__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
584      (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
585__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
586      (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
587__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
588      (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
589__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
590      (vector signed char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
591__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
592      (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
593__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
594      (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
595__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
596      (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
597    __altivec_link_error_invalid_argument ())))))))))))))))
598
599#define vec_pack(a1, a2) \
600__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
601      (vector signed char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2), \
602__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
603      (vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2), \
604__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
605      (vector signed short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2), \
606__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
607      (vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2), \
608    __altivec_link_error_invalid_argument ()))))
609
610#define vec_packpx(a1, a2) __builtin_altivec_vpkpx (a1, a2)
611
612#define vec_packs(a1, a2) \
613__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
614      (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2), \
615__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
616      (vector signed char) __builtin_altivec_vpkshss ((vector signed short) a1, (vector signed short) a2), \
617__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
618      (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2), \
619__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
620      (vector signed short) __builtin_altivec_vpkswss ((vector signed int) a1, (vector signed int) a2), \
621    __altivec_link_error_invalid_argument ()))))
622
623#define vec_packsu(a1, a2) \
624__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
625      (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2), \
626__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
627      (vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) a1, (vector signed short) a2), \
628__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
629      (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2), \
630__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
631      (vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) a1, (vector signed int) a2), \
632    __altivec_link_error_invalid_argument ()))))
633
634#define vec_perm(a1, a2, a3, a4) \
635__ch (__tern_args_eq (vector float, a1, vector float, a2, vector unsigned char, a3), \
636      (vector float) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
637__ch (__tern_args_eq (vector signed int, a1, vector signed int, a2, vector unsigned char, a3), \
638      (vector signed int) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
639__ch (__tern_args_eq (vector unsigned int, a1, vector unsigned int, a2, vector unsigned char, a3), \
640      (vector unsigned int) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
641__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, vector unsigned char, a3), \
642      (vector signed short) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
643__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, vector unsigned char, a3), \
644      (vector unsigned short) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
645__ch (__tern_args_eq (vector signed char, a1, vector signed char, a2, vector unsigned char, a3), \
646      (vector signed char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
647__ch (__tern_args_eq (vector unsigned char, a1, vector unsigned char, a2, vector unsigned char, a3), \
648      (vector unsigned char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
649    __altivec_link_error_invalid_argument ())))))))
650
651#define vec_re(a1) __builtin_altivec_vrefp (a1)
652
653#define vec_rl(a1, a2) \
654__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
655      (vector signed char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2), \
656__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
657      (vector unsigned char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2), \
658__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
659      (vector signed short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2), \
660__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
661      (vector unsigned short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2), \
662__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
663      (vector signed int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2), \
664__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
665      (vector unsigned int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2), \
666    __altivec_link_error_invalid_argument ()))))))
667
668#define vec_round(a1) __builtin_altivec_vrfin (a1)
669
670#define vec_rsqrte(a1) __builtin_altivec_vrsqrtefp (a1)
671
672#define vec_sel(a1, a2, a3) \
673__ch (__tern_args_eq (vector float, a1, vector float, a2, vector signed int, a3), \
674      (vector float) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
675__ch (__tern_args_eq (vector float, a1, vector float, a2, vector unsigned int, a3), \
676      (vector float) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
677__ch (__tern_args_eq (vector signed int, a1, vector signed int, a2, vector signed int, a3), \
678      (vector signed int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
679__ch (__tern_args_eq (vector signed int, a1, vector signed int, a2, vector unsigned int, a3), \
680      (vector signed int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
681__ch (__tern_args_eq (vector unsigned int, a1, vector unsigned int, a2, vector signed int, a3), \
682      (vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
683__ch (__tern_args_eq (vector unsigned int, a1, vector unsigned int, a2, vector unsigned int, a3), \
684      (vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
685__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, vector signed short, a3), \
686      (vector signed short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
687__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, vector unsigned short, a3), \
688      (vector signed short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
689__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, vector signed short, a3), \
690      (vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
691__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, vector unsigned short, a3), \
692      (vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
693__ch (__tern_args_eq (vector signed char, a1, vector signed char, a2, vector signed char, a3), \
694      (vector signed char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
695__ch (__tern_args_eq (vector signed char, a1, vector signed char, a2, vector unsigned char, a3), \
696      (vector signed char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
697__ch (__tern_args_eq (vector unsigned char, a1, vector unsigned char, a2, vector signed char, a3), \
698      (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
699__ch (__tern_args_eq (vector unsigned char, a1, vector unsigned char, a2, vector unsigned char, a3), \
700      (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
701    __altivec_link_error_invalid_argument ()))))))))))))))
702
703#define vec_sl(a1, a2) \
704__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
705      (vector signed char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2), \
706__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
707      (vector unsigned char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2), \
708__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
709      (vector signed short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2), \
710__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
711      (vector unsigned short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2), \
712__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
713      (vector signed int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2), \
714__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
715      (vector unsigned int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2), \
716    __altivec_link_error_invalid_argument ()))))))
717
718#define vec_sld(a1, a2, a3) \
719__ch (__tern_args_eq (vector float, a1, vector float, a2, const char, a3), \
720      (vector float) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
721__ch (__tern_args_eq (vector signed int, a1, vector signed int, a2, const char, a3), \
722      (vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
723__ch (__tern_args_eq (vector unsigned int, a1, vector unsigned int, a2, const char, a3), \
724      (vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
725__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, const char, a3), \
726      (vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
727__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, const char, a3), \
728      (vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
729__ch (__tern_args_eq (vector signed char, a1, vector signed char, a2, const char, a3), \
730      (vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
731__ch (__tern_args_eq (vector unsigned char, a1, vector unsigned char, a2, const char, a3), \
732      (vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
733    __altivec_link_error_invalid_argument ())))))))
734
735#define vec_sll(a1, a2) \
736__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
737      (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
738__ch (__bin_args_eq (vector signed int, a1, vector unsigned short, a2), \
739      (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
740__ch (__bin_args_eq (vector signed int, a1, vector unsigned char, a2), \
741      (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
742__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
743      (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
744__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned short, a2), \
745      (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
746__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned char, a2), \
747      (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
748__ch (__bin_args_eq (vector signed short, a1, vector unsigned int, a2), \
749      (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
750__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
751      (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
752__ch (__bin_args_eq (vector signed short, a1, vector unsigned char, a2), \
753      (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
754__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned int, a2), \
755      (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
756__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
757      (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
758__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned char, a2), \
759      (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
760__ch (__bin_args_eq (vector signed char, a1, vector unsigned int, a2), \
761      (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
762__ch (__bin_args_eq (vector signed char, a1, vector unsigned short, a2), \
763      (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
764__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
765      (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
766__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned int, a2), \
767      (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
768__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned short, a2), \
769      (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
770__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
771      (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
772    __altivec_link_error_invalid_argument ()))))))))))))))))))
773
774#define vec_slo(a1, a2) \
775__ch (__bin_args_eq (vector float, a1, vector signed char, a2), \
776      (vector float) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
777__ch (__bin_args_eq (vector float, a1, vector unsigned char, a2), \
778      (vector float) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
779__ch (__bin_args_eq (vector signed int, a1, vector signed char, a2), \
780      (vector signed int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
781__ch (__bin_args_eq (vector signed int, a1, vector unsigned char, a2), \
782      (vector signed int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
783__ch (__bin_args_eq (vector unsigned int, a1, vector signed char, a2), \
784      (vector unsigned int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
785__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned char, a2), \
786      (vector unsigned int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
787__ch (__bin_args_eq (vector signed short, a1, vector signed char, a2), \
788      (vector signed short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
789__ch (__bin_args_eq (vector signed short, a1, vector unsigned char, a2), \
790      (vector signed short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
791__ch (__bin_args_eq (vector unsigned short, a1, vector signed char, a2), \
792      (vector unsigned short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
793__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned char, a2), \
794      (vector unsigned short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
795__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
796      (vector signed char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
797__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
798      (vector signed char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
799__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
800      (vector unsigned char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
801__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
802      (vector unsigned char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
803    __altivec_link_error_invalid_argument ()))))))))))))))
804
805#define vec_splat(a1, a2) \
806__ch (__bin_args_eq (vector signed char, a1, const char, a2), \
807      (vector signed char) __builtin_altivec_vspltb ((vector signed char) a1, (const char) a2), \
808__ch (__bin_args_eq (vector unsigned char, a1, const char, a2), \
809      (vector unsigned char) __builtin_altivec_vspltb ((vector signed char) a1, (const char) a2), \
810__ch (__bin_args_eq (vector signed short, a1, const char, a2), \
811      (vector signed short) __builtin_altivec_vsplth ((vector signed short) a1, (const char) a2), \
812__ch (__bin_args_eq (vector unsigned short, a1, const char, a2), \
813      (vector unsigned short) __builtin_altivec_vsplth ((vector signed short) a1, (const char) a2), \
814__ch (__bin_args_eq (vector float, a1, const char, a2), \
815      (vector float) __builtin_altivec_vspltw ((vector signed int) a1, (const char) a2), \
816__ch (__bin_args_eq (vector signed int, a1, const char, a2), \
817      (vector signed int) __builtin_altivec_vspltw ((vector signed int) a1, (const char) a2), \
818__ch (__bin_args_eq (vector unsigned int, a1, const char, a2), \
819      (vector unsigned int) __builtin_altivec_vspltw ((vector signed int) a1, (const char) a2), \
820    __altivec_link_error_invalid_argument ())))))))
821
822#define vec_splat_s8(a1) __builtin_altivec_vspltisb (a1)
823
824#define vec_splat_s16(a1) __builtin_altivec_vspltish (a1)
825
826#define vec_splat_s32(a1) __builtin_altivec_vspltisw (a1)
827
828#define vec_splat_u8(a1) __builtin_altivec_vspltisb (a1)
829
830#define vec_splat_u16(a1) __builtin_altivec_vspltish (a1)
831
832#define vec_splat_u32(a1) __builtin_altivec_vspltisw (a1)
833
834#define vec_sr(a1, a2) \
835__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
836      (vector signed char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2), \
837__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
838      (vector unsigned char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2), \
839__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
840      (vector signed short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2), \
841__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
842      (vector unsigned short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2), \
843__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
844      (vector signed int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2), \
845__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
846      (vector unsigned int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2), \
847    __altivec_link_error_invalid_argument ()))))))
848
849#define vec_sra(a1, a2) \
850__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
851      (vector signed char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2), \
852__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
853      (vector unsigned char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2), \
854__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
855      (vector signed short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2), \
856__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
857      (vector unsigned short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2), \
858__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
859      (vector signed int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2), \
860__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
861      (vector unsigned int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2), \
862    __altivec_link_error_invalid_argument ()))))))
863
864#define vec_srl(a1, a2) \
865__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
866      (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
867__ch (__bin_args_eq (vector signed int, a1, vector unsigned short, a2), \
868      (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
869__ch (__bin_args_eq (vector signed int, a1, vector unsigned char, a2), \
870      (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
871__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
872      (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
873__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned short, a2), \
874      (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
875__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned char, a2), \
876      (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
877__ch (__bin_args_eq (vector signed short, a1, vector unsigned int, a2), \
878      (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
879__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
880      (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
881__ch (__bin_args_eq (vector signed short, a1, vector unsigned char, a2), \
882      (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
883__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned int, a2), \
884      (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
885__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
886      (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
887__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned char, a2), \
888      (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
889__ch (__bin_args_eq (vector signed char, a1, vector unsigned int, a2), \
890      (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
891__ch (__bin_args_eq (vector signed char, a1, vector unsigned short, a2), \
892      (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
893__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
894      (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
895__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned int, a2), \
896      (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
897__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned short, a2), \
898      (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
899__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
900      (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
901    __altivec_link_error_invalid_argument ()))))))))))))))))))
902
903#define vec_sro(a1, a2) \
904__ch (__bin_args_eq (vector float, a1, vector signed char, a2), \
905      (vector float) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
906__ch (__bin_args_eq (vector float, a1, vector unsigned char, a2), \
907      (vector float) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
908__ch (__bin_args_eq (vector signed int, a1, vector signed char, a2), \
909      (vector signed int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
910__ch (__bin_args_eq (vector signed int, a1, vector unsigned char, a2), \
911      (vector signed int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
912__ch (__bin_args_eq (vector unsigned int, a1, vector signed char, a2), \
913      (vector unsigned int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
914__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned char, a2), \
915      (vector unsigned int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
916__ch (__bin_args_eq (vector signed short, a1, vector signed char, a2), \
917      (vector signed short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
918__ch (__bin_args_eq (vector signed short, a1, vector unsigned char, a2), \
919      (vector signed short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
920__ch (__bin_args_eq (vector unsigned short, a1, vector signed char, a2), \
921      (vector unsigned short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
922__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned char, a2), \
923      (vector unsigned short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
924__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
925      (vector signed char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
926__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
927      (vector signed char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
928__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
929      (vector unsigned char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
930__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
931      (vector unsigned char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
932    __altivec_link_error_invalid_argument ()))))))))))))))
933
934#define vec_st(a1, a2, a3) \
935  __builtin_altivec_stvx ((vector signed int) a1, a2, a3)
936
937#define vec_stl(a1, a2, a3) \
938  __builtin_altivec_stvxl ((vector signed int) a1, a2, a3)
939
940#define vec_ste(a, b, c) \
941__ch (__un_args_eq (vector unsigned char, a), \
942      __builtin_altivec_stvebx ((vector signed char) a, b, c), \
943__ch (__un_args_eq (vector signed char, a), \
944      __builtin_altivec_stvebx ((vector signed char) a, b, c), \
945__ch (__un_args_eq (vector unsigned short, a), \
946     __builtin_altivec_stvehx ((vector signed short) a, b, c), \
947__ch (__un_args_eq (vector signed short, a), \
948     __builtin_altivec_stvehx ((vector signed short) a, b, c), \
949__ch (__un_args_eq (vector unsigned int, a), \
950     __builtin_altivec_stvewx ((vector signed int) a, b, c), \
951__ch (__un_args_eq (vector signed int, a), \
952     __builtin_altivec_stvewx ((vector signed int) a, b, c), \
953__ch (__un_args_eq (vector float, a), \
954     __builtin_altivec_stvewx ((vector signed int) a, b, c), \
955     __altivec_link_error_invalid_argument ())))))))
956
957#define vec_sub(a1, a2) \
958__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
959      (vector signed char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2), \
960__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
961      (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2), \
962__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
963      (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2), \
964__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
965      (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2), \
966__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
967      (vector signed short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2), \
968__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
969      (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2), \
970__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
971      (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2), \
972__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
973      (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2), \
974__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
975      (vector signed int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2), \
976__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
977      (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2), \
978__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
979      (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2), \
980__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
981      (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2), \
982__ch (__bin_args_eq (vector float, a1, vector float, a2), \
983      (vector float) __builtin_altivec_vsubfp ((vector float) a1, (vector float) a2), \
984    __altivec_link_error_invalid_argument ())))))))))))))
985
986#define vec_subc(a1, a2) __builtin_altivec_vsubcuw (a1, a2)
987
988#define vec_subs(a1, a2) \
989__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
990      (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2), \
991__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
992      (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2), \
993__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
994      (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2), \
995__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
996      (vector signed char) __builtin_altivec_vsubsbs ((vector signed char) a1, (vector signed char) a2), \
997__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
998      (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2), \
999__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1000      (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2), \
1001__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1002      (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2), \
1003__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1004      (vector signed short) __builtin_altivec_vsubshs ((vector signed short) a1, (vector signed short) a2), \
1005__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1006      (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2), \
1007__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1008      (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2), \
1009__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1010      (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2), \
1011__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1012      (vector signed int) __builtin_altivec_vsubsws ((vector signed int) a1, (vector signed int) a2), \
1013    __altivec_link_error_invalid_argument ()))))))))))))
1014
1015#define vec_sum4s(a1, a2) \
1016__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned int, a2), \
1017      (vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) a1, (vector signed int) a2), \
1018__ch (__bin_args_eq (vector signed char, a1, vector signed int, a2), \
1019      (vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) a1, (vector signed int) a2), \
1020__ch (__bin_args_eq (vector signed short, a1, vector signed int, a2), \
1021      (vector signed int) __builtin_altivec_vsum4shs ((vector signed short) a1, (vector signed int) a2), \
1022    __altivec_link_error_invalid_argument ())))
1023
1024#define vec_sum2s(a1, a2) __builtin_altivec_vsum2sws (a1, a2)
1025
1026#define vec_sums(a1, a2) __builtin_altivec_vsumsws (a1, a2)
1027
1028#define vec_trunc(a1) __builtin_altivec_vrfiz (a1)
1029
1030#define vec_unpackh(a1) \
1031__ch (__un_args_eq (vector signed char, a1), \
1032      (vector signed short) __builtin_altivec_vupkhsb ((vector signed char) a1), \
1033__ch (__un_args_eq (vector signed short, a1), \
1034      (vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) a1), \
1035__ch (__un_args_eq (vector signed short, a1), \
1036      (vector signed int) __builtin_altivec_vupkhsh ((vector signed short) a1), \
1037    __altivec_link_error_invalid_argument ())))
1038
1039#define vec_unpackl(a1) \
1040__ch (__un_args_eq (vector signed char, a1), \
1041      (vector signed short) __builtin_altivec_vupklsb ((vector signed char) a1), \
1042__ch (__un_args_eq (vector signed short, a1), \
1043      (vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) a1), \
1044__ch (__un_args_eq (vector signed short, a1), \
1045      (vector signed int) __builtin_altivec_vupklsh ((vector signed short) a1), \
1046    __altivec_link_error_invalid_argument ())))
1047
1048#define vec_xor(a1, a2) \
1049__ch (__bin_args_eq (vector float, a1, vector float, a2), \
1050      (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1051__ch (__bin_args_eq (vector float, a1, vector signed int, a2), \
1052      (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1053__ch (__bin_args_eq (vector signed int, a1, vector float, a2), \
1054      (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1055__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1056      (vector signed int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1057__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1058      (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1059__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1060      (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1061__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1062      (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1063__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1064      (vector signed short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1065__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
1066      (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1067__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1068      (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1069__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1070      (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1071__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
1072      (vector signed char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1073__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
1074      (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1075__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
1076      (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1077__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
1078      (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
1079    __altivec_link_error_invalid_argument ())))))))))))))))
1080
1081#define vec_all_eq(a1, a2) \
1082__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
1083      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1084__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
1085      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1086__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
1087      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1088__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
1089      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1090__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
1091      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1092__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1093      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1094__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1095      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1096__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1097      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1098__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1099      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1100__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1101      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1102__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1103      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1104__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1105      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1106__ch (__bin_args_eq (vector float, a1, vector float, a2), \
1107      (vector signed int) __builtin_altivec_vcmpeqfp_p ((vector float) a1, (vector float) a2), \
1108    __altivec_link_error_invalid_argument ())))))))))))))
1109
1110#define vec_all_ge(a1, a2) \
1111__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
1112      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1113__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
1114      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1115__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
1116      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1117__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
1118      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
1119__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
1120      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1121__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1122      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1123__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1124      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1125__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1126      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
1127__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1128      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1129__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1130      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1131__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1132      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1133__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1134      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
1135__ch (__bin_args_eq (vector float, a1, vector float, a2), \
1136      (vector signed int) __builtin_altivec_vcmpgefp_p ((vector float) a1, (vector float) a2), \
1137    __altivec_link_error_invalid_argument ())))))))))))))
1138
1139#define vec_all_gt(a1, a2) \
1140__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
1141      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1142__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
1143      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1144__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
1145      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1146__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
1147      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
1148__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
1149      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1150__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1151      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1152__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1153      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1154__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1155      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
1156__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1157      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1158__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1159      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1160__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1161      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1162__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1163      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
1164__ch (__bin_args_eq (vector float, a1, vector float, a2), \
1165      (vector signed int) __builtin_altivec_vcmpgtfp_p ((vector float) a1, (vector float) a2), \
1166    __altivec_link_error_invalid_argument ())))))))))))))
1167
1168#define vec_all_in(a1, a2) __builtin_altivec_vcmpbfp_p (a1, a2)
1169
1170#define vec_all_le(a1, a2) \
1171__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
1172      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1173__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
1174      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1175__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
1176      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1177__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
1178      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
1179__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
1180      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1181__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1182      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1183__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1184      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1185__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1186      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
1187__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1188      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1189__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1190      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1191__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1192      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1193__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1194      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
1195__ch (__bin_args_eq (vector float, a1, vector float, a2), \
1196      (vector signed int) __builtin_altivec_vcmpgefp_p ((vector float) a1, (vector float) a2), \
1197    __altivec_link_error_invalid_argument ())))))))))))))
1198
1199#define vec_all_lt(a1, a2) \
1200__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
1201      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1202__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
1203      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1204__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
1205      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1206__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
1207      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
1208__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
1209      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1210__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1211      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1212__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1213      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1214__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1215      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
1216__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1217      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1218__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1219      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1220__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1221      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1222__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1223      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
1224__ch (__bin_args_eq (vector float, a1, vector float, a2), \
1225      (vector signed int) __builtin_altivec_vcmpgtfp_p ((vector float) a1, (vector float) a2), \
1226    __altivec_link_error_invalid_argument ())))))))))))))
1227
1228#define vec_all_nan(a1) __builtin_altivec_vcmpeqfp_p (a1)
1229
1230#define vec_all_ne(a1, a2) \
1231__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
1232      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1233__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
1234      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1235__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
1236      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1237__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
1238      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1239__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
1240      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1241__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1242      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1243__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1244      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1245__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1246      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1247__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1248      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1249__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1250      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1251__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1252      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1253__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1254      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1255__ch (__bin_args_eq (vector float, a1, vector float, a2), \
1256      (vector signed int) __builtin_altivec_vcmpeqfp_p ((vector float) a1, (vector float) a2), \
1257    __altivec_link_error_invalid_argument ())))))))))))))
1258
1259#define vec_all_nge(a1, a2) __builtin_altivec_vcmpgefp_p (a1, a2)
1260
1261#define vec_all_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (a1, a2)
1262
1263#define vec_all_nle(a1, a2) __builtin_altivec_vcmpgefp_p (a1, a2)
1264
1265#define vec_all_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (a1, a2)
1266
1267#define vec_all_numeric(a1) __builtin_altivec_vcmpeqfp_p (a1)
1268
1269#define vec_any_eq(a1, a2) \
1270__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
1271      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1272__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
1273      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1274__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
1275      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1276__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
1277      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1278__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
1279      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1280__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1281      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1282__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1283      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1284__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1285      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1286__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1287      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1288__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1289      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1290__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1291      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1292__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1293      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1294__ch (__bin_args_eq (vector float, a1, vector float, a2), \
1295      (vector signed int) __builtin_altivec_vcmpeqfp_p ((vector float) a1, (vector float) a2), \
1296    __altivec_link_error_invalid_argument ())))))))))))))
1297
1298#define vec_any_ge(a1, a2) \
1299__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
1300      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1301__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
1302      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1303__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
1304      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1305__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
1306      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
1307__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
1308      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1309__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1310      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1311__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1312      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1313__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1314      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
1315__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1316      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1317__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1318      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1319__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1320      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1321__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1322      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
1323__ch (__bin_args_eq (vector float, a1, vector float, a2), \
1324      (vector signed int) __builtin_altivec_vcmpgefp_p ((vector float) a1, (vector float) a2), \
1325    __altivec_link_error_invalid_argument ())))))))))))))
1326
1327#define vec_any_gt(a1, a2) \
1328__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
1329      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1330__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
1331      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1332__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
1333      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1334__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
1335      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
1336__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
1337      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1338__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1339      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1340__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1341      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1342__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1343      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
1344__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1345      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1346__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1347      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1348__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1349      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1350__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1351      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
1352__ch (__bin_args_eq (vector float, a1, vector float, a2), \
1353      (vector signed int) __builtin_altivec_vcmpgtfp_p ((vector float) a1, (vector float) a2), \
1354    __altivec_link_error_invalid_argument ())))))))))))))
1355
1356#define vec_any_le(a1, a2) \
1357__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
1358      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1359__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
1360      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1361__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
1362      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1363__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
1364      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
1365__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
1366      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1367__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1368      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1369__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1370      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1371__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1372      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
1373__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1374      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1375__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1376      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1377__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1378      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1379__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1380      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
1381__ch (__bin_args_eq (vector float, a1, vector float, a2), \
1382      (vector signed int) __builtin_altivec_vcmpgefp_p ((vector float) a1, (vector float) a2), \
1383    __altivec_link_error_invalid_argument ())))))))))))))
1384
1385#define vec_any_lt(a1, a2) \
1386__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
1387      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1388__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
1389      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1390__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
1391      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
1392__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
1393      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
1394__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
1395      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1396__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1397      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1398__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1399      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
1400__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1401      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
1402__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1403      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1404__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1405      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1406__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1407      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
1408__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1409      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
1410__ch (__bin_args_eq (vector float, a1, vector float, a2), \
1411      (vector signed int) __builtin_altivec_vcmpgtfp_p ((vector float) a1, (vector float) a2), \
1412    __altivec_link_error_invalid_argument ())))))))))))))
1413
1414#define vec_any_nan(a1) __builtin_altivec_vcmpeqfp_p (a1)
1415
1416#define vec_any_ne(a1, a2) \
1417__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
1418      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1419__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
1420      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1421__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
1422      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1423__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
1424      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
1425__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
1426      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1427__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
1428      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1429__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
1430      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1431__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
1432      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
1433__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
1434      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1435__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
1436      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1437__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
1438      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1439__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
1440      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
1441__ch (__bin_args_eq (vector float, a1, vector float, a2), \
1442      (vector signed int) __builtin_altivec_vcmpeqfp_p ((vector float) a1, (vector float) a2), \
1443    __altivec_link_error_invalid_argument ())))))))))))))
1444
1445#define vec_any_nge(a1, a2) __builtin_altivec_vcmpgefp_p (a1, a2)
1446
1447#define vec_any_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (a1, a2)
1448
1449#define vec_any_nle(a1, a2) __builtin_altivec_vcmpgefp_p (a1, a2)
1450
1451#define vec_any_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (a1, a2)
1452
1453#define vec_any_numeric(a1) __builtin_altivec_vcmpeqfp_p (a1)
1454
1455#define vec_any_out(a1, a2) __builtin_altivec_vcmpbfp_p (a1, a2)
1456
1457#endif /* __cplusplus */
1458
1459#endif /* _ALTIVEC_H */
1460