diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5d6e957eda1895a15444a6abe4df6d39f37551a0..38dc3090b544e295b843aedf4f837db151c4a4f4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2002-01-17  Aldy Hernandez  <aldyh@redhat.com>
+
+        * config.gcc (cpu_type): Include altivec.h in powerpc
+        extra_headers.
+        Same for darwin.
+
+        * config/rs6000/altivec.h: New.
+
 2002-01-17  David Edelsohn  <edelsohn@gnu.org>
 
 	* doc/install.texi (*-ibm-aix*): Update assembler and exception
diff --git a/gcc/config.gcc b/gcc/config.gcc
index ca174fe07de2ba993d1f30747b418b11305db24a..8aafba89aa4ca49b598ed921c4163ebfa5f183f0 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -258,7 +258,7 @@ pj*-*-*)
 	;;
 powerpc*-*-*)
 	cpu_type=rs6000
-	extra_headers=ppc-asm.h
+	extra_headers="ppc-asm.h altivec.h"
 	;;
 sparc*-*-*)
 	cpu_type=sparc
@@ -2637,7 +2637,7 @@ powerpc-*-darwin*)
 	cxx_target_objs="darwin-c.o"
 	# Darwin linker does collect2 functionality
 	use_collect2=no
-	extra_headers=
+	extra_headers=altivec.h
 	;;
 powerpc*-*-freebsd*)
 	tm_file="${tm_file} dbxelf.h elfos.h ${fbsd_tm_file} rs6000/sysv4.h rs6000/freebsd.h"
diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
new file mode 100644
index 0000000000000000000000000000000000000000..6b2569a74c5c72a33e2d5a65c94a35fdf7ded406
--- /dev/null
+++ b/gcc/config/rs6000/altivec.h
@@ -0,0 +1,1459 @@
+/* PowerPC AltiVec include file.
+   Copyright (C) 2002 Free Software Foundation, Inc.
+   Contributed by Aldy Hernandez (aldyh@redhat.com).
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* As a special exception, if you include this header file into source
+   files compiled by GCC, this header file does not by itself cause
+   the resulting executable to be covered by the GNU General Public
+   License.  This exception does not however invalidate any other
+   reasons why the executable file might be covered by the GNU General
+   Public License.  */
+
+/* Implemented to conform to the specification included in the AltiVec
+   Technology Programming Interface Manual (ALTIVECPIM/D 6/1999 Rev 0).  */
+
+#ifndef _ALTIVEC_H
+#define _ALTIVEC_H 1
+
+/* Required by Motorola specs.  */
+#define __VEC__ 10206
+
+#define __ALTIVEC__ 1
+
+#define __vector __attribute__((vector_size(16)))
+
+/* Dummy prototype.  */
+extern void __altivec_link_error_invalid_argument ();
+
+/* You are allowed to undef this for C++ compatability.  */
+#define vector __vector
+
+/* Helper macros.  */
+
+#define __bin_args_eq(xtype, x, ytype, y)				\
+	(__builtin_types_compatible_p (xtype, typeof (x))		\
+	 && __builtin_types_compatible_p (ytype, typeof (y)))
+
+#define __un_args_eq(xtype, x)						\
+	__builtin_types_compatible_p (xtype, typeof (x))
+
+#define __tern_args_eq(xtype, x, ytype, y, ztype, z)                    \
+        (__builtin_types_compatible_p (xtype, typeof (x))               \
+         && __builtin_types_compatible_p (ytype, typeof (y))		\
+	 && __builtin_types_compatible_p (ztype, typeof (z)))
+
+#define __ch(x, y, z)	__builtin_choose_expr (x, y, z)
+
+#ifdef __cplusplus
+
+/* C++ stuff here.  */
+
+#else /* not C++ */
+
+/* Hairy macros that implement the AltiVec high-level programming
+   interface for C.  */
+
+#define vec_add(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vaddfp ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_addc(a1, a2) __builtin_altivec_vaddcuw (a1, a2)
+
+#define vec_adds(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vaddsbs ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vaddshs ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vaddsws ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))))))))))));
+
+#define vec_and(a1, a2) \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector signed int, a2), \
+      (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))))));
+
+#define vec_andc(a1, a2) \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector signed int, a2), \
+      (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))))));
+
+#define vec_avg(a1, a2) \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vavgub ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vavgsb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vavguh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vavgsh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vavguw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vavgsw ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))))));
+
+#define vec_ceil(a1) __builtin_altivec_vrfip (a1)
+
+#define vec_cmpb(a1, a2) __builtin_altivec_vcmpbfp (a1, a2)
+
+#define vec_cmpeq(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpeqfp ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))));
+
+#define vec_cmpge(a1, a2) __builtin_altivec_vcmpgefp (a1, a2)
+
+#define vec_cmpgt(a1, a2) \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))));
+
+#define vec_cmple(a1, a2) __builtin_altivec_vcmpgefp (a1, a2)
+
+#define vec_cmplt(a1, a2) \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))));
+
+#define vec_ctf(a1, a2) \
+__ch (__bin_args_eq (vector unsigned int, a1, const char, a2), \
+      (vector float) __builtin_altivec_vcfux ((vector signed int) a1, (const char) a2), \
+__ch (__bin_args_eq (vector signed int, a1, const char, a2), \
+      (vector float) __builtin_altivec_vcfsx ((vector signed int) a1, (const char) a2), \
+    __altivec_link_error_invalid_argument ()));
+
+#define vec_cts(a1, a2) __builtin_altivec_vctsxs (a1, a2)
+
+#define vec_ctu(a1, a2) __builtin_altivec_vctuxs (a1, a2)
+
+#define vec_dss(a1) __builtin_altivec_dss (a1)
+
+#define vec_dssall() __builtin_altivec_dssall ()
+
+#define vec_dst(a1, a2, a3) __builtin_altivec_dst (a1, a2, a3)
+
+#define vec_dstst(a1, a2, a3) __builtin_altivec_dstst (a1, a2, a3)
+
+#define vec_dststt(a1, a2, a3) __builtin_altivec_dststt (a1, a2, a3)
+
+#define vec_dstt(a1, a2, a3) __builtin_altivec_dstt (a1, a2, a3)
+
+#define vec_expte(a1) __builtin_altivec_vexptefp (a1)
+
+#define vec_floor(a1) __builtin_altivec_vrfim (a1)
+
+#define vec_ld(a, b) \
+__ch (__un_args_eq (vector unsigned char *, b), \
+      (vector unsigned char) __builtin_altivec_lvx (a, b), \
+__ch (__un_args_eq (unsigned char *, b), \
+      (vector unsigned char) __builtin_altivec_lvx (a, b), \
+__ch (__un_args_eq (vector signed char *, b), \
+      (vector signed char) __builtin_altivec_lvx (a, b), \
+__ch (__un_args_eq (signed char *, b), \
+      (vector signed char) __builtin_altivec_lvx (a, b), \
+__ch (__un_args_eq (vector unsigned short *, b), \
+      (vector unsigned short) __builtin_altivec_lvx (a, b), \
+__ch (__un_args_eq (unsigned short *, b), \
+      (vector unsigned short) __builtin_altivec_lvx (a, b), \
+__ch (__un_args_eq (vector signed short *, b), \
+      (vector signed short) __builtin_altivec_lvx (a, b), \
+__ch (__un_args_eq (signed short *, b), \
+      (vector signed short) __builtin_altivec_lvx (a, b), \
+__ch (__un_args_eq (vector unsigned int *, b), \
+      (vector unsigned int) __builtin_altivec_lvx (a, b), \
+__ch (__un_args_eq (unsigned int *, b), \
+      (vector unsigned int) __builtin_altivec_lvx (a, b), \
+__ch (__un_args_eq (vector signed int *, b), \
+      (vector signed int) __builtin_altivec_lvx (a, b), \
+__ch (__un_args_eq (signed int *, b), \
+      (vector signed int) __builtin_altivec_lvx (a, b), \
+__ch (__un_args_eq (vector float *, b), \
+      (vector float) __builtin_altivec_lvx (a, b), \
+__ch (__un_args_eq (float *, b), \
+      (vector float) __builtin_altivec_lvx (a, b), \
+__altivec_link_error_invalid_argument ()))))))))))))))
+
+#define vec_lde(a, b) \
+__ch (__un_args_eq (unsigned char *, b), \
+      (vector unsigned char) __builtin_altivec_lvebx (a, b), \
+__ch (__un_args_eq (signed char *, b), \
+      (vector signed char) __builtin_altivec_lvebx (a, b), \
+__ch (__un_args_eq (unsigned short *, b), \
+      (vector unsigned short) __builtin_altivec_lvehx (a, b), \
+__ch (__un_args_eq (signed short *, b), \
+      (vector signed short) __builtin_altivec_lvehx (a, b), \
+__ch (__un_args_eq (unsigned int *, b), \
+      (vector unsigned int) __builtin_altivec_lvewx (a, b), \
+__ch (__un_args_eq (signed int *, b), \
+      (vector signed int) __builtin_altivec_lvewx (a, b), \
+__altivec_link_error_invalid_argument ()))))))
+
+#define vec_ldl(a, b) \
+__ch (__un_args_eq (vector unsigned char *, b), \
+      (vector unsigned char) __builtin_altivec_lvxl (a, b), \
+__ch (__un_args_eq (unsigned char *, b), \
+      (vector unsigned char) __builtin_altivec_lvxl (a, b), \
+__ch (__un_args_eq (vector signed char *, b), \
+      (vector signed char) __builtin_altivec_lvxl (a, b), \
+__ch (__un_args_eq (signed char *, b), \
+      (vector signed char) __builtin_altivec_lvxl (a, b), \
+__ch (__un_args_eq (vector unsigned short *, b), \
+      (vector unsigned short) __builtin_altivec_lvxl (a, b), \
+__ch (__un_args_eq (unsigned short *, b), \
+      (vector unsigned short) __builtin_altivec_lvxl (a, b), \
+__ch (__un_args_eq (vector signed short *, b), \
+      (vector signed short) __builtin_altivec_lvxl (a, b), \
+__ch (__un_args_eq (signed short *, b), \
+      (vector signed short) __builtin_altivec_lvxl (a, b), \
+__ch (__un_args_eq (vector unsigned int *, b), \
+      (vector unsigned int) __builtin_altivec_lvxl (a, b), \
+__ch (__un_args_eq (unsigned int *, b), \
+      (vector unsigned int) __builtin_altivec_lvxl (a, b), \
+__ch (__un_args_eq (vector signed int *, b), \
+      (vector signed int) __builtin_altivec_lvxl (a, b), \
+__ch (__un_args_eq (signed int *, b), \
+      (vector signed int) __builtin_altivec_lvxl (a, b), \
+__ch (__un_args_eq (vector float *, b), \
+      (vector float) __builtin_altivec_lvxl (a, b), \
+__ch (__un_args_eq (float *, b), \
+      (vector float) __builtin_altivec_lvxl (a, b), \
+__altivec_link_error_invalid_argument ()))))))))))))))
+
+#define vec_loge(a1) __builtin_altivec_vlogefp (a1)
+
+#define vec_lvsl(a1, a2) __builtin_altivec_lvsl (a1, a2)
+
+#define vec_lvsr(a1, a2) __builtin_altivec_lvsr (a1, a2)
+
+#define vec_madd(a1, a2, a3) __builtin_altivec_vmaddfp (a1, a2, a3)
+
+#define vec_madds(a1, a2, a3) __builtin_altivec_vmhaddshs (a1, a2, a3)
+
+#define vec_max(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vmaxsb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vmaxsh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vmaxsw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vmaxfp ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_mergeh(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ())))))));
+
+#define vec_mergel(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ())))))));
+
+#define vec_mfvscr() __builtin_altivec_mfvscr ();
+
+#define vec_min(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vminsb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vminsh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vminsw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vminfp ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_mladd(a1, a2, a3) \
+__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, vector signed short, a3), \
+      (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3), \
+__ch (__tern_args_eq (vector signed short, a1, vector unsigned short, a2, vector unsigned short, a3), \
+      (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3), \
+__ch (__tern_args_eq (vector unsigned short, a1, vector signed short, a2, vector signed short, a3), \
+      (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3), \
+__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, vector unsigned short, a3), \
+      (vector unsigned short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3), \
+    __altivec_link_error_invalid_argument ()))));
+
+#define vec_mradds(a1, a2, a3) __builtin_altivec_vmhraddshs (a1, a2, a3)
+
+#define vec_msum(a1, a2, a3) \
+__ch (__tern_args_eq (vector unsigned char, a1, vector unsigned char, a2, vector unsigned int, a3), \
+      (vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector signed char, a1, vector unsigned char, a2, vector signed int, a3), \
+      (vector signed int) __builtin_altivec_vmsummbm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, vector unsigned int, a3), \
+      (vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, vector signed int, a3), \
+      (vector signed int) __builtin_altivec_vmsumshm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3), \
+    __altivec_link_error_invalid_argument ()))));
+
+#define vec_msums(a1, a2, a3) \
+__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, vector unsigned int, a3), \
+      (vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, vector signed int, a3), \
+      (vector signed int) __builtin_altivec_vmsumshs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3), \
+    __altivec_link_error_invalid_argument ()));
+
+#define vec_mtvscr(a1) \
+__ch (__un_args_eq (vector signed int, a1), \
+      __builtin_altivec_mtvscr ((vector signed int) a1), \
+__ch (__un_args_eq (vector unsigned int, a1), \
+      __builtin_altivec_mtvscr ((vector signed int) a1), \
+__ch (__un_args_eq (vector signed short, a1), \
+      __builtin_altivec_mtvscr ((vector signed int) a1), \
+__ch (__un_args_eq (vector unsigned short, a1), \
+      __builtin_altivec_mtvscr ((vector signed int) a1), \
+__ch (__un_args_eq (vector signed char, a1), \
+      __builtin_altivec_mtvscr ((vector signed int) a1), \
+__ch (__un_args_eq (vector unsigned char, a1), \
+      __builtin_altivec_mtvscr ((vector signed int) a1), \
+    __altivec_link_error_invalid_argument ()))))));
+
+#define vec_mule(a1, a2) \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed short) __builtin_altivec_vmulesb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vmulesh ((vector signed short) a1, (vector signed short) a2), \
+    __altivec_link_error_invalid_argument ()))));
+
+#define vec_mulo(a1, a2) \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed short) __builtin_altivec_vmulosb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vmulosh ((vector signed short) a1, (vector signed short) a2), \
+    __altivec_link_error_invalid_argument ()))));
+
+#define vec_nmsub(a1, a2, a3) __builtin_altivec_vnmsubfp (a1, a2, a3)
+
+#define vec_nor(a1, a2) \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ())))))));
+
+#define vec_or(a1, a2) \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector signed int, a2), \
+      (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))))));
+
+#define vec_pack(a1, a2) \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))));
+
+#define vec_packpx(a1, a2) __builtin_altivec_vpkpx (a1, a2)
+
+#define vec_packs(a1, a2) \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed char) __builtin_altivec_vpkshss ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed short) __builtin_altivec_vpkswss ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))));
+
+#define vec_packsu(a1, a2) \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))));
+
+#define vec_perm(a1, a2, a3, a4) \
+__ch (__tern_args_eq (vector float, a1, vector float, a2, vector unsigned char, a3), \
+      (vector float) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
+__ch (__tern_args_eq (vector signed int, a1, vector signed int, a2, vector unsigned char, a3), \
+      (vector signed int) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
+__ch (__tern_args_eq (vector unsigned int, a1, vector unsigned int, a2, vector unsigned char, a3), \
+      (vector unsigned int) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
+__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, vector unsigned char, a3), \
+      (vector signed short) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
+__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, vector unsigned char, a3), \
+      (vector unsigned short) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
+__ch (__tern_args_eq (vector signed char, a1, vector signed char, a2, vector unsigned char, a3), \
+      (vector signed char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
+__ch (__tern_args_eq (vector unsigned char, a1, vector unsigned char, a2, vector unsigned char, a3), \
+      (vector unsigned char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3), \
+    __altivec_link_error_invalid_argument ())))))));
+
+#define vec_re(a1) __builtin_altivec_vrefp (a1)
+
+#define vec_rl(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))))));
+
+#define vec_round(a1) __builtin_altivec_vrfin (a1)
+
+#define vec_rsqrte(a1) __builtin_altivec_vrsqrtefp (a1)
+
+#define vec_sel(a1, a2, a3) \
+__ch (__tern_args_eq (vector float, a1, vector float, a2, vector signed int, a3), \
+      (vector float) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector float, a1, vector float, a2, vector unsigned int, a3), \
+      (vector float) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector signed int, a1, vector signed int, a2, vector signed int, a3), \
+      (vector signed int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector signed int, a1, vector signed int, a2, vector unsigned int, a3), \
+      (vector signed int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector unsigned int, a1, vector unsigned int, a2, vector signed int, a3), \
+      (vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector unsigned int, a1, vector unsigned int, a2, vector unsigned int, a3), \
+      (vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, vector signed short, a3), \
+      (vector signed short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, vector unsigned short, a3), \
+      (vector signed short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, vector signed short, a3), \
+      (vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, vector unsigned short, a3), \
+      (vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector signed char, a1, vector signed char, a2, vector signed char, a3), \
+      (vector signed char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector signed char, a1, vector signed char, a2, vector unsigned char, a3), \
+      (vector signed char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector unsigned char, a1, vector unsigned char, a2, vector signed char, a3), \
+      (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+__ch (__tern_args_eq (vector unsigned char, a1, vector unsigned char, a2, vector unsigned char, a3), \
+      (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3), \
+    __altivec_link_error_invalid_argument ()))))))))))))));
+
+#define vec_sl(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))))));
+
+#define vec_sld(a1, a2, a3) \
+__ch (__tern_args_eq (vector float, a1, vector float, a2, const char, a3), \
+      (vector float) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
+__ch (__tern_args_eq (vector signed int, a1, vector signed int, a2, const char, a3), \
+      (vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
+__ch (__tern_args_eq (vector unsigned int, a1, vector unsigned int, a2, const char, a3), \
+      (vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
+__ch (__tern_args_eq (vector signed short, a1, vector signed short, a2, const char, a3), \
+      (vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
+__ch (__tern_args_eq (vector unsigned short, a1, vector unsigned short, a2, const char, a3), \
+      (vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
+__ch (__tern_args_eq (vector signed char, a1, vector signed char, a2, const char, a3), \
+      (vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
+__ch (__tern_args_eq (vector unsigned char, a1, vector unsigned char, a2, const char, a3), \
+      (vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, (const char) a3), \
+    __altivec_link_error_invalid_argument ())))))));
+
+#define vec_sll(a1, a2) \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned short, a2), \
+      (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned char, a2), \
+      (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned int, a2), \
+      (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned char, a2), \
+      (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned int, a2), \
+      (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned char, a2), \
+      (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned int, a2), \
+      (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned short, a2), \
+      (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned int, a2), \
+      (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned short, a2), \
+      (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))))))))))))))))));
+
+#define vec_slo(a1, a2) \
+__ch (__bin_args_eq (vector float, a1, vector signed char, a2), \
+      (vector float) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector unsigned char, a2), \
+      (vector float) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed char, a2), \
+      (vector unsigned int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned char, a2), \
+      (vector unsigned int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed char, a2), \
+      (vector signed short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned char, a2), \
+      (vector signed short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed char, a2), \
+      (vector unsigned short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned char, a2), \
+      (vector unsigned short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector unsigned char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))))))))))))));
+
+#define vec_splat(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, const char, a2), \
+      (vector signed char) __builtin_altivec_vspltb ((vector signed char) a1, (const char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, const char, a2), \
+      (vector unsigned char) __builtin_altivec_vspltb ((vector signed char) a1, (const char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, const char, a2), \
+      (vector signed short) __builtin_altivec_vsplth ((vector signed short) a1, (const char) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, const char, a2), \
+      (vector unsigned short) __builtin_altivec_vsplth ((vector signed short) a1, (const char) a2), \
+__ch (__bin_args_eq (vector float, a1, const char, a2), \
+      (vector float) __builtin_altivec_vspltw ((vector signed int) a1, (const char) a2), \
+__ch (__bin_args_eq (vector signed int, a1, const char, a2), \
+      (vector signed int) __builtin_altivec_vspltw ((vector signed int) a1, (const char) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, const char, a2), \
+      (vector unsigned int) __builtin_altivec_vspltw ((vector signed int) a1, (const char) a2), \
+    __altivec_link_error_invalid_argument ())))))));
+
+#define vec_splat_s8(a1) __builtin_altivec_vspltisb (a1)
+
+#define vec_splat_s16(a1) __builtin_altivec_vspltish (a1)
+
+#define vec_splat_s32(a1) __builtin_altivec_vspltisw (a1)
+
+#define vec_splat_u8(a1) __builtin_altivec_vspltisb (a1)
+
+#define vec_splat_u16(a1) __builtin_altivec_vspltish (a1)
+
+#define vec_splat_u32(a1) __builtin_altivec_vspltisw (a1)
+
+#define vec_sr(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))))));
+
+#define vec_sra(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))))));
+
+#define vec_srl(a1, a2) \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned short, a2), \
+      (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned char, a2), \
+      (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned int, a2), \
+      (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned char, a2), \
+      (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned int, a2), \
+      (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned char, a2), \
+      (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned int, a2), \
+      (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned short, a2), \
+      (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned int, a2), \
+      (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned short, a2), \
+      (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))))))))))))))))));
+
+#define vec_sro(a1, a2) \
+__ch (__bin_args_eq (vector float, a1, vector signed char, a2), \
+      (vector float) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector unsigned char, a2), \
+      (vector float) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed char, a2), \
+      (vector unsigned int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned char, a2), \
+      (vector unsigned int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed char, a2), \
+      (vector signed short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned char, a2), \
+      (vector signed short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed char, a2), \
+      (vector unsigned short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned char, a2), \
+      (vector unsigned short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector unsigned char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))))))))))))));
+
+#define vec_st(a1, a2, a3) \
+  __builtin_altivec_stvx ((vector signed int) a1, a2, a3)
+
+#define vec_stl(a1, a2, a3) \
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, a3)
+
+#define vec_ste(a, b, c) \
+__ch (__un_args_eq (vector unsigned char, a), \
+      __builtin_altivec_stvebx ((vector signed char) a, b, c), \
+__ch (__un_args_eq (vector signed char, a), \
+      __builtin_altivec_stvebx ((vector signed char) a, b, c), \
+__ch (__un_args_eq (vector unsigned short, a), \
+     __builtin_altivec_stvehx ((vector signed short) a, b, c), \
+__ch (__un_args_eq (vector signed short, a), \
+     __builtin_altivec_stvehx ((vector signed short) a, b, c), \
+__ch (__un_args_eq (vector unsigned int, a), \
+     __builtin_altivec_stvewx ((vector signed int) a, b, c), \
+__ch (__un_args_eq (vector signed int, a), \
+     __builtin_altivec_stvewx ((vector signed int) a, b, c), \
+__ch (__un_args_eq (vector float, a), \
+     __builtin_altivec_stvewx ((vector signed int) a, b, c), \
+     __altivec_link_error_invalid_argument ())))))))
+
+#define vec_sub(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vsubfp ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_subc(a1, a2) __builtin_altivec_vsubcuw (a1, a2)
+
+#define vec_subs(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vsubsbs ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vsubshs ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vsubsws ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ()))))))))))));
+
+#define vec_sum4s(a1, a2) \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vsum4shs ((vector signed short) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ())));
+
+#define vec_sum2s(a1, a2) __builtin_altivec_vsum2sws (a1, a2)
+
+#define vec_sums(a1, a2) __builtin_altivec_vsumsws (a1, a2)
+
+#define vec_trunc(a1) __builtin_altivec_vrfiz (a1)
+
+#define vec_unpackh(a1) \
+__ch (__un_args_eq (vector signed char, a1), \
+      (vector signed short) __builtin_altivec_vupkhsb ((vector signed char) a1), \
+__ch (__un_args_eq (vector signed short, a1), \
+      (vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) a1), \
+__ch (__un_args_eq (vector signed short, a1), \
+      (vector signed int) __builtin_altivec_vupkhsh ((vector signed short) a1), \
+    __altivec_link_error_invalid_argument ())));
+
+#define vec_unpackl(a1) \
+__ch (__un_args_eq (vector signed char, a1), \
+      (vector signed short) __builtin_altivec_vupklsb ((vector signed char) a1), \
+__ch (__un_args_eq (vector signed short, a1), \
+      (vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) a1), \
+__ch (__un_args_eq (vector signed short, a1), \
+      (vector signed int) __builtin_altivec_vupklsh ((vector signed short) a1), \
+    __altivec_link_error_invalid_argument ())));
+
+#define vec_xor(a1, a2) \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector signed int, a2), \
+      (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector float, a2), \
+      (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))))));
+
+#define vec_all_eq(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpeqfp_p ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_all_ge(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpgefp_p ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_all_gt(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtfp_p ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_all_in(a1, a2) __builtin_altivec_vcmpbfp_p (a1, a2)
+
+#define vec_all_le(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpgefp_p ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_all_lt(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtfp_p ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_all_nan(a1) __builtin_altivec_vcmpeqfp_p (a1)
+
+#define vec_all_ne(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpeqfp_p ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_all_nge(a1, a2) __builtin_altivec_vcmpgefp_p (a1, a2)
+
+#define vec_all_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (a1, a2)
+
+#define vec_all_nle(a1, a2) __builtin_altivec_vcmpgefp_p (a1, a2)
+
+#define vec_all_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (a1, a2)
+
+#define vec_all_numeric(a1) __builtin_altivec_vcmpeqfp_p (a1)
+
+#define vec_any_eq(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpeqfp_p ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_any_ge(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpgefp_p ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_any_gt(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtfp_p ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_any_le(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpgefp_p ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_any_lt(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtub_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtuw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtsw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpgtfp_p ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_any_nan(a1) __builtin_altivec_vcmpeqfp_p (a1)
+
+#define vec_any_ne(a1, a2) \
+__ch (__bin_args_eq (vector signed char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector signed char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector unsigned char, a1, vector unsigned char, a2), \
+      (vector signed int) __builtin_altivec_vcmpequb_p ((vector signed char) a1, (vector signed char) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector signed short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector unsigned short, a1, vector unsigned short, a2), \
+      (vector signed int) __builtin_altivec_vcmpequh_p ((vector signed short) a1, (vector signed short) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector signed int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector signed int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector unsigned int, a1, vector unsigned int, a2), \
+      (vector signed int) __builtin_altivec_vcmpequw_p ((vector signed int) a1, (vector signed int) a2), \
+__ch (__bin_args_eq (vector float, a1, vector float, a2), \
+      (vector signed int) __builtin_altivec_vcmpeqfp_p ((vector float) a1, (vector float) a2), \
+    __altivec_link_error_invalid_argument ())))))))))))));
+
+#define vec_any_nge(a1, a2) __builtin_altivec_vcmpgefp_p (a1, a2)
+
+#define vec_any_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (a1, a2)
+
+#define vec_any_nle(a1, a2) __builtin_altivec_vcmpgefp_p (a1, a2)
+
+#define vec_any_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (a1, a2)
+
+#define vec_any_numeric(a1) __builtin_altivec_vcmpeqfp_p (a1)
+
+#define vec_any_out(a1, a2) __builtin_altivec_vcmpbfp_p (a1, a2)
+
+#endif /* __cplusplus */
+
+#endif /* _ALTIVEC_H */