OSDN Git Service

[gcc/ChangeLog]
authorzlaski <zlaski@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 21 Feb 2004 09:08:37 +0000 (09:08 +0000)
committerzlaski <zlaski@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 21 Feb 2004 09:08:37 +0000 (09:08 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78215 138bc75d-0d04-0410-961f-82ee72b054a4

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 ee97682..d3fc0db 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 8cf92a0..f56746d 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 fd501bf..e99a253 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 1bd8f45..42779c5 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 */
 
@@ -275,19 +343,31 @@ 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)
 {
   return (vector signed char) __builtin_altivec_vaddubm ((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);
 }
@@ -299,19 +379,31 @@ vec_add (vector unsigned char a1, vector unsigned 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)
 {
   return (vector signed short) __builtin_altivec_vadduhm ((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);
 }
@@ -323,19 +415,31 @@ vec_add (vector unsigned short a1, vector unsigned 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)
 {
   return (vector signed int) __builtin_altivec_vadduwm ((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);
 }
@@ -467,19 +571,31 @@ vec_adds (vector unsigned char a1, vector unsigned 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)
 {
   return (vector signed char) __builtin_altivec_vaddsbs ((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);
 }
@@ -491,19 +607,31 @@ vec_adds (vector unsigned short a1, vector unsigned 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)
 {
   return (vector signed short) __builtin_altivec_vaddshs ((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);
 }
@@ -515,6 +643,18 @@ vec_adds (vector unsigned int a1, vector unsigned 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)
 {
   return (vector signed int) __builtin_altivec_vaddsws ((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);
 }
@@ -672,19 +848,37 @@ vec_and (vector unsigned short a1, vector unsigned short 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)
 {
   return (vector signed char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) 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);
 }
@@ -764,19 +994,37 @@ vec_andc (vector unsigned short a1, vector unsigned short 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)
 {
   return (vector signed char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) 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);
 }
@@ -2083,19 +2474,31 @@ vec_max (vector unsigned char a1, vector unsigned 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)
 {
   return (vector signed char) __builtin_altivec_vmaxsb ((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);
 }
@@ -2107,19 +2510,31 @@ vec_max (vector unsigned short a1, vector unsigned 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)
 {
   return (vector signed short) __builtin_altivec_vmaxsh ((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);
 }
@@ -2131,6 +2546,18 @@ vec_max (vector unsigned int a1, vector unsigned 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)
 {
   return (vector signed int) __builtin_altivec_vmaxsw ((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);
 }
@@ -2447,19 +2922,31 @@ vec_min (vector unsigned char a1, vector unsigned 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)
 {
   return (vector signed char) __builtin_altivec_vminsb ((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);
 }
@@ -2471,19 +2958,31 @@ vec_min (vector unsigned short a1, vector unsigned 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)
 {
   return (vector signed short) __builtin_altivec_vminsh ((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);
 }
@@ -2495,6 +2994,18 @@ vec_min (vector unsigned int a1, vector unsigned 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)
 {
   return (vector signed int) __builtin_altivec_vminsw ((vector signed int) a1, (vector signed int) a2);
@@ -2735,6 +3246,12 @@ vec_mtvscr (vector unsigned 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)
 {
   __builtin_altivec_mtvscr ((vector signed int) a1);
@@ -2747,6 +3264,18 @@ vec_mtvscr (vector unsigned short 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)
 {
   __builtin_altivec_mtvscr ((vector signed int) 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);
 }
@@ -4596,19 +5749,31 @@ vec_subs (vector unsigned char a1, vector unsigned 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)
 {
   return (vector signed char) __builtin_altivec_vsubsbs ((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);
 }
@@ -4620,19 +5785,31 @@ vec_subs (vector unsigned short a1, vector unsigned 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)
 {
   return (vector signed short) __builtin_altivec_vsubshs ((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);
 }
@@ -4644,6 +5821,18 @@ vec_subs (vector unsigned int a1, vector unsigned 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)
 {
   return (vector signed int) __builtin_altivec_vsubsws ((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);
 }
@@ -4972,19 +6221,37 @@ vec_xor (vector unsigned short a1, vector unsigned short 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)
 {
   return (vector signed char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) 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);
 }
@@ -5070,6 +6379,24 @@ vec_all_eq (vector unsigned int a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpeqfp_p (__CR6_LT, a1, 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);
 }
@@ -5096,19 +6423,31 @@ vec_all_ge (vector unsigned char a1, vector unsigned char a2)
 }
 
 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)
 {
   return __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
 }
 
 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);
 }
@@ -5144,6 +6495,18 @@ vec_all_ge (vector unsigned int a1, vector unsigned int a2)
 }
 
 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)
 {
   return __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
@@ -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);
 }
@@ -5176,19 +6539,31 @@ vec_all_gt (vector unsigned char a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpgtsb_p (__CR6_LT, (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);
 }
@@ -5200,19 +6575,31 @@ vec_all_gt (vector unsigned short a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpgtsh_p (__CR6_LT, (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);
 }
@@ -5224,6 +6611,18 @@ vec_all_gt (vector unsigned int a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpgtsw_p (__CR6_LT, (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);
 }
@@ -5264,19 +6663,31 @@ vec_all_le (vector unsigned char a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (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);
 }
@@ -5288,19 +6699,31 @@ vec_all_le (vector unsigned short a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (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);
 }
@@ -5312,6 +6735,18 @@ vec_all_le (vector unsigned int a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (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);
 }
@@ -5344,19 +6779,31 @@ vec_all_lt (vector unsigned char a1, vector unsigned char a2)
 }
 
 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)
 {
   return __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
 }
 
 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);
 }
@@ -5368,19 +6815,31 @@ vec_all_lt (vector unsigned short a1, vector unsigned short a2)
 }
 
 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)
 {
   return __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
 }
 
 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);
 }
@@ -5392,6 +6851,18 @@ vec_all_lt (vector unsigned int a1, vector unsigned int a2)
 }
 
 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)
 {
   return __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
@@ -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);
 }
@@ -5606,6 +7173,24 @@ vec_any_eq (vector unsigned int a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, a1, 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);
 }
@@ -5686,6 +7307,24 @@ vec_any_ge (vector signed int a1, vector signed int a2)
 }
 
 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)
 {
   return __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, a1, 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);
 }
@@ -5712,19 +7351,31 @@ vec_any_gt (vector unsigned char a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (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);
 }
@@ -5736,19 +7387,31 @@ vec_any_gt (vector unsigned short a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (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);
 }
@@ -5760,6 +7423,18 @@ vec_any_gt (vector unsigned int a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (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);
 }
@@ -5792,19 +7467,31 @@ vec_any_le (vector unsigned char a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (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);
 }
@@ -5816,19 +7503,31 @@ vec_any_le (vector unsigned short a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (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);
 }
@@ -5840,6 +7539,18 @@ vec_any_le (vector unsigned int a1, vector unsigned 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)
 {
   return __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (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);
 }
@@ -5872,19 +7583,31 @@ vec_any_lt (vector unsigned char a1, vector unsigned char a2)
 }
 
 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)
 {
   return __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
 }
 
 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);
 }
@@ -5896,19 +7619,31 @@ vec_any_lt (vector unsigned short a1, vector unsigned short a2)
 }
 
 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)
 {
   return __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
 }
 
 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);
 }
@@ -5920,6 +7655,18 @@ vec_any_lt (vector unsigned int a1, vector unsigned int a2)
 }
 
 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)
 {
   return __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
@@ -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), vect