]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
darwin.h (TARGET_OPTION_TRANSLATE_TABLE): Refer to SUBTARGET_OPTION_TRANSLATE_TABLE...
authorZiemowit Laski <zlaski@apple.com>
Sat, 21 Feb 2004 09:08:37 +0000 (09:08 +0000)
committerZiemowit Laski <zlaski@gcc.gnu.org>
Sat, 21 Feb 2004 09:08:37 +0000 (09:08 +0000)
[gcc/ChangeLog]
2004-02-21  Ziemowit Laski  <zlaski@apple.com>

        * config/darwin.h (TARGET_OPTION_TRANSLATE_TABLE): Refer to
        SUBTARGET_OPTION_TRANSLATE_TABLE for architecture-specific options.
        * config/i386/darwin.h (SUBTARGET_OPTION_TRANSLATE_TABLE): Define it.
        * config/rs6000/altivec.h: #error out if '-maltivec' not specified.
        (vector, pixel, bool): #define to __vector, __pixel and __bool.
        (__un_args_eq, __bin_args_eq, __tern_args_eq): Move to C-specific
        portion of header.
        (__altivec_link_error_invalid_argument): Remove prototype; will use
        __builtin_altivec_compiletime_error("vec_*") instead.
        (vec_*): Fix/complete set of available operation overloads given the
        existence of distinct 'vector bool ...' and 'vector pixel' types; tighten
        cv-correctness of pointer arguments; in C, always check for correct
        argument types before macro expansion.
        * config/rs6000/darwin.h (SUBTARGET_OPTION_TRANSLATE_TABLE): New macro
        defining Darwin/PowerPC-specific '-f[no-]altivec' and
        '-W[no-]altivec-long-deprecated' switches.
        * config/rs6000/rs6000-c (rs6000_cpu_cpp_builtins): Pre-define
        '__vector', '__pixel' and '__bool' macros using
        '__attribute__((altivec(...)))' types.
        * config/rs6000/rs6000.c (bool_char_type_node, bool_short_type_node,
        bool_int_type_node, pixel_type_node, bool_V16QI_type_node,
        bool_V8HI_type_node, bool_V4SI_type_node, pixel_V8HI_type_node):
        New type nodes.
        (rs6000_warn_altivec_long, rs6000_warn_altivec_long_switch): New, for
        handling '-W[no-]altivec-long-deprecated'.
        (rs6000_override_options): Handle '-W[no-]altivec-long-deprecated'.
        (rs6000_expand_binop_builtin, rs6000_expand_ternop_builtin,
        altivec_expand_dst_builtin): Remove casts from integer literals.
        (altivec_expand_builtin): Likewise; handle expansion of new
        '__builtin_altivec_compiletime_error' function.
        (rs6000_init_builtins): Initialize 'vector bool ...' and 'vector pixel'
        types, and make them distinct from other vector types; register
        '__builtin_altivec_compiletime_error' function.
        (print_operand): For 'P', print a full target register name instead of
        merely its number.
        (rs6000_attribute_table): Add "altivec" attribute.
        (rs6000_handle_altivec_attribute): New function.
        * config/rs6000/rs6000.h (TARGET_OPTIONS): Describe
        '-m[no-]-warn-altivec-long' (which '-W[no-]altivec-long-deprecated'
        maps to).
        (rs6000_warn_altivec_long, rs6000_warn_altivec_long_switch): Forward
        declare.
        (ALTIVEC_BUILTIN_COMPILETIME_ERROR): New built-in enumeration.

[gcc/testsuite/ChangeLog]
2004-02-21  Ziemowit Laski  <zlaski@apple.com>

        * g++.dg/ext/altivec-1.C: Generalize target triple.
        * g++.dg/ext/altivec-2.C: New test case.
        * g++.dg/ext/altivec_check.h: New file.
        * gcc.dg/altivec-1.c: Generalize target triple;
        include altivec_check.h and call altivec_check().
        * gcc.dg/altivec-[2-5].c: Generalize target triple.
        * gcc.dg/altivec-6.c: New test case.
        * gcc.dg/altivec-[7-9].c: Generalize target triple; add
        type casts as needed.
        * gcc.dg/altivec-10.c: Include altivec_check.h and call
        altivec_check().
        * gcc.dg/altivec-12.c: New test case.
        * gcc.dg/altivec-varargs-1.c: Generalize target triple;
        include altivec_check.h and call altivec_check().
        * gcc.dg/altivec_check.h: New file.

From-SVN: r78215

27 files changed:
gcc/ChangeLog
gcc/config/darwin.h
gcc/config/i386/darwin.h
gcc/config/rs6000/altivec.h
gcc/config/rs6000/darwin.h
gcc/config/rs6000/rs6000-c.c
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/altivec-1.C
gcc/testsuite/g++.dg/ext/altivec-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/altivec_check.h [new file with mode: 0644]
gcc/testsuite/gcc.dg/altivec-1.c
gcc/testsuite/gcc.dg/altivec-10.c
gcc/testsuite/gcc.dg/altivec-12.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/altivec-2.c
gcc/testsuite/gcc.dg/altivec-3.c
gcc/testsuite/gcc.dg/altivec-4.c
gcc/testsuite/gcc.dg/altivec-5.c
gcc/testsuite/gcc.dg/altivec-6.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/altivec-7.c
gcc/testsuite/gcc.dg/altivec-8.c
gcc/testsuite/gcc.dg/altivec-9.c
gcc/testsuite/gcc.dg/altivec-varargs-1.c
gcc/testsuite/gcc.dg/altivec_check.h [new file with mode: 0644]
libf2c/libI77/config.h.in
libf2c/libU77/config.hin

index ee976829d7f35ae953781862403b17511528cc35..d3fc0db66a9d295d970bdb4872ac46e0e9020d23 100644 (file)
@@ -1,3 +1,49 @@
+2004-02-21  Ziemowit Laski  <zlaski@apple.com>
+
+       * config/darwin.h (TARGET_OPTION_TRANSLATE_TABLE): Refer to
+       SUBTARGET_OPTION_TRANSLATE_TABLE for architecture-specific options.
+       * config/i386/darwin.h (SUBTARGET_OPTION_TRANSLATE_TABLE): Define it.
+       * config/rs6000/altivec.h: #error out if '-maltivec' not specified.
+       (vector, pixel, bool): #define to __vector, __pixel and __bool.
+       (__un_args_eq, __bin_args_eq, __tern_args_eq): Move to C-specific
+       portion of header.
+       (__altivec_link_error_invalid_argument): Remove prototype; will use
+       __builtin_altivec_compiletime_error("vec_*") instead.
+       (vec_*): Fix/complete set of available operation overloads given the
+       existence of distinct 'vector bool ...' and 'vector pixel' types; tighten
+       cv-correctness of pointer arguments; in C, always check for correct
+       argument types before macro expansion.
+       * config/rs6000/darwin.h (SUBTARGET_OPTION_TRANSLATE_TABLE): New macro
+       defining Darwin/PowerPC-specific '-f[no-]altivec' and
+       '-W[no-]altivec-long-deprecated' switches.
+       * config/rs6000/rs6000-c (rs6000_cpu_cpp_builtins): Pre-define
+       '__vector', '__pixel' and '__bool' macros using
+       '__attribute__((altivec(...)))' types.
+       * config/rs6000/rs6000.c (bool_char_type_node, bool_short_type_node,
+       bool_int_type_node, pixel_type_node, bool_V16QI_type_node,
+       bool_V8HI_type_node, bool_V4SI_type_node, pixel_V8HI_type_node):
+       New type nodes.
+       (rs6000_warn_altivec_long, rs6000_warn_altivec_long_switch): New, for
+       handling '-W[no-]altivec-long-deprecated'.
+       (rs6000_override_options): Handle '-W[no-]altivec-long-deprecated'.
+       (rs6000_expand_binop_builtin, rs6000_expand_ternop_builtin,
+       altivec_expand_dst_builtin): Remove casts from integer literals.
+       (altivec_expand_builtin): Likewise; handle expansion of new
+       '__builtin_altivec_compiletime_error' function.
+       (rs6000_init_builtins): Initialize 'vector bool ...' and 'vector pixel'
+       types, and make them distinct from other vector types; register
+       '__builtin_altivec_compiletime_error' function.
+       (print_operand): For 'P', print a full target register name instead of
+       merely its number.
+       (rs6000_attribute_table): Add "altivec" attribute.
+       (rs6000_handle_altivec_attribute): New function.
+       * config/rs6000/rs6000.h (TARGET_OPTIONS): Describe 
+       '-m[no-]-warn-altivec-long' (which '-W[no-]altivec-long-deprecated'
+       maps to).
+       (rs6000_warn_altivec_long, rs6000_warn_altivec_long_switch): Forward
+       declare.
+       (ALTIVEC_BUILTIN_COMPILETIME_ERROR): New built-in enumeration.
+
 2004-02-20  James E Wilson  <wilson@specifixinc.com>
 
        * config/ia64/ia64.md (shift_mix4left+1): Delete reload_completed
index 8cf92a096cd20849b24a0fa720cc4f208497f065..f56746df3845925ef1c31f6299f54e9adb18df7c 100644 (file)
@@ -97,7 +97,13 @@ Boston, MA 02111-1307, USA.  */
    Note that an option name with a prefix that matches another option
    name, that also takes an argument, needs to be modified so the
    prefix is different, otherwise a '*' after the shorter option will
-   match with the longer one.  */
+   match with the longer one.
+   
+   The SUBTARGET_OPTION_TRANSLATE_TABLE macro, which _must_ be defined
+   in gcc/config/{i386,rs6000}/darwin.h, should contain any additional
+   command-line option translations specific to the particular target
+   architecture.  */
+   
 #define TARGET_OPTION_TRANSLATE_TABLE \
   { "-all_load", "-Zall_load" },  \
   { "-allowable_client", "-Zallowable_client" },  \
@@ -124,8 +130,9 @@ Boston, MA 02111-1307, USA.  */
   { "-multi_module", "-Zmulti_module" },  \
   { "-static", "-static -Wa,-static" },  \
   { "-single_module", "-Zsingle_module" },  \
-  { "-unexported_symbols_list", "-Zunexported_symbols_list" }
-
+  { "-unexported_symbols_list", "-Zunexported_symbols_list" }, \
+  SUBTARGET_OPTION_TRANSLATE_TABLE
+  
 /* These compiler options take n arguments.  */
 
 #undef  WORD_SWITCH_TAKES_ARG
index fd501bf6a8b6f1a489bb5f9370cd9bfaa7dcbec7..e99a253af33ede9bbaf0c662822b4d1d61bb5411 100644 (file)
@@ -51,6 +51,10 @@ Boston, MA 02111-1307, USA.  */
 #define SUBTARGET_EXTRA_SPECS                  \
   { "darwin_arch", "i386" },
 
+/* Use the following macro for any Darwin/x86-specific command-line option
+   translation.  */
+#define SUBTARGET_OPTION_TRANSLATE_TABLE
+
 /* The Darwin assembler mostly follows AT&T syntax.  */
 #undef ASSEMBLER_DIALECT
 #define ASSEMBLER_DIALECT ASM_ATT
index 1bd8f4549ca7d3066900dd3537301f486c4d526a..42779c591fdf91f6ef792597bf8feaa3a7fc1c68 100644 (file)
 #ifndef _ALTIVEC_H
 #define _ALTIVEC_H 1
 
-/* Required by Motorola specs.  */
-#define __VEC__ 10206
-
-#ifndef __ALTIVEC__
-#define __ALTIVEC__ 1
+#if !defined(__VEC__) || !defined(__ALTIVEC__)
+#error Use the "-maltivec" flag to enable PowerPC AltiVec support
 #endif
 
-#define __vector __attribute__((vector_size(16)))
-
-/* You are allowed to undef this for C++ compatibility.  */
+/* You are allowed to undef these for C++ compatibility.  */
 #define vector __vector
+#define pixel __pixel
+#define bool __bool
 
-#define bool signed
-#define pixel unsigned short
-#define __pixel unsigned short
-
-/* Dummy prototype.  */
-extern int __altivec_link_error_invalid_argument ();
-
-/* Helper macros.  */
+/* Condition register codes for AltiVec predicates. */
 
 #define __CR6_EQ               0
 #define __CR6_EQ_REV           1
 #define __CR6_LT               2
 #define __CR6_LT_REV           3
 
-#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)
-
 /* These are easy... Same exact arguments.  */
 
 #define vec_vaddcuw vec_addc
@@ -122,109 +98,201 @@ extern "C++" {
 
 /* Prototypes for builtins that take literals and must always be
    inlined.  */
-inline vector float vec_ctf (vector unsigned int, const char) __attribute__ ((always_inline));
-inline vector float vec_ctf (vector signed int, const char) __attribute__ ((always_inline));
-inline vector float vec_vcfsx (vector signed int a1, const char a2) __attribute__ ((always_inline));
-inline vector float vec_vcfux (vector unsigned int a1, const char a2) __attribute__ ((always_inline));
-inline vector signed int vec_cts (vector float, const char) __attribute__ ((always_inline));
-inline vector unsigned int vec_ctu (vector float, const char) __attribute__ ((always_inline));
-inline void vec_dss (const char) __attribute__ ((always_inline));
-
-inline void vec_dst (vector unsigned char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (vector signed char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (vector unsigned short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (vector signed short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (vector unsigned int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (vector signed int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (vector float *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (unsigned char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (signed char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (unsigned short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (signed short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (unsigned int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (signed int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (unsigned long *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (signed long *, int, const char) __attribute__ ((always_inline));
-inline void vec_dst (float *, int, const char) __attribute__ ((always_inline));
-
-inline void vec_dstst (vector unsigned char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (vector signed char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (vector unsigned short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (vector signed short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (vector unsigned int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (vector signed int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (vector float *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (unsigned char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (signed char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (unsigned short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (signed short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (unsigned int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (signed int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (unsigned long *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (signed long *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstst (float *, int, const char) __attribute__ ((always_inline));
-
-inline void vec_dststt (vector unsigned char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (vector signed char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (vector unsigned short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (vector signed short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (vector unsigned int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (vector signed int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (vector float *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (unsigned char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (signed char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (unsigned short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (signed short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (unsigned int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (signed int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (unsigned long *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (signed long *, int, const char) __attribute__ ((always_inline));
-inline void vec_dststt (float *, int, const char) __attribute__ ((always_inline));
-
-inline void vec_dstt (vector unsigned char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (vector signed char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (vector unsigned short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (vector signed short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (vector unsigned int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (vector signed int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (vector float *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (unsigned char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (signed char *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (unsigned short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (signed short *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (unsigned int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (signed int *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (unsigned long *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (signed long *, int, const char) __attribute__ ((always_inline));
-inline void vec_dstt (float *, int, const char) __attribute__ ((always_inline));
-
-inline vector float vec_sld (vector float, vector float, const char) __attribute__ ((always_inline));
-inline vector signed int vec_sld (vector signed int, vector signed int, const char) __attribute__ ((always_inline));
-inline vector unsigned int vec_sld (vector unsigned int, vector unsigned int, const char) __attribute__ ((always_inline));
-inline vector signed short vec_sld (vector signed short, vector signed short, const char) __attribute__ ((always_inline));
-inline vector unsigned short vec_sld (vector unsigned short, vector unsigned short, const char) __attribute__ ((always_inline));
-inline vector signed char vec_sld (vector signed char, vector signed char, const char) __attribute__ ((always_inline));
-inline vector unsigned char vec_sld (vector unsigned char, vector unsigned char, const char) __attribute__ ((always_inline));
-inline vector signed char vec_splat (vector signed char, const char) __attribute__ ((always_inline));
-inline vector unsigned char vec_splat (vector unsigned char, const char) __attribute__ ((always_inline));
-inline vector signed short vec_splat (vector signed short, const char) __attribute__ ((always_inline));
-inline vector unsigned short vec_splat (vector unsigned short, const char) __attribute__ ((always_inline));
-inline vector float vec_splat (vector float, const char) __attribute__ ((always_inline));
-inline vector signed int vec_splat (vector signed int, const char) __attribute__ ((always_inline));
-inline vector unsigned int vec_splat (vector unsigned int, const char) __attribute__ ((always_inline));
-inline vector signed char vec_splat_s8 (const char) __attribute__ ((always_inline));
-inline vector signed short vec_splat_s16 (const char) __attribute__ ((always_inline));
-inline vector signed int vec_splat_s32 (const char) __attribute__ ((always_inline));
-inline vector unsigned char vec_splat_u8 (const char) __attribute__ ((always_inline));
-inline vector unsigned short vec_splat_u16 (const char) __attribute__ ((always_inline));
-inline vector unsigned int vec_splat_u32 (const char) __attribute__ ((always_inline));
-inline vector float vec_vspltw (vector float a1, const char a2) __attribute__ ((always_inline));
-inline vector signed int vec_vspltw (vector signed int a1, const char a2) __attribute__ ((always_inline));
-inline vector unsigned int vec_vspltw (vector unsigned int a1, const char a2) __attribute__ ((always_inline));
-inline vector signed short vec_vsplth (vector signed short a1, const char a2) __attribute__ ((always_inline));
-inline vector unsigned short vec_vsplth (vector unsigned short a1, const char a2) __attribute__ ((always_inline));
-inline vector signed char vec_vspltb (vector signed char a1, const char a2) __attribute__ ((always_inline));
-inline vector unsigned char vec_vspltb (vector unsigned char a1, const char a2) __attribute__ ((always_inline));
+inline vector float vec_ctf (vector unsigned int, const int) __attribute__ ((always_inline));
+inline vector float vec_ctf (vector signed int, const int) __attribute__ ((always_inline));
+inline vector float vec_vcfsx (vector signed int a1, const int a2) __attribute__ ((always_inline));
+inline vector float vec_vcfux (vector unsigned int a1, const int a2) __attribute__ ((always_inline));
+inline vector signed int vec_cts (vector float, const int) __attribute__ ((always_inline));
+inline vector unsigned int vec_ctu (vector float, const int) __attribute__ ((always_inline));
+inline void vec_dss (const int) __attribute__ ((always_inline));
+
+inline void vec_dst (const vector unsigned char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const vector signed char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const vector bool char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const vector unsigned short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const vector signed short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const vector bool short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const vector pixel *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const vector unsigned int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const vector signed int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const vector bool int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const vector float *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const signed char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const unsigned short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const unsigned int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const unsigned long *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const long *, int, const int) __attribute__ ((always_inline));
+inline void vec_dst (const float *, int, const int) __attribute__ ((always_inline));
+
+inline void vec_dstst (const vector unsigned char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const vector signed char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const vector bool char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const vector unsigned short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const vector signed short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const vector bool short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const vector pixel *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const vector unsigned int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const vector signed int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const vector bool int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const vector float *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const signed char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const unsigned short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const unsigned int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const unsigned long *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const long *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstst (const float *, int, const int) __attribute__ ((always_inline));
+
+inline void vec_dststt (const vector unsigned char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const vector signed char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const vector bool char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const vector unsigned short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const vector signed short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const vector bool short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const vector pixel *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const vector unsigned int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const vector signed int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const vector bool int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const vector float *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const signed char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const unsigned short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const unsigned int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const unsigned long *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const long *, int, const int) __attribute__ ((always_inline));
+inline void vec_dststt (const float *, int, const int) __attribute__ ((always_inline));
+
+inline void vec_dstt (const vector unsigned char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const vector signed char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const vector bool char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const vector unsigned short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const vector signed short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const vector bool short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const vector pixel *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const vector unsigned int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const vector signed int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const vector bool int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const vector float *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const signed char *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const unsigned short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const short *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const unsigned int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const int *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const unsigned long *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const long *, int, const int) __attribute__ ((always_inline));
+inline void vec_dstt (const float *, int, const int) __attribute__ ((always_inline));
+
+inline vector float vec_sld (vector float, vector float, const int) __attribute__ ((always_inline));
+inline vector signed int vec_sld (vector signed int, vector signed int, const int) __attribute__ ((always_inline));
+inline vector unsigned int vec_sld (vector unsigned int, vector unsigned int, const int) __attribute__ ((always_inline));
+inline vector signed short vec_sld (vector signed short, vector signed short, const int) __attribute__ ((always_inline));
+inline vector unsigned short vec_sld (vector unsigned short, vector unsigned short, const int) __attribute__ ((always_inline));
+inline vector signed char vec_sld (vector signed char, vector signed char, const int) __attribute__ ((always_inline));
+inline vector unsigned char vec_sld (vector unsigned char, vector unsigned char, const int) __attribute__ ((always_inline));
+inline vector signed char vec_splat (vector signed char, const int) __attribute__ ((always_inline));
+inline vector unsigned char vec_splat (vector unsigned char, const int) __attribute__ ((always_inline));
+inline vector signed short vec_splat (vector signed short, const int) __attribute__ ((always_inline));
+inline vector unsigned short vec_splat (vector unsigned short, const int) __attribute__ ((always_inline));
+inline vector float vec_splat (vector float, const int) __attribute__ ((always_inline));
+inline vector signed int vec_splat (vector signed int, const int) __attribute__ ((always_inline));
+inline vector unsigned int vec_splat (vector unsigned int, const int) __attribute__ ((always_inline));
+inline vector signed char vec_splat_s8 (const int) __attribute__ ((always_inline));
+inline vector signed short vec_splat_s16 (const int) __attribute__ ((always_inline));
+inline vector signed int vec_splat_s32 (const int) __attribute__ ((always_inline));
+inline vector unsigned char vec_splat_u8 (const int) __attribute__ ((always_inline));
+inline vector unsigned short vec_splat_u16 (const int) __attribute__ ((always_inline));
+inline vector unsigned int vec_splat_u32 (const int) __attribute__ ((always_inline));
+inline vector float vec_vspltw (vector float a1, const int a2) __attribute__ ((always_inline));
+inline vector signed int vec_vspltw (vector signed int a1, const int a2) __attribute__ ((always_inline));
+inline vector unsigned int vec_vspltw (vector unsigned int a1, const int a2) __attribute__ ((always_inline));
+inline vector signed short vec_vsplth (vector signed short a1, const int a2) __attribute__ ((always_inline));
+inline vector unsigned short vec_vsplth (vector unsigned short a1, const int a2) __attribute__ ((always_inline));
+inline vector signed char vec_vspltb (vector signed char a1, const int a2) __attribute__ ((always_inline));
+inline vector unsigned char vec_vspltb (vector unsigned char a1, const int a2) __attribute__ ((always_inline));
+
+/* vec_step */
+
+template<typename _Tp>
+struct __vec_step_help
+{
+  // All proper vector types will specialize _S_elem.
+};
+
+template<>
+struct __vec_step_help<vector signed short>
+{
+  static const int _S_elem = 8;
+};
+
+template<>
+struct __vec_step_help<vector unsigned short>
+{
+  static const int _S_elem = 8;
+};
+
+template<>
+struct __vec_step_help<vector bool short>
+{
+  static const int _S_elem = 8;
+};
+
+template<>
+struct __vec_step_help<vector pixel>
+{
+  static const int _S_elem = 8;
+};
+
+template<>
+struct __vec_step_help<vector signed int>
+{
+  static const int _S_elem = 4;
+};
+
+template<>
+struct __vec_step_help<vector unsigned int>
+{
+  static const int _S_elem = 4;
+};
+
+template<>
+struct __vec_step_help<vector bool int>
+{
+  static const int _S_elem = 4;
+};
+
+template<>
+struct __vec_step_help<vector unsigned char>
+{
+  static const int _S_elem = 16;
+};
+
+template<>
+struct __vec_step_help<vector signed char>
+{
+  static const int _S_elem = 16;
+};
+
+template<>
+struct __vec_step_help<vector bool char>
+{
+  static const int _S_elem = 16;
+};
+
+template<>
+struct __vec_step_help<vector float>
+{
+  static const int _S_elem = 4;
+};
+
+#define vec_step(t)  __vec_step_help<typeof(t)>::_S_elem
 
 /* vec_abs */
 
@@ -274,6 +342,18 @@ vec_abss (vector signed int a1)
 
 /* vec_add */
 
+inline vector signed char
+vec_add (vector bool char a1, vector signed char a2)
+{
+  return (vector signed char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
+}
+
+inline vector signed char
+vec_add (vector signed char a1, vector bool char a2)
+{
+  return (vector signed char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
+}
+
 inline vector signed char
 vec_add (vector signed char a1, vector signed char a2)
 {
@@ -281,13 +361,13 @@ vec_add (vector signed char a1, vector signed char a2)
 }
 
 inline vector unsigned char
-vec_add (vector signed char a1, vector unsigned char a2)
+vec_add (vector bool char a1, vector unsigned char a2)
 {
   return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
 }
 
 inline vector unsigned char
-vec_add (vector unsigned char a1, vector signed char a2)
+vec_add (vector unsigned char a1, vector bool char a2)
 {
   return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
 }
@@ -298,6 +378,18 @@ vec_add (vector unsigned char a1, vector unsigned char a2)
   return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
 }
 
+inline vector signed short
+vec_add (vector bool short a1, vector signed short a2)
+{
+  return (vector signed short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
+}
+
+inline vector signed short
+vec_add (vector signed short a1, vector bool short a2)
+{
+  return (vector signed short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
+}
+
 inline vector signed short
 vec_add (vector signed short a1, vector signed short a2)
 {
@@ -305,13 +397,13 @@ vec_add (vector signed short a1, vector signed short a2)
 }
 
 inline vector unsigned short
-vec_add (vector signed short a1, vector unsigned short a2)
+vec_add (vector bool short a1, vector unsigned short a2)
 {
   return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
 }
 
 inline vector unsigned short
-vec_add (vector unsigned short a1, vector signed short a2)
+vec_add (vector unsigned short a1, vector bool short a2)
 {
   return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
 }
@@ -322,6 +414,18 @@ vec_add (vector unsigned short a1, vector unsigned short a2)
   return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
 }
 
+inline vector signed int
+vec_add (vector bool int a1, vector signed int a2)
+{
+  return (vector signed int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_add (vector signed int a1, vector bool int a2)
+{
+  return (vector signed int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed int
 vec_add (vector signed int a1, vector signed int a2)
 {
@@ -329,13 +433,13 @@ vec_add (vector signed int a1, vector signed int a2)
 }
 
 inline vector unsigned int
-vec_add (vector signed int a1, vector unsigned int a2)
+vec_add (vector bool int a1, vector unsigned int a2)
 {
   return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned int
-vec_add (vector unsigned int a1, vector signed int a2)
+vec_add (vector unsigned int a1, vector bool int a2)
 {
   return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
 }
@@ -449,13 +553,13 @@ vec_addc (vector unsigned int a1, vector unsigned int a2)
 /* vec_adds */
 
 inline vector unsigned char
-vec_adds (vector signed char a1, vector unsigned char a2)
+vec_adds (vector bool char a1, vector unsigned char a2)
 {
   return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
 }
 
 inline vector unsigned char
-vec_adds (vector unsigned char a1, vector signed char a2)
+vec_adds (vector unsigned char a1, vector bool char a2)
 {
   return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
 }
@@ -466,6 +570,18 @@ vec_adds (vector unsigned char a1, vector unsigned char a2)
   return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
 }
 
+inline vector signed char
+vec_adds (vector bool char a1, vector signed char a2)
+{
+  return (vector signed char) __builtin_altivec_vaddsbs ((vector signed char) a1, (vector signed char) a2);
+}
+
+inline vector signed char
+vec_adds (vector signed char a1, vector bool char a2)
+{
+  return (vector signed char) __builtin_altivec_vaddsbs ((vector signed char) a1, (vector signed char) a2);
+}
+
 inline vector signed char
 vec_adds (vector signed char a1, vector signed char a2)
 {
@@ -473,13 +589,13 @@ vec_adds (vector signed char a1, vector signed char a2)
 }
 
 inline vector unsigned short
-vec_adds (vector signed short a1, vector unsigned short a2)
+vec_adds (vector bool short a1, vector unsigned short a2)
 {
   return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
 }
 
 inline vector unsigned short
-vec_adds (vector unsigned short a1, vector signed short a2)
+vec_adds (vector unsigned short a1, vector bool short a2)
 {
   return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
 }
@@ -490,6 +606,18 @@ vec_adds (vector unsigned short a1, vector unsigned short a2)
   return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
 }
 
+inline vector signed short
+vec_adds (vector bool short a1, vector signed short a2)
+{
+  return (vector signed short) __builtin_altivec_vaddshs ((vector signed short) a1, (vector signed short) a2);
+}
+
+inline vector signed short
+vec_adds (vector signed short a1, vector bool short a2)
+{
+  return (vector signed short) __builtin_altivec_vaddshs ((vector signed short) a1, (vector signed short) a2);
+}
+
 inline vector signed short
 vec_adds (vector signed short a1, vector signed short a2)
 {
@@ -497,13 +625,13 @@ vec_adds (vector signed short a1, vector signed short a2)
 }
 
 inline vector unsigned int
-vec_adds (vector signed int a1, vector unsigned int a2)
+vec_adds (vector bool int a1, vector unsigned int a2)
 {
   return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned int
-vec_adds (vector unsigned int a1, vector signed int a2)
+vec_adds (vector unsigned int a1, vector bool int a2)
 {
   return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
 }
@@ -514,6 +642,18 @@ vec_adds (vector unsigned int a1, vector unsigned int a2)
   return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector signed int
+vec_adds (vector bool int a1, vector signed int a2)
+{
+  return (vector signed int) __builtin_altivec_vaddsws ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_adds (vector signed int a1, vector bool int a2)
+{
+  return (vector signed int) __builtin_altivec_vaddsws ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed int
 vec_adds (vector signed int a1, vector signed int a2)
 {
@@ -612,17 +752,35 @@ vec_and (vector float a1, vector float a2)
 }
 
 inline vector float
-vec_and (vector float a1, vector signed int a2)
+vec_and (vector float a1, vector bool int a2)
 {
   return (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector float
-vec_and (vector signed int a1, vector float a2)
+vec_and (vector bool int a1, vector float a2)
 {
   return (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool int
+vec_and (vector bool int a1, vector bool int a2)
+{
+  return (vector bool int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_and (vector bool int a1, vector signed int a2)
+{
+  return (vector signed int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_and (vector signed int a1, vector bool int a2)
+{
+  return (vector signed int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed int
 vec_and (vector signed int a1, vector signed int a2)
 {
@@ -630,13 +788,13 @@ vec_and (vector signed int a1, vector signed int a2)
 }
 
 inline vector unsigned int
-vec_and (vector signed int a1, vector unsigned int a2)
+vec_and (vector bool int a1, vector unsigned int a2)
 {
   return (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned int
-vec_and (vector unsigned int a1, vector signed int a2)
+vec_and (vector unsigned int a1, vector bool int a2)
 {
   return (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
 }
@@ -647,6 +805,24 @@ vec_and (vector unsigned int a1, vector unsigned int a2)
   return (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool short
+vec_and (vector bool short a1, vector bool short a2)
+{
+  return (vector bool short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed short
+vec_and (vector bool short a1, vector signed short a2)
+{
+  return (vector signed short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed short
+vec_and (vector signed short a1, vector bool short a2)
+{
+  return (vector signed short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed short
 vec_and (vector signed short a1, vector signed short a2)
 {
@@ -654,13 +830,13 @@ vec_and (vector signed short a1, vector signed short a2)
 }
 
 inline vector unsigned short
-vec_and (vector signed short a1, vector unsigned short a2)
+vec_and (vector bool short a1, vector unsigned short a2)
 {
   return (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned short
-vec_and (vector unsigned short a1, vector signed short a2)
+vec_and (vector unsigned short a1, vector bool short a2)
 {
   return (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
 }
@@ -671,6 +847,24 @@ vec_and (vector unsigned short a1, vector unsigned short a2)
   return (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector signed char
+vec_and (vector bool char a1, vector signed char a2)
+{
+  return (vector signed char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool char
+vec_and (vector bool char a1, vector bool char a2)
+{
+  return (vector bool char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed char
+vec_and (vector signed char a1, vector bool char a2)
+{
+  return (vector signed char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed char
 vec_and (vector signed char a1, vector signed char a2)
 {
@@ -678,13 +872,13 @@ vec_and (vector signed char a1, vector signed char a2)
 }
 
 inline vector unsigned char
-vec_and (vector signed char a1, vector unsigned char a2)
+vec_and (vector bool char a1, vector unsigned char a2)
 {
   return (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned char
-vec_and (vector unsigned char a1, vector signed char a2)
+vec_and (vector unsigned char a1, vector bool char a2)
 {
   return (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
 }
@@ -704,17 +898,35 @@ vec_andc (vector float a1, vector float a2)
 }
 
 inline vector float
-vec_andc (vector float a1, vector signed int a2)
+vec_andc (vector float a1, vector bool int a2)
 {
   return (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector float
-vec_andc (vector signed int a1, vector float a2)
+vec_andc (vector bool int a1, vector float a2)
 {
   return (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool int
+vec_andc (vector bool int a1, vector bool int a2)
+{
+  return (vector bool int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_andc (vector bool int a1, vector signed int a2)
+{
+  return (vector signed int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_andc (vector signed int a1, vector bool int a2)
+{
+  return (vector signed int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed int
 vec_andc (vector signed int a1, vector signed int a2)
 {
@@ -722,13 +934,13 @@ vec_andc (vector signed int a1, vector signed int a2)
 }
 
 inline vector unsigned int
-vec_andc (vector signed int a1, vector unsigned int a2)
+vec_andc (vector bool int a1, vector unsigned int a2)
 {
   return (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned int
-vec_andc (vector unsigned int a1, vector signed int a2)
+vec_andc (vector unsigned int a1, vector bool int a2)
 {
   return (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
 }
@@ -739,6 +951,24 @@ vec_andc (vector unsigned int a1, vector unsigned int a2)
   return (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool short
+vec_andc (vector bool short a1, vector bool short a2)
+{
+  return (vector bool short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed short
+vec_andc (vector bool short a1, vector signed short a2)
+{
+  return (vector signed short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed short
+vec_andc (vector signed short a1, vector bool short a2)
+{
+  return (vector signed short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed short
 vec_andc (vector signed short a1, vector signed short a2)
 {
@@ -746,13 +976,13 @@ vec_andc (vector signed short a1, vector signed short a2)
 }
 
 inline vector unsigned short
-vec_andc (vector signed short a1, vector unsigned short a2)
+vec_andc (vector bool short a1, vector unsigned short a2)
 {
   return (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned short
-vec_andc (vector unsigned short a1, vector signed short a2)
+vec_andc (vector unsigned short a1, vector bool short a2)
 {
   return (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
 }
@@ -763,6 +993,24 @@ vec_andc (vector unsigned short a1, vector unsigned short a2)
   return (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector signed char
+vec_andc (vector bool char a1, vector signed char a2)
+{
+  return (vector signed char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool char
+vec_andc (vector bool char a1, vector bool char a2)
+{
+  return (vector bool char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed char
+vec_andc (vector signed char a1, vector bool char a2)
+{
+  return (vector signed char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed char
 vec_andc (vector signed char a1, vector signed char a2)
 {
@@ -770,13 +1018,13 @@ vec_andc (vector signed char a1, vector signed char a2)
 }
 
 inline vector unsigned char
-vec_andc (vector signed char a1, vector unsigned char a2)
+vec_andc (vector bool char a1, vector unsigned char a2)
 {
   return (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned char
-vec_andc (vector unsigned char a1, vector signed char a2)
+vec_andc (vector unsigned char a1, vector bool char a2)
 {
   return (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
 }
@@ -891,46 +1139,46 @@ vec_cmpb (vector float a1, vector float a2)
 
 /* vec_cmpeq */
 
-inline vector signed char
+inline vector bool char
 vec_cmpeq (vector signed char a1, vector signed char a2)
 {
-  return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
+  return (vector bool char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
 }
 
-inline vector signed char
+inline vector bool char
 vec_cmpeq (vector unsigned char a1, vector unsigned char a2)
 {
-  return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
+  return (vector bool char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
 }
 
-inline vector signed short
+inline vector bool short
 vec_cmpeq (vector signed short a1, vector signed short a2)
 {
-  return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
+  return (vector bool short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
 }
 
-inline vector signed short
+inline vector bool short
 vec_cmpeq (vector unsigned short a1, vector unsigned short a2)
 {
-  return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
+  return (vector bool short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
 }
 
-inline vector signed int
+inline vector bool int
 vec_cmpeq (vector signed int a1, vector signed int a2)
 {
-  return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
+  return (vector bool int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
 }
 
-inline vector signed int
+inline vector bool int
 vec_cmpeq (vector unsigned int a1, vector unsigned int a2)
 {
-  return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
+  return (vector bool int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
 }
 
-inline vector signed int
+inline vector bool int
 vec_cmpeq (vector float a1, vector float a2)
 {
-  return (vector signed int) __builtin_altivec_vcmpeqfp ((vector float) a1, (vector float) a2);
+  return (vector bool int) __builtin_altivec_vcmpeqfp ((vector float) a1, (vector float) a2);
 }
 
 /* vec_vcmpeqfp */
@@ -985,54 +1233,54 @@ vec_vcmpequb (vector unsigned char a1, vector unsigned char a2)
 
 /* vec_cmpge */
 
-inline vector signed int
+inline vector bool int
 vec_cmpge (vector float a1, vector float a2)
 {
-  return (vector signed int) __builtin_altivec_vcmpgefp ((vector float) a1, (vector float) a2);
+  return (vector bool int) __builtin_altivec_vcmpgefp ((vector float) a1, (vector float) a2);
 }
 
 /* vec_cmpgt */
 
-inline vector signed char
+inline vector bool char
 vec_cmpgt (vector unsigned char a1, vector unsigned char a2)
 {
-  return (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2);
+  return (vector bool char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2);
 }
 
-inline vector signed char
+inline vector bool char
 vec_cmpgt (vector signed char a1, vector signed char a2)
 {
-  return (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2);
+  return (vector bool char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2);
 }
 
-inline vector signed short
+inline vector bool short
 vec_cmpgt (vector unsigned short a1, vector unsigned short a2)
 {
-  return (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2);
+  return (vector bool short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2);
 }
 
-inline vector signed short
+inline vector bool short
 vec_cmpgt (vector signed short a1, vector signed short a2)
 {
-  return (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2);
+  return (vector bool short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2);
 }
 
-inline vector signed int
+inline vector bool int
 vec_cmpgt (vector unsigned int a1, vector unsigned int a2)
 {
-  return (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2);
+  return (vector bool int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2);
 }
 
-inline vector signed int
+inline vector bool int
 vec_cmpgt (vector signed int a1, vector signed int a2)
 {
-  return (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2);
+  return (vector bool int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2);
 }
 
-inline vector signed int
+inline vector bool int
 vec_cmpgt (vector float a1, vector float a2)
 {
-  return (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2);
+  return (vector bool int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2);
 }
 
 /* vec_vcmpgtfp */
@@ -1093,66 +1341,66 @@ vec_vcmpgtub (vector unsigned char a1, vector unsigned char a2)
 
 /* vec_cmple */
 
-inline vector signed int
+inline vector bool int
 vec_cmple (vector float a1, vector float a2)
 {
-  return (vector signed int) __builtin_altivec_vcmpgefp ((vector float) a2, (vector float) a1);
+  return (vector bool int) __builtin_altivec_vcmpgefp ((vector float) a2, (vector float) a1);
 }
 
 /* vec_cmplt */
 
-inline vector signed char
+inline vector bool char
 vec_cmplt (vector unsigned char a1, vector unsigned char a2)
 {
-  return (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a2, (vector signed char) a1);
+  return (vector bool char) __builtin_altivec_vcmpgtub ((vector signed char) a2, (vector signed char) a1);
 }
 
-inline vector signed char
+inline vector bool char
 vec_cmplt (vector signed char a1, vector signed char a2)
 {
-  return (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a2, (vector signed char) a1);
+  return (vector bool char) __builtin_altivec_vcmpgtsb ((vector signed char) a2, (vector signed char) a1);
 }
 
-inline vector signed short
+inline vector bool short
 vec_cmplt (vector unsigned short a1, vector unsigned short a2)
 {
-  return (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a2, (vector signed short) a1);
+  return (vector bool short) __builtin_altivec_vcmpgtuh ((vector signed short) a2, (vector signed short) a1);
 }
 
-inline vector signed short
+inline vector bool short
 vec_cmplt (vector signed short a1, vector signed short a2)
 {
-  return (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a2, (vector signed short) a1);
+  return (vector bool short) __builtin_altivec_vcmpgtsh ((vector signed short) a2, (vector signed short) a1);
 }
 
-inline vector signed int
+inline vector bool int
 vec_cmplt (vector unsigned int a1, vector unsigned int a2)
 {
-  return (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a2, (vector signed int) a1);
+  return (vector bool int) __builtin_altivec_vcmpgtuw ((vector signed int) a2, (vector signed int) a1);
 }
 
-inline vector signed int
+inline vector bool int
 vec_cmplt (vector signed int a1, vector signed int a2)
 {
-  return (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a2, (vector signed int) a1);
+  return (vector bool int) __builtin_altivec_vcmpgtsw ((vector signed int) a2, (vector signed int) a1);
 }
 
-inline vector signed int
+inline vector bool int
 vec_cmplt (vector float a1, vector float a2)
 {
-  return (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a2, (vector float) a1);
+  return (vector bool int) __builtin_altivec_vcmpgtfp ((vector float) a2, (vector float) a1);
 }
 
 /* vec_ctf */
 
 inline vector float
-vec_ctf (vector unsigned int a1, const char a2)
+vec_ctf (vector unsigned int a1, const int a2)
 {
   return (vector float) __builtin_altivec_vcfux ((vector signed int) a1, a2);
 }
 
 inline vector float
-vec_ctf (vector signed int a1, const char a2)
+vec_ctf (vector signed int a1, const int a2)
 {
   return (vector float) __builtin_altivec_vcfsx ((vector signed int) a1, a2);
 }
@@ -1160,7 +1408,7 @@ vec_ctf (vector signed int a1, const char a2)
 /* vec_vcfsx */
 
 inline vector float
-vec_vcfsx (vector signed int a1, const char a2)
+vec_vcfsx (vector signed int a1, const int a2)
 {
   return (vector float) __builtin_altivec_vcfsx ((vector signed int) a1, a2);
 }
@@ -1168,7 +1416,7 @@ vec_vcfsx (vector signed int a1, const char a2)
 /* vec_vcfux */
 
 inline vector float
-vec_vcfux (vector unsigned int a1, const char a2)
+vec_vcfux (vector unsigned int a1, const int a2)
 {
   return (vector float) __builtin_altivec_vcfux ((vector signed int) a1, a2);
 }
@@ -1176,7 +1424,7 @@ vec_vcfux (vector unsigned int a1, const char a2)
 /* vec_cts */
 
 inline vector signed int
-vec_cts (vector float a1, const char a2)
+vec_cts (vector float a1, const int a2)
 {
   return (vector signed int) __builtin_altivec_vctsxs ((vector float) a1, a2);
 }
@@ -1184,7 +1432,7 @@ vec_cts (vector float a1, const char a2)
 /* vec_ctu */
 
 inline vector unsigned int
-vec_ctu (vector float a1, const char a2)
+vec_ctu (vector float a1, const int a2)
 {
   return (vector unsigned int) __builtin_altivec_vctuxs ((vector float) a1, a2);
 }
@@ -1192,7 +1440,7 @@ vec_ctu (vector float a1, const char a2)
 /* vec_dss */
 
 inline void
-vec_dss (const char a1)
+vec_dss (const int a1)
 {
   __builtin_altivec_dss (a1);
 }
@@ -1208,97 +1456,121 @@ vec_dssall (void)
 /* vec_dst */
 
 inline void
-vec_dst (vector unsigned char *a1, int a2, const char a3)
+vec_dst (const vector unsigned char *a1, int a2, const int a3)
+{
+  __builtin_altivec_dst ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dst (const vector signed char *a1, int a2, const int a3)
+{
+  __builtin_altivec_dst ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dst (const vector bool char *a1, int a2, const int a3)
+{
+  __builtin_altivec_dst ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dst (const vector unsigned short *a1, int a2, const int a3)
+{
+  __builtin_altivec_dst ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dst (const vector signed short *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (vector signed char *a1, int a2, const char a3)
+vec_dst (const vector bool short *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (vector unsigned short *a1, int a2, const char a3)
+vec_dst (const vector pixel *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (vector signed short *a1, int a2, const char a3)
+vec_dst (const vector unsigned int *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (vector unsigned int *a1, int a2, const char a3)
+vec_dst (const vector signed int *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (vector signed int *a1, int a2, const char a3)
+vec_dst (const vector bool int *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (vector float *a1, int a2, const char a3)
+vec_dst (const vector float *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (unsigned char *a1, int a2, const char a3)
+vec_dst (const unsigned char *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (signed char *a1, int a2, const char a3)
+vec_dst (const signed char *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (unsigned short *a1, int a2, const char a3)
+vec_dst (const unsigned short *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (signed short *a1, int a2, const char a3)
+vec_dst (const short *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (unsigned int *a1, int a2, const char a3)
+vec_dst (const unsigned int *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (signed int *a1, int a2, const char a3)
+vec_dst (const int *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (unsigned long *a1, int a2, const char a3)
+vec_dst (const unsigned long *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (signed long *a1, int a2, const char a3)
+vec_dst (const long *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dst (float *a1, int a2, const char a3)
+vec_dst (float *a1, int a2, const int a3)
 {
   __builtin_altivec_dst ((void *) a1, a2, a3);
 }
@@ -1306,97 +1578,121 @@ vec_dst (float *a1, int a2, const char a3)
 /* vec_dstst */
 
 inline void
-vec_dstst (vector unsigned char *a1, int a2, const char a3)
+vec_dstst (const vector unsigned char *a1, int a2, const int a3)
+{
+  __builtin_altivec_dstst ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dstst (const vector signed char *a1, int a2, const int a3)
+{
+  __builtin_altivec_dstst ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dstst (const vector bool char *a1, int a2, const int a3)
+{
+  __builtin_altivec_dstst ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dstst (const vector unsigned short *a1, int a2, const int a3)
+{
+  __builtin_altivec_dstst ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dstst (const vector signed short *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (vector signed char *a1, int a2, const char a3)
+vec_dstst (const vector bool short *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (vector unsigned short *a1, int a2, const char a3)
+vec_dstst (const vector pixel *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (vector signed short *a1, int a2, const char a3)
+vec_dstst (const vector unsigned int *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (vector unsigned int *a1, int a2, const char a3)
+vec_dstst (const vector signed int *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (vector signed int *a1, int a2, const char a3)
+vec_dstst (const vector bool int *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (vector float *a1, int a2, const char a3)
+vec_dstst (const vector float *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (unsigned char *a1, int a2, const char a3)
+vec_dstst (const unsigned char *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (signed char *a1, int a2, const char a3)
+vec_dstst (const signed char *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (unsigned short *a1, int a2, const char a3)
+vec_dstst (const unsigned short *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (signed short *a1, int a2, const char a3)
+vec_dstst (const short *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (unsigned int *a1, int a2, const char a3)
+vec_dstst (const unsigned int *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (signed int *a1, int a2, const char a3)
+vec_dstst (const int *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (unsigned long *a1, int a2, const char a3)
+vec_dstst (const unsigned long *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (signed long *a1, int a2, const char a3)
+vec_dstst (const long *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstst (float *a1, int a2, const char a3)
+vec_dstst (float *a1, int a2, const int a3)
 {
   __builtin_altivec_dstst ((void *) a1, a2, a3);
 }
@@ -1404,97 +1700,121 @@ vec_dstst (float *a1, int a2, const char a3)
 /* vec_dststt */
 
 inline void
-vec_dststt (vector unsigned char *a1, int a2, const char a3)
+vec_dststt (const vector unsigned char *a1, int a2, const int a3)
+{
+  __builtin_altivec_dststt ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dststt (const vector signed char *a1, int a2, const int a3)
+{
+  __builtin_altivec_dststt ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dststt (const vector bool char *a1, int a2, const int a3)
+{
+  __builtin_altivec_dststt ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dststt (const vector unsigned short *a1, int a2, const int a3)
+{
+  __builtin_altivec_dststt ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dststt (const vector signed short *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (vector signed char *a1, int a2, const char a3)
+vec_dststt (const vector bool short *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (vector unsigned short *a1, int a2, const char a3)
+vec_dststt (const vector pixel *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (vector signed short *a1, int a2, const char a3)
+vec_dststt (const vector unsigned int *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (vector unsigned int *a1, int a2, const char a3)
+vec_dststt (const vector signed int *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (vector signed int *a1, int a2, const char a3)
+vec_dststt (const vector bool int *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (vector float *a1, int a2, const char a3)
+vec_dststt (const vector float *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (unsigned char *a1, int a2, const char a3)
+vec_dststt (const unsigned char *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (signed char *a1, int a2, const char a3)
+vec_dststt (const signed char *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (unsigned short *a1, int a2, const char a3)
+vec_dststt (const unsigned short *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (signed short *a1, int a2, const char a3)
+vec_dststt (const short *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (unsigned int *a1, int a2, const char a3)
+vec_dststt (const unsigned int *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (signed int *a1, int a2, const char a3)
+vec_dststt (const int *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (unsigned long *a1, int a2, const char a3)
+vec_dststt (const unsigned long *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (signed long *a1, int a2, const char a3)
+vec_dststt (const long *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dststt (float *a1, int a2, const char a3)
+vec_dststt (float *a1, int a2, const int a3)
 {
   __builtin_altivec_dststt ((void *) a1, a2, a3);
 }
@@ -1502,97 +1822,121 @@ vec_dststt (float *a1, int a2, const char a3)
 /* vec_dstt */
 
 inline void
-vec_dstt (vector unsigned char *a1, int a2, const char a3)
+vec_dstt (const vector unsigned char *a1, int a2, const int a3)
+{
+  __builtin_altivec_dstt ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dstt (const vector signed char *a1, int a2, const int a3)
+{
+  __builtin_altivec_dstt ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dstt (const vector bool char *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (vector signed char *a1, int a2, const char a3)
+vec_dstt (const vector unsigned short *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (vector unsigned short *a1, int a2, const char a3)
+vec_dstt (const vector signed short *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (vector signed short *a1, int a2, const char a3)
+vec_dstt (const vector bool short *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (vector unsigned int *a1, int a2, const char a3)
+vec_dstt (const vector pixel *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (vector signed int *a1, int a2, const char a3)
+vec_dstt (const vector unsigned int *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (vector float *a1, int a2, const char a3)
+vec_dstt (const vector signed int *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (unsigned char *a1, int a2, const char a3)
+vec_dstt (const vector bool int *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (signed char *a1, int a2, const char a3)
+vec_dstt (const vector float *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (unsigned short *a1, int a2, const char a3)
+vec_dstt (const unsigned char *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (signed short *a1, int a2, const char a3)
+vec_dstt (const signed char *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (unsigned int *a1, int a2, const char a3)
+vec_dstt (const unsigned short *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (signed int *a1, int a2, const char a3)
+vec_dstt (const short *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (unsigned long *a1, int a2, const char a3)
+vec_dstt (const unsigned int *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (signed long *a1, int a2, const char a3)
+vec_dstt (const int *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
 
 inline void
-vec_dstt (float *a1, int a2, const char a3)
+vec_dstt (const unsigned long *a1, int a2, const int a3)
+{
+  __builtin_altivec_dstt ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dstt (const long *a1, int a2, const int a3)
+{
+  __builtin_altivec_dstt ((void *) a1, a2, a3);
+}
+
+inline void
+vec_dstt (float *a1, int a2, const int a3)
 {
   __builtin_altivec_dstt ((void *) a1, a2, a3);
 }
@@ -1616,97 +1960,121 @@ vec_floor (vector float a1)
 /* vec_ld */
 
 inline vector float
-vec_ld (int a1, vector float *a2)
+vec_ld (int a1, const vector float *a2)
 {
   return (vector float) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
 inline vector float
-vec_ld (int a1, float *a2)
+vec_ld (int a1, const float *a2)
 {
   return (vector float) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
+inline vector bool int
+vec_ld (int a1, const vector bool int *a2)
+{
+  return (vector bool int) __builtin_altivec_lvx (a1, (void *) a2);
+}
+
 inline vector signed int
-vec_ld (int a1, vector signed int *a2)
+vec_ld (int a1, const vector signed int *a2)
 {
   return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
 inline vector signed int
-vec_ld (int a1, signed int *a2)
+vec_ld (int a1, const int *a2)
 {
   return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
 inline vector signed int
-vec_ld (int a1, signed long *a2)
+vec_ld (int a1, const long *a2)
 {
   return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
 inline vector unsigned int
-vec_ld (int a1, vector unsigned int *a2)
+vec_ld (int a1, const vector unsigned int *a2)
 {
   return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
 inline vector unsigned int
-vec_ld (int a1, unsigned int *a2)
+vec_ld (int a1, const unsigned int *a2)
 {
   return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
 inline vector unsigned int
-vec_ld (int a1, unsigned long *a2)
+vec_ld (int a1, const unsigned long *a2)
 {
   return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
+inline vector bool short
+vec_ld (int a1, const vector bool short *a2)
+{
+  return (vector bool short) __builtin_altivec_lvx (a1, (void *) a2);
+}
+
+inline vector pixel
+vec_ld (int a1, const vector pixel *a2)
+{
+  return (vector pixel) __builtin_altivec_lvx (a1, (void *) a2);
+}
+
 inline vector signed short
-vec_ld (int a1, vector signed short *a2)
+vec_ld (int a1, const vector signed short *a2)
 {
   return (vector signed short) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
 inline vector signed short
-vec_ld (int a1, signed short *a2)
+vec_ld (int a1, const short *a2)
 {
   return (vector signed short) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
 inline vector unsigned short
-vec_ld (int a1, vector unsigned short *a2)
+vec_ld (int a1, const vector unsigned short *a2)
 {
   return (vector unsigned short) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
 inline vector unsigned short
-vec_ld (int a1, unsigned short *a2)
+vec_ld (int a1, const unsigned short *a2)
 {
   return (vector unsigned short) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
+inline vector bool char
+vec_ld (int a1, const vector bool char *a2)
+{
+  return (vector bool char) __builtin_altivec_lvx (a1, (void *) a2);
+}
+
 inline vector signed char
-vec_ld (int a1, vector signed char *a2)
+vec_ld (int a1, const vector signed char *a2)
 {
   return (vector signed char) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
 inline vector signed char
-vec_ld (int a1, signed char *a2)
+vec_ld (int a1, const signed char *a2)
 {
   return (vector signed char) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_ld (int a1, vector unsigned char *a2)
+vec_ld (int a1, const vector unsigned char *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvx (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_ld (int a1, unsigned char *a2)
+vec_ld (int a1, const unsigned char *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvx (a1, (void *) a2);
 }
@@ -1714,55 +2082,55 @@ vec_ld (int a1, unsigned char *a2)
 /* vec_lde */
 
 inline vector signed char
-vec_lde (int a1, signed char *a2)
+vec_lde (int a1, const signed char *a2)
 {
   return (vector signed char) __builtin_altivec_lvebx (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lde (int a1, unsigned char *a2)
+vec_lde (int a1, const unsigned char *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvebx (a1, (void *) a2);
 }
 
 inline vector signed short
-vec_lde (int a1, signed short *a2)
+vec_lde (int a1, const short *a2)
 {
   return (vector signed short) __builtin_altivec_lvehx (a1, (void *) a2);
 }
 
 inline vector unsigned short
-vec_lde (int a1, unsigned short *a2)
+vec_lde (int a1, const unsigned short *a2)
 {
   return (vector unsigned short) __builtin_altivec_lvehx (a1, (void *) a2);
 }
 
 inline vector float
-vec_lde (int a1, float *a2)
+vec_lde (int a1, const float *a2)
 {
   return (vector float) __builtin_altivec_lvewx (a1, (void *) a2);
 }
 
 inline vector signed int
-vec_lde (int a1, signed int *a2)
+vec_lde (int a1, const int *a2)
 {
   return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2);
 }
 
 inline vector unsigned int
-vec_lde (int a1, unsigned int *a2)
+vec_lde (int a1, const unsigned int *a2)
 {
   return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2);
 }
 
 inline vector signed int
-vec_lde (int a1, signed long *a2)
+vec_lde (int a1, const long *a2)
 {
   return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2);
 }
 
 inline vector unsigned int
-vec_lde (int a1, unsigned long *a2)
+vec_lde (int a1, const unsigned long *a2)
 {
   return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2);
 }
@@ -1770,31 +2138,31 @@ vec_lde (int a1, unsigned long *a2)
 /* vec_lvewx */
 
 inline vector float
-vec_lvewx (int a1, float *a2)
+vec_lvewx (int a1, const float *a2)
 {
   return (vector float) __builtin_altivec_lvewx (a1, (void *) a2);
 }
 
 inline vector signed int
-vec_lvewx (int a1, signed int *a2)
+vec_lvewx (int a1, const int *a2)
 {
   return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2);
 }
 
 inline vector unsigned int
-vec_lvewx (int a1, unsigned int *a2)
+vec_lvewx (int a1, const unsigned int *a2)
 {
   return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2);
 }
 
 inline vector signed int
-vec_lvewx (int a1, signed long *a2)
+vec_lvewx (int a1, const long *a2)
 {
   return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2);
 }
 
 inline vector unsigned int
-vec_lvewx (int a1, unsigned long *a2)
+vec_lvewx (int a1, const unsigned long *a2)
 {
   return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2);
 }
@@ -1802,13 +2170,13 @@ vec_lvewx (int a1, unsigned long *a2)
 /* vec_lvehx */
 
 inline vector signed short
-vec_lvehx (int a1, signed short *a2)
+vec_lvehx (int a1, const short *a2)
 {
   return (vector signed short) __builtin_altivec_lvehx (a1, (void *) a2);
 }
 
 inline vector unsigned short
-vec_lvehx (int a1, unsigned short *a2)
+vec_lvehx (int a1, const unsigned short *a2)
 {
   return (vector unsigned short) __builtin_altivec_lvehx (a1, (void *) a2);
 }
@@ -1816,13 +2184,13 @@ vec_lvehx (int a1, unsigned short *a2)
 /* vec_lvebx */
 
 inline vector signed char
-vec_lvebx (int a1, signed char *a2)
+vec_lvebx (int a1, const signed char *a2)
 {
   return (vector signed char) __builtin_altivec_lvebx (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvebx (int a1, unsigned char *a2)
+vec_lvebx (int a1, const int *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvebx (a1, (void *) a2);
 }
@@ -1830,97 +2198,121 @@ vec_lvebx (int a1, unsigned char *a2)
 /* vec_ldl */
 
 inline vector float
-vec_ldl (int a1, vector float *a2)
+vec_ldl (int a1, const vector float *a2)
 {
   return (vector float) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
 inline vector float
-vec_ldl (int a1, float *a2)
+vec_ldl (int a1, const float *a2)
 {
   return (vector float) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
+inline vector bool int
+vec_ldl (int a1, const vector bool int *a2)
+{
+  return (vector bool int) __builtin_altivec_lvxl (a1, (void *) a2);
+}
+
 inline vector signed int
-vec_ldl (int a1, vector signed int *a2)
+vec_ldl (int a1, const vector signed int *a2)
 {
   return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
 inline vector signed int
-vec_ldl (int a1, signed int *a2)
+vec_ldl (int a1, const int *a2)
 {
   return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
 inline vector signed int
-vec_ldl (int a1, signed long *a2)
+vec_ldl (int a1, const long *a2)
 {
   return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
 inline vector unsigned int
-vec_ldl (int a1, vector unsigned int *a2)
+vec_ldl (int a1, const vector unsigned int *a2)
 {
   return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
 inline vector unsigned int
-vec_ldl (int a1, unsigned int *a2)
+vec_ldl (int a1, const unsigned int *a2)
 {
   return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
 inline vector unsigned int
-vec_ldl (int a1, unsigned long *a2)
+vec_ldl (int a1, const unsigned long *a2)
 {
   return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
+inline vector bool short
+vec_ldl (int a1, const vector bool short *a2)
+{
+  return (vector bool short) __builtin_altivec_lvxl (a1, (void *) a2);
+}
+
+inline vector pixel
+vec_ldl (int a1, const vector pixel *a2)
+{
+  return (vector pixel) __builtin_altivec_lvxl (a1, (void *) a2);
+}
+
 inline vector signed short
-vec_ldl (int a1, vector signed short *a2)
+vec_ldl (int a1, const vector signed short *a2)
 {
   return (vector signed short) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
 inline vector signed short
-vec_ldl (int a1, signed short *a2)
+vec_ldl (int a1, const short *a2)
 {
   return (vector signed short) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
 inline vector unsigned short
-vec_ldl (int a1, vector unsigned short *a2)
+vec_ldl (int a1, const vector unsigned short *a2)
 {
   return (vector unsigned short) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
 inline vector unsigned short
-vec_ldl (int a1, unsigned short *a2)
+vec_ldl (int a1, const unsigned short *a2)
 {
   return (vector unsigned short) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
+inline vector bool char
+vec_ldl (int a1, const vector bool char *a2)
+{
+  return (vector bool char) __builtin_altivec_lvxl (a1, (void *) a2);
+}
+
 inline vector signed char
-vec_ldl (int a1, vector signed char *a2)
+vec_ldl (int a1, const vector signed char *a2)
 {
   return (vector signed char) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
 inline vector signed char
-vec_ldl (int a1, signed char *a2)
+vec_ldl (int a1, const signed char *a2)
 {
   return (vector signed char) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_ldl (int a1, vector unsigned char *a2)
+vec_ldl (int a1, const vector unsigned char *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvxl (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_ldl (int a1, unsigned char *a2)
+vec_ldl (int a1, const unsigned char *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvxl (a1, (void *) a2);
 }
@@ -1936,55 +2328,55 @@ vec_loge (vector float a1)
 /* vec_lvsl */
 
 inline vector unsigned char
-vec_lvsl (int a1, unsigned char *a2)
+vec_lvsl (int a1, const volatile unsigned char *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsl (int a1, signed char *a2)
+vec_lvsl (int a1, const volatile signed char *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsl (int a1, unsigned short *a2)
+vec_lvsl (int a1, const volatile unsigned short *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsl (int a1, signed short *a2)
+vec_lvsl (int a1, const volatile short *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsl (int a1, unsigned int *a2)
+vec_lvsl (int a1, const volatile unsigned int *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsl (int a1, signed int *a2)
+vec_lvsl (int a1, const volatile int *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsl (int a1, unsigned long *a2)
+vec_lvsl (int a1, const volatile unsigned long *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsl (int a1, signed long *a2)
+vec_lvsl (int a1, const volatile long *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsl (int a1, float *a2)
+vec_lvsl (int a1, const volatile float *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
 }
@@ -1992,55 +2384,55 @@ vec_lvsl (int a1, float *a2)
 /* vec_lvsr */
 
 inline vector unsigned char
-vec_lvsr (int a1, unsigned char *a2)
+vec_lvsr (int a1, const volatile unsigned char *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsr (int a1, signed char *a2)
+vec_lvsr (int a1, const volatile signed char *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsr (int a1, unsigned short *a2)
+vec_lvsr (int a1, const volatile unsigned short *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsr (int a1, signed short *a2)
+vec_lvsr (int a1, const volatile short *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsr (int a1, unsigned int *a2)
+vec_lvsr (int a1, const volatile unsigned int *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsr (int a1, signed int *a2)
+vec_lvsr (int a1, const volatile int *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsr (int a1, unsigned long *a2)
+vec_lvsr (int a1, const volatile unsigned long *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsr (int a1, signed long *a2)
+vec_lvsr (int a1, const volatile long *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
 }
 
 inline vector unsigned char
-vec_lvsr (int a1, float *a2)
+vec_lvsr (int a1, const volatile float *a2)
 {
   return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
 }
@@ -2053,7 +2445,6 @@ vec_madd (vector float a1, vector float a2, vector float a3)
   return (vector float) __builtin_altivec_vmaddfp ((vector float) a1, (vector float) a2, (vector float) a3);
 }
 
-
 /* vec_madds */
 
 inline vector signed short
@@ -2065,13 +2456,13 @@ vec_madds (vector signed short a1, vector signed short a2, vector signed short a
 /* vec_max */
 
 inline vector unsigned char
-vec_max (vector signed char a1, vector unsigned char a2)
+vec_max (vector bool char a1, vector unsigned char a2)
 {
   return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
 }
 
 inline vector unsigned char
-vec_max (vector unsigned char a1, vector signed char a2)
+vec_max (vector unsigned char a1, vector bool char a2)
 {
   return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
 }
@@ -2082,6 +2473,18 @@ vec_max (vector unsigned char a1, vector unsigned char a2)
   return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
 }
 
+inline vector signed char
+vec_max (vector bool char a1, vector signed char a2)
+{
+  return (vector signed char) __builtin_altivec_vmaxsb ((vector signed char) a1, (vector signed char) a2);
+}
+
+inline vector signed char
+vec_max (vector signed char a1, vector bool char a2)
+{
+  return (vector signed char) __builtin_altivec_vmaxsb ((vector signed char) a1, (vector signed char) a2);
+}
+
 inline vector signed char
 vec_max (vector signed char a1, vector signed char a2)
 {
@@ -2089,13 +2492,13 @@ vec_max (vector signed char a1, vector signed char a2)
 }
 
 inline vector unsigned short
-vec_max (vector signed short a1, vector unsigned short a2)
+vec_max (vector bool short a1, vector unsigned short a2)
 {
   return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
 }
 
 inline vector unsigned short
-vec_max (vector unsigned short a1, vector signed short a2)
+vec_max (vector unsigned short a1, vector bool short a2)
 {
   return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
 }
@@ -2106,6 +2509,18 @@ vec_max (vector unsigned short a1, vector unsigned short a2)
   return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
 }
 
+inline vector signed short
+vec_max (vector bool short a1, vector signed short a2)
+{
+  return (vector signed short) __builtin_altivec_vmaxsh ((vector signed short) a1, (vector signed short) a2);
+}
+
+inline vector signed short
+vec_max (vector signed short a1, vector bool short a2)
+{
+  return (vector signed short) __builtin_altivec_vmaxsh ((vector signed short) a1, (vector signed short) a2);
+}
+
 inline vector signed short
 vec_max (vector signed short a1, vector signed short a2)
 {
@@ -2113,13 +2528,13 @@ vec_max (vector signed short a1, vector signed short a2)
 }
 
 inline vector unsigned int
-vec_max (vector signed int a1, vector unsigned int a2)
+vec_max (vector bool int a1, vector unsigned int a2)
 {
   return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned int
-vec_max (vector unsigned int a1, vector signed int a2)
+vec_max (vector unsigned int a1, vector bool int a2)
 {
   return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
 }
@@ -2130,6 +2545,18 @@ vec_max (vector unsigned int a1, vector unsigned int a2)
   return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector signed int
+vec_max (vector bool int a1, vector signed int a2)
+{
+  return (vector signed int) __builtin_altivec_vmaxsw ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_max (vector signed int a1, vector bool int a2)
+{
+  return (vector signed int) __builtin_altivec_vmaxsw ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed int
 vec_max (vector signed int a1, vector signed int a2)
 {
@@ -2236,6 +2663,12 @@ vec_vmaxub (vector unsigned char a1, vector unsigned char a2)
 
 /* vec_mergeh */
 
+inline vector bool char
+vec_mergeh (vector bool char a1, vector bool char a2)
+{
+  return (vector bool char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2);
+}
+
 inline vector signed char
 vec_mergeh (vector signed char a1, vector signed char a2)
 {
@@ -2248,6 +2681,18 @@ vec_mergeh (vector unsigned char a1, vector unsigned char a2)
   return (vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2);
 }
 
+inline vector bool short
+vec_mergeh (vector bool short a1, vector bool short a2)
+{
+  return (vector bool short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2);
+}
+
+inline vector pixel
+vec_mergeh (vector pixel a1, vector pixel a2)
+{
+  return (vector pixel) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2);
+}
+
 inline vector signed short
 vec_mergeh (vector signed short a1, vector signed short a2)
 {
@@ -2266,6 +2711,12 @@ vec_mergeh (vector float a1, vector float a2)
   return (vector float) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool int
+vec_mergeh (vector bool int a1, vector bool int a2)
+{
+  return (vector bool int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed int
 vec_mergeh (vector signed int a1, vector signed int a2)
 {
@@ -2328,6 +2779,12 @@ vec_vmrghb (vector unsigned char a1, vector unsigned char a2)
 
 /* vec_mergel */
 
+inline vector bool char
+vec_mergel (vector bool char a1, vector bool char a2)
+{
+  return (vector bool char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2);
+}
+
 inline vector signed char
 vec_mergel (vector signed char a1, vector signed char a2)
 {
@@ -2340,6 +2797,18 @@ vec_mergel (vector unsigned char a1, vector unsigned char a2)
   return (vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2);
 }
 
+inline vector bool short
+vec_mergel (vector bool short a1, vector bool short a2)
+{
+  return (vector bool short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2);
+}
+
+inline vector pixel
+vec_mergel (vector pixel a1, vector pixel a2)
+{
+  return (vector pixel) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2);
+}
+
 inline vector signed short
 vec_mergel (vector signed short a1, vector signed short a2)
 {
@@ -2358,6 +2827,12 @@ vec_mergel (vector float a1, vector float a2)
   return (vector float) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool int
+vec_mergel (vector bool int a1, vector bool int a2)
+{
+  return (vector bool int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed int
 vec_mergel (vector signed int a1, vector signed int a2)
 {
@@ -2429,13 +2904,13 @@ vec_mfvscr (void)
 /* vec_min */
 
 inline vector unsigned char
-vec_min (vector signed char a1, vector unsigned char a2)
+vec_min (vector bool char a1, vector unsigned char a2)
 {
   return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
 }
 
 inline vector unsigned char
-vec_min (vector unsigned char a1, vector signed char a2)
+vec_min (vector unsigned char a1, vector bool char a2)
 {
   return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
 }
@@ -2446,6 +2921,18 @@ vec_min (vector unsigned char a1, vector unsigned char a2)
   return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
 }
 
+inline vector signed char
+vec_min (vector bool char a1, vector signed char a2)
+{
+  return (vector signed char) __builtin_altivec_vminsb ((vector signed char) a1, (vector signed char) a2);
+}
+
+inline vector signed char
+vec_min (vector signed char a1, vector bool char a2)
+{
+  return (vector signed char) __builtin_altivec_vminsb ((vector signed char) a1, (vector signed char) a2);
+}
+
 inline vector signed char
 vec_min (vector signed char a1, vector signed char a2)
 {
@@ -2453,13 +2940,13 @@ vec_min (vector signed char a1, vector signed char a2)
 }
 
 inline vector unsigned short
-vec_min (vector signed short a1, vector unsigned short a2)
+vec_min (vector bool short a1, vector unsigned short a2)
 {
   return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
 }
 
 inline vector unsigned short
-vec_min (vector unsigned short a1, vector signed short a2)
+vec_min (vector unsigned short a1, vector bool short a2)
 {
   return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
 }
@@ -2470,6 +2957,18 @@ vec_min (vector unsigned short a1, vector unsigned short a2)
   return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
 }
 
+inline vector signed short
+vec_min (vector bool short a1, vector signed short a2)
+{
+  return (vector signed short) __builtin_altivec_vminsh ((vector signed short) a1, (vector signed short) a2);
+}
+
+inline vector signed short
+vec_min (vector signed short a1, vector bool short a2)
+{
+  return (vector signed short) __builtin_altivec_vminsh ((vector signed short) a1, (vector signed short) a2);
+}
+
 inline vector signed short
 vec_min (vector signed short a1, vector signed short a2)
 {
@@ -2477,13 +2976,13 @@ vec_min (vector signed short a1, vector signed short a2)
 }
 
 inline vector unsigned int
-vec_min (vector signed int a1, vector unsigned int a2)
+vec_min (vector bool int a1, vector unsigned int a2)
 {
   return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned int
-vec_min (vector unsigned int a1, vector signed int a2)
+vec_min (vector unsigned int a1, vector bool int a2)
 {
   return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
 }
@@ -2494,6 +2993,18 @@ vec_min (vector unsigned int a1, vector unsigned int a2)
   return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector signed int
+vec_min (vector bool int a1, vector signed int a2)
+{
+  return (vector signed int) __builtin_altivec_vminsw ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_min (vector signed int a1, vector bool int a2)
+{
+  return (vector signed int) __builtin_altivec_vminsw ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed int
 vec_min (vector signed int a1, vector signed int a2)
 {
@@ -2734,6 +3245,12 @@ vec_mtvscr (vector unsigned int a1)
   __builtin_altivec_mtvscr ((vector signed int) a1);
 }
 
+inline void
+vec_mtvscr (vector bool int a1)
+{
+  __builtin_altivec_mtvscr ((vector signed int) a1);
+}
+
 inline void
 vec_mtvscr (vector signed short a1)
 {
@@ -2746,6 +3263,18 @@ vec_mtvscr (vector unsigned short a1)
   __builtin_altivec_mtvscr ((vector signed int) a1);
 }
 
+inline void
+vec_mtvscr (vector bool short a1)
+{
+  __builtin_altivec_mtvscr ((vector signed int) a1);
+}
+
+inline void
+vec_mtvscr (vector pixel a1)
+{
+  __builtin_altivec_mtvscr ((vector signed int) a1);
+}
+
 inline void
 vec_mtvscr (vector signed char a1)
 {
@@ -2758,6 +3287,12 @@ vec_mtvscr (vector unsigned char a1)
   __builtin_altivec_mtvscr ((vector signed int) a1);
 }
 
+inline void
+vec_mtvscr (vector bool char a1)
+{
+  __builtin_altivec_mtvscr ((vector signed int) a1);
+}
+
 /* vec_mule */
 
 inline vector unsigned short
@@ -2893,6 +3428,12 @@ vec_nor (vector unsigned int a1, vector unsigned int a2)
   return (vector unsigned int) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool int
+vec_nor (vector bool int a1, vector bool int a2)
+{
+  return (vector bool int) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed short
 vec_nor (vector signed short a1, vector signed short a2)
 {
@@ -2905,6 +3446,12 @@ vec_nor (vector unsigned short a1, vector unsigned short a2)
   return (vector unsigned short) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool short
+vec_nor (vector bool short a1, vector bool short a2)
+{
+  return (vector bool short) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed char
 vec_nor (vector signed char a1, vector signed char a2)
 {
@@ -2917,6 +3464,12 @@ vec_nor (vector unsigned char a1, vector unsigned char a2)
   return (vector unsigned char) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool char
+vec_nor (vector bool char a1, vector bool char a2)
+{
+  return (vector bool char) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
+}
+
 /* vec_or */
 
 inline vector float
@@ -2926,17 +3479,35 @@ vec_or (vector float a1, vector float a2)
 }
 
 inline vector float
-vec_or (vector float a1, vector signed int a2)
+vec_or (vector float a1, vector bool int a2)
 {
   return (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector float
-vec_or (vector signed int a1, vector float a2)
+vec_or (vector bool int a1, vector float a2)
 {
   return (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool int
+vec_or (vector bool int a1, vector bool int a2)
+{
+  return (vector bool int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_or (vector bool int a1, vector signed int a2)
+{
+  return (vector signed int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_or (vector signed int a1, vector bool int a2)
+{
+  return (vector signed int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed int
 vec_or (vector signed int a1, vector signed int a2)
 {
@@ -2944,13 +3515,13 @@ vec_or (vector signed int a1, vector signed int a2)
 }
 
 inline vector unsigned int
-vec_or (vector signed int a1, vector unsigned int a2)
+vec_or (vector bool int a1, vector unsigned int a2)
 {
   return (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned int
-vec_or (vector unsigned int a1, vector signed int a2)
+vec_or (vector unsigned int a1, vector bool int a2)
 {
   return (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
 }
@@ -2961,6 +3532,24 @@ vec_or (vector unsigned int a1, vector unsigned int a2)
   return (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool short
+vec_or (vector bool short a1, vector bool short a2)
+{
+  return (vector bool short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed short
+vec_or (vector bool short a1, vector signed short a2)
+{
+  return (vector signed short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed short
+vec_or (vector signed short a1, vector bool short a2)
+{
+  return (vector signed short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed short
 vec_or (vector signed short a1, vector signed short a2)
 {
@@ -2968,13 +3557,13 @@ vec_or (vector signed short a1, vector signed short a2)
 }
 
 inline vector unsigned short
-vec_or (vector signed short a1, vector unsigned short a2)
+vec_or (vector bool short a1, vector unsigned short a2)
 {
   return (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned short
-vec_or (vector unsigned short a1, vector signed short a2)
+vec_or (vector unsigned short a1, vector bool short a2)
 {
   return (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
 }
@@ -2986,19 +3575,37 @@ vec_or (vector unsigned short a1, vector unsigned short a2)
 }
 
 inline vector signed char
-vec_or (vector signed char a1, vector signed char a2)
+vec_or (vector bool char a1, vector signed char a2)
 {
   return (vector signed char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
 }
 
-inline vector unsigned char
-vec_or (vector signed char a1, vector unsigned char a2)
+inline vector bool char
+vec_or (vector bool char a1, vector bool char a2)
+{
+  return (vector bool char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed char
+vec_or (vector signed char a1, vector bool char a2)
+{
+  return (vector signed char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed char
+vec_or (vector signed char a1, vector signed char a2)
+{
+  return (vector signed char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector unsigned char
+vec_or (vector bool char a1, vector unsigned char a2)
 {
   return (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned char
-vec_or (vector unsigned char a1, vector signed char a2)
+vec_or (vector unsigned char a1, vector bool char a2)
 {
   return (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
 }
@@ -3023,6 +3630,12 @@ vec_pack (vector unsigned short a1, vector unsigned short a2)
   return (vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2);
 }
 
+inline vector bool char
+vec_pack (vector bool short a1, vector bool short a2)
+{
+  return (vector bool char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2);
+}
+
 inline vector signed short
 vec_pack (vector signed int a1, vector signed int a2)
 {
@@ -3035,6 +3648,12 @@ vec_pack (vector unsigned int a1, vector unsigned int a2)
   return (vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool short
+vec_pack (vector bool int a1, vector bool int a2)
+{
+  return (vector bool short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2);
+}
+
 /* vec_vpkuwum */
 
 inline vector signed short
@@ -3065,10 +3684,10 @@ vec_vpkuhum (vector unsigned short a1, vector unsigned short a2)
 
 /* vec_packpx */
 
-inline vector unsigned short
+inline vector pixel
 vec_packpx (vector unsigned int a1, vector unsigned int a2)
 {
-  return (vector unsigned short) __builtin_altivec_vpkpx ((vector signed int) a1, (vector signed int) a2);
+  return (vector pixel) __builtin_altivec_vpkpx ((vector signed int) a1, (vector signed int) a2);
 }
 
 /* vec_packs */
@@ -3191,6 +3810,12 @@ vec_perm (vector unsigned int a1, vector unsigned int a2, vector unsigned char a
   return (vector unsigned int) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
 }
 
+inline vector bool int
+vec_perm (vector bool int a1, vector bool int a2, vector unsigned char a3)
+{
+  return (vector bool int) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
+}
+
 inline vector signed short
 vec_perm (vector signed short a1, vector signed short a2, vector unsigned char a3)
 {
@@ -3203,6 +3828,18 @@ vec_perm (vector unsigned short a1, vector unsigned short a2, vector unsigned ch
   return (vector unsigned short) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
 }
 
+inline vector bool short
+vec_perm (vector bool short a1, vector bool short a2, vector unsigned char a3)
+{
+  return (vector bool short) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
+}
+
+inline vector pixel
+vec_perm (vector pixel a1, vector pixel a2, vector unsigned char a3)
+{
+  return (vector pixel) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
+}
+
 inline vector signed char
 vec_perm (vector signed char a1, vector signed char a2, vector unsigned char a3)
 {
@@ -3215,6 +3852,12 @@ vec_perm (vector unsigned char a1, vector unsigned char a2, vector unsigned char
   return (vector unsigned char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
 }
 
+inline vector bool char
+vec_perm (vector bool char a1, vector bool char a2, vector bool char a3)
+{
+  return (vector bool char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
+}
+
 /* vec_re */
 
 inline vector float
@@ -3322,7 +3965,7 @@ vec_rsqrte (vector float a1)
 /* vec_sel */
 
 inline vector float
-vec_sel (vector float a1, vector float a2, vector signed int a3)
+vec_sel (vector float a1, vector float a2, vector bool int a3)
 {
   return (vector float) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
 }
@@ -3334,7 +3977,7 @@ vec_sel (vector float a1, vector float a2, vector unsigned int a3)
 }
 
 inline vector signed int
-vec_sel (vector signed int a1, vector signed int a2, vector signed int a3)
+vec_sel (vector signed int a1, vector signed int a2, vector bool int a3)
 {
   return (vector signed int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
 }
@@ -3346,7 +3989,7 @@ vec_sel (vector signed int a1, vector signed int a2, vector unsigned int a3)
 }
 
 inline vector unsigned int
-vec_sel (vector unsigned int a1, vector unsigned int a2, vector signed int a3)
+vec_sel (vector unsigned int a1, vector unsigned int a2, vector bool int a3)
 {
   return (vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
 }
@@ -3357,8 +4000,20 @@ vec_sel (vector unsigned int a1, vector unsigned int a2, vector unsigned int a3)
   return (vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
 }
 
+inline vector bool int
+vec_sel (vector bool int a1, vector bool int a2, vector bool int a3)
+{
+  return (vector bool int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
+}
+
+inline vector bool int
+vec_sel (vector bool int a1, vector bool int a2, vector unsigned int a3)
+{
+  return (vector bool int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
+}
+
 inline vector signed short
-vec_sel (vector signed short a1, vector signed short a2, vector signed short a3)
+vec_sel (vector signed short a1, vector signed short a2, vector bool short a3)
 {
   return (vector signed short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
 }
@@ -3370,7 +4025,7 @@ vec_sel (vector signed short a1, vector signed short a2, vector unsigned short a
 }
 
 inline vector unsigned short
-vec_sel (vector unsigned short a1, vector unsigned short a2, vector signed short a3)
+vec_sel (vector unsigned short a1, vector unsigned short a2, vector bool short a3)
 {
   return (vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
 }
@@ -3381,8 +4036,20 @@ vec_sel (vector unsigned short a1, vector unsigned short a2, vector unsigned sho
   return (vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
 }
 
+inline vector bool short
+vec_sel (vector bool short a1, vector bool short a2, vector bool short a3)
+{
+  return (vector bool short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
+}
+
+inline vector bool short
+vec_sel (vector bool short a1, vector bool short a2, vector unsigned short a3)
+{
+  return (vector bool short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
+}
+
 inline vector signed char
-vec_sel (vector signed char a1, vector signed char a2, vector signed char a3)
+vec_sel (vector signed char a1, vector signed char a2, vector bool char a3)
 {
   return (vector signed char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
 }
@@ -3394,7 +4061,7 @@ vec_sel (vector signed char a1, vector signed char a2, vector unsigned char a3)
 }
 
 inline vector unsigned char
-vec_sel (vector unsigned char a1, vector unsigned char a2, vector signed char a3)
+vec_sel (vector unsigned char a1, vector unsigned char a2, vector bool char a3)
 {
   return (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
 }
@@ -3405,6 +4072,18 @@ vec_sel (vector unsigned char a1, vector unsigned char a2, vector unsigned char
   return (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
 }
 
+inline vector bool char
+vec_sel (vector bool char a1, vector bool char a2, vector bool char a3)
+{
+  return (vector bool char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
+}
+
+inline vector bool char
+vec_sel (vector bool char a1, vector bool char a2, vector unsigned char a3)
+{
+  return (vector bool char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
+}
+
 /* vec_sl */
 
 inline vector signed char
@@ -3488,43 +4167,49 @@ vec_vslb (vector unsigned char a1, vector unsigned char a2)
 /* vec_sld */
 
 inline vector float
-vec_sld (vector float a1, vector float a2, const char a3)
+vec_sld (vector float a1, vector float a2, const int a3)
 {
   return (vector float) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
 }
 
 inline vector signed int
-vec_sld (vector signed int a1, vector signed int a2, const char a3)
+vec_sld (vector signed int a1, vector signed int a2, const int a3)
 {
   return (vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
 }
 
 inline vector unsigned int
-vec_sld (vector unsigned int a1, vector unsigned int a2, const char a3)
+vec_sld (vector unsigned int a1, vector unsigned int a2, const int a3)
 {
   return (vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
 }
 
 inline vector signed short
-vec_sld (vector signed short a1, vector signed short a2, const char a3)
+vec_sld (vector signed short a1, vector signed short a2, const int a3)
 {
   return (vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
 }
 
 inline vector unsigned short
-vec_sld (vector unsigned short a1, vector unsigned short a2, const char a3)
+vec_sld (vector unsigned short a1, vector unsigned short a2, const int a3)
 {
   return (vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
 }
 
+inline vector pixel
+vec_sld (vector pixel a1, vector pixel a2, const int a3)
+{
+  return (vector pixel) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
+}
+
 inline vector signed char
-vec_sld (vector signed char a1, vector signed char a2, const char a3)
+vec_sld (vector signed char a1, vector signed char a2, const int a3)
 {
   return (vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
 }
 
 inline vector unsigned char
-vec_sld (vector unsigned char a1, vector unsigned char a2, const char a3)
+vec_sld (vector unsigned char a1, vector unsigned char a2, const int a3)
 {
   return (vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
 }
@@ -3567,6 +4252,24 @@ vec_sll (vector unsigned int a1, vector unsigned char a2)
   return (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool int
+vec_sll (vector bool int a1, vector unsigned int a2)
+{
+  return (vector bool int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool int
+vec_sll (vector bool int a1, vector unsigned short a2)
+{
+  return (vector bool int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool int
+vec_sll (vector bool int a1, vector unsigned char a2)
+{
+  return (vector bool int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed short
 vec_sll (vector signed short a1, vector unsigned int a2)
 {
@@ -3603,6 +4306,42 @@ vec_sll (vector unsigned short a1, vector unsigned char a2)
   return (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool short
+vec_sll (vector bool short a1, vector unsigned int a2)
+{
+  return (vector bool short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool short
+vec_sll (vector bool short a1, vector unsigned short a2)
+{
+  return (vector bool short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool short
+vec_sll (vector bool short a1, vector unsigned char a2)
+{
+  return (vector bool short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector pixel
+vec_sll (vector pixel a1, vector unsigned int a2)
+{
+  return (vector pixel) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector pixel
+vec_sll (vector pixel a1, vector unsigned short a2)
+{
+  return (vector pixel) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector pixel
+vec_sll (vector pixel a1, vector unsigned char a2)
+{
+  return (vector pixel) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed char
 vec_sll (vector signed char a1, vector unsigned int a2)
 {
@@ -3639,6 +4378,24 @@ vec_sll (vector unsigned char a1, vector unsigned char a2)
   return (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool char
+vec_sll (vector bool char a1, vector unsigned int a2)
+{
+  return (vector bool char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool char
+vec_sll (vector bool char a1, vector unsigned short a2)
+{
+  return (vector bool char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool char
+vec_sll (vector bool char a1, vector unsigned char a2)
+{
+  return (vector bool char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
+}
+
 /* vec_slo */
 
 inline vector float
@@ -3701,6 +4458,18 @@ vec_slo (vector unsigned short a1, vector unsigned char a2)
   return (vector unsigned short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector pixel
+vec_slo (vector pixel a1, vector signed char a2)
+{
+  return (vector pixel) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector pixel
+vec_slo (vector pixel a1, vector unsigned char a2)
+{
+  return (vector pixel) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed char
 vec_slo (vector signed char a1, vector signed char a2)
 {
@@ -3728,63 +4497,87 @@ vec_slo (vector unsigned char a1, vector unsigned char a2)
 /* vec_splat */
 
 inline vector signed char
-vec_splat (vector signed char a1, const char a2)
+vec_splat (vector signed char a1, const int a2)
 {
   return (vector signed char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
 }
 
 inline vector unsigned char
-vec_splat (vector unsigned char a1, const char a2)
+vec_splat (vector unsigned char a1, const int a2)
 {
   return (vector unsigned char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
 }
 
+inline vector bool char
+vec_splat (vector bool char a1, const int a2)
+{
+  return (vector bool char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
+}
+
 inline vector signed short
-vec_splat (vector signed short a1, const char a2)
+vec_splat (vector signed short a1, const int a2)
 {
   return (vector signed short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
 }
 
 inline vector unsigned short
-vec_splat (vector unsigned short a1, const char a2)
+vec_splat (vector unsigned short a1, const int a2)
 {
   return (vector unsigned short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
 }
 
+inline vector bool short
+vec_splat (vector bool short a1, const int a2)
+{
+  return (vector bool short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
+}
+
+inline vector pixel
+vec_splat (vector pixel a1, const int a2)
+{
+  return (vector pixel) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
+}
+
 inline vector float
-vec_splat (vector float a1, const char a2)
+vec_splat (vector float a1, const int a2)
 {
   return (vector float) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
 }
 
 inline vector signed int
-vec_splat (vector signed int a1, const char a2)
+vec_splat (vector signed int a1, const int a2)
 {
   return (vector signed int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
 }
 
 inline vector unsigned int
-vec_splat (vector unsigned int a1, const char a2)
+vec_splat (vector unsigned int a1, const int a2)
 {
   return (vector unsigned int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
 }
 
+inline vector bool int
+vec_splat (vector bool int a1, const int a2)
+{
+  return (vector bool int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
+}
+
 /* vec_vspltw */
 
 inline vector float
-vec_vspltw (vector float a1, const char a2)
+vec_vspltw (vector float a1, const int a2)
 {
   return (vector float) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
 }
 
 inline vector signed int
-vec_vspltw (vector signed int a1, const char a2)
+vec_vspltw (vector signed int a1, const int a2)
 {
   return (vector signed int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
 }
 
 inline vector unsigned int
-vec_vspltw (vector unsigned int a1, const char a2)
+vec_vspltw (vector unsigned int a1, const int a2)
 {
   return (vector unsigned int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
 }
@@ -3792,13 +4585,13 @@ vec_vspltw (vector unsigned int a1, const char a2)
 /* vec_vsplth */
 
 inline vector signed short
-vec_vsplth (vector signed short a1, const char a2)
+vec_vsplth (vector signed short a1, const int a2)
 {
   return (vector signed short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
 }
 
 inline vector unsigned short
-vec_vsplth (vector unsigned short a1, const char a2)
+vec_vsplth (vector unsigned short a1, const int a2)
 {
   return (vector unsigned short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
 }
@@ -3806,13 +4599,13 @@ vec_vsplth (vector unsigned short a1, const char a2)
 /* vec_vspltb */
 
 inline vector signed char
-vec_vspltb (vector signed char a1, const char a2)
+vec_vspltb (vector signed char a1, const int a2)
 {
   return (vector signed char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
 }
 
 inline vector unsigned char
-vec_vspltb (vector unsigned char a1, const char a2)
+vec_vspltb (vector unsigned char a1, const int a2)
 {
   return (vector unsigned char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
 }
@@ -3820,7 +4613,7 @@ vec_vspltb (vector unsigned char a1, const char a2)
 /* vec_splat_s8 */
 
 inline vector signed char
-vec_splat_s8 (const char a1)
+vec_splat_s8 (const signed char a1)
 {
   return (vector signed char) __builtin_altivec_vspltisb (a1);
 }
@@ -3828,7 +4621,7 @@ vec_splat_s8 (const char a1)
 /* vec_splat_s16 */
 
 inline vector signed short
-vec_splat_s16 (const char a1)
+vec_splat_s16 (const signed char a1)
 {
   return (vector signed short) __builtin_altivec_vspltish (a1);
 }
@@ -3836,7 +4629,7 @@ vec_splat_s16 (const char a1)
 /* vec_splat_s32 */
 
 inline vector signed int
-vec_splat_s32 (const char a1)
+vec_splat_s32 (const signed char a1)
 {
   return (vector signed int) __builtin_altivec_vspltisw (a1);
 }
@@ -3844,7 +4637,7 @@ vec_splat_s32 (const char a1)
 /* vec_splat_u8 */
 
 inline vector unsigned char
-vec_splat_u8 (const char a1)
+vec_splat_u8 (const signed char a1)
 {
   return (vector unsigned char) __builtin_altivec_vspltisb (a1);
 }
@@ -3852,7 +4645,7 @@ vec_splat_u8 (const char a1)
 /* vec_splat_u16 */
 
 inline vector unsigned short
-vec_splat_u16 (const char a1)
+vec_splat_u16 (const signed char a1)
 {
   return (vector unsigned short) __builtin_altivec_vspltish (a1);
 }
@@ -3860,7 +4653,7 @@ vec_splat_u16 (const char a1)
 /* vec_splat_u32 */
 
 inline vector unsigned int
-vec_splat_u32 (const char a1)
+vec_splat_u32 (const signed char a1)
 {
   return (vector unsigned int) __builtin_altivec_vspltisw (a1);
 }
@@ -4063,6 +4856,24 @@ vec_srl (vector unsigned int a1, vector unsigned char a2)
   return (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool int
+vec_srl (vector bool int a1, vector unsigned int a2)
+{
+  return (vector bool int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool int
+vec_srl (vector bool int a1, vector unsigned short a2)
+{
+  return (vector bool int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool int
+vec_srl (vector bool int a1, vector unsigned char a2)
+{
+  return (vector bool int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed short
 vec_srl (vector signed short a1, vector unsigned int a2)
 {
@@ -4099,6 +4910,42 @@ vec_srl (vector unsigned short a1, vector unsigned char a2)
   return (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool short
+vec_srl (vector bool short a1, vector unsigned int a2)
+{
+  return (vector bool short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool short
+vec_srl (vector bool short a1, vector unsigned short a2)
+{
+  return (vector bool short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool short
+vec_srl (vector bool short a1, vector unsigned char a2)
+{
+  return (vector bool short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector pixel
+vec_srl (vector pixel a1, vector unsigned int a2)
+{
+  return (vector pixel) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector pixel
+vec_srl (vector pixel a1, vector unsigned short a2)
+{
+  return (vector pixel) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector pixel
+vec_srl (vector pixel a1, vector unsigned char a2)
+{
+  return (vector pixel) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed char
 vec_srl (vector signed char a1, vector unsigned int a2)
 {
@@ -4135,6 +4982,24 @@ vec_srl (vector unsigned char a1, vector unsigned char a2)
   return (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool char
+vec_srl (vector bool char a1, vector unsigned int a2)
+{
+  return (vector bool char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool char
+vec_srl (vector bool char a1, vector unsigned short a2)
+{
+  return (vector bool char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool char
+vec_srl (vector bool char a1, vector unsigned char a2)
+{
+  return (vector bool char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
+}
+
 /* vec_sro */
 
 inline vector float
@@ -4197,6 +5062,18 @@ vec_sro (vector unsigned short a1, vector unsigned char a2)
   return (vector unsigned short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector pixel
+vec_sro (vector pixel a1, vector signed char a2)
+{
+  return (vector pixel) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector pixel
+vec_sro (vector pixel a1, vector unsigned char a2)
+{
+  return (vector pixel) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed char
 vec_sro (vector signed char a1, vector signed char a2)
 {
@@ -4224,247 +5101,523 @@ vec_sro (vector unsigned char a1, vector unsigned char a2)
 /* vec_st */
 
 inline void
-vec_st (vector float a1, int a2, void *a3)
+vec_st (vector float a1, int a2, vector float *a3)
 {
   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_st (vector signed int a1, int a2, void *a3)
+vec_st (vector float a1, int a2, float *a3)
 {
   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_st (vector unsigned int a1, int a2, void *a3)
+vec_st (vector signed int a1, int a2, vector signed int *a3)
 {
   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_st (vector signed short a1, int a2, void *a3)
+vec_st (vector signed int a1, int a2, int *a3)
 {
   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_st (vector unsigned short a1, int a2, void *a3)
+vec_st (vector unsigned int a1, int a2, vector unsigned int *a3)
 {
   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_st (vector signed char a1, int a2, void *a3)
+vec_st (vector unsigned int a1, int a2, unsigned int *a3)
 {
   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_st (vector unsigned char a1, int a2, void *a3)
+vec_st (vector bool int a1, int a2, vector bool int *a3)
 {
   __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
-/* vec_ste */
-
 inline void
-vec_ste (vector signed char a1, int a2, void *a3)
+vec_st (vector bool int a1, int a2, unsigned int *a3)
 {
-  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_ste (vector unsigned char a1, int a2, void *a3)
+vec_st (vector bool int a1, int a2, int *a3)
 {
-  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_ste (vector signed short a1, int a2, void *a3)
+vec_st (vector signed short a1, int a2, vector signed short *a3)
 {
-  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_ste (vector unsigned short a1, int a2, void *a3)
+vec_st (vector signed short a1, int a2, short *a3)
 {
-  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_ste (vector float a1, int a2, void *a3)
+vec_st (vector unsigned short a1, int a2, vector unsigned short *a3)
 {
-  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_ste (vector signed int a1, int a2, void *a3)
+vec_st (vector unsigned short a1, int a2, unsigned short *a3)
 {
-  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_ste (vector unsigned int a1, int a2, void *a3)
+vec_st (vector bool short a1, int a2, vector bool short *a3)
 {
-  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
-/* vec_stvewx */
-
 inline void
-vec_stvewx (vector float a1, int a2, void *a3)
+vec_st (vector bool short a1, int a2, unsigned short *a3)
 {
-  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_stvewx (vector signed int a1, int a2, void *a3)
+vec_st (vector bool short a1, int a2, short *a3)
 {
-  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_stvewx (vector unsigned int a1, int a2, void *a3)
+vec_st (vector signed char a1, int a2, vector signed char *a3)
 {
-  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
-/* vec_stvehx */
-
 inline void
-vec_stvehx (vector signed short a1, int a2, void *a3)
+vec_st (vector signed char a1, int a2, signed char *a3)
 {
-  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_stvehx (vector unsigned short a1, int a2, void *a3)
+vec_st (vector unsigned char a1, int a2, vector unsigned char *a3)
 {
-  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
-/* vec_stvebx */
-
 inline void
-vec_stvebx (vector signed char a1, int a2, void *a3)
+vec_st (vector unsigned char a1, int a2, unsigned char *a3)
 {
-  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_stvebx (vector unsigned char a1, int a2, void *a3)
+vec_st (vector bool char a1, int a2, vector bool char *a3)
 {
-  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
-/* vec_stl */
-
 inline void
-vec_stl (vector float a1, int a2, void *a3)
+vec_st (vector bool char a1, int a2, unsigned char *a3)
 {
-  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
 inline void
-vec_stl (vector signed int a1, int a2, void *a3)
+vec_st (vector bool char a1, int a2, signed char *a3)
 {
-  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
 }
 
+/* vec_ste */
+
 inline void
-vec_stl (vector unsigned int a1, int a2, void *a3)
+vec_ste (vector signed char a1, int a2, signed char *a3)
 {
-  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
 }
 
 inline void
-vec_stl (vector signed short a1, int a2, void *a3)
+vec_ste (vector unsigned char a1, int a2, unsigned char *a3)
 {
-  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
 }
 
 inline void
-vec_stl (vector unsigned short a1, int a2, void *a3)
+vec_ste (vector bool char a1, int a2, signed char *a3)
 {
-  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
 }
 
 inline void
-vec_stl (vector signed char a1, int a2, void *a3)
+vec_ste (vector bool char a1, int a2, unsigned char *a3)
 {
-  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
 }
 
 inline void
-vec_stl (vector unsigned char a1, int a2, void *a3)
+vec_ste (vector signed short a1, int a2, short *a3)
 {
-  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
 }
 
-/* vec_sub */
-
-inline vector signed char
-vec_sub (vector signed char a1, vector signed char a2)
+inline void
+vec_ste (vector unsigned short a1, int a2, unsigned short *a3)
 {
-  return (vector signed char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
+  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
 }
 
-inline vector unsigned char
-vec_sub (vector signed char a1, vector unsigned char a2)
+inline void
+vec_ste (vector bool short a1, int a2, short *a3)
 {
-  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
+  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
 }
 
-inline vector unsigned char
-vec_sub (vector unsigned char a1, vector signed char a2)
+inline void
+vec_ste (vector bool short a1, int a2, unsigned short *a3)
 {
-  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
+  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
 }
 
-inline vector unsigned char
-vec_sub (vector unsigned char a1, vector unsigned char a2)
+inline void
+vec_ste (vector pixel a1, int a2, short *a3)
 {
-  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
+  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
 }
 
-inline vector signed short
-vec_sub (vector signed short a1, vector signed short a2)
+inline void
+vec_ste (vector pixel a1, int a2, unsigned short *a3)
 {
-  return (vector signed short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
+  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
 }
 
-inline vector unsigned short
-vec_sub (vector signed short a1, vector unsigned short a2)
+inline void
+vec_ste (vector float a1, int a2, float *a3)
 {
-  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
+  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
 }
 
-inline vector unsigned short
-vec_sub (vector unsigned short a1, vector signed short a2)
+inline void
+vec_ste (vector signed int a1, int a2, int *a3)
 {
-  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
+  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
 }
 
-inline vector unsigned short
-vec_sub (vector unsigned short a1, vector unsigned short a2)
+inline void
+vec_ste (vector unsigned int a1, int a2, unsigned int *a3)
 {
-  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
+  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
 }
 
-inline vector signed int
-vec_sub (vector signed int a1, vector signed int a2)
+inline void
+vec_ste (vector bool int a1, int a2, int *a3)
 {
-  return (vector signed int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
+  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
 }
 
-inline vector unsigned int
-vec_sub (vector signed int a1, vector unsigned int a2)
+inline void
+vec_ste (vector bool int a1, int a2, unsigned int *a3)
+{
+  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
+}
+
+/* vec_stvewx */
+
+inline void
+vec_stvewx (vector float a1, int a2, void *a3)
+{
+  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stvewx (vector signed int a1, int a2, void *a3)
+{
+  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stvewx (vector unsigned int a1, int a2, void *a3)
+{
+  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
+}
+
+/* vec_stvehx */
+
+inline void
+vec_stvehx (vector signed short a1, int a2, void *a3)
+{
+  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stvehx (vector unsigned short a1, int a2, void *a3)
+{
+  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
+}
+
+/* vec_stvebx */
+
+inline void
+vec_stvebx (vector signed char a1, int a2, void *a3)
+{
+  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stvebx (vector unsigned char a1, int a2, void *a3)
+{
+  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
+}
+
+/* vec_stl */
+
+inline void
+vec_stl (vector float a1, int a2, vector float *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector float a1, int a2, float *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector signed int a1, int a2, vector signed int *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector signed int a1, int a2, int *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector unsigned int a1, int a2, vector unsigned int *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector unsigned int a1, int a2, unsigned int *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector bool int a1, int a2, vector bool int *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector bool int a1, int a2, unsigned int *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector bool int a1, int a2, int *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector signed short a1, int a2, vector signed short *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector signed short a1, int a2, short *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector unsigned short a1, int a2, vector unsigned short *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector unsigned short a1, int a2, unsigned short *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector bool short a1, int a2, vector bool short *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector bool short a1, int a2, unsigned short *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector bool short a1, int a2, short *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector signed char a1, int a2, vector signed char *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector signed char a1, int a2, signed char *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector unsigned char a1, int a2, vector unsigned char *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector unsigned char a1, int a2, unsigned char *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector bool char a1, int a2, vector bool char *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector bool char a1, int a2, unsigned char *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+inline void
+vec_stl (vector bool char a1, int a2, signed char *a3)
+{
+  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
+}
+
+/* vec_sub */
+
+inline vector signed char
+vec_sub (vector bool char a1, vector signed char a2)
+{
+  return (vector signed char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
+}
+
+inline vector signed char
+vec_sub (vector signed char a1, vector bool char a2)
+{
+  return (vector signed char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
+}
+
+inline vector signed char
+vec_sub (vector signed char a1, vector signed char a2)
+{
+  return (vector signed char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
+}
+
+inline vector unsigned char
+vec_sub (vector bool char a1, vector unsigned char a2)
+{
+  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
+}
+
+inline vector unsigned char
+vec_sub (vector unsigned char a1, vector bool char a2)
+{
+  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
+}
+
+inline vector unsigned char
+vec_sub (vector unsigned char a1, vector unsigned char a2)
+{
+  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
+}
+
+inline vector signed short
+vec_sub (vector bool short a1, vector signed short a2)
+{
+  return (vector signed short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
+}
+
+inline vector signed short
+vec_sub (vector signed short a1, vector bool short a2)
+{
+  return (vector signed short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
+}
+
+inline vector signed short
+vec_sub (vector signed short a1, vector signed short a2)
+{
+  return (vector signed short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
+}
+
+inline vector unsigned short
+vec_sub (vector bool short a1, vector unsigned short a2)
+{
+  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
+}
+
+inline vector unsigned short
+vec_sub (vector unsigned short a1, vector bool short a2)
+{
+  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
+}
+
+inline vector unsigned short
+vec_sub (vector unsigned short a1, vector unsigned short a2)
+{
+  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
+}
+
+inline vector signed int
+vec_sub (vector bool int a1, vector signed int a2)
+{
+  return (vector signed int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_sub (vector signed int a1, vector bool int a2)
+{
+  return (vector signed int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_sub (vector signed int a1, vector signed int a2)
+{
+  return (vector signed int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector unsigned int
+vec_sub (vector bool int a1, vector unsigned int a2)
 {
   return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned int
-vec_sub (vector unsigned int a1, vector signed int a2)
+vec_sub (vector unsigned int a1, vector bool int a2)
 {
   return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
 }
@@ -4578,13 +5731,13 @@ vec_subc (vector unsigned int a1, vector unsigned int a2)
 /* vec_subs */
 
 inline vector unsigned char
-vec_subs (vector signed char a1, vector unsigned char a2)
+vec_subs (vector bool char a1, vector unsigned char a2)
 {
   return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
 }
 
 inline vector unsigned char
-vec_subs (vector unsigned char a1, vector signed char a2)
+vec_subs (vector unsigned char a1, vector bool char a2)
 {
   return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
 }
@@ -4595,6 +5748,18 @@ vec_subs (vector unsigned char a1, vector unsigned char a2)
   return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
 }
 
+inline vector signed char
+vec_subs (vector bool char a1, vector signed char a2)
+{
+  return (vector signed char) __builtin_altivec_vsubsbs ((vector signed char) a1, (vector signed char) a2);
+}
+
+inline vector signed char
+vec_subs (vector signed char a1, vector bool char a2)
+{
+  return (vector signed char) __builtin_altivec_vsubsbs ((vector signed char) a1, (vector signed char) a2);
+}
+
 inline vector signed char
 vec_subs (vector signed char a1, vector signed char a2)
 {
@@ -4602,13 +5767,13 @@ vec_subs (vector signed char a1, vector signed char a2)
 }
 
 inline vector unsigned short
-vec_subs (vector signed short a1, vector unsigned short a2)
+vec_subs (vector bool short a1, vector unsigned short a2)
 {
   return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
 }
 
 inline vector unsigned short
-vec_subs (vector unsigned short a1, vector signed short a2)
+vec_subs (vector unsigned short a1, vector bool short a2)
 {
   return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
 }
@@ -4619,6 +5784,18 @@ vec_subs (vector unsigned short a1, vector unsigned short a2)
   return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
 }
 
+inline vector signed short
+vec_subs (vector bool short a1, vector signed short a2)
+{
+  return (vector signed short) __builtin_altivec_vsubshs ((vector signed short) a1, (vector signed short) a2);
+}
+
+inline vector signed short
+vec_subs (vector signed short a1, vector bool short a2)
+{
+  return (vector signed short) __builtin_altivec_vsubshs ((vector signed short) a1, (vector signed short) a2);
+}
+
 inline vector signed short
 vec_subs (vector signed short a1, vector signed short a2)
 {
@@ -4626,13 +5803,13 @@ vec_subs (vector signed short a1, vector signed short a2)
 }
 
 inline vector unsigned int
-vec_subs (vector signed int a1, vector unsigned int a2)
+vec_subs (vector bool int a1, vector unsigned int a2)
 {
   return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned int
-vec_subs (vector unsigned int a1, vector signed int a2)
+vec_subs (vector unsigned int a1, vector bool int a2)
 {
   return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
 }
@@ -4643,6 +5820,18 @@ vec_subs (vector unsigned int a1, vector unsigned int a2)
   return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector signed int
+vec_subs (vector bool int a1, vector signed int a2)
+{
+  return (vector signed int) __builtin_altivec_vsubsws ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_subs (vector signed int a1, vector bool int a2)
+{
+  return (vector signed int) __builtin_altivec_vsubsws ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed int
 vec_subs (vector signed int a1, vector signed int a2)
 {
@@ -4823,14 +6012,26 @@ vec_unpackh (vector signed char a1)
   return (vector signed short) __builtin_altivec_vupkhsb ((vector signed char) a1);
 }
 
+inline vector signed short
+vec_unpackh (vector bool char a1)
+{
+  return (vector signed short) __builtin_altivec_vupkhsb ((vector signed char) a1);
+}
+
 inline vector signed int
 vec_unpackh (vector signed short a1)
 {
   return (vector signed int) __builtin_altivec_vupkhsh ((vector signed short) a1);
 }
 
+inline vector signed int
+vec_unpackh (vector bool short a1)
+{
+  return (vector signed int) __builtin_altivec_vupkhsh ((vector signed short) a1);
+}
+
 inline vector unsigned int
-vec_unpackh (vector unsigned short a1)
+vec_unpackh (vector pixel a1)
 {
   return (vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) a1);
 }
@@ -4867,8 +6068,14 @@ vec_unpackl (vector signed char a1)
   return (vector signed short) __builtin_altivec_vupklsb ((vector signed char) a1);
 }
 
+inline vector signed short
+vec_unpackl (vector bool char a1)
+{
+  return (vector signed short) __builtin_altivec_vupklsb ((vector signed char) a1);
+}
+
 inline vector unsigned int
-vec_unpackl (vector unsigned short a1)
+vec_unpackl (vector pixel a1)
 {
   return (vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) a1);
 }
@@ -4879,6 +6086,12 @@ vec_unpackl (vector signed short a1)
   return (vector signed int) __builtin_altivec_vupklsh ((vector signed short) a1);
 }
 
+inline vector signed int
+vec_unpackl (vector bool short a1)
+{
+  return (vector signed int) __builtin_altivec_vupklsh ((vector signed short) a1);
+}
+
 /* vec_vupklpx */
 
 inline vector unsigned int
@@ -4912,15 +6125,33 @@ vec_xor (vector float a1, vector float a2)
 }
 
 inline vector float
-vec_xor (vector float a1, vector signed int a2)
+vec_xor (vector float a1, vector bool int a2)
+{
+  return (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector float
+vec_xor (vector bool int a1, vector float a2)
 {
   return (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
 }
 
-inline vector float
-vec_xor (vector signed int a1, vector float a2)
+inline vector bool int
+vec_xor (vector bool int a1, vector bool int a2)
 {
-  return (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
+  return (vector bool int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_xor (vector bool int a1, vector signed int a2)
+{
+  return (vector signed int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed int
+vec_xor (vector signed int a1, vector bool int a2)
+{
+  return (vector signed int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector signed int
@@ -4930,13 +6161,13 @@ vec_xor (vector signed int a1, vector signed int a2)
 }
 
 inline vector unsigned int
-vec_xor (vector signed int a1, vector unsigned int a2)
+vec_xor (vector bool int a1, vector unsigned int a2)
 {
   return (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned int
-vec_xor (vector unsigned int a1, vector signed int a2)
+vec_xor (vector unsigned int a1, vector bool int a2)
 {
   return (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
 }
@@ -4947,6 +6178,24 @@ vec_xor (vector unsigned int a1, vector unsigned int a2)
   return (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector bool short
+vec_xor (vector bool short a1, vector bool short a2)
+{
+  return (vector bool short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed short
+vec_xor (vector bool short a1, vector signed short a2)
+{
+  return (vector signed short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed short
+vec_xor (vector signed short a1, vector bool short a2)
+{
+  return (vector signed short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed short
 vec_xor (vector signed short a1, vector signed short a2)
 {
@@ -4954,13 +6203,13 @@ vec_xor (vector signed short a1, vector signed short a2)
 }
 
 inline vector unsigned short
-vec_xor (vector signed short a1, vector unsigned short a2)
+vec_xor (vector bool short a1, vector unsigned short a2)
 {
   return (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned short
-vec_xor (vector unsigned short a1, vector signed short a2)
+vec_xor (vector unsigned short a1, vector bool short a2)
 {
   return (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
 }
@@ -4971,6 +6220,24 @@ vec_xor (vector unsigned short a1, vector unsigned short a2)
   return (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
 }
 
+inline vector signed char
+vec_xor (vector bool char a1, vector signed char a2)
+{
+  return (vector signed char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector bool char
+vec_xor (vector bool char a1, vector bool char a2)
+{
+  return (vector bool char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
+}
+
+inline vector signed char
+vec_xor (vector signed char a1, vector bool char a2)
+{
+  return (vector signed char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
+}
+
 inline vector signed char
 vec_xor (vector signed char a1, vector signed char a2)
 {
@@ -4978,13 +6245,13 @@ vec_xor (vector signed char a1, vector signed char a2)
 }
 
 inline vector unsigned char
-vec_xor (vector signed char a1, vector unsigned char a2)
+vec_xor (vector bool char a1, vector unsigned char a2)
 {
   return (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
 }
 
 inline vector unsigned char
-vec_xor (vector unsigned char a1, vector signed char a2)
+vec_xor (vector unsigned char a1, vector bool char a2)
 {
   return (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
 }
@@ -4998,7 +6265,7 @@ vec_xor (vector unsigned char a1, vector unsigned char a2)
 /* vec_all_eq */
 
 inline int
-vec_all_eq (vector signed char a1, vector unsigned char a2)
+vec_all_eq (vector signed char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpequb_p (__CR6_LT, a1, (vector signed char) a2);
 }
@@ -5010,7 +6277,7 @@ vec_all_eq (vector signed char a1, vector signed char a2)
 }
 
 inline int
-vec_all_eq (vector unsigned char a1, vector signed char a2)
+vec_all_eq (vector unsigned char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
 }
@@ -5022,7 +6289,25 @@ vec_all_eq (vector unsigned char a1, vector unsigned char a2)
 }
 
 inline int
-vec_all_eq (vector signed short a1, vector unsigned short a2)
+vec_all_eq (vector bool char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_all_eq (vector bool char a1, vector unsigned char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_all_eq (vector bool char a1, vector signed char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_all_eq (vector signed short a1, vector bool short a2)
 {
   return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
 }
@@ -5034,7 +6319,7 @@ vec_all_eq (vector signed short a1, vector signed short a2)
 }
 
 inline int
-vec_all_eq (vector unsigned short a1, vector signed short a2)
+vec_all_eq (vector unsigned short a1, vector bool short a2)
 {
   return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
 }
@@ -5046,7 +6331,31 @@ vec_all_eq (vector unsigned short a1, vector unsigned short a2)
 }
 
 inline int
-vec_all_eq (vector signed int a1, vector unsigned int a2)
+vec_all_eq (vector bool short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_all_eq (vector bool short a1, vector unsigned short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_all_eq (vector bool short a1, vector signed short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_all_eq (vector pixel a1, vector pixel a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_all_eq (vector signed int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
 }
@@ -5058,7 +6367,7 @@ vec_all_eq (vector signed int a1, vector signed int a2)
 }
 
 inline int
-vec_all_eq (vector unsigned int a1, vector signed int a2)
+vec_all_eq (vector unsigned int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
 }
@@ -5069,6 +6378,24 @@ vec_all_eq (vector unsigned int a1, vector unsigned int a2)
   return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
 }
 
+inline int
+vec_all_eq (vector bool int a1, vector bool int a2)
+{
+  return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
+}
+
+inline int
+vec_all_eq (vector bool int a1, vector unsigned int a2)
+{
+  return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
+}
+
+inline int
+vec_all_eq (vector bool int a1, vector signed int a2)
+{
+  return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
+}
+
 inline int
 vec_all_eq (vector float a1, vector float a2)
 {
@@ -5078,13 +6405,13 @@ vec_all_eq (vector float a1, vector float a2)
 /* vec_all_ge */
 
 inline int
-vec_all_ge (vector signed char a1, vector unsigned char a2)
+vec_all_ge (vector bool char a1, vector unsigned char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
 }
 
 inline int
-vec_all_ge (vector unsigned char a1, vector signed char a2)
+vec_all_ge (vector unsigned char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
 }
@@ -5095,6 +6422,18 @@ vec_all_ge (vector unsigned char a1, vector unsigned char a2)
   return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
 }
 
+inline int
+vec_all_ge (vector bool char a1, vector signed char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
+}
+
+inline int
+vec_all_ge (vector signed char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
+}
+
 inline int
 vec_all_ge (vector signed char a1, vector signed char a2)
 {
@@ -5102,13 +6441,13 @@ vec_all_ge (vector signed char a1, vector signed char a2)
 }
 
 inline int
-vec_all_ge (vector signed short a1, vector unsigned short a2)
+vec_all_ge (vector bool short a1, vector unsigned short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
 }
 
 inline int
-vec_all_ge (vector unsigned short a1, vector signed short a2)
+vec_all_ge (vector unsigned short a1, vector bool short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
 }
@@ -5126,13 +6465,25 @@ vec_all_ge (vector signed short a1, vector signed short a2)
 }
 
 inline int
-vec_all_ge (vector signed int a1, vector unsigned int a2)
+vec_all_ge (vector bool short a1, vector signed short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
+}
+
+inline int
+vec_all_ge (vector signed short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
+}
+
+inline int
+vec_all_ge (vector bool int a1, vector unsigned int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
 }
 
 inline int
-vec_all_ge (vector unsigned int a1, vector signed int a2)
+vec_all_ge (vector unsigned int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
 }
@@ -5143,6 +6494,18 @@ vec_all_ge (vector unsigned int a1, vector unsigned int a2)
   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
 }
 
+inline int
+vec_all_ge (vector bool int a1, vector signed int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
+}
+
+inline int
+vec_all_ge (vector signed int a1, vector bool int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
+}
+
 inline int
 vec_all_ge (vector signed int a1, vector signed int a2)
 {
@@ -5158,13 +6521,13 @@ vec_all_ge (vector float a1, vector float a2)
 /* vec_all_gt */
 
 inline int
-vec_all_gt (vector signed char a1, vector unsigned char a2)
+vec_all_gt (vector bool char a1, vector unsigned char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
 }
 
 inline int
-vec_all_gt (vector unsigned char a1, vector signed char a2)
+vec_all_gt (vector unsigned char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
 }
@@ -5175,6 +6538,18 @@ vec_all_gt (vector unsigned char a1, vector unsigned char a2)
   return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
 }
 
+inline int
+vec_all_gt (vector bool char a1, vector signed char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_all_gt (vector signed char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
+}
+
 inline int
 vec_all_gt (vector signed char a1, vector signed char a2)
 {
@@ -5182,13 +6557,13 @@ vec_all_gt (vector signed char a1, vector signed char a2)
 }
 
 inline int
-vec_all_gt (vector signed short a1, vector unsigned short a2)
+vec_all_gt (vector bool short a1, vector unsigned short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
 }
 
 inline int
-vec_all_gt (vector unsigned short a1, vector signed short a2)
+vec_all_gt (vector unsigned short a1, vector bool short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
 }
@@ -5199,6 +6574,18 @@ vec_all_gt (vector unsigned short a1, vector unsigned short a2)
   return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
 }
 
+inline int
+vec_all_gt (vector bool short a1, vector signed short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_all_gt (vector signed short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
+}
+
 inline int
 vec_all_gt (vector signed short a1, vector signed short a2)
 {
@@ -5206,13 +6593,13 @@ vec_all_gt (vector signed short a1, vector signed short a2)
 }
 
 inline int
-vec_all_gt (vector signed int a1, vector unsigned int a2)
+vec_all_gt (vector bool int a1, vector unsigned int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_all_gt (vector unsigned int a1, vector signed int a2)
+vec_all_gt (vector unsigned int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
 }
@@ -5223,6 +6610,18 @@ vec_all_gt (vector unsigned int a1, vector unsigned int a2)
   return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
 }
 
+inline int
+vec_all_gt (vector bool int a1, vector signed int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
+}
+
+inline int
+vec_all_gt (vector signed int a1, vector bool int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
+}
+
 inline int
 vec_all_gt (vector signed int a1, vector signed int a2)
 {
@@ -5246,13 +6645,13 @@ vec_all_in (vector float a1, vector float a2)
 /* vec_all_le */
 
 inline int
-vec_all_le (vector signed char a1, vector unsigned char a2)
+vec_all_le (vector bool char a1, vector unsigned char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
 }
 
 inline int
-vec_all_le (vector unsigned char a1, vector signed char a2)
+vec_all_le (vector unsigned char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
 }
@@ -5263,6 +6662,18 @@ vec_all_le (vector unsigned char a1, vector unsigned char a2)
   return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
 }
 
+inline int
+vec_all_le (vector bool char a1, vector signed char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_all_le (vector signed char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
+}
+
 inline int
 vec_all_le (vector signed char a1, vector signed char a2)
 {
@@ -5270,13 +6681,13 @@ vec_all_le (vector signed char a1, vector signed char a2)
 }
 
 inline int
-vec_all_le (vector signed short a1, vector unsigned short a2)
+vec_all_le (vector bool short a1, vector unsigned short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
 }
 
 inline int
-vec_all_le (vector unsigned short a1, vector signed short a2)
+vec_all_le (vector unsigned short a1, vector bool short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
 }
@@ -5287,6 +6698,18 @@ vec_all_le (vector unsigned short a1, vector unsigned short a2)
   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
 }
 
+inline int
+vec_all_le (vector bool short a1, vector signed short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_all_le (vector signed short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
+}
+
 inline int
 vec_all_le (vector signed short a1, vector signed short a2)
 {
@@ -5294,13 +6717,13 @@ vec_all_le (vector signed short a1, vector signed short a2)
 }
 
 inline int
-vec_all_le (vector signed int a1, vector unsigned int a2)
+vec_all_le (vector bool int a1, vector unsigned int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_all_le (vector unsigned int a1, vector signed int a2)
+vec_all_le (vector unsigned int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
 }
@@ -5311,6 +6734,18 @@ vec_all_le (vector unsigned int a1, vector unsigned int a2)
   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
 }
 
+inline int
+vec_all_le (vector bool int a1, vector signed int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
+}
+
+inline int
+vec_all_le (vector signed int a1, vector bool int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
+}
+
 inline int
 vec_all_le (vector signed int a1, vector signed int a2)
 {
@@ -5326,13 +6761,13 @@ vec_all_le (vector float a1, vector float a2)
 /* vec_all_lt */
 
 inline int
-vec_all_lt (vector signed char a1, vector unsigned char a2)
+vec_all_lt (vector bool char a1, vector unsigned char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
 }
 
 inline int
-vec_all_lt (vector unsigned char a1, vector signed char a2)
+vec_all_lt (vector unsigned char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
 }
@@ -5343,6 +6778,18 @@ vec_all_lt (vector unsigned char a1, vector unsigned char a2)
   return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
 }
 
+inline int
+vec_all_lt (vector bool char a1, vector signed char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
+}
+
+inline int
+vec_all_lt (vector signed char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
+}
+
 inline int
 vec_all_lt (vector signed char a1, vector signed char a2)
 {
@@ -5350,13 +6797,13 @@ vec_all_lt (vector signed char a1, vector signed char a2)
 }
 
 inline int
-vec_all_lt (vector signed short a1, vector unsigned short a2)
+vec_all_lt (vector bool short a1, vector unsigned short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
 }
 
 inline int
-vec_all_lt (vector unsigned short a1, vector signed short a2)
+vec_all_lt (vector unsigned short a1, vector bool short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
 }
@@ -5367,6 +6814,18 @@ vec_all_lt (vector unsigned short a1, vector unsigned short a2)
   return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
 }
 
+inline int
+vec_all_lt (vector bool short a1, vector signed short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
+}
+
+inline int
+vec_all_lt (vector signed short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
+}
+
 inline int
 vec_all_lt (vector signed short a1, vector signed short a2)
 {
@@ -5374,13 +6833,13 @@ vec_all_lt (vector signed short a1, vector signed short a2)
 }
 
 inline int
-vec_all_lt (vector signed int a1, vector unsigned int a2)
+vec_all_lt (vector bool int a1, vector unsigned int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
 }
 
 inline int
-vec_all_lt (vector unsigned int a1, vector signed int a2)
+vec_all_lt (vector unsigned int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
 }
@@ -5391,6 +6850,18 @@ vec_all_lt (vector unsigned int a1, vector unsigned int a2)
   return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
 }
 
+inline int
+vec_all_lt (vector bool int a1, vector signed int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
+}
+
+inline int
+vec_all_lt (vector signed int a1, vector bool int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
+}
+
 inline int
 vec_all_lt (vector signed int a1, vector signed int a2)
 {
@@ -5414,7 +6885,7 @@ vec_all_nan (vector float a1)
 /* vec_all_ne */
 
 inline int
-vec_all_ne (vector signed char a1, vector unsigned char a2)
+vec_all_ne (vector signed char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
 }
@@ -5422,65 +6893,119 @@ vec_all_ne (vector signed char a1, vector unsigned char a2)
 inline int
 vec_all_ne (vector signed char a1, vector signed char a2)
 {
-  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
+  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_all_ne (vector unsigned char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_all_ne (vector unsigned char a1, vector unsigned char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_all_ne (vector bool char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_all_ne (vector bool char a1, vector unsigned char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_all_ne (vector bool char a1, vector signed char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_all_ne (vector signed short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_all_ne (vector signed short a1, vector signed short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_all_ne (vector unsigned short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_all_ne (vector unsigned short a1, vector unsigned short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
 }
 
 inline int
-vec_all_ne (vector unsigned char a1, vector signed char a2)
+vec_all_ne (vector bool short a1, vector bool short a2)
 {
-  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
+  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
 }
 
 inline int
-vec_all_ne (vector unsigned char a1, vector unsigned char a2)
+vec_all_ne (vector bool short a1, vector unsigned short a2)
 {
-  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
+  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
 }
 
 inline int
-vec_all_ne (vector signed short a1, vector unsigned short a2)
+vec_all_ne (vector bool short a1, vector signed short a2)
 {
   return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
 }
 
 inline int
-vec_all_ne (vector signed short a1, vector signed short a2)
+vec_all_ne (vector signed int a1, vector bool int a2)
 {
-  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
+  return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_all_ne (vector unsigned short a1, vector signed short a2)
+vec_all_ne (vector signed int a1, vector signed int a2)
 {
-  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
+  return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_all_ne (vector unsigned short a1, vector unsigned short a2)
+vec_all_ne (vector unsigned int a1, vector bool int a2)
 {
-  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
+  return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_all_ne (vector signed int a1, vector unsigned int a2)
+vec_all_ne (vector unsigned int a1, vector unsigned int a2)
 {
   return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_all_ne (vector signed int a1, vector signed int a2)
+vec_all_ne (vector bool int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_all_ne (vector unsigned int a1, vector signed int a2)
+vec_all_ne (vector bool int a1, vector unsigned int a2)
 {
   return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_all_ne (vector unsigned int a1, vector unsigned int a2)
+vec_all_ne (vector bool int a1, vector signed int a2)
 {
   return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
 }
@@ -5534,7 +7059,7 @@ vec_all_numeric (vector float a1)
 /* vec_any_eq */
 
 inline int
-vec_any_eq (vector signed char a1, vector unsigned char a2)
+vec_any_eq (vector signed char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
 }
@@ -5546,7 +7071,7 @@ vec_any_eq (vector signed char a1, vector signed char a2)
 }
 
 inline int
-vec_any_eq (vector unsigned char a1, vector signed char a2)
+vec_any_eq (vector unsigned char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
 }
@@ -5558,7 +7083,25 @@ vec_any_eq (vector unsigned char a1, vector unsigned char a2)
 }
 
 inline int
-vec_any_eq (vector signed short a1, vector unsigned short a2)
+vec_any_eq (vector bool char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_any_eq (vector bool char a1, vector unsigned char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_any_eq (vector bool char a1, vector signed char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_any_eq (vector signed short a1, vector bool short a2)
 {
   return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
 }
@@ -5570,7 +7113,7 @@ vec_any_eq (vector signed short a1, vector signed short a2)
 }
 
 inline int
-vec_any_eq (vector unsigned short a1, vector signed short a2)
+vec_any_eq (vector unsigned short a1, vector bool short a2)
 {
   return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
 }
@@ -5582,7 +7125,31 @@ vec_any_eq (vector unsigned short a1, vector unsigned short a2)
 }
 
 inline int
-vec_any_eq (vector signed int a1, vector unsigned int a2)
+vec_any_eq (vector bool short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_any_eq (vector bool short a1, vector unsigned short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_any_eq (vector bool short a1, vector signed short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_any_eq (vector pixel a1, vector pixel a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_any_eq (vector signed int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
 }
@@ -5594,7 +7161,7 @@ vec_any_eq (vector signed int a1, vector signed int a2)
 }
 
 inline int
-vec_any_eq (vector unsigned int a1, vector signed int a2)
+vec_any_eq (vector unsigned int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
 }
@@ -5605,6 +7172,24 @@ vec_any_eq (vector unsigned int a1, vector unsigned int a2)
   return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
 }
 
+inline int
+vec_any_eq (vector bool int a1, vector bool int a2)
+{
+  return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
+}
+
+inline int
+vec_any_eq (vector bool int a1, vector unsigned int a2)
+{
+  return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
+}
+
+inline int
+vec_any_eq (vector bool int a1, vector signed int a2)
+{
+  return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
+}
+
 inline int
 vec_any_eq (vector float a1, vector float a2)
 {
@@ -5614,13 +7199,13 @@ vec_any_eq (vector float a1, vector float a2)
 /* vec_any_ge */
 
 inline int
-vec_any_ge (vector signed char a1, vector unsigned char a2)
+vec_any_ge (vector signed char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
 }
 
 inline int
-vec_any_ge (vector unsigned char a1, vector signed char a2)
+vec_any_ge (vector unsigned char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
 }
@@ -5638,13 +7223,31 @@ vec_any_ge (vector signed char a1, vector signed char a2)
 }
 
 inline int
-vec_any_ge (vector signed short a1, vector unsigned short a2)
+vec_any_ge (vector bool char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
+}
+
+inline int
+vec_any_ge (vector bool char a1, vector unsigned char a2)
+{
+  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
+}
+
+inline int
+vec_any_ge (vector bool char a1, vector signed char a2)
+{
+  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
+}
+
+inline int
+vec_any_ge (vector signed short a1, vector bool short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
 }
 
 inline int
-vec_any_ge (vector unsigned short a1, vector signed short a2)
+vec_any_ge (vector unsigned short a1, vector bool short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
 }
@@ -5662,13 +7265,31 @@ vec_any_ge (vector signed short a1, vector signed short a2)
 }
 
 inline int
-vec_any_ge (vector signed int a1, vector unsigned int a2)
+vec_any_ge (vector bool short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
+}
+
+inline int
+vec_any_ge (vector bool short a1, vector unsigned short a2)
+{
+  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
+}
+
+inline int
+vec_any_ge (vector bool short a1, vector signed short a2)
+{
+  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
+}
+
+inline int
+vec_any_ge (vector signed int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
 }
 
 inline int
-vec_any_ge (vector unsigned int a1, vector signed int a2)
+vec_any_ge (vector unsigned int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
 }
@@ -5685,6 +7306,24 @@ vec_any_ge (vector signed int a1, vector signed int a2)
   return __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
 }
 
+inline int
+vec_any_ge (vector bool int a1, vector bool int a2)
+{
+  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
+}
+
+inline int
+vec_any_ge (vector bool int a1, vector unsigned int a2)
+{
+  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
+}
+
+inline int
+vec_any_ge (vector bool int a1, vector signed int a2)
+{
+  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
+}
+
 inline int
 vec_any_ge (vector float a1, vector float a2)
 {
@@ -5694,13 +7333,13 @@ vec_any_ge (vector float a1, vector float a2)
 /* vec_any_gt */
 
 inline int
-vec_any_gt (vector signed char a1, vector unsigned char a2)
+vec_any_gt (vector bool char a1, vector unsigned char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
 }
 
 inline int
-vec_any_gt (vector unsigned char a1, vector signed char a2)
+vec_any_gt (vector unsigned char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
 }
@@ -5711,6 +7350,18 @@ vec_any_gt (vector unsigned char a1, vector unsigned char a2)
   return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
 }
 
+inline int
+vec_any_gt (vector bool char a1, vector signed char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_any_gt (vector signed char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
+}
+
 inline int
 vec_any_gt (vector signed char a1, vector signed char a2)
 {
@@ -5718,13 +7369,13 @@ vec_any_gt (vector signed char a1, vector signed char a2)
 }
 
 inline int
-vec_any_gt (vector signed short a1, vector unsigned short a2)
+vec_any_gt (vector bool short a1, vector unsigned short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
 }
 
 inline int
-vec_any_gt (vector unsigned short a1, vector signed short a2)
+vec_any_gt (vector unsigned short a1, vector bool short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
 }
@@ -5735,6 +7386,18 @@ vec_any_gt (vector unsigned short a1, vector unsigned short a2)
   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
 }
 
+inline int
+vec_any_gt (vector bool short a1, vector signed short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_any_gt (vector signed short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
+}
+
 inline int
 vec_any_gt (vector signed short a1, vector signed short a2)
 {
@@ -5742,13 +7405,13 @@ vec_any_gt (vector signed short a1, vector signed short a2)
 }
 
 inline int
-vec_any_gt (vector signed int a1, vector unsigned int a2)
+vec_any_gt (vector bool int a1, vector unsigned int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_any_gt (vector unsigned int a1, vector signed int a2)
+vec_any_gt (vector unsigned int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
 }
@@ -5759,6 +7422,18 @@ vec_any_gt (vector unsigned int a1, vector unsigned int a2)
   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
 }
 
+inline int
+vec_any_gt (vector bool int a1, vector signed int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
+}
+
+inline int
+vec_any_gt (vector signed int a1, vector bool int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
+}
+
 inline int
 vec_any_gt (vector signed int a1, vector signed int a2)
 {
@@ -5774,13 +7449,13 @@ vec_any_gt (vector float a1, vector float a2)
 /* vec_any_le */
 
 inline int
-vec_any_le (vector signed char a1, vector unsigned char a2)
+vec_any_le (vector bool char a1, vector unsigned char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
 }
 
 inline int
-vec_any_le (vector unsigned char a1, vector signed char a2)
+vec_any_le (vector unsigned char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
 }
@@ -5791,6 +7466,18 @@ vec_any_le (vector unsigned char a1, vector unsigned char a2)
   return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
 }
 
+inline int
+vec_any_le (vector bool char a1, vector signed char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_any_le (vector signed char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
+}
+
 inline int
 vec_any_le (vector signed char a1, vector signed char a2)
 {
@@ -5798,13 +7485,13 @@ vec_any_le (vector signed char a1, vector signed char a2)
 }
 
 inline int
-vec_any_le (vector signed short a1, vector unsigned short a2)
+vec_any_le (vector bool short a1, vector unsigned short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
 }
 
 inline int
-vec_any_le (vector unsigned short a1, vector signed short a2)
+vec_any_le (vector unsigned short a1, vector bool short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
 }
@@ -5815,6 +7502,18 @@ vec_any_le (vector unsigned short a1, vector unsigned short a2)
   return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
 }
 
+inline int
+vec_any_le (vector bool short a1, vector signed short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_any_le (vector signed short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
+}
+
 inline int
 vec_any_le (vector signed short a1, vector signed short a2)
 {
@@ -5822,13 +7521,13 @@ vec_any_le (vector signed short a1, vector signed short a2)
 }
 
 inline int
-vec_any_le (vector signed int a1, vector unsigned int a2)
+vec_any_le (vector bool int a1, vector unsigned int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_any_le (vector unsigned int a1, vector signed int a2)
+vec_any_le (vector unsigned int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
 }
@@ -5839,6 +7538,18 @@ vec_any_le (vector unsigned int a1, vector unsigned int a2)
   return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
 }
 
+inline int
+vec_any_le (vector bool int a1, vector signed int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
+}
+
+inline int
+vec_any_le (vector signed int a1, vector bool int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
+}
+
 inline int
 vec_any_le (vector signed int a1, vector signed int a2)
 {
@@ -5854,13 +7565,13 @@ vec_any_le (vector float a1, vector float a2)
 /* vec_any_lt */
 
 inline int
-vec_any_lt (vector signed char a1, vector unsigned char a2)
+vec_any_lt (vector bool char a1, vector unsigned char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
 }
 
 inline int
-vec_any_lt (vector unsigned char a1, vector signed char a2)
+vec_any_lt (vector unsigned char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
 }
@@ -5871,6 +7582,18 @@ vec_any_lt (vector unsigned char a1, vector unsigned char a2)
   return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
 }
 
+inline int
+vec_any_lt (vector bool char a1, vector signed char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
+}
+
+inline int
+vec_any_lt (vector signed char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
+}
+
 inline int
 vec_any_lt (vector signed char a1, vector signed char a2)
 {
@@ -5878,13 +7601,13 @@ vec_any_lt (vector signed char a1, vector signed char a2)
 }
 
 inline int
-vec_any_lt (vector signed short a1, vector unsigned short a2)
+vec_any_lt (vector bool short a1, vector unsigned short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
 }
 
 inline int
-vec_any_lt (vector unsigned short a1, vector signed short a2)
+vec_any_lt (vector unsigned short a1, vector bool short a2)
 {
   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
 }
@@ -5895,6 +7618,18 @@ vec_any_lt (vector unsigned short a1, vector unsigned short a2)
   return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
 }
 
+inline int
+vec_any_lt (vector bool short a1, vector signed short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
+}
+
+inline int
+vec_any_lt (vector signed short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
+}
+
 inline int
 vec_any_lt (vector signed short a1, vector signed short a2)
 {
@@ -5902,13 +7637,13 @@ vec_any_lt (vector signed short a1, vector signed short a2)
 }
 
 inline int
-vec_any_lt (vector signed int a1, vector unsigned int a2)
+vec_any_lt (vector bool int a1, vector unsigned int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
 }
 
 inline int
-vec_any_lt (vector unsigned int a1, vector signed int a2)
+vec_any_lt (vector unsigned int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
 }
@@ -5919,6 +7654,18 @@ vec_any_lt (vector unsigned int a1, vector unsigned int a2)
   return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
 }
 
+inline int
+vec_any_lt (vector bool int a1, vector signed int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
+}
+
+inline int
+vec_any_lt (vector signed int a1, vector bool int a2)
+{
+  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
+}
+
 inline int
 vec_any_lt (vector signed int a1, vector signed int a2)
 {
@@ -5942,7 +7689,7 @@ vec_any_nan (vector float a1)
 /* vec_any_ne */
 
 inline int
-vec_any_ne (vector signed char a1, vector unsigned char a2)
+vec_any_ne (vector signed char a1, vector bool char a2)
 {
   return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
 }
@@ -5954,61 +7701,121 @@ vec_any_ne (vector signed char a1, vector signed char a2)
 }
 
 inline int
-vec_any_ne (vector unsigned char a1, vector signed char a2)
+vec_any_ne (vector unsigned char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_any_ne (vector unsigned char a1, vector unsigned char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_any_ne (vector bool char a1, vector bool char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_any_ne (vector bool char a1, vector unsigned char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_any_ne (vector bool char a1, vector signed char a2)
+{
+  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
+}
+
+inline int
+vec_any_ne (vector signed short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_any_ne (vector signed short a1, vector signed short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_any_ne (vector unsigned short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_any_ne (vector unsigned short a1, vector unsigned short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_any_ne (vector bool short a1, vector bool short a2)
+{
+  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
+}
+
+inline int
+vec_any_ne (vector bool short a1, vector unsigned short a2)
 {
-  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
+  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
 }
 
 inline int
-vec_any_ne (vector unsigned char a1, vector unsigned char a2)
+vec_any_ne (vector bool short a1, vector signed short a2)
 {
-  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
+  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
 }
 
 inline int
-vec_any_ne (vector signed short a1, vector unsigned short a2)
+vec_any_ne (vector pixel a1, vector pixel a2)
 {
   return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
 }
 
 inline int
-vec_any_ne (vector signed short a1, vector signed short a2)
+vec_any_ne (vector signed int a1, vector bool int a2)
 {
-  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
+  return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_any_ne (vector unsigned short a1, vector signed short a2)
+vec_any_ne (vector signed int a1, vector signed int a2)
 {
-  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
+  return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_any_ne (vector unsigned short a1, vector unsigned short a2)
+vec_any_ne (vector unsigned int a1, vector bool int a2)
 {
-  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
+  return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_any_ne (vector signed int a1, vector unsigned int a2)
+vec_any_ne (vector unsigned int a1, vector unsigned int a2)
 {
   return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_any_ne (vector signed int a1, vector signed int a2)
+vec_any_ne (vector bool int a1, vector bool int a2)
 {
   return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_any_ne (vector unsigned int a1, vector signed int a2)
+vec_any_ne (vector bool int a1, vector unsigned int a2)
 {
   return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
 }
 
 inline int
-vec_any_ne (vector unsigned int a1, vector unsigned int a2)
+vec_any_ne (vector bool int a1, vector signed int a2)
 {
   return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
 }
@@ -6067,64 +7874,42 @@ vec_any_out (vector float a1, vector float a2)
   return __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, a1, a2);
 }
 
-/* vec_step */
-
-template<typename _Tp>
-struct __vec_step_help
-{
-  // All proper vector types will specialize _S_elem.
-};
-
-template<>
-struct __vec_step_help<vector signed short>
-{
-  static const int _S_elem = 8;
-};
-
-template<>
-struct __vec_step_help<vector unsigned short>
-{
-  static const int _S_elem = 8;
-};
-
-template<>
-struct __vec_step_help<vector signed int>
-{
-  static const int _S_elem = 4;
-};
+} /* extern "C++" */
 
-template<>
-struct __vec_step_help<vector unsigned int>
-{
-  static const int _S_elem = 4;
-};
+#else /* not C++ */
 
-template<>
-struct __vec_step_help<vector unsigned char>
-{
-  static const int _S_elem = 16;
-};
+/* "... and so I think no man in a century will suffer as greatly as
+   you will."  */
 
-template<>
-struct __vec_step_help<vector signed char>
-{
-  static const int _S_elem = 16;
-};
+/* Helper macros.  */
 
-template<>
-struct __vec_step_help<vector float>
-{
-  static const int _S_elem = 4;
-};
+#define __un_args_eq(xtype, x)                                         \
+       __builtin_types_compatible_p (xtype, typeof (x))
 
-#define vec_step(t)  __vec_step_help<typeof(t)>::_S_elem
+#define __bin_args_eq(xtype, x, ytype, y)                              \
+       (__builtin_types_compatible_p (xtype, typeof (x))               \
+        && __builtin_types_compatible_p (ytype, typeof (y)))
 
-}//extern "C++"
+#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)))
 
-#else /* not C++ */
+#define __ch(x, y, z)  __builtin_choose_expr (x, y, z)
 
-/* "... and so I think no man in a century will suffer as greatly as
-   you will."  */
+#define vec_step(t) \
+  __ch (__builtin_types_compatible_p (typeof (t), vector signed int), 4,      \
+  __ch (__builtin_types_compatible_p (typeof (t), vector unsigned int), 4,    \
+  __ch (__builtin_types_compatible_p (typeof (t), vector bool int), 4,        \
+  __ch (__builtin_types_compatible_p (typeof (t), vector signed short), 8,    \
+  __ch (__builtin_types_compatible_p (typeof (t), vector unsigned short), 8,  \
+  __ch (__builtin_types_compatible_p (typeof (t), vector bool short), 8,      \
+  __ch (__builtin_types_compatible_p (typeof (t), vector pixel), 8,           \
+  __ch (__builtin_types_compatible_p (typeof (t), vector signed char), 16,    \
+  __ch (__builtin_types_compatible_p (typeof (t), vector unsigned char), 16,  \
+  __ch (__builtin_types_compatible_p (typeof (t), vector bool char), 16,      \
+  __ch (__builtin_types_compatible_p (typeof (t), vector float), 4,           \
+  __builtin_altivec_compiletime_error ("vec_step"))))))))))))
 
 #define vec_abs(a) \
   __ch (__un_args_eq (vector signed char, (a)), \
@@ -6135,7 +7920,7 @@ struct __vec_step_help<vector float>
         ((vector signed int) __builtin_altivec_abs_v4si ((vector signed int) (a))), \
   __ch (__un_args_eq (vector float, (a)), \
         ((vector float) __builtin_altivec_abs_v4sf ((vector float) (a))), \
-  __altivec_link_error_invalid_argument ()))))
+  __builtin_altivec_compiletime_error ("vec_abs")))))
 
 #define vec_abss(a) \
   __ch (__un_args_eq (vector signed char, (a)), \
@@ -6144,17 +7929,7 @@ struct __vec_step_help<vector float>
         ((vector signed short) __builtin_altivec_abss_v8hi ((vector signed short) (a))), \
   __ch (__un_args_eq (vector signed int, (a)), \
         ((vector signed int) __builtin_altivec_abss_v4si ((vector signed int) (a))), \
-  __altivec_link_error_invalid_argument ())))
-
-#define vec_step(t) \
-  __ch (__builtin_types_compatible_p (typeof (t), vector signed int), 4,      \
-  __ch (__builtin_types_compatible_p (typeof (t), vector unsigned int), 4,    \
-  __ch (__builtin_types_compatible_p (typeof (t), vector signed short), 8,    \
-  __ch (__builtin_types_compatible_p (typeof (t), vector unsigned short), 8,  \
-  __ch (__builtin_types_compatible_p (typeof (t), vector signed char), 16,    \
-  __ch (__builtin_types_compatible_p (typeof (t), vector unsigned char), 16,  \
-  __ch (__builtin_types_compatible_p (typeof (t), vector float), 4,           \
-  __altivec_link_error_invalid_argument ())))))))
+  __builtin_altivec_compiletime_error ("vec_abss"))))
 
 #define vec_vaddubm(a1, a2) \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
@@ -6165,7 +7940,7 @@ __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))), \
-  __altivec_link_error_invalid_argument ()))))
+  __builtin_altivec_compiletime_error ("vec_vaddubm")))))
 
 #define vec_vadduhm(a1, a2) \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
@@ -6176,7 +7951,7 @@ __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))), \
-  __altivec_link_error_invalid_argument ()))))
+  __builtin_altivec_compiletime_error ("vec_vadduhm")))))
 
 #define vec_vadduwm(a1, a2) \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
@@ -6187,78 +7962,102 @@ __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))), \
-  __altivec_link_error_invalid_argument ()))))
+  __builtin_altivec_compiletime_error ("vec_vadduwm")))))
 
 #define vec_vaddfp(a1, 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 ())
+  __builtin_altivec_compiletime_error ("vec_vaddfp"))
 
 #define vec_add(a1, a2) \
+__ch (__bin_args_eq (vector bool 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 bool 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 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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool 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 bool 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 bool 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 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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool 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 bool 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 bool 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 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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool 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 ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_add"))))))))))))))))))))
 
 #define vec_addc(a1, a2) \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
       ((vector unsigned int) __builtin_altivec_vaddcuw ((vector signed int) (a1), (vector signed int) (a2))), \
-    __altivec_link_error_invalid_argument ())
+    __builtin_altivec_compiletime_error ("vec_addc"))
 
 #define vec_adds(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool 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 bool 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 char, (a1), vector bool char, (a2)), \
+      ((vector signed char) __builtin_altivec_vaddsbs ((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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool 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 bool 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 short, (a1), vector bool short, (a2)), \
+      ((vector signed short) __builtin_altivec_vaddshs ((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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool 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 bool int, (a1), vector signed int, (a2)), \
+      ((vector signed int) __builtin_altivec_vaddsws ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
+      ((vector signed int) __builtin_altivec_vaddsws ((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 ()))))))))))))
+    __builtin_altivec_compiletime_error ("vec_adds")))))))))))))))))))
 
 #define vec_vaddsws(a1, 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 ())
+  __builtin_altivec_compiletime_error ("vec_vaddsws"))
 
 #define vec_vadduws(a1, a2) \
 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
@@ -6267,12 +8066,12 @@ __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))), \
-  __altivec_link_error_invalid_argument ())))
+  __builtin_altivec_compiletime_error ("vec_vadduws"))))
 
 #define vec_vaddshs(a1, 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))), \
-  __altivec_link_error_invalid_argument ())
+  __builtin_altivec_compiletime_error ("vec_vaddshs"))
 
 #define vec_vadduhs(a1, a2) \
 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
@@ -6281,12 +8080,12 @@ __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))), \
-  __altivec_link_error_invalid_argument ())))
+  __builtin_altivec_compiletime_error ("vec_vadduhs"))))
 
 #define vec_vaddsbs(a1, 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))), \
-  __altivec_link_error_invalid_argument ())
+  __builtin_altivec_compiletime_error ("vec_vaddsbs"))
 
 #define vec_vaddubs(a1, a2) \
 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
@@ -6295,89 +8094,109 @@ __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))), \
-  __altivec_link_error_invalid_argument ())))
+  __builtin_altivec_compiletime_error ("vec_vaddubs"))))
 
 #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)), \
+__ch (__bin_args_eq (vector float, (a1), vector bool 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)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector float, (a2)), \
       ((vector float) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \
+      ((vector bool int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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 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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool 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 bool short, (a1), vector bool short, (a2)), \
+      ((vector bool short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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 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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool 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 bool char, (a1), vector bool char, (a2)), \
+      ((vector bool char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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 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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool 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 ())))))))))))))))
+    __builtin_altivec_compiletime_error ("vec_and")))))))))))))))))))))))))
 
 #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 unsigned int, (a2)), \
-      ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
-__ch (__bin_args_eq (vector unsigned 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 float, (a2)), \
+__ch (__bin_args_eq (vector float, (a1), vector bool int, (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)), \
+__ch (__bin_args_eq (vector bool 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 unsigned int, (a2)), \
-      ((vector unsigned int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \
+      ((vector bool int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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 signed int, (a2)), \
       ((vector signed int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
-__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
+__ch (__bin_args_eq (vector bool 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 bool 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 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 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)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \
+      ((vector bool short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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 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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool 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 unsigned 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 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)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \
+      ((vector bool char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 signed char, (a2)), \
+__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \
       ((vector signed char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
-__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (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))), \
-    __altivec_link_error_invalid_argument ())))))))))))))))))))))))
+__ch (__bin_args_eq (vector bool 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 bool 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))), \
+    __builtin_altivec_compiletime_error ("vec_andc")))))))))))))))))))))))))
 
 #define vec_avg(a1, a2) \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
@@ -6392,390 +8211,453 @@ __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 ()))))))
+    __builtin_altivec_compiletime_error ("vec_avg")))))))
 
 #define vec_vavgsw(a1, 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 ())
+  __builtin_altivec_compiletime_error ("vec_vavgsw"))
 
 #define vec_vavguw(a1, 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))), \
-  __altivec_link_error_invalid_argument ())
+  __builtin_altivec_compiletime_error ("vec_vavguw"))
 
 #define vec_vavgsh(a1, 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))), \
-  __altivec_link_error_invalid_argument ())
+  __builtin_altivec_compiletime_error ("vec_vavgsh"))
 
 #define vec_vavguh(a1, 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))), \
-  __altivec_link_error_invalid_argument ())
+  __builtin_altivec_compiletime_error ("vec_vavguh"))
 
 #define vec_vavgsb(a1, 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))), \
-  __altivec_link_error_invalid_argument ())
+  __builtin_altivec_compiletime_error ("vec_vavgsb"))
 
 #define vec_vavgub(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))), \
-  __altivec_link_error_invalid_argument ())
+  __builtin_altivec_compiletime_error ("vec_vavgub"))
 
-#define vec_ceil(a1) __builtin_altivec_vrfip ((a1))
+#define vec_ceil(a1) \
+__ch (__un_args_eq (vector float, (a1)), \
+      ((vector float) __builtin_altivec_vrfip ((vector float) (a1))), \
+  __builtin_altivec_compiletime_error ("vec_ceil"))
 
-#define vec_cmpb(a1, a2) __builtin_altivec_vcmpbfp ((a1), (a2))
+#define vec_cmpb(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
+      ((vector signed int) __builtin_altivec_vcmpbfp ((vector float) (a1), (vector float) (a2))), \
+  __builtin_altivec_compiletime_error ("vec_cmpb"))
 
 #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))), \
+      ((vector bool 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))), \
+      ((vector bool 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))), \
+      ((vector bool 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))), \
+      ((vector bool 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))), \
+      ((vector bool 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))), \
+      ((vector bool 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 ())))))))
+      ((vector bool int) __builtin_altivec_vcmpeqfp ((vector float) (a1), (vector float) (a2))), \
+    __builtin_altivec_compiletime_error ("vec_cmpeq"))))))))
 
 #define vec_vcmpeqfp(a1, 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 ())
+  __builtin_altivec_compiletime_error ("vec_vcmpeqfp"))
 
 #define vec_vcmpequw(a1, 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))), \
-  __altivec_link_error_invalid_argument ()))
+  __builtin_altivec_compiletime_error ("vec_vcmpequw")))
 
 #define vec_vcmpequh(a1, 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))), \
-  __altivec_link_error_invalid_argument ()))
+  __builtin_altivec_compiletime_error ("vec_vcmpequh")))
 
 #define vec_vcmpequb(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))), \
-  __altivec_link_error_invalid_argument ()))
+  __builtin_altivec_compiletime_error ("vec_vcmpequb")))
 
-#define vec_cmpge(a1, a2) (vector signed int) __builtin_altivec_vcmpgefp ((a1), (a2))
+#define vec_cmpge(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
+      ((vector bool int) __builtin_altivec_vcmpgefp ((vector float) (a1), (vector float) (a2))), \
+  __builtin_altivec_compiletime_error ("vec_cmpge"))
 
 #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))), \
+      ((vector bool 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))), \
+      ((vector bool 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))), \
+      ((vector bool 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))), \
+      ((vector bool 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))), \
+      ((vector bool 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))), \
+      ((vector bool 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 ())))))))
+      ((vector bool int) __builtin_altivec_vcmpgtfp ((vector float) (a1), (vector float) (a2))), \
+    __builtin_altivec_compiletime_error ("vec_cmpgt"))))))))
 
 #define vec_vcmpgtfp(a1, 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 ())
+  __builtin_altivec_compiletime_error ("vec_vcmpgtfp"))
 
 #define vec_vcmpgtsw(a1, 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))), \
-  __altivec_link_error_invalid_argument ())
+  __builtin_altivec_compiletime_error ("vec_abs"))
 
 #define vec_vcmpgtuw(a1, 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))), \
-  __altivec_link_error_invalid_argument ())
+  __builtin_altivec_compiletime_error ("vec_abs"))
 
 #define vec_vcmpgtsh(a1, 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))), \
-  __altivec_link_error_invalid_argument ())
+  __builtin_altivec_compiletime_error ("vec_vcmpgtsh"))
 
 #define vec_vcmpgtuh(a1, 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))), \
-  __altivec_link_error_invalid_argument ())
+  __builtin_altivec_compiletime_error ("vec_vcmpgtuh"))
 
 #define vec_vcmpgtsb(a1, 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))), \
-  __altivec_link_error_invalid_argument ())
+  __builtin_altivec_compiletime_error ("vec_vcmpgtsb"))
 
 #define vec_vcmpgtub(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))), \
-  __altivec_link_error_invalid_argument ())
+  __builtin_altivec_compiletime_error ("vec_vcmpgtub"))
 
-#define vec_cmple(a1, a2) __builtin_altivec_vcmpgefp ((a2), (a1))
+#define vec_cmple(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
+      ((vector bool int) __builtin_altivec_vcmpgefp ((vector float) (a2), (vector float) (a1))), \
+  __builtin_altivec_compiletime_error ("vec_cmple"))
 
 #define vec_cmplt(a2, a1) \
 __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))), \
+      ((vector bool 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))), \
+      ((vector bool 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))), \
+      ((vector bool 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))), \
+      ((vector bool 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))), \
+      ((vector bool 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))), \
+      ((vector bool 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 ())))))))
+      ((vector bool int) __builtin_altivec_vcmpgtfp ((vector float) (a1), (vector float) (a2))), \
+    __builtin_altivec_compiletime_error ("vec_cmplt"))))))))
 
 #define vec_ctf(a1, a2) \
-__ch (__bin_args_eq (vector unsigned int, (a1), int, (a2)), \
-      ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const char) (a2))), \
-__ch (__bin_args_eq (vector signed int, (a1), int, (a2)), \
-      ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const char) (a2))), \
-__ch (__bin_args_eq (vector unsigned int, (a1), unsigned int, (a2)), \
-      ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const char) (a2))), \
-__ch (__bin_args_eq (vector signed int, (a1), unsigned int, (a2)), \
-      ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const char) (a2))), \
-    __altivec_link_error_invalid_argument ()))))
+__ch (__bin_args_eq (vector unsigned int, (a1), const int, (a2)), \
+      ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const int) (a2))), \
+__ch (__bin_args_eq (vector signed int, (a1), const int, (a2)), \
+      ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const int) (a2))), \
+    __builtin_altivec_compiletime_error ("vec_ctf")))
 
 #define vec_vcfsx(a1, a2) \
 __ch (__bin_args_eq (vector signed int, (a1), int, (a2)), \
-      ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const char) (a2))), \
+      ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const int) (a2))), \
 __ch (__bin_args_eq (vector signed int, (a1), unsigned int, (a2)), \
-      ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const char) (a2))), \
-  __altivec_link_error_invalid_argument ()))
+      ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const int) (a2))), \
+  __builtin_altivec_compiletime_error ("vec_vcfsx")))
 
 #define vec_vcfux(a1, a2) \
 __ch (__bin_args_eq (vector unsigned int, (a1), int, (a2)), \
-      ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const char) (a2))), \
+      ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const int) (a2))), \
 __ch (__bin_args_eq (vector unsigned int, (a1), unsigned int, (a2)), \
-      ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const char) (a2))), \
-  __altivec_link_error_invalid_argument ()))
+      ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const int) (a2))), \
+  __builtin_altivec_compiletime_error ("vec_vcfux")))
 
-#define vec_cts(a1, a2) __builtin_altivec_vctsxs ((a1), (a2))
+#define vec_cts(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), const int, (a2)), \
+      ((vector signed int) __builtin_altivec_vctsxs ((vector float) (a1), (const int) (a2))), \
+    __builtin_altivec_compiletime_error ("vec_cts"))
 
-#define vec_ctu(a1, a2) (vector unsigned int) __builtin_altivec_vctuxs ((a1), (a2))
+#define vec_ctu(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), const int, (a2)), \
+      ((vector unsigned int) __builtin_altivec_vctuxs ((vector float) (a1), (const int) (a2))), \
+    __builtin_altivec_compiletime_error ("vec_ctu"))
 
-#define vec_dss(a1) __builtin_altivec_dss ((a1))
+#define vec_dss(a1) \
+__ch (__un_args_eq (const int, (a1)), \
+      __builtin_altivec_dss ((const int) (a1)), \
+    __builtin_altivec_compiletime_error ("vec_dss"))
 
 #define vec_dssall() __builtin_altivec_dssall ()
 
 #define vec_dst(a1, a2, a3) \
-__ch (__un_args_eq (vector unsigned char, *(a1)), \
+__ch (__tern_args_eq (const vector unsigned char, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
+__ch (__tern_args_eq (const vector signed char, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
+__ch (__tern_args_eq (const vector bool char, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector signed char, *(a1)), \
+__ch (__tern_args_eq (const vector unsigned short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector unsigned short, *(a1)), \
+__ch (__tern_args_eq (const vector signed short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector signed short, *(a1)), \
+__ch (__tern_args_eq (const vector bool short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector unsigned int, *(a1)), \
+__ch (__tern_args_eq (const vector pixel, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector signed int, *(a1)), \
+__ch (__tern_args_eq (const vector unsigned int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector float, *(a1)), \
+__ch (__tern_args_eq (const vector signed int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned char, *(a1)), \
+__ch (__tern_args_eq (const vector bool int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed char, *(a1)), \
+__ch (__tern_args_eq (const vector float, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned short, *(a1)), \
+__ch (__tern_args_eq (const unsigned char, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed short, *(a1)), \
+__ch (__tern_args_eq (const signed char, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned int, *(a1)), \
+__ch (__tern_args_eq (const unsigned short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed int, *(a1)), \
+__ch (__tern_args_eq (const short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned long, *(a1)), \
+__ch (__tern_args_eq (const unsigned int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed long, *(a1)), \
+__ch (__tern_args_eq (const int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (float, *(a1)), \
+__ch (__tern_args_eq (const unsigned long, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
-  __altivec_link_error_invalid_argument ()))))))))))))))))
+__ch (__tern_args_eq (const long, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
+__ch (__tern_args_eq (const float, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \
+  __builtin_altivec_compiletime_error ("vec_dst")))))))))))))))))))))
 
 #define vec_dstst(a1, a2, a3) \
-__ch (__un_args_eq (vector unsigned char, *(a1)), \
+__ch (__tern_args_eq (const vector unsigned char, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
+__ch (__tern_args_eq (const vector signed char, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
+__ch (__tern_args_eq (const vector bool char, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector signed char, *(a1)), \
+__ch (__tern_args_eq (const vector unsigned short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector unsigned short, *(a1)), \
+__ch (__tern_args_eq (const vector signed short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector signed short, *(a1)), \
+__ch (__tern_args_eq (const vector bool short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector unsigned int, *(a1)), \
+__ch (__tern_args_eq (const vector pixel, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector signed int, *(a1)), \
+__ch (__tern_args_eq (const vector unsigned int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector float, *(a1)), \
+__ch (__tern_args_eq (const vector signed int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned char, *(a1)), \
+__ch (__tern_args_eq (const vector bool int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed char, *(a1)), \
+__ch (__tern_args_eq (const vector float, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned short, *(a1)), \
+__ch (__tern_args_eq (const unsigned char, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed short, *(a1)), \
+__ch (__tern_args_eq (const signed char, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned int, *(a1)), \
+__ch (__tern_args_eq (const unsigned short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed int, *(a1)), \
+__ch (__tern_args_eq (const short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned long, *(a1)), \
+__ch (__tern_args_eq (const unsigned int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed long, *(a1)), \
+__ch (__tern_args_eq (const int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (float, *(a1)), \
+__ch (__tern_args_eq (const unsigned long, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
-  __altivec_link_error_invalid_argument ()))))))))))))))))
+__ch (__tern_args_eq (const long, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
+__ch (__tern_args_eq (const float, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \
+  __builtin_altivec_compiletime_error ("vec_dstst")))))))))))))))))))))
 
 #define vec_dststt(a1, a2, a3) \
-__ch (__un_args_eq (vector unsigned char, *(a1)), \
+__ch (__tern_args_eq (const vector unsigned char, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
+__ch (__tern_args_eq (const vector signed char, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
+__ch (__tern_args_eq (const vector bool char, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector signed char, *(a1)), \
+__ch (__tern_args_eq (const vector unsigned short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector unsigned short, *(a1)), \
+__ch (__tern_args_eq (const vector signed short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector signed short, *(a1)), \
+__ch (__tern_args_eq (const vector bool short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector unsigned int, *(a1)), \
+__ch (__tern_args_eq (const vector pixel, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector signed int, *(a1)), \
+__ch (__tern_args_eq (const vector unsigned int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector float, *(a1)), \
+__ch (__tern_args_eq (const vector signed int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned char, *(a1)), \
+__ch (__tern_args_eq (const vector bool int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed char, *(a1)), \
+__ch (__tern_args_eq (const vector float, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned short, *(a1)), \
+__ch (__tern_args_eq (const unsigned char, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed short, *(a1)), \
+__ch (__tern_args_eq (const signed char, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned int, *(a1)), \
+__ch (__tern_args_eq (const unsigned short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed int, *(a1)), \
+__ch (__tern_args_eq (const short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned long, *(a1)), \
+__ch (__tern_args_eq (const unsigned int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed long, *(a1)), \
+__ch (__tern_args_eq (const int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (float, *(a1)), \
+__ch (__tern_args_eq (const unsigned long, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
-  __altivec_link_error_invalid_argument ()))))))))))))))))
+__ch (__tern_args_eq (const long, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
+__ch (__tern_args_eq (const float, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \
+  __builtin_altivec_compiletime_error ("vec_dststt")))))))))))))))))))))
 
 #define vec_dstt(a1, a2, a3) \
-__ch (__un_args_eq (vector unsigned char, *(a1)), \
+__ch (__tern_args_eq (const vector unsigned char, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
+__ch (__tern_args_eq (const vector signed char, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
+__ch (__tern_args_eq (const vector bool char, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector signed char, *(a1)), \
+__ch (__tern_args_eq (const vector unsigned short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector unsigned short, *(a1)), \
+__ch (__tern_args_eq (const vector signed short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector signed short, *(a1)), \
+__ch (__tern_args_eq (const vector bool short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector unsigned int, *(a1)), \
+__ch (__tern_args_eq (const vector pixel, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector signed int, *(a1)), \
+__ch (__tern_args_eq (const vector unsigned int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (vector float, *(a1)), \
+__ch (__tern_args_eq (const vector signed int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned char, *(a1)), \
+__ch (__tern_args_eq (const vector bool int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed char, *(a1)), \
+__ch (__tern_args_eq (const vector float, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned short, *(a1)), \
+__ch (__tern_args_eq (const unsigned char, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed short, *(a1)), \
+__ch (__tern_args_eq (const signed char, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned int, *(a1)), \
+__ch (__tern_args_eq (const unsigned short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed int, *(a1)), \
+__ch (__tern_args_eq (const short, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (unsigned long, *(a1)), \
+__ch (__tern_args_eq (const unsigned int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (signed long, *(a1)), \
+__ch (__tern_args_eq (const int, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-__ch (__un_args_eq (float, *(a1)), \
+__ch (__tern_args_eq (const unsigned long, *(a1), int, (a2), const int, (a3)), \
       __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
-  __altivec_link_error_invalid_argument ()))))))))))))))))
+__ch (__tern_args_eq (const long, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
+__ch (__tern_args_eq (const float, *(a1), int, (a2), const int, (a3)), \
+      __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \
+  __builtin_altivec_compiletime_error ("vec_dstt")))))))))))))))))))))
 
-#define vec_expte(a1) __builtin_altivec_vexptefp ((a1))
+#define vec_expte(a1) \
+__ch (__un_args_eq (vector float, (a1)), \
+      ((vector float) __builtin_altivec_vexptefp ((vector float) (a1))), \
+  __builtin_altivec_compiletime_error ("vec_expte"))
 
-#define vec_floor(a1) __builtin_altivec_vrfim (a1)
+#define vec_floor(a1) \
+__ch (__un_args_eq (vector float, (a1)), \
+      ((vector float) __builtin_altivec_vrfim ((vector float) (a1))), \
+  __builtin_altivec_compiletime_error ("vec_floor"))
 
 #define vec_ld(a, b) \
-__ch (__un_args_eq (vector unsigned char, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector unsigned char, *(b)), \
       ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (unsigned char, *(b)), \
+__ch (__bin_args_eq (int, (a), const unsigned char, *(b)), \
       ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (vector signed char, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector signed char, *(b)), \
       ((vector signed char) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (signed char, *(b)), \
+__ch (__bin_args_eq (int, (a), const signed char, *(b)), \
       ((vector signed char) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (vector unsigned short, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector bool char, *(b)), \
+      ((vector bool char) __builtin_altivec_lvx ((a), (b))), \
+__ch (__bin_args_eq (int, (a), const vector unsigned short, *(b)), \
       ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (unsigned short, *(b)), \
+__ch (__bin_args_eq (int, (a), const unsigned short, *(b)), \
       ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (vector signed short, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector signed short, *(b)), \
       ((vector signed short) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (signed short, *(b)), \
+__ch (__bin_args_eq (int, (a), const short, *(b)), \
       ((vector signed short) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (vector unsigned int, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector bool short, *(b)), \
+      ((vector bool short) __builtin_altivec_lvx ((a), (b))), \
+__ch (__bin_args_eq (int, (a), const vector pixel, *(b)), \
+      ((vector pixel) __builtin_altivec_lvx ((a), (b))), \
+__ch (__bin_args_eq (int, (a), const vector unsigned int, *(b)), \
       ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (unsigned int, *(b)), \
+__ch (__bin_args_eq (int, (a), const unsigned int, *(b)), \
       ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (unsigned long, *(b)), \
+__ch (__bin_args_eq (int, (a), const unsigned long, *(b)), \
       ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (vector signed int, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector signed int, *(b)), \
       ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (signed int, *(b)), \
+__ch (__bin_args_eq (int, (a), const int, *(b)), \
       ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (signed long, *(b)), \
+__ch (__bin_args_eq (int, (a), const long, *(b)), \
       ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (vector float, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector bool int, *(b)), \
+      ((vector bool int) __builtin_altivec_lvx ((a), (b))), \
+__ch (__bin_args_eq (int, (a), const vector float, *(b)), \
       ((vector float) __builtin_altivec_lvx ((a), (b))), \
-__ch (__un_args_eq (float, *(b)), \
+__ch (__bin_args_eq (int, (a), const float, *(b)), \
       ((vector float) __builtin_altivec_lvx ((a), (b))), \
-__altivec_link_error_invalid_argument ()))))))))))))))))
+__builtin_altivec_compiletime_error ("vec_ld")))))))))))))))))))))
 
 #define vec_lde(a, b) \
-__ch (__un_args_eq (unsigned char, *(b)), \
+__ch (__bin_args_eq (int, (a), const unsigned char, *(b)), \
       ((vector unsigned char) __builtin_altivec_lvebx ((a), (b))), \
-__ch (__un_args_eq (signed char, *(b)), \
+__ch (__bin_args_eq (int, (a), const signed char, *(b)), \
       ((vector signed char) __builtin_altivec_lvebx ((a), (b))), \
-__ch (__un_args_eq (unsigned short, *(b)), \
+__ch (__bin_args_eq (int, (a), const unsigned short, *(b)), \
       ((vector unsigned short) __builtin_altivec_lvehx ((a), (b))), \
-__ch (__un_args_eq (signed short, *(b)), \
+__ch (__bin_args_eq (int, (a), const short, *(b)), \
       ((vector signed short) __builtin_altivec_lvehx ((a), (b))), \
-__ch (__un_args_eq (unsigned long, *(b)), \
+__ch (__bin_args_eq (int, (a), const unsigned long, *(b)), \
       ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \
-__ch (__un_args_eq (signed long, *(b)), \
+__ch (__bin_args_eq (int, (a), const long, *(b)), \
       ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \
-__ch (__un_args_eq (unsigned int, *(b)), \
+__ch (__bin_args_eq (int, (a), const unsigned int, *(b)), \
       ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \
-__ch (__un_args_eq (signed int, *(b)), \
+__ch (__bin_args_eq (int, (a), const int, *(b)), \
       ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \
-__ch (__un_args_eq (float, *(b)), \
+__ch (__bin_args_eq (int, (a), const float, *(b)), \
       ((vector float) __builtin_altivec_lvewx ((a), (b))), \
-__altivec_link_error_invalid_argument ())))))))))
+__builtin_altivec_compiletime_error ("vec_lde"))))))))))
 
 #define vec_lvewx(a, b) \
 __ch (__un_args_eq (unsigned int, *(b)), \
@@ -6788,143 +8670,172 @@ __ch (__un_args_eq (signed long, *(b)), \
       ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \
 __ch (__un_args_eq (float, *(b)), \
       ((vector float) __builtin_altivec_lvewx ((a), (b))), \
-__altivec_link_error_invalid_argument ())))))
+__builtin_altivec_compiletime_error ("vec_lvewx"))))))
 
 #define vec_lvehx(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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_lvehx")))
 
 #define vec_lvebx(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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_lvebx")))
 
 #define vec_ldl(a, b) \
-__ch (__un_args_eq (vector unsigned char, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector unsigned char, *(b)), \
       ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (unsigned char, *(b)), \
+__ch (__bin_args_eq (int, (a), const unsigned char, *(b)), \
       ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (vector signed char, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector signed char, *(b)), \
       ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (signed char, *(b)), \
+__ch (__bin_args_eq (int, (a), const signed char, *(b)), \
       ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (vector unsigned short, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector bool char, *(b)), \
+      ((vector bool char) __builtin_altivec_lvxl ((a), (b))), \
+__ch (__bin_args_eq (int, (a), const vector unsigned short, *(b)), \
       ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (unsigned short, *(b)), \
+__ch (__bin_args_eq (int, (a), const unsigned short, *(b)), \
       ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (vector signed short, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector signed short, *(b)), \
       ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (signed short, *(b)), \
+__ch (__bin_args_eq (int, (a), const short, *(b)), \
       ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (vector unsigned int, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector bool short, *(b)), \
+      ((vector bool short) __builtin_altivec_lvxl ((a), (b))), \
+__ch (__bin_args_eq (int, (a), const vector pixel, *(b)), \
+      ((vector pixel) __builtin_altivec_lvxl ((a), (b))), \
+__ch (__bin_args_eq (int, (a), const vector unsigned int, *(b)), \
       ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (unsigned int, *(b)), \
+__ch (__bin_args_eq (int, (a), const unsigned int, *(b)), \
       ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (unsigned long, *(b)), \
+__ch (__bin_args_eq (int, (a), const unsigned long, *(b)), \
       ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (vector signed int, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector signed int, *(b)), \
       ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (signed int, *(b)), \
+__ch (__bin_args_eq (int, (a), const int, *(b)), \
       ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (signed long, *(b)), \
+__ch (__bin_args_eq (int, (a), const long, *(b)), \
       ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (vector float, *(b)), \
+__ch (__bin_args_eq (int, (a), const vector bool int, *(b)), \
+      ((vector bool int) __builtin_altivec_lvxl ((a), (b))), \
+__ch (__bin_args_eq (int, (a), const vector float, *(b)), \
       ((vector float) __builtin_altivec_lvxl ((a), (b))), \
-__ch (__un_args_eq (float, *(b)), \
+__ch (__bin_args_eq (int, (a), const float, *(b)), \
       ((vector float) __builtin_altivec_lvxl ((a), (b))), \
-__altivec_link_error_invalid_argument ()))))))))))))))))
+__builtin_altivec_compiletime_error ("vec_ldl")))))))))))))))))))))
 
-#define vec_loge(a1) __builtin_altivec_vlogefp ((a1))
+#define vec_loge(a1) \
+__ch (__un_args_eq (vector float, (a1)), \
+      ((vector float) __builtin_altivec_vlogefp ((vector float) (a1))), \
+  __builtin_altivec_compiletime_error ("vec_loge"))
 
 #define vec_lvsl(a1, a2) \
-__ch (__un_args_eq (unsigned char, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile unsigned char, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
-__ch (__un_args_eq (signed char, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile signed char, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
-__ch (__un_args_eq (unsigned short, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile unsigned short, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
-__ch (__un_args_eq (signed short, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile signed short, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
-__ch (__un_args_eq (unsigned int, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile unsigned int, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
-__ch (__un_args_eq (signed int, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile signed int, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
-__ch (__un_args_eq (unsigned long, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile unsigned long, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
-__ch (__un_args_eq (signed long, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile signed long, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
-__ch (__un_args_eq (float, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile float, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \
-__altivec_link_error_invalid_argument ())))))))))
+__builtin_altivec_compiletime_error ("vec_lvsl"))))))))))
 
 #define vec_lvsr(a1, a2) \
-__ch (__un_args_eq (unsigned char, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile unsigned char, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
-__ch (__un_args_eq (signed char, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile signed char, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
-__ch (__un_args_eq (unsigned short, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile unsigned short, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
-__ch (__un_args_eq (signed short, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile signed short, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
-__ch (__un_args_eq (unsigned int, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile unsigned int, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
-__ch (__un_args_eq (signed int, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile signed int, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
-__ch (__un_args_eq (unsigned long, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile unsigned long, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
-__ch (__un_args_eq (signed long, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile signed long, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
-__ch (__un_args_eq (float, *(a2)), \
+__ch (__bin_args_eq (int, (a1), const volatile float, *(a2)), \
       ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \
-__altivec_link_error_invalid_argument ())))))))))
+__builtin_altivec_compiletime_error ("vec_lvsr"))))))))))
 
-#define vec_madd(a1, a2, a3) (__builtin_altivec_vmaddfp ((a1), (a2), (a3)))
+#define vec_madd(a1, a2, a3) \
+__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector float, (a3)), \
+      ((vector float) __builtin_altivec_vmaddfp ((a1), (a2), (a3))), \
+__builtin_altivec_compiletime_error ("vec_madd"))
 
-#define vec_madds(a1, a2, a3) __builtin_altivec_vmhaddshs ((a1), (a2), (a3))
+#define vec_madds(a1, a2, a3) \
+__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \
+      ((vector signed short) __builtin_altivec_vmhaddshs ((a1), (a2), (a3))), \
+__builtin_altivec_compiletime_error ("vec_madds"))
 
 #define vec_max(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool 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 bool 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 char, (a1), vector bool char, (a2)), \
+      ((vector signed char) __builtin_altivec_vmaxsb ((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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool 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 bool 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 short, (a1), vector bool short, (a2)), \
+      ((vector signed short) __builtin_altivec_vmaxsh ((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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool 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 bool 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 signed int, (a1), vector bool int, (a2)), \
+      ((vector signed int) __builtin_altivec_vmaxsw ((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 ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_max"))))))))))))))))))))
 
 #define vec_vmaxfp(a1, 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 ())
+__builtin_altivec_compiletime_error ("vec_vmaxfp"))
 
 #define vec_vmaxsw(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vmaxsw"))
 
 #define vec_vmaxuw(a1, a2) \
 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
@@ -6933,12 +8844,12 @@ __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))), \
-__altivec_link_error_invalid_argument ())))
+__builtin_altivec_compiletime_error ("vec_vmaxuw"))))
 
 #define vec_vmaxsh(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vmaxsh"))
 
 #define vec_vmaxuh(a1, a2) \
 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
@@ -6947,12 +8858,12 @@ __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))), \
-__altivec_link_error_invalid_argument ())))
+__builtin_altivec_compiletime_error ("vec_vmaxuh"))))
 
 #define vec_vmaxsb(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vmaxsb"))
 
 #define vec_vmaxub(a1, a2) \
 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
@@ -6961,24 +8872,32 @@ __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))), \
-__altivec_link_error_invalid_argument ())))
+__builtin_altivec_compiletime_error ("vec_vmaxub"))))
 
 #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 bool char, (a1), vector bool char, (a2)), \
+      ((vector bool 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 bool short, (a1), vector bool short, (a2)), \
+      ((vector bool short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \
+__ch (__bin_args_eq (vector pixel, (a1), vector pixel, (a2)), \
+      ((vector pixel) __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 ())))))))
+__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \
+      ((vector bool int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
+    __builtin_altivec_compiletime_error ("vec_mergeh")))))))))))
 
 #define vec_vmrghw(a1, a2) \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
@@ -6987,38 +8906,46 @@ __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 ())))
+__builtin_altivec_compiletime_error ("vec_vmrghw"))))
 
 #define vec_vmrghh(a1, 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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_vmrghh")))
 
 #define vec_vmrghb(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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_vmrghb")))
 
 #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 bool char, (a1), vector bool char, (a2)), \
+      ((vector bool 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 bool short, (a1), vector bool short, (a2)), \
+      ((vector bool short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \
+__ch (__bin_args_eq (vector pixel, (a1), vector pixel, (a2)), \
+      ((vector pixel) __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 ())))))))
+__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \
+      ((vector bool int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
+    __builtin_altivec_compiletime_error ("vec_mergel"))))))))
 
 #define vec_vmrglw(a1, a2) \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
@@ -7027,62 +8954,74 @@ __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 ())))
+__builtin_altivec_compiletime_error ("vec_vmrglw"))))
 
 #define vec_vmrglh(a1, 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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_vmrglh")))
 
 #define vec_vmrglb(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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_vmrglb")))
 
 #define vec_mfvscr()  (((vector unsigned short) __builtin_altivec_mfvscr ()))
 
 #define vec_min(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool 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 bool 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 char, (a1), vector bool char, (a2)), \
+      ((vector signed char) __builtin_altivec_vminsb ((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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool 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 bool 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 short, (a1), vector bool short, (a2)), \
+      ((vector signed short) __builtin_altivec_vminsh ((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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool 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 bool 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 signed int, (a1), vector bool int, (a2)), \
+      ((vector signed int) __builtin_altivec_vminsw ((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 ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_min"))))))))))))))))))))
 
 #define vec_vminfp(a1, 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 ())
+__builtin_altivec_compiletime_error ("vec_vminfp"))
 
 #define vec_vminsw(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vminsw"))
 
 #define vec_vminuw(a1, a2) \
 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
@@ -7091,12 +9030,12 @@ __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))), \
-__altivec_link_error_invalid_argument ())))
+__builtin_altivec_compiletime_error ("vec_vminuw"))))
 
 #define vec_vminsh(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vminsh"))
 
 #define vec_vminuh(a1, a2) \
 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
@@ -7105,12 +9044,12 @@ __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))), \
-__altivec_link_error_invalid_argument ())))
+__builtin_altivec_compiletime_error ("vec_vminuh"))))
 
 #define vec_vminsb(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_abs"))
 
 #define vec_vminub(a1, a2) \
 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
@@ -7119,7 +9058,7 @@ __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))), \
-__altivec_link_error_invalid_argument ())))
+__builtin_altivec_compiletime_error ("vec_vminub"))))
 
 #define vec_mladd(a1, a2, a3) \
 __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \
@@ -7130,9 +9069,12 @@ __ch (__tern_args_eq (vector unsigned short, (a1), vector signed short, (a2), ve
       ((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 ()))))
+    __builtin_altivec_compiletime_error ("vec_mladd")))))
 
-#define vec_mradds(a1, a2, a3) __builtin_altivec_vmhraddshs ((a1), (a2), (a3))
+#define vec_mradds(a1, a2, a3) \
+__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \
+      ((vector signed short) __builtin_altivec_vmhraddshs ((a1), (a2), (a3))), \
+__builtin_altivec_compiletime_error ("vec_mradds"))
 
 #define vec_msum(a1, a2, a3) \
 __ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned int, (a3)), \
@@ -7143,59 +9085,67 @@ __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2),
       ((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 ()))))
+    __builtin_altivec_compiletime_error ("vec_msum")))))
 
 #define vec_vmsumshm(a1, a2, 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 ())
+__builtin_altivec_compiletime_error ("vec_vmsumshm"))
 
 #define vec_vmsumuhm(a1, a2, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vmsumuhm"))
 
 #define vec_vmsummbm(a1, a2, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_abs"))
 
 #define vec_vmsumubm(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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vmsummbm"))
 
 #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 ()))
+    __builtin_altivec_compiletime_error ("vec_msums")))
 
 #define vec_vmsumshs(a1, a2, 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 ())
+__builtin_altivec_compiletime_error ("vec_vmsumshs"))
 
 #define vec_vmsumuhs(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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vmsumuhs"))
 
 #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 bool 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 bool short, (a1)), \
+      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
+__ch (__un_args_eq (vector pixel, (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 ()))))))
+__ch (__un_args_eq (vector bool char, (a1)), \
+      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
+    __builtin_altivec_compiletime_error ("vec_mtvscr")))))))))))
 
 #define vec_mule(a1, a2) \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
@@ -7206,27 +9156,27 @@ __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 ()))))
+    __builtin_altivec_compiletime_error ("vec_mule")))))
 
 #define vec_vmulesh(a1, 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 ())
+__builtin_altivec_compiletime_error ("vec_vmulesh"))
 
 #define vec_vmuleuh(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vmuleuh"))
 
 #define vec_vmulesb(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vmulesb"))
 
 #define vec_vmuleub(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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vmuleub"))
 
 #define vec_mulo(a1, a2) \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
@@ -7237,32 +9187,32 @@ __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 ()))))
+    __builtin_altivec_compiletime_error ("vec_mulo")))))
 
 #define vec_vmulosh(a1, 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 ())
+__builtin_altivec_compiletime_error ("vec_vmulosh"))
 
 #define vec_vmulouh(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vmulouh"))
 
 #define vec_vmulosb(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vmulosb"))
 
 #define vec_vmuloub(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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vmuloub"))
 
 #define vec_nmsub(a1, a2, a3) \
 __ch (__tern_args_eq (vector float, ((a1)), vector float, ((a2)) , vector float, ((a3))), \
       ((vector float) __builtin_altivec_vnmsubfp ((vector float) ((a1)), (vector float) ((a2)), (vector float)((a3)))), \
-    __altivec_link_error_invalid_argument ())
+    __builtin_altivec_compiletime_error ("vec_nmsub"))
 
 #define vec_nor(a1, a2) \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
@@ -7271,78 +9221,106 @@ __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 bool int, (a1), vector bool int, (a2)), \
+      ((vector bool 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 bool short, (a1), vector bool short, (a2)), \
+      ((vector bool 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 ())))))))
+__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \
+      ((vector bool char) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
+    __builtin_altivec_compiletime_error ("vec_nor")))))))))))
 
 #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)), \
+__ch (__bin_args_eq (vector float, (a1), vector bool 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)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector float, (a2)), \
       ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \
+      ((vector bool int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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 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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool 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 bool short, (a1), vector bool short, (a2)), \
+      ((vector bool short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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 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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool 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 bool char, (a1), vector bool char, (a2)), \
+      ((vector bool char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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 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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool 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 ())))))))))))))))
+    __builtin_altivec_compiletime_error ("vec_or")))))))))))))))))))))))))
 
 #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 bool short, (a1), vector bool short, (a2)), \
+      ((vector bool 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 ()))))
+__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \
+      ((vector bool short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \
+    __builtin_altivec_compiletime_error ("vec_pack")))))))
 
 #define vec_vpkuwum(a1, 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 ()))
+__builtin_altivec_compiletime_error ("vec_vpkuwum")))
 
 #define vec_vpkuhum(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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_vpkuhum")))
 
 #define vec_packpx(a1, a2) \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
-  (vector unsigned short) __builtin_altivec_vpkpx ((vector signed int) (a1), (vector signed int) (a2)), \
-__altivec_link_error_invalid_argument ())
+  (vector pixel) __builtin_altivec_vpkpx ((vector signed int) (a1), (vector signed int) (a2)), \
+__builtin_altivec_compiletime_error ("vec_packpx"))
 
 #define vec_packs(a1, a2) \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
@@ -7353,27 +9331,27 @@ __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 ()))))
+    __builtin_altivec_compiletime_error ("vec_packs")))))
 
 #define vec_vpkswss(a1, 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 ())
+__builtin_altivec_compiletime_error ("vec_vpkswss"))
 
 #define vec_vpkuwus(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vpkuwus"))
 
 #define vec_vpkshss(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vpkshss"))
 
 #define vec_vpkuhus(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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vpkuhus"))
 
 #define vec_packsu(a1, a2) \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
@@ -7384,17 +9362,17 @@ __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 ()))))
+    __builtin_altivec_compiletime_error ("vec_packsu")))))
 
 #define vec_vpkswus(a1, 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 ())
+__builtin_altivec_compiletime_error ("vec_vpkswus"))
 
 #define vec_vpkshus(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vpkshus"))
 
 #define vec_perm(a1, a2, a3) \
 __ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector unsigned char, (a3)), \
@@ -7403,17 +9381,28 @@ __ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector u
       ((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 bool int, (a1), vector bool int, (a2), vector unsigned char, (a3)), \
+      ((vector bool 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 bool short, (a1), vector bool short, (a2), vector unsigned char, (a3)), \
+      ((vector bool short) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
+__ch (__tern_args_eq (vector pixel, (a1), vector pixel, (a2), vector unsigned char, (a3)), \
+      ((vector pixel) __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 ())))))))
+__ch (__tern_args_eq (vector bool char, (a1), vector bool char, (a2), vector unsigned char, (a3)), \
+      ((vector bool char) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
+    __builtin_altivec_compiletime_error ("vec_perm"))))))))))))
 
-#define vec_re(a1) __builtin_altivec_vrefp ((a1))
+#define vec_re(a1) \
+__ch (__un_args_eq (vector float, (a1)), \
+      ((vector float) __builtin_altivec_vrefp ((vector float) (a1))), \
+__builtin_altivec_compiletime_error ("vec_re"))
 
 #define vec_rl(a1, a2) \
 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
@@ -7428,63 +9417,81 @@ __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 ()))))))
+    __builtin_altivec_compiletime_error ("vec_rl")))))))
 
 #define vec_vrlw(a1, 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 ()))
+__builtin_altivec_compiletime_error ("vec_vrlw")))
 
 #define vec_vrlh(a1, 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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_vrlh")))
 
 #define vec_vrlb(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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_vrlb")))
 
-#define vec_round(a1) __builtin_altivec_vrfin ((a1))
+#define vec_round(a1) \
+__ch (__un_args_eq (vector float, (a1)), \
+      ((vector float) __builtin_altivec_vrfin ((vector float) (a1))), \
+__builtin_altivec_compiletime_error ("vec_round"))
 
-#define vec_rsqrte(a1) __builtin_altivec_vrsqrtefp ((a1))
+#define vec_rsqrte(a1) \
+__ch (__un_args_eq (vector float, (a1)), \
+      ((vector float) __builtin_altivec_vrsqrtefp ((vector float) (a1))), \
+__builtin_altivec_compiletime_error ("vec_rsqrte"))
 
 #define vec_sel(a1, a2, a3) \
-__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector signed int, (a3)), \
+__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector bool 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)), \
+__ch (__tern_args_eq (vector bool int, (a1), vector bool int, (a2), vector bool int, (a3)), \
+      ((vector bool int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
+__ch (__tern_args_eq (vector bool int, (a1), vector bool int, (a2), vector unsigned int, (a3)), \
+      ((vector bool 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 bool 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)), \
+__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector bool 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)), \
+__ch (__tern_args_eq (vector bool short, (a1), vector bool short, (a2), vector bool short, (a3)), \
+      ((vector bool short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
+__ch (__tern_args_eq (vector bool short, (a1), vector bool short, (a2), vector unsigned short, (a3)), \
+      ((vector bool 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 bool 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)), \
+__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector bool 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)), \
+__ch (__tern_args_eq (vector bool char, (a1), vector bool char, (a2), vector bool char, (a3)), \
+      ((vector bool char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
+__ch (__tern_args_eq (vector bool char, (a1), vector bool char, (a2), vector unsigned char, (a3)), \
+      ((vector bool 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 bool 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)), \
+__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector bool 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 ()))))))))))))))
+    __builtin_altivec_compiletime_error ("vec_sel")))))))))))))))))))))
 
 #define vec_sl(a1, a2) \
 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
@@ -7499,59 +9506,47 @@ __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 ()))))))
+    __builtin_altivec_compiletime_error ("vec_sl")))))))
 
 #define vec_vslw(a1, 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 ()))
+__builtin_altivec_compiletime_error ("vec_vslw")))
 
 #define vec_vslh(a1, 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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_vslh")))
 
 #define vec_vslb(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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_vslb")))
 
 #define vec_sld(a1, a2, a3) \
 __ch (__tern_args_eq (vector float, (a1), vector float, (a2), int, (a3)), \
-      ((vector float) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
-__ch (__tern_args_eq (vector float, (a1), vector float, (a2), unsigned int, (a3)), \
-      ((vector float) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
+      ((vector float) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
 __ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), int, (a3)), \
-      ((vector signed int) __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), unsigned int, (a3)), \
-      ((vector signed int) __builtin_altivec_vsldoi_4si ((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 int) (a3))), \
 __ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), int, (a3)), \
-      ((vector unsigned 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), unsigned int, (a3)), \
-      ((vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
+      ((vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
 __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), int, (a3)), \
-      ((vector signed short) __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), unsigned int, (a3)), \
-      ((vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
+      ((vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
 __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), int, (a3)), \
-      ((vector unsigned 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), unsigned int, (a3)), \
-      ((vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
+      ((vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
+__ch (__tern_args_eq (vector pixel, (a1), vector pixel, (a2), int, (a3)), \
+      ((vector pixel) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
 __ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), int, (a3)), \
-      ((vector signed char) __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), unsigned int, (a3)), \
-      ((vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
+      ((vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
 __ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), int, (a3)), \
-      ((vector unsigned 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), unsigned int, (a3)), \
-      ((vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
-    __altivec_link_error_invalid_argument ()))))))))))))))
+      ((vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \
+    __builtin_altivec_compiletime_error ("vec_sld")))))))))
 
 #define vec_sll(a1, a2) \
 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
@@ -7566,6 +9561,12 @@ __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 bool int, (a1), vector unsigned int, (a2)), \
+      ((vector bool int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned short, (a2)), \
+      ((vector bool int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned char, (a2)), \
+      ((vector bool 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)), \
@@ -7578,6 +9579,18 @@ __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 bool short, (a1), vector unsigned int, (a2)), \
+      ((vector bool short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
+      ((vector bool short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned char, (a2)), \
+      ((vector bool short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector pixel, (a1), vector unsigned int, (a2)), \
+      ((vector pixel) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector pixel, (a1), vector unsigned short, (a2)), \
+      ((vector pixel) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector pixel, (a1), vector unsigned char, (a2)), \
+      ((vector pixel) __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)), \
@@ -7590,7 +9603,13 @@ __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 ()))))))))))))))))))
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned int, (a2)), \
+      ((vector bool char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned short, (a2)), \
+      ((vector bool char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
+      ((vector bool char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
+    __builtin_altivec_compiletime_error ("vec_sll")))))))))))))))))))))))))))))))
 
 #define vec_slo(a1, a2) \
 __ch (__bin_args_eq (vector float, (a1), vector signed char, (a2)), \
@@ -7613,6 +9632,10 @@ __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 pixel, (a1), vector signed char, (a2)), \
+      ((vector pixel) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector pixel, (a1), vector unsigned char, (a2)), \
+      ((vector pixel) __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)), \
@@ -7621,87 +9644,99 @@ __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 ()))))))))))))))
+    __builtin_altivec_compiletime_error ("vec_slo")))))))))))))))))
 
 #define vec_splat(a1, a2) \
 __ch (__bin_args_eq (vector signed char, ((a1)), int, ((a2))), \
-      ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
-__ch (__bin_args_eq (vector signed char, ((a1)), unsigned int, ((a2))), \
-      ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
+      ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector unsigned char, ((a1)), int, ((a2))), \
-      ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
-__ch (__bin_args_eq (vector unsigned char, ((a1)), unsigned int, ((a2))), \
-      ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
+      ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \
+__ch (__bin_args_eq (vector bool char, ((a1)), int, ((a2))), \
+      ((vector bool char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector signed short, ((a1)), int, ((a2))), \
-      ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
-__ch (__bin_args_eq (vector signed short, ((a1)), unsigned int, ((a2))), \
-      ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
+      ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector unsigned short, ((a1)), int, ((a2))), \
-      ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
-__ch (__bin_args_eq (vector unsigned short, ((a1)), unsigned int, ((a2))), \
-      ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
+      ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \
+__ch (__bin_args_eq (vector bool short, ((a1)), int, ((a2))), \
+      ((vector bool short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \
+__ch (__bin_args_eq (vector pixel, ((a1)), int, ((a2))), \
+      ((vector pixel) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector float, ((a1)), int, ((a2))), \
-      ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
-__ch (__bin_args_eq (vector float, ((a1)), unsigned int, ((a2))), \
-      ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
+      ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector signed int, ((a1)), int, ((a2))), \
-      ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
-__ch (__bin_args_eq (vector signed int, ((a1)), unsigned int, ((a2))), \
-      ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
+      ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector unsigned int, ((a1)), int, ((a2))), \
-      ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \
-__ch (__bin_args_eq (vector unsigned int, ((a1)), unsigned int, ((a2))), \
-      ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \
-    __altivec_link_error_invalid_argument ()))))))))))))))
+      ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const int) ((a2)))), \
+__ch (__bin_args_eq (vector bool int, ((a1)), int, ((a2))), \
+      ((vector bool int) __builtin_altivec_vspltw ((vector signed int) (a1), (const int) ((a2)))), \
+    __builtin_altivec_compiletime_error ("vec_splat"))))))))))))
 
 #define vec_vspltw(a1, a2) \
 __ch (__bin_args_eq (vector float, ((a1)), int, ((a2))), \
-      ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
+      ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector float, ((a1)), unsigned int, ((a2))), \
-      ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
+      ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector signed int, ((a1)), int, ((a2))), \
-      ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
+      ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector signed int, ((a1)), unsigned int, ((a2))), \
-      ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
+      ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector unsigned int, ((a1)), int, ((a2))), \
-      ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \
+      ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector unsigned int, ((a1)), unsigned int, ((a2))), \
-      ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \
-__altivec_link_error_invalid_argument ()))))))
+      ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const int) ((a2)))), \
+__builtin_altivec_compiletime_error ("vec_vspltw")))))))
 
 #define vec_vsplth(a1, a2) \
 __ch (__bin_args_eq (vector signed short, ((a1)), int, ((a2))), \
-      ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
+      ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector signed short, ((a1)), unsigned int, ((a2))), \
-      ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
+      ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector unsigned short, ((a1)), int, ((a2))), \
-      ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
+      ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector unsigned short, ((a1)), unsigned int, ((a2))), \
-      ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
-__altivec_link_error_invalid_argument ()))))
+      ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \
+__builtin_altivec_compiletime_error ("vec_vsplth")))))
 
 #define vec_vspltb(a1, a2) \
 __ch (__bin_args_eq (vector signed char, ((a1)), int, ((a2))), \
-      ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
+      ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector signed char, ((a1)), unsigned int, ((a2))), \
-      ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
+      ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector unsigned char, ((a1)), int, ((a2))), \
-      ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
+      ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \
 __ch (__bin_args_eq (vector unsigned char, ((a1)), unsigned int, ((a2))), \
-      ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((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) ((vector unsigned char) __builtin_altivec_vspltisb ((a1)))
-
-#define vec_splat_u16(a1) ((vector unsigned short) __builtin_altivec_vspltish ((a1)))
-
-#define vec_splat_u32(a1) ((vector unsigned int) __builtin_altivec_vspltisw ((a1)))
+      ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \
+__builtin_altivec_compiletime_error ("vec_vspltb")))))
+
+#define vec_splat_s8(a1) \
+__ch (__un_args_eq (int, (a1)), \
+      ((vector signed char) __builtin_altivec_vspltisb ((a1))), \
+__builtin_altivec_compiletime_error ("vec_splat_s8"))
+
+#define vec_splat_s16(a1) \
+__ch (__un_args_eq (int, (a1)), \
+      ((vector signed short) __builtin_altivec_vspltish ((a1))), \
+__builtin_altivec_compiletime_error ("vec_splat_s16"))
+
+#define vec_splat_s32(a1) \
+__ch (__un_args_eq (int, (a1)), \
+      ((vector signed int) __builtin_altivec_vspltisw ((a1))), \
+__builtin_altivec_compiletime_error ("vec_splat_s32"))
+
+#define vec_splat_u8(a1) \
+__ch (__un_args_eq (int, (a1)), \
+      ((vector unsigned char) __builtin_altivec_vspltisb ((a1))), \
+__builtin_altivec_compiletime_error ("vec_splat_u8"))
+
+#define vec_splat_u16(a1) \
+__ch (__un_args_eq (int, (a1)), \
+      ((vector unsigned short) __builtin_altivec_vspltish ((a1))), \
+__builtin_altivec_compiletime_error ("vec_splat_u16"))
+
+#define vec_splat_u32(a1) \
+__ch (__un_args_eq (int, (a1)), \
+      ((vector unsigned int) __builtin_altivec_vspltisw ((a1))), \
+__builtin_altivec_compiletime_error ("vec_splat_u32"))
 
 #define vec_sr(a1, a2) \
 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
@@ -7716,28 +9751,28 @@ __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 ()))))))
+    __builtin_altivec_compiletime_error ("vec_sr")))))))
 
 #define vec_vsrw(a1, 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 ()))
+__builtin_altivec_compiletime_error ("vec_vsrw")))
 
 #define vec_vsrh(a1, 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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_vsrh")))
 
 #define vec_vsrb(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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_vsrb")))
 
 #define vec_sra(a1, a2) \
 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
@@ -7752,28 +9787,28 @@ __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 ()))))))
+    __builtin_altivec_compiletime_error ("vec_sra")))))))
 
 #define vec_vsraw(a1, 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 ()))
+__builtin_altivec_compiletime_error ("vec_vsraw")))
 
 #define vec_vsrah(a1, 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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_vsrah")))
 
 #define vec_vsrab(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))), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_vsrab")))
 
 #define vec_srl(a1, a2) \
 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
@@ -7788,6 +9823,12 @@ __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 bool int, (a1), vector unsigned int, (a2)), \
+      ((vector bool int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned short, (a2)), \
+      ((vector bool int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned char, (a2)), \
+      ((vector bool 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)), \
@@ -7800,6 +9841,18 @@ __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 bool short, (a1), vector unsigned int, (a2)), \
+      ((vector bool short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
+      ((vector bool short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned char, (a2)), \
+      ((vector bool short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector pixel, (a1), vector unsigned int, (a2)), \
+      ((vector pixel) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector pixel, (a1), vector unsigned short, (a2)), \
+      ((vector pixel) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector pixel, (a1), vector unsigned char, (a2)), \
+      ((vector pixel) __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)), \
@@ -7812,7 +9865,13 @@ __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 ()))))))))))))))))))
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned int, (a2)), \
+      ((vector bool char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned short, (a2)), \
+      ((vector bool char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
+      ((vector bool char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
+    __builtin_altivec_compiletime_error ("vec_srl")))))))))))))))))))))))))))))))
 
 #define vec_sro(a1, a2) \
 __ch (__bin_args_eq (vector float, (a1), vector signed char, (a2)), \
@@ -7831,6 +9890,10 @@ __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 pixel, (a1), vector signed char, (a2)), \
+      ((vector pixel) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector pixel, (a1), vector unsigned char, (a2)), \
+      ((vector pixel) __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)), \
@@ -7843,30 +9906,150 @@ __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 ()))))))))))))))
+    __builtin_altivec_compiletime_error ("vec_sro")))))))))))))))))
 
 #define vec_st(a1, a2, a3) \
-  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (a3))
+__ch (__tern_args_eq (vector unsigned char, (a1), int, (a2), vector unsigned char, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector unsigned char, (a1), int, (a2), unsigned char, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector signed char, (a1), int, (a2), vector signed char, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector signed char, (a1), int, (a2), signed char, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool char, (a1), int, (a2), vector bool char, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool char, (a1), int, (a2), unsigned char, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool char, (a1), int, (a2), signed char, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector unsigned short, (a1), int, (a2), vector unsigned short, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector unsigned short, (a1), int, (a2), unsigned short, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector signed short, (a1), int, (a2), vector signed short, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector signed short, (a1), int, (a2), short, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool short, (a1), int, (a2), vector bool short, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool short, (a1), int, (a2), unsigned short, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool short, (a1), int, (a2), short, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector pixel, (a1), int, (a2), vector pixel, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector pixel, (a1), int, (a2), unsigned short, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector pixel, (a1), int, (a2), short, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector unsigned int, (a1), int, (a2), vector unsigned int, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector unsigned int, (a1), int, (a2), unsigned int, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector signed int, (a1), int, (a2), vector signed int, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector signed int, (a1), int, (a2), int, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool int, (a1), int, (a2), vector bool int, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool int, (a1), int, (a2), unsigned int, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool int, (a1), int, (a2), int, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector float, (a1), int, (a2), vector float, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector float, (a1), int, (a2), float, *(a3)), \
+  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \
+__builtin_altivec_compiletime_error ("vec_st")))))))))))))))))))))))))))
 
 #define vec_stl(a1, a2, a3) \
-  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (a3))
+__ch (__tern_args_eq (vector unsigned char, (a1), int, (a2), vector unsigned char, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector unsigned char, (a1), int, (a2), unsigned char, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector signed char, (a1), int, (a2), vector signed char, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector signed char, (a1), int, (a2), signed char, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool char, (a1), int, (a2), vector bool char, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool char, (a1), int, (a2), unsigned char, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool char, (a1), int, (a2), signed char, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector unsigned short, (a1), int, (a2), vector unsigned short, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector unsigned short, (a1), int, (a2), unsigned short, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector signed short, (a1), int, (a2), vector signed short, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector signed short, (a1), int, (a2), short, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool short, (a1), int, (a2), vector bool short, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool short, (a1), int, (a2), unsigned short, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool short, (a1), int, (a2), short, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector pixel, (a1), int, (a2), vector pixel, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector pixel, (a1), int, (a2), unsigned short, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector pixel, (a1), int, (a2), short, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector unsigned int, (a1), int, (a2), vector unsigned int, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector unsigned int, (a1), int, (a2), unsigned int, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector signed int, (a1), int, (a2), vector signed int, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector signed int, (a1), int, (a2), int, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool int, (a1), int, (a2), vector bool int, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool int, (a1), int, (a2), unsigned int, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector bool int, (a1), int, (a2), int, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector float, (a1), int, (a2), vector float, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__ch (__tern_args_eq (vector float, (a1), int, (a2), float, *(a3)), \
+  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \
+__builtin_altivec_compiletime_error ("vec_stl")))))))))))))))))))))))))))
 
 #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 ())))))))
+__ch (__tern_args_eq (vector unsigned char, (a), int, (b), unsigned char, *(c)), \
+      __builtin_altivec_stvebx ((vector signed char) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector signed char, (a), int, (b), signed char, *(c)), \
+      __builtin_altivec_stvebx ((vector signed char) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector bool char, (a), int, (b), unsigned char, *(c)), \
+      __builtin_altivec_stvebx ((vector signed char) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector bool char, (a), int, (b), signed char, *(c)), \
+      __builtin_altivec_stvebx ((vector signed char) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector unsigned short, (a), int, (b), unsigned short, *(c)), \
+     __builtin_altivec_stvehx ((vector signed short) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector signed short, (a), int, (b), short, *(c)), \
+     __builtin_altivec_stvehx ((vector signed short) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector bool short, (a), int, (b), unsigned short, *(c)), \
+     __builtin_altivec_stvehx ((vector signed short) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector bool short, (a), int, (b), short, *(c)), \
+     __builtin_altivec_stvehx ((vector signed short) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector pixel, (a), int, (b), unsigned short, *(c)), \
+     __builtin_altivec_stvehx ((vector signed short) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector pixel, (a), int, (b), short, *(c)), \
+     __builtin_altivec_stvehx ((vector signed short) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector unsigned int, (a), int, (b), unsigned int, *(c)), \
+     __builtin_altivec_stvewx ((vector signed int) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector signed int, (a), int, (b), int, *(c)), \
+     __builtin_altivec_stvewx ((vector signed int) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector bool int, (a), int, (b), unsigned int, *(c)), \
+     __builtin_altivec_stvewx ((vector signed int) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector bool int, (a), int, (b), int, *(c)), \
+     __builtin_altivec_stvewx ((vector signed int) (a), (b), (void *) (c)), \
+__ch (__tern_args_eq (vector float, (a), int, (b), float, *(c)), \
+     __builtin_altivec_stvewx ((vector signed int) (a), (b), (void *) (c)), \
+     __builtin_altivec_compiletime_error ("vec_ste"))))))))))))))))
 
 #define vec_stvewx(a, b, c) \
 __ch (__un_args_eq (vector unsigned int, (a)), \
@@ -7875,55 +10058,67 @@ __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 ())))
+__builtin_altivec_compiletime_error ("vec_stvewx"))))
 
 #define vec_stvehx(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)), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_stvehx")))
 
 #define vec_stvebx(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)), \
-__altivec_link_error_invalid_argument ()))
+__builtin_altivec_compiletime_error ("vec_stvebx")))
 
 #define vec_sub(a1, a2) \
+__ch (__bin_args_eq (vector bool 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 bool 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 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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool 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 bool 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 bool 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 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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool 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 bool 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 bool 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 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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool 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 ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_sub"))))))))))))))))))))
 
 #define vec_vsubfp(a1, 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 ())
+__builtin_altivec_compiletime_error ("vec_vsubfp"))
 
 #define vec_vsubuwm(a1, a2) \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
@@ -7934,7 +10129,7 @@ __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))), \
-__altivec_link_error_invalid_argument ()))))
+__builtin_altivec_compiletime_error ("vec_vsubuwm")))))
 
 #define vec_vsubuhm(a1, a2) \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
@@ -7945,7 +10140,7 @@ __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))), \
-__altivec_link_error_invalid_argument ()))))
+__builtin_altivec_compiletime_error ("vec_vsubuhm")))))
 
 #define vec_vsububm(a1, a2) \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
@@ -7956,44 +10151,56 @@ __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))), \
-__altivec_link_error_invalid_argument ()))))
+__builtin_altivec_compiletime_error ("vec_vsububm")))))
 
 #define vec_subc(a1, a2) \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
   ((vector unsigned int) __builtin_altivec_vsubcuw ((vector signed int) (a1), (vector signed int) (a2))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_subc"))
 
 #define vec_subs(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool 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 bool 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 char, (a1), vector bool char, (a2)), \
+      ((vector signed char) __builtin_altivec_vsubsbs ((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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool 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 bool 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 short, (a1), vector bool short, (a2)), \
+      ((vector signed short) __builtin_altivec_vsubshs ((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)), \
+__ch (__bin_args_eq (vector bool 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)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool 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 bool int, (a1), vector signed int, (a2)), \
+      ((vector signed int) __builtin_altivec_vsubsws ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
+      ((vector signed int) __builtin_altivec_vsubsws ((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 ()))))))))))))
+    __builtin_altivec_compiletime_error ("vec_subs")))))))))))))))))))
 
 #define vec_vsubsws(a1, 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 ())
+__builtin_altivec_compiletime_error ("vec_vsubsws"))
 
 #define vec_vsubuws(a1, a2) \
 __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
@@ -8002,12 +10209,12 @@ __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))), \
-__altivec_link_error_invalid_argument ())))
+__builtin_altivec_compiletime_error ("vec_vsubuws"))))
 
 #define vec_vsubshs(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vsubshs"))
 
 #define vec_vsubuhs(a1, a2) \
 __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
@@ -8016,12 +10223,12 @@ __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))), \
-__altivec_link_error_invalid_argument ())))
+__builtin_altivec_compiletime_error ("vec_vsubuhs"))))
 
 #define vec_vsubsbs(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vsubsbs"))
 
 #define vec_vsububs(a1, a2) \
 __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
@@ -8030,7 +10237,7 @@ __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))), \
-__altivec_link_error_invalid_argument ())))
+__builtin_altivec_compiletime_error ("vec_vsububs"))))
 
 #define vec_sum4s(a1, a2) \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \
@@ -8039,503 +10246,740 @@ __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 ())))
+    __builtin_altivec_compiletime_error ("vec_sum4s"))))
 
 #define vec_vsum4shs(a1, 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 ())
+__builtin_altivec_compiletime_error ("vec_vsum4shs"))
 
 #define vec_vsum4sbs(a1, 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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vsum4sbs"))
 
 #define vec_vsum4ubs(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))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vsum4ubs"))
 
-#define vec_sum2s(a1, a2) __builtin_altivec_vsum2sws ((a1), (a2))
+#define vec_sum2s(a1, a2) \
+__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
+      ((vector signed int) __builtin_altivec_vsum2sws ((vector signed int) (a1), (vector signed int) (a2))), \
+__builtin_altivec_compiletime_error ("vec_sum2s"))
 
-#define vec_sums(a1, a2) __builtin_altivec_vsumsws ((a1), (a2))
+#define vec_sums(a1, a2) \
+__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
+      ((vector signed int) __builtin_altivec_vsumsws ((vector signed int) (a1), (vector signed int) (a2))), \
+__builtin_altivec_compiletime_error ("vec_sums"))
 
-#define vec_trunc(a1) __builtin_altivec_vrfiz ((a1))
+#define vec_trunc(a1) \
+__ch (__un_args_eq (vector float, (a1)), \
+      ((vector float) __builtin_altivec_vrfiz ((vector float) (a1))), \
+__builtin_altivec_compiletime_error ("vec_trunc"))
 
 #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 unsigned short, (a1)), \
+__ch (__un_args_eq (vector bool char, (a1)), \
+      ((vector bool short) __builtin_altivec_vupkhsb ((vector signed char) (a1))), \
+__ch (__un_args_eq (vector pixel, (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 ())))
+__ch (__un_args_eq (vector bool short, (a1)), \
+      ((vector bool int) __builtin_altivec_vupkhsh ((vector signed short) (a1))), \
+    __builtin_altivec_compiletime_error ("vec_unpackh"))))))
 
 #define vec_vupkhsh(a1) \
 __ch (__un_args_eq (vector signed short, (a1)), \
       ((vector signed int) __builtin_altivec_vupkhsh ((vector signed short) (a1))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vupkhsh"))
 
 #define vec_vupkhpx(a1) \
 __ch (__un_args_eq (vector unsigned short, (a1)), \
       ((vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) (a1))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vupkhpx"))
 
 #define vec_vupkhsb(a1) \
 __ch (__un_args_eq (vector signed char, (a1)), \
       ((vector signed short) __builtin_altivec_vupkhsb ((vector signed char) (a1))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vupkhsb"))
 
 #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 unsigned short, (a1)), \
+__ch (__un_args_eq (vector bool char, (a1)), \
+      ((vector bool short) __builtin_altivec_vupklsb ((vector signed char) (a1))), \
+__ch (__un_args_eq (vector pixel, (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 ())))
+__ch (__un_args_eq (vector bool short, (a1)), \
+      ((vector bool int) __builtin_altivec_vupklsh ((vector signed short) (a1))), \
+    __builtin_altivec_compiletime_error ("vec_unpackl"))))))
 
 #define vec_vupklsh(a1) \
 __ch (__un_args_eq (vector signed short, (a1)), \
       ((vector signed int) __builtin_altivec_vupklsh ((vector signed short) (a1))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vupklsh"))
 
 #define vec_vupklpx(a1) \
 __ch (__un_args_eq (vector unsigned short, (a1)), \
       ((vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) (a1))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vupklpx"))
 
 #define vec_vupklsb(a1) \
 __ch (__un_args_eq (vector signed char, (a1)), \
       ((vector signed short) __builtin_altivec_vupklsb ((vector signed char) (a1))), \
-__altivec_link_error_invalid_argument ())
+__builtin_altivec_compiletime_error ("vec_vupklsb"))
 
 #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 unsigned int, ((a2))), \
-      ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
-__ch (__bin_args_eq (vector unsigned 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 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 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 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 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 signed short) __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 unsigned 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 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 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 unsigned char, ((a1)), vector unsigned 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 signed 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)))), \
-    __altivec_link_error_invalid_argument ())))))))))))))))))))))))
+__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 bool int, (a2)), \
+      ((vector float) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool int, (a1), vector float, (a2)), \
+      ((vector float) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \
+      ((vector bool int) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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 signed int, (a2)), \
+      ((vector signed int) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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 bool short, (a1), vector bool short, (a2)), \
+      ((vector bool short) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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 signed short, (a2)), \
+      ((vector signed short) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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 bool char, (a1), vector bool char, (a2)), \
+      ((vector bool char) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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 signed char, (a2)), \
+      ((vector signed char) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \
+__ch (__bin_args_eq (vector bool 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 bool 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))), \
+    __builtin_altivec_compiletime_error ("vec_xor")))))))))))))))))))))))))
 
 /* Predicates.  */
 
 #define vec_all_eq(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \
+      __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \
+      __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \
+      __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector pixel, (a1), vector pixel, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \
+      __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
-__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
+      __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \
+      __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
       __builtin_altivec_vcmpeqfp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \
-    __altivec_link_error_invalid_argument ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_all_eq"))))))))))))))))))))))))
 
 #define vec_all_ge(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
-__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
+__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
       __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
-__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
-__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
+__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
       __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
-__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
-__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
       __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
       __builtin_altivec_vcmpgefp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \
-    __altivec_link_error_invalid_argument ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_all_ge"))))))))))))))))))))
 
 #define vec_all_gt(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
       __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
       __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
-__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
       __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
       __builtin_altivec_vcmpgtfp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \
-    __altivec_link_error_invalid_argument ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_all_gt"))))))))))))))))))))
 
-#define vec_all_in(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ, (a1), (a2))
+#define vec_all_in(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
+      __builtin_altivec_vcmpbfp_p (__CR6_EQ, (a1), (a2)), \
+    __builtin_altivec_compiletime_error ("vec_all_in"))
 
 #define vec_all_le(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
       __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
       __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
-__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
       __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
       __builtin_altivec_vcmpgefp_p (__CR6_LT, (vector float) (a2), (vector float) (a1)), \
-    __altivec_link_error_invalid_argument ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_all_le"))))))))))))))))))))
 
 #define vec_all_lt(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
-__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
+__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
       __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
-__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
-__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
+__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
       __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
-__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
-__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
       __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
       __builtin_altivec_vcmpgtfp_p (__CR6_LT, (vector float) (a2), (vector float) (a1)), \
-    __altivec_link_error_invalid_argument ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_all_lt"))))))))))))))))))))
 
-#define vec_all_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1))
+#define vec_all_nan(a1) \
+__ch (__un_args_eq (vector float, (a1)), \
+      __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1)), \
+    __builtin_altivec_compiletime_error ("vec_all_nan"))
 
 #define vec_all_ne(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
+      __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \
+      __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \
+      __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector pixel, (a1), vector pixel, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \
+      __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \
+      __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
-__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \
+      __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
       __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (vector float) (a1), (vector float) (a2)), \
-    __altivec_link_error_invalid_argument ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_all_ne"))))))))))))))))))))))))
 
-#define vec_all_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a1), (a2))
+#define vec_all_nge(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
+      __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a1), (a2)), \
+    __builtin_altivec_compiletime_error ("vec_all_nge"))
 
-#define vec_all_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a1), (a2))
+#define vec_all_ngt(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
+      __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a1), (a2)), \
+    __builtin_altivec_compiletime_error ("vec_all_ngt"))
 
-#define vec_all_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a2), (a1))
+#define vec_all_nle(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
+      __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a2), (a1)), \
+    __builtin_altivec_compiletime_error ("vec_all_nle"))
 
-#define vec_all_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a2), (a1))
+#define vec_all_nlt(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
+      __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a2), (a1)), \
+    __builtin_altivec_compiletime_error ("vec_all_nlt"))
 
-#define vec_all_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT, (a1), (a1))
+#define vec_all_numeric(a1) \
+__ch (__un_args_eq (vector float, (a1)), \
+      __builtin_altivec_vcmpeqfp_p (__CR6_LT, (a1), (a1)), \
+    __builtin_altivec_compiletime_error ("vec_all_numeric"))
 
 #define vec_any_eq(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
+      __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \
+      __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \
+      __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector pixel, (a1), vector pixel, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \
+      __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \
+      __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
-__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \
+      __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
       __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \
-    __altivec_link_error_invalid_argument ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_any_eq"))))))))))))))))))))))))
 
 #define vec_any_ge(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
-__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
+__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
       __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
-__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
-__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
+__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
       __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
-__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
-__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
       __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
       __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \
-    __altivec_link_error_invalid_argument ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_any_ge"))))))))))))))))))))
 
 #define vec_any_gt(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
       __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
       __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
-__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
       __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
       __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \
-    __altivec_link_error_invalid_argument ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_any_gt"))))))))))))))))))))
 
 #define vec_any_le(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
       __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
       __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
-__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
       __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
       __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, (vector float) (a2), (vector float) (a1)), \
-    __altivec_link_error_invalid_argument ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_any_le"))))))))))))))))))))
 
 #define vec_any_lt(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
-__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
+__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \
+      __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
       __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
-__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
-__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
+__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \
+      __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
       __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
-__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
-__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
+      __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
       __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
       __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, (vector float) (a2), (vector float) (a1)), \
-    __altivec_link_error_invalid_argument ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_any_lt"))))))))))))))))))))
 
-#define vec_any_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a1)
+#define vec_any_nan(a1) \
+__ch (__un_args_eq (vector float, (a1)), \
+      __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, (a1), (a1)), \
+    __builtin_altivec_compiletime_error ("vec_any_nan"))
 
 #define vec_any_ne(a1, a2) \
-__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \
+      __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \
+      __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
+__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
 __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
       __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
-__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
+__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \
+      __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
+__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
 __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
       __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
-__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
+__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector pixel, (a1), vector pixel, (a2)), \
+      __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \
+      __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \
+      __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
-__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
+__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
       __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
+__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \
+      __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
 __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
       __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, (vector float) (a1), (vector float) (a2)), \
-    __altivec_link_error_invalid_argument ())))))))))))))
+    __builtin_altivec_compiletime_error ("vec_any_ne"))))))))))))))))))))))))
 
-#define vec_any_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a1), (a2))
+#define vec_any_nge(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
+      __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a1), (a2)), \
+    __builtin_altivec_compiletime_error ("vec_any_nge"))
 
-#define vec_any_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a1), (a2))
+#define vec_any_ngt(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
+      __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a1), (a2)), \
+    __builtin_altivec_compiletime_error ("vec_any_ngt"))
 
-#define vec_any_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a2), (a1))
+#define vec_any_nle(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
+      __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a2), (a1)), \
+    __builtin_altivec_compiletime_error ("vec_any_nle"))
 
-#define vec_any_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a2), (a1))
+#define vec_any_nlt(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
+      __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a2), (a1)), \
+    __builtin_altivec_compiletime_error ("vec_any_nlt"))
 
-#define vec_any_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (a1), (a1))
+#define vec_any_numeric(a1) \
+__ch (__unn_args_eq (vector float, (a1)), \
+      __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (a1), (a1)), \
+    __builtin_altivec_compiletime_error ("vec_any_numeric"))
 
-#define vec_any_out(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, (a1), (a2))
+#define vec_any_out(a1, a2) \
+__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
+      __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, (a1), (a2)), \
+    __builtin_altivec_compiletime_error ("vec_any_out"))
 
 
 #endif /* __cplusplus */
index 44ded5b01c2f4da67c6ff5326a235a87f1c3acd3..6f193f739c3c8a2af3f0fa20a82631f1713d0e56 100644 (file)
@@ -111,6 +111,13 @@ do {                                                                       \
 #define SUBTARGET_EXTRA_SPECS                  \
   { "darwin_arch", "ppc" },
 
+/* The "-faltivec" option should have been called "-maltivec" all along.  */
+#define SUBTARGET_OPTION_TRANSLATE_TABLE                               \
+  { "-faltivec", "-maltivec -include altivec.h" },     \
+  { "-fno-altivec", "-mno-altivec" },  \
+  { "-Waltivec-long-deprecated",       "-mwarn-altivec-long" }, \
+  { "-Wno-altivec-long-deprecated", "-mno-warn-altivec-long" }
+
 /* Make both r2 and r3 available for allocation.  */
 #define FIXED_R2 0
 #define FIXED_R13 0
index a47afee59b3892127e9f27112a42f004a411b52b..08e34af88e6a3bffed66a02104f096d52f7c0cf7 100644 (file)
@@ -92,7 +92,15 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile)
   if (! TARGET_POWER && ! TARGET_POWER2 && ! TARGET_POWERPC)
     builtin_define ("_ARCH_COM");
   if (TARGET_ALTIVEC)
-    builtin_define ("__ALTIVEC__");
+    {
+      builtin_define ("__ALTIVEC__");
+      builtin_define ("__VEC__=10206");
+
+      /* Define the AltiVec syntactic elements.  */
+      builtin_define ("__vector=__attribute__((altivec(vector__)))");
+      builtin_define ("__pixel=__attribute__((altivec(pixel__))) unsigned short");
+      builtin_define ("__bool=__attribute__((altivec(bool__))) unsigned");
+    }
   if (TARGET_SPE)
     builtin_define ("__SPE__");
   if (TARGET_SOFT_FLOAT)
index 59cd62366872b653f5d6c68b292244ff5b9ac7a0..df30bcb5081bccd3413febc1e6148dab3e42a3d1 100644 (file)
@@ -217,6 +217,20 @@ static GTY(()) tree opaque_V2SI_type_node;
 static GTY(()) tree opaque_V2SF_type_node;
 static GTY(()) tree opaque_p_V2SI_type_node;
 
+/* AltiVec requires a few more basic types in addition to the vector
+   types already defined in tree.c.  */
+static GTY(()) tree bool_char_type_node;       /* __bool char */
+static GTY(()) tree bool_short_type_node;      /* __bool short */
+static GTY(()) tree bool_int_type_node;                /* __bool int */
+static GTY(()) tree pixel_type_node;           /* __pixel */
+static GTY(()) tree bool_V16QI_type_node;      /* __vector __bool char */
+static GTY(()) tree bool_V8HI_type_node;       /* __vector __bool short */
+static GTY(()) tree bool_V4SI_type_node;       /* __vector __bool int */
+static GTY(()) tree pixel_V8HI_type_node;      /* __vector __pixel */
+
+int rs6000_warn_altivec_long = 1;              /* On by default. */
+const char *rs6000_warn_altivec_long_switch;
+
 const char *rs6000_traceback_name;
 static enum {
   traceback_default = 0,
@@ -287,6 +301,7 @@ static void rs6000_assemble_visibility (tree, int);
 #endif
 static int rs6000_ra_ever_killed (void);
 static tree rs6000_handle_longcall_attribute (tree *, tree, tree, int, bool *);
+static tree rs6000_handle_altivec_attribute (tree *, tree, tree, int, bool *);
 extern const struct attribute_spec rs6000_attribute_table[];
 static void rs6000_set_default_type_attributes (tree);
 static void rs6000_output_function_prologue (FILE *, HOST_WIDE_INT);
@@ -913,6 +928,17 @@ rs6000_override_options (const char *default_cpu)
       rs6000_default_long_calls = (base[0] != 'n');
     }
 
+  /* Handle -m(no-)warn-altivec-long similarly.  */
+  if (rs6000_warn_altivec_long_switch)
+    {
+      const char *base = rs6000_warn_altivec_long_switch;
+      while (base[-1] != 'm') base--;
+
+      if (*rs6000_warn_altivec_long_switch != '\0')
+       error ("invalid option `%s'", base);
+      rs6000_warn_altivec_long = (base[0] != 'n');
+    }
+
   /* Handle -mprioritize-restricted-insns option.  */
   rs6000_sched_restricted_insns_priority = DEFAULT_RESTRICTED_INSNS_PRIORITY;
   if (rs6000_sched_restricted_insns_priority_str)
@@ -5465,6 +5491,7 @@ rs6000_expand_binop_builtin (enum insn_code icode, tree arglist, rtx target)
       || icode == CODE_FOR_spe_evsrwiu)
     {
       /* Only allow 5-bit unsigned literals.  */
+      STRIP_NOPS (arg1);
       if (TREE_CODE (arg1) != INTEGER_CST
          || TREE_INT_CST_LOW (arg1) & ~0x1f)
        {
@@ -5687,6 +5714,7 @@ rs6000_expand_ternop_builtin (enum insn_code icode, tree arglist, rtx target)
       || icode == CODE_FOR_altivec_vsldoi_16qi)
     {
       /* Only allow 4-bit unsigned literals.  */
+      STRIP_NOPS (arg2);
       if (TREE_CODE (arg2) != INTEGER_CST
          || TREE_INT_CST_LOW (arg2) & ~0xf)
        {
@@ -5857,6 +5885,7 @@ altivec_expand_dst_builtin (tree exp, rtx target ATTRIBUTE_UNUSED,
            || arg2 == error_mark_node)
          return const0_rtx;
 
+       STRIP_NOPS (arg2);
        if (TREE_CODE (arg2) != INTEGER_CST
            || TREE_INT_CST_LOW (arg2) & ~0x3)
          {
@@ -5963,6 +5992,7 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp)
     case ALTIVEC_BUILTIN_DSS:
       icode = CODE_FOR_altivec_dss;
       arg0 = TREE_VALUE (arglist);
+      STRIP_NOPS (arg0);
       op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
       mode0 = insn_data[icode].operand[0].mode;
 
@@ -5982,6 +6012,15 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp)
 
       emit_insn (gen_altivec_dss (op0));
       return NULL_RTX;
+      
+    case ALTIVEC_BUILTIN_COMPILETIME_ERROR:
+      arg0 = TREE_VALUE (arglist);
+      while (TREE_CODE (arg0) == NOP_EXPR || TREE_CODE (arg0) == ADDR_EXPR)
+       arg0 = TREE_OPERAND (arg0, 0);
+      error ("invalid parameter combination for `%s' AltiVec intrinsic",
+            TREE_STRING_POINTER (arg0));
+
+      return const0_rtx;
     }
 
   /* Expand abs* operations.  */
@@ -6421,6 +6460,74 @@ rs6000_init_builtins (void)
   opaque_V2SF_type_node = copy_node (V2SF_type_node);
   opaque_p_V2SI_type_node = build_pointer_type (opaque_V2SI_type_node);
 
+  /* The 'vector bool ...' types must be kept distinct from 'vector unsigned ...'
+     types, especially in C++ land.  Similarly, 'vector pixel' is distinct from
+     'vector unsigned short'.  */
+
+  bool_char_type_node = copy_node (unsigned_intQI_type_node);
+  TYPE_MAIN_VARIANT (bool_char_type_node) = bool_char_type_node;
+  bool_short_type_node = copy_node (unsigned_intHI_type_node);
+  TYPE_MAIN_VARIANT (bool_short_type_node) = bool_short_type_node;
+  bool_int_type_node = copy_node (unsigned_intSI_type_node);
+  TYPE_MAIN_VARIANT (bool_int_type_node) = bool_int_type_node;
+  pixel_type_node = copy_node (unsigned_intHI_type_node);
+  TYPE_MAIN_VARIANT (pixel_type_node) = pixel_type_node;
+
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__bool char"),
+                                           bool_char_type_node));
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__bool short"),
+                                           bool_short_type_node));
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__bool int"),
+                                           bool_int_type_node));
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__pixel"),
+                                           pixel_type_node));
+
+  bool_V16QI_type_node = make_vector (V16QImode, bool_char_type_node, 1);
+  bool_V8HI_type_node = make_vector (V8HImode, bool_short_type_node, 1);
+  bool_V4SI_type_node = make_vector (V4SImode, bool_int_type_node, 1);
+  pixel_V8HI_type_node = make_vector (V8HImode, pixel_type_node, 1);
+
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__vector unsigned char"),
+                                           unsigned_V16QI_type_node));
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__vector signed char"),
+                                           V16QI_type_node));
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__vector __bool char"),
+                                           bool_V16QI_type_node));
+
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__vector unsigned short"),
+                                           unsigned_V8HI_type_node));
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__vector signed short"),
+                                           V8HI_type_node));
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__vector __bool short"),
+                                           bool_V8HI_type_node));
+
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__vector unsigned int"),
+                                           unsigned_V4SI_type_node));
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__vector signed int"),
+                                           V4SI_type_node));
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__vector __bool int"),
+                                           bool_V4SI_type_node));
+
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__vector float"),
+                                           V4SF_type_node));
+  (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL,
+                                           get_identifier ("__vector __pixel"),
+                                           pixel_V8HI_type_node));
+
   if (TARGET_SPE)
     spe_init_builtins ();
   if (TARGET_ALTIVEC)
@@ -6771,11 +6878,14 @@ altivec_init_builtins (void)
     = build_function_type_list (V16QI_type_node, V16QI_type_node, NULL_TREE);
   tree v4sf_ftype_v4sf
     = build_function_type_list (V4SF_type_node, V4SF_type_node, NULL_TREE);
-  tree void_ftype_pcvoid_int_char
+  tree void_ftype_pcvoid_int_int
     = build_function_type_list (void_type_node,
                                pcvoid_type_node, integer_type_node,
-                               char_type_node, NULL_TREE);
-  
+                               integer_type_node, NULL_TREE);
+  tree int_ftype_pcchar
+    = build_function_type_list (integer_type_node,
+                               pcchar_type_node, NULL_TREE);
+
   def_builtin (MASK_ALTIVEC, "__builtin_altivec_ld_internal_4sf", v4sf_ftype_pcfloat,
               ALTIVEC_BUILTIN_LD_INTERNAL_4sf);
   def_builtin (MASK_ALTIVEC, "__builtin_altivec_st_internal_4sf", void_ftype_pfloat_v4sf,
@@ -6809,10 +6919,14 @@ altivec_init_builtins (void)
   def_builtin (MASK_ALTIVEC, "__builtin_altivec_stvebx", void_ftype_v16qi_long_pvoid, ALTIVEC_BUILTIN_STVEBX);
   def_builtin (MASK_ALTIVEC, "__builtin_altivec_stvehx", void_ftype_v8hi_long_pvoid, ALTIVEC_BUILTIN_STVEHX);
 
+  /* See altivec.h for usage of "__builtin_altivec_compiletime_error".  */
+  def_builtin (MASK_ALTIVEC, "__builtin_altivec_compiletime_error", int_ftype_pcchar,
+              ALTIVEC_BUILTIN_COMPILETIME_ERROR);
+
   /* Add the DST variants.  */
   d = (struct builtin_description *) bdesc_dst;
   for (i = 0; i < ARRAY_SIZE (bdesc_dst); i++, d++)
-    def_builtin (d->mask, d->name, void_ftype_pcvoid_int_char, d->code);
+    def_builtin (d->mask, d->name, void_ftype_pcvoid_int_int, d->code);
 
   /* Initialize the predicates.  */
   dp = (struct builtin_description_predicates *) bdesc_altivec_preds;
@@ -8896,12 +9010,12 @@ print_operand (FILE *file, rtx x, int code)
 
     case 'P':
       /* The operand must be an indirect memory reference.  The result
-        is the register number.  */
+        is the register name.  */
       if (GET_CODE (x) != MEM || GET_CODE (XEXP (x, 0)) != REG
          || REGNO (XEXP (x, 0)) >= 32)
        output_operand_lossage ("invalid %%P value");
       else
-       fprintf (file, "%d", REGNO (XEXP (x, 0)));
+       fprintf (file, "%s", reg_names[REGNO (XEXP (x, 0))]);
       return;
 
     case 'q':
@@ -14546,11 +14660,99 @@ rs6000_initialize_trampoline (rtx addr, rtx fnaddr, rtx cxt)
 const struct attribute_spec rs6000_attribute_table[] =
 {
   /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */
+  { "altivec",   1, 1, false, true,  false, rs6000_handle_altivec_attribute },
   { "longcall",  0, 0, false, true,  true,  rs6000_handle_longcall_attribute },
   { "shortcall", 0, 0, false, true,  true,  rs6000_handle_longcall_attribute },
   { NULL,        0, 0, false, false, false, NULL }
 };
 
+/* Handle the "altivec" attribute.  The attribute may have
+   arguments as follows:
+   
+       __attribute__((altivec(vector__)))
+       __attribute__((altivec(pixel__)))       (always followed by 'unsigned short')
+       __attribute__((altivec(bool__)))        (always followed by 'unsigned')
+
+  and may appear more than once (e.g., 'vector bool char') in a
+  given declaration.  */
+
+static tree
+rs6000_handle_altivec_attribute (tree *node, tree name, tree args,
+                                int flags ATTRIBUTE_UNUSED,
+                                bool *no_add_attrs)
+{
+  tree type = *node, result = NULL_TREE;
+  enum machine_mode mode;
+  int unsigned_p;
+  char altivec_type
+    = ((args && TREE_CODE (args) == TREE_LIST && TREE_VALUE (args)
+       && TREE_CODE (TREE_VALUE (args)) == IDENTIFIER_NODE)
+       ? *IDENTIFIER_POINTER (TREE_VALUE (args))
+       : '?'); 
+
+  while (POINTER_TYPE_P (type)
+        || TREE_CODE (type) == FUNCTION_TYPE
+        || TREE_CODE (type) == METHOD_TYPE
+        || TREE_CODE (type) == ARRAY_TYPE)
+    type = TREE_TYPE (type);
+
+  mode = TYPE_MODE (type);
+
+  if (rs6000_warn_altivec_long
+      && (type == long_unsigned_type_node || type == long_integer_type_node))
+    warning ("use of 'long' in AltiVec types is deprecated; use 'int'");
+
+  switch (altivec_type)
+    {
+    case 'v':
+      unsigned_p = TREE_UNSIGNED (type);
+      switch (mode)
+       {
+         case SImode:
+           result = (unsigned_p ? unsigned_V4SI_type_node : V4SI_type_node);
+           break;
+         case HImode:
+           result = (unsigned_p ? unsigned_V8HI_type_node : V8HI_type_node);
+           break;
+         case QImode:
+           result = (unsigned_p ? unsigned_V16QI_type_node : V16QI_type_node);
+           break;
+         case SFmode: result = V4SF_type_node; break;
+           /* If the user says 'vector int bool', we may be handed the 'bool'
+              attribute _before_ the 'vector' attribute, and so select the proper
+              type in the 'b' case below.  */
+         case V4SImode: case V8HImode: case V16QImode: result = type;
+         default: break;
+       }
+      break;
+    case 'b':
+      switch (mode)
+       {
+         case SImode: case V4SImode: result = bool_V4SI_type_node; break;
+         case HImode: case V8HImode: result = bool_V8HI_type_node; break;
+         case QImode: case V16QImode: result = bool_V16QI_type_node;
+         default: break;
+       }
+      break;
+    case 'p':
+      switch (mode)
+       {
+         case V8HImode: result = pixel_V8HI_type_node;
+         default: break;
+       }
+    default: break;
+    }
+
+  *no_add_attrs = true;  /* No need to hang on to the attribute.  */
+
+  if (!result)
+    warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name));
+  else
+    *node = reconstruct_complex_type (*node, result);
+
+  return NULL_TREE;
+}
+
 /* Handle a "longcall" or "shortcall" attribute; arguments as in
    struct attribute_spec.handler.  */
 
index cd8d05df0342993bfc6f9f6875d769f44a02085d..ccceb176f55a583f39296927a23a7e10d2f5bac3 100644 (file)
@@ -452,6 +452,9 @@ enum group_termination
    {"longcall", &rs6000_longcall_switch,                               \
     N_("Avoid all range limits on call instructions"), 0},             \
    {"no-longcall", &rs6000_longcall_switch, "", 0},                    \
+   {"warn-altivec-long", &rs6000_warn_altivec_long_switch, \
+    N_("Warn about deprecated 'vector long ...' AltiVec type usage"), 0}, \
+   {"no-warn-altivec-long", &rs6000_warn_altivec_long_switch, "", 0}, \
    {"sched-costly-dep=", &rs6000_sched_costly_dep_str,                  \
     N_("Determine which dependences between insns are considered costly"), 0}, \
    {"insert-sched-nops=", &rs6000_sched_insert_nops_str,                \
@@ -520,6 +523,9 @@ extern enum rs6000_dependence_cost rs6000_sched_costly_dep;
 extern const char *rs6000_sched_insert_nops_str;
 extern enum rs6000_nop_insertion rs6000_sched_insert_nops;
 
+extern int rs6000_warn_altivec_long;
+extern const char *rs6000_warn_altivec_long_switch;
+
 /* Alignment options for fields in structures for sub-targets following
    AIX-like ABI.
    ALIGN_POWER word-aligns FP doubles (default AIX ABI).
@@ -2911,9 +2917,11 @@ enum rs6000_builtins
   ALTIVEC_BUILTIN_ABS_V4SI,
   ALTIVEC_BUILTIN_ABS_V4SF,
   ALTIVEC_BUILTIN_ABS_V8HI,
-  ALTIVEC_BUILTIN_ABS_V16QI
+  ALTIVEC_BUILTIN_ABS_V16QI,
+  ALTIVEC_BUILTIN_COMPILETIME_ERROR,
+
   /* SPE builtins.  */
-  SPE_BUILTIN_EVADDW,
+  SPE_BUILTIN_EVADDW,
   SPE_BUILTIN_EVAND,
   SPE_BUILTIN_EVANDC,
   SPE_BUILTIN_EVDIVWS,
index cdb131e504c2cfd4de2ed676323c4c4faa5608f6..a69f71ee81fb9e43a928bf3e2f22b1ee4eb47c2b 100644 (file)
@@ -1,3 +1,21 @@
+2004-02-21  Ziemowit Laski  <zlaski@apple.com>
+
+       * g++.dg/ext/altivec-1.C: Generalize target triple.
+       * g++.dg/ext/altivec-2.C: New test case.
+       * g++.dg/ext/altivec_check.h: New file.
+       * gcc.dg/altivec-1.c: Generalize target triple;
+       include altivec_check.h and call altivec_check().
+       * gcc.dg/altivec-[2-5].c: Generalize target triple.
+       * gcc.dg/altivec-6.c: New test case.
+       * gcc.dg/altivec-[7-9].c: Generalize target triple; add
+       type casts as needed.
+       * gcc.dg/altivec-10.c: Include altivec_check.h and call 
+       altivec_check().
+       * gcc.dg/altivec-12.c: New test case.
+       * gcc.dg/altivec-varargs-1.c: Generalize target triple;
+       include altivec_check.h and call altivec_check().
+       * gcc.dg/altivec_check.h: New file.
+
 2004-02-20  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * lib/target-supports.exp (check_alias_available): Don't mangle
index b7e3af3000996f8c2ee7fdf35d6518118e50bb68..09c234332970fb49b1522fdd4f3058a7a7692b12 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-do compile { target powerpc-*-* } } */
+/* { dg-do compile { target powerpc*-*-* } } */
 /* { dg-options "-maltivec" } */
 
 #include <altivec.h>
diff --git a/gcc/testsuite/g++.dg/ext/altivec-2.C b/gcc/testsuite/g++.dg/ext/altivec-2.C
new file mode 100644 (file)
index 0000000..4c9518a
--- /dev/null
@@ -0,0 +1,25 @@
+/* { dg-do run { target powerpc*-*-* } } */
+/* { dg-options "-maltivec -Wall" } */
+
+/* This test checks if AltiVec builtins accept const-qualified
+   arguments.  */
+
+#include <altivec.h>
+#include "altivec_check.h"
+
+int main (int argc, const char * argv[])
+{
+  int i;
+  const float cf = 1.0;
+  vector float v;
+  const vector float cv = (vector float){1.0, 2.0, 3.0, 4.0};
+
+  altivec_check ();
+
+  vec_dst(&cv, i, 0);
+  v = vec_ld(0, &cv);  
+  v = vec_lde(0, &cf);
+  vec_lvsl(0, &cf);
+  
+  return 0;
+}
diff --git a/gcc/testsuite/g++.dg/ext/altivec_check.h b/gcc/testsuite/g++.dg/ext/altivec_check.h
new file mode 100644 (file)
index 0000000..4f12d85
--- /dev/null
@@ -0,0 +1,23 @@
+/* A runtime check for AltiVec capability.  */
+/* Contributed by Ziemowit Laski  <zlaski@apple.com>  */
+
+#include <signal.h>
+extern void exit(int);
+
+void 
+sig_ill_handler (int sig)
+{
+    exit (0);
+}
+
+void altivec_check(void) {
+
+  /* Exit on systems without AltiVec.  */
+  signal (SIGILL, sig_ill_handler);
+#ifdef __MACH__
+  asm volatile ("vor v0,v0,v0");
+#else
+  asm volatile ("vor 0,0,0");
+#endif
+  signal (SIGILL, SIG_DFL);
+}
index 3d37a2e1c76fdcbd8b44667a3df86f13cd4c4930..59654bee2c9b9f37f02e3b53a91ca253163b7120 100644 (file)
@@ -1,9 +1,10 @@
-/* { dg-do run { target powerpc-*-*altivec powerpc-*-*-*altivec } } */
+/* { dg-do run { target powerpc*-*-* } } */
 /* { dg-options "-maltivec" } */
 
 /* Program to test PowerPC AltiVec instructions.  */
 
 #include <altivec.h>
+#include "altivec_check.h"
 
 extern void abort (void);
 
@@ -22,6 +23,8 @@ vector float f, g, h;
 
 int main ()
 {
+  altivec_check();  /* Exits if AltiVec not supported */
+
   k = vec_add (a1, a2);
   if (!vec_all_eq (addi, k))
     abort ();
index 8d9223f3be482dc38a4d3c3f5b2e9f52b14e3984..a0225a4dd783a3b514b7540dfec9286cc1136b57 100644 (file)
@@ -4,11 +4,7 @@
 #include <altivec.h>
 #include <signal.h>
 
-void 
-sig_ill_handler (int sig)
-{
-    exit(0);
-}
+#include "altivec_check.h"
 
 typedef union
 {
@@ -62,7 +58,7 @@ check_cmple()
 {
   vector float a = {1.0, 2.0, 3.0, 4.0};
   vector float b = {1.0, 3.0, 2.0, 5.0};
-  vector signed int aux;
+  vector bool int aux;
   vector signed int le = {-1, -1, 0, -1};
 
   aux = vec_cmple (a, b);
@@ -75,10 +71,7 @@ check_cmple()
 int 
 main()
 {
-  /* Exit on systems without altivec.  */
-  signal (SIGILL, sig_ill_handler);
-  asm volatile ("vor 0,0,0");
-  signal (SIGILL, SIG_DFL);
+  altivec_check ();
 
   check_cmple ();
   check_vec_all_num ();
diff --git a/gcc/testsuite/gcc.dg/altivec-12.c b/gcc/testsuite/gcc.dg/altivec-12.c
new file mode 100644 (file)
index 0000000..ae9cdf4
--- /dev/null
@@ -0,0 +1,94 @@
+/* { dg-do run { target powerpc*-*-darwin* } } */
+/* { dg-options "-faltivec" } */
+
+/* Program to test PowerPC AltiVec instructions.  */
+
+#include "altivec_check.h"
+
+extern void abort (void);
+#define CHECK_IF(E) if(!(E)) abort()
+
+vector int a1 = (vector int){ 100, 200, 300, 400 };
+vector int a2 = (vector int){ 500, 600, 700, 800 };
+vector int addi = (vector int){ 600, 800, 1000, 1200 };
+vector int avgi = (vector int){ 300, 400, 500, 600 };
+
+vector float f1 = (vector float){ 1.0, 2.0, 3.0, 4.0 };
+vector float f2 = (vector float){ 5.0, 6.0, 7.0, 8.0 };
+vector float f3;
+vector float addf1 = (vector float){ 6.0, 8.0, 10.0, 12.0 };
+vector float addf2 = (vector float){ 6.1, 8.1, 10.1, 12.1 };
+vector float addf3 = (vector float){ 6.0, 8.0, 9.9, 12.1 };
+vector int k;
+vector float f, g, h;
+
+int main ()
+{
+
+  altivec_check();  /* Exit if AltiVec not available.  */
+
+  k = vec_add (a1, a2);
+  CHECK_IF (vec_all_eq (addi, k));
+  CHECK_IF (vec_all_ge (addi, k));
+  CHECK_IF (vec_all_le (addi, k));
+  CHECK_IF (vec_any_eq (addi, k));
+  CHECK_IF (vec_any_ge (addi, k));
+  CHECK_IF (vec_any_le (addi, k));
+  CHECK_IF (!vec_any_ne (addi, k));
+  CHECK_IF (!vec_any_lt (addi, k));
+  CHECK_IF (!vec_any_gt (addi, k));
+  CHECK_IF (!vec_any_ne (addi, k));
+  CHECK_IF (!vec_any_lt (addi, k));
+  CHECK_IF (!vec_any_gt (addi, k));
+
+  k = vec_avg (a1, a2);
+  CHECK_IF (vec_all_eq (k, avgi));
+
+  h = vec_add (f1, f2);
+  CHECK_IF (vec_all_eq (h, addf1));
+  CHECK_IF (vec_all_ge (h, addf1));
+  CHECK_IF (vec_all_le (h, addf1));
+  CHECK_IF (vec_any_eq (h, addf1));
+  CHECK_IF (vec_any_ge (h, addf1));
+  CHECK_IF (vec_any_le (h, addf1));
+  CHECK_IF (!vec_any_ne (h, addf1));
+  CHECK_IF (!vec_any_lt (h, addf1));
+  CHECK_IF (!vec_any_gt (h, addf1));
+  CHECK_IF (!vec_any_ne (h, addf1));
+  CHECK_IF (!vec_any_lt (h, addf1));
+  CHECK_IF (!vec_any_gt (h, addf1));
+
+  CHECK_IF (vec_all_gt (addf2, addf1));
+  CHECK_IF (vec_any_gt (addf2, addf1));
+  CHECK_IF (vec_all_ge (addf2, addf1));
+  CHECK_IF (vec_any_ge (addf2, addf1));
+  CHECK_IF (vec_all_ne (addf2, addf1));
+  CHECK_IF (vec_any_ne (addf2, addf1));
+  CHECK_IF (!vec_all_lt (addf2, addf1));
+  CHECK_IF (!vec_any_lt (addf2, addf1));
+  CHECK_IF (!vec_all_le (addf2, addf1));
+  CHECK_IF (!vec_any_le (addf2, addf1));
+  CHECK_IF (!vec_all_eq (addf2, addf1));
+  CHECK_IF (!vec_any_eq (addf2, addf1));
+
+  CHECK_IF (vec_any_eq (addf3, addf1));
+  CHECK_IF (vec_any_ne (addf3, addf1));
+  CHECK_IF (vec_any_lt (addf3, addf1));
+  CHECK_IF (vec_any_le (addf3, addf1));
+  CHECK_IF (vec_any_gt (addf3, addf1));
+  CHECK_IF (vec_any_ge (addf3, addf1));
+  CHECK_IF (!vec_all_eq (addf3, addf1));
+  CHECK_IF (!vec_all_ne (addf3, addf1));
+  CHECK_IF (!vec_all_lt (addf3, addf1));
+  CHECK_IF (!vec_all_le (addf3, addf1));
+  CHECK_IF (!vec_all_gt (addf3, addf1));
+  CHECK_IF (!vec_all_ge (addf3, addf1));
+
+  CHECK_IF (vec_all_numeric (addf3));
+  CHECK_IF (vec_all_in (addf1, addf2));
+
+  CHECK_IF (vec_step (vector bool char) == 16);
+  CHECK_IF (vec_step (addf3) == 4);
+
+  return 0;
+}
index 3c74d392a3ebe2a1896c3ade37f7773358d3cea3..f64081ff8134ec8d859a989dc3c69221aec917a1 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do compile { target powerpc-*-* } } */
+/* { dg-do compile { target powerpc*-*-* } } */
 /* { dg-options "-maltivec" } */
 
 /* Program to test the vector_size attribute.  This needs to run on a
index c82f1e2a214604cc5b194a84085b93d649dd1eba..1321a729a9a4470db2f75c29eb5b8c50972937ba 100644 (file)
@@ -1,6 +1,8 @@
-/* { dg-do run { target powerpc-*-*altivec powerpc-*-*-*altivec } } */
+/* { dg-do run { target powerpc*-*-* } } */
 /* { dg-options "-maltivec" } */
 
+#include "altivec_check.h"
+
 typedef int int4 __attribute__ ((mode(V4SI)));
 typedef float float4 __attribute__ ((mode(V4SF)));
 
@@ -55,6 +57,8 @@ main ()
   float4 f3 = (float4) { 6.0, 8.0, 10.0, 12.0 };
   float4 ftmp;
 
+  altivec_check ();
+
   vec_store (i3, a3);
   itmp = vec_add_int4 (a1, a2);
   vec_store (j3, itmp);
index 244e31b282530ac2f99f6730cfec7191e78315c8..175663581ac31629b33925566fb310f35e1a535a 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do compile { target powerpc-*-* } } */
+/* { dg-do compile { target powerpc*-*-* } } */
 /* { dg-options "-maltivec -O0 -Wall" } */
 
 #define vector __attribute__((vector_size(16)))
index 61d19d9cd9b7400a996aa59a9d09e7ef8492a828..0adfdb84d1949c23912fa0e502d211337ee20810 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do compile { target powerpc-*-* } } */
+/* { dg-do compile { target powerpc*-*-* } } */
 /* { dg-options "-maltivec -O2" } */
 
 #define vector __attribute__((vector_size(16)))
diff --git a/gcc/testsuite/gcc.dg/altivec-6.c b/gcc/testsuite/gcc.dg/altivec-6.c
new file mode 100644 (file)
index 0000000..85e597f
--- /dev/null
@@ -0,0 +1,64 @@
+/* { dg-do compile { target powerpc-*-darwin* } } */
+/* { dg-options "-faltivec -O0 -Wall" } */
+
+
+/* These denote "generic" GCC vectors.  */
+static int __attribute__((mode(V4SI))) x, y;
+
+static vector signed int i,j;
+static vector signed short s,t;
+static vector signed char c,d;
+static vector float f,g;
+
+static vector unsigned char uc;
+
+static vector signed int *pi;
+
+static int int1, int2;
+
+void
+b()
+{
+  vec_add (x, y);
+
+  /* Make sure the predicates accept correct argument types.  */
+
+  int1 = vec_all_in (f, g);
+  int1 = vec_all_ge (f, g);
+  int1 = vec_all_eq (c, d);
+  int1 = vec_all_ne (s, t);
+  int1 = vec_any_eq (i, j);
+  int1 = vec_any_ge (f, g);
+  int1 = vec_all_ngt (f, g);
+  int1 = vec_any_ge (c, d);
+  int1 = vec_any_ge (s, t);
+  int1 = vec_any_ge (i, j);
+  int1 = vec_any_ge (c, d);
+  int1 = vec_any_ge (s, t);
+  int1 = vec_any_ge (i, j);
+
+  vec_mtvscr (i);
+  vec_dssall ();
+  s = (vector signed short) vec_mfvscr ();
+  vec_dss (3);
+
+  vec_dst (pi, int1 + int2, 3);
+  vec_dstst (pi, int1 + int2, 3);
+  vec_dststt (pi, int1 + int2, 3);
+  vec_dstt (pi, int1 + int2, 3);
+
+  uc = (vector unsigned char) vec_lvsl (int1 + 69, (signed int *) pi);
+  uc = (vector unsigned char) vec_lvsr (int1 + 69, (signed int *) pi);
+
+  c = vec_lde (int1, (signed char *) pi);
+  s = vec_lde (int1, (signed short *) pi);
+  i = vec_lde (int1, (signed int *) pi);
+  i = vec_ldl (int1, pi);
+  i = vec_ld (int1, pi);
+
+  vec_st (i, int2, pi);
+  vec_ste (c, int2, (signed char *) pi);
+  vec_ste (s, int2, (signed short *) pi);
+  vec_ste (i, int2, (signed int *) pi);
+  vec_stl (i, int2, pi);
+}
index 7e118d960cae91f2e89131996bfdddf3b178a58a..bb04b50bdf0e2d122a74f8f82866224da8855d5a 100644 (file)
@@ -1,6 +1,6 @@
 /* Origin: Aldy Hernandez  <aldyh@redhat.com>  */
 
-/* { dg-do compile { target powerpc-*-* } } */
+/* { dg-do compile { target powerpc*-*-* } } */
 /* { dg-options "-maltivec" } */
 
 #include <altivec.h>
@@ -10,19 +10,19 @@ int *var_int;
 unsigned long **ulongp;
 vector pixel *varpixel;
 vector signed char *vecchar;
-vector signed long *vecint;
+vector signed long *vecint;       /* { dg-warning "use of .long. in AltiVec types is deprecated; use .int." } */
 vector signed short *vecshort;
 vector unsigned char *vecuchar;
-vector unsigned long *vecuint;
+vector unsigned long *vecuint;    /* { dg-warning "use of .long. in AltiVec types is deprecated; use .int." } */
 vector unsigned short *vecushort;
 vector float *vecfloat;
 
 int main ()
 {
-  *vecfloat++ = vec_andc(vecint[0], vecfloat[1]);
-  *vecfloat++ = vec_andc(vecfloat[0], vecint[1]);
-  *vecfloat++ = vec_vxor(vecint[0], vecfloat[1]);
-  *vecfloat++ = vec_vxor(vecfloat[0], vecint[1]);
+  *vecfloat++ = vec_andc((vector bool int)vecint[0], vecfloat[1]);
+  *vecfloat++ = vec_andc(vecfloat[0], (vector bool int)vecint[1]);
+  *vecfloat++ = vec_vxor((vector bool int)vecint[0], vecfloat[1]);
+  *vecfloat++ = vec_vxor(vecfloat[0], (vector bool int)vecint[1]);
   *varpixel++ = vec_packpx(vecuint[0], vecuint[1]);
   *varpixel++ = vec_vpkpx(vecuint[0], vecuint[1]);
   *vecshort++ = vec_vmulosb(vecchar[0], vecchar[1]);
@@ -32,14 +32,14 @@ int main ()
   *vecint++ = vec_lvewx(var_int[0], longp[1]);
   *vecint++ = vec_unpackh(vecshort[0]);
   *vecint++ = vec_unpackl(vecshort[0]);
-  *vecushort++ = vec_andc(vecshort[0], vecushort[1]);
-  *vecushort++ = vec_andc(vecushort[0], vecshort[1]);
-  *vecushort++ = vec_vxor(vecshort[0], vecushort[1]);
-  *vecushort++ = vec_vxor(vecushort[0], vecshort[1]);
+  *vecushort++ = vec_andc((vector bool short)vecshort[0], vecushort[1]);
+  *vecushort++ = vec_andc(vecushort[0], (vector bool short)vecshort[1]);
+  *vecushort++ = vec_vxor((vector bool short)vecshort[0], vecushort[1]);
+  *vecushort++ = vec_vxor(vecushort[0], (vector bool short)vecshort[1]);
   *vecuint++ = vec_ld(var_int[0], ulongp[1]);
   *vecuint++ = vec_lvx(var_int[0], ulongp[1]);
   *vecuint++ = vec_vmsumubm(vecuchar[0], vecuchar[1], vecuint[2]);
-  *vecuchar++ = vec_xor(vecuchar[0], vecchar[1]);
+  *vecuchar++ = vec_xor(vecuchar[0], (vector unsigned char)vecchar[1]);
 
   return 0;
 }
index 2d6803a47ee67c2dbe94d76af5311720f99305ac..bbd2cf7a3253a85725890c4eb1d279fb2020724f 100644 (file)
@@ -1,7 +1,7 @@
 /* Origin: Aldy Hernandez  <aldyh@redhat.com>  */
 /* Test rs6000_legitimate_address.  PRE_INC should be invalid.  */
 
-/* { dg-do compile { target powerpc-*-* } } */
+/* { dg-do compile { target powerpc*-*-* } } */
 /* { dg-options "-maltivec" } */
 
 #include <altivec.h>
index 62328221ed7510513e9e68b4bb376c0507431dc0..36c79d3453b1e8a76a0b184f0135910cb2d421ec 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do compile { target powerpc-*-* } } */
+/* { dg-do compile { target powerpc*-*-* } } */
 /* { dg-options "-maltivec -mabi=altivec -g" } */
 
 /* PR9564 */
index caf6a266620ad90116f944df4a6de43c09479d6d..14e5e6ee9768452cbc22548e8fe85e3aa2874e1e 100644 (file)
@@ -1,9 +1,11 @@
-/* { dg-do run { target powerpc*-*-darwin* powerpc*-*-*altivec* powerpc*-*-linux*} } */
+/* { dg-do run { target powerpc*-*-} } */
 /* { dg-options "-maltivec -mabi=altivec -fno-inline" } */
 
 #include <stdarg.h>
 #include <signal.h>
 
+#include "altivec_check.h"
+
 #define vector __attribute__((mode(V4SI)))
 
 const vector unsigned int v1 = {10,11,12,13};
@@ -72,19 +74,10 @@ int main1(void)
   return 0;
 }
 
-void 
-sig_ill_handler (int sig)
-{
-    exit(0);
-}
-
 int main (void)
 {
-  /* Exit on systems without altivec.  */
-  signal (SIGILL, sig_ill_handler);
-  /* Altivec instruction, 'vor %v0,%v0,%v0'.  */
-  asm volatile (".long 0x10000484");
-  signal (SIGILL, SIG_DFL);
+  /* Exit on systems without AltiVec.  */
+  altivec_check ();
 
   return main1 ();
 }
diff --git a/gcc/testsuite/gcc.dg/altivec_check.h b/gcc/testsuite/gcc.dg/altivec_check.h
new file mode 100644 (file)
index 0000000..c64d918
--- /dev/null
@@ -0,0 +1,23 @@
+/* A runtime check for AltiVec capability.  */
+/* Contributed by Ziemowit Laski  <zlaski@apple.com>  */
+
+#include <signal.h>
+extern void exit (int);
+
+void 
+sig_ill_handler (int sig)
+{
+    exit (0);
+}
+
+void altivec_check(void) {
+
+  /* Exit on systems without AltiVec.  */
+  signal (SIGILL, sig_ill_handler);
+#ifdef __MACH__
+  asm volatile ("vor v0,v0,v0");
+#else
+  asm volatile ("vor 0,0,0");
+#endif
+  signal (SIGILL, SIG_DFL);
+}
index 63aacb5d5e1d64b7a3623923260cbcc953bc82e4..3ae78d198ad741c70c89027b06bf8fc4deb6bd54 100644 (file)
@@ -1,4 +1,4 @@
-/* config.h.in.  Generated automatically from configure.in by autoheader 2.13.  */
+/* config.h.in.  Generated automatically from configure.in by autoheader.  */
 
 /* Define to empty if the keyword does not work.  */
 #undef const
index ba32a44d233f653dcba77d569fa8c1f3b380ec31..e6d5af240a1d594dd16c7ff091507d643621eab3 100644 (file)
@@ -1,4 +1,4 @@
-/* config.hin.  Generated automatically from configure.in by autoheader 2.13.  */
+/* config.hin.  Generated automatically from configure.in by autoheader.  */
 
 /* Define to empty if the keyword does not work.  */
 #undef const