X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=gcc%2Fconfig%2Frs6000%2Faltivec.h;fp=gcc%2Fconfig%2Frs6000%2Faltivec.h;h=7b397997dd380f5dd4cd9bff8401847c6a0220b9;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=f1387c0c89880d7f2053df08d5b589fcca330b45;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h index f1387c0c..7b397997 100644 --- a/gcc/config/rs6000/altivec.h +++ b/gcc/config/rs6000/altivec.h @@ -1,30 +1,28 @@ /* PowerPC AltiVec include file. - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005, 2008, 2009 Free Software Foundation, Inc. Contributed by Aldy Hernandez (aldyh@redhat.com). + Rewritten by Paolo Bonzini (bonzini@gnu.org). -This file is part of GNU CC. + This file is part of GCC. -GNU CC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. -GNU CC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + GCC is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. -You should have received a copy of the GNU General Public License -along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ + Under Section 7 of GPL version 3, you are granted additional + permissions described in the GCC Runtime Library Exception, version + 3.1, as published by the Free Software Foundation. -/* As a special exception, if you include this header file into source - files compiled by GCC, this header file does not by itself cause - the resulting executable to be covered by the GNU General Public - License. This exception does not however invalidate any other - reasons why the executable file might be covered by the GNU General - Public License. */ + You should have received a copy of the GNU General Public License and + a copy of the GCC Runtime Library Exception along with this program; + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + . */ /* Implemented to conform to the specification included in the AltiVec Technology Programming Interface Manual (ALTIVECPIM/D 6/1999 Rev 0). */ @@ -32,48 +30,30 @@ Boston, MA 02111-1307, USA. */ #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))) +/* If __APPLE_ALTIVEC__ is defined, the compiler supports 'vector', + 'pixel' and 'bool' as context-sensitive AltiVec keywords (in + non-AltiVec contexts, they revert to their original meanings, + if any), so we do not need to define them as macros. */ -/* You are allowed to undef this for C++ compatability. */ +#if !defined(__APPLE_ALTIVEC__) +/* You are allowed to undef these for C++ compatibility. */ #define vector __vector +#define pixel __pixel +#define bool __bool +#endif -#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. */ - +/* Synonyms. */ #define vec_vaddcuw vec_addc #define vec_vand vec_and #define vec_vandc vec_andc @@ -116,8423 +96,382 @@ extern int __altivec_link_error_invalid_argument (); #define vec_vrfiz vec_trunc #define vec_vxor vec_xor -#ifdef __cplusplus - -/* 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)); - -/* vec_abs */ - -inline vector signed char -vec_abs (vector signed char a1) -{ - return __builtin_altivec_abs_v16qi (a1); -} - -inline vector signed short -vec_abs (vector signed short a1) -{ - return __builtin_altivec_abs_v8hi (a1); -} - -inline vector signed int -vec_abs (vector signed int a1) -{ - return __builtin_altivec_abs_v4si (a1); -} - -inline vector float -vec_abs (vector float a1) -{ - return __builtin_altivec_abs_v4sf (a1); -} - -/* vec_abss */ - -inline vector signed char -vec_abss (vector signed char a1) -{ - return __builtin_altivec_abss_v16qi (a1); -} - -inline vector signed short -vec_abss (vector signed short a1) -{ - return __builtin_altivec_abss_v8hi (a1); -} - -inline vector signed int -vec_abss (vector signed int a1) -{ - return __builtin_altivec_abss_v4si (a1); -} - -/* vec_add */ - -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) -{ - 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) -{ - 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 unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed short -vec_add (vector 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) -{ - 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) -{ - 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 unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed int -vec_add (vector 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) -{ - 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) -{ - 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 unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2); -} - -inline vector float -vec_add (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vaddfp ((vector float) a1, (vector float) a2); -} - -/* vec_vaddfp */ - -inline vector float -vec_vaddfp (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vaddfp ((vector float) a1, (vector float) a2); -} - -/* vec_vadduwm */ - -inline vector signed int -vec_vadduwm (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_vadduwm (vector signed 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_vadduwm (vector unsigned int a1, vector signed int a2) -{ - return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_vadduwm (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vadduhm */ - -inline vector signed short -vec_vadduhm (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_vadduhm (vector signed 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_vadduhm (vector unsigned short a1, vector signed short a2) -{ - return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_vadduhm (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vaddubm */ - -inline vector signed char -vec_vaddubm (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_vaddubm (vector signed 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_vaddubm (vector unsigned char a1, vector signed char a2) -{ - return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_vaddubm (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_addc */ - -inline vector unsigned int -vec_addc (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vaddcuw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_adds */ - -inline vector unsigned char -vec_adds (vector signed 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) -{ - 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 unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed char -vec_adds (vector 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) -{ - 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) -{ - 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 unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed short -vec_adds (vector 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) -{ - 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) -{ - 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 unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_adds (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vaddsws ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vaddsws */ - -inline vector signed int -vec_vaddsws (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vaddsws ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vadduws */ - -inline vector unsigned int -vec_vadduws (vector signed 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_vadduws (vector unsigned int a1, vector signed int a2) -{ - return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_vadduws (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vaddshs */ -inline vector signed short -vec_vaddshs (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vaddshs ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vadduhs */ - -inline vector unsigned short -vec_vadduhs (vector signed 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_vadduhs (vector unsigned short a1, vector signed short a2) -{ - return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_vadduhs (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vaddsbs */ - -inline vector signed char -vec_vaddsbs (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vaddsbs ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_vaddubs */ - -inline vector unsigned char -vec_vaddubs (vector signed 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_vaddubs (vector unsigned char a1, vector signed char a2) -{ - return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_vaddubs (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_and */ - -inline vector float -vec_and (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2); -} - -inline vector float -vec_and (vector float a1, vector signed 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) -{ - return (vector float) __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) -{ - return (vector signed int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_and (vector signed 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) -{ - 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 unsigned int a2) -{ - return (vector unsigned int) __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) -{ - return (vector signed short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -vec_and (vector signed 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) -{ - 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 unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed char -vec_and (vector 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) -{ - 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) -{ - 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 unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_andc */ - -inline vector float -vec_andc (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2); -} - -inline vector float -vec_andc (vector float a1, vector signed 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) -{ - return (vector float) __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) -{ - return (vector signed int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_andc (vector signed 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) -{ - 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 unsigned int a2) -{ - return (vector unsigned int) __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) -{ - return (vector signed short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -vec_andc (vector signed 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) -{ - 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 unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed char -vec_andc (vector 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) -{ - 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) -{ - 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 unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_avg */ - -inline vector unsigned char -vec_avg (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vavgub ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed char -vec_avg (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vavgsb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned short -vec_avg (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vavguh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed short -vec_avg (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vavgsh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned int -vec_avg (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vavguw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_avg (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vavgsw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vavgsw */ - -inline vector signed int -vec_vavgsw (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vavgsw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vavguw */ - -inline vector unsigned int -vec_vavguw (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vavguw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vavgsh */ - -inline vector signed short -vec_vavgsh (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vavgsh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vavguh */ - -inline vector unsigned short -vec_vavguh (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vavguh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vavgsb */ +/* Functions that are resolved by the backend to one of the + typed builtins. */ +#define vec_vaddfp __builtin_vec_vaddfp +#define vec_addc __builtin_vec_addc +#define vec_vaddsws __builtin_vec_vaddsws +#define vec_vaddshs __builtin_vec_vaddshs +#define vec_vaddsbs __builtin_vec_vaddsbs +#define vec_vavgsw __builtin_vec_vavgsw +#define vec_vavguw __builtin_vec_vavguw +#define vec_vavgsh __builtin_vec_vavgsh +#define vec_vavguh __builtin_vec_vavguh +#define vec_vavgsb __builtin_vec_vavgsb +#define vec_vavgub __builtin_vec_vavgub +#define vec_ceil __builtin_vec_ceil +#define vec_cmpb __builtin_vec_cmpb +#define vec_vcmpeqfp __builtin_vec_vcmpeqfp +#define vec_cmpge __builtin_vec_cmpge +#define vec_vcmpgtfp __builtin_vec_vcmpgtfp +#define vec_vcmpgtsw __builtin_vec_vcmpgtsw +#define vec_vcmpgtuw __builtin_vec_vcmpgtuw +#define vec_vcmpgtsh __builtin_vec_vcmpgtsh +#define vec_vcmpgtuh __builtin_vec_vcmpgtuh +#define vec_vcmpgtsb __builtin_vec_vcmpgtsb +#define vec_vcmpgtub __builtin_vec_vcmpgtub +#define vec_vcfsx __builtin_vec_vcfsx +#define vec_vcfux __builtin_vec_vcfux +#define vec_cts __builtin_vec_cts +#define vec_ctu __builtin_vec_ctu +#define vec_expte __builtin_vec_expte +#define vec_floor __builtin_vec_floor +#define vec_loge __builtin_vec_loge +#define vec_madd __builtin_vec_madd +#define vec_madds __builtin_vec_madds +#define vec_mtvscr __builtin_vec_mtvscr +#define vec_vmaxfp __builtin_vec_vmaxfp +#define vec_vmaxsw __builtin_vec_vmaxsw +#define vec_vmaxsh __builtin_vec_vmaxsh +#define vec_vmaxsb __builtin_vec_vmaxsb +#define vec_vminfp __builtin_vec_vminfp +#define vec_vminsw __builtin_vec_vminsw +#define vec_vminsh __builtin_vec_vminsh +#define vec_vminsb __builtin_vec_vminsb +#define vec_mradds __builtin_vec_mradds +#define vec_vmsumshm __builtin_vec_vmsumshm +#define vec_vmsumuhm __builtin_vec_vmsumuhm +#define vec_vmsummbm __builtin_vec_vmsummbm +#define vec_vmsumubm __builtin_vec_vmsumubm +#define vec_vmsumshs __builtin_vec_vmsumshs +#define vec_vmsumuhs __builtin_vec_vmsumuhs +#define vec_vmulesb __builtin_vec_vmulesb +#define vec_vmulesh __builtin_vec_vmulesh +#define vec_vmuleuh __builtin_vec_vmuleuh +#define vec_vmuleub __builtin_vec_vmuleub +#define vec_vmulosh __builtin_vec_vmulosh +#define vec_vmulouh __builtin_vec_vmulouh +#define vec_vmulosb __builtin_vec_vmulosb +#define vec_vmuloub __builtin_vec_vmuloub +#define vec_nmsub __builtin_vec_nmsub +#define vec_packpx __builtin_vec_packpx +#define vec_vpkswss __builtin_vec_vpkswss +#define vec_vpkuwus __builtin_vec_vpkuwus +#define vec_vpkshss __builtin_vec_vpkshss +#define vec_vpkuhus __builtin_vec_vpkuhus +#define vec_vpkswus __builtin_vec_vpkswus +#define vec_vpkshus __builtin_vec_vpkshus +#define vec_re __builtin_vec_re +#define vec_round __builtin_vec_round +#define vec_rsqrte __builtin_vec_rsqrte +#define vec_vsubfp __builtin_vec_vsubfp +#define vec_subc __builtin_vec_subc +#define vec_vsubsws __builtin_vec_vsubsws +#define vec_vsubshs __builtin_vec_vsubshs +#define vec_vsubsbs __builtin_vec_vsubsbs +#define vec_sum4s __builtin_vec_sum4s +#define vec_vsum4shs __builtin_vec_vsum4shs +#define vec_vsum4sbs __builtin_vec_vsum4sbs +#define vec_vsum4ubs __builtin_vec_vsum4ubs +#define vec_sum2s __builtin_vec_sum2s +#define vec_sums __builtin_vec_sums +#define vec_trunc __builtin_vec_trunc +#define vec_vupkhpx __builtin_vec_vupkhpx +#define vec_vupkhsh __builtin_vec_vupkhsh +#define vec_vupkhsb __builtin_vec_vupkhsb +#define vec_vupklpx __builtin_vec_vupklpx +#define vec_vupklsh __builtin_vec_vupklsh +#define vec_vupklsb __builtin_vec_vupklsb +#define vec_abs __builtin_vec_abs +#define vec_abss __builtin_vec_abss +#define vec_add __builtin_vec_add +#define vec_adds __builtin_vec_adds +#define vec_and __builtin_vec_and +#define vec_andc __builtin_vec_andc +#define vec_avg __builtin_vec_avg +#define vec_cmpeq __builtin_vec_cmpeq +#define vec_cmpgt __builtin_vec_cmpgt +#define vec_ctf __builtin_vec_ctf +#define vec_dst __builtin_vec_dst +#define vec_dstst __builtin_vec_dstst +#define vec_dststt __builtin_vec_dststt +#define vec_dstt __builtin_vec_dstt +#define vec_ld __builtin_vec_ld +#define vec_lde __builtin_vec_lde +#define vec_ldl __builtin_vec_ldl +#define vec_lvebx __builtin_vec_lvebx +#define vec_lvehx __builtin_vec_lvehx +#define vec_lvewx __builtin_vec_lvewx +/* Cell only intrinsics. */ +#ifdef __PPU__ +#define vec_lvlx __builtin_vec_lvlx +#define vec_lvlxl __builtin_vec_lvlxl +#define vec_lvrx __builtin_vec_lvrx +#define vec_lvrxl __builtin_vec_lvrxl +#endif +#define vec_lvsl __builtin_vec_lvsl +#define vec_lvsr __builtin_vec_lvsr +#define vec_max __builtin_vec_max +#define vec_mergeh __builtin_vec_mergeh +#define vec_mergel __builtin_vec_mergel +#define vec_min __builtin_vec_min +#define vec_mladd __builtin_vec_mladd +#define vec_msum __builtin_vec_msum +#define vec_msums __builtin_vec_msums +#define vec_mule __builtin_vec_mule +#define vec_mulo __builtin_vec_mulo +#define vec_nor __builtin_vec_nor +#define vec_or __builtin_vec_or +#define vec_pack __builtin_vec_pack +#define vec_packs __builtin_vec_packs +#define vec_packsu __builtin_vec_packsu +#define vec_perm __builtin_vec_perm +#define vec_rl __builtin_vec_rl +#define vec_sel __builtin_vec_sel +#define vec_sl __builtin_vec_sl +#define vec_sld __builtin_vec_sld +#define vec_sll __builtin_vec_sll +#define vec_slo __builtin_vec_slo +#define vec_splat __builtin_vec_splat +#define vec_sr __builtin_vec_sr +#define vec_sra __builtin_vec_sra +#define vec_srl __builtin_vec_srl +#define vec_sro __builtin_vec_sro +#define vec_st __builtin_vec_st +#define vec_ste __builtin_vec_ste +#define vec_stl __builtin_vec_stl +#define vec_stvebx __builtin_vec_stvebx +#define vec_stvehx __builtin_vec_stvehx +#define vec_stvewx __builtin_vec_stvewx +/* Cell only intrinsics. */ +#ifdef __PPU__ +#define vec_stvlx __builtin_vec_stvlx +#define vec_stvlxl __builtin_vec_stvlxl +#define vec_stvrx __builtin_vec_stvrx +#define vec_stvrxl __builtin_vec_stvrxl +#endif +#define vec_sub __builtin_vec_sub +#define vec_subs __builtin_vec_subs +#define vec_sum __builtin_vec_sum +#define vec_unpackh __builtin_vec_unpackh +#define vec_unpackl __builtin_vec_unpackl +#define vec_vaddubm __builtin_vec_vaddubm +#define vec_vaddubs __builtin_vec_vaddubs +#define vec_vadduhm __builtin_vec_vadduhm +#define vec_vadduhs __builtin_vec_vadduhs +#define vec_vadduwm __builtin_vec_vadduwm +#define vec_vadduws __builtin_vec_vadduws +#define vec_vcmpequb __builtin_vec_vcmpequb +#define vec_vcmpequh __builtin_vec_vcmpequh +#define vec_vcmpequw __builtin_vec_vcmpequw +#define vec_vmaxub __builtin_vec_vmaxub +#define vec_vmaxuh __builtin_vec_vmaxuh +#define vec_vmaxuw __builtin_vec_vmaxuw +#define vec_vminub __builtin_vec_vminub +#define vec_vminuh __builtin_vec_vminuh +#define vec_vminuw __builtin_vec_vminuw +#define vec_vmrghb __builtin_vec_vmrghb +#define vec_vmrghh __builtin_vec_vmrghh +#define vec_vmrghw __builtin_vec_vmrghw +#define vec_vmrglb __builtin_vec_vmrglb +#define vec_vmrglh __builtin_vec_vmrglh +#define vec_vmrglw __builtin_vec_vmrglw +#define vec_vpkuhum __builtin_vec_vpkuhum +#define vec_vpkuwum __builtin_vec_vpkuwum +#define vec_vrlb __builtin_vec_vrlb +#define vec_vrlh __builtin_vec_vrlh +#define vec_vrlw __builtin_vec_vrlw +#define vec_vslb __builtin_vec_vslb +#define vec_vslh __builtin_vec_vslh +#define vec_vslw __builtin_vec_vslw +#define vec_vspltb __builtin_vec_vspltb +#define vec_vsplth __builtin_vec_vsplth +#define vec_vspltw __builtin_vec_vspltw +#define vec_vsrab __builtin_vec_vsrab +#define vec_vsrah __builtin_vec_vsrah +#define vec_vsraw __builtin_vec_vsraw +#define vec_vsrb __builtin_vec_vsrb +#define vec_vsrh __builtin_vec_vsrh +#define vec_vsrw __builtin_vec_vsrw +#define vec_vsububs __builtin_vec_vsububs +#define vec_vsububm __builtin_vec_vsububm +#define vec_vsubuhm __builtin_vec_vsubuhm +#define vec_vsubuhs __builtin_vec_vsubuhs +#define vec_vsubuwm __builtin_vec_vsubuwm +#define vec_vsubuws __builtin_vec_vsubuws +#define vec_xor __builtin_vec_xor + +#define vec_extract __builtin_vec_extract +#define vec_insert __builtin_vec_insert +#define vec_splats __builtin_vec_splats +#define vec_promote __builtin_vec_promote + +/* Predicates. + For C++, we use templates in order to allow non-parenthesized arguments. + For C, instead, we use macros since non-parenthesized arguments were + not allowed even in older GCC implementation of AltiVec. + + In the future, we may add more magic to the back-end, so that no + one- or two-argument macros are used. */ + +#ifdef __cplusplus__ +#define __altivec_unary_pred(NAME, CALL) \ +template int NAME (T a1) { return CALL; } + +#define __altivec_scalar_pred(NAME, CALL) \ +template int NAME (T a1, U a2) { return CALL; } + +/* Given the vec_step of a type, return the corresponding bool type. */ +template class __altivec_bool_ret { }; +template <> class __altivec_bool_ret <4> { + typedef __vector __bool int __ret; +}; +template <> class __altivec_bool_ret <8> { + typedef __vector __bool short __ret; +}; +template <> class __altivec_bool_ret <16> { + typedef __vector __bool char __ret; +}; -inline vector signed char -vec_vavgsb (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vavgsb ((vector signed char) a1, (vector signed char) a2); -} +/* Be very liberal in the pairs we accept. Mistakes such as passing + a `vector char' and `vector short' will be caught by the middle-end, + while any attempt to detect them here would produce hard to understand + error messages involving the implementation details of AltiVec. */ +#define __altivec_binary_pred(NAME, CALL) \ +template \ +typename __altivec_bool_ret ::__ret \ +NAME (T a1, U a2) \ +{ \ + return CALL; \ +} + +__altivec_binary_pred(vec_cmplt, + __builtin_vec_cmpgt (a2, a1)) +__altivec_binary_pred(vec_cmple, + __builtin_vec_cmpge (a2, a1)) + +__altivec_scalar_pred(vec_all_in, + __builtin_altivec_vcmpbfp_p (__CR6_EQ, a1, a2)) +__altivec_scalar_pred(vec_any_out, + __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, a1, a2)) + +__altivec_unary_pred(vec_all_nan, + __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, a1)) +__altivec_unary_pred(vec_any_nan, + __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a1)) + +__altivec_unary_pred(vec_all_numeric, + __builtin_altivec_vcmpeqfp_p (__CR6_LT, a1, a1)) +__altivec_unary_pred(vec_any_numeric, + __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, a1, a1)) + +__altivec_scalar_pred(vec_all_eq, + __builtin_vec_vcmpeq_p (__CR6_LT, a1, a2)) +__altivec_scalar_pred(vec_all_ne, + __builtin_vec_vcmpeq_p (__CR6_EQ, a1, a2)) +__altivec_scalar_pred(vec_any_eq, + __builtin_vec_vcmpeq_p (__CR6_EQ_REV, a1, a2)) +__altivec_scalar_pred(vec_any_ne, + __builtin_vec_vcmpeq_p (__CR6_LT_REV, a1, a2)) + +__altivec_scalar_pred(vec_all_gt, + __builtin_vec_vcmpgt_p (__CR6_LT, a1, a2)) +__altivec_scalar_pred(vec_all_lt, + __builtin_vec_vcmpgt_p (__CR6_LT, a2, a1)) +__altivec_scalar_pred(vec_any_gt, + __builtin_vec_vcmpgt_p (__CR6_EQ_REV, a1, a2)) +__altivec_scalar_pred(vec_any_lt, + __builtin_vec_vcmpgt_p (__CR6_EQ_REV, a2, a1)) + +__altivec_scalar_pred(vec_all_ngt, + __builtin_altivec_vcmpgtfp_p (__CR6_EQ, a1, a2)) +__altivec_scalar_pred(vec_all_nlt, + __builtin_altivec_vcmpgtfp_p (__CR6_EQ, a2, a1)) +__altivec_scalar_pred(vec_any_ngt, + __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, a1, a2)) +__altivec_scalar_pred(vec_any_nlt, + __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, a2, a1)) + +/* __builtin_vec_vcmpge_p is vcmpgefp for floating-point vector types, + while for integer types it is converted to __builtin_vec_vcmpgt_p, + with inverted args and condition code. */ +__altivec_scalar_pred(vec_all_le, + __builtin_vec_vcmpge_p (__CR6_LT, a2, a1)) +__altivec_scalar_pred(vec_all_ge, + __builtin_vec_vcmpge_p (__CR6_LT, a1, a2)) +__altivec_scalar_pred(vec_any_le, + __builtin_vec_vcmpge_p (__CR6_EQ_REV, a2, a1)) +__altivec_scalar_pred(vec_any_ge, + __builtin_vec_vcmpge_p (__CR6_EQ_REV, a1, a2)) + +__altivec_scalar_pred(vec_all_nge, + __builtin_altivec_vcmpgefp_p (__CR6_EQ, a1, a2)) +__altivec_scalar_pred(vec_all_nle, + __builtin_altivec_vcmpgefp_p (__CR6_EQ, a2, a1)) +__altivec_scalar_pred(vec_any_nge, + __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a1, a2)) +__altivec_scalar_pred(vec_any_nle, + __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a2, a1)) + +#undef __altivec_scalar_pred +#undef __altivec_unary_pred +#undef __altivec_binary_pred +#else +#define vec_cmplt(a1, a2) __builtin_vec_cmpgt ((a2), (a1)) +#define vec_cmple(a1, a2) __builtin_vec_cmpge ((a2), (a1)) -/* vec_vavgub */ +#define vec_all_in(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ, (a1), (a2)) +#define vec_any_out(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, (a1), (a2)) -inline vector unsigned char -vec_vavgub (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vavgub ((vector signed char) a1, (vector signed char) a2); -} +#define vec_all_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1)) +#define vec_any_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, (a1), (a1)) -/* vec_ceil */ +#define vec_all_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT, (a1), (a1)) +#define vec_any_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (a1), (a1)) -inline vector float -vec_ceil (vector float a1) -{ - return (vector float) __builtin_altivec_vrfip ((vector float) a1); -} +#define vec_all_eq(a1, a2) __builtin_vec_vcmpeq_p (__CR6_LT, (a1), (a2)) +#define vec_all_ne(a1, a2) __builtin_vec_vcmpeq_p (__CR6_EQ, (a1), (a2)) +#define vec_any_eq(a1, a2) __builtin_vec_vcmpeq_p (__CR6_EQ_REV, (a1), (a2)) +#define vec_any_ne(a1, a2) __builtin_vec_vcmpeq_p (__CR6_LT_REV, (a1), (a2)) -/* vec_cmpb */ +#define vec_all_gt(a1, a2) __builtin_vec_vcmpgt_p (__CR6_LT, (a1), (a2)) +#define vec_all_lt(a1, a2) __builtin_vec_vcmpgt_p (__CR6_LT, (a2), (a1)) +#define vec_any_gt(a1, a2) __builtin_vec_vcmpgt_p (__CR6_EQ_REV, (a1), (a2)) +#define vec_any_lt(a1, a2) __builtin_vec_vcmpgt_p (__CR6_EQ_REV, (a2), (a1)) -inline vector signed int -vec_cmpb (vector float a1, vector float a2) -{ - return (vector signed int) __builtin_altivec_vcmpbfp ((vector float) a1, (vector float) a2); -} +#define vec_all_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a1), (a2)) +#define vec_all_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a2), (a1)) +#define vec_any_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a1), (a2)) +#define vec_any_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a2), (a1)) -/* vec_cmpeq */ +/* __builtin_vec_vcmpge_p is vcmpgefp for floating-point vector types, + while for integer types it is converted to __builtin_vec_vcmpgt_p, + with inverted args and condition code. */ +#define vec_all_le(a1, a2) __builtin_vec_vcmpge_p (__CR6_LT, (a2), (a1)) +#define vec_all_ge(a1, a2) __builtin_vec_vcmpge_p (__CR6_LT, (a1), (a2)) +#define vec_any_le(a1, a2) __builtin_vec_vcmpge_p (__CR6_EQ_REV, (a2), (a1)) +#define vec_any_ge(a1, a2) __builtin_vec_vcmpge_p (__CR6_EQ_REV, (a1), (a2)) -inline vector signed 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); -} - -inline vector signed 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); -} - -inline vector signed 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); -} - -inline vector signed 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); -} - -inline vector signed 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); -} - -inline vector signed 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); -} - -inline vector signed int -vec_cmpeq (vector float a1, vector float a2) -{ - return (vector signed int) __builtin_altivec_vcmpeqfp ((vector float) a1, (vector float) a2); -} - -/* vec_vcmpeqfp */ - -inline vector signed int -vec_vcmpeqfp (vector float a1, vector float a2) -{ - return (vector signed int) __builtin_altivec_vcmpeqfp ((vector float) a1, (vector float) a2); -} - -/* vec_vcmpequw */ - -inline vector signed int -vec_vcmpequw (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_vcmpequw (vector unsigned int a1, vector unsigned int a2) -{ - return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vcmpequh */ - -inline vector signed short -vec_vcmpequh (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed short -vec_vcmpequh (vector unsigned short a1, vector unsigned short a2) -{ - return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vcmpequb */ - -inline vector signed char -vec_vcmpequb (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed char -vec_vcmpequb (vector unsigned char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_cmpge */ - -inline vector signed int -vec_cmpge (vector float a1, vector float a2) -{ - return (vector signed int) __builtin_altivec_vcmpgefp ((vector float) a1, (vector float) a2); -} - -/* vec_cmpgt */ - -inline vector signed 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); -} - -inline vector signed 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); -} - -inline vector signed 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); -} - -inline vector signed 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); -} - -inline vector signed 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); -} - -inline vector signed 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); -} - -inline vector signed int -vec_cmpgt (vector float a1, vector float a2) -{ - return (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2); -} - -/* vec_vcmpgtfp */ - -inline vector signed int -vec_vcmpgtfp (vector float a1, vector float a2) -{ - return (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2); -} - -/* vec_vcmpgtsw */ - -inline vector signed int -vec_vcmpgtsw (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vcmpgtuw */ - -inline vector signed int -vec_vcmpgtuw (vector unsigned int a1, vector unsigned int a2) -{ - return (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vcmpgtsh */ - -inline vector signed short -vec_cmpgtsh (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vcmpgtuh */ - -inline vector signed short -vec_vcmpgtuh (vector unsigned short a1, vector unsigned short a2) -{ - return (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vcmpgtsb */ - -inline vector signed char -vec_vcmpgtsb (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_vcmpgtub */ - -inline vector signed char -vec_vcmpgtub (vector unsigned char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_cmple */ - -inline vector signed int -vec_cmple (vector float a1, vector float a2) -{ - return (vector signed int) __builtin_altivec_vcmpgefp ((vector float) a1, (vector float) a2); -} - -/* vec_cmplt */ - -inline vector signed char -vec_cmplt (vector unsigned char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed char -vec_cmplt (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed short -vec_cmplt (vector unsigned short a1, vector unsigned short a2) -{ - return (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed short -vec_cmplt (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed int -vec_cmplt (vector unsigned int a1, vector unsigned int a2) -{ - return (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_cmplt (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_cmplt (vector float a1, vector float a2) -{ - return (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2); -} - -/* vec_ctf */ - -inline vector float -vec_ctf (vector unsigned int a1, const char a2) -{ - return (vector float) __builtin_altivec_vcfux ((vector signed int) a1, a2); -} - -inline vector float -vec_ctf (vector signed int a1, const char a2) -{ - return (vector float) __builtin_altivec_vcfsx ((vector signed int) a1, a2); -} - -/* vec_vcfsx */ - -inline vector float -vec_vcfsx (vector signed int a1, const char a2) -{ - return (vector float) __builtin_altivec_vcfsx ((vector signed int) a1, a2); -} - -/* vec_vcfux */ - -inline vector float -vec_vcfux (vector unsigned int a1, const char a2) -{ - return (vector float) __builtin_altivec_vcfux ((vector signed int) a1, a2); -} - -/* vec_cts */ - -inline vector signed int -vec_cts (vector float a1, const char a2) -{ - return (vector signed int) __builtin_altivec_vctsxs ((vector float) a1, a2); -} - -/* vec_ctu */ - -inline vector unsigned int -vec_ctu (vector float a1, const char a2) -{ - return (vector unsigned int) __builtin_altivec_vctuxs ((vector float) a1, a2); -} - -/* vec_dss */ - -inline void -vec_dss (const char a1) -{ - __builtin_altivec_dss (a1); -} - -/* vec_dssall */ - -inline void -vec_dssall () -{ - __builtin_altivec_dssall (); -} - -/* vec_dst */ - -inline void -vec_dst (vector unsigned char *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (vector signed char *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (vector unsigned short *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (vector signed short *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (vector unsigned int *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (vector signed int *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (vector float *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (unsigned char *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (signed char *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (unsigned short *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (signed short *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (unsigned int *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (signed int *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (unsigned long *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (signed long *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -inline void -vec_dst (float *a1, int a2, const char a3) -{ - __builtin_altivec_dst ((void *) a1, a2, a3); -} - -/* vec_dstst */ - -inline void -vec_dstst (vector unsigned char *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (vector signed char *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (vector unsigned short *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (vector signed short *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (vector unsigned int *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (vector signed int *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (vector float *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (unsigned char *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (signed char *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (unsigned short *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (signed short *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (unsigned int *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (signed int *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (unsigned long *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (signed long *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -inline void -vec_dstst (float *a1, int a2, const char a3) -{ - __builtin_altivec_dstst ((void *) a1, a2, a3); -} - -/* vec_dststt */ - -inline void -vec_dststt (vector unsigned char *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (vector signed char *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (vector unsigned short *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (vector signed short *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (vector unsigned int *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (vector signed int *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (vector float *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (unsigned char *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (signed char *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (unsigned short *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (signed short *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (unsigned int *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (signed int *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (unsigned long *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (signed long *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -inline void -vec_dststt (float *a1, int a2, const char a3) -{ - __builtin_altivec_dststt ((void *) a1, a2, a3); -} - -/* vec_dstt */ - -inline void -vec_dstt (vector unsigned char *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (vector signed char *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (vector unsigned short *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (vector signed short *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (vector unsigned int *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (vector signed int *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (vector float *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (unsigned char *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (signed char *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (unsigned short *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (signed short *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (unsigned int *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (signed int *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (unsigned long *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (signed long *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -inline void -vec_dstt (float *a1, int a2, const char a3) -{ - __builtin_altivec_dstt ((void *) a1, a2, a3); -} - -/* vec_expte */ - -inline vector float -vec_expte (vector float a1) -{ - return (vector float) __builtin_altivec_vexptefp ((vector float) a1); -} - -/* vec_floor */ - -inline vector float -vec_floor (vector float a1) -{ - return (vector float) __builtin_altivec_vrfim ((vector float) a1); -} - -/* vec_ld */ - -inline vector float -vec_ld (int a1, vector float *a2) -{ - return (vector float) __builtin_altivec_lvx (a1, (void *) a2); -} - -inline vector float -vec_ld (int a1, float *a2) -{ - return (vector float) __builtin_altivec_lvx (a1, (void *) a2); -} - -inline vector signed int -vec_ld (int a1, 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) -{ - return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2); -} - -inline vector signed int -vec_ld (int a1, signed long *a2) -{ - return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2); -} - -inline vector unsigned int -vec_ld (int a1, 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) -{ - return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2); -} - -inline vector unsigned int -vec_ld (int a1, unsigned long *a2) -{ - return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2); -} - -inline vector signed short -vec_ld (int a1, 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) -{ - return (vector signed short) __builtin_altivec_lvx (a1, (void *) a2); -} - -inline vector unsigned short -vec_ld (int a1, 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) -{ - return (vector unsigned short) __builtin_altivec_lvx (a1, (void *) a2); -} - -inline vector signed char -vec_ld (int a1, 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) -{ - return (vector signed char) __builtin_altivec_lvx (a1, (void *) a2); -} - -inline vector unsigned char -vec_ld (int a1, 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) -{ - return (vector unsigned char) __builtin_altivec_lvx (a1, (void *) a2); -} - -/* vec_lde */ - -inline vector signed char -vec_lde (int a1, signed char *a2) -{ - return (vector signed char) __builtin_altivec_lvebx (a1, (void *) a2); -} - -inline vector unsigned char -vec_lde (int a1, unsigned char *a2) -{ - return (vector unsigned char) __builtin_altivec_lvebx (a1, (void *) a2); -} - -inline vector signed short -vec_lde (int a1, signed short *a2) -{ - return (vector signed short) __builtin_altivec_lvehx (a1, (void *) a2); -} - -inline vector unsigned short -vec_lde (int a1, unsigned short *a2) -{ - return (vector unsigned short) __builtin_altivec_lvehx (a1, (void *) a2); -} - -inline vector float -vec_lde (int a1, float *a2) -{ - return (vector float) __builtin_altivec_lvewx (a1, (void *) a2); -} - -inline vector signed int -vec_lde (int a1, signed int *a2) -{ - return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2); -} - -inline vector unsigned int -vec_lde (int a1, unsigned int *a2) -{ - return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2); -} - -inline vector signed int -vec_lde (int a1, signed long *a2) -{ - return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2); -} - -inline vector unsigned int -vec_lde (int a1, unsigned long *a2) -{ - return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2); -} - -/* vec_lvewx */ - -inline vector float -vec_lvewx (int a1, float *a2) -{ - return (vector float) __builtin_altivec_lvewx (a1, (void *) a2); -} - -inline vector signed int -vec_lvewx (int a1, signed int *a2) -{ - return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2); -} - -inline vector unsigned int -vec_lvewx (int a1, unsigned int *a2) -{ - return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2); -} - -inline vector signed int -vec_lvewx (int a1, signed long *a2) -{ - return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2); -} - -inline vector unsigned int -vec_lvewx (int a1, unsigned long *a2) -{ - return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2); -} - -/* vec_lvehx */ - -inline vector signed short -vec_lvehx (int a1, signed short *a2) -{ - return (vector signed short) __builtin_altivec_lvehx (a1, (void *) a2); -} - -inline vector unsigned short -vec_lvehx (int a1, unsigned short *a2) -{ - return (vector unsigned short) __builtin_altivec_lvehx (a1, (void *) a2); -} - -/* vec_lvebx */ - -inline vector signed char -vec_lvebx (int a1, signed char *a2) -{ - return (vector signed char) __builtin_altivec_lvebx (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvebx (int a1, unsigned char *a2) -{ - return (vector unsigned char) __builtin_altivec_lvebx (a1, (void *) a2); -} - -/* vec_ldl */ - -inline vector float -vec_ldl (int a1, vector float *a2) -{ - return (vector float) __builtin_altivec_lvxl (a1, (void *) a2); -} - -inline vector float -vec_ldl (int a1, float *a2) -{ - return (vector float) __builtin_altivec_lvxl (a1, (void *) a2); -} - -inline vector signed int -vec_ldl (int a1, 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) -{ - return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2); -} - -inline vector signed int -vec_ldl (int a1, signed long *a2) -{ - return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2); -} - -inline vector unsigned int -vec_ldl (int a1, 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) -{ - return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2); -} - -inline vector unsigned int -vec_ldl (int a1, unsigned long *a2) -{ - return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2); -} - -inline vector signed short -vec_ldl (int a1, 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) -{ - return (vector signed short) __builtin_altivec_lvxl (a1, (void *) a2); -} - -inline vector unsigned short -vec_ldl (int a1, 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) -{ - return (vector unsigned short) __builtin_altivec_lvxl (a1, (void *) a2); -} - -inline vector signed char -vec_ldl (int a1, 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) -{ - return (vector signed char) __builtin_altivec_lvxl (a1, (void *) a2); -} - -inline vector unsigned char -vec_ldl (int a1, 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) -{ - return (vector unsigned char) __builtin_altivec_lvxl (a1, (void *) a2); -} - -/* vec_loge */ - -inline vector float -vec_loge (vector float a1) -{ - return (vector float) __builtin_altivec_vlogefp ((vector float) a1); -} - -/* vec_lvsl */ - -inline vector unsigned char -vec_lvsl (int a1, unsigned char *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsl (int a1, signed char *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsl (int a1, unsigned short *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsl (int a1, signed short *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsl (int a1, unsigned int *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsl (int a1, signed int *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsl (int a1, unsigned long *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsl (int a1, signed long *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsl (int a1, float *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2); -} - -/* vec_lvsr */ - -inline vector unsigned char -vec_lvsr (int a1, unsigned char *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsr (int a1, signed char *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsr (int a1, unsigned short *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsr (int a1, signed short *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsr (int a1, unsigned int *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsr (int a1, signed int *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsr (int a1, unsigned long *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsr (int a1, signed long *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2); -} - -inline vector unsigned char -vec_lvsr (int a1, float *a2) -{ - return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2); -} - -/* vec_madd */ - -inline vector float -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 -vec_madds (vector signed short a1, vector signed short a2, vector signed short a3) -{ - return (vector signed short) __builtin_altivec_vmhaddshs ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3); -} - -/* vec_max */ - -inline vector unsigned char -vec_max (vector signed 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) -{ - 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 unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed char -vec_max (vector 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) -{ - 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) -{ - 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 unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed short -vec_max (vector 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) -{ - 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) -{ - 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 unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_max (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vmaxsw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector float -vec_max (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vmaxfp ((vector float) a1, (vector float) a2); -} - -/* vec_vmaxfp */ - -inline vector float -vec_vmaxfp (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vmaxfp ((vector float) a1, (vector float) a2); -} - -/* vec_vmaxsw */ - -inline vector signed int -vec_vmaxsw (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vmaxsw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vmaxuw */ - -inline vector unsigned int -vec_vmaxuw (vector signed 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_vmaxuw (vector unsigned int a1, vector signed int a2) -{ - return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_vmaxuw (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vmaxsh */ - -inline vector signed short -vec_vmaxsh (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vmaxsh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vmaxuh */ - -inline vector unsigned short -vec_vmaxuh (vector signed 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_vmaxuh (vector unsigned short a1, vector signed short a2) -{ - return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_vmaxuh (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vmaxsb */ - -inline vector signed char -vec_vmaxsb (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vmaxsb ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_vmaxub */ - -inline vector unsigned char -vec_vmaxub (vector signed 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_vmaxub (vector unsigned char a1, vector signed char a2) -{ - return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_vmaxub (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_mergeh */ - -inline vector signed char -vec_mergeh (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -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 signed short -vec_mergeh (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_mergeh (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector float -vec_mergeh (vector float a1, vector float a2) -{ - return (vector float) __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) -{ - return (vector signed int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_mergeh (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vmrghw */ - -inline vector float -vec_vmrghw (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_vmrghw (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_vmrghw (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vmrghh */ - -inline vector signed short -vec_vmrghh (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_vmrghh (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vmrghb */ - -inline vector signed char -vec_vmrghb (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_vmrghb (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_mergel */ - -inline vector signed char -vec_mergel (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -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 signed short -vec_mergel (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_mergel (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector float -vec_mergel (vector float a1, vector float a2) -{ - return (vector float) __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) -{ - return (vector signed int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_mergel (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vmrglw */ - -inline vector float -vec_vmrglw (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_vmrglw (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_vmrglw (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vmrglh */ - -inline vector signed short -vec_vmrglh (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_vmrglh (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vmrglb */ - -inline vector signed char -vec_vmrglb (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_vmrglb (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_mfvscr */ - -inline vector unsigned short -vec_mfvscr () -{ - return (vector unsigned short) __builtin_altivec_mfvscr (); -} - -/* vec_min */ - -inline vector unsigned char -vec_min (vector signed 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) -{ - 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 unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed char -vec_min (vector 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) -{ - 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) -{ - 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 unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed short -vec_min (vector 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) -{ - 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) -{ - 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 unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_min (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vminsw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector float -vec_min (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vminfp ((vector float) a1, (vector float) a2); -} - -/* vec_vminfp */ - -inline vector float -vec_vminfp (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vminfp ((vector float) a1, (vector float) a2); -} - -/* vec_vminsw */ - -inline vector signed int -vec_vminsw (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vminsw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vminuw */ - -inline vector unsigned int -vec_vminuw (vector signed 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_vminuw (vector unsigned int a1, vector signed int a2) -{ - return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_vminuw (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vminsh */ - -inline vector signed short -vec_vminsh (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vminsh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vminuh */ - -inline vector unsigned short -vec_vminuh (vector signed 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_vminuh (vector unsigned short a1, vector signed short a2) -{ - return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_vminuh (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vminsb */ - -inline vector signed char -vec_vminsb (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vminsb ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_vminub */ - -inline vector unsigned char -vec_vminub (vector signed 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_vminub (vector unsigned char a1, vector signed char a2) -{ - return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_vminub (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_mladd */ - -inline vector signed short -vec_mladd (vector signed short a1, vector signed short a2, vector signed short a3) -{ - return (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3); -} - -inline vector signed short -vec_mladd (vector signed short a1, vector unsigned short a2, vector unsigned short a3) -{ - return (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3); -} - -inline vector signed short -vec_mladd (vector unsigned short a1, vector signed short a2, vector signed short a3) -{ - return (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3); -} - -inline vector unsigned short -vec_mladd (vector unsigned short a1, vector unsigned short a2, vector unsigned short a3) -{ - return (vector unsigned short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3); -} - -/* vec_mradds */ - -inline vector signed short -vec_mradds (vector signed short a1, vector signed short a2, vector signed short a3) -{ - return (vector signed short) __builtin_altivec_vmhraddshs ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3); -} - -/* vec_msum */ - -inline vector unsigned int -vec_msum (vector unsigned char a1, vector unsigned char a2, vector unsigned int a3) -{ - return (vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3); -} - -inline vector signed int -vec_msum (vector signed char a1, vector unsigned char a2, vector signed int a3) -{ - return (vector signed int) __builtin_altivec_vmsummbm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3); -} - -inline vector unsigned int -vec_msum (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3) -{ - return (vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3); -} - -inline vector signed int -vec_msum (vector signed short a1, vector signed short a2, vector signed int a3) -{ - return (vector signed int) __builtin_altivec_vmsumshm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3); -} - -/* vec_vmsumshm */ - -inline vector signed int -vec_vmsumshm (vector signed short a1, vector signed short a2, vector signed int a3) -{ - return (vector signed int) __builtin_altivec_vmsumshm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3); -} - -/* vec_vmsumuhm */ - -inline vector unsigned int -vec_vmsumuhm (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3) -{ - return (vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3); -} - -/* vec_vmsummbm */ - -inline vector signed int -vec_vmsummbm (vector signed char a1, vector unsigned char a2, vector signed int a3) -{ - return (vector signed int) __builtin_altivec_vmsummbm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3); -} - -/* vec_vmsumubm */ - -inline vector unsigned int -vec_vmsumubm (vector unsigned char a1, vector unsigned char a2, vector unsigned int a3) -{ - return (vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3); -} - -/* vec_msums */ - -inline vector unsigned int -vec_msums (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3) -{ - return (vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3); -} - -inline vector signed int -vec_msums (vector signed short a1, vector signed short a2, vector signed int a3) -{ - return (vector signed int) __builtin_altivec_vmsumshs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3); -} - -/* vec_vmsumshs */ - -inline vector signed int -vec_vmsumshs (vector signed short a1, vector signed short a2, vector signed int a3) -{ - return (vector signed int) __builtin_altivec_vmsumshs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3); -} - -/* vec_vmsumuhs */ - -inline vector unsigned int -vec_vmsumuhs (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3) -{ - return (vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3); -} - -/* vec_mtvscr */ - -inline void -vec_mtvscr (vector signed int a1) -{ - __builtin_altivec_mtvscr ((vector signed int) a1); -} - -inline void -vec_mtvscr (vector unsigned int a1) -{ - __builtin_altivec_mtvscr ((vector signed int) a1); -} - -inline void -vec_mtvscr (vector signed short a1) -{ - __builtin_altivec_mtvscr ((vector signed int) a1); -} - -inline void -vec_mtvscr (vector unsigned short a1) -{ - __builtin_altivec_mtvscr ((vector signed int) a1); -} - -inline void -vec_mtvscr (vector signed char a1) -{ - __builtin_altivec_mtvscr ((vector signed int) a1); -} - -inline void -vec_mtvscr (vector unsigned char a1) -{ - __builtin_altivec_mtvscr ((vector signed int) a1); -} - -/* vec_mule */ - -inline vector unsigned short -vec_mule (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed short -vec_mule (vector signed char a1, vector signed char a2) -{ - return (vector signed short) __builtin_altivec_vmulesb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned int -vec_mule (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed int -vec_mule (vector signed short a1, vector signed short a2) -{ - return (vector signed int) __builtin_altivec_vmulesh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vmulesh */ - -inline vector signed int -vec_vmulesh (vector signed short a1, vector signed short a2) -{ - return (vector signed int) __builtin_altivec_vmulesh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vmuleuh */ - -inline vector unsigned int -vec_vmuleuh (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vmuleub */ -inline vector unsigned short -vec_vmuleub (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_mulo */ - -inline vector unsigned short -vec_mulo (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed short -vec_mulo (vector signed char a1, vector signed char a2) -{ - return (vector signed short) __builtin_altivec_vmulosb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned int -vec_mulo (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed int -vec_mulo (vector signed short a1, vector signed short a2) -{ - return (vector signed int) __builtin_altivec_vmulosh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vmulosh */ - -inline vector signed int -vec_vmulosh (vector signed short a1, vector signed short a2) -{ - return (vector signed int) __builtin_altivec_vmulosh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vmulouh */ - -inline vector unsigned int -vec_vmulouh (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vmulosb */ - -inline vector signed short -vec_vmulosb (vector signed char a1, vector signed char a2) -{ - return (vector signed short) __builtin_altivec_vmulosb ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_vmuloub */ - -inline vector unsigned short -vec_vmuloub (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_nmsub */ - -inline vector float -vec_nmsub (vector float a1, vector float a2, vector float a3) -{ - return (vector float) __builtin_altivec_vnmsubfp ((vector float) a1, (vector float) a2, (vector float) a3); -} - -/* vec_nor */ - -inline vector float -vec_nor (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_nor (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -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 signed short -vec_nor (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -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 signed char -vec_nor (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned char -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); -} - -/* vec_or */ - -inline vector float -vec_or (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2); -} - -inline vector float -vec_or (vector float a1, vector signed 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) -{ - return (vector float) __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) -{ - return (vector signed int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_or (vector signed 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) -{ - 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 unsigned int a2) -{ - return (vector unsigned int) __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) -{ - return (vector signed short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -vec_or (vector signed 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) -{ - 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 unsigned short a2) -{ - return (vector unsigned short) __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) -{ - 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) -{ - 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 unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_pack */ - -inline vector signed char -vec_pack (vector signed short a1, vector signed short a2) -{ - return (vector signed char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned char -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 signed short -vec_pack (vector signed int a1, vector signed int a2) -{ - return (vector signed short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -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); -} - -/* vec_vpkuwum */ - -inline vector signed short -vec_vpkuwum (vector signed int a1, vector signed int a2) -{ - return (vector signed short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -vec_vpkuwum (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vpkuhum */ - -inline vector signed char -vec_vpkuhum (vector signed short a1, vector signed short a2) -{ - return (vector signed char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned char -vec_vpkuhum (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_packpx */ - -inline vector unsigned short -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); -} - -/* vec_packs */ - -inline vector unsigned char -vec_packs (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed char -vec_packs (vector signed short a1, vector signed short a2) -{ - return (vector signed char) __builtin_altivec_vpkshss ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_packs (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed short -vec_packs (vector signed int a1, vector signed int a2) -{ - return (vector signed short) __builtin_altivec_vpkswss ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vpkswss */ - -inline vector signed short -vec_vpkswss (vector signed int a1, vector signed int a2) -{ - return (vector signed short) __builtin_altivec_vpkswss ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vpkuwus */ - -inline vector unsigned short -vec_vpkuwus (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vpkshss */ - -inline vector signed char -vec_vpkshss (vector signed short a1, vector signed short a2) -{ - return (vector signed char) __builtin_altivec_vpkshss ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vpkuhus */ - -inline vector unsigned char -vec_vpkuhus (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_packsu */ - -inline vector unsigned char -vec_packsu (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned char -vec_packsu (vector signed short a1, vector signed short a2) -{ - return (vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_packsu (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -vec_packsu (vector signed int a1, vector signed int a2) -{ - return (vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vpkswus */ - -inline vector unsigned short -vec_vpkswus (vector signed int a1, vector signed int a2) -{ - return (vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vpkshus */ - -inline vector unsigned char -vec_vpkshus (vector signed short a1, vector signed short a2) -{ - return (vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_perm */ - -inline vector float -vec_perm (vector float a1, vector float a2, vector unsigned char a3) -{ - return (vector float) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3); -} - -inline vector signed int -vec_perm (vector signed int a1, vector signed int a2, vector unsigned char a3) -{ - return (vector signed int) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3); -} - -inline vector unsigned int -vec_perm (vector unsigned int a1, vector unsigned int a2, vector unsigned char a3) -{ - return (vector unsigned 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) -{ - return (vector signed short) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3); -} - -inline vector unsigned short -vec_perm (vector unsigned short a1, vector unsigned short a2, vector unsigned char a3) -{ - return (vector unsigned short) __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) -{ - return (vector signed char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3); -} - -inline vector unsigned char -vec_perm (vector unsigned char a1, vector unsigned char a2, vector unsigned char a3) -{ - return (vector unsigned char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3); -} - -/* vec_re */ - -inline vector float -vec_re (vector float a1) -{ - return (vector float) __builtin_altivec_vrefp ((vector float) a1); -} - -/* vec_rl */ - -inline vector signed char -vec_rl (vector signed char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_rl (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed short -vec_rl (vector signed short a1, vector unsigned short a2) -{ - return (vector signed short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_rl (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed int -vec_rl (vector signed int a1, vector unsigned int a2) -{ - return (vector signed int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_rl (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vrlw */ - -inline vector signed int -vec_vrlw (vector signed int a1, vector unsigned int a2) -{ - return (vector signed int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_vrlw (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vrlh */ - -inline vector signed short -vec_vrlh (vector signed short a1, vector unsigned short a2) -{ - return (vector signed short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_vrlh (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vrlb */ - -inline vector signed char -vec_vrlb (vector signed char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_vrlb (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_round */ - -inline vector float -vec_round (vector float a1) -{ - return (vector float) __builtin_altivec_vrfin ((vector float) a1); -} - -/* vec_rsqrte */ - -inline vector float -vec_rsqrte (vector float a1) -{ - return (vector float) __builtin_altivec_vrsqrtefp ((vector float) a1); -} - -/* vec_sel */ - -inline vector float -vec_sel (vector float a1, vector float a2, vector signed int a3) -{ - return (vector float) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3); -} - -inline vector float -vec_sel (vector float a1, vector float a2, vector unsigned int a3) -{ - return (vector float) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3); -} - -inline vector signed int -vec_sel (vector signed int a1, vector signed int a2, vector signed int a3) -{ - return (vector signed int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3); -} - -inline vector signed int -vec_sel (vector signed int a1, vector signed int a2, vector unsigned int a3) -{ - return (vector signed int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3); -} - -inline vector unsigned int -vec_sel (vector unsigned int a1, vector unsigned int a2, vector signed int a3) -{ - return (vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3); -} - -inline vector unsigned int -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 signed short -vec_sel (vector signed short a1, vector signed short a2, vector signed short a3) -{ - return (vector signed short) __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 unsigned short a3) -{ - return (vector signed short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3); -} - -inline vector unsigned short -vec_sel (vector unsigned short a1, vector unsigned short a2, vector signed short a3) -{ - return (vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3); -} - -inline vector unsigned short -vec_sel (vector unsigned short a1, vector unsigned short a2, vector unsigned short a3) -{ - return (vector unsigned 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) -{ - return (vector signed char) __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 unsigned char a3) -{ - return (vector signed char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3); -} - -inline vector unsigned char -vec_sel (vector unsigned char a1, vector unsigned char a2, vector signed char a3) -{ - return (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3); -} - -inline vector unsigned char -vec_sel (vector unsigned char a1, vector unsigned char a2, vector unsigned char a3) -{ - return (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3); -} - -/* vec_sl */ - -inline vector signed char -vec_sl (vector signed char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_sl (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed short -vec_sl (vector signed short a1, vector unsigned short a2) -{ - return (vector signed short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_sl (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed int -vec_sl (vector signed int a1, vector unsigned int a2) -{ - return (vector signed int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_sl (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vslw */ - -inline vector signed int -vec_vslw (vector signed int a1, vector unsigned int a2) -{ - return (vector signed int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_vslw (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vslh */ - -inline vector signed short -vec_vslh (vector signed short a1, vector unsigned short a2) -{ - return (vector signed short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_vslh (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vslb */ - -inline vector signed char -vec_vslb (vector signed char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_vslb (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_sld */ - -inline vector float -vec_sld (vector float a1, vector float a2, const char 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) -{ - 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) -{ - 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) -{ - 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) -{ - return (vector unsigned short) __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) -{ - 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) -{ - return (vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3); -} - -/* vec_sll */ - -inline vector signed int -vec_sll (vector signed int a1, vector unsigned int a2) -{ - return (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_sll (vector signed int a1, vector unsigned short a2) -{ - return (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_sll (vector signed int a1, vector unsigned char a2) -{ - return (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_sll (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_sll (vector unsigned int a1, vector unsigned short a2) -{ - return (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -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 signed short -vec_sll (vector signed short a1, vector unsigned int a2) -{ - return (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed short -vec_sll (vector signed short a1, vector unsigned short a2) -{ - return (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed short -vec_sll (vector signed short a1, vector unsigned char a2) -{ - return (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -vec_sll (vector unsigned short a1, vector unsigned int a2) -{ - return (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -vec_sll (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -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 signed char -vec_sll (vector signed char a1, vector unsigned int a2) -{ - return (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed char -vec_sll (vector signed char a1, vector unsigned short a2) -{ - return (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed char -vec_sll (vector signed char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned char -vec_sll (vector unsigned char a1, vector unsigned int a2) -{ - return (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned char -vec_sll (vector unsigned char a1, vector unsigned short a2) -{ - return (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned char -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); -} - -/* vec_slo */ - -inline vector float -vec_slo (vector float a1, vector signed char a2) -{ - return (vector float) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2); -} - -inline vector float -vec_slo (vector float a1, vector unsigned char a2) -{ - return (vector float) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_slo (vector signed int a1, vector signed char a2) -{ - return (vector signed int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_slo (vector signed int a1, vector unsigned char a2) -{ - return (vector signed int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_slo (vector unsigned int a1, vector signed char a2) -{ - return (vector unsigned int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_slo (vector unsigned int a1, vector unsigned char a2) -{ - return (vector unsigned int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed short -vec_slo (vector signed short a1, vector signed char a2) -{ - return (vector signed short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed short -vec_slo (vector signed short a1, vector unsigned char a2) -{ - return (vector signed short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -vec_slo (vector unsigned short a1, vector signed char a2) -{ - return (vector unsigned short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -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 signed char -vec_slo (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed char -vec_slo (vector signed char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned char -vec_slo (vector unsigned char a1, vector signed char a2) -{ - return (vector unsigned char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned char -vec_slo (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_splat */ - -inline vector signed char -vec_splat (vector signed char a1, const char 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) -{ - return (vector unsigned char) __builtin_altivec_vspltb ((vector signed char) a1, a2); -} - -inline vector signed short -vec_splat (vector signed short a1, const char 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) -{ - return (vector unsigned short) __builtin_altivec_vsplth ((vector signed short) a1, a2); -} - -inline vector float -vec_splat (vector float a1, const char 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) -{ - 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) -{ - return (vector unsigned int) __builtin_altivec_vspltw ((vector signed int) a1, a2); -} - -/* vec_vspltw */ - -inline vector float -vec_vspltw (vector float a1, const char 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) -{ - 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) -{ - return (vector unsigned int) __builtin_altivec_vspltw ((vector signed int) a1, a2); -} - -/* vec_vsplth */ - -inline vector signed short -vec_vsplth (vector signed short a1, const char 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) -{ - return (vector unsigned short) __builtin_altivec_vsplth ((vector signed short) a1, a2); -} - -/* vec_vspltb */ - -inline vector signed char -vec_vspltb (vector signed char a1, const char 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) -{ - return (vector unsigned char) __builtin_altivec_vspltb ((vector signed char) a1, a2); -} - -/* vec_splat_s8 */ - -inline vector signed char -vec_splat_s8 (const char a1) -{ - return (vector signed char) __builtin_altivec_vspltisb (a1); -} - -/* vec_splat_s16 */ - -inline vector signed short -vec_splat_s16 (const char a1) -{ - return (vector signed short) __builtin_altivec_vspltish (a1); -} - -/* vec_splat_s32 */ - -inline vector signed int -vec_splat_s32 (const char a1) -{ - return (vector signed int) __builtin_altivec_vspltisw (a1); -} - -/* vec_splat_u8 */ - -inline vector unsigned char -vec_splat_u8 (const char a1) -{ - return (vector unsigned char) __builtin_altivec_vspltisb (a1); -} - -/* vec_splat_u16 */ - -inline vector unsigned short -vec_splat_u16 (const char a1) -{ - return (vector unsigned short) __builtin_altivec_vspltish (a1); -} - -/* vec_splat_u32 */ - -inline vector unsigned int -vec_splat_u32 (const char a1) -{ - return (vector unsigned int) __builtin_altivec_vspltisw (a1); -} - -/* vec_sr */ - -inline vector signed char -vec_sr (vector signed char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_sr (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed short -vec_sr (vector signed short a1, vector unsigned short a2) -{ - return (vector signed short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_sr (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed int -vec_sr (vector signed int a1, vector unsigned int a2) -{ - return (vector signed int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_sr (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vsrw */ - -inline vector signed int -vec_vsrw (vector signed int a1, vector unsigned int a2) -{ - return (vector signed int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_vsrw (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vsrh */ - -inline vector signed short -vec_vsrh (vector signed short a1, vector unsigned short a2) -{ - return (vector signed short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_vsrh (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vsrb */ - -inline vector signed char -vec_vsrb (vector signed char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_vsrb (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_sra */ - -inline vector signed char -vec_sra (vector signed char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_sra (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed short -vec_sra (vector signed short a1, vector unsigned short a2) -{ - return (vector signed short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_sra (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed int -vec_sra (vector signed int a1, vector unsigned int a2) -{ - return (vector signed int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_sra (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vsraw */ - -inline vector signed int -vec_vsraw (vector signed int a1, vector unsigned int a2) -{ - return (vector signed int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_vsraw (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vsrah */ - -inline vector signed short -vec_vsrah (vector signed short a1, vector unsigned short a2) -{ - return (vector signed short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_vsrah (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vsrab */ - -inline vector signed char -vec_vsrab (vector signed char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_vsrab (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_srl */ - -inline vector signed int -vec_srl (vector signed int a1, vector unsigned int a2) -{ - return (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_srl (vector signed int a1, vector unsigned short a2) -{ - return (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_srl (vector signed int a1, vector unsigned char a2) -{ - return (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_srl (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_srl (vector unsigned int a1, vector unsigned short a2) -{ - return (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -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 signed short -vec_srl (vector signed short a1, vector unsigned int a2) -{ - return (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed short -vec_srl (vector signed short a1, vector unsigned short a2) -{ - return (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed short -vec_srl (vector signed short a1, vector unsigned char a2) -{ - return (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -vec_srl (vector unsigned short a1, vector unsigned int a2) -{ - return (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -vec_srl (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -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 signed char -vec_srl (vector signed char a1, vector unsigned int a2) -{ - return (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed char -vec_srl (vector signed char a1, vector unsigned short a2) -{ - return (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed char -vec_srl (vector signed char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned char -vec_srl (vector unsigned char a1, vector unsigned int a2) -{ - return (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned char -vec_srl (vector unsigned char a1, vector unsigned short a2) -{ - return (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned char -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); -} - -/* vec_sro */ - -inline vector float -vec_sro (vector float a1, vector signed char a2) -{ - return (vector float) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2); -} - -inline vector float -vec_sro (vector float a1, vector unsigned char a2) -{ - return (vector float) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_sro (vector signed int a1, vector signed char a2) -{ - return (vector signed int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_sro (vector signed int a1, vector unsigned char a2) -{ - return (vector signed int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_sro (vector unsigned int a1, vector signed char a2) -{ - return (vector unsigned int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_sro (vector unsigned int a1, vector unsigned char a2) -{ - return (vector unsigned int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed short -vec_sro (vector signed short a1, vector signed char a2) -{ - return (vector signed short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed short -vec_sro (vector signed short a1, vector unsigned char a2) -{ - return (vector signed short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -vec_sro (vector unsigned short a1, vector signed char a2) -{ - return (vector unsigned short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -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 signed char -vec_sro (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed char -vec_sro (vector signed char a1, vector unsigned char a2) -{ - return (vector signed char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned char -vec_sro (vector unsigned char a1, vector signed char a2) -{ - return (vector unsigned char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned char -vec_sro (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_st */ - -inline void -vec_st (vector float a1, int a2, void *a3) -{ - __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_st (vector signed int a1, int a2, void *a3) -{ - __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_st (vector unsigned int a1, int a2, void *a3) -{ - __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_st (vector signed short a1, int a2, void *a3) -{ - __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_st (vector unsigned short a1, int a2, void *a3) -{ - __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_st (vector signed char a1, int a2, void *a3) -{ - __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_st (vector unsigned char a1, int a2, void *a3) -{ - __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3); -} - -/* vec_ste */ - -inline void -vec_ste (vector signed char a1, int a2, void *a3) -{ - __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3); -} - -inline void -vec_ste (vector unsigned char a1, int a2, void *a3) -{ - __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3); -} - -inline void -vec_ste (vector signed short a1, int a2, void *a3) -{ - __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3); -} - -inline void -vec_ste (vector unsigned short a1, int a2, void *a3) -{ - __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3); -} - -inline void -vec_ste (vector float a1, int a2, void *a3) -{ - __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_ste (vector signed int a1, int a2, void *a3) -{ - __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_ste (vector unsigned int a1, int a2, void *a3) -{ - __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3); -} - -/* vec_stvewx */ - -inline void -vec_stvewx (vector float a1, int a2, void *a3) -{ - __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_stvewx (vector signed int a1, int a2, void *a3) -{ - __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_stvewx (vector unsigned int a1, int a2, void *a3) -{ - __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3); -} - -/* vec_stvehx */ - -inline void -vec_stvehx (vector signed short a1, int a2, void *a3) -{ - __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3); -} - -inline void -vec_stvehx (vector unsigned short a1, int a2, void *a3) -{ - __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3); -} - -/* vec_stvebx */ - -inline void -vec_stvebx (vector signed char a1, int a2, void *a3) -{ - __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3); -} - -inline void -vec_stvebx (vector unsigned char a1, int a2, void *a3) -{ - __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3); -} - -/* vec_stl */ - -inline void -vec_stl (vector float a1, int a2, void *a3) -{ - __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_stl (vector signed int a1, int a2, void *a3) -{ - __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_stl (vector unsigned int a1, int a2, void *a3) -{ - __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_stl (vector signed short a1, int a2, void *a3) -{ - __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_stl (vector unsigned short a1, int a2, void *a3) -{ - __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_stl (vector signed char a1, int a2, void *a3) -{ - __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3); -} - -inline void -vec_stl (vector unsigned char a1, int a2, void *a3) -{ - __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3); -} - -/* vec_sub */ - -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) -{ - 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) -{ - return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_sub (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed short -vec_sub (vector 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) -{ - 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) -{ - return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_sub (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed int -vec_sub (vector 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) -{ - 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) -{ - 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 unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2); -} - -inline vector float -vec_sub (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vsubfp ((vector float) a1, (vector float) a2); -} - -/* vec_vsubfp */ - -inline vector float -vec_vsubfp (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vsubfp ((vector float) a1, (vector float) a2); -} - -/* vec_vsubuwm */ - -inline vector signed int -vec_vsubuwm (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_vsubuwm (vector signed 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_vsubuwm (vector unsigned int a1, vector signed int a2) -{ - return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_vsubuwm (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vsubuhm */ - -inline vector signed short -vec_vsubuhm (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_vsubuhm (vector signed 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_vsubuhm (vector unsigned short a1, vector signed short a2) -{ - return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_vsubuhm (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vsububm */ - -inline vector signed char -vec_vsububm (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_vsububm (vector signed 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_vsububm (vector unsigned char a1, vector signed char a2) -{ - return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_vsububm (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_subc */ - -inline vector unsigned int -vec_subc (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vsubcuw ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_subs */ - -inline vector unsigned char -vec_subs (vector signed 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) -{ - 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 unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2); -} - -inline vector signed char -vec_subs (vector 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) -{ - 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) -{ - 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 unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2); -} - -inline vector signed short -vec_subs (vector 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) -{ - 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) -{ - 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 unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed int -vec_subs (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vsubsws ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vsubsws */ - -inline vector signed int -vec_vsubsws (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vsubsws ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vsubuws */ - -inline vector unsigned int -vec_vsubuws (vector signed 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_vsubuws (vector unsigned int a1, vector signed int a2) -{ - return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_vsubuws (vector unsigned int a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_vsubshs */ - -inline vector signed short -vec_vsubshs (vector signed short a1, vector signed short a2) -{ - return (vector signed short) __builtin_altivec_vsubshs ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vsubuhs */ - -inline vector unsigned short -vec_vsubuhs (vector signed 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_vsubuhs (vector unsigned short a1, vector signed short a2) -{ - return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vsubuhs */ - -inline vector unsigned short -vec_vsubsuhs (vector signed 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_vsubsuhs (vector unsigned short a1, vector signed short a2) -{ - return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2); -} - -inline vector unsigned short -vec_vsubsuhs (vector unsigned short a1, vector unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2); -} - -/* vec_vsubsbs */ - -inline vector signed char -vec_vsubsbs (vector signed char a1, vector signed char a2) -{ - return (vector signed char) __builtin_altivec_vsubsbs ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_vsububs */ - -inline vector unsigned char -vec_vsubsubs (vector signed 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_vsubsubs (vector unsigned char a1, vector signed char a2) -{ - return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2); -} - -inline vector unsigned char -vec_vsubsubs (vector unsigned char a1, vector unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2); -} - -/* vec_sum4s */ - -inline vector unsigned int -vec_sum4s (vector unsigned char a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) a1, (vector signed int) a2); -} - -inline vector signed int -vec_sum4s (vector signed char a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) a1, (vector signed int) a2); -} - -inline vector signed int -vec_sum4s (vector signed short a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vsum4shs ((vector signed short) a1, (vector signed int) a2); -} - -/* vec_vsum4shs */ - -inline vector signed int -vec_vsum4shss (vector signed short a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vsum4shs ((vector signed short) a1, (vector signed int) a2); -} - -/* vec_vsum4sbs */ - -inline vector signed int -vec_vsum4sbs (vector signed char a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) a1, (vector signed int) a2); -} - -/* vec_vsum4ubs */ - -inline vector unsigned int -vec_vsum4ubs (vector unsigned char a1, vector unsigned int a2) -{ - return (vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) a1, (vector signed int) a2); -} - -/* vec_sum2s */ - -inline vector signed int -vec_sum2s (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vsum2sws ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_sums */ - -inline vector signed int -vec_sums (vector signed int a1, vector signed int a2) -{ - return (vector signed int) __builtin_altivec_vsumsws ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_trunc */ - -inline vector float -vec_trunc (vector float a1) -{ - return (vector float) __builtin_altivec_vrfiz ((vector float) a1); -} - -/* vec_unpackh */ - -inline vector signed short -vec_unpackh (vector signed 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 unsigned int -vec_unpackh (vector unsigned short a1) -{ - return (vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) a1); -} - -/* vec_vupkhsh */ - -inline vector signed int -vec_vupkhsh (vector signed short a1) -{ - return (vector signed int) __builtin_altivec_vupkhsh ((vector signed short) a1); -} - -/* vec_vupkhpx */ - -inline vector unsigned int -vec_vupkhpx (vector unsigned short a1) -{ - return (vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) a1); -} - -/* vec_vupkhsb */ - -inline vector signed short -vec_vupkhsb (vector signed char a1) -{ - return (vector signed short) __builtin_altivec_vupkhsb ((vector signed char) a1); -} - -/* vec_unpackl */ - -inline vector signed short -vec_unpackl (vector signed char a1) -{ - return (vector signed short) __builtin_altivec_vupklsb ((vector signed char) a1); -} - -inline vector unsigned int -vec_unpackl (vector unsigned short a1) -{ - return (vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) a1); -} - -inline vector signed int -vec_unpackl (vector signed short a1) -{ - return (vector signed int) __builtin_altivec_vupklsh ((vector signed short) a1); -} - -/* vec_vupklpx */ - -inline vector unsigned int -vec_vupklpx (vector unsigned short a1) -{ - return (vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) a1); -} - -/* vec_upklsh */ - -inline vector signed int -vec_vupklsh (vector signed short a1) -{ - return (vector signed int) __builtin_altivec_vupklsh ((vector signed short) a1); -} - -/* vec_vupklsb */ - -inline vector signed short -vec_vupklsb (vector signed char a1) -{ - return (vector signed short) __builtin_altivec_vupklsb ((vector signed char) a1); -} - -/* vec_xor */ - -inline vector float -vec_xor (vector float a1, vector float a2) -{ - return (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2); -} - -inline vector float -vec_xor (vector float a1, vector signed 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) -{ - return (vector float) __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) -{ - return (vector signed int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned int -vec_xor (vector signed 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) -{ - 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 unsigned int a2) -{ - return (vector unsigned int) __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) -{ - return (vector signed short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2); -} - -inline vector unsigned short -vec_xor (vector signed 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) -{ - 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 unsigned short a2) -{ - return (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2); -} - -inline vector signed char -vec_xor (vector 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) -{ - 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) -{ - 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 unsigned char a2) -{ - return (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2); -} - -/* vec_all_eq */ - -inline int -vec_all_eq (vector signed char a1, vector unsigned char a2) -{ - return __builtin_altivec_vcmpequb_p (__CR6_LT, a1, (vector signed char) a2); -} - -inline int -vec_all_eq (vector signed char a1, vector signed char a2) -{ - return __builtin_altivec_vcmpequb_p (__CR6_LT, a1, a2); -} - -inline int -vec_all_eq (vector unsigned 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 unsigned 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 signed 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 signed 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 unsigned 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 unsigned 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 signed 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 signed 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 unsigned 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 unsigned int a1, vector unsigned int a2) -{ - return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2); -} - -inline int -vec_all_eq (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpeqfp_p (__CR6_LT, a1, a2); -} - -/* vec_all_ge */ - -inline int -vec_all_ge (vector signed 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) -{ - 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 unsigned char a2) -{ - return __builtin_altivec_vcmpgtub_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) -{ - 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) -{ - 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 unsigned short a2) -{ - return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1); -} - -inline int -vec_all_ge (vector signed 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 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) -{ - 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 unsigned int a2) -{ - return __builtin_altivec_vcmpgtuw_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); -} - -inline int -vec_all_ge (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpgefp_p (__CR6_LT, a1, a2); -} - -/* vec_all_gt */ - -inline int -vec_all_gt (vector signed 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) -{ - 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 unsigned char a2) -{ - return __builtin_altivec_vcmpgtub_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) -{ - 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) -{ - 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 unsigned short a2) -{ - return __builtin_altivec_vcmpgtuh_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) -{ - 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) -{ - 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 unsigned int a2) -{ - return __builtin_altivec_vcmpgtuw_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); -} - -inline int -vec_all_gt (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpgtfp_p (__CR6_LT, a1, a2); -} - -/* vec_all_in */ - -inline int -vec_all_in (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpbfp_p (__CR6_EQ, a1, a2); -} - -/* vec_all_le */ - -inline int -vec_all_le (vector signed 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) -{ - 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 unsigned char a2) -{ - return __builtin_altivec_vcmpgtub_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) -{ - 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) -{ - 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 unsigned short a2) -{ - return __builtin_altivec_vcmpgtuh_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) -{ - 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) -{ - 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 unsigned int a2) -{ - return __builtin_altivec_vcmpgtuw_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); -} - -inline int -vec_all_le (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpgefp_p (__CR6_LT, a2, a1); -} - -/* vec_all_lt */ - -inline int -vec_all_lt (vector signed 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) -{ - 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 unsigned char a2) -{ - return __builtin_altivec_vcmpgtub_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) -{ - 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) -{ - 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 unsigned short a2) -{ - return __builtin_altivec_vcmpgtuh_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) -{ - 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) -{ - 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 unsigned int a2) -{ - return __builtin_altivec_vcmpgtuw_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); -} - -inline int -vec_all_lt (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpgtfp_p (__CR6_LT, a2, a1); -} - -/* vec_all_nan */ - -inline int -vec_all_nan (vector float a1) -{ - return __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, a1); -} - -/* vec_all_ne */ - -inline int -vec_all_ne (vector signed 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 signed char a1, vector signed char a2) -{ - return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2); -} - -inline int -vec_all_ne (vector unsigned char a1, vector signed char a2) -{ - return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2); -} - -inline int -vec_all_ne (vector unsigned char a1, vector unsigned 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 unsigned short a2) -{ - return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2); -} - -inline int -vec_all_ne (vector signed short a1, vector signed short a2) -{ - return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2); -} - -inline int -vec_all_ne (vector unsigned short a1, vector signed short a2) -{ - return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2); -} - -inline int -vec_all_ne (vector unsigned short a1, vector unsigned 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 unsigned int a2) -{ - return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2); -} - -inline int -vec_all_ne (vector signed int a1, vector signed int a2) -{ - return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2); -} - -inline int -vec_all_ne (vector unsigned int a1, vector signed int a2) -{ - return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2); -} - -inline int -vec_all_ne (vector unsigned int a1, vector unsigned int a2) -{ - 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); -} - -/* vec_all_nge */ - -inline int -vec_all_nge (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpgefp_p (__CR6_EQ, a1, a2); -} - -/* vec_all_ngt */ - -inline int -vec_all_ngt (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpgtfp_p (__CR6_EQ, a1, a2); -} - -/* vec_all_nle */ - -inline int -vec_all_nle (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpgefp_p (__CR6_EQ, a2, a1); -} - -/* vec_all_nlt */ - -inline int -vec_all_nlt (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpgtfp_p (__CR6_EQ, a2, a1); -} - -/* vec_all_numeric */ - -inline int -vec_all_numeric (vector float a1) -{ - return __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, a1); -} - -/* vec_any_eq */ - -inline int -vec_any_eq (vector signed 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 signed 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 unsigned 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 unsigned 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 signed 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 signed 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 unsigned 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 unsigned 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 signed 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 signed 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 unsigned 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 unsigned int a1, vector unsigned int a2) -{ - return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2); -} - -inline int -vec_any_eq (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, a1, a2); -} - -/* vec_any_ge */ - -inline int -vec_any_ge (vector signed 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 unsigned 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 unsigned 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 signed char a1, vector signed char a2) -{ - return __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1); -} - -inline int -vec_any_ge (vector signed 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 unsigned 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 unsigned 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 signed short a1, vector signed short a2) -{ - return __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1); -} - -inline int -vec_any_ge (vector signed 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 unsigned 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 unsigned 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 signed int a1, vector signed int a2) -{ - return __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1); -} - -inline int -vec_any_ge (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, a1, a2); -} - -/* vec_any_gt */ - -inline int -vec_any_gt (vector signed 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) -{ - 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 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 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) -{ - 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) -{ - 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 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 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) -{ - 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) -{ - 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 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 signed 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 float a1, vector float a2) -{ - return __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, a1, a2); -} - -/* vec_any_le */ - -inline int -vec_any_le (vector signed 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) -{ - 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 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 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) -{ - 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) -{ - 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 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 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) -{ - 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) -{ - 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 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 signed 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 float a1, vector float a2) -{ - return __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, a2, a1); -} - -/* vec_any_lt */ - -inline int -vec_any_lt (vector signed 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) -{ - 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 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 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) -{ - 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) -{ - 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 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 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) -{ - 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) -{ - 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 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 signed 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 float a1, vector float a2) -{ - return __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, a2, a1); -} - -/* vec_any_nan */ - -inline int -vec_any_nan (vector float a1) -{ - return __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a1); -} - -/* vec_any_ne */ - -inline int -vec_any_ne (vector signed 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 signed 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 unsigned 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 unsigned char a1, vector unsigned char a2) -{ - return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2); -} - -inline int -vec_any_ne (vector signed 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 signed short a1, vector signed short a2) -{ - return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2); -} - -inline int -vec_any_ne (vector unsigned short a1, vector signed short a2) -{ - return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2); -} - -inline int -vec_any_ne (vector unsigned short a1, vector 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 signed int a1, vector unsigned int a2) -{ - return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2); -} - -inline int -vec_any_ne (vector signed int a1, vector signed int a2) -{ - return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2); -} - -inline int -vec_any_ne (vector unsigned int a1, vector signed int a2) -{ - return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2); -} - -inline int -vec_any_ne (vector unsigned int a1, vector unsigned int a2) -{ - 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); -} - -/* vec_any_nge */ - -inline int -vec_any_nge (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a1, a2); -} - -/* vec_any_ngt */ - -inline int -vec_any_ngt (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, a1, a2); -} - -/* vec_any_nle */ - -inline int -vec_any_nle (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a2, a1); -} - -/* vec_any_nlt */ - -inline int -vec_any_nlt (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, a2, a1); -} - -/* vec_any_numeric */ - -inline int -vec_any_numeric (vector float a1) -{ - return __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, a1, a1); -} - -/* vec_any_out */ - -inline int -vec_any_out (vector float a1, vector float a2) -{ - return __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, a1, a2); -} - -/* vec_step */ - -template -struct __vec_step_help -{ - // All proper vector types will specialize _S_elem. -}; - -template<> -struct __vec_step_help -{ - static const int _S_elem = 8; -}; - -template<> -struct __vec_step_help -{ - static const int _S_elem = 8; -}; - -template<> -struct __vec_step_help -{ - static const int _S_elem = 4; -}; - -template<> -struct __vec_step_help -{ - static const int _S_elem = 4; -}; - -template<> -struct __vec_step_help -{ - static const int _S_elem = 16; -}; - -template<> -struct __vec_step_help -{ - static const int _S_elem = 16; -}; - -template<> -struct __vec_step_help -{ - static const int _S_elem = 4; -}; - -#define vec_step(t) __vec_step_help::_S_elem - -#else /* not C++ */ - -/* "... and so I think no man in a century will suffer as greatly as - you will." */ - -#define vec_abs(a) \ - __ch (__un_args_eq (vector signed char, (a)), \ - ((vector signed char) __builtin_altivec_abs_v16qi ((vector signed char) (a))), \ - __ch (__un_args_eq (vector signed short, (a)), \ - ((vector signed short) __builtin_altivec_abs_v8hi ((vector signed short) (a))), \ - __ch (__un_args_eq (vector signed int, (a)), \ - ((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 ())))) - -#define vec_abss(a) \ - __ch (__un_args_eq (vector signed char, (a)), \ - ((vector signed char) __builtin_altivec_abss_v16qi ((vector signed char) (a))), \ - __ch (__un_args_eq (vector signed short, (a)), \ - ((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 ()))))))) - -#define vec_vaddubm(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \ - __altivec_link_error_invalid_argument ())))) - -#define vec_vadduhm(a1, a2) \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \ - __altivec_link_error_invalid_argument ())))) - -#define vec_vadduwm(a1, a2) \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))) - -#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 ()) - -#define vec_add(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vaddfp ((vector float) (a1), (vector float) (a2))), \ - __altivec_link_error_invalid_argument ()))))))))))))) - -#define vec_addc(a1, a2) \ -__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 ()) - -#define vec_adds(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vaddsbs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vaddshs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vaddsws ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))))))))) - -#define vec_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 ()) - -#define vec_vadduws(a1, a2) \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ()))) - -#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 ()) - -#define vec_vadduhs(a1, a2) \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \ - __altivec_link_error_invalid_argument ()))) - -#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 ()) - -#define vec_vaddubs(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \ - __altivec_link_error_invalid_argument ()))) - -#define vec_and(a1, a2) \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector signed int, (a2)), \ - ((vector float) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ()))))))))))))))) - -#define vec_andc(a1, a2) \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector unsigned int, (a2)), \ - ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector float, (a2)), \ - ((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 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)), \ - ((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)), \ - ((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)), \ - ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector 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)), \ - ((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)), \ - ((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)), \ - ((vector signed char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ()))))))))))))))))))))))) - -#define vec_avg(a1, a2) \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vavgub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vavgsb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vavguh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vavgsh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vavguw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vavgsw ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))) - -#define vec_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 ()) - -#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 ()) - -#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 ()) - -#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 ()) - -#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 ()) - -#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 ()) - -#define vec_ceil(a1) __builtin_altivec_vrfip ((a1)) - -#define vec_cmpb(a1, a2) __builtin_altivec_vcmpbfp ((a1), (a2)) - -#define vec_cmpeq(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vcmpequb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector signed char) __builtin_altivec_vcmpequb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vcmpequh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector signed short) __builtin_altivec_vcmpequh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vcmpequw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector signed int) __builtin_altivec_vcmpequw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector signed int) __builtin_altivec_vcmpeqfp ((vector float) (a1), (vector float) (a2))), \ - __altivec_link_error_invalid_argument ()))))))) - -#define vec_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 ()) - -#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 ())) - -#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 ())) - -#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 ())) - -#define vec_cmpge(a1, a2) (vector signed int) __builtin_altivec_vcmpgefp ((a1), (a2)) - -#define vec_cmpgt(a1, a2) \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector signed int) __builtin_altivec_vcmpgtfp ((vector float) (a1), (vector float) (a2))), \ - __altivec_link_error_invalid_argument ()))))))) - -#define vec_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 ()) - -#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 ()) - -#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 ()) - -#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 ()) - -#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 ()) - -#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 ()) - -#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 ()) - -#define vec_cmple(a1, a2) __builtin_altivec_vcmpgefp ((a1), (a2)) - -#define vec_cmplt(a1, a2) \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector signed int) __builtin_altivec_vcmpgtfp ((vector float) (a1), (vector float) (a2))), \ - __altivec_link_error_invalid_argument ()))))))) - -#define vec_ctf(a1, a2) \ -__ch (__bin_args_eq (vector unsigned int, (a1), 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 ())))) - -#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))), \ -__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 ())) - -#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))), \ -__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 ())) - -#define vec_cts(a1, a2) __builtin_altivec_vctsxs ((a1), (a2)) - -#define vec_ctu(a1, a2) (vector unsigned int) __builtin_altivec_vctuxs ((a1), (a2)) - -#define vec_dss(a1) __builtin_altivec_dss ((a1)) +#define vec_all_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a1), (a2)) +#define vec_all_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a2), (a1)) +#define vec_any_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a1), (a2)) +#define vec_any_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a2), (a1)) +#endif +/* These do not accept vectors, so they do not have a __builtin_vec_* + counterpart. */ +#define vec_dss(x) __builtin_altivec_dss((x)) #define vec_dssall() __builtin_altivec_dssall () - -#define vec_dst(a1, a2, a3) \ -__ch (__un_args_eq (vector unsigned char, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector signed char, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector unsigned short, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector signed short, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector unsigned int, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector signed int, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector float, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned char, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed char, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned short, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed short, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned int, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed int, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned long, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed long, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (float, *(a1)), \ - __builtin_altivec_dst ((void *) (a1), (a2), (a3)), \ - __altivec_link_error_invalid_argument ())))))))))))))))) - -#define vec_dstst(a1, a2, a3) \ -__ch (__un_args_eq (vector unsigned char, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector signed char, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector unsigned short, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector signed short, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector unsigned int, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector signed int, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector float, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned char, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed char, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned short, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed short, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned int, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed int, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned long, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed long, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (float, *(a1)), \ - __builtin_altivec_dstst ((void *) (a1), (a2), (a3)), \ - __altivec_link_error_invalid_argument ())))))))))))))))) - -#define vec_dststt(a1, a2, a3) \ -__ch (__un_args_eq (vector unsigned char, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector signed char, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector unsigned short, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector signed short, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector unsigned int, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector signed int, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector float, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned char, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed char, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned short, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed short, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned int, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed int, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned long, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed long, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (float, *(a1)), \ - __builtin_altivec_dststt ((void *) (a1), (a2), (a3)), \ - __altivec_link_error_invalid_argument ())))))))))))))))) - -#define vec_dstt(a1, a2, a3) \ -__ch (__un_args_eq (vector unsigned char, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector signed char, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector unsigned short, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector signed short, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector unsigned int, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector signed int, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (vector float, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned char, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed char, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned short, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed short, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned int, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed int, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (unsigned long, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (signed long, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ -__ch (__un_args_eq (float, *(a1)), \ - __builtin_altivec_dstt ((void *) (a1), (a2), (a3)), \ - __altivec_link_error_invalid_argument ())))))))))))))))) - -#define vec_expte(a1) __builtin_altivec_vexptefp ((a1)) - -#define vec_floor(a1) __builtin_altivec_vrfim (a1) - -#define vec_ld(a, b) \ -__ch (__un_args_eq (vector unsigned char, *(b)), \ - ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (unsigned char, *(b)), \ - ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (vector signed char, *(b)), \ - ((vector signed char) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (signed char, *(b)), \ - ((vector signed char) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (vector unsigned short, *(b)), \ - ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (unsigned short, *(b)), \ - ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (vector signed short, *(b)), \ - ((vector signed short) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (signed short, *(b)), \ - ((vector signed short) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (vector unsigned int, *(b)), \ - ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (unsigned int, *(b)), \ - ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (unsigned long, *(b)), \ - ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (vector signed int, *(b)), \ - ((vector signed int) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (signed int, *(b)), \ - ((vector signed int) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (signed long, *(b)), \ - ((vector signed int) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (vector float, *(b)), \ - ((vector float) __builtin_altivec_lvx ((a), (b))), \ -__ch (__un_args_eq (float, *(b)), \ - ((vector float) __builtin_altivec_lvx ((a), (b))), \ -__altivec_link_error_invalid_argument ())))))))))))))))) - -#define vec_lde(a, b) \ -__ch (__un_args_eq (unsigned char, *(b)), \ - ((vector unsigned char) __builtin_altivec_lvebx ((a), (b))), \ -__ch (__un_args_eq (signed char, *(b)), \ - ((vector signed char) __builtin_altivec_lvebx ((a), (b))), \ -__ch (__un_args_eq (unsigned short, *(b)), \ - ((vector unsigned short) __builtin_altivec_lvehx ((a), (b))), \ -__ch (__un_args_eq (signed short, *(b)), \ - ((vector signed short) __builtin_altivec_lvehx ((a), (b))), \ -__ch (__un_args_eq (unsigned long, *(b)), \ - ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \ -__ch (__un_args_eq (signed long, *(b)), \ - ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \ -__ch (__un_args_eq (unsigned int, *(b)), \ - ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \ -__ch (__un_args_eq (signed int, *(b)), \ - ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \ -__ch (__un_args_eq (float, *(b)), \ - ((vector float) __builtin_altivec_lvewx ((a), (b))), \ -__altivec_link_error_invalid_argument ()))))))))) - -#define vec_lvewx(a, b) \ -__ch (__un_args_eq (unsigned int, *(b)), \ - ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \ -__ch (__un_args_eq (signed int, *(b)), \ - ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \ -__ch (__un_args_eq (unsigned long, *(b)), \ - ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \ -__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 ()))))) - -#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 ())) - -#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 ())) - -#define vec_ldl(a, b) \ -__ch (__un_args_eq (vector unsigned char, *(b)), \ - ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (unsigned char, *(b)), \ - ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (vector signed char, *(b)), \ - ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (signed char, *(b)), \ - ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (vector unsigned short, *(b)), \ - ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (unsigned short, *(b)), \ - ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (vector signed short, *(b)), \ - ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (signed short, *(b)), \ - ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (vector unsigned int, *(b)), \ - ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (unsigned int, *(b)), \ - ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (unsigned long, *(b)), \ - ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (vector signed int, *(b)), \ - ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (signed int, *(b)), \ - ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (signed long, *(b)), \ - ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (vector float, *(b)), \ - ((vector float) __builtin_altivec_lvxl ((a), (b))), \ -__ch (__un_args_eq (float, *(b)), \ - ((vector float) __builtin_altivec_lvxl ((a), (b))), \ -__altivec_link_error_invalid_argument ())))))))))))))))) - -#define vec_loge(a1) __builtin_altivec_vlogefp ((a1)) - -#define vec_lvsl(a1, a2) \ -__ch (__un_args_eq (unsigned char, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed char, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (unsigned short, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed short, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (unsigned int, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed int, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (unsigned long, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed long, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__ch (__un_args_eq (float, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsl ((a1), (void *) (a2))), \ -__altivec_link_error_invalid_argument ()))))))))) - -#define vec_lvsr(a1, a2) \ -__ch (__un_args_eq (unsigned char, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed char, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (unsigned short, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed short, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (unsigned int, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed int, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (unsigned long, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (signed long, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__ch (__un_args_eq (float, *(a2)), \ - ((vector unsigned char) __builtin_altivec_lvsr ((a1), (void *) (a2))), \ -__altivec_link_error_invalid_argument ()))))))))) - -#define vec_madd(a1, a2, a3) (__builtin_altivec_vmaddfp ((a1), (a2), (a3))) - -#define vec_madds(a1, a2, a3) __builtin_altivec_vmhaddshs ((a1), (a2), (a3)) - -#define vec_max(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vmaxsb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vmaxsh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vmaxsw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vmaxfp ((vector float) (a1), (vector float) (a2))), \ - __altivec_link_error_invalid_argument ()))))))))))))) - -#define vec_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 ()) - -#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 ()) - -#define vec_vmaxuw(a1, a2) \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()))) - -#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 ()) - -#define vec_vmaxuh(a1, a2) \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()))) - -#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 ()) - -#define vec_vmaxub(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ()))) - -#define vec_mergeh(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ()))))))) - -#define vec_vmrghw(a1, a2) \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()))) - -#define vec_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 ())) - -#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 ())) - -#define vec_mergel(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ()))))))) - -#define vec_vmrglw(a1, a2) \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()))) - -#define vec_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 ())) - -#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 ())) - -#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)), \ - ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vminsb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vminsh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vminsw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vminfp ((vector float) (a1), (vector float) (a2))), \ - __altivec_link_error_invalid_argument ()))))))))))))) - -#define vec_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 ()) - -#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 ()) - -#define vec_vminuw(a1, a2) \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()))) - -#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 ()) - -#define vec_vminuh(a1, a2) \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()))) - -#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 ()) - -#define vec_vminub(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ()))) - -#define vec_mladd(a1, a2, a3) \ -__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \ - ((vector signed short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \ -__ch (__tern_args_eq (vector signed short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \ - ((vector signed short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \ -__ch (__tern_args_eq (vector unsigned short, (a1), vector signed short, (a2), vector signed short, (a3)), \ - ((vector signed short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \ -__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \ - ((vector unsigned short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \ - __altivec_link_error_invalid_argument ())))) - -#define vec_mradds(a1, a2, a3) __builtin_altivec_vmhraddshs ((a1), (a2), (a3)) - -#define vec_msum(a1, a2, a3) \ -__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned int, (a3)), \ - ((vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector signed char, (a1), vector unsigned char, (a2), vector signed int, (a3)), \ - ((vector signed int) __builtin_altivec_vmsummbm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \ - ((vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \ - ((vector signed int) __builtin_altivec_vmsumshm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \ - __altivec_link_error_invalid_argument ())))) - -#define vec_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 ()) - -#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 ()) - -#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 ()) - -#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 ()) - -#define vec_msums(a1, a2, a3) \ -__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \ - ((vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \ - ((vector signed int) __builtin_altivec_vmsumshs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \ - __altivec_link_error_invalid_argument ())) - -#define vec_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 ()) - -#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 ()) - -#define vec_mtvscr(a1) \ -__ch (__un_args_eq (vector signed int, (a1)), \ - __builtin_altivec_mtvscr ((vector signed int) (a1)), \ -__ch (__un_args_eq (vector unsigned int, (a1)), \ - __builtin_altivec_mtvscr ((vector signed int) (a1)), \ -__ch (__un_args_eq (vector signed short, (a1)), \ - __builtin_altivec_mtvscr ((vector signed int) (a1)), \ -__ch (__un_args_eq (vector unsigned short, (a1)), \ - __builtin_altivec_mtvscr ((vector signed int) (a1)), \ -__ch (__un_args_eq (vector signed char, (a1)), \ - __builtin_altivec_mtvscr ((vector signed int) (a1)), \ -__ch (__un_args_eq (vector unsigned char, (a1)), \ - __builtin_altivec_mtvscr ((vector signed int) (a1)), \ - __altivec_link_error_invalid_argument ())))))) - -#define vec_mule(a1, a2) \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed short) __builtin_altivec_vmulesb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed int) __builtin_altivec_vmulesh ((vector signed short) (a1), (vector signed short) (a2))), \ - __altivec_link_error_invalid_argument ())))) - -#define vec_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 ()) - -#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 ()) - -#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 ()) - -#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 ()) - -#define vec_mulo(a1, a2) \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed short) __builtin_altivec_vmulosb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed int) __builtin_altivec_vmulosh ((vector signed short) (a1), (vector signed short) (a2))), \ - __altivec_link_error_invalid_argument ())))) - -#define vec_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 ()) - -#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 ()) - -#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 ()) - -#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 ()) - -#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 ()) - -#define vec_nor(a1, a2) \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ()))))))) - -#define vec_or(a1, a2) \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector signed int, (a2)), \ - ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ()))))))))))))))) - -#define vec_pack(a1, a2) \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))) - -#define vec_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 ())) - -#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 ())) - -#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 ()) - -#define vec_packs(a1, a2) \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed char) __builtin_altivec_vpkshss ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed short) __builtin_altivec_vpkswss ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))) - -#define vec_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 ()) - -#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 ()) - -#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 ()) - -#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 ()) - -#define vec_packsu(a1, a2) \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))) - -#define vec_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 ()) - -#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 ()) - -#define vec_perm(a1, a2, a3) \ -__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector unsigned char, (a3)), \ - ((vector float) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ -__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector unsigned char, (a3)), \ - ((vector signed int) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ -__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector unsigned char, (a3)), \ - ((vector unsigned int) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ -__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector unsigned char, (a3)), \ - ((vector signed short) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ -__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned char, (a3)), \ - ((vector unsigned short) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ -__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector unsigned char, (a3)), \ - ((vector signed char) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ -__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned char, (a3)), \ - ((vector unsigned char) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \ - __altivec_link_error_invalid_argument ()))))))) - -#define vec_re(a1) __builtin_altivec_vrefp ((a1)) - -#define vec_rl(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector signed char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector signed short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector signed int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))) - -#define vec_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 ())) - -#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 ())) - -#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 ())) - -#define vec_round(a1) __builtin_altivec_vrfin ((a1)) - -#define vec_rsqrte(a1) __builtin_altivec_vrsqrtefp ((a1)) - -#define vec_sel(a1, a2, a3) \ -__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector signed int, (a3)), \ - ((vector float) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector unsigned int, (a3)), \ - ((vector float) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector signed int, (a3)), \ - ((vector signed int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector unsigned int, (a3)), \ - ((vector signed int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector signed int, (a3)), \ - ((vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector unsigned int, (a3)), \ - ((vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \ - ((vector signed short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector unsigned short, (a3)), \ - ((vector signed short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector signed short, (a3)), \ - ((vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \ - ((vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector signed char, (a3)), \ - ((vector signed char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector unsigned char, (a3)), \ - ((vector signed char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector signed char, (a3)), \ - ((vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ -__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned char, (a3)), \ - ((vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \ - __altivec_link_error_invalid_argument ())))))))))))))) - -#define vec_sl(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector signed char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector signed short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector signed int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))) - -#define vec_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 ())) - -#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 ())) - -#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 ())) - -#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))), \ -__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))), \ -__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))), \ -__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))), \ -__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))), \ -__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))), \ -__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 ())))))))))))))) - -#define vec_sll(a1, a2) \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector signed int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned short, (a2)), \ - ((vector signed int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \ - ((vector signed int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned short, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned int, (a2)), \ - ((vector signed short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector signed short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \ - ((vector signed short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned int, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned int, (a2)), \ - ((vector signed char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned short, (a2)), \ - ((vector signed char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector signed char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned short, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))))))))))))))) - -#define vec_slo(a1, a2) \ -__ch (__bin_args_eq (vector float, (a1), vector signed char, (a2)), \ - ((vector float) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector unsigned char, (a2)), \ - ((vector float) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed char, (a2)), \ - ((vector signed int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \ - ((vector signed int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed char, (a2)), \ - ((vector unsigned int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \ - ((vector unsigned int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed char, (a2)), \ - ((vector signed short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \ - ((vector signed short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed char, (a2)), \ - ((vector unsigned short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \ - ((vector unsigned short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector signed char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))))))))))) - -#define vec_splat(a1, a2) \ -__ch (__bin_args_eq (vector signed char, ((a1)), 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)))), \ -__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)))), \ -__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)))), \ -__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)))), \ -__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)))), \ -__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)))), \ -__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 ())))))))))))))) - -#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)))), \ -__ch (__bin_args_eq (vector float, ((a1)), unsigned int, ((a2))), \ - ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((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)))), \ -__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 ())))))) - -#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)))), \ -__ch (__bin_args_eq (vector signed short, ((a1)), unsigned int, ((a2))), \ - ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((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)))), \ -__altivec_link_error_invalid_argument ())))) - -#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)))), \ -__ch (__bin_args_eq (vector signed char, ((a1)), unsigned int, ((a2))), \ - ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((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)))), \ -__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))) - -#define vec_sr(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector signed char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector signed short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector signed int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))) - -#define vec_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 ())) - -#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 ())) - -#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 ())) - -#define vec_sra(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector signed char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector signed short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector signed int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))) - -#define vec_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 ())) - -#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 ())) - -#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 ())) - -#define vec_srl(a1, a2) \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector signed int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned short, (a2)), \ - ((vector signed int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \ - ((vector signed int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned short, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned int, (a2)), \ - ((vector signed short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector signed short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \ - ((vector signed short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned int, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned int, (a2)), \ - ((vector signed char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned short, (a2)), \ - ((vector signed char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector signed char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned short, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))))))))))))))) - -#define vec_sro(a1, a2) \ -__ch (__bin_args_eq (vector float, (a1), vector signed char, (a2)), \ - ((vector float) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector unsigned char, (a2)), \ - ((vector float) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed char, (a2)), \ - ((vector signed int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \ - ((vector signed int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed char, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed char, (a2)), \ - ((vector signed short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \ - ((vector signed short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed char, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector signed char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))))))))))) - -#define vec_st(a1, a2, a3) \ - __builtin_altivec_stvx ((vector signed int) (a1), (a2), (a3)) - -#define vec_stl(a1, a2, a3) \ - __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (a3)) - -#define vec_ste(a, b, c) \ -__ch (__un_args_eq (vector unsigned char, (a)), \ - __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \ -__ch (__un_args_eq (vector signed char, (a)), \ - __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \ -__ch (__un_args_eq (vector unsigned short, (a)), \ - __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \ -__ch (__un_args_eq (vector signed short, (a)), \ - __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \ -__ch (__un_args_eq (vector unsigned int, (a)), \ - __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \ -__ch (__un_args_eq (vector signed int, (a)), \ - __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \ -__ch (__un_args_eq (vector float, (a)), \ - __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \ - __altivec_link_error_invalid_argument ()))))))) - -#define vec_stvewx(a, b, c) \ -__ch (__un_args_eq (vector unsigned int, (a)), \ - __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \ -__ch (__un_args_eq (vector signed int, (a)), \ - __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \ -__ch (__un_args_eq (vector float, (a)), \ - __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \ -__altivec_link_error_invalid_argument ()))) - -#define vec_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 ())) - -#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 ())) - -#define vec_sub(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \ - ((vector float) __builtin_altivec_vsubfp ((vector float) (a1), (vector float) (a2))), \ - __altivec_link_error_invalid_argument ()))))))))))))) - -#define vec_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 ()) - -#define vec_vsubuwm(a1, a2) \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ())))) - -#define vec_vsubuhm(a1, a2) \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ())))) - -#define vec_vsububm(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ())))) - -#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 ()) - -#define vec_subs(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \ - ((vector signed char) __builtin_altivec_vsubsbs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \ - ((vector signed short) __builtin_altivec_vsubshs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vsubsws ((vector signed int) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ())))))))))))) - -#define vec_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 ()) - -#define vec_vsubuws(a1, a2) \ -__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \ -__altivec_link_error_invalid_argument ()))) - -#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 ()) - -#define vec_vsubuhs(a1, a2) \ -__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \ -__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \ - ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \ -__altivec_link_error_invalid_argument ()))) - -#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 ()) - -#define vec_vsububs(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \ - ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \ -__altivec_link_error_invalid_argument ()))) - -#define vec_sum4s(a1, a2) \ -__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \ - ((vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed char, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) (a1), (vector signed int) (a2))), \ -__ch (__bin_args_eq (vector signed short, (a1), vector signed int, (a2)), \ - ((vector signed int) __builtin_altivec_vsum4shs ((vector signed short) (a1), (vector signed int) (a2))), \ - __altivec_link_error_invalid_argument ()))) - -#define vec_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 ()) - -#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 ()) - -#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 ()) - -#define vec_sum2s(a1, a2) __builtin_altivec_vsum2sws ((a1), (a2)) - -#define vec_sums(a1, a2) __builtin_altivec_vsumsws ((a1), (a2)) - -#define vec_trunc(a1) __builtin_altivec_vrfiz ((a1)) - -#define vec_unpackh(a1) \ -__ch (__un_args_eq (vector signed char, (a1)), \ - ((vector signed short) __builtin_altivec_vupkhsb ((vector signed char) (a1))), \ -__ch (__un_args_eq (vector unsigned short, (a1)), \ - ((vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) (a1))), \ -__ch (__un_args_eq (vector signed short, (a1)), \ - ((vector signed int) __builtin_altivec_vupkhsh ((vector signed short) (a1))), \ - __altivec_link_error_invalid_argument ()))) - -#define vec_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 ()) - -#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 ()) - -#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 ()) - -#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)), \ - ((vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) (a1))), \ -__ch (__un_args_eq (vector signed short, (a1)), \ - ((vector signed int) __builtin_altivec_vupklsh ((vector signed short) (a1))), \ - __altivec_link_error_invalid_argument ()))) - -#define vec_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 ()) - -#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 ()) - -#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 ()) - -#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 ()))))))))))))))))))))))) - -/* Predicates. */ - -#define vec_all_eq(a1, a2) \ -__ch (__bin_args_eq (vector signed 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)), \ - __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)), \ - __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)), \ - __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)), \ - __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)), \ - __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 float, (a1), vector float, (a2)), \ - __builtin_altivec_vcmpeqfp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \ - __altivec_link_error_invalid_argument ()))))))))))))) - -#define vec_all_ge(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - __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)), \ - __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 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)), \ - __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)), \ - __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 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)), \ - __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)), \ - __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 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 ()))))))))))))) - -#define vec_all_gt(a1, a2) \ -__ch (__bin_args_eq (vector signed 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)), \ - __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 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)), \ - __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)), \ - __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 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)), \ - __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)), \ - __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 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 ()))))))))))))) - -#define vec_all_in(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ, (a1), (a2)) - -#define vec_all_le(a1, a2) \ -__ch (__bin_args_eq (vector signed 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)), \ - __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 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)), \ - __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)), \ - __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 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)), \ - __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)), \ - __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 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 ()))))))))))))) - -#define vec_all_lt(a1, a2) \ -__ch (__bin_args_eq (vector signed 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)), \ - __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 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)), \ - __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)), \ - __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 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)), \ - __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)), \ - __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 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 ()))))))))))))) - -#define vec_all_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1)) - -#define vec_all_ne(a1, a2) \ -__ch (__bin_args_eq (vector signed 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 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)), \ - __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)), \ - __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)), \ - __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)), \ - __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)), \ - __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 float, (a1), vector float, (a2)), \ - __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (vector float) (a1), (vector float) (a2)), \ - __altivec_link_error_invalid_argument ()))))))))))))) - -#define vec_all_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a1), (a2)) - -#define vec_all_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a1), (a2)) - -#define vec_all_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a2), (a1)) - -#define vec_all_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a2), (a1)) - -#define vec_all_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1)) - -#define vec_any_eq(a1, a2) \ -__ch (__bin_args_eq (vector signed 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 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)), \ - __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)), \ - __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)), \ - __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)), \ - __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)), \ - __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 float, (a1), vector float, (a2)), \ - __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \ - __altivec_link_error_invalid_argument ()))))))))))))) - -#define vec_any_ge(a1, a2) \ -__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \ - __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)), \ - __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 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)), \ - __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)), \ - __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 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)), \ - __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)), \ - __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 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 ()))))))))))))) - -#define vec_any_gt(a1, a2) \ -__ch (__bin_args_eq (vector signed 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)), \ - __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 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)), \ - __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)), \ - __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 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)), \ - __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)), \ - __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 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 ()))))))))))))) - -#define vec_any_le(a1, a2) \ -__ch (__bin_args_eq (vector signed 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)), \ - __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 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)), \ - __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)), \ - __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 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)), \ - __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)), \ - __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 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 ()))))))))))))) - -#define vec_any_lt(a1, a2) \ -__ch (__bin_args_eq (vector signed 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)), \ - __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 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)), \ - __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)), \ - __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 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)), \ - __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)), \ - __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 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 ()))))))))))))) - -#define vec_any_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a1) - -#define vec_any_ne(a1, a2) \ -__ch (__bin_args_eq (vector signed 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 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)), \ - __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)), \ - __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)), \ - __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)), \ - __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)), \ - __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 float, (a1), vector float, (a2)), \ - __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, (vector float) (a1), (vector float) (a2)), \ - __altivec_link_error_invalid_argument ()))))))))))))) - -#define vec_any_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a1), (a2)) - -#define vec_any_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a1), (a2)) - -#define vec_any_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a2), (a1)) - -#define vec_any_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a2), (a1)) - -#define vec_any_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (a1), (a1)) - -#define vec_any_out(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, (a1), (a2)) - -#endif /* __cplusplus */ +#define vec_mfvscr() ((__vector unsigned short) __builtin_altivec_mfvscr ()) +#define vec_splat_s8(x) __builtin_altivec_vspltisb ((x)) +#define vec_splat_s16(x) __builtin_altivec_vspltish ((x)) +#define vec_splat_s32(x) __builtin_altivec_vspltisw ((x)) +#define vec_splat_u8(x) ((__vector unsigned char) vec_splat_s8 ((x))) +#define vec_splat_u16(x) ((__vector unsigned short) vec_splat_s16 ((x))) +#define vec_splat_u32(x) ((__vector unsigned int) vec_splat_s32 ((x))) + +/* This also accepts a type for its parameter, so it is not enough + to #define vec_step to __builtin_vec_step. */ +#define vec_step(x) __builtin_vec_step (* (__typeof__ (x) *) 0) #endif /* _ALTIVEC_H */