diff options
27 files changed, 4261 insertions, 1295 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ee97682..d3fc0db 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/darwin.h b/gcc/config/darwin.h index 8cf92a0..f56746d 100644 --- a/gcc/config/darwin.h +++ b/gcc/config/darwin.h @@ -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 diff --git a/gcc/config/i386/darwin.h b/gcc/config/i386/darwin.h index fd501bf..e99a253a 100644 --- a/gcc/config/i386/darwin.h +++ b/gcc/config/i386/darwin.h @@ -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 diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h index 1bd8f45..42779c5 100644 --- a/gcc/config/rs6000/altivec.h +++ b/gcc/config/rs6000/altivec.h @@ -32,46 +32,22 @@ #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 (vector signed char *a1, int a2, const char a3) +vec_dst (const vector bool char *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 unsigned short *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 signed short *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 bool short *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 pixel *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 unsigned int *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 vector signed int *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 vector bool int *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 vector float *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 unsigned char *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 signed char *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 unsigned short *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 short *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 unsigned int *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 (const int *a1, int a2, const int a3) +{ + __builtin_altivec_dst ((void *) a1, a2, a3); +} + +inline void +vec_dst (const unsigned long *a1, int a2, const int a3) +{ + __builtin_altivec_dst ((void *) a1, a2, a3); +} + +inline void +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 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 (vector signed char *a1, int a2, const char a3) +vec_dstst (const vector signed 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 bool short *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 pixel *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 unsigned 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 signed 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 bool int *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 vector float *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 unsigned 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 signed char *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 unsigned 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 short *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 unsigned 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 int *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 unsigned 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 (const long *a1, int a2, const int a3) +{ + __builtin_altivec_dstst ((void *) a1, a2, a3); +} + +inline void +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 (vector signed char *a1, int a2, const char a3) +vec_dststt (const vector unsigned 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 signed short *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 bool short *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 pixel *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 unsigned 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 signed int *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 vector bool int *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 vector float *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 char *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 signed char *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 short *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 short *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 int *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 int *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 (const unsigned long *a1, int a2, const int a3) +{ + __builtin_altivec_dststt ((void *) a1, a2, a3); +} + +inline void +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 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 (vector signed char *a1, int a2, const char a3) +vec_dstt (const vector bool char *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 unsigned 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 signed 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 bool short *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 pixel *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 unsigned 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 signed 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 bool int *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 vector float *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 unsigned 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 signed char *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 unsigned 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 short *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 unsigned 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 int *a1, int a2, const int a3) +{ + __builtin_altivec_dstt ((void *) a1, a2, a3); +} + +inline void +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 bool char a1, vector signed char a2) +{ + return (vector signed char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) 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 signed char a1, vector unsigned char a2) +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,43 +5101,139 @@ 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 float a1, int a2, float *a3) +{ + __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +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 int a1, int a2, int *a3) +{ + __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +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 unsigned int a1, int a2, unsigned int *a3) +{ + __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +vec_st (vector bool int a1, int a2, vector bool int *a3) +{ + __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +vec_st (vector bool int a1, int a2, unsigned int *a3) +{ + __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +vec_st (vector bool int a1, int a2, int *a3) +{ + __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +vec_st (vector signed short a1, int a2, vector signed short *a3) +{ + __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +vec_st (vector signed short a1, int a2, short *a3) +{ + __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +vec_st (vector unsigned short a1, int a2, vector unsigned short *a3) +{ + __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +vec_st (vector unsigned short a1, int a2, unsigned short *a3) +{ + __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +vec_st (vector bool short a1, int a2, vector bool short *a3) +{ + __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +vec_st (vector bool short a1, int a2, unsigned short *a3) +{ + __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +vec_st (vector bool short a1, int a2, short *a3) +{ + __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +vec_st (vector signed char a1, int a2, vector signed char *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 signed char a1, int a2, signed char *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 unsigned char a1, int a2, vector unsigned char *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 unsigned char a1, int a2, unsigned char *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 bool char a1, int a2, vector bool char *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 bool char a1, int a2, unsigned char *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 char a1, int a2, signed char *a3) { __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); } @@ -4268,43 +5241,91 @@ vec_st (vector unsigned char a1, int a2, void *a3) /* vec_ste */ inline void -vec_ste (vector signed char a1, int a2, void *a3) +vec_ste (vector signed char a1, int a2, signed char *a3) +{ + __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3); +} + +inline void +vec_ste (vector unsigned char a1, int a2, unsigned char *a3) { __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3); } inline void -vec_ste (vector unsigned char a1, int a2, void *a3) +vec_ste (vector bool char a1, int a2, signed char *a3) { __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3); } inline void -vec_ste (vector signed short a1, int a2, void *a3) +vec_ste (vector bool char a1, int a2, unsigned char *a3) +{ + __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3); +} + +inline void +vec_ste (vector signed short a1, int a2, short *a3) +{ + __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3); +} + +inline void +vec_ste (vector unsigned short a1, int a2, unsigned short *a3) +{ + __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3); +} + +inline void +vec_ste (vector bool short a1, int a2, short *a3) +{ + __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3); +} + +inline void +vec_ste (vector bool short a1, int a2, unsigned short *a3) +{ + __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3); +} + +inline void +vec_ste (vector pixel a1, int a2, short *a3) { __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3); } inline void -vec_ste (vector unsigned short a1, int a2, void *a3) +vec_ste (vector pixel a1, int a2, unsigned short *a3) { __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3); } inline void -vec_ste (vector float a1, int a2, void *a3) +vec_ste (vector float a1, int a2, float *a3) +{ + __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +vec_ste (vector signed int a1, int a2, int *a3) { __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3); } inline void -vec_ste (vector signed int a1, int a2, void *a3) +vec_ste (vector unsigned int a1, int a2, unsigned int *a3) { __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3); } inline void -vec_ste (vector unsigned int a1, int a2, void *a3) +vec_ste (vector bool int a1, int a2, int *a3) +{ + __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3); +} + +inline void +vec_ste (vector bool int a1, int a2, unsigned int *a3) { __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3); } @@ -4360,43 +5381,139 @@ vec_stvebx (vector unsigned char a1, int a2, void *a3) /* vec_stl */ inline void -vec_stl (vector float a1, int a2, void *a3) +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 int a1, int a2, void *a3) +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 int a1, int a2, void *a3) +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 signed short a1, int a2, void *a3) +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 unsigned short a1, int a2, void *a3) +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 signed char a1, int a2, void *a3) +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 unsigned char a1, int a2, void *a3) +vec_stl (vector bool char a1, int a2, signed char *a3) { __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3); } @@ -4404,19 +5521,31 @@ vec_stl (vector unsigned char a1, int 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 signed char a1, vector unsigned char a2) +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 signed char a2) +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); } @@ -4428,19 +5557,31 @@ vec_sub (vector unsigned char a1, vector unsigned 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 signed short a1, vector unsigned short a2) +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 signed short a2) +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); } @@ -4452,19 +5593,31 @@ vec_sub (vector unsigned short a1, vector unsigned 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 signed int a1, vector unsigned int a2) +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,17 +6125,35 @@ 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 signed int a1, vector float a2) +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 bool int +vec_xor (vector bool int a1, vector bool 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 vec_xor (vector signed int a1, vector signed int a2) { @@ -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); } @@ -5426,7 +6897,7 @@ vec_all_ne (vector signed char a1, vector signed char a2) } inline int -vec_all_ne (vector unsigned char a1, vector signed char a2) +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); } @@ -5438,7 +6909,25 @@ vec_all_ne (vector unsigned char a1, vector unsigned char a2) } inline int -vec_all_ne (vector signed short a1, vector unsigned short a2) +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); } @@ -5450,7 +6939,7 @@ vec_all_ne (vector signed short a1, vector signed short a2) } inline int -vec_all_ne (vector unsigned short a1, vector signed short a2) +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); } @@ -5462,7 +6951,25 @@ vec_all_ne (vector unsigned short a1, vector unsigned short a2) } inline int -vec_all_ne (vector signed int a1, vector unsigned int a2) +vec_all_ne (vector bool 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 bool 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 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 int a1, vector bool int a2) { return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2); } @@ -5474,7 +6981,7 @@ vec_all_ne (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 unsigned int a1, vector bool int a2) { return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2); } @@ -5486,6 +6993,24 @@ vec_all_ne (vector unsigned int a1, vector unsigned int a2) } inline int +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 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 bool int a1, vector signed int a2) +{ + return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2); +} + +inline int vec_all_ne (vector float a1, vector float a2) { return __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, 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,7 +7701,7 @@ 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); } @@ -5966,7 +7713,25 @@ vec_any_ne (vector unsigned char a1, vector unsigned char a2) } inline int -vec_any_ne (vector signed short a1, vector unsigned short a2) +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); } @@ -5978,7 +7743,7 @@ vec_any_ne (vector signed short a1, vector signed short a2) } inline int -vec_any_ne (vector unsigned short a1, vector signed short a2) +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); } @@ -5990,7 +7755,31 @@ vec_any_ne (vector unsigned short a1, vector unsigned short a2) } inline int -vec_any_ne (vector signed int a1, vector unsigned int a2) +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_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2); +} + +inline int +vec_any_ne (vector bool 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 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 int a1, vector bool int a2) { return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2); } @@ -6002,7 +7791,7 @@ vec_any_ne (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 unsigned int a1, vector bool int a2) { return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2); } @@ -6014,6 +7803,24 @@ vec_any_ne (vector unsigned int a1, vector unsigned int a2) } inline int +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 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 bool int a1, vector signed int a2) +{ + return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2); +} + +inline int vec_any_ne (vector float a1, vector float a2) { return __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, 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. -}; +} /* extern "C++" */ -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; -}; - -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)), \ +__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 unsigned int, (a1), vector float, (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 float, (a2)), \ - ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector signed int, (a2)), \ - ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector 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 (__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 signed char, *(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 unsigned 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 signed short, *(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 unsigned 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 signed int, *(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 (vector float, *(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 (unsigned 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 (signed char, *(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 (unsigned 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 (signed short, *(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 (unsigned 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 (signed int, *(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 (unsigned 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 (signed long, *(a1)), \ +__ch (__tern_args_eq (const unsigned long, *(a1), int, (a2), const int, (a3)), \ __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (float, *(a1)), \ +__ch (__tern_args_eq (const long, *(a1), int, (a2), const int, (a3)), \ __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ - __altivec_link_error_invalid_argument ())))))))))))))))) +__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 (__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 signed char, *(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 unsigned 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 signed short, *(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 unsigned 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 signed int, *(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 (vector float, *(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 (unsigned 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 (signed char, *(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 (unsigned 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 (signed short, *(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 (unsigned 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 (signed int, *(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 (unsigned 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 (signed long, *(a1)), \ +__ch (__tern_args_eq (const unsigned long, *(a1), int, (a2), const int, (a3)), \ __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (float, *(a1)), \ +__ch (__tern_args_eq (const long, *(a1), int, (a2), const int, (a3)), \ __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ - __altivec_link_error_invalid_argument ())))))))))))))))) +__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 (__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 signed char, *(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 unsigned 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 signed short, *(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 unsigned 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 signed int, *(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 (vector float, *(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 (unsigned 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 (signed char, *(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 (unsigned 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 (signed short, *(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 (unsigned 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 (signed int, *(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 (unsigned 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 (signed long, *(a1)), \ +__ch (__tern_args_eq (const unsigned long, *(a1), int, (a2), const int, (a3)), \ __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (float, *(a1)), \ +__ch (__tern_args_eq (const long, *(a1), int, (a2), const int, (a3)), \ __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ - __altivec_link_error_invalid_argument ())))))))))))))))) +__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 (__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 signed char, *(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 unsigned 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 signed short, *(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 unsigned 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 signed int, *(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 (vector float, *(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 (unsigned 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 (signed char, *(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 (unsigned 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 (signed short, *(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 (unsigned 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 (signed int, *(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 (unsigned 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 (signed long, *(a1)), \ +__ch (__tern_args_eq (const unsigned long, *(a1), int, (a2), const int, (a3)), \ __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (float, *(a1)), \ +__ch (__tern_args_eq (const long, *(a1), int, (a2), const int, (a3)), \ __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ - __altivec_link_error_invalid_argument ())))))))))))))))) +__ch (__tern_args_eq (const float, *(a1), int, (a2), const int, (a3)), \ + __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ + __builtin_altivec_compiletime_error ("vec_dstt"))))))))))))))))))))) -#define vec_expte(a1) __builtin_altivec_vexptefp ((a1)) +#define vec_expte(a1) \ +__ch (__un_args_eq (vector float, (a1)), \ + ((vector float) __builtin_altivec_vexptefp ((vector float) (a1))), \ + __builtin_altivec_compiletime_error ("vec_expte")) -#define vec_floor(a1) __builtin_altivec_vrfim (a1) +#define vec_floor(a1) \ +__ch (__un_args_eq (vector float, (a1)), \ + ((vector float) __builtin_altivec_vrfim ((vector float) (a1))), \ + __builtin_altivec_compiletime_error ("vec_floor")) #define vec_ld(a, b) \ -__ch (__un_args_eq (vector unsigned char, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector unsigned char, *(b)), \ ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (unsigned char, *(b)), \ +__ch (__bin_args_eq (int, (a), const unsigned char, *(b)), \ ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (vector signed char, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector signed char, *(b)), \ ((vector signed char) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (signed char, *(b)), \ +__ch (__bin_args_eq (int, (a), const signed char, *(b)), \ ((vector signed char) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (vector unsigned short, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector bool char, *(b)), \ + ((vector bool char) __builtin_altivec_lvx ((a), (b))), \ +__ch (__bin_args_eq (int, (a), const vector unsigned short, *(b)), \ ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (unsigned short, *(b)), \ +__ch (__bin_args_eq (int, (a), const unsigned short, *(b)), \ ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (vector signed short, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector signed short, *(b)), \ ((vector signed short) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (signed short, *(b)), \ +__ch (__bin_args_eq (int, (a), const short, *(b)), \ ((vector signed short) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (vector unsigned int, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector bool short, *(b)), \ + ((vector bool short) __builtin_altivec_lvx ((a), (b))), \ +__ch (__bin_args_eq (int, (a), const vector pixel, *(b)), \ + ((vector pixel) __builtin_altivec_lvx ((a), (b))), \ +__ch (__bin_args_eq (int, (a), const vector unsigned int, *(b)), \ ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (unsigned int, *(b)), \ +__ch (__bin_args_eq (int, (a), const unsigned int, *(b)), \ ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (unsigned long, *(b)), \ +__ch (__bin_args_eq (int, (a), const unsigned long, *(b)), \ ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (vector signed int, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector signed int, *(b)), \ ((vector signed int) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (signed int, *(b)), \ +__ch (__bin_args_eq (int, (a), const int, *(b)), \ ((vector signed int) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (signed long, *(b)), \ +__ch (__bin_args_eq (int, (a), const long, *(b)), \ ((vector signed int) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (vector float, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector bool int, *(b)), \ + ((vector bool int) __builtin_altivec_lvx ((a), (b))), \ +__ch (__bin_args_eq (int, (a), const vector float, *(b)), \ ((vector float) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (float, *(b)), \ +__ch (__bin_args_eq (int, (a), const float, *(b)), \ ((vector float) __builtin_altivec_lvx ((a), (b))), \ -__altivec_link_error_invalid_argument ())))))))))))))))) +__builtin_altivec_compiletime_error ("vec_ld"))))))))))))))))))))) #define vec_lde(a, b) \ -__ch (__un_args_eq (unsigned char, *(b)), \ +__ch (__bin_args_eq (int, (a), const unsigned char, *(b)), \ ((vector unsigned char) __builtin_altivec_lvebx ((a), (b))), \ -__ch (__un_args_eq (signed char, *(b)), \ +__ch (__bin_args_eq (int, (a), const signed char, *(b)), \ ((vector signed char) __builtin_altivec_lvebx ((a), (b))), \ -__ch (__un_args_eq (unsigned short, *(b)), \ +__ch (__bin_args_eq (int, (a), const unsigned short, *(b)), \ ((vector unsigned short) __builtin_altivec_lvehx ((a), (b))), \ -__ch (__un_args_eq (signed short, *(b)), \ +__ch (__bin_args_eq (int, (a), const short, *(b)), \ ((vector signed short) __builtin_altivec_lvehx ((a), (b))), \ -__ch (__un_args_eq (unsigned long, *(b)), \ +__ch (__bin_args_eq (int, (a), const unsigned long, *(b)), \ ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \ -__ch (__un_args_eq (signed long, *(b)), \ +__ch (__bin_args_eq (int, (a), const long, *(b)), \ ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \ -__ch (__un_args_eq (unsigned int, *(b)), \ +__ch (__bin_args_eq (int, (a), const unsigned int, *(b)), \ ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \ -__ch (__un_args_eq (signed int, *(b)), \ +__ch (__bin_args_eq (int, (a), const int, *(b)), \ ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \ -__ch (__un_args_eq (float, *(b)), \ +__ch (__bin_args_eq (int, (a), const float, *(b)), \ ((vector float) __builtin_altivec_lvewx ((a), (b))), \ -__altivec_link_error_invalid_argument ()))))))))) +__builtin_altivec_compiletime_error ("vec_lde")))))))))) #define vec_lvewx(a, b) \ __ch (__un_args_eq (unsigned int, *(b)), \ @@ -6788,143 +8670,172 @@ __ch (__un_args_eq (signed long, *(b)), \ ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \ __ch (__un_args_eq (float, *(b)), \ ((vector float) __builtin_altivec_lvewx ((a), (b))), \ -__altivec_link_error_invalid_argument ()))))) +__builtin_altivec_compiletime_error ("vec_lvewx")))))) #define vec_lvehx(a, b) \ __ch (__un_args_eq (unsigned short, *(b)), \ ((vector unsigned short) __builtin_altivec_lvehx ((a), (b))), \ __ch (__un_args_eq (signed short, *(b)), \ ((vector signed short) __builtin_altivec_lvehx ((a), (b))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_lvehx"))) #define vec_lvebx(a, b) \ __ch (__un_args_eq (unsigned char, *(b)), \ ((vector unsigned char) __builtin_altivec_lvebx ((a), (b))), \ __ch (__un_args_eq (signed char, *(b)), \ ((vector signed char) __builtin_altivec_lvebx ((a), (b))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_lvebx"))) #define vec_ldl(a, b) \ -__ch (__un_args_eq (vector unsigned char, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector unsigned char, *(b)), \ ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (unsigned char, *(b)), \ +__ch (__bin_args_eq (int, (a), const unsigned char, *(b)), \ ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (vector signed char, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector signed char, *(b)), \ ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (signed char, *(b)), \ +__ch (__bin_args_eq (int, (a), const signed char, *(b)), \ ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (vector unsigned short, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector bool char, *(b)), \ + ((vector bool char) __builtin_altivec_lvxl ((a), (b))), \ +__ch (__bin_args_eq (int, (a), const vector unsigned short, *(b)), \ ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (unsigned short, *(b)), \ +__ch (__bin_args_eq (int, (a), const unsigned short, *(b)), \ ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (vector signed short, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector signed short, *(b)), \ ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (signed short, *(b)), \ +__ch (__bin_args_eq (int, (a), const short, *(b)), \ ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (vector unsigned int, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector bool short, *(b)), \ + ((vector bool short) __builtin_altivec_lvxl ((a), (b))), \ +__ch (__bin_args_eq (int, (a), const vector pixel, *(b)), \ + ((vector pixel) __builtin_altivec_lvxl ((a), (b))), \ +__ch (__bin_args_eq (int, (a), const vector unsigned int, *(b)), \ ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (unsigned int, *(b)), \ +__ch (__bin_args_eq (int, (a), const unsigned int, *(b)), \ ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (unsigned long, *(b)), \ +__ch (__bin_args_eq (int, (a), const unsigned long, *(b)), \ ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (vector signed int, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector signed int, *(b)), \ ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (signed int, *(b)), \ +__ch (__bin_args_eq (int, (a), const int, *(b)), \ ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (signed long, *(b)), \ +__ch (__bin_args_eq (int, (a), const long, *(b)), \ ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (vector float, *(b)), \ +__ch (__bin_args_eq (int, (a), const vector bool int, *(b)), \ + ((vector bool int) __builtin_altivec_lvxl ((a), (b))), \ +__ch (__bin_args_eq (int, (a), const vector float, *(b)), \ ((vector float) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (float, *(b)), \ +__ch (__bin_args_eq (int, (a), const float, *(b)), \ ((vector float) __builtin_altivec_lvxl ((a), (b))), \ -__altivec_link_error_invalid_argument ())))))))))))))))) +__builtin_altivec_compiletime_error ("vec_ldl"))))))))))))))))))))) -#define vec_loge(a1) __builtin_altivec_vlogefp ((a1)) +#define vec_loge(a1) \ +__ch (__un_args_eq (vector float, (a1)), \ + ((vector float) __builtin_altivec_vlogefp ((vector float) (a1))), \ + __builtin_altivec_compiletime_error ("vec_loge")) #define vec_lvsl(a1, a2) \ -__ch (__un_args_eq (unsigned char, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile unsigned char, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed char, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile signed char, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (unsigned short, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile unsigned short, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed short, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile signed short, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (unsigned int, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile unsigned int, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed int, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile signed int, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (unsigned long, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile unsigned long, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed long, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile signed long, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (float, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile float, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__altivec_link_error_invalid_argument ()))))))))) +__builtin_altivec_compiletime_error ("vec_lvsl")))))))))) #define vec_lvsr(a1, a2) \ -__ch (__un_args_eq (unsigned char, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile unsigned char, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed char, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile signed char, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (unsigned short, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile unsigned short, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed short, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile signed short, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (unsigned int, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile unsigned int, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed int, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile signed int, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (unsigned long, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile unsigned long, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed long, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile signed long, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (float, *(a2)), \ +__ch (__bin_args_eq (int, (a1), const volatile float, *(a2)), \ ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__altivec_link_error_invalid_argument ()))))))))) +__builtin_altivec_compiletime_error ("vec_lvsr")))))))))) -#define vec_madd(a1, a2, a3) (__builtin_altivec_vmaddfp ((a1), (a2), (a3))) +#define vec_madd(a1, a2, a3) \ +__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector float, (a3)), \ + ((vector float) __builtin_altivec_vmaddfp ((a1), (a2), (a3))), \ +__builtin_altivec_compiletime_error ("vec_madd")) -#define vec_madds(a1, a2, a3) __builtin_altivec_vmhaddshs ((a1), (a2), (a3)) +#define vec_madds(a1, a2, a3) \ +__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \ + ((vector signed short) __builtin_altivec_vmhaddshs ((a1), (a2), (a3))), \ +__builtin_altivec_compiletime_error ("vec_madds")) #define vec_max(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + ((vector signed char) __builtin_altivec_vmaxsb ((vector signed char) (a1), (vector signed char) (a2))), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + ((vector signed char) __builtin_altivec_vmaxsb ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vmaxsb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + ((vector signed short) __builtin_altivec_vmaxsh ((vector signed short) (a1), (vector signed short) (a2))), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + ((vector signed short) __builtin_altivec_vmaxsh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) __builtin_altivec_vmaxsh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + ((vector signed int) __builtin_altivec_vmaxsw ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + ((vector signed int) __builtin_altivec_vmaxsw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vmaxsw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ ((vector float) __builtin_altivec_vmaxfp ((vector float) (a1), (vector float) (a2))), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_max")))))))))))))))))))) #define vec_vmaxfp(a1, a2) \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ ((vector float) __builtin_altivec_vmaxfp ((vector float) (a1), (vector float) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmaxfp")) #define vec_vmaxsw(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vmaxsw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmaxsw")) #define vec_vmaxuw(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ @@ -6933,12 +8844,12 @@ __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()))) +__builtin_altivec_compiletime_error ("vec_vmaxuw")))) #define vec_vmaxsh(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) __builtin_altivec_vmaxsh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmaxsh")) #define vec_vmaxuh(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ @@ -6947,12 +8858,12 @@ __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()))) +__builtin_altivec_compiletime_error ("vec_vmaxuh")))) #define vec_vmaxsb(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vmaxsb ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmaxsb")) #define vec_vmaxub(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ @@ -6961,24 +8872,32 @@ __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ()))) +__builtin_altivec_compiletime_error ("vec_vmaxub")))) #define vec_mergeh(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \ + ((vector bool char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \ + ((vector bool short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \ +__ch (__bin_args_eq (vector pixel, (a1), vector pixel, (a2)), \ + ((vector pixel) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ ((vector float) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ()))))))) +__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \ + ((vector bool int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \ + __builtin_altivec_compiletime_error ("vec_mergeh"))))))))))) #define vec_vmrghw(a1, a2) \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ @@ -6987,38 +8906,46 @@ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()))) +__builtin_altivec_compiletime_error ("vec_vmrghw")))) #define vec_vmrghh(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vmrghh"))) #define vec_vmrghb(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vmrghb"))) #define vec_mergel(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \ + ((vector bool char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \ + ((vector bool short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \ +__ch (__bin_args_eq (vector pixel, (a1), vector pixel, (a2)), \ + ((vector pixel) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ ((vector float) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ()))))))) +__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \ + ((vector bool int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ + __builtin_altivec_compiletime_error ("vec_mergel")))))))) #define vec_vmrglw(a1, a2) \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ @@ -7027,62 +8954,74 @@ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()))) +__builtin_altivec_compiletime_error ("vec_vmrglw")))) #define vec_vmrglh(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vmrglh"))) #define vec_vmrglb(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vmrglb"))) #define vec_mfvscr() (((vector unsigned short) __builtin_altivec_mfvscr ())) #define vec_min(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + ((vector signed char) __builtin_altivec_vminsb ((vector signed char) (a1), (vector signed char) (a2))), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + ((vector signed char) __builtin_altivec_vminsb ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vminsb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + ((vector signed short) __builtin_altivec_vminsh ((vector signed short) (a1), (vector signed short) (a2))), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + ((vector signed short) __builtin_altivec_vminsh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) __builtin_altivec_vminsh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + ((vector signed int) __builtin_altivec_vminsw ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + ((vector signed int) __builtin_altivec_vminsw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vminsw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ ((vector float) __builtin_altivec_vminfp ((vector float) (a1), (vector float) (a2))), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_min")))))))))))))))))))) #define vec_vminfp(a1, a2) \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ ((vector float) __builtin_altivec_vminfp ((vector float) (a1), (vector float) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vminfp")) #define vec_vminsw(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vminsw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vminsw")) #define vec_vminuw(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ @@ -7091,12 +9030,12 @@ __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()))) +__builtin_altivec_compiletime_error ("vec_vminuw")))) #define vec_vminsh(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) __builtin_altivec_vminsh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vminsh")) #define vec_vminuh(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ @@ -7105,12 +9044,12 @@ __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()))) +__builtin_altivec_compiletime_error ("vec_vminuh")))) #define vec_vminsb(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vminsb ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_abs")) #define vec_vminub(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ @@ -7119,7 +9058,7 @@ __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ()))) +__builtin_altivec_compiletime_error ("vec_vminub")))) #define vec_mladd(a1, a2, a3) \ __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \ @@ -7130,9 +9069,12 @@ __ch (__tern_args_eq (vector unsigned short, (a1), vector signed short, (a2), ve ((vector signed short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \ __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \ ((vector unsigned short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \ - __altivec_link_error_invalid_argument ())))) + __builtin_altivec_compiletime_error ("vec_mladd"))))) -#define vec_mradds(a1, a2, a3) __builtin_altivec_vmhraddshs ((a1), (a2), (a3)) +#define vec_mradds(a1, a2, a3) \ +__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \ + ((vector signed short) __builtin_altivec_vmhraddshs ((a1), (a2), (a3))), \ +__builtin_altivec_compiletime_error ("vec_mradds")) #define vec_msum(a1, a2, a3) \ __ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned int, (a3)), \ @@ -7143,59 +9085,67 @@ __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), ((vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \ __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \ ((vector signed int) __builtin_altivec_vmsumshm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \ - __altivec_link_error_invalid_argument ())))) + __builtin_altivec_compiletime_error ("vec_msum"))))) #define vec_vmsumshm(a1, a2, a3) \ __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \ ((vector signed int) __builtin_altivec_vmsumshm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmsumshm")) #define vec_vmsumuhm(a1, a2, a3) \ __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \ ((vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmsumuhm")) #define vec_vmsummbm(a1, a2, a3) \ __ch (__tern_args_eq (vector signed char, (a1), vector unsigned char, (a2), vector signed int, (a3)), \ ((vector signed int) __builtin_altivec_vmsummbm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_abs")) #define vec_vmsumubm(a1, a2, a3) \ __ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned int, (a3)), \ ((vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmsummbm")) #define vec_msums(a1, a2, a3) \ __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \ ((vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \ __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \ ((vector signed int) __builtin_altivec_vmsumshs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \ - __altivec_link_error_invalid_argument ())) + __builtin_altivec_compiletime_error ("vec_msums"))) #define vec_vmsumshs(a1, a2, a3) \ __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \ ((vector signed int) __builtin_altivec_vmsumshs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmsumshs")) #define vec_vmsumuhs(a1, a2, a3) \ __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \ ((vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmsumuhs")) #define vec_mtvscr(a1) \ __ch (__un_args_eq (vector signed int, (a1)), \ __builtin_altivec_mtvscr ((vector signed int) (a1)), \ __ch (__un_args_eq (vector unsigned int, (a1)), \ __builtin_altivec_mtvscr ((vector signed int) (a1)), \ +__ch (__un_args_eq (vector bool int, (a1)), \ + __builtin_altivec_mtvscr ((vector signed int) (a1)), \ __ch (__un_args_eq (vector signed short, (a1)), \ __builtin_altivec_mtvscr ((vector signed int) (a1)), \ __ch (__un_args_eq (vector unsigned short, (a1)), \ __builtin_altivec_mtvscr ((vector signed int) (a1)), \ +__ch (__un_args_eq (vector bool short, (a1)), \ + __builtin_altivec_mtvscr ((vector signed int) (a1)), \ +__ch (__un_args_eq (vector pixel, (a1)), \ + __builtin_altivec_mtvscr ((vector signed int) (a1)), \ __ch (__un_args_eq (vector signed char, (a1)), \ __builtin_altivec_mtvscr ((vector signed int) (a1)), \ __ch (__un_args_eq (vector unsigned char, (a1)), \ __builtin_altivec_mtvscr ((vector signed int) (a1)), \ - __altivec_link_error_invalid_argument ())))))) +__ch (__un_args_eq (vector bool char, (a1)), \ + __builtin_altivec_mtvscr ((vector signed int) (a1)), \ + __builtin_altivec_compiletime_error ("vec_mtvscr"))))))))))) #define vec_mule(a1, a2) \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ @@ -7206,27 +9156,27 @@ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), ((vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed int) __builtin_altivec_vmulesh ((vector signed short) (a1), (vector signed short) (a2))), \ - __altivec_link_error_invalid_argument ())))) + __builtin_altivec_compiletime_error ("vec_mule"))))) #define vec_vmulesh(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed int) __builtin_altivec_vmulesh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmulesh")) #define vec_vmuleuh(a1, a2) \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmuleuh")) #define vec_vmulesb(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed short) __builtin_altivec_vmulesb ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmulesb")) #define vec_vmuleub(a1, a2) \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmuleub")) #define vec_mulo(a1, a2) \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ @@ -7237,32 +9187,32 @@ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), ((vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed int) __builtin_altivec_vmulosh ((vector signed short) (a1), (vector signed short) (a2))), \ - __altivec_link_error_invalid_argument ())))) + __builtin_altivec_compiletime_error ("vec_mulo"))))) #define vec_vmulosh(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed int) __builtin_altivec_vmulosh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmulosh")) #define vec_vmulouh(a1, a2) \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmulouh")) #define vec_vmulosb(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed short) __builtin_altivec_vmulosb ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmulosb")) #define vec_vmuloub(a1, a2) \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vmuloub")) #define vec_nmsub(a1, a2, a3) \ __ch (__tern_args_eq (vector float, ((a1)), vector float, ((a2)) , vector float, ((a3))), \ ((vector float) __builtin_altivec_vnmsubfp ((vector float) ((a1)), (vector float) ((a2)), (vector float)((a3)))), \ - __altivec_link_error_invalid_argument ()) + __builtin_altivec_compiletime_error ("vec_nmsub")) #define vec_nor(a1, a2) \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ @@ -7271,78 +9221,106 @@ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \ + ((vector bool int) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \ + ((vector bool short) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ()))))))) +__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \ + ((vector bool char) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ + __builtin_altivec_compiletime_error ("vec_nor"))))))))))) #define vec_or(a1, a2) \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector float, (a1), vector bool int, (a2)), \ ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector float, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector float, (a2)), \ ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \ + ((vector bool int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + ((vector signed int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + ((vector signed int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \ + ((vector bool short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + ((vector signed short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + ((vector signed short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \ + ((vector bool char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + ((vector signed char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + ((vector signed char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ()))))))))))))))) + __builtin_altivec_compiletime_error ("vec_or"))))))))))))))))))))))))) #define vec_pack(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \ + ((vector bool char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))) +__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \ + ((vector bool short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \ + __builtin_altivec_compiletime_error ("vec_pack"))))))) #define vec_vpkuwum(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vpkuwum"))) #define vec_vpkuhum(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vpkuhum"))) #define vec_packpx(a1, a2) \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - (vector unsigned short) __builtin_altivec_vpkpx ((vector signed int) (a1), (vector signed int) (a2)), \ -__altivec_link_error_invalid_argument ()) + (vector pixel) __builtin_altivec_vpkpx ((vector signed int) (a1), (vector signed int) (a2)), \ +__builtin_altivec_compiletime_error ("vec_packpx")) #define vec_packs(a1, a2) \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ @@ -7353,27 +9331,27 @@ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed short) __builtin_altivec_vpkswss ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))) + __builtin_altivec_compiletime_error ("vec_packs"))))) #define vec_vpkswss(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed short) __builtin_altivec_vpkswss ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vpkswss")) #define vec_vpkuwus(a1, a2) \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vpkuwus")) #define vec_vpkshss(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed char) __builtin_altivec_vpkshss ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vpkshss")) #define vec_vpkuhus(a1, a2) \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vpkuhus")) #define vec_packsu(a1, a2) \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ @@ -7384,17 +9362,17 @@ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))) + __builtin_altivec_compiletime_error ("vec_packsu"))))) #define vec_vpkswus(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vpkswus")) #define vec_vpkshus(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vpkshus")) #define vec_perm(a1, a2, a3) \ __ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector unsigned char, (a3)), \ @@ -7403,17 +9381,28 @@ __ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector u ((vector signed int) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ __ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector unsigned char, (a3)), \ ((vector unsigned int) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ +__ch (__tern_args_eq (vector bool int, (a1), vector bool int, (a2), vector unsigned char, (a3)), \ + ((vector bool int) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector unsigned char, (a3)), \ ((vector signed short) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned char, (a3)), \ ((vector unsigned short) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ +__ch (__tern_args_eq (vector bool short, (a1), vector bool short, (a2), vector unsigned char, (a3)), \ + ((vector bool short) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ +__ch (__tern_args_eq (vector pixel, (a1), vector pixel, (a2), vector unsigned char, (a3)), \ + ((vector pixel) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ __ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector unsigned char, (a3)), \ ((vector signed char) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ __ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned char, (a3)), \ ((vector unsigned char) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ - __altivec_link_error_invalid_argument ()))))))) +__ch (__tern_args_eq (vector bool char, (a1), vector bool char, (a2), vector unsigned char, (a3)), \ + ((vector bool char) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ + __builtin_altivec_compiletime_error ("vec_perm")))))))))))) -#define vec_re(a1) __builtin_altivec_vrefp ((a1)) +#define vec_re(a1) \ +__ch (__un_args_eq (vector float, (a1)), \ + ((vector float) __builtin_altivec_vrefp ((vector float) (a1))), \ +__builtin_altivec_compiletime_error ("vec_re")) #define vec_rl(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ @@ -7428,63 +9417,81 @@ __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ ((vector signed int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))) + __builtin_altivec_compiletime_error ("vec_rl"))))))) #define vec_vrlw(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ ((vector signed int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vrlw"))) #define vec_vrlh(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ ((vector signed short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vrlh"))) #define vec_vrlb(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ ((vector signed char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vrlb"))) -#define vec_round(a1) __builtin_altivec_vrfin ((a1)) +#define vec_round(a1) \ +__ch (__un_args_eq (vector float, (a1)), \ + ((vector float) __builtin_altivec_vrfin ((vector float) (a1))), \ +__builtin_altivec_compiletime_error ("vec_round")) -#define vec_rsqrte(a1) __builtin_altivec_vrsqrtefp ((a1)) +#define vec_rsqrte(a1) \ +__ch (__un_args_eq (vector float, (a1)), \ + ((vector float) __builtin_altivec_vrsqrtefp ((vector float) (a1))), \ +__builtin_altivec_compiletime_error ("vec_rsqrte")) #define vec_sel(a1, a2, a3) \ -__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector signed int, (a3)), \ +__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector bool int, (a3)), \ ((vector float) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ __ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector unsigned int, (a3)), \ ((vector float) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector signed int, (a3)), \ +__ch (__tern_args_eq (vector bool int, (a1), vector bool int, (a2), vector bool int, (a3)), \ + ((vector bool int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ +__ch (__tern_args_eq (vector bool int, (a1), vector bool int, (a2), vector unsigned int, (a3)), \ + ((vector bool int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ +__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector bool int, (a3)), \ ((vector signed int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ __ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector unsigned int, (a3)), \ ((vector signed int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector signed int, (a3)), \ +__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector bool int, (a3)), \ ((vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ __ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector unsigned int, (a3)), \ ((vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \ +__ch (__tern_args_eq (vector bool short, (a1), vector bool short, (a2), vector bool short, (a3)), \ + ((vector bool short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ +__ch (__tern_args_eq (vector bool short, (a1), vector bool short, (a2), vector unsigned short, (a3)), \ + ((vector bool short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ +__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector bool short, (a3)), \ ((vector signed short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector unsigned short, (a3)), \ ((vector signed short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector signed short, (a3)), \ +__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector bool short, (a3)), \ ((vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \ ((vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector signed char, (a3)), \ +__ch (__tern_args_eq (vector bool char, (a1), vector bool char, (a2), vector bool char, (a3)), \ + ((vector bool char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ +__ch (__tern_args_eq (vector bool char, (a1), vector bool char, (a2), vector unsigned char, (a3)), \ + ((vector bool char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ +__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector bool char, (a3)), \ ((vector signed char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ __ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector unsigned char, (a3)), \ ((vector signed char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector signed char, (a3)), \ +__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector bool char, (a3)), \ ((vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ __ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned char, (a3)), \ ((vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ - __altivec_link_error_invalid_argument ())))))))))))))) + __builtin_altivec_compiletime_error ("vec_sel"))))))))))))))))))))) #define vec_sl(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ @@ -7499,59 +9506,47 @@ __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ ((vector signed int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))) + __builtin_altivec_compiletime_error ("vec_sl"))))))) #define vec_vslw(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ ((vector signed int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vslw"))) #define vec_vslh(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ ((vector signed short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vslh"))) #define vec_vslb(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ ((vector signed char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vslb"))) #define vec_sld(a1, a2, a3) \ __ch (__tern_args_eq (vector float, (a1), vector float, (a2), int, (a3)), \ - ((vector float) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ -__ch (__tern_args_eq (vector float, (a1), vector float, (a2), unsigned int, (a3)), \ - ((vector float) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ + ((vector float) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \ __ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), int, (a3)), \ - ((vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ -__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), unsigned int, (a3)), \ - ((vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ + ((vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \ __ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), int, (a3)), \ - ((vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ -__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), unsigned int, (a3)), \ - ((vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ + ((vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \ __ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), int, (a3)), \ - ((vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ -__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), unsigned int, (a3)), \ - ((vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ + ((vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \ __ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), int, (a3)), \ - ((vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ -__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), unsigned int, (a3)), \ - ((vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ + ((vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \ +__ch (__tern_args_eq (vector pixel, (a1), vector pixel, (a2), int, (a3)), \ + ((vector pixel) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \ __ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), int, (a3)), \ - ((vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ -__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), unsigned int, (a3)), \ - ((vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ + ((vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \ __ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), int, (a3)), \ - ((vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ -__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), unsigned int, (a3)), \ - ((vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \ - __altivec_link_error_invalid_argument ())))))))))))))) + ((vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const int) (a3))), \ + __builtin_altivec_compiletime_error ("vec_sld"))))))))) #define vec_sll(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ @@ -7566,6 +9561,12 @@ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned short, (a2)), \ ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \ ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ + ((vector bool int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned short, (a2)), \ + ((vector bool int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned char, (a2)), \ + ((vector bool int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector unsigned int, (a2)), \ ((vector signed short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ @@ -7578,6 +9579,18 @@ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \ ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned int, (a2)), \ + ((vector bool short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ + ((vector bool short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned char, (a2)), \ + ((vector bool short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector pixel, (a1), vector unsigned int, (a2)), \ + ((vector pixel) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector pixel, (a1), vector unsigned short, (a2)), \ + ((vector pixel) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector pixel, (a1), vector unsigned char, (a2)), \ + ((vector pixel) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned int, (a2)), \ ((vector signed char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned short, (a2)), \ @@ -7590,7 +9603,13 @@ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned short, (a2)), \ ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))))))))))))))) +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned int, (a2)), \ + ((vector bool char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned short, (a2)), \ + ((vector bool char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ + ((vector bool char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ + __builtin_altivec_compiletime_error ("vec_sll"))))))))))))))))))))))))))))))) #define vec_slo(a1, a2) \ __ch (__bin_args_eq (vector float, (a1), vector signed char, (a2)), \ @@ -7613,6 +9632,10 @@ __ch (__bin_args_eq (vector unsigned short, (a1), vector signed char, (a2)), \ ((vector unsigned short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \ ((vector unsigned short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector pixel, (a1), vector signed char, (a2)), \ + ((vector pixel) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector pixel, (a1), vector unsigned char, (a2)), \ + ((vector pixel) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ @@ -7621,87 +9644,99 @@ __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ ((vector unsigned char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))))))))))) + __builtin_altivec_compiletime_error ("vec_slo"))))))))))))))))) #define vec_splat(a1, a2) \ __ch (__bin_args_eq (vector signed char, ((a1)), int, ((a2))), \ - ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \ -__ch (__bin_args_eq (vector signed char, ((a1)), unsigned int, ((a2))), \ - ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \ + ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector unsigned char, ((a1)), int, ((a2))), \ - ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned char, ((a1)), unsigned int, ((a2))), \ - ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \ + ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \ +__ch (__bin_args_eq (vector bool char, ((a1)), int, ((a2))), \ + ((vector bool char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector signed short, ((a1)), int, ((a2))), \ - ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \ -__ch (__bin_args_eq (vector signed short, ((a1)), unsigned int, ((a2))), \ - ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \ + ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector unsigned short, ((a1)), int, ((a2))), \ - ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned short, ((a1)), unsigned int, ((a2))), \ - ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \ + ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \ +__ch (__bin_args_eq (vector bool short, ((a1)), int, ((a2))), \ + ((vector bool short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \ +__ch (__bin_args_eq (vector pixel, ((a1)), int, ((a2))), \ + ((vector pixel) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector float, ((a1)), int, ((a2))), \ - ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \ -__ch (__bin_args_eq (vector float, ((a1)), unsigned int, ((a2))), \ - ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \ + ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector signed int, ((a1)), int, ((a2))), \ - ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \ -__ch (__bin_args_eq (vector signed int, ((a1)), unsigned int, ((a2))), \ - ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \ + ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector unsigned int, ((a1)), int, ((a2))), \ - ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned int, ((a1)), unsigned int, ((a2))), \ - ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \ - __altivec_link_error_invalid_argument ())))))))))))))) + ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const int) ((a2)))), \ +__ch (__bin_args_eq (vector bool int, ((a1)), int, ((a2))), \ + ((vector bool int) __builtin_altivec_vspltw ((vector signed int) (a1), (const int) ((a2)))), \ + __builtin_altivec_compiletime_error ("vec_splat")))))))))))) #define vec_vspltw(a1, a2) \ __ch (__bin_args_eq (vector float, ((a1)), int, ((a2))), \ - ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \ + ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector float, ((a1)), unsigned int, ((a2))), \ - ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \ + ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector signed int, ((a1)), int, ((a2))), \ - ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \ + ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector signed int, ((a1)), unsigned int, ((a2))), \ - ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \ + ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector unsigned int, ((a1)), int, ((a2))), \ - ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \ + ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const int) ((a2)))), \ __ch (__bin_args_eq (vector unsigned int, ((a1)), unsigned int, ((a2))), \ - ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \ -__altivec_link_error_invalid_argument ())))))) + ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const int) ((a2)))), \ +__builtin_altivec_compiletime_error ("vec_vspltw"))))))) #define vec_vsplth(a1, a2) \ __ch (__bin_args_eq (vector signed short, ((a1)), int, ((a2))), \ - ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \ + ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector signed short, ((a1)), unsigned int, ((a2))), \ - ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \ + ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector unsigned short, ((a1)), int, ((a2))), \ - ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \ + ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector unsigned short, ((a1)), unsigned int, ((a2))), \ - ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \ -__altivec_link_error_invalid_argument ())))) + ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const int) ((a2)))), \ +__builtin_altivec_compiletime_error ("vec_vsplth"))))) #define vec_vspltb(a1, a2) \ __ch (__bin_args_eq (vector signed char, ((a1)), int, ((a2))), \ - ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \ + ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector signed char, ((a1)), unsigned int, ((a2))), \ - ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \ + ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector unsigned char, ((a1)), int, ((a2))), \ - ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \ + ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \ __ch (__bin_args_eq (vector unsigned char, ((a1)), unsigned int, ((a2))), \ - ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \ -__altivec_link_error_invalid_argument ())))) - -#define vec_splat_s8(a1) __builtin_altivec_vspltisb ((a1)) - -#define vec_splat_s16(a1) __builtin_altivec_vspltish ((a1)) - -#define vec_splat_s32(a1) __builtin_altivec_vspltisw ((a1)) - -#define vec_splat_u8(a1) ((vector unsigned char) __builtin_altivec_vspltisb ((a1))) - -#define vec_splat_u16(a1) ((vector unsigned short) __builtin_altivec_vspltish ((a1))) - -#define vec_splat_u32(a1) ((vector unsigned int) __builtin_altivec_vspltisw ((a1))) + ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const int) ((a2)))), \ +__builtin_altivec_compiletime_error ("vec_vspltb"))))) + +#define vec_splat_s8(a1) \ +__ch (__un_args_eq (int, (a1)), \ + ((vector signed char) __builtin_altivec_vspltisb ((a1))), \ +__builtin_altivec_compiletime_error ("vec_splat_s8")) + +#define vec_splat_s16(a1) \ +__ch (__un_args_eq (int, (a1)), \ + ((vector signed short) __builtin_altivec_vspltish ((a1))), \ +__builtin_altivec_compiletime_error ("vec_splat_s16")) + +#define vec_splat_s32(a1) \ +__ch (__un_args_eq (int, (a1)), \ + ((vector signed int) __builtin_altivec_vspltisw ((a1))), \ +__builtin_altivec_compiletime_error ("vec_splat_s32")) + +#define vec_splat_u8(a1) \ +__ch (__un_args_eq (int, (a1)), \ + ((vector unsigned char) __builtin_altivec_vspltisb ((a1))), \ +__builtin_altivec_compiletime_error ("vec_splat_u8")) + +#define vec_splat_u16(a1) \ +__ch (__un_args_eq (int, (a1)), \ + ((vector unsigned short) __builtin_altivec_vspltish ((a1))), \ +__builtin_altivec_compiletime_error ("vec_splat_u16")) + +#define vec_splat_u32(a1) \ +__ch (__un_args_eq (int, (a1)), \ + ((vector unsigned int) __builtin_altivec_vspltisw ((a1))), \ +__builtin_altivec_compiletime_error ("vec_splat_u32")) #define vec_sr(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ @@ -7716,28 +9751,28 @@ __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ ((vector signed int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))) + __builtin_altivec_compiletime_error ("vec_sr"))))))) #define vec_vsrw(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ ((vector signed int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vsrw"))) #define vec_vsrh(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ ((vector signed short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vsrh"))) #define vec_vsrb(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ ((vector signed char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vsrb"))) #define vec_sra(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ @@ -7752,28 +9787,28 @@ __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ ((vector signed int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))) + __builtin_altivec_compiletime_error ("vec_sra"))))))) #define vec_vsraw(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ ((vector signed int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vsraw"))) #define vec_vsrah(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ ((vector signed short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vsrah"))) #define vec_vsrab(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ ((vector signed char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_vsrab"))) #define vec_srl(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ @@ -7788,6 +9823,12 @@ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned short, (a2)), \ ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \ ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ + ((vector bool int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned short, (a2)), \ + ((vector bool int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned char, (a2)), \ + ((vector bool int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector unsigned int, (a2)), \ ((vector signed short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ @@ -7800,6 +9841,18 @@ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \ ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned int, (a2)), \ + ((vector bool short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ + ((vector bool short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned char, (a2)), \ + ((vector bool short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector pixel, (a1), vector unsigned int, (a2)), \ + ((vector pixel) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector pixel, (a1), vector unsigned short, (a2)), \ + ((vector pixel) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector pixel, (a1), vector unsigned char, (a2)), \ + ((vector pixel) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned int, (a2)), \ ((vector signed char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned short, (a2)), \ @@ -7812,7 +9865,13 @@ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned short, (a2)), \ ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))))))))))))))) +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned int, (a2)), \ + ((vector bool char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned short, (a2)), \ + ((vector bool char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ + ((vector bool char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ + __builtin_altivec_compiletime_error ("vec_srl"))))))))))))))))))))))))))))))) #define vec_sro(a1, a2) \ __ch (__bin_args_eq (vector float, (a1), vector signed char, (a2)), \ @@ -7831,6 +9890,10 @@ __ch (__bin_args_eq (vector signed short, (a1), vector signed char, (a2)), \ ((vector signed short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \ ((vector signed short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector pixel, (a1), vector signed char, (a2)), \ + ((vector pixel) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector pixel, (a1), vector unsigned char, (a2)), \ + ((vector pixel) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector signed char, (a2)), \ ((vector unsigned short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \ @@ -7843,30 +9906,150 @@ __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))))))))))) + __builtin_altivec_compiletime_error ("vec_sro"))))))))))))))))) #define vec_st(a1, a2, a3) \ - __builtin_altivec_stvx ((vector signed int) (a1), (a2), (a3)) +__ch (__tern_args_eq (vector unsigned char, (a1), int, (a2), vector unsigned char, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector unsigned char, (a1), int, (a2), unsigned char, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector signed char, (a1), int, (a2), vector signed char, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector signed char, (a1), int, (a2), signed char, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool char, (a1), int, (a2), vector bool char, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool char, (a1), int, (a2), unsigned char, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool char, (a1), int, (a2), signed char, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector unsigned short, (a1), int, (a2), vector unsigned short, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector unsigned short, (a1), int, (a2), unsigned short, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector signed short, (a1), int, (a2), vector signed short, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector signed short, (a1), int, (a2), short, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool short, (a1), int, (a2), vector bool short, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool short, (a1), int, (a2), unsigned short, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool short, (a1), int, (a2), short, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector pixel, (a1), int, (a2), vector pixel, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector pixel, (a1), int, (a2), unsigned short, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector pixel, (a1), int, (a2), short, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector unsigned int, (a1), int, (a2), vector unsigned int, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector unsigned int, (a1), int, (a2), unsigned int, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector signed int, (a1), int, (a2), vector signed int, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector signed int, (a1), int, (a2), int, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool int, (a1), int, (a2), vector bool int, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool int, (a1), int, (a2), unsigned int, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool int, (a1), int, (a2), int, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector float, (a1), int, (a2), vector float, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector float, (a1), int, (a2), float, *(a3)), \ + __builtin_altivec_stvx ((vector signed int) (a1), (a2), (void *) (a3)), \ +__builtin_altivec_compiletime_error ("vec_st"))))))))))))))))))))))))))) #define vec_stl(a1, a2, a3) \ - __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (a3)) +__ch (__tern_args_eq (vector unsigned char, (a1), int, (a2), vector unsigned char, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector unsigned char, (a1), int, (a2), unsigned char, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector signed char, (a1), int, (a2), vector signed char, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector signed char, (a1), int, (a2), signed char, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool char, (a1), int, (a2), vector bool char, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool char, (a1), int, (a2), unsigned char, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool char, (a1), int, (a2), signed char, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector unsigned short, (a1), int, (a2), vector unsigned short, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector unsigned short, (a1), int, (a2), unsigned short, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector signed short, (a1), int, (a2), vector signed short, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector signed short, (a1), int, (a2), short, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool short, (a1), int, (a2), vector bool short, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool short, (a1), int, (a2), unsigned short, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool short, (a1), int, (a2), short, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector pixel, (a1), int, (a2), vector pixel, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector pixel, (a1), int, (a2), unsigned short, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector pixel, (a1), int, (a2), short, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector unsigned int, (a1), int, (a2), vector unsigned int, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector unsigned int, (a1), int, (a2), unsigned int, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector signed int, (a1), int, (a2), vector signed int, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector signed int, (a1), int, (a2), int, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool int, (a1), int, (a2), vector bool int, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool int, (a1), int, (a2), unsigned int, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector bool int, (a1), int, (a2), int, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector float, (a1), int, (a2), vector float, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__ch (__tern_args_eq (vector float, (a1), int, (a2), float, *(a3)), \ + __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (void *) (a3)), \ +__builtin_altivec_compiletime_error ("vec_stl"))))))))))))))))))))))))))) #define vec_ste(a, b, c) \ -__ch (__un_args_eq (vector unsigned char, (a)), \ - __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \ -__ch (__un_args_eq (vector signed char, (a)), \ - __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \ -__ch (__un_args_eq (vector unsigned short, (a)), \ - __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \ -__ch (__un_args_eq (vector signed short, (a)), \ - __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \ -__ch (__un_args_eq (vector unsigned int, (a)), \ - __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \ -__ch (__un_args_eq (vector signed int, (a)), \ - __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \ -__ch (__un_args_eq (vector float, (a)), \ - __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \ - __altivec_link_error_invalid_argument ()))))))) +__ch (__tern_args_eq (vector unsigned char, (a), int, (b), unsigned char, *(c)), \ + __builtin_altivec_stvebx ((vector signed char) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector signed char, (a), int, (b), signed char, *(c)), \ + __builtin_altivec_stvebx ((vector signed char) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector bool char, (a), int, (b), unsigned char, *(c)), \ + __builtin_altivec_stvebx ((vector signed char) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector bool char, (a), int, (b), signed char, *(c)), \ + __builtin_altivec_stvebx ((vector signed char) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector unsigned short, (a), int, (b), unsigned short, *(c)), \ + __builtin_altivec_stvehx ((vector signed short) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector signed short, (a), int, (b), short, *(c)), \ + __builtin_altivec_stvehx ((vector signed short) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector bool short, (a), int, (b), unsigned short, *(c)), \ + __builtin_altivec_stvehx ((vector signed short) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector bool short, (a), int, (b), short, *(c)), \ + __builtin_altivec_stvehx ((vector signed short) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector pixel, (a), int, (b), unsigned short, *(c)), \ + __builtin_altivec_stvehx ((vector signed short) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector pixel, (a), int, (b), short, *(c)), \ + __builtin_altivec_stvehx ((vector signed short) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector unsigned int, (a), int, (b), unsigned int, *(c)), \ + __builtin_altivec_stvewx ((vector signed int) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector signed int, (a), int, (b), int, *(c)), \ + __builtin_altivec_stvewx ((vector signed int) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector bool int, (a), int, (b), unsigned int, *(c)), \ + __builtin_altivec_stvewx ((vector signed int) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector bool int, (a), int, (b), int, *(c)), \ + __builtin_altivec_stvewx ((vector signed int) (a), (b), (void *) (c)), \ +__ch (__tern_args_eq (vector float, (a), int, (b), float, *(c)), \ + __builtin_altivec_stvewx ((vector signed int) (a), (b), (void *) (c)), \ + __builtin_altivec_compiletime_error ("vec_ste")))))))))))))))) #define vec_stvewx(a, b, c) \ __ch (__un_args_eq (vector unsigned int, (a)), \ @@ -7875,55 +10058,67 @@ __ch (__un_args_eq (vector signed int, (a)), \ __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \ __ch (__un_args_eq (vector float, (a)), \ __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \ -__altivec_link_error_invalid_argument ()))) +__builtin_altivec_compiletime_error ("vec_stvewx")))) #define vec_stvehx(a, b, c) \ __ch (__un_args_eq (vector unsigned short, (a)), \ __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \ __ch (__un_args_eq (vector signed short, (a)), \ __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_stvehx"))) #define vec_stvebx(a, b, c) \ __ch (__un_args_eq (vector unsigned char, (a)), \ __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \ __ch (__un_args_eq (vector signed char, (a)), \ __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \ -__altivec_link_error_invalid_argument ())) +__builtin_altivec_compiletime_error ("vec_stvebx"))) #define vec_sub(a1, a2) \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + ((vector signed char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + ((vector signed char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + ((vector signed short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + ((vector signed short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + ((vector signed int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + ((vector signed int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ ((vector float) __builtin_altivec_vsubfp ((vector float) (a1), (vector float) (a2))), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_sub")))))))))))))))))))) #define vec_vsubfp(a1, a2) \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ ((vector float) __builtin_altivec_vsubfp ((vector float) (a1), (vector float) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vsubfp")) #define vec_vsubuwm(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ @@ -7934,7 +10129,7 @@ __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ())))) +__builtin_altivec_compiletime_error ("vec_vsubuwm"))))) #define vec_vsubuhm(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ @@ -7945,7 +10140,7 @@ __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ())))) +__builtin_altivec_compiletime_error ("vec_vsubuhm"))))) #define vec_vsububm(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ @@ -7956,44 +10151,56 @@ __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ())))) +__builtin_altivec_compiletime_error ("vec_vsububm"))))) #define vec_subc(a1, a2) \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsubcuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_subc")) #define vec_subs(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + ((vector signed char) __builtin_altivec_vsubsbs ((vector signed char) (a1), (vector signed char) (a2))), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + ((vector signed char) __builtin_altivec_vsubsbs ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vsubsbs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + ((vector signed short) __builtin_altivec_vsubshs ((vector signed short) (a1), (vector signed short) (a2))), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + ((vector signed short) __builtin_altivec_vsubshs ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) __builtin_altivec_vsubshs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + ((vector signed int) __builtin_altivec_vsubsws ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + ((vector signed int) __builtin_altivec_vsubsws ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vsubsws ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))))))))) + __builtin_altivec_compiletime_error ("vec_subs"))))))))))))))))))) #define vec_vsubsws(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vsubsws ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vsubsws")) #define vec_vsubuws(a1, a2) \ __ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ @@ -8002,12 +10209,12 @@ __ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()))) +__builtin_altivec_compiletime_error ("vec_vsubuws")))) #define vec_vsubshs(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ ((vector signed short) __builtin_altivec_vsubshs ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vsubshs")) #define vec_vsubuhs(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ @@ -8016,12 +10223,12 @@ __ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()))) +__builtin_altivec_compiletime_error ("vec_vsubuhs")))) #define vec_vsubsbs(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ ((vector signed char) __builtin_altivec_vsubsbs ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vsubsbs")) #define vec_vsububs(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ @@ -8030,7 +10237,7 @@ __ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ()))) +__builtin_altivec_compiletime_error ("vec_vsububs")))) #define vec_sum4s(a1, a2) \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \ @@ -8039,503 +10246,740 @@ __ch (__bin_args_eq (vector signed char, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) (a1), (vector signed int) (a2))), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vsum4shs ((vector signed short) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ()))) + __builtin_altivec_compiletime_error ("vec_sum4s")))) #define vec_vsum4shs(a1, a2) \ __ch (__bin_args_eq (vector signed short, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vsum4shs ((vector signed short) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vsum4shs")) #define vec_vsum4sbs(a1, a2) \ __ch (__bin_args_eq (vector signed char, (a1), vector signed int, (a2)), \ ((vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vsum4sbs")) #define vec_vsum4ubs(a1, a2) \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \ ((vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vsum4ubs")) -#define vec_sum2s(a1, a2) __builtin_altivec_vsum2sws ((a1), (a2)) +#define vec_sum2s(a1, a2) \ +__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ + ((vector signed int) __builtin_altivec_vsum2sws ((vector signed int) (a1), (vector signed int) (a2))), \ +__builtin_altivec_compiletime_error ("vec_sum2s")) -#define vec_sums(a1, a2) __builtin_altivec_vsumsws ((a1), (a2)) +#define vec_sums(a1, a2) \ +__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ + ((vector signed int) __builtin_altivec_vsumsws ((vector signed int) (a1), (vector signed int) (a2))), \ +__builtin_altivec_compiletime_error ("vec_sums")) -#define vec_trunc(a1) __builtin_altivec_vrfiz ((a1)) +#define vec_trunc(a1) \ +__ch (__un_args_eq (vector float, (a1)), \ + ((vector float) __builtin_altivec_vrfiz ((vector float) (a1))), \ +__builtin_altivec_compiletime_error ("vec_trunc")) #define vec_unpackh(a1) \ __ch (__un_args_eq (vector signed char, (a1)), \ ((vector signed short) __builtin_altivec_vupkhsb ((vector signed char) (a1))), \ -__ch (__un_args_eq (vector unsigned short, (a1)), \ +__ch (__un_args_eq (vector bool char, (a1)), \ + ((vector bool short) __builtin_altivec_vupkhsb ((vector signed char) (a1))), \ +__ch (__un_args_eq (vector pixel, (a1)), \ ((vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) (a1))), \ __ch (__un_args_eq (vector signed short, (a1)), \ ((vector signed int) __builtin_altivec_vupkhsh ((vector signed short) (a1))), \ - __altivec_link_error_invalid_argument ()))) +__ch (__un_args_eq (vector bool short, (a1)), \ + ((vector bool int) __builtin_altivec_vupkhsh ((vector signed short) (a1))), \ + __builtin_altivec_compiletime_error ("vec_unpackh")))))) #define vec_vupkhsh(a1) \ __ch (__un_args_eq (vector signed short, (a1)), \ ((vector signed int) __builtin_altivec_vupkhsh ((vector signed short) (a1))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vupkhsh")) #define vec_vupkhpx(a1) \ __ch (__un_args_eq (vector unsigned short, (a1)), \ ((vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) (a1))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vupkhpx")) #define vec_vupkhsb(a1) \ __ch (__un_args_eq (vector signed char, (a1)), \ ((vector signed short) __builtin_altivec_vupkhsb ((vector signed char) (a1))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vupkhsb")) #define vec_unpackl(a1) \ __ch (__un_args_eq (vector signed char, (a1)), \ ((vector signed short) __builtin_altivec_vupklsb ((vector signed char) (a1))), \ -__ch (__un_args_eq (vector unsigned short, (a1)), \ +__ch (__un_args_eq (vector bool char, (a1)), \ + ((vector bool short) __builtin_altivec_vupklsb ((vector signed char) (a1))), \ +__ch (__un_args_eq (vector pixel, (a1)), \ ((vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) (a1))), \ __ch (__un_args_eq (vector signed short, (a1)), \ ((vector signed int) __builtin_altivec_vupklsh ((vector signed short) (a1))), \ - __altivec_link_error_invalid_argument ()))) +__ch (__un_args_eq (vector bool short, (a1)), \ + ((vector bool int) __builtin_altivec_vupklsh ((vector signed short) (a1))), \ + __builtin_altivec_compiletime_error ("vec_unpackl")))))) #define vec_vupklsh(a1) \ __ch (__un_args_eq (vector signed short, (a1)), \ ((vector signed int) __builtin_altivec_vupklsh ((vector signed short) (a1))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vupklsh")) #define vec_vupklpx(a1) \ __ch (__un_args_eq (vector unsigned short, (a1)), \ ((vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) (a1))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vupklpx")) #define vec_vupklsb(a1) \ __ch (__un_args_eq (vector signed char, (a1)), \ ((vector signed short) __builtin_altivec_vupklsb ((vector signed char) (a1))), \ -__altivec_link_error_invalid_argument ()) +__builtin_altivec_compiletime_error ("vec_vupklsb")) #define vec_xor(a1, a2) \ -__ch (__bin_args_eq (vector float, ((a1)), vector float, ((a2))), \ - ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector float, ((a1)), vector unsigned int, ((a2))), \ - ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned int, ((a1)), vector float, ((a2))), \ - ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector signed int, ((a1)), vector float, ((a2))), \ - ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector float, ((a1)), vector signed int, ((a2))), \ - ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector signed int, ((a1)), vector signed int, ((a2))), \ - ((vector signed int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector signed int, ((a1)), vector unsigned int, ((a2))), \ - ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned int, ((a1)), vector signed int, ((a2))), \ - ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned int, ((a1)), vector unsigned int, ((a2))), \ - ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned short, ((a1)), vector unsigned short, ((a2))), \ - ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector signed short, ((a1)), vector unsigned short, ((a2))), \ - ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned short, ((a1)), vector signed short, ((a2))), \ - ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned short, ((a1)), vector unsigned short, ((a2))), \ - ((vector signed short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector signed short, ((a1)), vector signed short, ((a2))), \ - ((vector signed short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector signed short, ((a1)), vector unsigned short, ((a2))), \ - ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned short, ((a1)), vector signed short, ((a2))), \ - ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned short, ((a1)), vector unsigned short, ((a2))), \ - ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned char, ((a1)), vector unsigned char, ((a2))), \ - ((vector unsigned char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector signed char, ((a1)), vector unsigned char, ((a2))), \ - ((vector unsigned char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector signed char, ((a1)), vector signed char, ((a2))), \ - ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned char, ((a1)), vector unsigned char, ((a2))), \ - ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector signed char, ((a1)), vector unsigned char, ((a2))), \ - ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ -__ch (__bin_args_eq (vector unsigned char, ((a1)), vector signed char, ((a2))), \ - ((vector unsigned char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \ - __altivec_link_error_invalid_argument ()))))))))))))))))))))))) +__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ + ((vector float) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector float, (a1), vector bool int, (a2)), \ + ((vector float) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector float, (a2)), \ + ((vector float) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \ + ((vector bool int) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + ((vector signed int) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + ((vector signed int) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ + ((vector signed int) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ + ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ + ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ + ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \ + ((vector bool short) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + ((vector signed short) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + ((vector signed short) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ + ((vector signed short) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ + ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ + ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ + ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \ + ((vector bool char) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + ((vector signed char) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + ((vector signed char) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ + ((vector signed char) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ + ((vector unsigned char) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ + ((vector unsigned char) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ + ((vector unsigned char) __builtin_altivec_vxor ((vector signed int) (a1), (vector signed int) (a2))), \ + __builtin_altivec_compiletime_error ("vec_xor"))))))))))))))))))))))))) /* Predicates. */ #define vec_all_eq(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \ + __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector pixel, (a1), vector pixel, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ + __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \ + __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ __builtin_altivec_vcmpeqfp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_all_eq")))))))))))))))))))))))) #define vec_all_ge(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ __builtin_altivec_vcmpgefp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_all_ge")))))))))))))))))))) #define vec_all_gt(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ __builtin_altivec_vcmpgtfp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_all_gt")))))))))))))))))))) -#define vec_all_in(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ, (a1), (a2)) +#define vec_all_in(a1, a2) \ +__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ + __builtin_altivec_vcmpbfp_p (__CR6_EQ, (a1), (a2)), \ + __builtin_altivec_compiletime_error ("vec_all_in")) #define vec_all_le(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ __builtin_altivec_vcmpgefp_p (__CR6_LT, (vector float) (a2), (vector float) (a1)), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_all_le")))))))))))))))))))) #define vec_all_lt(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ __builtin_altivec_vcmpgtfp_p (__CR6_LT, (vector float) (a2), (vector float) (a1)), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_all_lt")))))))))))))))))))) -#define vec_all_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1)) +#define vec_all_nan(a1) \ +__ch (__un_args_eq (vector float, (a1)), \ + __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1)), \ + __builtin_altivec_compiletime_error ("vec_all_nan")) #define vec_all_ne(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ + __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \ + __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector pixel, (a1), vector pixel, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ + __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \ + __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (vector float) (a1), (vector float) (a2)), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_all_ne")))))))))))))))))))))))) -#define vec_all_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a1), (a2)) +#define vec_all_nge(a1, a2) \ +__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ + __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a1), (a2)), \ + __builtin_altivec_compiletime_error ("vec_all_nge")) -#define vec_all_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a1), (a2)) +#define vec_all_ngt(a1, a2) \ +__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ + __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a1), (a2)), \ + __builtin_altivec_compiletime_error ("vec_all_ngt")) -#define vec_all_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a2), (a1)) +#define vec_all_nle(a1, a2) \ +__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ + __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a2), (a1)), \ + __builtin_altivec_compiletime_error ("vec_all_nle")) -#define vec_all_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a2), (a1)) +#define vec_all_nlt(a1, a2) \ +__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ + __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a2), (a1)), \ + __builtin_altivec_compiletime_error ("vec_all_nlt")) -#define vec_all_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT, (a1), (a1)) +#define vec_all_numeric(a1) \ +__ch (__un_args_eq (vector float, (a1)), \ + __builtin_altivec_vcmpeqfp_p (__CR6_LT, (a1), (a1)), \ + __builtin_altivec_compiletime_error ("vec_all_numeric")) #define vec_any_eq(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ + __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \ + __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector pixel, (a1), vector pixel, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ + __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \ + __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_any_eq")))))))))))))))))))))))) #define vec_any_ge(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_any_ge")))))))))))))))))))) #define vec_any_gt(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_any_gt")))))))))))))))))))) #define vec_any_le(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, (vector float) (a2), (vector float) (a1)), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_any_le")))))))))))))))))))) #define vec_any_lt(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ + __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ + __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ + __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, (vector float) (a2), (vector float) (a1)), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_any_lt")))))))))))))))))))) -#define vec_any_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a1) +#define vec_any_nan(a1) \ +__ch (__un_args_eq (vector float, (a1)), \ + __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, (a1), (a1)), \ + __builtin_altivec_compiletime_error ("vec_any_nan")) #define vec_any_ne(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector unsigned char, (a2)), \ + __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector signed char, (a2)), \ + __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector signed char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ +__ch (__bin_args_eq (vector unsigned char, (a1), vector bool char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \ __ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ +__ch (__bin_args_eq (vector bool char, (a1), vector bool char, (a2)), \ + __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector unsigned short, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector signed short, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector signed short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ +__ch (__bin_args_eq (vector unsigned short, (a1), vector bool short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ __ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ +__ch (__bin_args_eq (vector bool short, (a1), vector bool short, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector pixel, (a1), vector pixel, (a2)), \ + __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector unsigned int, (a2)), \ + __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector signed int, (a2)), \ + __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector signed int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ +__ch (__bin_args_eq (vector unsigned int, (a1), vector bool int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \ +__ch (__bin_args_eq (vector bool int, (a1), vector bool int, (a2)), \ + __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \ __ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, (vector float) (a1), (vector float) (a2)), \ - __altivec_link_error_invalid_argument ()))))))))))))) + __builtin_altivec_compiletime_error ("vec_any_ne")))))))))))))))))))))))) -#define vec_any_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a1), (a2)) +#define vec_any_nge(a1, a2) \ +__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ + __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a1), (a2)), \ + __builtin_altivec_compiletime_error ("vec_any_nge")) -#define vec_any_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a1), (a2)) +#define vec_any_ngt(a1, a2) \ +__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ + __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a1), (a2)), \ + __builtin_altivec_compiletime_error ("vec_any_ngt")) -#define vec_any_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a2), (a1)) +#define vec_any_nle(a1, a2) \ +__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ + __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a2), (a1)), \ + __builtin_altivec_compiletime_error ("vec_any_nle")) -#define vec_any_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a2), (a1)) +#define vec_any_nlt(a1, a2) \ +__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ + __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a2), (a1)), \ + __builtin_altivec_compiletime_error ("vec_any_nlt")) -#define vec_any_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (a1), (a1)) +#define vec_any_numeric(a1) \ +__ch (__unn_args_eq (vector float, (a1)), \ + __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (a1), (a1)), \ + __builtin_altivec_compiletime_error ("vec_any_numeric")) -#define vec_any_out(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, (a1), (a2)) +#define vec_any_out(a1, a2) \ +__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ + __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, (a1), (a2)), \ + __builtin_altivec_compiletime_error ("vec_any_out")) #endif /* __cplusplus */ diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h index 44ded5b..6f193f7 100644 --- a/gcc/config/rs6000/darwin.h +++ b/gcc/config/rs6000/darwin.h @@ -111,6 +111,13 @@ do { \ #define SUBTARGET_EXTRA_SPECS \ { "darwin_arch", "ppc" }, +/* The "-faltivec" option should have been called "-maltivec" all along. */ +#define SUBTARGET_OPTION_TRANSLATE_TABLE \ + { "-faltivec", "-maltivec -include altivec.h" }, \ + { "-fno-altivec", "-mno-altivec" }, \ + { "-Waltivec-long-deprecated", "-mwarn-altivec-long" }, \ + { "-Wno-altivec-long-deprecated", "-mno-warn-altivec-long" } + /* Make both r2 and r3 available for allocation. */ #define FIXED_R2 0 #define FIXED_R13 0 diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c index a47afee..08e34af 100644 --- a/gcc/config/rs6000/rs6000-c.c +++ b/gcc/config/rs6000/rs6000-c.c @@ -92,7 +92,15 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile) if (! TARGET_POWER && ! TARGET_POWER2 && ! TARGET_POWERPC) builtin_define ("_ARCH_COM"); if (TARGET_ALTIVEC) - builtin_define ("__ALTIVEC__"); + { + builtin_define ("__ALTIVEC__"); + builtin_define ("__VEC__=10206"); + + /* Define the AltiVec syntactic elements. */ + builtin_define ("__vector=__attribute__((altivec(vector__)))"); + builtin_define ("__pixel=__attribute__((altivec(pixel__))) unsigned short"); + builtin_define ("__bool=__attribute__((altivec(bool__))) unsigned"); + } if (TARGET_SPE) builtin_define ("__SPE__"); if (TARGET_SOFT_FLOAT) diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 59cd623..df30bcb 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -217,6 +217,20 @@ static GTY(()) tree opaque_V2SI_type_node; static GTY(()) tree opaque_V2SF_type_node; static GTY(()) tree opaque_p_V2SI_type_node; +/* AltiVec requires a few more basic types in addition to the vector + types already defined in tree.c. */ +static GTY(()) tree bool_char_type_node; /* __bool char */ +static GTY(()) tree bool_short_type_node; /* __bool short */ +static GTY(()) tree bool_int_type_node; /* __bool int */ +static GTY(()) tree pixel_type_node; /* __pixel */ +static GTY(()) tree bool_V16QI_type_node; /* __vector __bool char */ +static GTY(()) tree bool_V8HI_type_node; /* __vector __bool short */ +static GTY(()) tree bool_V4SI_type_node; /* __vector __bool int */ +static GTY(()) tree pixel_V8HI_type_node; /* __vector __pixel */ + +int rs6000_warn_altivec_long = 1; /* On by default. */ +const char *rs6000_warn_altivec_long_switch; + const char *rs6000_traceback_name; static enum { traceback_default = 0, @@ -287,6 +301,7 @@ static void rs6000_assemble_visibility (tree, int); #endif static int rs6000_ra_ever_killed (void); static tree rs6000_handle_longcall_attribute (tree *, tree, tree, int, bool *); +static tree rs6000_handle_altivec_attribute (tree *, tree, tree, int, bool *); extern const struct attribute_spec rs6000_attribute_table[]; static void rs6000_set_default_type_attributes (tree); static void rs6000_output_function_prologue (FILE *, HOST_WIDE_INT); @@ -913,6 +928,17 @@ rs6000_override_options (const char *default_cpu) rs6000_default_long_calls = (base[0] != 'n'); } + /* Handle -m(no-)warn-altivec-long similarly. */ + if (rs6000_warn_altivec_long_switch) + { + const char *base = rs6000_warn_altivec_long_switch; + while (base[-1] != 'm') base--; + + if (*rs6000_warn_altivec_long_switch != '\0') + error ("invalid option `%s'", base); + rs6000_warn_altivec_long = (base[0] != 'n'); + } + /* Handle -mprioritize-restricted-insns option. */ rs6000_sched_restricted_insns_priority = DEFAULT_RESTRICTED_INSNS_PRIORITY; if (rs6000_sched_restricted_insns_priority_str) @@ -5465,6 +5491,7 @@ rs6000_expand_binop_builtin (enum insn_code icode, tree arglist, rtx target) || icode == CODE_FOR_spe_evsrwiu) { /* Only allow 5-bit unsigned literals. */ + STRIP_NOPS (arg1); if (TREE_CODE (arg1) != INTEGER_CST || TREE_INT_CST_LOW (arg1) & ~0x1f) { @@ -5687,6 +5714,7 @@ rs6000_expand_ternop_builtin (enum insn_code icode, tree arglist, rtx target) || icode == CODE_FOR_altivec_vsldoi_16qi) { /* Only allow 4-bit unsigned literals. */ + STRIP_NOPS (arg2); if (TREE_CODE (arg2) != INTEGER_CST || TREE_INT_CST_LOW (arg2) & ~0xf) { @@ -5857,6 +5885,7 @@ altivec_expand_dst_builtin (tree exp, rtx target ATTRIBUTE_UNUSED, || arg2 == error_mark_node) return const0_rtx; + STRIP_NOPS (arg2); if (TREE_CODE (arg2) != INTEGER_CST || TREE_INT_CST_LOW (arg2) & ~0x3) { @@ -5963,6 +5992,7 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp) case ALTIVEC_BUILTIN_DSS: icode = CODE_FOR_altivec_dss; arg0 = TREE_VALUE (arglist); + STRIP_NOPS (arg0); op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0); mode0 = insn_data[icode].operand[0].mode; @@ -5982,6 +6012,15 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp) emit_insn (gen_altivec_dss (op0)); return NULL_RTX; + + case ALTIVEC_BUILTIN_COMPILETIME_ERROR: + arg0 = TREE_VALUE (arglist); + while (TREE_CODE (arg0) == NOP_EXPR || TREE_CODE (arg0) == ADDR_EXPR) + arg0 = TREE_OPERAND (arg0, 0); + error ("invalid parameter combination for `%s' AltiVec intrinsic", + TREE_STRING_POINTER (arg0)); + + return const0_rtx; } /* Expand abs* operations. */ @@ -6421,6 +6460,74 @@ rs6000_init_builtins (void) opaque_V2SF_type_node = copy_node (V2SF_type_node); opaque_p_V2SI_type_node = build_pointer_type (opaque_V2SI_type_node); + /* The 'vector bool ...' types must be kept distinct from 'vector unsigned ...' + types, especially in C++ land. Similarly, 'vector pixel' is distinct from + 'vector unsigned short'. */ + + bool_char_type_node = copy_node (unsigned_intQI_type_node); + TYPE_MAIN_VARIANT (bool_char_type_node) = bool_char_type_node; + bool_short_type_node = copy_node (unsigned_intHI_type_node); + TYPE_MAIN_VARIANT (bool_short_type_node) = bool_short_type_node; + bool_int_type_node = copy_node (unsigned_intSI_type_node); + TYPE_MAIN_VARIANT (bool_int_type_node) = bool_int_type_node; + pixel_type_node = copy_node (unsigned_intHI_type_node); + TYPE_MAIN_VARIANT (pixel_type_node) = pixel_type_node; + + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__bool char"), + bool_char_type_node)); + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__bool short"), + bool_short_type_node)); + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__bool int"), + bool_int_type_node)); + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__pixel"), + pixel_type_node)); + + bool_V16QI_type_node = make_vector (V16QImode, bool_char_type_node, 1); + bool_V8HI_type_node = make_vector (V8HImode, bool_short_type_node, 1); + bool_V4SI_type_node = make_vector (V4SImode, bool_int_type_node, 1); + pixel_V8HI_type_node = make_vector (V8HImode, pixel_type_node, 1); + + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__vector unsigned char"), + unsigned_V16QI_type_node)); + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__vector signed char"), + V16QI_type_node)); + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__vector __bool char"), + bool_V16QI_type_node)); + + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__vector unsigned short"), + unsigned_V8HI_type_node)); + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__vector signed short"), + V8HI_type_node)); + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__vector __bool short"), + bool_V8HI_type_node)); + + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__vector unsigned int"), + unsigned_V4SI_type_node)); + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__vector signed int"), + V4SI_type_node)); + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__vector __bool int"), + bool_V4SI_type_node)); + + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__vector float"), + V4SF_type_node)); + (*lang_hooks.decls.pushdecl) (build_decl (TYPE_DECL, + get_identifier ("__vector __pixel"), + pixel_V8HI_type_node)); + if (TARGET_SPE) spe_init_builtins (); if (TARGET_ALTIVEC) @@ -6771,11 +6878,14 @@ altivec_init_builtins (void) = build_function_type_list (V16QI_type_node, V16QI_type_node, NULL_TREE); tree v4sf_ftype_v4sf = build_function_type_list (V4SF_type_node, V4SF_type_node, NULL_TREE); - tree void_ftype_pcvoid_int_char + tree void_ftype_pcvoid_int_int = build_function_type_list (void_type_node, pcvoid_type_node, integer_type_node, - char_type_node, NULL_TREE); - + integer_type_node, NULL_TREE); + tree int_ftype_pcchar + = build_function_type_list (integer_type_node, + pcchar_type_node, NULL_TREE); + def_builtin (MASK_ALTIVEC, "__builtin_altivec_ld_internal_4sf", v4sf_ftype_pcfloat, ALTIVEC_BUILTIN_LD_INTERNAL_4sf); def_builtin (MASK_ALTIVEC, "__builtin_altivec_st_internal_4sf", void_ftype_pfloat_v4sf, @@ -6809,10 +6919,14 @@ altivec_init_builtins (void) def_builtin (MASK_ALTIVEC, "__builtin_altivec_stvebx", void_ftype_v16qi_long_pvoid, ALTIVEC_BUILTIN_STVEBX); def_builtin (MASK_ALTIVEC, "__builtin_altivec_stvehx", void_ftype_v8hi_long_pvoid, ALTIVEC_BUILTIN_STVEHX); + /* See altivec.h for usage of "__builtin_altivec_compiletime_error". */ + def_builtin (MASK_ALTIVEC, "__builtin_altivec_compiletime_error", int_ftype_pcchar, + ALTIVEC_BUILTIN_COMPILETIME_ERROR); + /* Add the DST variants. */ d = (struct builtin_description *) bdesc_dst; for (i = 0; i < ARRAY_SIZE (bdesc_dst); i++, d++) - def_builtin (d->mask, d->name, void_ftype_pcvoid_int_char, d->code); + def_builtin (d->mask, d->name, void_ftype_pcvoid_int_int, d->code); /* Initialize the predicates. */ dp = (struct builtin_description_predicates *) bdesc_altivec_preds; @@ -8896,12 +9010,12 @@ print_operand (FILE *file, rtx x, int code) case 'P': /* The operand must be an indirect memory reference. The result - is the register number. */ + is the register name. */ if (GET_CODE (x) != MEM || GET_CODE (XEXP (x, 0)) != REG || REGNO (XEXP (x, 0)) >= 32) output_operand_lossage ("invalid %%P value"); else - fprintf (file, "%d", REGNO (XEXP (x, 0))); + fprintf (file, "%s", reg_names[REGNO (XEXP (x, 0))]); return; case 'q': @@ -14546,11 +14660,99 @@ rs6000_initialize_trampoline (rtx addr, rtx fnaddr, rtx cxt) const struct attribute_spec rs6000_attribute_table[] = { /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler } */ + { "altivec", 1, 1, false, true, false, rs6000_handle_altivec_attribute }, { "longcall", 0, 0, false, true, true, rs6000_handle_longcall_attribute }, { "shortcall", 0, 0, false, true, true, rs6000_handle_longcall_attribute }, { NULL, 0, 0, false, false, false, NULL } }; +/* Handle the "altivec" attribute. The attribute may have + arguments as follows: + + __attribute__((altivec(vector__))) + __attribute__((altivec(pixel__))) (always followed by 'unsigned short') + __attribute__((altivec(bool__))) (always followed by 'unsigned') + + and may appear more than once (e.g., 'vector bool char') in a + given declaration. */ + +static tree +rs6000_handle_altivec_attribute (tree *node, tree name, tree args, + int flags ATTRIBUTE_UNUSED, + bool *no_add_attrs) +{ + tree type = *node, result = NULL_TREE; + enum machine_mode mode; + int unsigned_p; + char altivec_type + = ((args && TREE_CODE (args) == TREE_LIST && TREE_VALUE (args) + && TREE_CODE (TREE_VALUE (args)) == IDENTIFIER_NODE) + ? *IDENTIFIER_POINTER (TREE_VALUE (args)) + : '?'); + + while (POINTER_TYPE_P (type) + || TREE_CODE (type) == FUNCTION_TYPE + || TREE_CODE (type) == METHOD_TYPE + || TREE_CODE (type) == ARRAY_TYPE) + type = TREE_TYPE (type); + + mode = TYPE_MODE (type); + + if (rs6000_warn_altivec_long + && (type == long_unsigned_type_node || type == long_integer_type_node)) + warning ("use of 'long' in AltiVec types is deprecated; use 'int'"); + + switch (altivec_type) + { + case 'v': + unsigned_p = TREE_UNSIGNED (type); + switch (mode) + { + case SImode: + result = (unsigned_p ? unsigned_V4SI_type_node : V4SI_type_node); + break; + case HImode: + result = (unsigned_p ? unsigned_V8HI_type_node : V8HI_type_node); + break; + case QImode: + result = (unsigned_p ? unsigned_V16QI_type_node : V16QI_type_node); + break; + case SFmode: result = V4SF_type_node; break; + /* If the user says 'vector int bool', we may be handed the 'bool' + attribute _before_ the 'vector' attribute, and so select the proper + type in the 'b' case below. */ + case V4SImode: case V8HImode: case V16QImode: result = type; + default: break; + } + break; + case 'b': + switch (mode) + { + case SImode: case V4SImode: result = bool_V4SI_type_node; break; + case HImode: case V8HImode: result = bool_V8HI_type_node; break; + case QImode: case V16QImode: result = bool_V16QI_type_node; + default: break; + } + break; + case 'p': + switch (mode) + { + case V8HImode: result = pixel_V8HI_type_node; + default: break; + } + default: break; + } + + *no_add_attrs = true; /* No need to hang on to the attribute. */ + + if (!result) + warning ("`%s' attribute ignored", IDENTIFIER_POINTER (name)); + else + *node = reconstruct_complex_type (*node, result); + + return NULL_TREE; +} + /* Handle a "longcall" or "shortcall" attribute; arguments as in struct attribute_spec.handler. */ diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index cd8d05d..ccceb17 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -452,6 +452,9 @@ enum group_termination {"longcall", &rs6000_longcall_switch, \ N_("Avoid all range limits on call instructions"), 0}, \ {"no-longcall", &rs6000_longcall_switch, "", 0}, \ + {"warn-altivec-long", &rs6000_warn_altivec_long_switch, \ + N_("Warn about deprecated 'vector long ...' AltiVec type usage"), 0}, \ + {"no-warn-altivec-long", &rs6000_warn_altivec_long_switch, "", 0}, \ {"sched-costly-dep=", &rs6000_sched_costly_dep_str, \ N_("Determine which dependences between insns are considered costly"), 0}, \ {"insert-sched-nops=", &rs6000_sched_insert_nops_str, \ @@ -520,6 +523,9 @@ extern enum rs6000_dependence_cost rs6000_sched_costly_dep; extern const char *rs6000_sched_insert_nops_str; extern enum rs6000_nop_insertion rs6000_sched_insert_nops; +extern int rs6000_warn_altivec_long; +extern const char *rs6000_warn_altivec_long_switch; + /* Alignment options for fields in structures for sub-targets following AIX-like ABI. ALIGN_POWER word-aligns FP doubles (default AIX ABI). @@ -2911,9 +2917,11 @@ enum rs6000_builtins ALTIVEC_BUILTIN_ABS_V4SI, ALTIVEC_BUILTIN_ABS_V4SF, ALTIVEC_BUILTIN_ABS_V8HI, - ALTIVEC_BUILTIN_ABS_V16QI + ALTIVEC_BUILTIN_ABS_V16QI, + ALTIVEC_BUILTIN_COMPILETIME_ERROR, + /* SPE builtins. */ - , SPE_BUILTIN_EVADDW, + SPE_BUILTIN_EVADDW, SPE_BUILTIN_EVAND, SPE_BUILTIN_EVANDC, SPE_BUILTIN_EVDIVWS, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cdb131e..a69f71e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,21 @@ +2004-02-21 Ziemowit Laski <zlaski@apple.com> + + * g++.dg/ext/altivec-1.C: Generalize target triple. + * g++.dg/ext/altivec-2.C: New test case. + * g++.dg/ext/altivec_check.h: New file. + * gcc.dg/altivec-1.c: Generalize target triple; + include altivec_check.h and call altivec_check(). + * gcc.dg/altivec-[2-5].c: Generalize target triple. + * gcc.dg/altivec-6.c: New test case. + * gcc.dg/altivec-[7-9].c: Generalize target triple; add + type casts as needed. + * gcc.dg/altivec-10.c: Include altivec_check.h and call + altivec_check(). + * gcc.dg/altivec-12.c: New test case. + * gcc.dg/altivec-varargs-1.c: Generalize target triple; + include altivec_check.h and call altivec_check(). + * gcc.dg/altivec_check.h: New file. + 2004-02-20 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> * lib/target-supports.exp (check_alias_available): Don't mangle diff --git a/gcc/testsuite/g++.dg/ext/altivec-1.C b/gcc/testsuite/g++.dg/ext/altivec-1.C index b7e3af3..09c2343 100644 --- a/gcc/testsuite/g++.dg/ext/altivec-1.C +++ b/gcc/testsuite/g++.dg/ext/altivec-1.C @@ -1,4 +1,4 @@ -// { dg-do compile { target powerpc-*-* } } */ +/* { dg-do compile { target powerpc*-*-* } } */ /* { dg-options "-maltivec" } */ #include <altivec.h> diff --git a/gcc/testsuite/g++.dg/ext/altivec-2.C b/gcc/testsuite/g++.dg/ext/altivec-2.C new file mode 100644 index 0000000..4c9518a --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/altivec-2.C @@ -0,0 +1,25 @@ +/* { dg-do run { target powerpc*-*-* } } */ +/* { dg-options "-maltivec -Wall" } */ + +/* This test checks if AltiVec builtins accept const-qualified + arguments. */ + +#include <altivec.h> +#include "altivec_check.h" + +int main (int argc, const char * argv[]) +{ + int i; + const float cf = 1.0; + vector float v; + const vector float cv = (vector float){1.0, 2.0, 3.0, 4.0}; + + altivec_check (); + + vec_dst(&cv, i, 0); + v = vec_ld(0, &cv); + v = vec_lde(0, &cf); + vec_lvsl(0, &cf); + + return 0; +} diff --git a/gcc/testsuite/g++.dg/ext/altivec_check.h b/gcc/testsuite/g++.dg/ext/altivec_check.h new file mode 100644 index 0000000..4f12d85 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/altivec_check.h @@ -0,0 +1,23 @@ +/* A runtime check for AltiVec capability. */ +/* Contributed by Ziemowit Laski <zlaski@apple.com> */ + +#include <signal.h> +extern void exit(int); + +void +sig_ill_handler (int sig) +{ + exit (0); +} + +void altivec_check(void) { + + /* Exit on systems without AltiVec. */ + signal (SIGILL, sig_ill_handler); +#ifdef __MACH__ + asm volatile ("vor v0,v0,v0"); +#else + asm volatile ("vor 0,0,0"); +#endif + signal (SIGILL, SIG_DFL); +} diff --git a/gcc/testsuite/gcc.dg/altivec-1.c b/gcc/testsuite/gcc.dg/altivec-1.c index 3d37a2e..59654be 100644 --- a/gcc/testsuite/gcc.dg/altivec-1.c +++ b/gcc/testsuite/gcc.dg/altivec-1.c @@ -1,9 +1,10 @@ -/* { dg-do run { target powerpc-*-*altivec powerpc-*-*-*altivec } } */ +/* { dg-do run { target powerpc*-*-* } } */ /* { dg-options "-maltivec" } */ /* Program to test PowerPC AltiVec instructions. */ #include <altivec.h> +#include "altivec_check.h" extern void abort (void); @@ -22,6 +23,8 @@ vector float f, g, h; int main () { + altivec_check(); /* Exits if AltiVec not supported */ + k = vec_add (a1, a2); if (!vec_all_eq (addi, k)) abort (); diff --git a/gcc/testsuite/gcc.dg/altivec-10.c b/gcc/testsuite/gcc.dg/altivec-10.c index 8d9223f..a0225a4 100644 --- a/gcc/testsuite/gcc.dg/altivec-10.c +++ b/gcc/testsuite/gcc.dg/altivec-10.c @@ -4,11 +4,7 @@ #include <altivec.h> #include <signal.h> -void -sig_ill_handler (int sig) -{ - exit(0); -} +#include "altivec_check.h" typedef union { @@ -62,7 +58,7 @@ check_cmple() { vector float a = {1.0, 2.0, 3.0, 4.0}; vector float b = {1.0, 3.0, 2.0, 5.0}; - vector signed int aux; + vector bool int aux; vector signed int le = {-1, -1, 0, -1}; aux = vec_cmple (a, b); @@ -75,10 +71,7 @@ check_cmple() int main() { - /* Exit on systems without altivec. */ - signal (SIGILL, sig_ill_handler); - asm volatile ("vor 0,0,0"); - signal (SIGILL, SIG_DFL); + altivec_check (); check_cmple (); check_vec_all_num (); diff --git a/gcc/testsuite/gcc.dg/altivec-12.c b/gcc/testsuite/gcc.dg/altivec-12.c new file mode 100644 index 0000000..ae9cdf4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/altivec-12.c @@ -0,0 +1,94 @@ +/* { dg-do run { target powerpc*-*-darwin* } } */ +/* { dg-options "-faltivec" } */ + +/* Program to test PowerPC AltiVec instructions. */ + +#include "altivec_check.h" + +extern void abort (void); +#define CHECK_IF(E) if(!(E)) abort() + +vector int a1 = (vector int){ 100, 200, 300, 400 }; +vector int a2 = (vector int){ 500, 600, 700, 800 }; +vector int addi = (vector int){ 600, 800, 1000, 1200 }; +vector int avgi = (vector int){ 300, 400, 500, 600 }; + +vector float f1 = (vector float){ 1.0, 2.0, 3.0, 4.0 }; +vector float f2 = (vector float){ 5.0, 6.0, 7.0, 8.0 }; +vector float f3; +vector float addf1 = (vector float){ 6.0, 8.0, 10.0, 12.0 }; +vector float addf2 = (vector float){ 6.1, 8.1, 10.1, 12.1 }; +vector float addf3 = (vector float){ 6.0, 8.0, 9.9, 12.1 }; +vector int k; +vector float f, g, h; + +int main () +{ + + altivec_check(); /* Exit if AltiVec not available. */ + + k = vec_add (a1, a2); + CHECK_IF (vec_all_eq (addi, k)); + CHECK_IF (vec_all_ge (addi, k)); + CHECK_IF (vec_all_le (addi, k)); + CHECK_IF (vec_any_eq (addi, k)); + CHECK_IF (vec_any_ge (addi, k)); + CHECK_IF (vec_any_le (addi, k)); + CHECK_IF (!vec_any_ne (addi, k)); + CHECK_IF (!vec_any_lt (addi, k)); + CHECK_IF (!vec_any_gt (addi, k)); + CHECK_IF (!vec_any_ne (addi, k)); + CHECK_IF (!vec_any_lt (addi, k)); + CHECK_IF (!vec_any_gt (addi, k)); + + k = vec_avg (a1, a2); + CHECK_IF (vec_all_eq (k, avgi)); + + h = vec_add (f1, f2); + CHECK_IF (vec_all_eq (h, addf1)); + CHECK_IF (vec_all_ge (h, addf1)); + CHECK_IF (vec_all_le (h, addf1)); + CHECK_IF (vec_any_eq (h, addf1)); + CHECK_IF (vec_any_ge (h, addf1)); + CHECK_IF (vec_any_le (h, addf1)); + CHECK_IF (!vec_any_ne (h, addf1)); + CHECK_IF (!vec_any_lt (h, addf1)); + CHECK_IF (!vec_any_gt (h, addf1)); + CHECK_IF (!vec_any_ne (h, addf1)); + CHECK_IF (!vec_any_lt (h, addf1)); + CHECK_IF (!vec_any_gt (h, addf1)); + + CHECK_IF (vec_all_gt (addf2, addf1)); + CHECK_IF (vec_any_gt (addf2, addf1)); + CHECK_IF (vec_all_ge (addf2, addf1)); + CHECK_IF (vec_any_ge (addf2, addf1)); + CHECK_IF (vec_all_ne (addf2, addf1)); + CHECK_IF (vec_any_ne (addf2, addf1)); + CHECK_IF (!vec_all_lt (addf2, addf1)); + CHECK_IF (!vec_any_lt (addf2, addf1)); + CHECK_IF (!vec_all_le (addf2, addf1)); + CHECK_IF (!vec_any_le (addf2, addf1)); + CHECK_IF (!vec_all_eq (addf2, addf1)); + CHECK_IF (!vec_any_eq (addf2, addf1)); + + CHECK_IF (vec_any_eq (addf3, addf1)); + CHECK_IF (vec_any_ne (addf3, addf1)); + CHECK_IF (vec_any_lt (addf3, addf1)); + CHECK_IF (vec_any_le (addf3, addf1)); + CHECK_IF (vec_any_gt (addf3, addf1)); + CHECK_IF (vec_any_ge (addf3, addf1)); + CHECK_IF (!vec_all_eq (addf3, addf1)); + CHECK_IF (!vec_all_ne (addf3, addf1)); + CHECK_IF (!vec_all_lt (addf3, addf1)); + CHECK_IF (!vec_all_le (addf3, addf1)); + CHECK_IF (!vec_all_gt (addf3, addf1)); + CHECK_IF (!vec_all_ge (addf3, addf1)); + + CHECK_IF (vec_all_numeric (addf3)); + CHECK_IF (vec_all_in (addf1, addf2)); + + CHECK_IF (vec_step (vector bool char) == 16); + CHECK_IF (vec_step (addf3) == 4); + + return 0; +} diff --git a/gcc/testsuite/gcc.dg/altivec-2.c b/gcc/testsuite/gcc.dg/altivec-2.c index 3c74d39..f64081f 100644 --- a/gcc/testsuite/gcc.dg/altivec-2.c +++ b/gcc/testsuite/gcc.dg/altivec-2.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target powerpc-*-* } } */ +/* { dg-do compile { target powerpc*-*-* } } */ /* { dg-options "-maltivec" } */ /* Program to test the vector_size attribute. This needs to run on a diff --git a/gcc/testsuite/gcc.dg/altivec-3.c b/gcc/testsuite/gcc.dg/altivec-3.c index c82f1e2..1321a72 100644 --- a/gcc/testsuite/gcc.dg/altivec-3.c +++ b/gcc/testsuite/gcc.dg/altivec-3.c @@ -1,6 +1,8 @@ -/* { dg-do run { target powerpc-*-*altivec powerpc-*-*-*altivec } } */ +/* { dg-do run { target powerpc*-*-* } } */ /* { dg-options "-maltivec" } */ +#include "altivec_check.h" + typedef int int4 __attribute__ ((mode(V4SI))); typedef float float4 __attribute__ ((mode(V4SF))); @@ -55,6 +57,8 @@ main () float4 f3 = (float4) { 6.0, 8.0, 10.0, 12.0 }; float4 ftmp; + altivec_check (); + vec_store (i3, a3); itmp = vec_add_int4 (a1, a2); vec_store (j3, itmp); diff --git a/gcc/testsuite/gcc.dg/altivec-4.c b/gcc/testsuite/gcc.dg/altivec-4.c index 244e31b..1756635 100644 --- a/gcc/testsuite/gcc.dg/altivec-4.c +++ b/gcc/testsuite/gcc.dg/altivec-4.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target powerpc-*-* } } */ +/* { dg-do compile { target powerpc*-*-* } } */ /* { dg-options "-maltivec -O0 -Wall" } */ #define vector __attribute__((vector_size(16))) diff --git a/gcc/testsuite/gcc.dg/altivec-5.c b/gcc/testsuite/gcc.dg/altivec-5.c index 61d19d9..0adfdb8 100644 --- a/gcc/testsuite/gcc.dg/altivec-5.c +++ b/gcc/testsuite/gcc.dg/altivec-5.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target powerpc-*-* } } */ +/* { dg-do compile { target powerpc*-*-* } } */ /* { dg-options "-maltivec -O2" } */ #define vector __attribute__((vector_size(16))) diff --git a/gcc/testsuite/gcc.dg/altivec-6.c b/gcc/testsuite/gcc.dg/altivec-6.c new file mode 100644 index 0000000..85e597f --- /dev/null +++ b/gcc/testsuite/gcc.dg/altivec-6.c @@ -0,0 +1,64 @@ +/* { dg-do compile { target powerpc-*-darwin* } } */ +/* { dg-options "-faltivec -O0 -Wall" } */ + + +/* These denote "generic" GCC vectors. */ +static int __attribute__((mode(V4SI))) x, y; + +static vector signed int i,j; +static vector signed short s,t; +static vector signed char c,d; +static vector float f,g; + +static vector unsigned char uc; + +static vector signed int *pi; + +static int int1, int2; + +void +b() +{ + vec_add (x, y); + + /* Make sure the predicates accept correct argument types. */ + + int1 = vec_all_in (f, g); + int1 = vec_all_ge (f, g); + int1 = vec_all_eq (c, d); + int1 = vec_all_ne (s, t); + int1 = vec_any_eq (i, j); + int1 = vec_any_ge (f, g); + int1 = vec_all_ngt (f, g); + int1 = vec_any_ge (c, d); + int1 = vec_any_ge (s, t); + int1 = vec_any_ge (i, j); + int1 = vec_any_ge (c, d); + int1 = vec_any_ge (s, t); + int1 = vec_any_ge (i, j); + + vec_mtvscr (i); + vec_dssall (); + s = (vector signed short) vec_mfvscr (); + vec_dss (3); + + vec_dst (pi, int1 + int2, 3); + vec_dstst (pi, int1 + int2, 3); + vec_dststt (pi, int1 + int2, 3); + vec_dstt (pi, int1 + int2, 3); + + uc = (vector unsigned char) vec_lvsl (int1 + 69, (signed int *) pi); + uc = (vector unsigned char) vec_lvsr (int1 + 69, (signed int *) pi); + + c = vec_lde (int1, (signed char *) pi); + s = vec_lde (int1, (signed short *) pi); + i = vec_lde (int1, (signed int *) pi); + i = vec_ldl (int1, pi); + i = vec_ld (int1, pi); + + vec_st (i, int2, pi); + vec_ste (c, int2, (signed char *) pi); + vec_ste (s, int2, (signed short *) pi); + vec_ste (i, int2, (signed int *) pi); + vec_stl (i, int2, pi); +} diff --git a/gcc/testsuite/gcc.dg/altivec-7.c b/gcc/testsuite/gcc.dg/altivec-7.c index 7e118d9..bb04b50 100644 --- a/gcc/testsuite/gcc.dg/altivec-7.c +++ b/gcc/testsuite/gcc.dg/altivec-7.c @@ -1,6 +1,6 @@ /* Origin: Aldy Hernandez <aldyh@redhat.com> */ -/* { dg-do compile { target powerpc-*-* } } */ +/* { dg-do compile { target powerpc*-*-* } } */ /* { dg-options "-maltivec" } */ #include <altivec.h> @@ -10,19 +10,19 @@ int *var_int; unsigned long **ulongp; vector pixel *varpixel; vector signed char *vecchar; -vector signed long *vecint; +vector signed long *vecint; /* { dg-warning "use of .long. in AltiVec types is deprecated; use .int." } */ vector signed short *vecshort; vector unsigned char *vecuchar; -vector unsigned long *vecuint; +vector unsigned long *vecuint; /* { dg-warning "use of .long. in AltiVec types is deprecated; use .int." } */ vector unsigned short *vecushort; vector float *vecfloat; int main () { - *vecfloat++ = vec_andc(vecint[0], vecfloat[1]); - *vecfloat++ = vec_andc(vecfloat[0], vecint[1]); - *vecfloat++ = vec_vxor(vecint[0], vecfloat[1]); - *vecfloat++ = vec_vxor(vecfloat[0], vecint[1]); + *vecfloat++ = vec_andc((vector bool int)vecint[0], vecfloat[1]); + *vecfloat++ = vec_andc(vecfloat[0], (vector bool int)vecint[1]); + *vecfloat++ = vec_vxor((vector bool int)vecint[0], vecfloat[1]); + *vecfloat++ = vec_vxor(vecfloat[0], (vector bool int)vecint[1]); *varpixel++ = vec_packpx(vecuint[0], vecuint[1]); *varpixel++ = vec_vpkpx(vecuint[0], vecuint[1]); *vecshort++ = vec_vmulosb(vecchar[0], vecchar[1]); @@ -32,14 +32,14 @@ int main () *vecint++ = vec_lvewx(var_int[0], longp[1]); *vecint++ = vec_unpackh(vecshort[0]); *vecint++ = vec_unpackl(vecshort[0]); - *vecushort++ = vec_andc(vecshort[0], vecushort[1]); - *vecushort++ = vec_andc(vecushort[0], vecshort[1]); - *vecushort++ = vec_vxor(vecshort[0], vecushort[1]); - *vecushort++ = vec_vxor(vecushort[0], vecshort[1]); + *vecushort++ = vec_andc((vector bool short)vecshort[0], vecushort[1]); + *vecushort++ = vec_andc(vecushort[0], (vector bool short)vecshort[1]); + *vecushort++ = vec_vxor((vector bool short)vecshort[0], vecushort[1]); + *vecushort++ = vec_vxor(vecushort[0], (vector bool short)vecshort[1]); *vecuint++ = vec_ld(var_int[0], ulongp[1]); *vecuint++ = vec_lvx(var_int[0], ulongp[1]); *vecuint++ = vec_vmsumubm(vecuchar[0], vecuchar[1], vecuint[2]); - *vecuchar++ = vec_xor(vecuchar[0], vecchar[1]); + *vecuchar++ = vec_xor(vecuchar[0], (vector unsigned char)vecchar[1]); return 0; } diff --git a/gcc/testsuite/gcc.dg/altivec-8.c b/gcc/testsuite/gcc.dg/altivec-8.c index 2d6803a..bbd2cf7 100644 --- a/gcc/testsuite/gcc.dg/altivec-8.c +++ b/gcc/testsuite/gcc.dg/altivec-8.c @@ -1,7 +1,7 @@ /* Origin: Aldy Hernandez <aldyh@redhat.com> */ /* Test rs6000_legitimate_address. PRE_INC should be invalid. */ -/* { dg-do compile { target powerpc-*-* } } */ +/* { dg-do compile { target powerpc*-*-* } } */ /* { dg-options "-maltivec" } */ #include <altivec.h> diff --git a/gcc/testsuite/gcc.dg/altivec-9.c b/gcc/testsuite/gcc.dg/altivec-9.c index 6232822..36c79d3 100644 --- a/gcc/testsuite/gcc.dg/altivec-9.c +++ b/gcc/testsuite/gcc.dg/altivec-9.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target powerpc-*-* } } */ +/* { dg-do compile { target powerpc*-*-* } } */ /* { dg-options "-maltivec -mabi=altivec -g" } */ /* PR9564 */ diff --git a/gcc/testsuite/gcc.dg/altivec-varargs-1.c b/gcc/testsuite/gcc.dg/altivec-varargs-1.c index caf6a26..14e5e6e 100644 --- a/gcc/testsuite/gcc.dg/altivec-varargs-1.c +++ b/gcc/testsuite/gcc.dg/altivec-varargs-1.c @@ -1,9 +1,11 @@ -/* { dg-do run { target powerpc*-*-darwin* powerpc*-*-*altivec* powerpc*-*-linux*} } */ +/* { dg-do run { target powerpc*-*-* } } */ /* { dg-options "-maltivec -mabi=altivec -fno-inline" } */ #include <stdarg.h> #include <signal.h> +#include "altivec_check.h" + #define vector __attribute__((mode(V4SI))) const vector unsigned int v1 = {10,11,12,13}; @@ -72,19 +74,10 @@ int main1(void) return 0; } -void -sig_ill_handler (int sig) -{ - exit(0); -} - int main (void) { - /* Exit on systems without altivec. */ - signal (SIGILL, sig_ill_handler); - /* Altivec instruction, 'vor %v0,%v0,%v0'. */ - asm volatile (".long 0x10000484"); - signal (SIGILL, SIG_DFL); + /* Exit on systems without AltiVec. */ + altivec_check (); return main1 (); } diff --git a/gcc/testsuite/gcc.dg/altivec_check.h b/gcc/testsuite/gcc.dg/altivec_check.h new file mode 100644 index 0000000..c64d918 --- /dev/null +++ b/gcc/testsuite/gcc.dg/altivec_check.h @@ -0,0 +1,23 @@ +/* A runtime check for AltiVec capability. */ +/* Contributed by Ziemowit Laski <zlaski@apple.com> */ + +#include <signal.h> +extern void exit (int); + +void +sig_ill_handler (int sig) +{ + exit (0); +} + +void altivec_check(void) { + + /* Exit on systems without AltiVec. */ + signal (SIGILL, sig_ill_handler); +#ifdef __MACH__ + asm volatile ("vor v0,v0,v0"); +#else + asm volatile ("vor 0,0,0"); +#endif + signal (SIGILL, SIG_DFL); +} diff --git a/libf2c/libI77/config.h.in b/libf2c/libI77/config.h.in index 63aacb5..3ae78d1 100644 --- a/libf2c/libI77/config.h.in +++ b/libf2c/libI77/config.h.in @@ -1,4 +1,4 @@ -/* config.h.in. Generated automatically from configure.in by autoheader 2.13. */ +/* config.h.in. Generated automatically from configure.in by autoheader. */ /* Define to empty if the keyword does not work. */ #undef const diff --git a/libf2c/libU77/config.hin b/libf2c/libU77/config.hin index ba32a44..e6d5af2 100644 --- a/libf2c/libU77/config.hin +++ b/libf2c/libU77/config.hin @@ -1,4 +1,4 @@ -/* config.hin. Generated automatically from configure.in by autoheader 2.13. */ +/* config.hin. Generated automatically from configure.in by autoheader. */ /* Define to empty if the keyword does not work. */ #undef const |