altivec.h revision 96263
190075Sobrien/* PowerPC AltiVec include file.
290075Sobrien   Copyright (C) 2002 Free Software Foundation, Inc.
390075Sobrien   Contributed by Aldy Hernandez (aldyh@redhat.com).
490075Sobrien
590075SobrienThis file is part of GNU CC.
690075Sobrien
790075SobrienGNU CC is free software; you can redistribute it and/or modify
890075Sobrienit under the terms of the GNU General Public License as published by
990075Sobrienthe Free Software Foundation; either version 2, or (at your option)
1090075Sobrienany later version.
1190075Sobrien
1290075SobrienGNU CC is distributed in the hope that it will be useful,
1390075Sobrienbut WITHOUT ANY WARRANTY; without even the implied warranty of
1490075SobrienMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1590075SobrienGNU General Public License for more details.
1690075Sobrien
1790075SobrienYou should have received a copy of the GNU General Public License
1890075Sobrienalong with GNU CC; see the file COPYING.  If not, write to
1990075Sobrienthe Free Software Foundation, 59 Temple Place - Suite 330,
2090075SobrienBoston, MA 02111-1307, USA.  */
2190075Sobrien
2290075Sobrien/* As a special exception, if you include this header file into source
2390075Sobrien   files compiled by GCC, this header file does not by itself cause
2490075Sobrien   the resulting executable to be covered by the GNU General Public
2590075Sobrien   License.  This exception does not however invalidate any other
2690075Sobrien   reasons why the executable file might be covered by the GNU General
2790075Sobrien   Public License.  */
2890075Sobrien
2990075Sobrien/* Implemented to conform to the specification included in the AltiVec
3090075Sobrien   Technology Programming Interface Manual (ALTIVECPIM/D 6/1999 Rev 0).  */
3190075Sobrien
3290075Sobrien#ifndef _ALTIVEC_H
3390075Sobrien#define _ALTIVEC_H 1
3490075Sobrien
3590075Sobrien/* Required by Motorola specs.  */
3690075Sobrien#define __VEC__ 10206
3790075Sobrien
3896263Sobrien#ifndef __ALTIVEC__
3990075Sobrien#define __ALTIVEC__ 1
4096263Sobrien#endif
4190075Sobrien
4290075Sobrien#define __vector __attribute__((vector_size(16)))
4390075Sobrien
4490075Sobrien/* You are allowed to undef this for C++ compatability.  */
4590075Sobrien#define vector __vector
4690075Sobrien
4796263Sobrien#define bool signed
4896263Sobrien#define pixel short
4996263Sobrien#define __pixel short
5096263Sobrien
5196263Sobrien/* Dummy prototype.  */
5296263Sobrienextern int __altivec_link_error_invalid_argument ();
5396263Sobrien
5490075Sobrien/* Helper macros.  */
5590075Sobrien
5696263Sobrien#define __CR6_EQ		0
5796263Sobrien#define __CR6_EQ_REV		1
5896263Sobrien#define __CR6_LT		2
5996263Sobrien#define __CR6_LT_REV		3
6096263Sobrien
6190075Sobrien#define __bin_args_eq(xtype, x, ytype, y)				\
6290075Sobrien	(__builtin_types_compatible_p (xtype, typeof (x))		\
6390075Sobrien	 && __builtin_types_compatible_p (ytype, typeof (y)))
6490075Sobrien
6590075Sobrien#define __un_args_eq(xtype, x)						\
6690075Sobrien	__builtin_types_compatible_p (xtype, typeof (x))
6790075Sobrien
6890075Sobrien#define __tern_args_eq(xtype, x, ytype, y, ztype, z)                    \
6990075Sobrien        (__builtin_types_compatible_p (xtype, typeof (x))               \
7090075Sobrien         && __builtin_types_compatible_p (ytype, typeof (y))		\
7190075Sobrien	 && __builtin_types_compatible_p (ztype, typeof (z)))
7290075Sobrien
7390075Sobrien#define __ch(x, y, z)	__builtin_choose_expr (x, y, z)
7490075Sobrien
7596263Sobrien/* These are easy... Same exact arguments.  */
7696263Sobrien
7796263Sobrien#define vec_vaddcuw vec_addc
7896263Sobrien#define vec_vand vec_and
7996263Sobrien#define vec_vandc vec_andc
8096263Sobrien#define vec_vrfip vec_ceil
8196263Sobrien#define vec_vcmpbfp vec_cmpb
8296263Sobrien#define vec_vcmpgefp vec_cmpge
8396263Sobrien#define vec_vctsxs vec_cts
8496263Sobrien#define vec_vctuxs vec_ctu
8596263Sobrien#define vec_vexptefp vec_expte
8696263Sobrien#define vec_vrfim vec_floor
8796263Sobrien#define vec_lvx vec_ld
8896263Sobrien#define vec_lvxl vec_ldl
8996263Sobrien#define vec_vlogefp vec_loge
9096263Sobrien#define vec_vmaddfp vec_madd
9196263Sobrien#define vec_vmhaddshs vec_madds
9296263Sobrien#define vec_vmladduhm vec_mladd
9396263Sobrien#define vec_vmhraddshs vec_mradds
9496263Sobrien#define vec_vnmsubfp vec_nmsub
9596263Sobrien#define vec_vnor vec_nor
9696263Sobrien#define vec_vor vec_or
9796263Sobrien#define vec_vpkpx vec_packpx
9896263Sobrien#define vec_vperm vec_perm
9996263Sobrien#define vec_vrefp vec_re
10096263Sobrien#define vec_vrfin vec_round
10196263Sobrien#define vec_vrsqrtefp vec_rsqrte
10296263Sobrien#define vec_vsel vec_sel
10396263Sobrien#define vec_vsldoi vec_sld
10496263Sobrien#define vec_vsl vec_sll
10596263Sobrien#define vec_vslo vec_slo
10696263Sobrien#define vec_vspltisb vec_splat_s8
10796263Sobrien#define vec_vspltish vec_splat_s16
10896263Sobrien#define vec_vspltisw vec_splat_s32
10996263Sobrien#define vec_vsr vec_srl
11096263Sobrien#define vec_vsro vec_sro
11196263Sobrien#define vec_stvx vec_st
11296263Sobrien#define vec_stvxl vec_stl
11396263Sobrien#define vec_vsubcuw vec_subc
11496263Sobrien#define vec_vsum2sws vec_sum2s
11596263Sobrien#define vec_vsumsws vec_sums
11696263Sobrien#define vec_vrfiz vec_trunc
11796263Sobrien#define vec_vxor vec_xor
11896263Sobrien
11990075Sobrien#ifdef __cplusplus
12090075Sobrien
12196263Sobrien/* Prototypes for builtins that take literals and must always be
12296263Sobrien   inlined.  */
12396263Sobrieninline vector float vec_ctf (vector unsigned int, const char) __attribute__ ((always_inline));
12496263Sobrieninline vector float vec_ctf (vector signed int, const char) __attribute__ ((always_inline));
12596263Sobrieninline vector signed int vec_cts (vector float, const char) __attribute__ ((always_inline));
12696263Sobrieninline vector unsigned int vec_ctu (vector float, const char) __attribute__ ((always_inline));
12796263Sobrieninline void vec_dss (const char) __attribute__ ((always_inline));
12896263Sobrieninline void vec_dst (void *, int, const char) __attribute__ ((always_inline));
12996263Sobrieninline void vec_dstst (void *, int, const char) __attribute__ ((always_inline));
13096263Sobrieninline void vec_dststt (void *, int, const char) __attribute__ ((always_inline));
13196263Sobrieninline void vec_dstt (void *, int, const char) __attribute__ ((always_inline));
13296263Sobrieninline vector float vec_sld (vector float, vector float, const char) __attribute__ ((always_inline));
13396263Sobrieninline vector signed int vec_sld (vector signed int, vector signed int, const char) __attribute__ ((always_inline));
13496263Sobrieninline vector unsigned int vec_sld (vector unsigned int, vector unsigned int, const char) __attribute__ ((always_inline));
13596263Sobrieninline vector signed short vec_sld (vector signed short, vector signed short, const char) __attribute__ ((always_inline));
13696263Sobrieninline vector unsigned short vec_sld (vector unsigned short, vector unsigned short, const char) __attribute__ ((always_inline));
13796263Sobrieninline vector signed char vec_sld (vector signed char, vector signed char, const char) __attribute__ ((always_inline));
13896263Sobrieninline vector unsigned char vec_sld (vector unsigned char, vector unsigned char, const char) __attribute__ ((always_inline));
13996263Sobrieninline vector signed char vec_splat (vector signed char, const char) __attribute__ ((always_inline));
14096263Sobrieninline vector unsigned char vec_splat (vector unsigned char, const char) __attribute__ ((always_inline));
14196263Sobrieninline vector signed short vec_splat (vector signed short, const char) __attribute__ ((always_inline));
14296263Sobrieninline vector unsigned short vec_splat (vector unsigned short, const char) __attribute__ ((always_inline));
14396263Sobrieninline vector float vec_splat (vector float, const char) __attribute__ ((always_inline));
14496263Sobrieninline vector signed int vec_splat (vector signed int, const char) __attribute__ ((always_inline));
14596263Sobrieninline vector unsigned int vec_splat (vector unsigned int, const char) __attribute__ ((always_inline));
14696263Sobrieninline vector signed char vec_splat_s8 (const char) __attribute__ ((always_inline));
14796263Sobrieninline vector signed short vec_splat_s16 (const char) __attribute__ ((always_inline));
14896263Sobrieninline vector signed int vec_splat_s32 (const char) __attribute__ ((always_inline));
14996263Sobrieninline vector unsigned char vec_splat_u8 (const char) __attribute__ ((always_inline));
15096263Sobrieninline vector unsigned short vec_splat_u16 (const char) __attribute__ ((always_inline));
15196263Sobrieninline vector unsigned int vec_splat_u32 (const char) __attribute__ ((always_inline));
15290075Sobrien
15396263Sobrien/* vec_abs */
15496263Sobrien
15596263Sobrieninline vector signed char
15696263Sobrienvec_abs (vector signed char a1)
15796263Sobrien{
15896263Sobrien  return __builtin_altivec_abs_v16qi (a1);
15996263Sobrien}
16096263Sobrien
16196263Sobrieninline vector signed short
16296263Sobrienvec_abs (vector signed short a1)
16396263Sobrien{
16496263Sobrien  return __builtin_altivec_abs_v8hi (a1);
16596263Sobrien}
16696263Sobrien
16796263Sobrieninline vector signed int
16896263Sobrienvec_abs (vector signed int a1)
16996263Sobrien{
17096263Sobrien  return __builtin_altivec_abs_v4si (a1);
17196263Sobrien}
17296263Sobrien
17396263Sobrieninline vector float
17496263Sobrienvec_abs (vector float a1)
17596263Sobrien{
17696263Sobrien  return __builtin_altivec_abs_v4sf (a1);
17796263Sobrien}
17896263Sobrien
17996263Sobrien/* vec_abss */
18096263Sobrien
18196263Sobrieninline vector signed char
18296263Sobrienvec_abss (vector signed char a1)
18396263Sobrien{
18496263Sobrien  return __builtin_altivec_abss_v16qi (a1);
18596263Sobrien}
18696263Sobrien
18796263Sobrieninline vector signed short
18896263Sobrienvec_abss (vector signed short a1)
18996263Sobrien{
19096263Sobrien  return __builtin_altivec_abss_v8hi (a1);
19196263Sobrien}
19296263Sobrien
19396263Sobrieninline vector signed int
19496263Sobrienvec_abss (vector signed int a1)
19596263Sobrien{
19696263Sobrien  return __builtin_altivec_abss_v4si (a1);
19796263Sobrien}
19896263Sobrien
19996263Sobrien/* vec_add */
20096263Sobrien
20196263Sobrieninline vector signed char
20296263Sobrienvec_add (vector signed char a1, vector signed char a2)
20396263Sobrien{
20496263Sobrien  return (vector signed char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
20596263Sobrien}
20696263Sobrien
20796263Sobrieninline vector unsigned char
20896263Sobrienvec_add (vector signed char a1, vector unsigned char a2)
20996263Sobrien{
21096263Sobrien  return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
21196263Sobrien}
21296263Sobrien
21396263Sobrieninline vector unsigned char
21496263Sobrienvec_add (vector unsigned char a1, vector signed char a2)
21596263Sobrien{
21696263Sobrien  return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
21796263Sobrien}
21896263Sobrien
21996263Sobrieninline vector unsigned char
22096263Sobrienvec_add (vector unsigned char a1, vector unsigned char a2)
22196263Sobrien{
22296263Sobrien  return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
22396263Sobrien}
22496263Sobrien
22596263Sobrieninline vector signed short
22696263Sobrienvec_add (vector signed short a1, vector signed short a2)
22796263Sobrien{
22896263Sobrien  return (vector signed short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
22996263Sobrien}
23096263Sobrien
23196263Sobrieninline vector unsigned short
23296263Sobrienvec_add (vector signed short a1, vector unsigned short a2)
23396263Sobrien{
23496263Sobrien  return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
23596263Sobrien}
23696263Sobrien
23796263Sobrieninline vector unsigned short
23896263Sobrienvec_add (vector unsigned short a1, vector signed short a2)
23996263Sobrien{
24096263Sobrien  return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
24196263Sobrien}
24296263Sobrien
24396263Sobrieninline vector unsigned short
24496263Sobrienvec_add (vector unsigned short a1, vector unsigned short a2)
24596263Sobrien{
24696263Sobrien  return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
24796263Sobrien}
24896263Sobrien
24996263Sobrieninline vector signed int
25096263Sobrienvec_add (vector signed int a1, vector signed int a2)
25196263Sobrien{
25296263Sobrien  return (vector signed int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
25396263Sobrien}
25496263Sobrien
25596263Sobrieninline vector unsigned int
25696263Sobrienvec_add (vector signed int a1, vector unsigned int a2)
25796263Sobrien{
25896263Sobrien  return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
25996263Sobrien}
26096263Sobrien
26196263Sobrieninline vector unsigned int
26296263Sobrienvec_add (vector unsigned int a1, vector signed int a2)
26396263Sobrien{
26496263Sobrien  return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
26596263Sobrien}
26696263Sobrien
26796263Sobrieninline vector unsigned int
26896263Sobrienvec_add (vector unsigned int a1, vector unsigned int a2)
26996263Sobrien{
27096263Sobrien  return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
27196263Sobrien}
27296263Sobrien
27396263Sobrieninline vector float
27496263Sobrienvec_add (vector float a1, vector float a2)
27596263Sobrien{
27696263Sobrien  return (vector float) __builtin_altivec_vaddfp ((vector float) a1, (vector float) a2);
27796263Sobrien}
27896263Sobrien
27996263Sobrien/* vec_vaddfp */
28096263Sobrien
28196263Sobrieninline vector float
28296263Sobrienvec_vaddfp (vector float a1, vector float a2)
28396263Sobrien{
28496263Sobrien  return (vector float) __builtin_altivec_vaddfp ((vector float) a1, (vector float) a2);
28596263Sobrien}
28696263Sobrien
28796263Sobrien/* vec_vadduwm */
28896263Sobrien
28996263Sobrieninline vector signed int
29096263Sobrienvec_vadduwm (vector signed int a1, vector signed int a2)
29196263Sobrien{
29296263Sobrien  return (vector signed int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
29396263Sobrien}
29496263Sobrien
29596263Sobrieninline vector unsigned int
29696263Sobrienvec_vadduwm (vector signed int a1, vector unsigned int a2)
29796263Sobrien{
29896263Sobrien  return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
29996263Sobrien}
30096263Sobrien
30196263Sobrieninline vector unsigned int
30296263Sobrienvec_vadduwm (vector unsigned int a1, vector signed int a2)
30396263Sobrien{
30496263Sobrien  return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
30596263Sobrien}
30696263Sobrien
30796263Sobrieninline vector unsigned int
30896263Sobrienvec_vadduwm (vector unsigned int a1, vector unsigned int a2)
30996263Sobrien{
31096263Sobrien  return (vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) a1, (vector signed int) a2);
31196263Sobrien}
31296263Sobrien
31396263Sobrien/* vec_vadduhm */
31496263Sobrien
31596263Sobrieninline vector signed short
31696263Sobrienvec_vadduhm (vector signed short a1, vector signed short a2)
31796263Sobrien{
31896263Sobrien  return (vector signed short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
31996263Sobrien}
32096263Sobrien
32196263Sobrieninline vector unsigned short
32296263Sobrienvec_vadduhm (vector signed short a1, vector unsigned short a2)
32396263Sobrien{
32496263Sobrien  return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
32596263Sobrien}
32696263Sobrien
32796263Sobrieninline vector unsigned short
32896263Sobrienvec_vadduhm (vector unsigned short a1, vector signed short a2)
32996263Sobrien{
33096263Sobrien  return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
33196263Sobrien}
33296263Sobrien
33396263Sobrieninline vector unsigned short
33496263Sobrienvec_vadduhm (vector unsigned short a1, vector unsigned short a2)
33596263Sobrien{
33696263Sobrien  return (vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) a1, (vector signed short) a2);
33796263Sobrien}
33896263Sobrien
33996263Sobrien/* vec_vaddubm */
34096263Sobrien
34196263Sobrieninline vector signed char
34296263Sobrienvec_vaddubm (vector signed char a1, vector signed char a2)
34396263Sobrien{
34496263Sobrien  return (vector signed char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
34596263Sobrien}
34696263Sobrien
34796263Sobrieninline vector unsigned char
34896263Sobrienvec_vaddubm (vector signed char a1, vector unsigned char a2)
34996263Sobrien{
35096263Sobrien  return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
35196263Sobrien}
35296263Sobrien
35396263Sobrieninline vector unsigned char
35496263Sobrienvec_vaddubm (vector unsigned char a1, vector signed char a2)
35596263Sobrien{
35696263Sobrien  return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
35796263Sobrien}
35896263Sobrien
35996263Sobrieninline vector unsigned char
36096263Sobrienvec_vaddubm (vector unsigned char a1, vector unsigned char a2)
36196263Sobrien{
36296263Sobrien  return (vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) a1, (vector signed char) a2);
36396263Sobrien}
36496263Sobrien
36596263Sobrien/* vec_addc */
36696263Sobrien
36796263Sobrieninline vector unsigned int
36896263Sobrienvec_addc (vector unsigned int a1, vector unsigned int a2)
36996263Sobrien{
37096263Sobrien  return (vector unsigned int) __builtin_altivec_vaddcuw ((vector signed int) a1, (vector signed int) a2);
37196263Sobrien}
37296263Sobrien
37396263Sobrien/* vec_adds */
37496263Sobrien
37596263Sobrieninline vector unsigned char
37696263Sobrienvec_adds (vector signed char a1, vector unsigned char a2)
37796263Sobrien{
37896263Sobrien  return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
37996263Sobrien}
38096263Sobrien
38196263Sobrieninline vector unsigned char
38296263Sobrienvec_adds (vector unsigned char a1, vector signed char a2)
38396263Sobrien{
38496263Sobrien  return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
38596263Sobrien}
38696263Sobrien
38796263Sobrieninline vector unsigned char
38896263Sobrienvec_adds (vector unsigned char a1, vector unsigned char a2)
38996263Sobrien{
39096263Sobrien  return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
39196263Sobrien}
39296263Sobrien
39396263Sobrieninline vector signed char
39496263Sobrienvec_adds (vector signed char a1, vector signed char a2)
39596263Sobrien{
39696263Sobrien  return (vector signed char) __builtin_altivec_vaddsbs ((vector signed char) a1, (vector signed char) a2);
39796263Sobrien}
39896263Sobrien
39996263Sobrieninline vector unsigned short
40096263Sobrienvec_adds (vector signed short a1, vector unsigned short a2)
40196263Sobrien{
40296263Sobrien  return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
40396263Sobrien}
40496263Sobrien
40596263Sobrieninline vector unsigned short
40696263Sobrienvec_adds (vector unsigned short a1, vector signed short a2)
40796263Sobrien{
40896263Sobrien  return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
40996263Sobrien}
41096263Sobrien
41196263Sobrieninline vector unsigned short
41296263Sobrienvec_adds (vector unsigned short a1, vector unsigned short a2)
41396263Sobrien{
41496263Sobrien  return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
41596263Sobrien}
41696263Sobrien
41796263Sobrieninline vector signed short
41896263Sobrienvec_adds (vector signed short a1, vector signed short a2)
41996263Sobrien{
42096263Sobrien  return (vector signed short) __builtin_altivec_vaddshs ((vector signed short) a1, (vector signed short) a2);
42196263Sobrien}
42296263Sobrien
42396263Sobrieninline vector unsigned int
42496263Sobrienvec_adds (vector signed int a1, vector unsigned int a2)
42596263Sobrien{
42696263Sobrien  return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
42796263Sobrien}
42896263Sobrien
42996263Sobrieninline vector unsigned int
43096263Sobrienvec_adds (vector unsigned int a1, vector signed int a2)
43196263Sobrien{
43296263Sobrien  return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
43396263Sobrien}
43496263Sobrien
43596263Sobrieninline vector unsigned int
43696263Sobrienvec_adds (vector unsigned int a1, vector unsigned int a2)
43796263Sobrien{
43896263Sobrien  return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
43996263Sobrien}
44096263Sobrien
44196263Sobrieninline vector signed int
44296263Sobrienvec_adds (vector signed int a1, vector signed int a2)
44396263Sobrien{
44496263Sobrien  return (vector signed int) __builtin_altivec_vaddsws ((vector signed int) a1, (vector signed int) a2);
44596263Sobrien}
44696263Sobrien
44796263Sobrien/* vec_vaddsws */
44896263Sobrien
44996263Sobrieninline vector signed int
45096263Sobrienvec_vaddsws (vector signed int a1, vector signed int a2)
45196263Sobrien{
45296263Sobrien  return (vector signed int) __builtin_altivec_vaddsws ((vector signed int) a1, (vector signed int) a2);
45396263Sobrien}
45496263Sobrien
45596263Sobrien/* vec_vadduws */
45696263Sobrien
45796263Sobrieninline vector unsigned int
45896263Sobrienvec_vadduws (vector signed int a1, vector unsigned int a2)
45996263Sobrien{
46096263Sobrien  return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
46196263Sobrien}
46296263Sobrien
46396263Sobrieninline vector unsigned int
46496263Sobrienvec_vadduws (vector unsigned int a1, vector signed int a2)
46596263Sobrien{
46696263Sobrien  return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
46796263Sobrien}
46896263Sobrien
46996263Sobrieninline vector unsigned int
47096263Sobrienvec_vadduws (vector unsigned int a1, vector unsigned int a2)
47196263Sobrien{
47296263Sobrien  return (vector unsigned int) __builtin_altivec_vadduws ((vector signed int) a1, (vector signed int) a2);
47396263Sobrien}
47496263Sobrien
47596263Sobrien/* vec_vaddshs */
47696263Sobrieninline vector signed short
47796263Sobrienvec_vaddshs (vector signed short a1, vector signed short a2)
47896263Sobrien{
47996263Sobrien  return (vector signed short) __builtin_altivec_vaddshs ((vector signed short) a1, (vector signed short) a2);
48096263Sobrien}
48196263Sobrien
48296263Sobrien/* vec_vadduhs */
48396263Sobrien
48496263Sobrieninline vector unsigned short
48596263Sobrienvec_vadduhs (vector signed short a1, vector unsigned short a2)
48696263Sobrien{
48796263Sobrien  return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
48896263Sobrien}
48996263Sobrien
49096263Sobrieninline vector unsigned short
49196263Sobrienvec_vadduhs (vector unsigned short a1, vector signed short a2)
49296263Sobrien{
49396263Sobrien  return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
49496263Sobrien}
49596263Sobrien
49696263Sobrieninline vector unsigned short
49796263Sobrienvec_vadduhs (vector unsigned short a1, vector unsigned short a2)
49896263Sobrien{
49996263Sobrien  return (vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) a1, (vector signed short) a2);
50096263Sobrien}
50196263Sobrien
50296263Sobrien/* vec_vaddsbs */
50396263Sobrien
50496263Sobrieninline vector signed char
50596263Sobrienvec_vaddsbs (vector signed char a1, vector signed char a2)
50696263Sobrien{
50796263Sobrien  return (vector signed char) __builtin_altivec_vaddsbs ((vector signed char) a1, (vector signed char) a2);
50896263Sobrien}
50996263Sobrien
51096263Sobrien/* vec_vaddubs */
51196263Sobrien
51296263Sobrieninline vector unsigned char
51396263Sobrienvec_vaddubs (vector signed char a1, vector unsigned char a2)
51496263Sobrien{
51596263Sobrien  return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
51696263Sobrien}
51796263Sobrien
51896263Sobrieninline vector unsigned char
51996263Sobrienvec_vaddubs (vector unsigned char a1, vector signed char a2)
52096263Sobrien{
52196263Sobrien  return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
52296263Sobrien}
52396263Sobrien
52496263Sobrieninline vector unsigned char
52596263Sobrienvec_vaddubs (vector unsigned char a1, vector unsigned char a2)
52696263Sobrien{
52796263Sobrien  return (vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) a1, (vector signed char) a2);
52896263Sobrien}
52996263Sobrien
53096263Sobrien/* vec_and */
53196263Sobrien
53296263Sobrieninline vector float
53396263Sobrienvec_and (vector float a1, vector float a2)
53496263Sobrien{
53596263Sobrien  return (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
53696263Sobrien}
53796263Sobrien
53896263Sobrieninline vector float
53996263Sobrienvec_and (vector float a1, vector signed int a2)
54096263Sobrien{
54196263Sobrien  return (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
54296263Sobrien}
54396263Sobrien
54496263Sobrieninline vector float
54596263Sobrienvec_and (vector signed int a1, vector float a2)
54696263Sobrien{
54796263Sobrien  return (vector float) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
54896263Sobrien}
54996263Sobrien
55096263Sobrieninline vector signed int
55196263Sobrienvec_and (vector signed int a1, vector signed int a2)
55296263Sobrien{
55396263Sobrien  return (vector signed int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
55496263Sobrien}
55596263Sobrien
55696263Sobrieninline vector unsigned int
55796263Sobrienvec_and (vector signed int a1, vector unsigned int a2)
55896263Sobrien{
55996263Sobrien  return (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
56096263Sobrien}
56196263Sobrien
56296263Sobrieninline vector unsigned int
56396263Sobrienvec_and (vector unsigned int a1, vector signed int a2)
56496263Sobrien{
56596263Sobrien  return (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
56696263Sobrien}
56796263Sobrien
56896263Sobrieninline vector unsigned int
56996263Sobrienvec_and (vector unsigned int a1, vector unsigned int a2)
57096263Sobrien{
57196263Sobrien  return (vector unsigned int) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
57296263Sobrien}
57396263Sobrien
57496263Sobrieninline vector signed short
57596263Sobrienvec_and (vector signed short a1, vector signed short a2)
57696263Sobrien{
57796263Sobrien  return (vector signed short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
57896263Sobrien}
57996263Sobrien
58096263Sobrieninline vector unsigned short
58196263Sobrienvec_and (vector signed short a1, vector unsigned short a2)
58296263Sobrien{
58396263Sobrien  return (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
58496263Sobrien}
58596263Sobrien
58696263Sobrieninline vector unsigned short
58796263Sobrienvec_and (vector unsigned short a1, vector signed short a2)
58896263Sobrien{
58996263Sobrien  return (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
59096263Sobrien}
59196263Sobrien
59296263Sobrieninline vector unsigned short
59396263Sobrienvec_and (vector unsigned short a1, vector unsigned short a2)
59496263Sobrien{
59596263Sobrien  return (vector unsigned short) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
59696263Sobrien}
59796263Sobrien
59896263Sobrieninline vector signed char
59996263Sobrienvec_and (vector signed char a1, vector signed char a2)
60096263Sobrien{
60196263Sobrien  return (vector signed char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
60296263Sobrien}
60396263Sobrien
60496263Sobrieninline vector unsigned char
60596263Sobrienvec_and (vector signed char a1, vector unsigned char a2)
60696263Sobrien{
60796263Sobrien  return (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
60896263Sobrien}
60996263Sobrien
61096263Sobrieninline vector unsigned char
61196263Sobrienvec_and (vector unsigned char a1, vector signed char a2)
61296263Sobrien{
61396263Sobrien  return (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
61496263Sobrien}
61596263Sobrien
61696263Sobrieninline vector unsigned char
61796263Sobrienvec_and (vector unsigned char a1, vector unsigned char a2)
61896263Sobrien{
61996263Sobrien  return (vector unsigned char) __builtin_altivec_vand ((vector signed int) a1, (vector signed int) a2);
62096263Sobrien}
62196263Sobrien
62296263Sobrien/* vec_andc */
62396263Sobrien
62496263Sobrieninline vector float
62596263Sobrienvec_andc (vector float a1, vector float a2)
62696263Sobrien{
62796263Sobrien  return (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
62896263Sobrien}
62996263Sobrien
63096263Sobrieninline vector float
63196263Sobrienvec_andc (vector float a1, vector signed int a2)
63296263Sobrien{
63396263Sobrien  return (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
63496263Sobrien}
63596263Sobrien
63696263Sobrieninline vector float
63796263Sobrienvec_andc (vector signed int a1, vector float a2)
63896263Sobrien{
63996263Sobrien  return (vector float) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
64096263Sobrien}
64196263Sobrien
64296263Sobrieninline vector signed int
64396263Sobrienvec_andc (vector signed int a1, vector signed int a2)
64496263Sobrien{
64596263Sobrien  return (vector signed int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
64696263Sobrien}
64796263Sobrien
64896263Sobrieninline vector unsigned int
64996263Sobrienvec_andc (vector signed int a1, vector unsigned int a2)
65096263Sobrien{
65196263Sobrien  return (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
65296263Sobrien}
65396263Sobrien
65496263Sobrieninline vector unsigned int
65596263Sobrienvec_andc (vector unsigned int a1, vector signed int a2)
65696263Sobrien{
65796263Sobrien  return (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
65896263Sobrien}
65996263Sobrien
66096263Sobrieninline vector unsigned int
66196263Sobrienvec_andc (vector unsigned int a1, vector unsigned int a2)
66296263Sobrien{
66396263Sobrien  return (vector unsigned int) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
66496263Sobrien}
66596263Sobrien
66696263Sobrieninline vector signed short
66796263Sobrienvec_andc (vector signed short a1, vector signed short a2)
66896263Sobrien{
66996263Sobrien  return (vector signed short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
67096263Sobrien}
67196263Sobrien
67296263Sobrieninline vector unsigned short
67396263Sobrienvec_andc (vector signed short a1, vector unsigned short a2)
67496263Sobrien{
67596263Sobrien  return (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
67696263Sobrien}
67796263Sobrien
67896263Sobrieninline vector unsigned short
67996263Sobrienvec_andc (vector unsigned short a1, vector signed short a2)
68096263Sobrien{
68196263Sobrien  return (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
68296263Sobrien}
68396263Sobrien
68496263Sobrieninline vector unsigned short
68596263Sobrienvec_andc (vector unsigned short a1, vector unsigned short a2)
68696263Sobrien{
68796263Sobrien  return (vector unsigned short) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
68896263Sobrien}
68996263Sobrien
69096263Sobrieninline vector signed char
69196263Sobrienvec_andc (vector signed char a1, vector signed char a2)
69296263Sobrien{
69396263Sobrien  return (vector signed char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
69496263Sobrien}
69596263Sobrien
69696263Sobrieninline vector unsigned char
69796263Sobrienvec_andc (vector signed char a1, vector unsigned char a2)
69896263Sobrien{
69996263Sobrien  return (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
70096263Sobrien}
70196263Sobrien
70296263Sobrieninline vector unsigned char
70396263Sobrienvec_andc (vector unsigned char a1, vector signed char a2)
70496263Sobrien{
70596263Sobrien  return (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
70696263Sobrien}
70796263Sobrien
70896263Sobrieninline vector unsigned char
70996263Sobrienvec_andc (vector unsigned char a1, vector unsigned char a2)
71096263Sobrien{
71196263Sobrien  return (vector unsigned char) __builtin_altivec_vandc ((vector signed int) a1, (vector signed int) a2);
71296263Sobrien}
71396263Sobrien
71496263Sobrien/* vec_avg */
71596263Sobrien
71696263Sobrieninline vector unsigned char
71796263Sobrienvec_avg (vector unsigned char a1, vector unsigned char a2)
71896263Sobrien{
71996263Sobrien  return (vector unsigned char) __builtin_altivec_vavgub ((vector signed char) a1, (vector signed char) a2);
72096263Sobrien}
72196263Sobrien
72296263Sobrieninline vector signed char
72396263Sobrienvec_avg (vector signed char a1, vector signed char a2)
72496263Sobrien{
72596263Sobrien  return (vector signed char) __builtin_altivec_vavgsb ((vector signed char) a1, (vector signed char) a2);
72696263Sobrien}
72796263Sobrien
72896263Sobrieninline vector unsigned short
72996263Sobrienvec_avg (vector unsigned short a1, vector unsigned short a2)
73096263Sobrien{
73196263Sobrien  return (vector unsigned short) __builtin_altivec_vavguh ((vector signed short) a1, (vector signed short) a2);
73296263Sobrien}
73396263Sobrien
73496263Sobrieninline vector signed short
73596263Sobrienvec_avg (vector signed short a1, vector signed short a2)
73696263Sobrien{
73796263Sobrien  return (vector signed short) __builtin_altivec_vavgsh ((vector signed short) a1, (vector signed short) a2);
73896263Sobrien}
73996263Sobrien
74096263Sobrieninline vector unsigned int
74196263Sobrienvec_avg (vector unsigned int a1, vector unsigned int a2)
74296263Sobrien{
74396263Sobrien  return (vector unsigned int) __builtin_altivec_vavguw ((vector signed int) a1, (vector signed int) a2);
74496263Sobrien}
74596263Sobrien
74696263Sobrieninline vector signed int
74796263Sobrienvec_avg (vector signed int a1, vector signed int a2)
74896263Sobrien{
74996263Sobrien  return (vector signed int) __builtin_altivec_vavgsw ((vector signed int) a1, (vector signed int) a2);
75096263Sobrien}
75196263Sobrien
75296263Sobrien/* vec_vavgsw */
75396263Sobrien
75496263Sobrieninline vector signed int
75596263Sobrienvec_vavgsw (vector signed int a1, vector signed int a2)
75696263Sobrien{
75796263Sobrien  return (vector signed int) __builtin_altivec_vavgsw ((vector signed int) a1, (vector signed int) a2);
75896263Sobrien}
75996263Sobrien
76096263Sobrien/* vec_vavguw */
76196263Sobrien
76296263Sobrieninline vector unsigned int
76396263Sobrienvec_vavguw (vector unsigned int a1, vector unsigned int a2)
76496263Sobrien{
76596263Sobrien  return (vector unsigned int) __builtin_altivec_vavguw ((vector signed int) a1, (vector signed int) a2);
76696263Sobrien}
76796263Sobrien
76896263Sobrien/* vec_vavgsh */
76996263Sobrien
77096263Sobrieninline vector signed short
77196263Sobrienvec_vavgsh (vector signed short a1, vector signed short a2)
77296263Sobrien{
77396263Sobrien  return (vector signed short) __builtin_altivec_vavgsh ((vector signed short) a1, (vector signed short) a2);
77496263Sobrien}
77596263Sobrien
77696263Sobrien/* vec_vavguh */
77796263Sobrien
77896263Sobrieninline vector unsigned short
77996263Sobrienvec_vavguh (vector unsigned short a1, vector unsigned short a2)
78096263Sobrien{
78196263Sobrien  return (vector unsigned short) __builtin_altivec_vavguh ((vector signed short) a1, (vector signed short) a2);
78296263Sobrien}
78396263Sobrien
78496263Sobrien/* vec_vavgsb */
78596263Sobrien
78696263Sobrieninline vector signed char
78796263Sobrienvec_vavgsb (vector signed char a1, vector signed char a2)
78896263Sobrien{
78996263Sobrien  return (vector signed char) __builtin_altivec_vavgsb ((vector signed char) a1, (vector signed char) a2);
79096263Sobrien}
79196263Sobrien
79296263Sobrien/* vec_vavgub */
79396263Sobrien
79496263Sobrieninline vector unsigned char
79596263Sobrienvec_vavgub (vector unsigned char a1, vector unsigned char a2)
79696263Sobrien{
79796263Sobrien  return (vector unsigned char) __builtin_altivec_vavgub ((vector signed char) a1, (vector signed char) a2);
79896263Sobrien}
79996263Sobrien
80096263Sobrien/* vec_ceil */
80196263Sobrien
80296263Sobrieninline vector float
80396263Sobrienvec_ceil (vector float a1)
80496263Sobrien{
80596263Sobrien  return (vector float) __builtin_altivec_vrfip ((vector float) a1);
80696263Sobrien}
80796263Sobrien
80896263Sobrien/* vec_cmpb */
80996263Sobrien
81096263Sobrieninline vector signed int
81196263Sobrienvec_cmpb (vector float a1, vector float a2)
81296263Sobrien{
81396263Sobrien  return (vector signed int) __builtin_altivec_vcmpbfp ((vector float) a1, (vector float) a2);
81496263Sobrien}
81596263Sobrien
81696263Sobrien/* vec_cmpeq */
81796263Sobrien
81896263Sobrieninline vector signed char
81996263Sobrienvec_cmpeq (vector signed char a1, vector signed char a2)
82096263Sobrien{
82196263Sobrien  return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
82296263Sobrien}
82396263Sobrien
82496263Sobrieninline vector signed char
82596263Sobrienvec_cmpeq (vector unsigned char a1, vector unsigned char a2)
82696263Sobrien{
82796263Sobrien  return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
82896263Sobrien}
82996263Sobrien
83096263Sobrieninline vector signed short
83196263Sobrienvec_cmpeq (vector signed short a1, vector signed short a2)
83296263Sobrien{
83396263Sobrien  return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
83496263Sobrien}
83596263Sobrien
83696263Sobrieninline vector signed short
83796263Sobrienvec_cmpeq (vector unsigned short a1, vector unsigned short a2)
83896263Sobrien{
83996263Sobrien  return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
84096263Sobrien}
84196263Sobrien
84296263Sobrieninline vector signed int
84396263Sobrienvec_cmpeq (vector signed int a1, vector signed int a2)
84496263Sobrien{
84596263Sobrien  return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
84696263Sobrien}
84796263Sobrien
84896263Sobrieninline vector signed int
84996263Sobrienvec_cmpeq (vector unsigned int a1, vector unsigned int a2)
85096263Sobrien{
85196263Sobrien  return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
85296263Sobrien}
85396263Sobrien
85496263Sobrieninline vector signed int
85596263Sobrienvec_cmpeq (vector float a1, vector float a2)
85696263Sobrien{
85796263Sobrien  return (vector signed int) __builtin_altivec_vcmpeqfp ((vector float) a1, (vector float) a2);
85896263Sobrien}
85996263Sobrien
86096263Sobrien/* vec_vcmpeqfp */
86196263Sobrien
86296263Sobrieninline vector signed int
86396263Sobrienvec_vcmpeqfp (vector float a1, vector float a2)
86496263Sobrien{
86596263Sobrien  return (vector signed int) __builtin_altivec_vcmpeqfp ((vector float) a1, (vector float) a2);
86696263Sobrien}
86796263Sobrien
86896263Sobrien/* vec_vcmpequw */
86996263Sobrien
87096263Sobrieninline vector signed int
87196263Sobrienvec_vcmpequw (vector signed int a1, vector signed int a2)
87296263Sobrien{
87396263Sobrien  return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
87496263Sobrien}
87596263Sobrien
87696263Sobrieninline vector signed int
87796263Sobrienvec_vcmpequw (vector unsigned int a1, vector unsigned int a2)
87896263Sobrien{
87996263Sobrien  return (vector signed int) __builtin_altivec_vcmpequw ((vector signed int) a1, (vector signed int) a2);
88096263Sobrien}
88196263Sobrien
88296263Sobrien/* vec_vcmpequh */
88396263Sobrien
88496263Sobrieninline vector signed short
88596263Sobrienvec_vcmpequh (vector signed short a1, vector signed short a2)
88696263Sobrien{
88796263Sobrien  return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
88896263Sobrien}
88996263Sobrien
89096263Sobrieninline vector signed short
89196263Sobrienvec_vcmpequh (vector unsigned short a1, vector unsigned short a2)
89296263Sobrien{
89396263Sobrien  return (vector signed short) __builtin_altivec_vcmpequh ((vector signed short) a1, (vector signed short) a2);
89496263Sobrien}
89596263Sobrien
89696263Sobrien/* vec_vcmpequb */
89796263Sobrien
89896263Sobrieninline vector signed char
89996263Sobrienvec_vcmpequb (vector signed char a1, vector signed char a2)
90096263Sobrien{
90196263Sobrien  return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
90296263Sobrien}
90396263Sobrien
90496263Sobrieninline vector signed char
90596263Sobrienvec_vcmpequb (vector unsigned char a1, vector unsigned char a2)
90696263Sobrien{
90796263Sobrien  return (vector signed char) __builtin_altivec_vcmpequb ((vector signed char) a1, (vector signed char) a2);
90896263Sobrien}
90996263Sobrien
91096263Sobrien/* vec_cmpge */
91196263Sobrien
91296263Sobrieninline vector signed int
91396263Sobrienvec_cmpge (vector float a1, vector float a2)
91496263Sobrien{
91596263Sobrien  return (vector signed int) __builtin_altivec_vcmpgefp ((vector float) a1, (vector float) a2);
91696263Sobrien}
91796263Sobrien
91896263Sobrien/* vec_cmpgt */
91996263Sobrien
92096263Sobrieninline vector signed char
92196263Sobrienvec_cmpgt (vector unsigned char a1, vector unsigned char a2)
92296263Sobrien{
92396263Sobrien  return (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2);
92496263Sobrien}
92596263Sobrien
92696263Sobrieninline vector signed char
92796263Sobrienvec_cmpgt (vector signed char a1, vector signed char a2)
92896263Sobrien{
92996263Sobrien  return (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2);
93096263Sobrien}
93196263Sobrien
93296263Sobrieninline vector signed short
93396263Sobrienvec_cmpgt (vector unsigned short a1, vector unsigned short a2)
93496263Sobrien{
93596263Sobrien  return (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2);
93696263Sobrien}
93796263Sobrien
93896263Sobrieninline vector signed short
93996263Sobrienvec_cmpgt (vector signed short a1, vector signed short a2)
94096263Sobrien{
94196263Sobrien  return (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2);
94296263Sobrien}
94396263Sobrien
94496263Sobrieninline vector signed int
94596263Sobrienvec_cmpgt (vector unsigned int a1, vector unsigned int a2)
94696263Sobrien{
94796263Sobrien  return (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2);
94896263Sobrien}
94996263Sobrien
95096263Sobrieninline vector signed int
95196263Sobrienvec_cmpgt (vector signed int a1, vector signed int a2)
95296263Sobrien{
95396263Sobrien  return (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2);
95496263Sobrien}
95596263Sobrien
95696263Sobrieninline vector signed int
95796263Sobrienvec_cmpgt (vector float a1, vector float a2)
95896263Sobrien{
95996263Sobrien  return (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2);
96096263Sobrien}
96196263Sobrien
96296263Sobrien/* vec_vcmpgtfp */
96396263Sobrien
96496263Sobrieninline vector signed int
96596263Sobrienvec_vcmpgtfp (vector float a1, vector float a2)
96696263Sobrien{
96796263Sobrien  return (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2);
96896263Sobrien}
96996263Sobrien
97096263Sobrien/* vec_vcmpgtsw */
97196263Sobrien
97296263Sobrieninline vector signed int
97396263Sobrienvec_vcmpgtsw (vector signed int a1, vector signed int a2)
97496263Sobrien{
97596263Sobrien  return (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2);
97696263Sobrien}
97796263Sobrien
97896263Sobrien/* vec_vcmpgtuw */
97996263Sobrien
98096263Sobrieninline vector signed int
98196263Sobrienvec_vcmpgtuw (vector unsigned int a1, vector unsigned int a2)
98296263Sobrien{
98396263Sobrien  return (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2);
98496263Sobrien}
98596263Sobrien
98696263Sobrien/* vec_vcmpgtsh */
98796263Sobrien
98896263Sobrieninline vector signed short
98996263Sobrienvec_cmpgtsh (vector signed short a1, vector signed short a2)
99096263Sobrien{
99196263Sobrien  return (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2);
99296263Sobrien}
99396263Sobrien
99496263Sobrien/* vec_vcmpgtuh */
99596263Sobrien
99696263Sobrieninline vector signed short
99796263Sobrienvec_vcmpgtuh (vector unsigned short a1, vector unsigned short a2)
99896263Sobrien{
99996263Sobrien  return (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2);
100096263Sobrien}
100196263Sobrien
100296263Sobrien/* vec_vcmpgtsb */
100396263Sobrien
100496263Sobrieninline vector signed char
100596263Sobrienvec_vcmpgtsb (vector signed char a1, vector signed char a2)
100696263Sobrien{
100796263Sobrien  return (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2);
100896263Sobrien}
100996263Sobrien
101096263Sobrien/* vec_vcmpgtub */
101196263Sobrien
101296263Sobrieninline vector signed char
101396263Sobrienvec_vcmpgtub (vector unsigned char a1, vector unsigned char a2)
101496263Sobrien{
101596263Sobrien  return (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2);
101696263Sobrien}
101796263Sobrien
101896263Sobrien/* vec_cmple */
101996263Sobrien
102096263Sobrieninline vector signed int
102196263Sobrienvec_cmple (vector float a1, vector float a2)
102296263Sobrien{
102396263Sobrien  return (vector signed int) __builtin_altivec_vcmpgefp ((vector float) a1, (vector float) a2);
102496263Sobrien}
102596263Sobrien
102696263Sobrien/* vec_cmplt */
102796263Sobrien
102896263Sobrieninline vector signed char
102996263Sobrienvec_cmplt (vector unsigned char a1, vector unsigned char a2)
103096263Sobrien{
103196263Sobrien  return (vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) a1, (vector signed char) a2);
103296263Sobrien}
103396263Sobrien
103496263Sobrieninline vector signed char
103596263Sobrienvec_cmplt (vector signed char a1, vector signed char a2)
103696263Sobrien{
103796263Sobrien  return (vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) a1, (vector signed char) a2);
103896263Sobrien}
103996263Sobrien
104096263Sobrieninline vector signed short
104196263Sobrienvec_cmplt (vector unsigned short a1, vector unsigned short a2)
104296263Sobrien{
104396263Sobrien  return (vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) a1, (vector signed short) a2);
104496263Sobrien}
104596263Sobrien
104696263Sobrieninline vector signed short
104796263Sobrienvec_cmplt (vector signed short a1, vector signed short a2)
104896263Sobrien{
104996263Sobrien  return (vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) a1, (vector signed short) a2);
105096263Sobrien}
105196263Sobrien
105296263Sobrieninline vector signed int
105396263Sobrienvec_cmplt (vector unsigned int a1, vector unsigned int a2)
105496263Sobrien{
105596263Sobrien  return (vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) a1, (vector signed int) a2);
105696263Sobrien}
105796263Sobrien
105896263Sobrieninline vector signed int
105996263Sobrienvec_cmplt (vector signed int a1, vector signed int a2)
106096263Sobrien{
106196263Sobrien  return (vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) a1, (vector signed int) a2);
106296263Sobrien}
106396263Sobrien
106496263Sobrieninline vector signed int
106596263Sobrienvec_cmplt (vector float a1, vector float a2)
106696263Sobrien{
106796263Sobrien  return (vector signed int) __builtin_altivec_vcmpgtfp ((vector float) a1, (vector float) a2);
106896263Sobrien}
106996263Sobrien
107096263Sobrien/* vec_ctf */
107196263Sobrien
107296263Sobrieninline vector float
107396263Sobrienvec_ctf (vector unsigned int a1, const char a2)
107496263Sobrien{
107596263Sobrien  return (vector float) __builtin_altivec_vcfux ((vector signed int) a1, a2);
107696263Sobrien}
107796263Sobrien
107896263Sobrieninline vector float
107996263Sobrienvec_ctf (vector signed int a1, const char a2)
108096263Sobrien{
108196263Sobrien  return (vector float) __builtin_altivec_vcfsx ((vector signed int) a1, a2);
108296263Sobrien}
108396263Sobrien
108496263Sobrien/* vec_vcfsx */
108596263Sobrien
108696263Sobrieninline vector float
108796263Sobrienvec_vcfsx (vector signed int a1, const char a2)
108896263Sobrien{
108996263Sobrien  return (vector float) __builtin_altivec_vcfsx ((vector signed int) a1, a2);
109096263Sobrien}
109196263Sobrien
109296263Sobrien/* vec_vcfux */
109396263Sobrien
109496263Sobrieninline vector float
109596263Sobrienvec_vcfux (vector unsigned int a1, const char a2)
109696263Sobrien{
109796263Sobrien  return (vector float) __builtin_altivec_vcfux ((vector signed int) a1, a2);
109896263Sobrien}
109996263Sobrien
110096263Sobrien/* vec_cts */
110196263Sobrien
110296263Sobrieninline vector signed int
110396263Sobrienvec_cts (vector float a1, const char a2)
110496263Sobrien{
110596263Sobrien  return (vector signed int) __builtin_altivec_vctsxs ((vector float) a1, a2);
110696263Sobrien}
110796263Sobrien
110896263Sobrien/* vec_ctu */
110996263Sobrien
111096263Sobrieninline vector unsigned int
111196263Sobrienvec_ctu (vector float a1, const char a2)
111296263Sobrien{
111396263Sobrien  return (vector unsigned int) __builtin_altivec_vctuxs ((vector float) a1, a2);
111496263Sobrien}
111596263Sobrien
111696263Sobrien/* vec_dss */
111796263Sobrien
111896263Sobrieninline void
111996263Sobrienvec_dss (const char a1)
112096263Sobrien{
112196263Sobrien  __builtin_altivec_dss (a1);
112296263Sobrien}
112396263Sobrien
112496263Sobrien/* vec_dssall */
112596263Sobrien
112696263Sobrieninline void
112796263Sobrienvec_dssall ()
112896263Sobrien{
112996263Sobrien  __builtin_altivec_dssall ();
113096263Sobrien}
113196263Sobrien
113296263Sobrien/* vec_dst */
113396263Sobrien
113496263Sobrieninline void
113596263Sobrienvec_dst (void *a1, int a2, const char a3)
113696263Sobrien{
113796263Sobrien  __builtin_altivec_dst ((void *) a1, a2, a3);
113896263Sobrien}
113996263Sobrien
114096263Sobrien/* vec_dstst */
114196263Sobrien
114296263Sobrieninline void
114396263Sobrienvec_dstst (void *a1, int a2, const char a3)
114496263Sobrien{
114596263Sobrien  __builtin_altivec_dstst ((void *) a1, a2, a3);
114696263Sobrien}
114796263Sobrien
114896263Sobrien/* vec_dststt */
114996263Sobrien
115096263Sobrieninline void
115196263Sobrienvec_dststt (void *a1, int a2, const char a3)
115296263Sobrien{
115396263Sobrien  __builtin_altivec_dststt ((void *) a1, a2, a3);
115496263Sobrien}
115596263Sobrien
115696263Sobrien/* vec_dstt */
115796263Sobrien
115896263Sobrieninline void
115996263Sobrienvec_dstt (void *a1, int a2, const char a3)
116096263Sobrien{
116196263Sobrien  __builtin_altivec_dstt ((void *) a1, a2, a3);
116296263Sobrien}
116396263Sobrien
116496263Sobrien/* vec_expte */
116596263Sobrien
116696263Sobrieninline vector float
116796263Sobrienvec_expte (vector float a1)
116896263Sobrien{
116996263Sobrien  return (vector float) __builtin_altivec_vexptefp ((vector float) a1);
117096263Sobrien}
117196263Sobrien
117296263Sobrien/* vec_floor */
117396263Sobrien
117496263Sobrieninline vector float
117596263Sobrienvec_floor (vector float a1)
117696263Sobrien{
117796263Sobrien  return (vector float) __builtin_altivec_vrfim ((vector float) a1);
117896263Sobrien}
117996263Sobrien
118096263Sobrien/* vec_ld */
118196263Sobrien
118296263Sobrieninline vector float
118396263Sobrienvec_ld (int a1, vector float *a2)
118496263Sobrien{
118596263Sobrien  return (vector float) __builtin_altivec_lvx (a1, (void *) a2);
118696263Sobrien}
118796263Sobrien
118896263Sobrieninline vector float
118996263Sobrienvec_ld (int a1, float *a2)
119096263Sobrien{
119196263Sobrien  return (vector float) __builtin_altivec_lvx (a1, (void *) a2);
119296263Sobrien}
119396263Sobrien
119496263Sobrieninline vector signed int
119596263Sobrienvec_ld (int a1, vector signed int *a2)
119696263Sobrien{
119796263Sobrien  return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2);
119896263Sobrien}
119996263Sobrien
120096263Sobrieninline vector signed int
120196263Sobrienvec_ld (int a1, signed int *a2)
120296263Sobrien{
120396263Sobrien  return (vector signed int) __builtin_altivec_lvx (a1, (void *) a2);
120496263Sobrien}
120596263Sobrien
120696263Sobrieninline vector unsigned int
120796263Sobrienvec_ld (int a1, vector unsigned int *a2)
120896263Sobrien{
120996263Sobrien  return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2);
121096263Sobrien}
121196263Sobrien
121296263Sobrieninline vector unsigned int
121396263Sobrienvec_ld (int a1, unsigned int *a2)
121496263Sobrien{
121596263Sobrien  return (vector unsigned int) __builtin_altivec_lvx (a1, (void *) a2);
121696263Sobrien}
121796263Sobrien
121896263Sobrieninline vector signed short
121996263Sobrienvec_ld (int a1, vector signed short *a2)
122096263Sobrien{
122196263Sobrien  return (vector signed short) __builtin_altivec_lvx (a1, (void *) a2);
122296263Sobrien}
122396263Sobrien
122496263Sobrieninline vector signed short
122596263Sobrienvec_ld (int a1, signed short *a2)
122696263Sobrien{
122796263Sobrien  return (vector signed short) __builtin_altivec_lvx (a1, (void *) a2);
122896263Sobrien}
122996263Sobrien
123096263Sobrieninline vector unsigned short
123196263Sobrienvec_ld (int a1, vector unsigned short *a2)
123296263Sobrien{
123396263Sobrien  return (vector unsigned short) __builtin_altivec_lvx (a1, (void *) a2);
123496263Sobrien}
123596263Sobrien
123696263Sobrieninline vector unsigned short
123796263Sobrienvec_ld (int a1, unsigned short *a2)
123896263Sobrien{
123996263Sobrien  return (vector unsigned short) __builtin_altivec_lvx (a1, (void *) a2);
124096263Sobrien}
124196263Sobrien
124296263Sobrieninline vector signed char
124396263Sobrienvec_ld (int a1, vector signed char *a2)
124496263Sobrien{
124596263Sobrien  return (vector signed char) __builtin_altivec_lvx (a1, (void *) a2);
124696263Sobrien}
124796263Sobrien
124896263Sobrieninline vector signed char
124996263Sobrienvec_ld (int a1, signed char *a2)
125096263Sobrien{
125196263Sobrien  return (vector signed char) __builtin_altivec_lvx (a1, (void *) a2);
125296263Sobrien}
125396263Sobrien
125496263Sobrieninline vector unsigned char
125596263Sobrienvec_ld (int a1, vector unsigned char *a2)
125696263Sobrien{
125796263Sobrien  return (vector unsigned char) __builtin_altivec_lvx (a1, (void *) a2);
125896263Sobrien}
125996263Sobrien
126096263Sobrieninline vector unsigned char
126196263Sobrienvec_ld (int a1, unsigned char *a2)
126296263Sobrien{
126396263Sobrien  return (vector unsigned char) __builtin_altivec_lvx (a1, (void *) a2);
126496263Sobrien}
126596263Sobrien
126696263Sobrien/* vec_lde */
126796263Sobrien
126896263Sobrieninline vector signed char
126996263Sobrienvec_lde (int a1, signed char *a2)
127096263Sobrien{
127196263Sobrien  return (vector signed char) __builtin_altivec_lvebx (a1, (void *) a2);
127296263Sobrien}
127396263Sobrien
127496263Sobrieninline vector unsigned char
127596263Sobrienvec_lde (int a1, unsigned char *a2)
127696263Sobrien{
127796263Sobrien  return (vector unsigned char) __builtin_altivec_lvebx (a1, (void *) a2);
127896263Sobrien}
127996263Sobrien
128096263Sobrieninline vector signed short
128196263Sobrienvec_lde (int a1, signed short *a2)
128296263Sobrien{
128396263Sobrien  return (vector signed short) __builtin_altivec_lvehx (a1, (void *) a2);
128496263Sobrien}
128596263Sobrien
128696263Sobrieninline vector unsigned short
128796263Sobrienvec_lde (int a1, unsigned short *a2)
128896263Sobrien{
128996263Sobrien  return (vector unsigned short) __builtin_altivec_lvehx (a1, (void *) a2);
129096263Sobrien}
129196263Sobrien
129296263Sobrieninline vector float
129396263Sobrienvec_lde (int a1, float *a2)
129496263Sobrien{
129596263Sobrien  return (vector float) __builtin_altivec_lvewx (a1, (void *) a2);
129696263Sobrien}
129796263Sobrien
129896263Sobrieninline vector signed int
129996263Sobrienvec_lde (int a1, signed int *a2)
130096263Sobrien{
130196263Sobrien  return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2);
130296263Sobrien}
130396263Sobrien
130496263Sobrieninline vector unsigned int
130596263Sobrienvec_lde (int a1, unsigned int *a2)
130696263Sobrien{
130796263Sobrien  return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2);
130896263Sobrien}
130996263Sobrien
131096263Sobrien/* vec_lvewx */
131196263Sobrien
131296263Sobrieninline vector float
131396263Sobrienvec_lvewx (int a1, float *a2)
131496263Sobrien{
131596263Sobrien  return (vector float) __builtin_altivec_lvewx (a1, (void *) a2);
131696263Sobrien}
131796263Sobrien
131896263Sobrieninline vector signed int
131996263Sobrienvec_lvewx (int a1, signed int *a2)
132096263Sobrien{
132196263Sobrien  return (vector signed int) __builtin_altivec_lvewx (a1, (void *) a2);
132296263Sobrien}
132396263Sobrien
132496263Sobrieninline vector unsigned int
132596263Sobrienvec_lvewx (int a1, unsigned int *a2)
132696263Sobrien{
132796263Sobrien  return (vector unsigned int) __builtin_altivec_lvewx (a1, (void *) a2);
132896263Sobrien}
132996263Sobrien
133096263Sobrien/* vec_lvehx */
133196263Sobrien
133296263Sobrieninline vector signed short
133396263Sobrienvec_lvehx (int a1, signed short *a2)
133496263Sobrien{
133596263Sobrien  return (vector signed short) __builtin_altivec_lvehx (a1, (void *) a2);
133696263Sobrien}
133796263Sobrien
133896263Sobrieninline vector unsigned short
133996263Sobrienvec_lvehx (int a1, unsigned short *a2)
134096263Sobrien{
134196263Sobrien  return (vector unsigned short) __builtin_altivec_lvehx (a1, (void *) a2);
134296263Sobrien}
134396263Sobrien
134496263Sobrien/* vec_lvebx */
134596263Sobrien
134696263Sobrieninline vector signed char
134796263Sobrienvec_lvebx (int a1, signed char *a2)
134896263Sobrien{
134996263Sobrien  return (vector signed char) __builtin_altivec_lvebx (a1, (void *) a2);
135096263Sobrien}
135196263Sobrien
135296263Sobrieninline vector unsigned char
135396263Sobrienvec_lvebx (int a1, unsigned char *a2)
135496263Sobrien{
135596263Sobrien  return (vector unsigned char) __builtin_altivec_lvebx (a1, (void *) a2);
135696263Sobrien}
135796263Sobrien
135896263Sobrien/* vec_ldl */
135996263Sobrien
136096263Sobrieninline vector float
136196263Sobrienvec_ldl (int a1, vector float *a2)
136296263Sobrien{
136396263Sobrien  return (vector float) __builtin_altivec_lvxl (a1, (void *) a2);
136496263Sobrien}
136596263Sobrien
136696263Sobrieninline vector float
136796263Sobrienvec_ldl (int a1, float *a2)
136896263Sobrien{
136996263Sobrien  return (vector float) __builtin_altivec_lvxl (a1, (void *) a2);
137096263Sobrien}
137196263Sobrien
137296263Sobrieninline vector signed int
137396263Sobrienvec_ldl (int a1, vector signed int *a2)
137496263Sobrien{
137596263Sobrien  return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2);
137696263Sobrien}
137796263Sobrien
137896263Sobrieninline vector signed int
137996263Sobrienvec_ldl (int a1, signed int *a2)
138096263Sobrien{
138196263Sobrien  return (vector signed int) __builtin_altivec_lvxl (a1, (void *) a2);
138296263Sobrien}
138396263Sobrien
138496263Sobrieninline vector unsigned int
138596263Sobrienvec_ldl (int a1, vector unsigned int *a2)
138696263Sobrien{
138796263Sobrien  return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2);
138896263Sobrien}
138996263Sobrien
139096263Sobrieninline vector unsigned int
139196263Sobrienvec_ldl (int a1, unsigned int *a2)
139296263Sobrien{
139396263Sobrien  return (vector unsigned int) __builtin_altivec_lvxl (a1, (void *) a2);
139496263Sobrien}
139596263Sobrien
139696263Sobrieninline vector signed short
139796263Sobrienvec_ldl (int a1, vector signed short *a2)
139896263Sobrien{
139996263Sobrien  return (vector signed short) __builtin_altivec_lvxl (a1, (void *) a2);
140096263Sobrien}
140196263Sobrien
140296263Sobrieninline vector signed short
140396263Sobrienvec_ldl (int a1, signed short *a2)
140496263Sobrien{
140596263Sobrien  return (vector signed short) __builtin_altivec_lvxl (a1, (void *) a2);
140696263Sobrien}
140796263Sobrien
140896263Sobrieninline vector unsigned short
140996263Sobrienvec_ldl (int a1, vector unsigned short *a2)
141096263Sobrien{
141196263Sobrien  return (vector unsigned short) __builtin_altivec_lvxl (a1, (void *) a2);
141296263Sobrien}
141396263Sobrien
141496263Sobrieninline vector unsigned short
141596263Sobrienvec_ldl (int a1, unsigned short *a2)
141696263Sobrien{
141796263Sobrien  return (vector unsigned short) __builtin_altivec_lvxl (a1, (void *) a2);
141896263Sobrien}
141996263Sobrien
142096263Sobrieninline vector signed char
142196263Sobrienvec_ldl (int a1, vector signed char *a2)
142296263Sobrien{
142396263Sobrien  return (vector signed char) __builtin_altivec_lvxl (a1, (void *) a2);
142496263Sobrien}
142596263Sobrien
142696263Sobrieninline vector signed char
142796263Sobrienvec_ldl (int a1, signed char *a2)
142896263Sobrien{
142996263Sobrien  return (vector signed char) __builtin_altivec_lvxl (a1, (void *) a2);
143096263Sobrien}
143196263Sobrien
143296263Sobrieninline vector unsigned char
143396263Sobrienvec_ldl (int a1, vector unsigned char *a2)
143496263Sobrien{
143596263Sobrien  return (vector unsigned char) __builtin_altivec_lvxl (a1, (void *) a2);
143696263Sobrien}
143796263Sobrien
143896263Sobrieninline vector unsigned char
143996263Sobrienvec_ldl (int a1, unsigned char *a2)
144096263Sobrien{
144196263Sobrien  return (vector unsigned char) __builtin_altivec_lvxl (a1, (void *) a2);
144296263Sobrien}
144396263Sobrien
144496263Sobrien/* vec_loge */
144596263Sobrien
144696263Sobrieninline vector float
144796263Sobrienvec_loge (vector float a1)
144896263Sobrien{
144996263Sobrien  return (vector float) __builtin_altivec_vlogefp ((vector float) a1);
145096263Sobrien}
145196263Sobrien
145296263Sobrien/* vec_lvsl */
145396263Sobrien
145496263Sobrieninline vector unsigned char
145596263Sobrienvec_lvsl (int a1, unsigned char *a2)
145696263Sobrien{
145796263Sobrien  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
145896263Sobrien}
145996263Sobrien
146096263Sobrieninline vector unsigned char
146196263Sobrienvec_lvsl (int a1, signed char *a2)
146296263Sobrien{
146396263Sobrien  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
146496263Sobrien}
146596263Sobrien
146696263Sobrieninline vector unsigned char
146796263Sobrienvec_lvsl (int a1, unsigned short *a2)
146896263Sobrien{
146996263Sobrien  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
147096263Sobrien}
147196263Sobrien
147296263Sobrieninline vector unsigned char
147396263Sobrienvec_lvsl (int a1, signed short *a2)
147496263Sobrien{
147596263Sobrien  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
147696263Sobrien}
147796263Sobrien
147896263Sobrieninline vector unsigned char
147996263Sobrienvec_lvsl (int a1, unsigned int *a2)
148096263Sobrien{
148196263Sobrien  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
148296263Sobrien}
148396263Sobrien
148496263Sobrieninline vector unsigned char
148596263Sobrienvec_lvsl (int a1, signed int *a2)
148696263Sobrien{
148796263Sobrien  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
148896263Sobrien}
148996263Sobrien
149096263Sobrieninline vector unsigned char
149196263Sobrienvec_lvsl (int a1, float *a2)
149296263Sobrien{
149396263Sobrien  return (vector unsigned char) __builtin_altivec_lvsl (a1, (void *) a2);
149496263Sobrien}
149596263Sobrien
149696263Sobrien/* vec_lvsr */
149796263Sobrien
149896263Sobrieninline vector unsigned char
149996263Sobrienvec_lvsr (int a1, unsigned char *a2)
150096263Sobrien{
150196263Sobrien  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
150296263Sobrien}
150396263Sobrien
150496263Sobrieninline vector unsigned char
150596263Sobrienvec_lvsr (int a1, signed char *a2)
150696263Sobrien{
150796263Sobrien  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
150896263Sobrien}
150996263Sobrien
151096263Sobrieninline vector unsigned char
151196263Sobrienvec_lvsr (int a1, unsigned short *a2)
151296263Sobrien{
151396263Sobrien  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
151496263Sobrien}
151596263Sobrien
151696263Sobrieninline vector unsigned char
151796263Sobrienvec_lvsr (int a1, signed short *a2)
151896263Sobrien{
151996263Sobrien  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
152096263Sobrien}
152196263Sobrien
152296263Sobrieninline vector unsigned char
152396263Sobrienvec_lvsr (int a1, unsigned int *a2)
152496263Sobrien{
152596263Sobrien  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
152696263Sobrien}
152796263Sobrien
152896263Sobrieninline vector unsigned char
152996263Sobrienvec_lvsr (int a1, signed int *a2)
153096263Sobrien{
153196263Sobrien  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
153296263Sobrien}
153396263Sobrien
153496263Sobrieninline vector unsigned char
153596263Sobrienvec_lvsr (int a1, float *a2)
153696263Sobrien{
153796263Sobrien  return (vector unsigned char) __builtin_altivec_lvsr (a1, (void *) a2);
153896263Sobrien}
153996263Sobrien
154096263Sobrien/* vec_madd */
154196263Sobrien
154296263Sobrieninline vector float
154396263Sobrienvec_madd (vector float a1, vector float a2, vector float a3)
154496263Sobrien{
154596263Sobrien  return (vector float) __builtin_altivec_vmaddfp ((vector float) a1, (vector float) a2, (vector float) a3);
154696263Sobrien}
154796263Sobrien
154896263Sobrien
154996263Sobrien/* vec_madds */
155096263Sobrien
155196263Sobrieninline vector signed short
155296263Sobrienvec_madds (vector signed short a1, vector signed short a2, vector signed short a3)
155396263Sobrien{
155496263Sobrien  return (vector signed short) __builtin_altivec_vmhaddshs ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
155596263Sobrien}
155696263Sobrien
155796263Sobrien/* vec_max */
155896263Sobrien
155996263Sobrieninline vector unsigned char
156096263Sobrienvec_max (vector signed char a1, vector unsigned char a2)
156196263Sobrien{
156296263Sobrien  return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
156396263Sobrien}
156496263Sobrien
156596263Sobrieninline vector unsigned char
156696263Sobrienvec_max (vector unsigned char a1, vector signed char a2)
156796263Sobrien{
156896263Sobrien  return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
156996263Sobrien}
157096263Sobrien
157196263Sobrieninline vector unsigned char
157296263Sobrienvec_max (vector unsigned char a1, vector unsigned char a2)
157396263Sobrien{
157496263Sobrien  return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
157596263Sobrien}
157696263Sobrien
157796263Sobrieninline vector signed char
157896263Sobrienvec_max (vector signed char a1, vector signed char a2)
157996263Sobrien{
158096263Sobrien  return (vector signed char) __builtin_altivec_vmaxsb ((vector signed char) a1, (vector signed char) a2);
158196263Sobrien}
158296263Sobrien
158396263Sobrieninline vector unsigned short
158496263Sobrienvec_max (vector signed short a1, vector unsigned short a2)
158596263Sobrien{
158696263Sobrien  return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
158796263Sobrien}
158896263Sobrien
158996263Sobrieninline vector unsigned short
159096263Sobrienvec_max (vector unsigned short a1, vector signed short a2)
159196263Sobrien{
159296263Sobrien  return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
159396263Sobrien}
159496263Sobrien
159596263Sobrieninline vector unsigned short
159696263Sobrienvec_max (vector unsigned short a1, vector unsigned short a2)
159796263Sobrien{
159896263Sobrien  return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
159996263Sobrien}
160096263Sobrien
160196263Sobrieninline vector signed short
160296263Sobrienvec_max (vector signed short a1, vector signed short a2)
160396263Sobrien{
160496263Sobrien  return (vector signed short) __builtin_altivec_vmaxsh ((vector signed short) a1, (vector signed short) a2);
160596263Sobrien}
160696263Sobrien
160796263Sobrieninline vector unsigned int
160896263Sobrienvec_max (vector signed int a1, vector unsigned int a2)
160996263Sobrien{
161096263Sobrien  return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
161196263Sobrien}
161296263Sobrien
161396263Sobrieninline vector unsigned int
161496263Sobrienvec_max (vector unsigned int a1, vector signed int a2)
161596263Sobrien{
161696263Sobrien  return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
161796263Sobrien}
161896263Sobrien
161996263Sobrieninline vector unsigned int
162096263Sobrienvec_max (vector unsigned int a1, vector unsigned int a2)
162196263Sobrien{
162296263Sobrien  return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
162396263Sobrien}
162496263Sobrien
162596263Sobrieninline vector signed int
162696263Sobrienvec_max (vector signed int a1, vector signed int a2)
162796263Sobrien{
162896263Sobrien  return (vector signed int) __builtin_altivec_vmaxsw ((vector signed int) a1, (vector signed int) a2);
162996263Sobrien}
163096263Sobrien
163196263Sobrieninline vector float
163296263Sobrienvec_max (vector float a1, vector float a2)
163396263Sobrien{
163496263Sobrien  return (vector float) __builtin_altivec_vmaxfp ((vector float) a1, (vector float) a2);
163596263Sobrien}
163696263Sobrien
163796263Sobrien/* vec_vmaxfp */
163896263Sobrien
163996263Sobrieninline vector float
164096263Sobrienvec_vmaxfp (vector float a1, vector float a2)
164196263Sobrien{
164296263Sobrien  return (vector float) __builtin_altivec_vmaxfp ((vector float) a1, (vector float) a2);
164396263Sobrien}
164496263Sobrien
164596263Sobrien/* vec_vmaxsw */
164696263Sobrien
164796263Sobrieninline vector signed int
164896263Sobrienvec_vmaxsw (vector signed int a1, vector signed int a2)
164996263Sobrien{
165096263Sobrien  return (vector signed int) __builtin_altivec_vmaxsw ((vector signed int) a1, (vector signed int) a2);
165196263Sobrien}
165296263Sobrien
165396263Sobrien/* vec_vmaxuw */
165496263Sobrien
165596263Sobrieninline vector unsigned int
165696263Sobrienvec_vmaxuw (vector signed int a1, vector unsigned int a2)
165796263Sobrien{
165896263Sobrien  return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
165996263Sobrien}
166096263Sobrien
166196263Sobrieninline vector unsigned int
166296263Sobrienvec_vmaxuw (vector unsigned int a1, vector signed int a2)
166396263Sobrien{
166496263Sobrien  return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
166596263Sobrien}
166696263Sobrien
166796263Sobrieninline vector unsigned int
166896263Sobrienvec_vmaxuw (vector unsigned int a1, vector unsigned int a2)
166996263Sobrien{
167096263Sobrien  return (vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) a1, (vector signed int) a2);
167196263Sobrien}
167296263Sobrien
167396263Sobrien/* vec_vmaxsh */
167496263Sobrien
167596263Sobrieninline vector signed short
167696263Sobrienvec_vmaxsh (vector signed short a1, vector signed short a2)
167796263Sobrien{
167896263Sobrien  return (vector signed short) __builtin_altivec_vmaxsh ((vector signed short) a1, (vector signed short) a2);
167996263Sobrien}
168096263Sobrien
168196263Sobrien/* vec_vmaxuh */
168296263Sobrien
168396263Sobrieninline vector unsigned short
168496263Sobrienvec_vmaxuh (vector signed short a1, vector unsigned short a2)
168596263Sobrien{
168696263Sobrien  return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
168796263Sobrien}
168896263Sobrien
168996263Sobrieninline vector unsigned short
169096263Sobrienvec_vmaxuh (vector unsigned short a1, vector signed short a2)
169196263Sobrien{
169296263Sobrien  return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
169396263Sobrien}
169496263Sobrien
169596263Sobrieninline vector unsigned short
169696263Sobrienvec_vmaxuh (vector unsigned short a1, vector unsigned short a2)
169796263Sobrien{
169896263Sobrien  return (vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) a1, (vector signed short) a2);
169996263Sobrien}
170096263Sobrien
170196263Sobrien/* vec_vmaxsb */
170296263Sobrien
170396263Sobrieninline vector signed char
170496263Sobrienvec_vmaxsb (vector signed char a1, vector signed char a2)
170596263Sobrien{
170696263Sobrien  return (vector signed char) __builtin_altivec_vmaxsb ((vector signed char) a1, (vector signed char) a2);
170796263Sobrien}
170896263Sobrien
170996263Sobrien/* vec_vmaxub */
171096263Sobrien
171196263Sobrieninline vector unsigned char
171296263Sobrienvec_vmaxub (vector signed char a1, vector unsigned char a2)
171396263Sobrien{
171496263Sobrien  return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
171596263Sobrien}
171696263Sobrien
171796263Sobrieninline vector unsigned char
171896263Sobrienvec_vmaxub (vector unsigned char a1, vector signed char a2)
171996263Sobrien{
172096263Sobrien  return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
172196263Sobrien}
172296263Sobrien
172396263Sobrieninline vector unsigned char
172496263Sobrienvec_vmaxub (vector unsigned char a1, vector unsigned char a2)
172596263Sobrien{
172696263Sobrien  return (vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) a1, (vector signed char) a2);
172796263Sobrien}
172896263Sobrien
172996263Sobrien/* vec_mergeh */
173096263Sobrien
173196263Sobrieninline vector signed char
173296263Sobrienvec_mergeh (vector signed char a1, vector signed char a2)
173396263Sobrien{
173496263Sobrien  return (vector signed char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2);
173596263Sobrien}
173696263Sobrien
173796263Sobrieninline vector unsigned char
173896263Sobrienvec_mergeh (vector unsigned char a1, vector unsigned char a2)
173996263Sobrien{
174096263Sobrien  return (vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2);
174196263Sobrien}
174296263Sobrien
174396263Sobrieninline vector signed short
174496263Sobrienvec_mergeh (vector signed short a1, vector signed short a2)
174596263Sobrien{
174696263Sobrien  return (vector signed short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2);
174796263Sobrien}
174896263Sobrien
174996263Sobrieninline vector unsigned short
175096263Sobrienvec_mergeh (vector unsigned short a1, vector unsigned short a2)
175196263Sobrien{
175296263Sobrien  return (vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2);
175396263Sobrien}
175496263Sobrien
175596263Sobrieninline vector float
175696263Sobrienvec_mergeh (vector float a1, vector float a2)
175796263Sobrien{
175896263Sobrien  return (vector float) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
175996263Sobrien}
176096263Sobrien
176196263Sobrieninline vector signed int
176296263Sobrienvec_mergeh (vector signed int a1, vector signed int a2)
176396263Sobrien{
176496263Sobrien  return (vector signed int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
176596263Sobrien}
176696263Sobrien
176796263Sobrieninline vector unsigned int
176896263Sobrienvec_mergeh (vector unsigned int a1, vector unsigned int a2)
176996263Sobrien{
177096263Sobrien  return (vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
177196263Sobrien}
177296263Sobrien
177396263Sobrien/* vec_vmrghw */
177496263Sobrien
177596263Sobrieninline vector float
177696263Sobrienvec_vmrghw (vector float a1, vector float a2)
177796263Sobrien{
177896263Sobrien  return (vector float) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
177996263Sobrien}
178096263Sobrien
178196263Sobrieninline vector signed int
178296263Sobrienvec_vmrghw (vector signed int a1, vector signed int a2)
178396263Sobrien{
178496263Sobrien  return (vector signed int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
178596263Sobrien}
178696263Sobrien
178796263Sobrieninline vector unsigned int
178896263Sobrienvec_vmrghw (vector unsigned int a1, vector unsigned int a2)
178996263Sobrien{
179096263Sobrien  return (vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) a1, (vector signed int) a2);
179196263Sobrien}
179296263Sobrien
179396263Sobrien/* vec_vmrghh */
179496263Sobrien
179596263Sobrieninline vector signed short
179696263Sobrienvec_vmrghh (vector signed short a1, vector signed short a2)
179796263Sobrien{
179896263Sobrien  return (vector signed short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2);
179996263Sobrien}
180096263Sobrien
180196263Sobrieninline vector unsigned short
180296263Sobrienvec_vmrghh (vector unsigned short a1, vector unsigned short a2)
180396263Sobrien{
180496263Sobrien  return (vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) a1, (vector signed short) a2);
180596263Sobrien}
180696263Sobrien
180796263Sobrien/* vec_vmrghb */
180896263Sobrien
180996263Sobrieninline vector signed char
181096263Sobrienvec_vmrghb (vector signed char a1, vector signed char a2)
181196263Sobrien{
181296263Sobrien  return (vector signed char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2);
181396263Sobrien}
181496263Sobrien
181596263Sobrieninline vector unsigned char
181696263Sobrienvec_vmrghb (vector unsigned char a1, vector unsigned char a2)
181796263Sobrien{
181896263Sobrien  return (vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) a1, (vector signed char) a2);
181996263Sobrien}
182096263Sobrien
182196263Sobrien/* vec_mergel */
182296263Sobrien
182396263Sobrieninline vector signed char
182496263Sobrienvec_mergel (vector signed char a1, vector signed char a2)
182596263Sobrien{
182696263Sobrien  return (vector signed char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2);
182796263Sobrien}
182896263Sobrien
182996263Sobrieninline vector unsigned char
183096263Sobrienvec_mergel (vector unsigned char a1, vector unsigned char a2)
183196263Sobrien{
183296263Sobrien  return (vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2);
183396263Sobrien}
183496263Sobrien
183596263Sobrieninline vector signed short
183696263Sobrienvec_mergel (vector signed short a1, vector signed short a2)
183796263Sobrien{
183896263Sobrien  return (vector signed short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2);
183996263Sobrien}
184096263Sobrien
184196263Sobrieninline vector unsigned short
184296263Sobrienvec_mergel (vector unsigned short a1, vector unsigned short a2)
184396263Sobrien{
184496263Sobrien  return (vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2);
184596263Sobrien}
184696263Sobrien
184796263Sobrieninline vector float
184896263Sobrienvec_mergel (vector float a1, vector float a2)
184996263Sobrien{
185096263Sobrien  return (vector float) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
185196263Sobrien}
185296263Sobrien
185396263Sobrieninline vector signed int
185496263Sobrienvec_mergel (vector signed int a1, vector signed int a2)
185596263Sobrien{
185696263Sobrien  return (vector signed int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
185796263Sobrien}
185896263Sobrien
185996263Sobrieninline vector unsigned int
186096263Sobrienvec_mergel (vector unsigned int a1, vector unsigned int a2)
186196263Sobrien{
186296263Sobrien  return (vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
186396263Sobrien}
186496263Sobrien
186596263Sobrien/* vec_vmrglw */
186696263Sobrien
186796263Sobrieninline vector float
186896263Sobrienvec_vmrglw (vector float a1, vector float a2)
186996263Sobrien{
187096263Sobrien  return (vector float) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
187196263Sobrien}
187296263Sobrien
187396263Sobrieninline vector signed int
187496263Sobrienvec_vmrglw (vector signed int a1, vector signed int a2)
187596263Sobrien{
187696263Sobrien  return (vector signed int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
187796263Sobrien}
187896263Sobrien
187996263Sobrieninline vector unsigned int
188096263Sobrienvec_vmrglw (vector unsigned int a1, vector unsigned int a2)
188196263Sobrien{
188296263Sobrien  return (vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) a1, (vector signed int) a2);
188396263Sobrien}
188496263Sobrien
188596263Sobrien/* vec_vmrglh */
188696263Sobrien
188796263Sobrieninline vector signed short
188896263Sobrienvec_vmrglh (vector signed short a1, vector signed short a2)
188996263Sobrien{
189096263Sobrien  return (vector signed short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2);
189196263Sobrien}
189296263Sobrien
189396263Sobrieninline vector unsigned short
189496263Sobrienvec_vmrglh (vector unsigned short a1, vector unsigned short a2)
189596263Sobrien{
189696263Sobrien  return (vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) a1, (vector signed short) a2);
189796263Sobrien}
189896263Sobrien
189996263Sobrien/* vec_vmrglb */
190096263Sobrien
190196263Sobrieninline vector signed char
190296263Sobrienvec_vmrglb (vector signed char a1, vector signed char a2)
190396263Sobrien{
190496263Sobrien  return (vector signed char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2);
190596263Sobrien}
190696263Sobrien
190796263Sobrieninline vector unsigned char
190896263Sobrienvec_vmrglb (vector unsigned char a1, vector unsigned char a2)
190996263Sobrien{
191096263Sobrien  return (vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) a1, (vector signed char) a2);
191196263Sobrien}
191296263Sobrien
191396263Sobrien/* vec_mfvscr */
191496263Sobrien
191596263Sobrieninline vector unsigned short
191696263Sobrienvec_mfvscr ()
191796263Sobrien{
191896263Sobrien  return (vector unsigned short) __builtin_altivec_mfvscr ();
191996263Sobrien}
192096263Sobrien
192196263Sobrien/* vec_min */
192296263Sobrien
192396263Sobrieninline vector unsigned char
192496263Sobrienvec_min (vector signed char a1, vector unsigned char a2)
192596263Sobrien{
192696263Sobrien  return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
192796263Sobrien}
192896263Sobrien
192996263Sobrieninline vector unsigned char
193096263Sobrienvec_min (vector unsigned char a1, vector signed char a2)
193196263Sobrien{
193296263Sobrien  return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
193396263Sobrien}
193496263Sobrien
193596263Sobrieninline vector unsigned char
193696263Sobrienvec_min (vector unsigned char a1, vector unsigned char a2)
193796263Sobrien{
193896263Sobrien  return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
193996263Sobrien}
194096263Sobrien
194196263Sobrieninline vector signed char
194296263Sobrienvec_min (vector signed char a1, vector signed char a2)
194396263Sobrien{
194496263Sobrien  return (vector signed char) __builtin_altivec_vminsb ((vector signed char) a1, (vector signed char) a2);
194596263Sobrien}
194696263Sobrien
194796263Sobrieninline vector unsigned short
194896263Sobrienvec_min (vector signed short a1, vector unsigned short a2)
194996263Sobrien{
195096263Sobrien  return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
195196263Sobrien}
195296263Sobrien
195396263Sobrieninline vector unsigned short
195496263Sobrienvec_min (vector unsigned short a1, vector signed short a2)
195596263Sobrien{
195696263Sobrien  return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
195796263Sobrien}
195896263Sobrien
195996263Sobrieninline vector unsigned short
196096263Sobrienvec_min (vector unsigned short a1, vector unsigned short a2)
196196263Sobrien{
196296263Sobrien  return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
196396263Sobrien}
196496263Sobrien
196596263Sobrieninline vector signed short
196696263Sobrienvec_min (vector signed short a1, vector signed short a2)
196796263Sobrien{
196896263Sobrien  return (vector signed short) __builtin_altivec_vminsh ((vector signed short) a1, (vector signed short) a2);
196996263Sobrien}
197096263Sobrien
197196263Sobrieninline vector unsigned int
197296263Sobrienvec_min (vector signed int a1, vector unsigned int a2)
197396263Sobrien{
197496263Sobrien  return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
197596263Sobrien}
197696263Sobrien
197796263Sobrieninline vector unsigned int
197896263Sobrienvec_min (vector unsigned int a1, vector signed int a2)
197996263Sobrien{
198096263Sobrien  return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
198196263Sobrien}
198296263Sobrien
198396263Sobrieninline vector unsigned int
198496263Sobrienvec_min (vector unsigned int a1, vector unsigned int a2)
198596263Sobrien{
198696263Sobrien  return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
198796263Sobrien}
198896263Sobrien
198996263Sobrieninline vector signed int
199096263Sobrienvec_min (vector signed int a1, vector signed int a2)
199196263Sobrien{
199296263Sobrien  return (vector signed int) __builtin_altivec_vminsw ((vector signed int) a1, (vector signed int) a2);
199396263Sobrien}
199496263Sobrien
199596263Sobrieninline vector float
199696263Sobrienvec_min (vector float a1, vector float a2)
199796263Sobrien{
199896263Sobrien  return (vector float) __builtin_altivec_vminfp ((vector float) a1, (vector float) a2);
199996263Sobrien}
200096263Sobrien
200196263Sobrien/* vec_vminfp */
200296263Sobrien
200396263Sobrieninline vector float
200496263Sobrienvec_vminfp (vector float a1, vector float a2)
200596263Sobrien{
200696263Sobrien  return (vector float) __builtin_altivec_vminfp ((vector float) a1, (vector float) a2);
200796263Sobrien}
200896263Sobrien
200996263Sobrien/* vec_vminsw */
201096263Sobrien
201196263Sobrieninline vector signed int
201296263Sobrienvec_vminsw (vector signed int a1, vector signed int a2)
201396263Sobrien{
201496263Sobrien  return (vector signed int) __builtin_altivec_vminsw ((vector signed int) a1, (vector signed int) a2);
201596263Sobrien}
201696263Sobrien
201796263Sobrien/* vec_vminuw */
201896263Sobrien
201996263Sobrieninline vector unsigned int
202096263Sobrienvec_vminuw (vector signed int a1, vector unsigned int a2)
202196263Sobrien{
202296263Sobrien  return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
202396263Sobrien}
202496263Sobrien
202596263Sobrieninline vector unsigned int
202696263Sobrienvec_vminuw (vector unsigned int a1, vector signed int a2)
202796263Sobrien{
202896263Sobrien  return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
202996263Sobrien}
203096263Sobrien
203196263Sobrieninline vector unsigned int
203296263Sobrienvec_vminuw (vector unsigned int a1, vector unsigned int a2)
203396263Sobrien{
203496263Sobrien  return (vector unsigned int) __builtin_altivec_vminuw ((vector signed int) a1, (vector signed int) a2);
203596263Sobrien}
203696263Sobrien
203796263Sobrien/* vec_vminsh */
203896263Sobrien
203996263Sobrieninline vector signed short
204096263Sobrienvec_vminsh (vector signed short a1, vector signed short a2)
204196263Sobrien{
204296263Sobrien  return (vector signed short) __builtin_altivec_vminsh ((vector signed short) a1, (vector signed short) a2);
204396263Sobrien}
204496263Sobrien
204596263Sobrien/* vec_vminuh */
204696263Sobrien
204796263Sobrieninline vector unsigned short
204896263Sobrienvec_vminuh (vector signed short a1, vector unsigned short a2)
204996263Sobrien{
205096263Sobrien  return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
205196263Sobrien}
205296263Sobrien
205396263Sobrieninline vector unsigned short
205496263Sobrienvec_vminuh (vector unsigned short a1, vector signed short a2)
205596263Sobrien{
205696263Sobrien  return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
205796263Sobrien}
205896263Sobrien
205996263Sobrieninline vector unsigned short
206096263Sobrienvec_vminuh (vector unsigned short a1, vector unsigned short a2)
206196263Sobrien{
206296263Sobrien  return (vector unsigned short) __builtin_altivec_vminuh ((vector signed short) a1, (vector signed short) a2);
206396263Sobrien}
206496263Sobrien
206596263Sobrien/* vec_vminsb */
206696263Sobrien
206796263Sobrieninline vector signed char
206896263Sobrienvec_vminsb (vector signed char a1, vector signed char a2)
206996263Sobrien{
207096263Sobrien  return (vector signed char) __builtin_altivec_vminsb ((vector signed char) a1, (vector signed char) a2);
207196263Sobrien}
207296263Sobrien
207396263Sobrien/* vec_vminub */
207496263Sobrien
207596263Sobrieninline vector unsigned char
207696263Sobrienvec_vminub (vector signed char a1, vector unsigned char a2)
207796263Sobrien{
207896263Sobrien  return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
207996263Sobrien}
208096263Sobrien
208196263Sobrieninline vector unsigned char
208296263Sobrienvec_vminub (vector unsigned char a1, vector signed char a2)
208396263Sobrien{
208496263Sobrien  return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
208596263Sobrien}
208696263Sobrien
208796263Sobrieninline vector unsigned char
208896263Sobrienvec_vminub (vector unsigned char a1, vector unsigned char a2)
208996263Sobrien{
209096263Sobrien  return (vector unsigned char) __builtin_altivec_vminub ((vector signed char) a1, (vector signed char) a2);
209196263Sobrien}
209296263Sobrien
209396263Sobrien/* vec_mladd */
209496263Sobrien
209596263Sobrieninline vector signed short
209696263Sobrienvec_mladd (vector signed short a1, vector signed short a2, vector signed short a3)
209796263Sobrien{
209896263Sobrien  return (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
209996263Sobrien}
210096263Sobrien
210196263Sobrieninline vector signed short
210296263Sobrienvec_mladd (vector signed short a1, vector unsigned short a2, vector unsigned short a3)
210396263Sobrien{
210496263Sobrien  return (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
210596263Sobrien}
210696263Sobrien
210796263Sobrieninline vector signed short
210896263Sobrienvec_mladd (vector unsigned short a1, vector signed short a2, vector signed short a3)
210996263Sobrien{
211096263Sobrien  return (vector signed short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
211196263Sobrien}
211296263Sobrien
211396263Sobrieninline vector unsigned short
211496263Sobrienvec_mladd (vector unsigned short a1, vector unsigned short a2, vector unsigned short a3)
211596263Sobrien{
211696263Sobrien  return (vector unsigned short) __builtin_altivec_vmladduhm ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
211796263Sobrien}
211896263Sobrien
211996263Sobrien/* vec_mradds */
212096263Sobrien
212196263Sobrieninline vector signed short
212296263Sobrienvec_mradds (vector signed short a1, vector signed short a2, vector signed short a3)
212396263Sobrien{
212496263Sobrien  return (vector signed short) __builtin_altivec_vmhraddshs ((vector signed short) a1, (vector signed short) a2, (vector signed short) a3);
212596263Sobrien}
212696263Sobrien
212796263Sobrien/* vec_msum */
212896263Sobrien
212996263Sobrieninline vector unsigned int
213096263Sobrienvec_msum (vector unsigned char a1, vector unsigned char a2, vector unsigned int a3)
213196263Sobrien{
213296263Sobrien  return (vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3);
213396263Sobrien}
213496263Sobrien
213596263Sobrieninline vector signed int
213696263Sobrienvec_msum (vector signed char a1, vector unsigned char a2, vector signed int a3)
213796263Sobrien{
213896263Sobrien  return (vector signed int) __builtin_altivec_vmsummbm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3);
213996263Sobrien}
214096263Sobrien
214196263Sobrieninline vector unsigned int
214296263Sobrienvec_msum (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3)
214396263Sobrien{
214496263Sobrien  return (vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
214596263Sobrien}
214696263Sobrien
214796263Sobrieninline vector signed int
214896263Sobrienvec_msum (vector signed short a1, vector signed short a2, vector signed int a3)
214996263Sobrien{
215096263Sobrien  return (vector signed int) __builtin_altivec_vmsumshm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
215196263Sobrien}
215296263Sobrien
215396263Sobrien/* vec_vmsumshm */
215496263Sobrien
215596263Sobrieninline vector signed int
215696263Sobrienvec_vmsumshm (vector signed short a1, vector signed short a2, vector signed int a3)
215796263Sobrien{
215896263Sobrien  return (vector signed int) __builtin_altivec_vmsumshm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
215996263Sobrien}
216096263Sobrien
216196263Sobrien/* vec_vmsumuhm */
216296263Sobrien
216396263Sobrieninline vector unsigned int
216496263Sobrienvec_vmsumuhm (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3)
216596263Sobrien{
216696263Sobrien  return (vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
216796263Sobrien}
216896263Sobrien
216996263Sobrien/* vec_vmsummbm */
217096263Sobrien
217196263Sobrieninline vector signed int
217296263Sobrienvec_vmsummbm (vector signed char a1, vector unsigned char a2, vector signed int a3)
217396263Sobrien{
217496263Sobrien  return (vector signed int) __builtin_altivec_vmsummbm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3);
217596263Sobrien}
217696263Sobrien
217796263Sobrien/* vec_vmsumubm */
217896263Sobrien
217996263Sobrieninline vector unsigned int
218096263Sobrienvec_vmsumubm (vector unsigned char a1, vector unsigned char a2, vector unsigned int a3)
218196263Sobrien{
218296263Sobrien  return (vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) a1, (vector signed char) a2, (vector signed int) a3);
218396263Sobrien}
218496263Sobrien
218596263Sobrien/* vec_msums */
218696263Sobrien
218796263Sobrieninline vector unsigned int
218896263Sobrienvec_msums (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3)
218996263Sobrien{
219096263Sobrien  return (vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
219196263Sobrien}
219296263Sobrien
219396263Sobrieninline vector signed int
219496263Sobrienvec_msums (vector signed short a1, vector signed short a2, vector signed int a3)
219596263Sobrien{
219696263Sobrien  return (vector signed int) __builtin_altivec_vmsumshs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
219796263Sobrien}
219896263Sobrien
219996263Sobrien/* vec_vmsumshs */
220096263Sobrien
220196263Sobrieninline vector signed int
220296263Sobrienvec_vmsumshs (vector signed short a1, vector signed short a2, vector signed int a3)
220396263Sobrien{
220496263Sobrien  return (vector signed int) __builtin_altivec_vmsumshs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
220596263Sobrien}
220696263Sobrien
220796263Sobrien/* vec_vmsumuhs */
220896263Sobrien
220996263Sobrieninline vector unsigned int
221096263Sobrienvec_vmsumuhs (vector unsigned short a1, vector unsigned short a2, vector unsigned int a3)
221196263Sobrien{
221296263Sobrien  return (vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) a1, (vector signed short) a2, (vector signed int) a3);
221396263Sobrien}
221496263Sobrien
221596263Sobrien/* vec_mtvscr */
221696263Sobrien
221796263Sobrieninline void
221896263Sobrienvec_mtvscr (vector signed int a1)
221996263Sobrien{
222096263Sobrien  __builtin_altivec_mtvscr ((vector signed int) a1);
222196263Sobrien}
222296263Sobrien
222396263Sobrieninline void
222496263Sobrienvec_mtvscr (vector unsigned int a1)
222596263Sobrien{
222696263Sobrien  __builtin_altivec_mtvscr ((vector signed int) a1);
222796263Sobrien}
222896263Sobrien
222996263Sobrieninline void
223096263Sobrienvec_mtvscr (vector signed short a1)
223196263Sobrien{
223296263Sobrien  __builtin_altivec_mtvscr ((vector signed int) a1);
223396263Sobrien}
223496263Sobrien
223596263Sobrieninline void
223696263Sobrienvec_mtvscr (vector unsigned short a1)
223796263Sobrien{
223896263Sobrien  __builtin_altivec_mtvscr ((vector signed int) a1);
223996263Sobrien}
224096263Sobrien
224196263Sobrieninline void
224296263Sobrienvec_mtvscr (vector signed char a1)
224396263Sobrien{
224496263Sobrien  __builtin_altivec_mtvscr ((vector signed int) a1);
224596263Sobrien}
224696263Sobrien
224796263Sobrieninline void
224896263Sobrienvec_mtvscr (vector unsigned char a1)
224996263Sobrien{
225096263Sobrien  __builtin_altivec_mtvscr ((vector signed int) a1);
225196263Sobrien}
225296263Sobrien
225396263Sobrien/* vec_mule */
225496263Sobrien
225596263Sobrieninline vector unsigned short
225696263Sobrienvec_mule (vector unsigned char a1, vector unsigned char a2)
225796263Sobrien{
225896263Sobrien  return (vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) a1, (vector signed char) a2);
225996263Sobrien}
226096263Sobrien
226196263Sobrieninline vector signed short
226296263Sobrienvec_mule (vector signed char a1, vector signed char a2)
226396263Sobrien{
226496263Sobrien  return (vector signed short) __builtin_altivec_vmulesb ((vector signed char) a1, (vector signed char) a2);
226596263Sobrien}
226696263Sobrien
226796263Sobrieninline vector unsigned int
226896263Sobrienvec_mule (vector unsigned short a1, vector unsigned short a2)
226996263Sobrien{
227096263Sobrien  return (vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) a1, (vector signed short) a2);
227196263Sobrien}
227296263Sobrien
227396263Sobrieninline vector signed int
227496263Sobrienvec_mule (vector signed short a1, vector signed short a2)
227596263Sobrien{
227696263Sobrien  return (vector signed int) __builtin_altivec_vmulesh ((vector signed short) a1, (vector signed short) a2);
227796263Sobrien}
227896263Sobrien
227996263Sobrien/* vec_vmulesh */
228096263Sobrien
228196263Sobrieninline vector signed int
228296263Sobrienvec_vmulesh (vector signed short a1, vector signed short a2)
228396263Sobrien{
228496263Sobrien  return (vector signed int) __builtin_altivec_vmulesh ((vector signed short) a1, (vector signed short) a2);
228596263Sobrien}
228696263Sobrien
228796263Sobrien/* vec_vmuleuh */
228896263Sobrien
228996263Sobrieninline vector unsigned int
229096263Sobrienvec_vmuleuh (vector unsigned short a1, vector unsigned short a2)
229196263Sobrien{
229296263Sobrien  return (vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) a1, (vector signed short) a2);
229396263Sobrien}
229496263Sobrien
229596263Sobrien/* vec_vmuleub */
229696263Sobrieninline vector unsigned short
229796263Sobrienvec_vmuleub (vector unsigned char a1, vector unsigned char a2)
229896263Sobrien{
229996263Sobrien  return (vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) a1, (vector signed char) a2);
230096263Sobrien}
230196263Sobrien
230296263Sobrien/* vec_mulo */
230396263Sobrien
230496263Sobrieninline vector unsigned short
230596263Sobrienvec_mulo (vector unsigned char a1, vector unsigned char a2)
230696263Sobrien{
230796263Sobrien  return (vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) a1, (vector signed char) a2);
230896263Sobrien}
230996263Sobrien
231096263Sobrieninline vector signed short
231196263Sobrienvec_mulo (vector signed char a1, vector signed char a2)
231296263Sobrien{
231396263Sobrien  return (vector signed short) __builtin_altivec_vmulosb ((vector signed char) a1, (vector signed char) a2);
231496263Sobrien}
231596263Sobrien
231696263Sobrieninline vector unsigned int
231796263Sobrienvec_mulo (vector unsigned short a1, vector unsigned short a2)
231896263Sobrien{
231996263Sobrien  return (vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) a1, (vector signed short) a2);
232096263Sobrien}
232196263Sobrien
232296263Sobrieninline vector signed int
232396263Sobrienvec_mulo (vector signed short a1, vector signed short a2)
232496263Sobrien{
232596263Sobrien  return (vector signed int) __builtin_altivec_vmulosh ((vector signed short) a1, (vector signed short) a2);
232696263Sobrien}
232796263Sobrien
232896263Sobrien/* vec_vmulosh */
232996263Sobrien
233096263Sobrieninline vector signed int
233196263Sobrienvec_vmulosh (vector signed short a1, vector signed short a2)
233296263Sobrien{
233396263Sobrien  return (vector signed int) __builtin_altivec_vmulosh ((vector signed short) a1, (vector signed short) a2);
233496263Sobrien}
233596263Sobrien
233696263Sobrien/* vec_vmulouh */
233796263Sobrien
233896263Sobrieninline vector unsigned int
233996263Sobrienvec_vmulouh (vector unsigned short a1, vector unsigned short a2)
234096263Sobrien{
234196263Sobrien  return (vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) a1, (vector signed short) a2);
234296263Sobrien}
234396263Sobrien
234496263Sobrien/* vec_vmulosb */
234596263Sobrien
234696263Sobrieninline vector signed short
234796263Sobrienvec_vmulosb (vector signed char a1, vector signed char a2)
234896263Sobrien{
234996263Sobrien  return (vector signed short) __builtin_altivec_vmulosb ((vector signed char) a1, (vector signed char) a2);
235096263Sobrien}
235196263Sobrien
235296263Sobrien/* vec_vmuloub */
235396263Sobrien
235496263Sobrieninline vector unsigned short
235596263Sobrienvec_vmuloub (vector unsigned char a1, vector unsigned char a2)
235696263Sobrien{
235796263Sobrien  return (vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) a1, (vector signed char) a2);
235896263Sobrien}
235996263Sobrien
236096263Sobrien/* vec_nmsub */
236196263Sobrien
236296263Sobrieninline vector float
236396263Sobrienvec_nmsub (vector float a1, vector float a2, vector float a3)
236496263Sobrien{
236596263Sobrien  return (vector float) __builtin_altivec_vnmsubfp ((vector float) a1, (vector float) a2, (vector float) a3);
236696263Sobrien}
236796263Sobrien
236896263Sobrien/* vec_nor */
236996263Sobrien
237096263Sobrieninline vector float
237196263Sobrienvec_nor (vector float a1, vector float a2)
237296263Sobrien{
237396263Sobrien  return (vector float) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
237496263Sobrien}
237596263Sobrien
237696263Sobrieninline vector signed int
237796263Sobrienvec_nor (vector signed int a1, vector signed int a2)
237896263Sobrien{
237996263Sobrien  return (vector signed int) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
238096263Sobrien}
238196263Sobrien
238296263Sobrieninline vector unsigned int
238396263Sobrienvec_nor (vector unsigned int a1, vector unsigned int a2)
238496263Sobrien{
238596263Sobrien  return (vector unsigned int) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
238696263Sobrien}
238796263Sobrien
238896263Sobrieninline vector signed short
238996263Sobrienvec_nor (vector signed short a1, vector signed short a2)
239096263Sobrien{
239196263Sobrien  return (vector signed short) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
239296263Sobrien}
239396263Sobrien
239496263Sobrieninline vector unsigned short
239596263Sobrienvec_nor (vector unsigned short a1, vector unsigned short a2)
239696263Sobrien{
239796263Sobrien  return (vector unsigned short) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
239896263Sobrien}
239996263Sobrien
240096263Sobrieninline vector signed char
240196263Sobrienvec_nor (vector signed char a1, vector signed char a2)
240296263Sobrien{
240396263Sobrien  return (vector signed char) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
240496263Sobrien}
240596263Sobrien
240696263Sobrieninline vector unsigned char
240796263Sobrienvec_nor (vector unsigned char a1, vector unsigned char a2)
240896263Sobrien{
240996263Sobrien  return (vector unsigned char) __builtin_altivec_vnor ((vector signed int) a1, (vector signed int) a2);
241096263Sobrien}
241196263Sobrien
241296263Sobrien/* vec_or */
241396263Sobrien
241496263Sobrieninline vector float
241596263Sobrienvec_or (vector float a1, vector float a2)
241696263Sobrien{
241796263Sobrien  return (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
241896263Sobrien}
241996263Sobrien
242096263Sobrieninline vector float
242196263Sobrienvec_or (vector float a1, vector signed int a2)
242296263Sobrien{
242396263Sobrien  return (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
242496263Sobrien}
242596263Sobrien
242696263Sobrieninline vector float
242796263Sobrienvec_or (vector signed int a1, vector float a2)
242896263Sobrien{
242996263Sobrien  return (vector float) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
243096263Sobrien}
243196263Sobrien
243296263Sobrieninline vector signed int
243396263Sobrienvec_or (vector signed int a1, vector signed int a2)
243496263Sobrien{
243596263Sobrien  return (vector signed int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
243696263Sobrien}
243796263Sobrien
243896263Sobrieninline vector unsigned int
243996263Sobrienvec_or (vector signed int a1, vector unsigned int a2)
244096263Sobrien{
244196263Sobrien  return (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
244296263Sobrien}
244396263Sobrien
244496263Sobrieninline vector unsigned int
244596263Sobrienvec_or (vector unsigned int a1, vector signed int a2)
244696263Sobrien{
244796263Sobrien  return (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
244896263Sobrien}
244996263Sobrien
245096263Sobrieninline vector unsigned int
245196263Sobrienvec_or (vector unsigned int a1, vector unsigned int a2)
245296263Sobrien{
245396263Sobrien  return (vector unsigned int) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
245496263Sobrien}
245596263Sobrien
245696263Sobrieninline vector signed short
245796263Sobrienvec_or (vector signed short a1, vector signed short a2)
245896263Sobrien{
245996263Sobrien  return (vector signed short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
246096263Sobrien}
246196263Sobrien
246296263Sobrieninline vector unsigned short
246396263Sobrienvec_or (vector signed short a1, vector unsigned short a2)
246496263Sobrien{
246596263Sobrien  return (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
246696263Sobrien}
246796263Sobrien
246896263Sobrieninline vector unsigned short
246996263Sobrienvec_or (vector unsigned short a1, vector signed short a2)
247096263Sobrien{
247196263Sobrien  return (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
247296263Sobrien}
247396263Sobrien
247496263Sobrieninline vector unsigned short
247596263Sobrienvec_or (vector unsigned short a1, vector unsigned short a2)
247696263Sobrien{
247796263Sobrien  return (vector unsigned short) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
247896263Sobrien}
247996263Sobrien
248096263Sobrieninline vector signed char
248196263Sobrienvec_or (vector signed char a1, vector signed char a2)
248296263Sobrien{
248396263Sobrien  return (vector signed char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
248496263Sobrien}
248596263Sobrien
248696263Sobrieninline vector unsigned char
248796263Sobrienvec_or (vector signed char a1, vector unsigned char a2)
248896263Sobrien{
248996263Sobrien  return (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
249096263Sobrien}
249196263Sobrien
249296263Sobrieninline vector unsigned char
249396263Sobrienvec_or (vector unsigned char a1, vector signed char a2)
249496263Sobrien{
249596263Sobrien  return (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
249696263Sobrien}
249796263Sobrien
249896263Sobrieninline vector unsigned char
249996263Sobrienvec_or (vector unsigned char a1, vector unsigned char a2)
250096263Sobrien{
250196263Sobrien  return (vector unsigned char) __builtin_altivec_vor ((vector signed int) a1, (vector signed int) a2);
250296263Sobrien}
250396263Sobrien
250496263Sobrien/* vec_pack */
250596263Sobrien
250696263Sobrieninline vector signed char
250796263Sobrienvec_pack (vector signed short a1, vector signed short a2)
250896263Sobrien{
250996263Sobrien  return (vector signed char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2);
251096263Sobrien}
251196263Sobrien
251296263Sobrieninline vector unsigned char
251396263Sobrienvec_pack (vector unsigned short a1, vector unsigned short a2)
251496263Sobrien{
251596263Sobrien  return (vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2);
251696263Sobrien}
251796263Sobrien
251896263Sobrieninline vector signed short
251996263Sobrienvec_pack (vector signed int a1, vector signed int a2)
252096263Sobrien{
252196263Sobrien  return (vector signed short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2);
252296263Sobrien}
252396263Sobrien
252496263Sobrieninline vector unsigned short
252596263Sobrienvec_pack (vector unsigned int a1, vector unsigned int a2)
252696263Sobrien{
252796263Sobrien  return (vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2);
252896263Sobrien}
252996263Sobrien
253096263Sobrien/* vec_vpkuwum */
253196263Sobrien
253296263Sobrieninline vector signed short
253396263Sobrienvec_vpkuwum (vector signed int a1, vector signed int a2)
253496263Sobrien{
253596263Sobrien  return (vector signed short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2);
253696263Sobrien}
253796263Sobrien
253896263Sobrieninline vector unsigned short
253996263Sobrienvec_vpkuwum (vector unsigned int a1, vector unsigned int a2)
254096263Sobrien{
254196263Sobrien  return (vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) a1, (vector signed int) a2);
254296263Sobrien}
254396263Sobrien
254496263Sobrien/* vec_vpkuhum */
254596263Sobrien
254696263Sobrieninline vector signed char
254796263Sobrienvec_vpkuhum (vector signed short a1, vector signed short a2)
254896263Sobrien{
254996263Sobrien  return (vector signed char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2);
255096263Sobrien}
255196263Sobrien
255296263Sobrieninline vector unsigned char
255396263Sobrienvec_vpkuhum (vector unsigned short a1, vector unsigned short a2)
255496263Sobrien{
255596263Sobrien  return (vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) a1, (vector signed short) a2);
255696263Sobrien}
255796263Sobrien
255896263Sobrien/* vec_packpx */
255996263Sobrien
256096263Sobrieninline vector signed short
256196263Sobrienvec_packpx (vector unsigned int a1, vector unsigned int a2)
256296263Sobrien{
256396263Sobrien  return (vector signed short) __builtin_altivec_vpkpx ((vector signed int) a1, (vector signed int) a2);
256496263Sobrien}
256596263Sobrien
256696263Sobrien/* vec_packs */
256796263Sobrien
256896263Sobrieninline vector unsigned char
256996263Sobrienvec_packs (vector unsigned short a1, vector unsigned short a2)
257096263Sobrien{
257196263Sobrien  return (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2);
257296263Sobrien}
257396263Sobrien
257496263Sobrieninline vector signed char
257596263Sobrienvec_packs (vector signed short a1, vector signed short a2)
257696263Sobrien{
257796263Sobrien  return (vector signed char) __builtin_altivec_vpkshss ((vector signed short) a1, (vector signed short) a2);
257896263Sobrien}
257996263Sobrien
258096263Sobrieninline vector unsigned short
258196263Sobrienvec_packs (vector unsigned int a1, vector unsigned int a2)
258296263Sobrien{
258396263Sobrien  return (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2);
258496263Sobrien}
258596263Sobrien
258696263Sobrieninline vector signed short
258796263Sobrienvec_packs (vector signed int a1, vector signed int a2)
258896263Sobrien{
258996263Sobrien  return (vector signed short) __builtin_altivec_vpkswss ((vector signed int) a1, (vector signed int) a2);
259096263Sobrien}
259196263Sobrien
259296263Sobrien/* vec_vpkswss */
259396263Sobrien
259496263Sobrieninline vector signed short
259596263Sobrienvec_vpkswss (vector signed int a1, vector signed int a2)
259696263Sobrien{
259796263Sobrien  return (vector signed short) __builtin_altivec_vpkswss ((vector signed int) a1, (vector signed int) a2);
259896263Sobrien}
259996263Sobrien
260096263Sobrien/* vec_vpkuwus */
260196263Sobrien
260296263Sobrieninline vector unsigned short
260396263Sobrienvec_vpkuwus (vector unsigned int a1, vector unsigned int a2)
260496263Sobrien{
260596263Sobrien  return (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2);
260696263Sobrien}
260796263Sobrien
260896263Sobrien/* vec_vpkshss */
260996263Sobrien
261096263Sobrieninline vector signed char
261196263Sobrienvec_vpkshss (vector signed short a1, vector signed short a2)
261296263Sobrien{
261396263Sobrien  return (vector signed char) __builtin_altivec_vpkshss ((vector signed short) a1, (vector signed short) a2);
261496263Sobrien}
261596263Sobrien
261696263Sobrien/* vec_vpkuhus */
261796263Sobrien
261896263Sobrieninline vector unsigned char
261996263Sobrienvec_vpkuhus (vector unsigned short a1, vector unsigned short a2)
262096263Sobrien{
262196263Sobrien  return (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2);
262296263Sobrien}
262396263Sobrien
262496263Sobrien/* vec_packsu */
262596263Sobrien
262696263Sobrieninline vector unsigned char
262796263Sobrienvec_packsu (vector unsigned short a1, vector unsigned short a2)
262896263Sobrien{
262996263Sobrien  return (vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) a1, (vector signed short) a2);
263096263Sobrien}
263196263Sobrien
263296263Sobrieninline vector unsigned char
263396263Sobrienvec_packsu (vector signed short a1, vector signed short a2)
263496263Sobrien{
263596263Sobrien  return (vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) a1, (vector signed short) a2);
263696263Sobrien}
263796263Sobrien
263896263Sobrieninline vector unsigned short
263996263Sobrienvec_packsu (vector unsigned int a1, vector unsigned int a2)
264096263Sobrien{
264196263Sobrien  return (vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) a1, (vector signed int) a2);
264296263Sobrien}
264396263Sobrien
264496263Sobrieninline vector unsigned short
264596263Sobrienvec_packsu (vector signed int a1, vector signed int a2)
264696263Sobrien{
264796263Sobrien  return (vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) a1, (vector signed int) a2);
264896263Sobrien}
264996263Sobrien
265096263Sobrien/* vec_vpkswus */
265196263Sobrien
265296263Sobrieninline vector unsigned short
265396263Sobrienvec_vpkswus (vector signed int a1, vector signed int a2)
265496263Sobrien{
265596263Sobrien  return (vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) a1, (vector signed int) a2);
265696263Sobrien}
265796263Sobrien
265896263Sobrien/* vec_vpkshus */
265996263Sobrien
266096263Sobrieninline vector unsigned char
266196263Sobrienvec_vpkshus (vector signed short a1, vector signed short a2)
266296263Sobrien{
266396263Sobrien  return (vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) a1, (vector signed short) a2);
266496263Sobrien}
266596263Sobrien
266696263Sobrien/* vec_perm */
266796263Sobrien
266896263Sobrieninline vector float
266996263Sobrienvec_perm (vector float a1, vector float a2, vector unsigned char a3)
267096263Sobrien{
267196263Sobrien  return (vector float) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
267296263Sobrien}
267396263Sobrien
267496263Sobrieninline vector signed int
267596263Sobrienvec_perm (vector signed int a1, vector signed int a2, vector unsigned char a3)
267696263Sobrien{
267796263Sobrien  return (vector signed int) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
267896263Sobrien}
267996263Sobrien
268096263Sobrieninline vector unsigned int
268196263Sobrienvec_perm (vector unsigned int a1, vector unsigned int a2, vector unsigned char a3)
268296263Sobrien{
268396263Sobrien  return (vector unsigned int) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
268496263Sobrien}
268596263Sobrien
268696263Sobrieninline vector signed short
268796263Sobrienvec_perm (vector signed short a1, vector signed short a2, vector unsigned char a3)
268896263Sobrien{
268996263Sobrien  return (vector signed short) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
269096263Sobrien}
269196263Sobrien
269296263Sobrieninline vector unsigned short
269396263Sobrienvec_perm (vector unsigned short a1, vector unsigned short a2, vector unsigned char a3)
269496263Sobrien{
269596263Sobrien  return (vector unsigned short) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
269696263Sobrien}
269796263Sobrien
269896263Sobrieninline vector signed char
269996263Sobrienvec_perm (vector signed char a1, vector signed char a2, vector unsigned char a3)
270096263Sobrien{
270196263Sobrien  return (vector signed char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
270296263Sobrien}
270396263Sobrien
270496263Sobrieninline vector unsigned char
270596263Sobrienvec_perm (vector unsigned char a1, vector unsigned char a2, vector unsigned char a3)
270696263Sobrien{
270796263Sobrien  return (vector unsigned char) __builtin_altivec_vperm_4si ((vector signed int) a1, (vector signed int) a2, (vector signed char) a3);
270896263Sobrien}
270996263Sobrien
271096263Sobrien/* vec_re */
271196263Sobrien
271296263Sobrieninline vector float
271396263Sobrienvec_re (vector float a1)
271496263Sobrien{
271596263Sobrien  return (vector float) __builtin_altivec_vrefp ((vector float) a1);
271696263Sobrien}
271796263Sobrien
271896263Sobrien/* vec_rl */
271996263Sobrien
272096263Sobrieninline vector signed char
272196263Sobrienvec_rl (vector signed char a1, vector unsigned char a2)
272296263Sobrien{
272396263Sobrien  return (vector signed char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2);
272496263Sobrien}
272596263Sobrien
272696263Sobrieninline vector unsigned char
272796263Sobrienvec_rl (vector unsigned char a1, vector unsigned char a2)
272896263Sobrien{
272996263Sobrien  return (vector unsigned char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2);
273096263Sobrien}
273196263Sobrien
273296263Sobrieninline vector signed short
273396263Sobrienvec_rl (vector signed short a1, vector unsigned short a2)
273496263Sobrien{
273596263Sobrien  return (vector signed short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2);
273696263Sobrien}
273796263Sobrien
273896263Sobrieninline vector unsigned short
273996263Sobrienvec_rl (vector unsigned short a1, vector unsigned short a2)
274096263Sobrien{
274196263Sobrien  return (vector unsigned short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2);
274296263Sobrien}
274396263Sobrien
274496263Sobrieninline vector signed int
274596263Sobrienvec_rl (vector signed int a1, vector unsigned int a2)
274696263Sobrien{
274796263Sobrien  return (vector signed int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2);
274896263Sobrien}
274996263Sobrien
275096263Sobrieninline vector unsigned int
275196263Sobrienvec_rl (vector unsigned int a1, vector unsigned int a2)
275296263Sobrien{
275396263Sobrien  return (vector unsigned int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2);
275496263Sobrien}
275596263Sobrien
275696263Sobrien/* vec_vrlw */
275796263Sobrien
275896263Sobrieninline vector signed int
275996263Sobrienvec_vrlw (vector signed int a1, vector unsigned int a2)
276096263Sobrien{
276196263Sobrien  return (vector signed int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2);
276296263Sobrien}
276396263Sobrien
276496263Sobrieninline vector unsigned int
276596263Sobrienvec_vrlw (vector unsigned int a1, vector unsigned int a2)
276696263Sobrien{
276796263Sobrien  return (vector unsigned int) __builtin_altivec_vrlw ((vector signed int) a1, (vector signed int) a2);
276896263Sobrien}
276996263Sobrien
277096263Sobrien/* vec_vrlh */
277196263Sobrien
277296263Sobrieninline vector signed short
277396263Sobrienvec_vrlh (vector signed short a1, vector unsigned short a2)
277496263Sobrien{
277596263Sobrien  return (vector signed short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2);
277696263Sobrien}
277796263Sobrien
277896263Sobrieninline vector unsigned short
277996263Sobrienvec_vrlh (vector unsigned short a1, vector unsigned short a2)
278096263Sobrien{
278196263Sobrien  return (vector unsigned short) __builtin_altivec_vrlh ((vector signed short) a1, (vector signed short) a2);
278296263Sobrien}
278396263Sobrien
278496263Sobrien/* vec_vrlb */
278596263Sobrien
278696263Sobrieninline vector signed char
278796263Sobrienvec_vrlb (vector signed char a1, vector unsigned char a2)
278896263Sobrien{
278996263Sobrien  return (vector signed char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2);
279096263Sobrien}
279196263Sobrien
279296263Sobrieninline vector unsigned char
279396263Sobrienvec_vrlb (vector unsigned char a1, vector unsigned char a2)
279496263Sobrien{
279596263Sobrien  return (vector unsigned char) __builtin_altivec_vrlb ((vector signed char) a1, (vector signed char) a2);
279696263Sobrien}
279796263Sobrien
279896263Sobrien/* vec_round */
279996263Sobrien
280096263Sobrieninline vector float
280196263Sobrienvec_round (vector float a1)
280296263Sobrien{
280396263Sobrien  return (vector float) __builtin_altivec_vrfin ((vector float) a1);
280496263Sobrien}
280596263Sobrien
280696263Sobrien/* vec_rsqrte */
280796263Sobrien
280896263Sobrieninline vector float
280996263Sobrienvec_rsqrte (vector float a1)
281096263Sobrien{
281196263Sobrien  return (vector float) __builtin_altivec_vrsqrtefp ((vector float) a1);
281296263Sobrien}
281396263Sobrien
281496263Sobrien/* vec_sel */
281596263Sobrien
281696263Sobrieninline vector float
281796263Sobrienvec_sel (vector float a1, vector float a2, vector signed int a3)
281896263Sobrien{
281996263Sobrien  return (vector float) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
282096263Sobrien}
282196263Sobrien
282296263Sobrieninline vector float
282396263Sobrienvec_sel (vector float a1, vector float a2, vector unsigned int a3)
282496263Sobrien{
282596263Sobrien  return (vector float) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
282696263Sobrien}
282796263Sobrien
282896263Sobrieninline vector signed int
282996263Sobrienvec_sel (vector signed int a1, vector signed int a2, vector signed int a3)
283096263Sobrien{
283196263Sobrien  return (vector signed int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
283296263Sobrien}
283396263Sobrien
283496263Sobrieninline vector signed int
283596263Sobrienvec_sel (vector signed int a1, vector signed int a2, vector unsigned int a3)
283696263Sobrien{
283796263Sobrien  return (vector signed int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
283896263Sobrien}
283996263Sobrien
284096263Sobrieninline vector unsigned int
284196263Sobrienvec_sel (vector unsigned int a1, vector unsigned int a2, vector signed int a3)
284296263Sobrien{
284396263Sobrien  return (vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
284496263Sobrien}
284596263Sobrien
284696263Sobrieninline vector unsigned int
284796263Sobrienvec_sel (vector unsigned int a1, vector unsigned int a2, vector unsigned int a3)
284896263Sobrien{
284996263Sobrien  return (vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
285096263Sobrien}
285196263Sobrien
285296263Sobrieninline vector signed short
285396263Sobrienvec_sel (vector signed short a1, vector signed short a2, vector signed short a3)
285496263Sobrien{
285596263Sobrien  return (vector signed short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
285696263Sobrien}
285796263Sobrien
285896263Sobrieninline vector signed short
285996263Sobrienvec_sel (vector signed short a1, vector signed short a2, vector unsigned short a3)
286096263Sobrien{
286196263Sobrien  return (vector signed short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
286296263Sobrien}
286396263Sobrien
286496263Sobrieninline vector unsigned short
286596263Sobrienvec_sel (vector unsigned short a1, vector unsigned short a2, vector signed short a3)
286696263Sobrien{
286796263Sobrien  return (vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
286896263Sobrien}
286996263Sobrien
287096263Sobrieninline vector unsigned short
287196263Sobrienvec_sel (vector unsigned short a1, vector unsigned short a2, vector unsigned short a3)
287296263Sobrien{
287396263Sobrien  return (vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
287496263Sobrien}
287596263Sobrien
287696263Sobrieninline vector signed char
287796263Sobrienvec_sel (vector signed char a1, vector signed char a2, vector signed char a3)
287896263Sobrien{
287996263Sobrien  return (vector signed char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
288096263Sobrien}
288196263Sobrien
288296263Sobrieninline vector signed char
288396263Sobrienvec_sel (vector signed char a1, vector signed char a2, vector unsigned char a3)
288496263Sobrien{
288596263Sobrien  return (vector signed char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
288696263Sobrien}
288796263Sobrien
288896263Sobrieninline vector unsigned char
288996263Sobrienvec_sel (vector unsigned char a1, vector unsigned char a2, vector signed char a3)
289096263Sobrien{
289196263Sobrien  return (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
289296263Sobrien}
289396263Sobrien
289496263Sobrieninline vector unsigned char
289596263Sobrienvec_sel (vector unsigned char a1, vector unsigned char a2, vector unsigned char a3)
289696263Sobrien{
289796263Sobrien  return (vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) a1, (vector signed int) a2, (vector signed int) a3);
289896263Sobrien}
289996263Sobrien
290096263Sobrien/* vec_sl */
290196263Sobrien
290296263Sobrieninline vector signed char
290396263Sobrienvec_sl (vector signed char a1, vector unsigned char a2)
290496263Sobrien{
290596263Sobrien  return (vector signed char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2);
290696263Sobrien}
290796263Sobrien
290896263Sobrieninline vector unsigned char
290996263Sobrienvec_sl (vector unsigned char a1, vector unsigned char a2)
291096263Sobrien{
291196263Sobrien  return (vector unsigned char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2);
291296263Sobrien}
291396263Sobrien
291496263Sobrieninline vector signed short
291596263Sobrienvec_sl (vector signed short a1, vector unsigned short a2)
291696263Sobrien{
291796263Sobrien  return (vector signed short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2);
291896263Sobrien}
291996263Sobrien
292096263Sobrieninline vector unsigned short
292196263Sobrienvec_sl (vector unsigned short a1, vector unsigned short a2)
292296263Sobrien{
292396263Sobrien  return (vector unsigned short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2);
292496263Sobrien}
292596263Sobrien
292696263Sobrieninline vector signed int
292796263Sobrienvec_sl (vector signed int a1, vector unsigned int a2)
292896263Sobrien{
292996263Sobrien  return (vector signed int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2);
293096263Sobrien}
293196263Sobrien
293296263Sobrieninline vector unsigned int
293396263Sobrienvec_sl (vector unsigned int a1, vector unsigned int a2)
293496263Sobrien{
293596263Sobrien  return (vector unsigned int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2);
293696263Sobrien}
293796263Sobrien
293896263Sobrien/* vec_vslw */
293996263Sobrien
294096263Sobrieninline vector signed int
294196263Sobrienvec_vslw (vector signed int a1, vector unsigned int a2)
294296263Sobrien{
294396263Sobrien  return (vector signed int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2);
294496263Sobrien}
294596263Sobrien
294696263Sobrieninline vector unsigned int
294796263Sobrienvec_vslw (vector unsigned int a1, vector unsigned int a2)
294896263Sobrien{
294996263Sobrien  return (vector unsigned int) __builtin_altivec_vslw ((vector signed int) a1, (vector signed int) a2);
295096263Sobrien}
295196263Sobrien
295296263Sobrien/* vec_vslh */
295396263Sobrien
295496263Sobrieninline vector signed short
295596263Sobrienvec_vslh (vector signed short a1, vector unsigned short a2)
295696263Sobrien{
295796263Sobrien  return (vector signed short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2);
295896263Sobrien}
295996263Sobrien
296096263Sobrieninline vector unsigned short
296196263Sobrienvec_vslh (vector unsigned short a1, vector unsigned short a2)
296296263Sobrien{
296396263Sobrien  return (vector unsigned short) __builtin_altivec_vslh ((vector signed short) a1, (vector signed short) a2);
296496263Sobrien}
296596263Sobrien
296696263Sobrien/* vec_vslb */
296796263Sobrien
296896263Sobrieninline vector signed char
296996263Sobrienvec_vslb (vector signed char a1, vector unsigned char a2)
297096263Sobrien{
297196263Sobrien  return (vector signed char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2);
297296263Sobrien}
297396263Sobrien
297496263Sobrieninline vector unsigned char
297596263Sobrienvec_vslb (vector unsigned char a1, vector unsigned char a2)
297696263Sobrien{
297796263Sobrien  return (vector unsigned char) __builtin_altivec_vslb ((vector signed char) a1, (vector signed char) a2);
297896263Sobrien}
297996263Sobrien
298096263Sobrien/* vec_sld */
298196263Sobrien
298296263Sobrieninline vector float
298396263Sobrienvec_sld (vector float a1, vector float a2, const char a3)
298496263Sobrien{
298596263Sobrien  return (vector float) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
298696263Sobrien}
298796263Sobrien
298896263Sobrieninline vector signed int
298996263Sobrienvec_sld (vector signed int a1, vector signed int a2, const char a3)
299096263Sobrien{
299196263Sobrien  return (vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
299296263Sobrien}
299396263Sobrien
299496263Sobrieninline vector unsigned int
299596263Sobrienvec_sld (vector unsigned int a1, vector unsigned int a2, const char a3)
299696263Sobrien{
299796263Sobrien  return (vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
299896263Sobrien}
299996263Sobrien
300096263Sobrieninline vector signed short
300196263Sobrienvec_sld (vector signed short a1, vector signed short a2, const char a3)
300296263Sobrien{
300396263Sobrien  return (vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
300496263Sobrien}
300596263Sobrien
300696263Sobrieninline vector unsigned short
300796263Sobrienvec_sld (vector unsigned short a1, vector unsigned short a2, const char a3)
300896263Sobrien{
300996263Sobrien  return (vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
301096263Sobrien}
301196263Sobrien
301296263Sobrieninline vector signed char
301396263Sobrienvec_sld (vector signed char a1, vector signed char a2, const char a3)
301496263Sobrien{
301596263Sobrien  return (vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
301696263Sobrien}
301796263Sobrien
301896263Sobrieninline vector unsigned char
301996263Sobrienvec_sld (vector unsigned char a1, vector unsigned char a2, const char a3)
302096263Sobrien{
302196263Sobrien  return (vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) a1, (vector signed int) a2, a3);
302296263Sobrien}
302396263Sobrien
302496263Sobrien/* vec_sll */
302596263Sobrien
302696263Sobrieninline vector signed int
302796263Sobrienvec_sll (vector signed int a1, vector unsigned int a2)
302896263Sobrien{
302996263Sobrien  return (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
303096263Sobrien}
303196263Sobrien
303296263Sobrieninline vector signed int
303396263Sobrienvec_sll (vector signed int a1, vector unsigned short a2)
303496263Sobrien{
303596263Sobrien  return (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
303696263Sobrien}
303796263Sobrien
303896263Sobrieninline vector signed int
303996263Sobrienvec_sll (vector signed int a1, vector unsigned char a2)
304096263Sobrien{
304196263Sobrien  return (vector signed int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
304296263Sobrien}
304396263Sobrien
304496263Sobrieninline vector unsigned int
304596263Sobrienvec_sll (vector unsigned int a1, vector unsigned int a2)
304696263Sobrien{
304796263Sobrien  return (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
304896263Sobrien}
304996263Sobrien
305096263Sobrieninline vector unsigned int
305196263Sobrienvec_sll (vector unsigned int a1, vector unsigned short a2)
305296263Sobrien{
305396263Sobrien  return (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
305496263Sobrien}
305596263Sobrien
305696263Sobrieninline vector unsigned int
305796263Sobrienvec_sll (vector unsigned int a1, vector unsigned char a2)
305896263Sobrien{
305996263Sobrien  return (vector unsigned int) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
306096263Sobrien}
306196263Sobrien
306296263Sobrieninline vector signed short
306396263Sobrienvec_sll (vector signed short a1, vector unsigned int a2)
306496263Sobrien{
306596263Sobrien  return (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
306696263Sobrien}
306796263Sobrien
306896263Sobrieninline vector signed short
306996263Sobrienvec_sll (vector signed short a1, vector unsigned short a2)
307096263Sobrien{
307196263Sobrien  return (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
307296263Sobrien}
307396263Sobrien
307496263Sobrieninline vector signed short
307596263Sobrienvec_sll (vector signed short a1, vector unsigned char a2)
307696263Sobrien{
307796263Sobrien  return (vector signed short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
307896263Sobrien}
307996263Sobrien
308096263Sobrieninline vector unsigned short
308196263Sobrienvec_sll (vector unsigned short a1, vector unsigned int a2)
308296263Sobrien{
308396263Sobrien  return (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
308496263Sobrien}
308596263Sobrien
308696263Sobrieninline vector unsigned short
308796263Sobrienvec_sll (vector unsigned short a1, vector unsigned short a2)
308896263Sobrien{
308996263Sobrien  return (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
309096263Sobrien}
309196263Sobrien
309296263Sobrieninline vector unsigned short
309396263Sobrienvec_sll (vector unsigned short a1, vector unsigned char a2)
309496263Sobrien{
309596263Sobrien  return (vector unsigned short) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
309696263Sobrien}
309796263Sobrien
309896263Sobrieninline vector signed char
309996263Sobrienvec_sll (vector signed char a1, vector unsigned int a2)
310096263Sobrien{
310196263Sobrien  return (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
310296263Sobrien}
310396263Sobrien
310496263Sobrieninline vector signed char
310596263Sobrienvec_sll (vector signed char a1, vector unsigned short a2)
310696263Sobrien{
310796263Sobrien  return (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
310896263Sobrien}
310996263Sobrien
311096263Sobrieninline vector signed char
311196263Sobrienvec_sll (vector signed char a1, vector unsigned char a2)
311296263Sobrien{
311396263Sobrien  return (vector signed char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
311496263Sobrien}
311596263Sobrien
311696263Sobrieninline vector unsigned char
311796263Sobrienvec_sll (vector unsigned char a1, vector unsigned int a2)
311896263Sobrien{
311996263Sobrien  return (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
312096263Sobrien}
312196263Sobrien
312296263Sobrieninline vector unsigned char
312396263Sobrienvec_sll (vector unsigned char a1, vector unsigned short a2)
312496263Sobrien{
312596263Sobrien  return (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
312696263Sobrien}
312796263Sobrien
312896263Sobrieninline vector unsigned char
312996263Sobrienvec_sll (vector unsigned char a1, vector unsigned char a2)
313096263Sobrien{
313196263Sobrien  return (vector unsigned char) __builtin_altivec_vsl ((vector signed int) a1, (vector signed int) a2);
313296263Sobrien}
313396263Sobrien
313496263Sobrien/* vec_slo */
313596263Sobrien
313696263Sobrieninline vector float
313796263Sobrienvec_slo (vector float a1, vector signed char a2)
313896263Sobrien{
313996263Sobrien  return (vector float) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
314096263Sobrien}
314196263Sobrien
314296263Sobrieninline vector float
314396263Sobrienvec_slo (vector float a1, vector unsigned char a2)
314496263Sobrien{
314596263Sobrien  return (vector float) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
314696263Sobrien}
314796263Sobrien
314896263Sobrieninline vector signed int
314996263Sobrienvec_slo (vector signed int a1, vector signed char a2)
315096263Sobrien{
315196263Sobrien  return (vector signed int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
315296263Sobrien}
315396263Sobrien
315496263Sobrieninline vector signed int
315596263Sobrienvec_slo (vector signed int a1, vector unsigned char a2)
315696263Sobrien{
315796263Sobrien  return (vector signed int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
315896263Sobrien}
315996263Sobrien
316096263Sobrieninline vector unsigned int
316196263Sobrienvec_slo (vector unsigned int a1, vector signed char a2)
316296263Sobrien{
316396263Sobrien  return (vector unsigned int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
316496263Sobrien}
316596263Sobrien
316696263Sobrieninline vector unsigned int
316796263Sobrienvec_slo (vector unsigned int a1, vector unsigned char a2)
316896263Sobrien{
316996263Sobrien  return (vector unsigned int) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
317096263Sobrien}
317196263Sobrien
317296263Sobrieninline vector signed short
317396263Sobrienvec_slo (vector signed short a1, vector signed char a2)
317496263Sobrien{
317596263Sobrien  return (vector signed short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
317696263Sobrien}
317796263Sobrien
317896263Sobrieninline vector signed short
317996263Sobrienvec_slo (vector signed short a1, vector unsigned char a2)
318096263Sobrien{
318196263Sobrien  return (vector signed short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
318296263Sobrien}
318396263Sobrien
318496263Sobrieninline vector unsigned short
318596263Sobrienvec_slo (vector unsigned short a1, vector signed char a2)
318696263Sobrien{
318796263Sobrien  return (vector unsigned short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
318896263Sobrien}
318996263Sobrien
319096263Sobrieninline vector unsigned short
319196263Sobrienvec_slo (vector unsigned short a1, vector unsigned char a2)
319296263Sobrien{
319396263Sobrien  return (vector unsigned short) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
319496263Sobrien}
319596263Sobrien
319696263Sobrieninline vector signed char
319796263Sobrienvec_slo (vector signed char a1, vector signed char a2)
319896263Sobrien{
319996263Sobrien  return (vector signed char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
320096263Sobrien}
320196263Sobrien
320296263Sobrieninline vector signed char
320396263Sobrienvec_slo (vector signed char a1, vector unsigned char a2)
320496263Sobrien{
320596263Sobrien  return (vector signed char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
320696263Sobrien}
320796263Sobrien
320896263Sobrieninline vector unsigned char
320996263Sobrienvec_slo (vector unsigned char a1, vector signed char a2)
321096263Sobrien{
321196263Sobrien  return (vector unsigned char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
321296263Sobrien}
321396263Sobrien
321496263Sobrieninline vector unsigned char
321596263Sobrienvec_slo (vector unsigned char a1, vector unsigned char a2)
321696263Sobrien{
321796263Sobrien  return (vector unsigned char) __builtin_altivec_vslo ((vector signed int) a1, (vector signed int) a2);
321896263Sobrien}
321996263Sobrien
322096263Sobrien/* vec_splat */
322196263Sobrien
322296263Sobrieninline vector signed char
322396263Sobrienvec_splat (vector signed char a1, const char a2)
322496263Sobrien{
322596263Sobrien  return (vector signed char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
322696263Sobrien}
322796263Sobrien
322896263Sobrieninline vector unsigned char
322996263Sobrienvec_splat (vector unsigned char a1, const char a2)
323096263Sobrien{
323196263Sobrien  return (vector unsigned char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
323296263Sobrien}
323396263Sobrien
323496263Sobrieninline vector signed short
323596263Sobrienvec_splat (vector signed short a1, const char a2)
323696263Sobrien{
323796263Sobrien  return (vector signed short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
323896263Sobrien}
323996263Sobrien
324096263Sobrieninline vector unsigned short
324196263Sobrienvec_splat (vector unsigned short a1, const char a2)
324296263Sobrien{
324396263Sobrien  return (vector unsigned short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
324496263Sobrien}
324596263Sobrien
324696263Sobrieninline vector float
324796263Sobrienvec_splat (vector float a1, const char a2)
324896263Sobrien{
324996263Sobrien  return (vector float) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
325096263Sobrien}
325196263Sobrien
325296263Sobrieninline vector signed int
325396263Sobrienvec_splat (vector signed int a1, const char a2)
325496263Sobrien{
325596263Sobrien  return (vector signed int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
325696263Sobrien}
325796263Sobrien
325896263Sobrieninline vector unsigned int
325996263Sobrienvec_splat (vector unsigned int a1, const char a2)
326096263Sobrien{
326196263Sobrien  return (vector unsigned int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
326296263Sobrien}
326396263Sobrien
326496263Sobrien/* vec_vspltw */
326596263Sobrien
326696263Sobrieninline vector float
326796263Sobrienvec_vspltw (vector float a1, const char a2)
326896263Sobrien{
326996263Sobrien  return (vector float) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
327096263Sobrien}
327196263Sobrien
327296263Sobrieninline vector signed int
327396263Sobrienvec_vspltw (vector signed int a1, const char a2)
327496263Sobrien{
327596263Sobrien  return (vector signed int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
327696263Sobrien}
327796263Sobrien
327896263Sobrieninline vector unsigned int
327996263Sobrienvec_vspltw (vector unsigned int a1, const char a2)
328096263Sobrien{
328196263Sobrien  return (vector unsigned int) __builtin_altivec_vspltw ((vector signed int) a1,  a2);
328296263Sobrien}
328396263Sobrien
328496263Sobrien/* vec_vsplth */
328596263Sobrien
328696263Sobrieninline vector signed short
328796263Sobrienvec_vsplth (vector signed short a1, const char a2)
328896263Sobrien{
328996263Sobrien  return (vector signed short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
329096263Sobrien}
329196263Sobrien
329296263Sobrieninline vector unsigned short
329396263Sobrienvec_vsplth (vector unsigned short a1, const char a2)
329496263Sobrien{
329596263Sobrien  return (vector unsigned short) __builtin_altivec_vsplth ((vector signed short) a1,  a2);
329696263Sobrien}
329796263Sobrien
329896263Sobrien/* vec_vspltb */
329996263Sobrien
330096263Sobrieninline vector signed char
330196263Sobrienvec_vspltb (vector signed char a1, const char a2)
330296263Sobrien{
330396263Sobrien  return (vector signed char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
330496263Sobrien}
330596263Sobrien
330696263Sobrieninline vector unsigned char
330796263Sobrienvec_vspltb (vector unsigned char a1, const char a2)
330896263Sobrien{
330996263Sobrien  return (vector unsigned char) __builtin_altivec_vspltb ((vector signed char) a1,  a2);
331096263Sobrien}
331196263Sobrien
331296263Sobrien/* vec_splat_s8 */
331396263Sobrien
331496263Sobrieninline vector signed char
331596263Sobrienvec_splat_s8 (const char a1)
331696263Sobrien{
331796263Sobrien  return (vector signed char) __builtin_altivec_vspltisb (a1);
331896263Sobrien}
331996263Sobrien
332096263Sobrien/* vec_splat_s16 */
332196263Sobrien
332296263Sobrieninline vector signed short
332396263Sobrienvec_splat_s16 (const char a1)
332496263Sobrien{
332596263Sobrien  return (vector signed short) __builtin_altivec_vspltish (a1);
332696263Sobrien}
332796263Sobrien
332896263Sobrien/* vec_splat_s32 */
332996263Sobrien
333096263Sobrieninline vector signed int
333196263Sobrienvec_splat_s32 (const char a1)
333296263Sobrien{
333396263Sobrien  return (vector signed int) __builtin_altivec_vspltisw (a1);
333496263Sobrien}
333596263Sobrien
333696263Sobrien/* vec_splat_u8 */
333796263Sobrien
333896263Sobrieninline vector unsigned char
333996263Sobrienvec_splat_u8 (const char a1)
334096263Sobrien{
334196263Sobrien  return (vector unsigned char) __builtin_altivec_vspltisb (a1);
334296263Sobrien}
334396263Sobrien
334496263Sobrien/* vec_splat_u16 */
334596263Sobrien
334696263Sobrieninline vector unsigned short
334796263Sobrienvec_splat_u16 (const char a1)
334896263Sobrien{
334996263Sobrien  return (vector unsigned short) __builtin_altivec_vspltish (a1);
335096263Sobrien}
335196263Sobrien
335296263Sobrien/* vec_splat_u32 */
335396263Sobrien
335496263Sobrieninline vector unsigned int
335596263Sobrienvec_splat_u32 (const char a1)
335696263Sobrien{
335796263Sobrien  return (vector unsigned int) __builtin_altivec_vspltisw (a1);
335896263Sobrien}
335996263Sobrien
336096263Sobrien/* vec_sr */
336196263Sobrien
336296263Sobrieninline vector signed char
336396263Sobrienvec_sr (vector signed char a1, vector unsigned char a2)
336496263Sobrien{
336596263Sobrien  return (vector signed char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2);
336696263Sobrien}
336796263Sobrien
336896263Sobrieninline vector unsigned char
336996263Sobrienvec_sr (vector unsigned char a1, vector unsigned char a2)
337096263Sobrien{
337196263Sobrien  return (vector unsigned char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2);
337296263Sobrien}
337396263Sobrien
337496263Sobrieninline vector signed short
337596263Sobrienvec_sr (vector signed short a1, vector unsigned short a2)
337696263Sobrien{
337796263Sobrien  return (vector signed short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2);
337896263Sobrien}
337996263Sobrien
338096263Sobrieninline vector unsigned short
338196263Sobrienvec_sr (vector unsigned short a1, vector unsigned short a2)
338296263Sobrien{
338396263Sobrien  return (vector unsigned short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2);
338496263Sobrien}
338596263Sobrien
338696263Sobrieninline vector signed int
338796263Sobrienvec_sr (vector signed int a1, vector unsigned int a2)
338896263Sobrien{
338996263Sobrien  return (vector signed int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2);
339096263Sobrien}
339196263Sobrien
339296263Sobrieninline vector unsigned int
339396263Sobrienvec_sr (vector unsigned int a1, vector unsigned int a2)
339496263Sobrien{
339596263Sobrien  return (vector unsigned int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2);
339696263Sobrien}
339796263Sobrien
339896263Sobrien/* vec_vsrw */
339996263Sobrien
340096263Sobrieninline vector signed int
340196263Sobrienvec_vsrw (vector signed int a1, vector unsigned int a2)
340296263Sobrien{
340396263Sobrien  return (vector signed int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2);
340496263Sobrien}
340596263Sobrien
340696263Sobrieninline vector unsigned int
340796263Sobrienvec_vsrw (vector unsigned int a1, vector unsigned int a2)
340896263Sobrien{
340996263Sobrien  return (vector unsigned int) __builtin_altivec_vsrw ((vector signed int) a1, (vector signed int) a2);
341096263Sobrien}
341196263Sobrien
341296263Sobrien/* vec_vsrh */
341396263Sobrien
341496263Sobrieninline vector signed short
341596263Sobrienvec_vsrh (vector signed short a1, vector unsigned short a2)
341696263Sobrien{
341796263Sobrien  return (vector signed short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2);
341896263Sobrien}
341996263Sobrien
342096263Sobrieninline vector unsigned short
342196263Sobrienvec_vsrh (vector unsigned short a1, vector unsigned short a2)
342296263Sobrien{
342396263Sobrien  return (vector unsigned short) __builtin_altivec_vsrh ((vector signed short) a1, (vector signed short) a2);
342496263Sobrien}
342596263Sobrien
342696263Sobrien/* vec_vsrb */
342796263Sobrien
342896263Sobrieninline vector signed char
342996263Sobrienvec_vsrb (vector signed char a1, vector unsigned char a2)
343096263Sobrien{
343196263Sobrien  return (vector signed char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2);
343296263Sobrien}
343396263Sobrien
343496263Sobrieninline vector unsigned char
343596263Sobrienvec_vsrb (vector unsigned char a1, vector unsigned char a2)
343696263Sobrien{
343796263Sobrien  return (vector unsigned char) __builtin_altivec_vsrb ((vector signed char) a1, (vector signed char) a2);
343896263Sobrien}
343996263Sobrien
344096263Sobrien/* vec_sra */
344196263Sobrien
344296263Sobrieninline vector signed char
344396263Sobrienvec_sra (vector signed char a1, vector unsigned char a2)
344496263Sobrien{
344596263Sobrien  return (vector signed char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2);
344696263Sobrien}
344796263Sobrien
344896263Sobrieninline vector unsigned char
344996263Sobrienvec_sra (vector unsigned char a1, vector unsigned char a2)
345096263Sobrien{
345196263Sobrien  return (vector unsigned char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2);
345296263Sobrien}
345396263Sobrien
345496263Sobrieninline vector signed short
345596263Sobrienvec_sra (vector signed short a1, vector unsigned short a2)
345696263Sobrien{
345796263Sobrien  return (vector signed short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2);
345896263Sobrien}
345996263Sobrien
346096263Sobrieninline vector unsigned short
346196263Sobrienvec_sra (vector unsigned short a1, vector unsigned short a2)
346296263Sobrien{
346396263Sobrien  return (vector unsigned short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2);
346496263Sobrien}
346596263Sobrien
346696263Sobrieninline vector signed int
346796263Sobrienvec_sra (vector signed int a1, vector unsigned int a2)
346896263Sobrien{
346996263Sobrien  return (vector signed int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2);
347096263Sobrien}
347196263Sobrien
347296263Sobrieninline vector unsigned int
347396263Sobrienvec_sra (vector unsigned int a1, vector unsigned int a2)
347496263Sobrien{
347596263Sobrien  return (vector unsigned int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2);
347696263Sobrien}
347796263Sobrien
347896263Sobrien/* vec_vsraw */
347996263Sobrien
348096263Sobrieninline vector signed int
348196263Sobrienvec_vsraw (vector signed int a1, vector unsigned int a2)
348296263Sobrien{
348396263Sobrien  return (vector signed int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2);
348496263Sobrien}
348596263Sobrien
348696263Sobrieninline vector unsigned int
348796263Sobrienvec_vsraw (vector unsigned int a1, vector unsigned int a2)
348896263Sobrien{
348996263Sobrien  return (vector unsigned int) __builtin_altivec_vsraw ((vector signed int) a1, (vector signed int) a2);
349096263Sobrien}
349196263Sobrien
349296263Sobrien/* vec_vsrah */
349396263Sobrien
349496263Sobrieninline vector signed short
349596263Sobrienvec_vsrah (vector signed short a1, vector unsigned short a2)
349696263Sobrien{
349796263Sobrien  return (vector signed short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2);
349896263Sobrien}
349996263Sobrien
350096263Sobrieninline vector unsigned short
350196263Sobrienvec_vsrah (vector unsigned short a1, vector unsigned short a2)
350296263Sobrien{
350396263Sobrien  return (vector unsigned short) __builtin_altivec_vsrah ((vector signed short) a1, (vector signed short) a2);
350496263Sobrien}
350596263Sobrien
350696263Sobrien/* vec_vsrab */
350796263Sobrien
350896263Sobrieninline vector signed char
350996263Sobrienvec_vsrab (vector signed char a1, vector unsigned char a2)
351096263Sobrien{
351196263Sobrien  return (vector signed char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2);
351296263Sobrien}
351396263Sobrien
351496263Sobrieninline vector unsigned char
351596263Sobrienvec_vsrab (vector unsigned char a1, vector unsigned char a2)
351696263Sobrien{
351796263Sobrien  return (vector unsigned char) __builtin_altivec_vsrab ((vector signed char) a1, (vector signed char) a2);
351896263Sobrien}
351996263Sobrien
352096263Sobrien/* vec_srl */
352196263Sobrien
352296263Sobrieninline vector signed int
352396263Sobrienvec_srl (vector signed int a1, vector unsigned int a2)
352496263Sobrien{
352596263Sobrien  return (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
352696263Sobrien}
352796263Sobrien
352896263Sobrieninline vector signed int
352996263Sobrienvec_srl (vector signed int a1, vector unsigned short a2)
353096263Sobrien{
353196263Sobrien  return (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
353296263Sobrien}
353396263Sobrien
353496263Sobrieninline vector signed int
353596263Sobrienvec_srl (vector signed int a1, vector unsigned char a2)
353696263Sobrien{
353796263Sobrien  return (vector signed int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
353896263Sobrien}
353996263Sobrien
354096263Sobrieninline vector unsigned int
354196263Sobrienvec_srl (vector unsigned int a1, vector unsigned int a2)
354296263Sobrien{
354396263Sobrien  return (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
354496263Sobrien}
354596263Sobrien
354696263Sobrieninline vector unsigned int
354796263Sobrienvec_srl (vector unsigned int a1, vector unsigned short a2)
354896263Sobrien{
354996263Sobrien  return (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
355096263Sobrien}
355196263Sobrien
355296263Sobrieninline vector unsigned int
355396263Sobrienvec_srl (vector unsigned int a1, vector unsigned char a2)
355496263Sobrien{
355596263Sobrien  return (vector unsigned int) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
355696263Sobrien}
355796263Sobrien
355896263Sobrieninline vector signed short
355996263Sobrienvec_srl (vector signed short a1, vector unsigned int a2)
356096263Sobrien{
356196263Sobrien  return (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
356296263Sobrien}
356396263Sobrien
356496263Sobrieninline vector signed short
356596263Sobrienvec_srl (vector signed short a1, vector unsigned short a2)
356696263Sobrien{
356796263Sobrien  return (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
356896263Sobrien}
356996263Sobrien
357096263Sobrieninline vector signed short
357196263Sobrienvec_srl (vector signed short a1, vector unsigned char a2)
357296263Sobrien{
357396263Sobrien  return (vector signed short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
357496263Sobrien}
357596263Sobrien
357696263Sobrieninline vector unsigned short
357796263Sobrienvec_srl (vector unsigned short a1, vector unsigned int a2)
357896263Sobrien{
357996263Sobrien  return (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
358096263Sobrien}
358196263Sobrien
358296263Sobrieninline vector unsigned short
358396263Sobrienvec_srl (vector unsigned short a1, vector unsigned short a2)
358496263Sobrien{
358596263Sobrien  return (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
358696263Sobrien}
358796263Sobrien
358896263Sobrieninline vector unsigned short
358996263Sobrienvec_srl (vector unsigned short a1, vector unsigned char a2)
359096263Sobrien{
359196263Sobrien  return (vector unsigned short) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
359296263Sobrien}
359396263Sobrien
359496263Sobrieninline vector signed char
359596263Sobrienvec_srl (vector signed char a1, vector unsigned int a2)
359696263Sobrien{
359796263Sobrien  return (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
359896263Sobrien}
359996263Sobrien
360096263Sobrieninline vector signed char
360196263Sobrienvec_srl (vector signed char a1, vector unsigned short a2)
360296263Sobrien{
360396263Sobrien  return (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
360496263Sobrien}
360596263Sobrien
360696263Sobrieninline vector signed char
360796263Sobrienvec_srl (vector signed char a1, vector unsigned char a2)
360896263Sobrien{
360996263Sobrien  return (vector signed char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
361096263Sobrien}
361196263Sobrien
361296263Sobrieninline vector unsigned char
361396263Sobrienvec_srl (vector unsigned char a1, vector unsigned int a2)
361496263Sobrien{
361596263Sobrien  return (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
361696263Sobrien}
361796263Sobrien
361896263Sobrieninline vector unsigned char
361996263Sobrienvec_srl (vector unsigned char a1, vector unsigned short a2)
362096263Sobrien{
362196263Sobrien  return (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
362296263Sobrien}
362396263Sobrien
362496263Sobrieninline vector unsigned char
362596263Sobrienvec_srl (vector unsigned char a1, vector unsigned char a2)
362696263Sobrien{
362796263Sobrien  return (vector unsigned char) __builtin_altivec_vsr ((vector signed int) a1, (vector signed int) a2);
362896263Sobrien}
362996263Sobrien
363096263Sobrien/* vec_sro */
363196263Sobrien
363296263Sobrieninline vector float
363396263Sobrienvec_sro (vector float a1, vector signed char a2)
363496263Sobrien{
363596263Sobrien  return (vector float) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
363696263Sobrien}
363796263Sobrien
363896263Sobrieninline vector float
363996263Sobrienvec_sro (vector float a1, vector unsigned char a2)
364096263Sobrien{
364196263Sobrien  return (vector float) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
364296263Sobrien}
364396263Sobrien
364496263Sobrieninline vector signed int
364596263Sobrienvec_sro (vector signed int a1, vector signed char a2)
364696263Sobrien{
364796263Sobrien  return (vector signed int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
364896263Sobrien}
364996263Sobrien
365096263Sobrieninline vector signed int
365196263Sobrienvec_sro (vector signed int a1, vector unsigned char a2)
365296263Sobrien{
365396263Sobrien  return (vector signed int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
365496263Sobrien}
365596263Sobrien
365696263Sobrieninline vector unsigned int
365796263Sobrienvec_sro (vector unsigned int a1, vector signed char a2)
365896263Sobrien{
365996263Sobrien  return (vector unsigned int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
366096263Sobrien}
366196263Sobrien
366296263Sobrieninline vector unsigned int
366396263Sobrienvec_sro (vector unsigned int a1, vector unsigned char a2)
366496263Sobrien{
366596263Sobrien  return (vector unsigned int) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
366696263Sobrien}
366796263Sobrien
366896263Sobrieninline vector signed short
366996263Sobrienvec_sro (vector signed short a1, vector signed char a2)
367096263Sobrien{
367196263Sobrien  return (vector signed short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
367296263Sobrien}
367396263Sobrien
367496263Sobrieninline vector signed short
367596263Sobrienvec_sro (vector signed short a1, vector unsigned char a2)
367696263Sobrien{
367796263Sobrien  return (vector signed short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
367896263Sobrien}
367996263Sobrien
368096263Sobrieninline vector unsigned short
368196263Sobrienvec_sro (vector unsigned short a1, vector signed char a2)
368296263Sobrien{
368396263Sobrien  return (vector unsigned short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
368496263Sobrien}
368596263Sobrien
368696263Sobrieninline vector unsigned short
368796263Sobrienvec_sro (vector unsigned short a1, vector unsigned char a2)
368896263Sobrien{
368996263Sobrien  return (vector unsigned short) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
369096263Sobrien}
369196263Sobrien
369296263Sobrieninline vector signed char
369396263Sobrienvec_sro (vector signed char a1, vector signed char a2)
369496263Sobrien{
369596263Sobrien  return (vector signed char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
369696263Sobrien}
369796263Sobrien
369896263Sobrieninline vector signed char
369996263Sobrienvec_sro (vector signed char a1, vector unsigned char a2)
370096263Sobrien{
370196263Sobrien  return (vector signed char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
370296263Sobrien}
370396263Sobrien
370496263Sobrieninline vector unsigned char
370596263Sobrienvec_sro (vector unsigned char a1, vector signed char a2)
370696263Sobrien{
370796263Sobrien  return (vector unsigned char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
370896263Sobrien}
370996263Sobrien
371096263Sobrieninline vector unsigned char
371196263Sobrienvec_sro (vector unsigned char a1, vector unsigned char a2)
371296263Sobrien{
371396263Sobrien  return (vector unsigned char) __builtin_altivec_vsro ((vector signed int) a1, (vector signed int) a2);
371496263Sobrien}
371596263Sobrien
371696263Sobrien/* vec_st */
371796263Sobrien
371896263Sobrieninline void
371996263Sobrienvec_st (vector float a1, int a2, void *a3)
372096263Sobrien{
372196263Sobrien  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
372296263Sobrien}
372396263Sobrien
372496263Sobrieninline void
372596263Sobrienvec_st (vector signed int a1, int a2, void *a3)
372696263Sobrien{
372796263Sobrien  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
372896263Sobrien}
372996263Sobrien
373096263Sobrieninline void
373196263Sobrienvec_st (vector unsigned int a1, int a2, void *a3)
373296263Sobrien{
373396263Sobrien  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
373496263Sobrien}
373596263Sobrien
373696263Sobrieninline void
373796263Sobrienvec_st (vector signed short a1, int a2, void *a3)
373896263Sobrien{
373996263Sobrien  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
374096263Sobrien}
374196263Sobrien
374296263Sobrieninline void
374396263Sobrienvec_st (vector unsigned short a1, int a2, void *a3)
374496263Sobrien{
374596263Sobrien  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
374696263Sobrien}
374796263Sobrien
374896263Sobrieninline void
374996263Sobrienvec_st (vector signed char a1, int a2, void *a3)
375096263Sobrien{
375196263Sobrien  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
375296263Sobrien}
375396263Sobrien
375496263Sobrieninline void
375596263Sobrienvec_st (vector unsigned char a1, int a2, void *a3)
375696263Sobrien{
375796263Sobrien  __builtin_altivec_stvx ((vector signed int) a1, a2, (void *) a3);
375896263Sobrien}
375996263Sobrien
376096263Sobrien/* vec_ste */
376196263Sobrien
376296263Sobrieninline void
376396263Sobrienvec_ste (vector signed char a1, int a2, void *a3)
376496263Sobrien{
376596263Sobrien  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
376696263Sobrien}
376796263Sobrien
376896263Sobrieninline void
376996263Sobrienvec_ste (vector unsigned char a1, int a2, void *a3)
377096263Sobrien{
377196263Sobrien  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
377296263Sobrien}
377396263Sobrien
377496263Sobrieninline void
377596263Sobrienvec_ste (vector signed short a1, int a2, void *a3)
377696263Sobrien{
377796263Sobrien  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
377896263Sobrien}
377996263Sobrien
378096263Sobrieninline void
378196263Sobrienvec_ste (vector unsigned short a1, int a2, void *a3)
378296263Sobrien{
378396263Sobrien  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
378496263Sobrien}
378596263Sobrien
378696263Sobrieninline void
378796263Sobrienvec_ste (vector float a1, int a2, void *a3)
378896263Sobrien{
378996263Sobrien  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
379096263Sobrien}
379196263Sobrien
379296263Sobrieninline void
379396263Sobrienvec_ste (vector signed int a1, int a2, void *a3)
379496263Sobrien{
379596263Sobrien  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
379696263Sobrien}
379796263Sobrien
379896263Sobrieninline void
379996263Sobrienvec_ste (vector unsigned int a1, int a2, void *a3)
380096263Sobrien{
380196263Sobrien  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
380296263Sobrien}
380396263Sobrien
380496263Sobrien/* vec_stvewx */
380596263Sobrien
380696263Sobrieninline void
380796263Sobrienvec_stvewx (vector float a1, int a2, void *a3)
380896263Sobrien{
380996263Sobrien  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
381096263Sobrien}
381196263Sobrien
381296263Sobrieninline void
381396263Sobrienvec_stvewx (vector signed int a1, int a2, void *a3)
381496263Sobrien{
381596263Sobrien  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
381696263Sobrien}
381796263Sobrien
381896263Sobrieninline void
381996263Sobrienvec_stvewx (vector unsigned int a1, int a2, void *a3)
382096263Sobrien{
382196263Sobrien  __builtin_altivec_stvewx ((vector signed int) a1, a2, (void *) a3);
382296263Sobrien}
382396263Sobrien
382496263Sobrien/* vec_stvehx */
382596263Sobrien
382696263Sobrieninline void
382796263Sobrienvec_stvehx (vector signed short a1, int a2, void *a3)
382896263Sobrien{
382996263Sobrien  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
383096263Sobrien}
383196263Sobrien
383296263Sobrieninline void
383396263Sobrienvec_stvehx (vector unsigned short a1, int a2, void *a3)
383496263Sobrien{
383596263Sobrien  __builtin_altivec_stvehx ((vector signed short) a1, a2, (void *) a3);
383696263Sobrien}
383796263Sobrien
383896263Sobrien/* vec_stvebx */
383996263Sobrien
384096263Sobrieninline void
384196263Sobrienvec_stvebx (vector signed char a1, int a2, void *a3)
384296263Sobrien{
384396263Sobrien  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
384496263Sobrien}
384596263Sobrien
384696263Sobrieninline void
384796263Sobrienvec_stvebx (vector unsigned char a1, int a2, void *a3)
384896263Sobrien{
384996263Sobrien  __builtin_altivec_stvebx ((vector signed char) a1, a2, (void *) a3);
385096263Sobrien}
385196263Sobrien
385296263Sobrien/* vec_stl */
385396263Sobrien
385496263Sobrieninline void
385596263Sobrienvec_stl (vector float a1, int a2, void *a3)
385696263Sobrien{
385796263Sobrien  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
385896263Sobrien}
385996263Sobrien
386096263Sobrieninline void
386196263Sobrienvec_stl (vector signed int a1, int a2, void *a3)
386296263Sobrien{
386396263Sobrien  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
386496263Sobrien}
386596263Sobrien
386696263Sobrieninline void
386796263Sobrienvec_stl (vector unsigned int a1, int a2, void *a3)
386896263Sobrien{
386996263Sobrien  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
387096263Sobrien}
387196263Sobrien
387296263Sobrieninline void
387396263Sobrienvec_stl (vector signed short a1, int a2, void *a3)
387496263Sobrien{
387596263Sobrien  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
387696263Sobrien}
387796263Sobrien
387896263Sobrieninline void
387996263Sobrienvec_stl (vector unsigned short a1, int a2, void *a3)
388096263Sobrien{
388196263Sobrien  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
388296263Sobrien}
388396263Sobrien
388496263Sobrieninline void
388596263Sobrienvec_stl (vector signed char a1, int a2, void *a3)
388696263Sobrien{
388796263Sobrien  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
388896263Sobrien}
388996263Sobrien
389096263Sobrieninline void
389196263Sobrienvec_stl (vector unsigned char a1, int a2, void *a3)
389296263Sobrien{
389396263Sobrien  __builtin_altivec_stvxl ((vector signed int) a1, a2, (void *) a3);
389496263Sobrien}
389596263Sobrien
389696263Sobrien/* vec_sub */
389796263Sobrien
389896263Sobrieninline vector signed char
389996263Sobrienvec_sub (vector signed char a1, vector signed char a2)
390096263Sobrien{
390196263Sobrien  return (vector signed char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
390296263Sobrien}
390396263Sobrien
390496263Sobrieninline vector unsigned char
390596263Sobrienvec_sub (vector signed char a1, vector unsigned char a2)
390696263Sobrien{
390796263Sobrien  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
390896263Sobrien}
390996263Sobrien
391096263Sobrieninline vector unsigned char
391196263Sobrienvec_sub (vector unsigned char a1, vector signed char a2)
391296263Sobrien{
391396263Sobrien  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
391496263Sobrien}
391596263Sobrien
391696263Sobrieninline vector unsigned char
391796263Sobrienvec_sub (vector unsigned char a1, vector unsigned char a2)
391896263Sobrien{
391996263Sobrien  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
392096263Sobrien}
392196263Sobrien
392296263Sobrieninline vector signed short
392396263Sobrienvec_sub (vector signed short a1, vector signed short a2)
392496263Sobrien{
392596263Sobrien  return (vector signed short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
392696263Sobrien}
392796263Sobrien
392896263Sobrieninline vector unsigned short
392996263Sobrienvec_sub (vector signed short a1, vector unsigned short a2)
393096263Sobrien{
393196263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
393296263Sobrien}
393396263Sobrien
393496263Sobrieninline vector unsigned short
393596263Sobrienvec_sub (vector unsigned short a1, vector signed short a2)
393696263Sobrien{
393796263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
393896263Sobrien}
393996263Sobrien
394096263Sobrieninline vector unsigned short
394196263Sobrienvec_sub (vector unsigned short a1, vector unsigned short a2)
394296263Sobrien{
394396263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
394496263Sobrien}
394596263Sobrien
394696263Sobrieninline vector signed int
394796263Sobrienvec_sub (vector signed int a1, vector signed int a2)
394896263Sobrien{
394996263Sobrien  return (vector signed int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
395096263Sobrien}
395196263Sobrien
395296263Sobrieninline vector unsigned int
395396263Sobrienvec_sub (vector signed int a1, vector unsigned int a2)
395496263Sobrien{
395596263Sobrien  return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
395696263Sobrien}
395796263Sobrien
395896263Sobrieninline vector unsigned int
395996263Sobrienvec_sub (vector unsigned int a1, vector signed int a2)
396096263Sobrien{
396196263Sobrien  return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
396296263Sobrien}
396396263Sobrien
396496263Sobrieninline vector unsigned int
396596263Sobrienvec_sub (vector unsigned int a1, vector unsigned int a2)
396696263Sobrien{
396796263Sobrien  return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
396896263Sobrien}
396996263Sobrien
397096263Sobrieninline vector float
397196263Sobrienvec_sub (vector float a1, vector float a2)
397296263Sobrien{
397396263Sobrien  return (vector float) __builtin_altivec_vsubfp ((vector float) a1, (vector float) a2);
397496263Sobrien}
397596263Sobrien
397696263Sobrien/* vec_vsubfp */
397796263Sobrien
397896263Sobrieninline vector float
397996263Sobrienvec_vsubfp (vector float a1, vector float a2)
398096263Sobrien{
398196263Sobrien  return (vector float) __builtin_altivec_vsubfp ((vector float) a1, (vector float) a2);
398296263Sobrien}
398396263Sobrien
398496263Sobrien/* vec_vsubuwm */
398596263Sobrien
398696263Sobrieninline vector signed int
398796263Sobrienvec_vsubuwm (vector signed int a1, vector signed int a2)
398896263Sobrien{
398996263Sobrien  return (vector signed int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
399096263Sobrien}
399196263Sobrien
399296263Sobrieninline vector unsigned int
399396263Sobrienvec_vsubuwm (vector signed int a1, vector unsigned int a2)
399496263Sobrien{
399596263Sobrien  return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
399696263Sobrien}
399796263Sobrien
399896263Sobrieninline vector unsigned int
399996263Sobrienvec_vsubuwm (vector unsigned int a1, vector signed int a2)
400096263Sobrien{
400196263Sobrien  return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
400296263Sobrien}
400396263Sobrien
400496263Sobrieninline vector unsigned int
400596263Sobrienvec_vsubuwm (vector unsigned int a1, vector unsigned int a2)
400696263Sobrien{
400796263Sobrien  return (vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) a1, (vector signed int) a2);
400896263Sobrien}
400996263Sobrien
401096263Sobrien/* vec_vsubuhm */
401196263Sobrien
401296263Sobrieninline vector signed short
401396263Sobrienvec_vsubuhm (vector signed short a1, vector signed short a2)
401496263Sobrien{
401596263Sobrien  return (vector signed short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
401696263Sobrien}
401796263Sobrien
401896263Sobrieninline vector unsigned short
401996263Sobrienvec_vsubuhm (vector signed short a1, vector unsigned short a2)
402096263Sobrien{
402196263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
402296263Sobrien}
402396263Sobrien
402496263Sobrieninline vector unsigned short
402596263Sobrienvec_vsubuhm (vector unsigned short a1, vector signed short a2)
402696263Sobrien{
402796263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
402896263Sobrien}
402996263Sobrien
403096263Sobrieninline vector unsigned short
403196263Sobrienvec_vsubuhm (vector unsigned short a1, vector unsigned short a2)
403296263Sobrien{
403396263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) a1, (vector signed short) a2);
403496263Sobrien}
403596263Sobrien
403696263Sobrien/* vec_vsububm */
403796263Sobrien
403896263Sobrieninline vector signed char
403996263Sobrienvec_vsububm (vector signed char a1, vector signed char a2)
404096263Sobrien{
404196263Sobrien  return (vector signed char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
404296263Sobrien}
404396263Sobrien
404496263Sobrieninline vector unsigned char
404596263Sobrienvec_vsububm (vector signed char a1, vector unsigned char a2)
404696263Sobrien{
404796263Sobrien  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
404896263Sobrien}
404996263Sobrien
405096263Sobrieninline vector unsigned char
405196263Sobrienvec_vsububm (vector unsigned char a1, vector signed char a2)
405296263Sobrien{
405396263Sobrien  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
405496263Sobrien}
405596263Sobrien
405696263Sobrieninline vector unsigned char
405796263Sobrienvec_vsububm (vector unsigned char a1, vector unsigned char a2)
405896263Sobrien{
405996263Sobrien  return (vector unsigned char) __builtin_altivec_vsububm ((vector signed char) a1, (vector signed char) a2);
406096263Sobrien}
406196263Sobrien
406296263Sobrien/* vec_subc */
406396263Sobrien
406496263Sobrieninline vector unsigned int
406596263Sobrienvec_subc (vector unsigned int a1, vector unsigned int a2)
406696263Sobrien{
406796263Sobrien  return (vector unsigned int) __builtin_altivec_vsubcuw ((vector signed int) a1, (vector signed int) a2);
406896263Sobrien}
406996263Sobrien
407096263Sobrien/* vec_subs */
407196263Sobrien
407296263Sobrieninline vector unsigned char
407396263Sobrienvec_subs (vector signed char a1, vector unsigned char a2)
407496263Sobrien{
407596263Sobrien  return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
407696263Sobrien}
407796263Sobrien
407896263Sobrieninline vector unsigned char
407996263Sobrienvec_subs (vector unsigned char a1, vector signed char a2)
408096263Sobrien{
408196263Sobrien  return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
408296263Sobrien}
408396263Sobrien
408496263Sobrieninline vector unsigned char
408596263Sobrienvec_subs (vector unsigned char a1, vector unsigned char a2)
408696263Sobrien{
408796263Sobrien  return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
408896263Sobrien}
408996263Sobrien
409096263Sobrieninline vector signed char
409196263Sobrienvec_subs (vector signed char a1, vector signed char a2)
409296263Sobrien{
409396263Sobrien  return (vector signed char) __builtin_altivec_vsubsbs ((vector signed char) a1, (vector signed char) a2);
409496263Sobrien}
409596263Sobrien
409696263Sobrieninline vector unsigned short
409796263Sobrienvec_subs (vector signed short a1, vector unsigned short a2)
409896263Sobrien{
409996263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
410096263Sobrien}
410196263Sobrien
410296263Sobrieninline vector unsigned short
410396263Sobrienvec_subs (vector unsigned short a1, vector signed short a2)
410496263Sobrien{
410596263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
410696263Sobrien}
410796263Sobrien
410896263Sobrieninline vector unsigned short
410996263Sobrienvec_subs (vector unsigned short a1, vector unsigned short a2)
411096263Sobrien{
411196263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
411296263Sobrien}
411396263Sobrien
411496263Sobrieninline vector signed short
411596263Sobrienvec_subs (vector signed short a1, vector signed short a2)
411696263Sobrien{
411796263Sobrien  return (vector signed short) __builtin_altivec_vsubshs ((vector signed short) a1, (vector signed short) a2);
411896263Sobrien}
411996263Sobrien
412096263Sobrieninline vector unsigned int
412196263Sobrienvec_subs (vector signed int a1, vector unsigned int a2)
412296263Sobrien{
412396263Sobrien  return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
412496263Sobrien}
412596263Sobrien
412696263Sobrieninline vector unsigned int
412796263Sobrienvec_subs (vector unsigned int a1, vector signed int a2)
412896263Sobrien{
412996263Sobrien  return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
413096263Sobrien}
413196263Sobrien
413296263Sobrieninline vector unsigned int
413396263Sobrienvec_subs (vector unsigned int a1, vector unsigned int a2)
413496263Sobrien{
413596263Sobrien  return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
413696263Sobrien}
413796263Sobrien
413896263Sobrieninline vector signed int
413996263Sobrienvec_subs (vector signed int a1, vector signed int a2)
414096263Sobrien{
414196263Sobrien  return (vector signed int) __builtin_altivec_vsubsws ((vector signed int) a1, (vector signed int) a2);
414296263Sobrien}
414396263Sobrien
414496263Sobrien/* vec_vsubsws */
414596263Sobrien
414696263Sobrieninline vector signed int
414796263Sobrienvec_vsubsws (vector signed int a1, vector signed int a2)
414896263Sobrien{
414996263Sobrien  return (vector signed int) __builtin_altivec_vsubsws ((vector signed int) a1, (vector signed int) a2);
415096263Sobrien}
415196263Sobrien
415296263Sobrien/* vec_vsubuws */
415396263Sobrien
415496263Sobrieninline vector unsigned int
415596263Sobrienvec_vsubuws (vector signed int a1, vector unsigned int a2)
415696263Sobrien{
415796263Sobrien  return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
415896263Sobrien}
415996263Sobrien
416096263Sobrieninline vector unsigned int
416196263Sobrienvec_vsubuws (vector unsigned int a1, vector signed int a2)
416296263Sobrien{
416396263Sobrien  return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
416496263Sobrien}
416596263Sobrien
416696263Sobrieninline vector unsigned int
416796263Sobrienvec_vsubuws (vector unsigned int a1, vector unsigned int a2)
416896263Sobrien{
416996263Sobrien  return (vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) a1, (vector signed int) a2);
417096263Sobrien}
417196263Sobrien
417296263Sobrien/* vec_vsubshs */
417396263Sobrien
417496263Sobrieninline vector signed short
417596263Sobrienvec_vsubshs (vector signed short a1, vector signed short a2)
417696263Sobrien{
417796263Sobrien  return (vector signed short) __builtin_altivec_vsubshs ((vector signed short) a1, (vector signed short) a2);
417896263Sobrien}
417996263Sobrien
418096263Sobrien/* vec_vsubuhs */
418196263Sobrien
418296263Sobrieninline vector unsigned short
418396263Sobrienvec_vsubuhs (vector signed short a1, vector unsigned short a2)
418496263Sobrien{
418596263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
418696263Sobrien}
418796263Sobrien
418896263Sobrieninline vector unsigned short
418996263Sobrienvec_vsubuhs (vector unsigned short a1, vector signed short a2)
419096263Sobrien{
419196263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
419296263Sobrien}
419396263Sobrien
419496263Sobrien/* vec_vsubuhs */
419596263Sobrien
419696263Sobrieninline vector unsigned short
419796263Sobrienvec_vsubsuhs (vector signed short a1, vector unsigned short a2)
419896263Sobrien{
419996263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
420096263Sobrien}
420196263Sobrien
420296263Sobrieninline vector unsigned short
420396263Sobrienvec_vsubsuhs (vector unsigned short a1, vector signed short a2)
420496263Sobrien{
420596263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
420696263Sobrien}
420796263Sobrien
420896263Sobrieninline vector unsigned short
420996263Sobrienvec_vsubsuhs (vector unsigned short a1, vector unsigned short a2)
421096263Sobrien{
421196263Sobrien  return (vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) a1, (vector signed short) a2);
421296263Sobrien}
421396263Sobrien
421496263Sobrien/* vec_vsubsbs */
421596263Sobrien
421696263Sobrieninline vector signed char
421796263Sobrienvec_vsubsbs (vector signed char a1, vector signed char a2)
421896263Sobrien{
421996263Sobrien  return (vector signed char) __builtin_altivec_vsubsbs ((vector signed char) a1, (vector signed char) a2);
422096263Sobrien}
422196263Sobrien
422296263Sobrien/* vec_vsububs */
422396263Sobrien
422496263Sobrieninline vector unsigned char
422596263Sobrienvec_vsubsubs (vector signed char a1, vector unsigned char a2)
422696263Sobrien{
422796263Sobrien  return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
422896263Sobrien}
422996263Sobrien
423096263Sobrieninline vector unsigned char
423196263Sobrienvec_vsubsubs (vector unsigned char a1, vector signed char a2)
423296263Sobrien{
423396263Sobrien  return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
423496263Sobrien}
423596263Sobrien
423696263Sobrieninline vector unsigned char
423796263Sobrienvec_vsubsubs (vector unsigned char a1, vector unsigned char a2)
423896263Sobrien{
423996263Sobrien  return (vector unsigned char) __builtin_altivec_vsububs ((vector signed char) a1, (vector signed char) a2);
424096263Sobrien}
424196263Sobrien
424296263Sobrien/* vec_sum4s */
424396263Sobrien
424496263Sobrieninline vector unsigned int
424596263Sobrienvec_sum4s (vector unsigned char a1, vector unsigned int a2)
424696263Sobrien{
424796263Sobrien  return (vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) a1, (vector signed int) a2);
424896263Sobrien}
424996263Sobrien
425096263Sobrieninline vector signed int
425196263Sobrienvec_sum4s (vector signed char a1, vector signed int a2)
425296263Sobrien{
425396263Sobrien  return (vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) a1, (vector signed int) a2);
425496263Sobrien}
425596263Sobrien
425696263Sobrieninline vector signed int
425796263Sobrienvec_sum4s (vector signed short a1, vector signed int a2)
425896263Sobrien{
425996263Sobrien  return (vector signed int) __builtin_altivec_vsum4shs ((vector signed short) a1, (vector signed int) a2);
426096263Sobrien}
426196263Sobrien
426296263Sobrien/* vec_vsum4shs */
426396263Sobrien
426496263Sobrieninline vector signed int
426596263Sobrienvec_vsum4shss (vector signed short a1, vector signed int a2)
426696263Sobrien{
426796263Sobrien  return (vector signed int) __builtin_altivec_vsum4shs ((vector signed short) a1, (vector signed int) a2);
426896263Sobrien}
426996263Sobrien
427096263Sobrien/* vec_vsum4sbs */
427196263Sobrien
427296263Sobrieninline vector signed int
427396263Sobrienvec_vsum4sbs (vector signed char a1, vector signed int a2)
427496263Sobrien{
427596263Sobrien  return (vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) a1, (vector signed int) a2);
427696263Sobrien}
427796263Sobrien
427896263Sobrien/* vec_vsum4ubs */
427996263Sobrien
428096263Sobrieninline vector unsigned int
428196263Sobrienvec_vsum4ubs (vector unsigned char a1, vector unsigned int a2)
428296263Sobrien{
428396263Sobrien  return (vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) a1, (vector signed int) a2);
428496263Sobrien}
428596263Sobrien
428696263Sobrien/* vec_sum2s */
428796263Sobrien
428896263Sobrieninline vector signed int
428996263Sobrienvec_sum2s (vector signed int a1, vector signed int a2)
429096263Sobrien{
429196263Sobrien  return (vector signed int) __builtin_altivec_vsum2sws ((vector signed int) a1, (vector signed int) a2);
429296263Sobrien}
429396263Sobrien
429496263Sobrien/* vec_sums */
429596263Sobrien
429696263Sobrieninline vector signed int
429796263Sobrienvec_sums (vector signed int a1, vector signed int a2)
429896263Sobrien{
429996263Sobrien  return (vector signed int) __builtin_altivec_vsumsws ((vector signed int) a1, (vector signed int) a2);
430096263Sobrien}
430196263Sobrien
430296263Sobrien/* vec_trunc */
430396263Sobrien
430496263Sobrieninline vector float
430596263Sobrienvec_trunc (vector float a1)
430696263Sobrien{
430796263Sobrien  return (vector float) __builtin_altivec_vrfiz ((vector float) a1);
430896263Sobrien}
430996263Sobrien
431096263Sobrien/* vec_unpackh */
431196263Sobrien
431296263Sobrieninline vector signed short
431396263Sobrienvec_unpackh (vector signed char a1)
431496263Sobrien{
431596263Sobrien  return (vector signed short) __builtin_altivec_vupkhsb ((vector signed char) a1);
431696263Sobrien}
431796263Sobrien
431896263Sobrieninline vector signed int
431996263Sobrienvec_unpackh (vector signed short a1)
432096263Sobrien{
432196263Sobrien  return (vector signed int) __builtin_altivec_vupkhsh ((vector signed short) a1);
432296263Sobrien}
432396263Sobrien
432496263Sobrien/* vec_vupkhsh */
432596263Sobrien
432696263Sobrieninline vector signed int
432796263Sobrienvec_vupkhsh (vector signed short a1)
432896263Sobrien{
432996263Sobrien  return (vector signed int) __builtin_altivec_vupkhsh ((vector signed short) a1);
433096263Sobrien}
433196263Sobrien
433296263Sobrien/* vec_vupkhpx */
433396263Sobrien
433496263Sobrieninline vector unsigned int
433596263Sobrienvec_vupkhpx (vector signed short a1)
433696263Sobrien{
433796263Sobrien  return (vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) a1);
433896263Sobrien}
433996263Sobrien
434096263Sobrien/* vec_vupkhsb */
434196263Sobrien
434296263Sobrieninline vector signed short
434396263Sobrienvec_vupkhsb (vector signed char a1)
434496263Sobrien{
434596263Sobrien  return (vector signed short) __builtin_altivec_vupkhsb ((vector signed char) a1);
434696263Sobrien}
434796263Sobrien
434896263Sobrien/* vec_unpackl */
434996263Sobrien
435096263Sobrieninline vector signed short
435196263Sobrienvec_unpackl (vector signed char a1)
435296263Sobrien{
435396263Sobrien  return (vector signed short) __builtin_altivec_vupklsb ((vector signed char) a1);
435496263Sobrien}
435596263Sobrien
435696263Sobrieninline vector unsigned int
435796263Sobrienvec_vupklpx (vector signed short a1)
435896263Sobrien{
435996263Sobrien  return (vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) a1);
436096263Sobrien}
436196263Sobrien
436296263Sobrieninline vector signed int
436396263Sobrienvec_unpackl (vector signed short a1)
436496263Sobrien{
436596263Sobrien  return (vector signed int) __builtin_altivec_vupklsh ((vector signed short) a1);
436696263Sobrien}
436796263Sobrien
436896263Sobrien/* vec_upklsh */
436996263Sobrien
437096263Sobrieninline vector signed int
437196263Sobrienvec_vupklsh (vector signed short a1)
437296263Sobrien{
437396263Sobrien  return (vector signed int) __builtin_altivec_vupklsh ((vector signed short) a1);
437496263Sobrien}
437596263Sobrien
437696263Sobrien/* vec_vupklsb */
437796263Sobrien
437896263Sobrieninline vector signed short
437996263Sobrienvec_vupklsb (vector signed char a1)
438096263Sobrien{
438196263Sobrien  return (vector signed short) __builtin_altivec_vupklsb ((vector signed char) a1);
438296263Sobrien}
438396263Sobrien
438496263Sobrien/* vec_xor */
438596263Sobrien
438696263Sobrieninline vector float
438796263Sobrienvec_xor (vector float a1, vector float a2)
438896263Sobrien{
438996263Sobrien  return (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
439096263Sobrien}
439196263Sobrien
439296263Sobrieninline vector float
439396263Sobrienvec_xor (vector float a1, vector signed int a2)
439496263Sobrien{
439596263Sobrien  return (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
439696263Sobrien}
439796263Sobrien
439896263Sobrieninline vector float
439996263Sobrienvec_xor (vector signed int a1, vector float a2)
440096263Sobrien{
440196263Sobrien  return (vector float) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
440296263Sobrien}
440396263Sobrien
440496263Sobrieninline vector signed int
440596263Sobrienvec_xor (vector signed int a1, vector signed int a2)
440696263Sobrien{
440796263Sobrien  return (vector signed int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
440896263Sobrien}
440996263Sobrien
441096263Sobrieninline vector unsigned int
441196263Sobrienvec_xor (vector signed int a1, vector unsigned int a2)
441296263Sobrien{
441396263Sobrien  return (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
441496263Sobrien}
441596263Sobrien
441696263Sobrieninline vector unsigned int
441796263Sobrienvec_xor (vector unsigned int a1, vector signed int a2)
441896263Sobrien{
441996263Sobrien  return (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
442096263Sobrien}
442196263Sobrien
442296263Sobrieninline vector unsigned int
442396263Sobrienvec_xor (vector unsigned int a1, vector unsigned int a2)
442496263Sobrien{
442596263Sobrien  return (vector unsigned int) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
442696263Sobrien}
442796263Sobrien
442896263Sobrieninline vector signed short
442996263Sobrienvec_xor (vector signed short a1, vector signed short a2)
443096263Sobrien{
443196263Sobrien  return (vector signed short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
443296263Sobrien}
443396263Sobrien
443496263Sobrieninline vector unsigned short
443596263Sobrienvec_xor (vector signed short a1, vector unsigned short a2)
443696263Sobrien{
443796263Sobrien  return (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
443896263Sobrien}
443996263Sobrien
444096263Sobrieninline vector unsigned short
444196263Sobrienvec_xor (vector unsigned short a1, vector signed short a2)
444296263Sobrien{
444396263Sobrien  return (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
444496263Sobrien}
444596263Sobrien
444696263Sobrieninline vector unsigned short
444796263Sobrienvec_xor (vector unsigned short a1, vector unsigned short a2)
444896263Sobrien{
444996263Sobrien  return (vector unsigned short) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
445096263Sobrien}
445196263Sobrien
445296263Sobrieninline vector signed char
445396263Sobrienvec_xor (vector signed char a1, vector signed char a2)
445496263Sobrien{
445596263Sobrien  return (vector signed char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
445696263Sobrien}
445796263Sobrien
445896263Sobrieninline vector unsigned char
445996263Sobrienvec_xor (vector signed char a1, vector unsigned char a2)
446096263Sobrien{
446196263Sobrien  return (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
446296263Sobrien}
446396263Sobrien
446496263Sobrieninline vector unsigned char
446596263Sobrienvec_xor (vector unsigned char a1, vector signed char a2)
446696263Sobrien{
446796263Sobrien  return (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
446896263Sobrien}
446996263Sobrien
447096263Sobrieninline vector unsigned char
447196263Sobrienvec_xor (vector unsigned char a1, vector unsigned char a2)
447296263Sobrien{
447396263Sobrien  return (vector unsigned char) __builtin_altivec_vxor ((vector signed int) a1, (vector signed int) a2);
447496263Sobrien}
447596263Sobrien
447696263Sobrien/* vec_all_eq */
447796263Sobrien
447896263Sobrieninline int
447996263Sobrienvec_all_eq (vector signed char a1, vector unsigned char a2)
448096263Sobrien{
448196263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_LT, a1, (vector signed char) a2);
448296263Sobrien}
448396263Sobrien
448496263Sobrieninline int
448596263Sobrienvec_all_eq (vector signed char a1, vector signed char a2)
448696263Sobrien{
448796263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_LT, a1, a2);
448896263Sobrien}
448996263Sobrien
449096263Sobrieninline int
449196263Sobrienvec_all_eq (vector unsigned char a1, vector signed char a2)
449296263Sobrien{
449396263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
449496263Sobrien}
449596263Sobrien
449696263Sobrieninline int
449796263Sobrienvec_all_eq (vector unsigned char a1, vector unsigned char a2)
449896263Sobrien{
449996263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
450096263Sobrien}
450196263Sobrien
450296263Sobrieninline int
450396263Sobrienvec_all_eq (vector signed short a1, vector unsigned short a2)
450496263Sobrien{
450596263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
450696263Sobrien}
450796263Sobrien
450896263Sobrieninline int
450996263Sobrienvec_all_eq (vector signed short a1, vector signed short a2)
451096263Sobrien{
451196263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
451296263Sobrien}
451396263Sobrien
451496263Sobrieninline int
451596263Sobrienvec_all_eq (vector unsigned short a1, vector signed short a2)
451696263Sobrien{
451796263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
451896263Sobrien}
451996263Sobrien
452096263Sobrieninline int
452196263Sobrienvec_all_eq (vector unsigned short a1, vector unsigned short a2)
452296263Sobrien{
452396263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
452496263Sobrien}
452596263Sobrien
452696263Sobrieninline int
452796263Sobrienvec_all_eq (vector signed int a1, vector unsigned int a2)
452896263Sobrien{
452996263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
453096263Sobrien}
453196263Sobrien
453296263Sobrieninline int
453396263Sobrienvec_all_eq (vector signed int a1, vector signed int a2)
453496263Sobrien{
453596263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
453696263Sobrien}
453796263Sobrien
453896263Sobrieninline int
453996263Sobrienvec_all_eq (vector unsigned int a1, vector signed int a2)
454096263Sobrien{
454196263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
454296263Sobrien}
454396263Sobrien
454496263Sobrieninline int
454596263Sobrienvec_all_eq (vector unsigned int a1, vector unsigned int a2)
454696263Sobrien{
454796263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
454896263Sobrien}
454996263Sobrien
455096263Sobrieninline int
455196263Sobrienvec_all_eq (vector float a1, vector float a2)
455296263Sobrien{
455396263Sobrien  return __builtin_altivec_vcmpeqfp_p (__CR6_LT, a1, a2);
455496263Sobrien}
455596263Sobrien
455696263Sobrien/* vec_all_ge */
455796263Sobrien
455896263Sobrieninline int
455996263Sobrienvec_all_ge (vector signed char a1, vector unsigned char a2)
456096263Sobrien{
456196263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
456296263Sobrien}
456396263Sobrien
456496263Sobrieninline int
456596263Sobrienvec_all_ge (vector unsigned char a1, vector signed char a2)
456696263Sobrien{
456796263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
456896263Sobrien}
456996263Sobrien
457096263Sobrieninline int
457196263Sobrienvec_all_ge (vector unsigned char a1, vector unsigned char a2)
457296263Sobrien{
457396263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
457496263Sobrien}
457596263Sobrien
457696263Sobrieninline int
457796263Sobrienvec_all_ge (vector signed char a1, vector signed char a2)
457896263Sobrien{
457996263Sobrien  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) a2, (vector signed char) a1);
458096263Sobrien}
458196263Sobrien
458296263Sobrieninline int
458396263Sobrienvec_all_ge (vector signed short a1, vector unsigned short a2)
458496263Sobrien{
458596263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
458696263Sobrien}
458796263Sobrien
458896263Sobrieninline int
458996263Sobrienvec_all_ge (vector unsigned short a1, vector signed short a2)
459096263Sobrien{
459196263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
459296263Sobrien}
459396263Sobrien
459496263Sobrieninline int
459596263Sobrienvec_all_ge (vector unsigned short a1, vector unsigned short a2)
459696263Sobrien{
459796263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
459896263Sobrien}
459996263Sobrien
460096263Sobrieninline int
460196263Sobrienvec_all_ge (vector signed short a1, vector signed short a2)
460296263Sobrien{
460396263Sobrien  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) a2, (vector signed short) a1);
460496263Sobrien}
460596263Sobrien
460696263Sobrieninline int
460796263Sobrienvec_all_ge (vector signed int a1, vector unsigned int a2)
460896263Sobrien{
460996263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
461096263Sobrien}
461196263Sobrien
461296263Sobrieninline int
461396263Sobrienvec_all_ge (vector unsigned int a1, vector signed int a2)
461496263Sobrien{
461596263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
461696263Sobrien}
461796263Sobrien
461896263Sobrieninline int
461996263Sobrienvec_all_ge (vector unsigned int a1, vector unsigned int a2)
462096263Sobrien{
462196263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
462296263Sobrien}
462396263Sobrien
462496263Sobrieninline int
462596263Sobrienvec_all_ge (vector signed int a1, vector signed int a2)
462696263Sobrien{
462796263Sobrien  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) a2, (vector signed int) a1);
462896263Sobrien}
462996263Sobrien
463096263Sobrieninline int
463196263Sobrienvec_all_ge (vector float a1, vector float a2)
463296263Sobrien{
463396263Sobrien  return __builtin_altivec_vcmpgefp_p (__CR6_EQ, a1, a2);
463496263Sobrien}
463596263Sobrien
463696263Sobrien/* vec_all_gt */
463796263Sobrien
463896263Sobrieninline int
463996263Sobrienvec_all_gt (vector signed char a1, vector unsigned char a2)
464096263Sobrien{
464196263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
464296263Sobrien}
464396263Sobrien
464496263Sobrieninline int
464596263Sobrienvec_all_gt (vector unsigned char a1, vector signed char a2)
464696263Sobrien{
464796263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
464896263Sobrien}
464996263Sobrien
465096263Sobrieninline int
465196263Sobrienvec_all_gt (vector unsigned char a1, vector unsigned char a2)
465296263Sobrien{
465396263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
465496263Sobrien}
465596263Sobrien
465696263Sobrieninline int
465796263Sobrienvec_all_gt (vector signed char a1, vector signed char a2)
465896263Sobrien{
465996263Sobrien  return __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) a1, (vector signed char) a2);
466096263Sobrien}
466196263Sobrien
466296263Sobrieninline int
466396263Sobrienvec_all_gt (vector signed short a1, vector unsigned short a2)
466496263Sobrien{
466596263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
466696263Sobrien}
466796263Sobrien
466896263Sobrieninline int
466996263Sobrienvec_all_gt (vector unsigned short a1, vector signed short a2)
467096263Sobrien{
467196263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
467296263Sobrien}
467396263Sobrien
467496263Sobrieninline int
467596263Sobrienvec_all_gt (vector unsigned short a1, vector unsigned short a2)
467696263Sobrien{
467796263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
467896263Sobrien}
467996263Sobrien
468096263Sobrieninline int
468196263Sobrienvec_all_gt (vector signed short a1, vector signed short a2)
468296263Sobrien{
468396263Sobrien  return __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) a1, (vector signed short) a2);
468496263Sobrien}
468596263Sobrien
468696263Sobrieninline int
468796263Sobrienvec_all_gt (vector signed int a1, vector unsigned int a2)
468896263Sobrien{
468996263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
469096263Sobrien}
469196263Sobrien
469296263Sobrieninline int
469396263Sobrienvec_all_gt (vector unsigned int a1, vector signed int a2)
469496263Sobrien{
469596263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
469696263Sobrien}
469796263Sobrien
469896263Sobrieninline int
469996263Sobrienvec_all_gt (vector unsigned int a1, vector unsigned int a2)
470096263Sobrien{
470196263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
470296263Sobrien}
470396263Sobrien
470496263Sobrieninline int
470596263Sobrienvec_all_gt (vector signed int a1, vector signed int a2)
470696263Sobrien{
470796263Sobrien  return __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) a1, (vector signed int) a2);
470896263Sobrien}
470996263Sobrien
471096263Sobrieninline int
471196263Sobrienvec_all_gt (vector float a1, vector float a2)
471296263Sobrien{
471396263Sobrien  return __builtin_altivec_vcmpgtfp_p (__CR6_LT, a1, a2);
471496263Sobrien}
471596263Sobrien
471696263Sobrien/* vec_all_in */
471796263Sobrien
471896263Sobrieninline int
471996263Sobrienvec_all_in (vector float a1, vector float a2)
472096263Sobrien{
472196263Sobrien  return __builtin_altivec_vcmpbfp_p (__CR6_EQ, a1, a2);
472296263Sobrien}
472396263Sobrien
472496263Sobrien/* vec_all_le */
472596263Sobrien
472696263Sobrieninline int
472796263Sobrienvec_all_le (vector signed char a1, vector unsigned char a2)
472896263Sobrien{
472996263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
473096263Sobrien}
473196263Sobrien
473296263Sobrieninline int
473396263Sobrienvec_all_le (vector unsigned char a1, vector signed char a2)
473496263Sobrien{
473596263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
473696263Sobrien}
473796263Sobrien
473896263Sobrieninline int
473996263Sobrienvec_all_le (vector unsigned char a1, vector unsigned char a2)
474096263Sobrien{
474196263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
474296263Sobrien}
474396263Sobrien
474496263Sobrieninline int
474596263Sobrienvec_all_le (vector signed char a1, vector signed char a2)
474696263Sobrien{
474796263Sobrien  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
474896263Sobrien}
474996263Sobrien
475096263Sobrieninline int
475196263Sobrienvec_all_le (vector signed short a1, vector unsigned short a2)
475296263Sobrien{
475396263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
475496263Sobrien}
475596263Sobrien
475696263Sobrieninline int
475796263Sobrienvec_all_le (vector unsigned short a1, vector signed short a2)
475896263Sobrien{
475996263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
476096263Sobrien}
476196263Sobrien
476296263Sobrieninline int
476396263Sobrienvec_all_le (vector unsigned short a1, vector unsigned short a2)
476496263Sobrien{
476596263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
476696263Sobrien}
476796263Sobrien
476896263Sobrieninline int
476996263Sobrienvec_all_le (vector signed short a1, vector signed short a2)
477096263Sobrien{
477196263Sobrien  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
477296263Sobrien}
477396263Sobrien
477496263Sobrieninline int
477596263Sobrienvec_all_le (vector signed int a1, vector unsigned int a2)
477696263Sobrien{
477796263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
477896263Sobrien}
477996263Sobrien
478096263Sobrieninline int
478196263Sobrienvec_all_le (vector unsigned int a1, vector signed int a2)
478296263Sobrien{
478396263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
478496263Sobrien}
478596263Sobrien
478696263Sobrieninline int
478796263Sobrienvec_all_le (vector unsigned int a1, vector unsigned int a2)
478896263Sobrien{
478996263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
479096263Sobrien}
479196263Sobrien
479296263Sobrieninline int
479396263Sobrienvec_all_le (vector signed int a1, vector signed int a2)
479496263Sobrien{
479596263Sobrien  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
479696263Sobrien}
479796263Sobrien
479896263Sobrieninline int
479996263Sobrienvec_all_le (vector float a1, vector float a2)
480096263Sobrien{
480196263Sobrien  return __builtin_altivec_vcmpgefp_p (__CR6_LT, a2, a1);
480296263Sobrien}
480396263Sobrien
480496263Sobrien/* vec_all_lt */
480596263Sobrien
480696263Sobrieninline int
480796263Sobrienvec_all_lt (vector signed char a1, vector unsigned char a2)
480896263Sobrien{
480996263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
481096263Sobrien}
481196263Sobrien
481296263Sobrieninline int
481396263Sobrienvec_all_lt (vector unsigned char a1, vector signed char a2)
481496263Sobrien{
481596263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
481696263Sobrien}
481796263Sobrien
481896263Sobrieninline int
481996263Sobrienvec_all_lt (vector unsigned char a1, vector unsigned char a2)
482096263Sobrien{
482196263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
482296263Sobrien}
482396263Sobrien
482496263Sobrieninline int
482596263Sobrienvec_all_lt (vector signed char a1, vector signed char a2)
482696263Sobrien{
482796263Sobrien  return __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) a2, (vector signed char) a1);
482896263Sobrien}
482996263Sobrien
483096263Sobrieninline int
483196263Sobrienvec_all_lt (vector signed short a1, vector unsigned short a2)
483296263Sobrien{
483396263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
483496263Sobrien}
483596263Sobrien
483696263Sobrieninline int
483796263Sobrienvec_all_lt (vector unsigned short a1, vector signed short a2)
483896263Sobrien{
483996263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
484096263Sobrien}
484196263Sobrien
484296263Sobrieninline int
484396263Sobrienvec_all_lt (vector unsigned short a1, vector unsigned short a2)
484496263Sobrien{
484596263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
484696263Sobrien}
484796263Sobrien
484896263Sobrieninline int
484996263Sobrienvec_all_lt (vector signed short a1, vector signed short a2)
485096263Sobrien{
485196263Sobrien  return __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) a2, (vector signed short) a1);
485296263Sobrien}
485396263Sobrien
485496263Sobrieninline int
485596263Sobrienvec_all_lt (vector signed int a1, vector unsigned int a2)
485696263Sobrien{
485796263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
485896263Sobrien}
485996263Sobrien
486096263Sobrieninline int
486196263Sobrienvec_all_lt (vector unsigned int a1, vector signed int a2)
486296263Sobrien{
486396263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
486496263Sobrien}
486596263Sobrien
486696263Sobrieninline int
486796263Sobrienvec_all_lt (vector unsigned int a1, vector unsigned int a2)
486896263Sobrien{
486996263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
487096263Sobrien}
487196263Sobrien
487296263Sobrieninline int
487396263Sobrienvec_all_lt (vector signed int a1, vector signed int a2)
487496263Sobrien{
487596263Sobrien  return __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) a2, (vector signed int) a1);
487696263Sobrien}
487796263Sobrien
487896263Sobrieninline int
487996263Sobrienvec_all_lt (vector float a1, vector float a2)
488096263Sobrien{
488196263Sobrien  return __builtin_altivec_vcmpgtfp_p (__CR6_LT, a2, a1);
488296263Sobrien}
488396263Sobrien
488496263Sobrien/* vec_all_nan */
488596263Sobrien
488696263Sobrieninline int
488796263Sobrienvec_all_nan (vector float a1)
488896263Sobrien{
488996263Sobrien  return __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, a1);
489096263Sobrien}
489196263Sobrien
489296263Sobrien/* vec_all_ne */
489396263Sobrien
489496263Sobrieninline int
489596263Sobrienvec_all_ne (vector signed char a1, vector unsigned char a2)
489696263Sobrien{
489796263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
489896263Sobrien}
489996263Sobrien
490096263Sobrieninline int
490196263Sobrienvec_all_ne (vector signed char a1, vector signed char a2)
490296263Sobrien{
490396263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
490496263Sobrien}
490596263Sobrien
490696263Sobrieninline int
490796263Sobrienvec_all_ne (vector unsigned char a1, vector signed char a2)
490896263Sobrien{
490996263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
491096263Sobrien}
491196263Sobrien
491296263Sobrieninline int
491396263Sobrienvec_all_ne (vector unsigned char a1, vector unsigned char a2)
491496263Sobrien{
491596263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) a1, (vector signed char) a2);
491696263Sobrien}
491796263Sobrien
491896263Sobrieninline int
491996263Sobrienvec_all_ne (vector signed short a1, vector unsigned short a2)
492096263Sobrien{
492196263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
492296263Sobrien}
492396263Sobrien
492496263Sobrieninline int
492596263Sobrienvec_all_ne (vector signed short a1, vector signed short a2)
492696263Sobrien{
492796263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
492896263Sobrien}
492996263Sobrien
493096263Sobrieninline int
493196263Sobrienvec_all_ne (vector unsigned short a1, vector signed short a2)
493296263Sobrien{
493396263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
493496263Sobrien}
493596263Sobrien
493696263Sobrieninline int
493796263Sobrienvec_all_ne (vector unsigned short a1, vector unsigned short a2)
493896263Sobrien{
493996263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) a1, (vector signed short) a2);
494096263Sobrien}
494196263Sobrien
494296263Sobrieninline int
494396263Sobrienvec_all_ne (vector signed int a1, vector unsigned int a2)
494496263Sobrien{
494596263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
494696263Sobrien}
494796263Sobrien
494896263Sobrieninline int
494996263Sobrienvec_all_ne (vector signed int a1, vector signed int a2)
495096263Sobrien{
495196263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
495296263Sobrien}
495396263Sobrien
495496263Sobrieninline int
495596263Sobrienvec_all_ne (vector unsigned int a1, vector signed int a2)
495696263Sobrien{
495796263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
495896263Sobrien}
495996263Sobrien
496096263Sobrieninline int
496196263Sobrienvec_all_ne (vector unsigned int a1, vector unsigned int a2)
496296263Sobrien{
496396263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) a1, (vector signed int) a2);
496496263Sobrien}
496596263Sobrien
496696263Sobrieninline int
496796263Sobrienvec_all_ne (vector float a1, vector float a2)
496896263Sobrien{
496996263Sobrien  return __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, a2);
497096263Sobrien}
497196263Sobrien
497296263Sobrien/* vec_all_nge */
497396263Sobrien
497496263Sobrieninline int
497596263Sobrienvec_all_nge (vector float a1, vector float a2)
497696263Sobrien{
497796263Sobrien  return __builtin_altivec_vcmpgefp_p (__CR6_EQ, a1, a2);
497896263Sobrien}
497996263Sobrien
498096263Sobrien/* vec_all_ngt */
498196263Sobrien
498296263Sobrieninline int
498396263Sobrienvec_all_ngt (vector float a1, vector float a2)
498496263Sobrien{
498596263Sobrien  return __builtin_altivec_vcmpgtfp_p (__CR6_EQ, a1, a2);
498696263Sobrien}
498796263Sobrien
498896263Sobrien/* vec_all_nle */
498996263Sobrien
499096263Sobrieninline int
499196263Sobrienvec_all_nle (vector float a1, vector float a2)
499296263Sobrien{
499396263Sobrien  return __builtin_altivec_vcmpgefp_p (__CR6_EQ, a2, a1);
499496263Sobrien}
499596263Sobrien
499696263Sobrien/* vec_all_nlt */
499796263Sobrien
499896263Sobrieninline int
499996263Sobrienvec_all_nlt (vector float a1, vector float a2)
500096263Sobrien{
500196263Sobrien  return __builtin_altivec_vcmpgtfp_p (__CR6_EQ, a2, a1);
500296263Sobrien}
500396263Sobrien
500496263Sobrien/* vec_all_numeric */
500596263Sobrien
500696263Sobrieninline int
500796263Sobrienvec_all_numeric (vector float a1)
500896263Sobrien{
500996263Sobrien  return __builtin_altivec_vcmpeqfp_p (__CR6_EQ, a1, a1);
501096263Sobrien}
501196263Sobrien
501296263Sobrien/* vec_any_eq */
501396263Sobrien
501496263Sobrieninline int
501596263Sobrienvec_any_eq (vector signed char a1, vector unsigned char a2)
501696263Sobrien{
501796263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
501896263Sobrien}
501996263Sobrien
502096263Sobrieninline int
502196263Sobrienvec_any_eq (vector signed char a1, vector signed char a2)
502296263Sobrien{
502396263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
502496263Sobrien}
502596263Sobrien
502696263Sobrieninline int
502796263Sobrienvec_any_eq (vector unsigned char a1, vector signed char a2)
502896263Sobrien{
502996263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
503096263Sobrien}
503196263Sobrien
503296263Sobrieninline int
503396263Sobrienvec_any_eq (vector unsigned char a1, vector unsigned char a2)
503496263Sobrien{
503596263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
503696263Sobrien}
503796263Sobrien
503896263Sobrieninline int
503996263Sobrienvec_any_eq (vector signed short a1, vector unsigned short a2)
504096263Sobrien{
504196263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
504296263Sobrien}
504396263Sobrien
504496263Sobrieninline int
504596263Sobrienvec_any_eq (vector signed short a1, vector signed short a2)
504696263Sobrien{
504796263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
504896263Sobrien}
504996263Sobrien
505096263Sobrieninline int
505196263Sobrienvec_any_eq (vector unsigned short a1, vector signed short a2)
505296263Sobrien{
505396263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
505496263Sobrien}
505596263Sobrien
505696263Sobrieninline int
505796263Sobrienvec_any_eq (vector unsigned short a1, vector unsigned short a2)
505896263Sobrien{
505996263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
506096263Sobrien}
506196263Sobrien
506296263Sobrieninline int
506396263Sobrienvec_any_eq (vector signed int a1, vector unsigned int a2)
506496263Sobrien{
506596263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
506696263Sobrien}
506796263Sobrien
506896263Sobrieninline int
506996263Sobrienvec_any_eq (vector signed int a1, vector signed int a2)
507096263Sobrien{
507196263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
507296263Sobrien}
507396263Sobrien
507496263Sobrieninline int
507596263Sobrienvec_any_eq (vector unsigned int a1, vector signed int a2)
507696263Sobrien{
507796263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
507896263Sobrien}
507996263Sobrien
508096263Sobrieninline int
508196263Sobrienvec_any_eq (vector unsigned int a1, vector unsigned int a2)
508296263Sobrien{
508396263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
508496263Sobrien}
508596263Sobrien
508696263Sobrieninline int
508796263Sobrienvec_any_eq (vector float a1, vector float a2)
508896263Sobrien{
508996263Sobrien  return __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, a1, a2);
509096263Sobrien}
509196263Sobrien
509296263Sobrien/* vec_any_ge */
509396263Sobrien
509496263Sobrieninline int
509596263Sobrienvec_any_ge (vector signed char a1, vector unsigned char a2)
509696263Sobrien{
509796263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
509896263Sobrien}
509996263Sobrien
510096263Sobrieninline int
510196263Sobrienvec_any_ge (vector unsigned char a1, vector signed char a2)
510296263Sobrien{
510396263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
510496263Sobrien}
510596263Sobrien
510696263Sobrieninline int
510796263Sobrienvec_any_ge (vector unsigned char a1, vector unsigned char a2)
510896263Sobrien{
510996263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
511096263Sobrien}
511196263Sobrien
511296263Sobrieninline int
511396263Sobrienvec_any_ge (vector signed char a1, vector signed char a2)
511496263Sobrien{
511596263Sobrien  return __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) a2, (vector signed char) a1);
511696263Sobrien}
511796263Sobrien
511896263Sobrieninline int
511996263Sobrienvec_any_ge (vector signed short a1, vector unsigned short a2)
512096263Sobrien{
512196263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
512296263Sobrien}
512396263Sobrien
512496263Sobrieninline int
512596263Sobrienvec_any_ge (vector unsigned short a1, vector signed short a2)
512696263Sobrien{
512796263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
512896263Sobrien}
512996263Sobrien
513096263Sobrieninline int
513196263Sobrienvec_any_ge (vector unsigned short a1, vector unsigned short a2)
513296263Sobrien{
513396263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
513496263Sobrien}
513596263Sobrien
513696263Sobrieninline int
513796263Sobrienvec_any_ge (vector signed short a1, vector signed short a2)
513896263Sobrien{
513996263Sobrien  return __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) a2, (vector signed short) a1);
514096263Sobrien}
514196263Sobrien
514296263Sobrieninline int
514396263Sobrienvec_any_ge (vector signed int a1, vector unsigned int a2)
514496263Sobrien{
514596263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
514696263Sobrien}
514796263Sobrien
514896263Sobrieninline int
514996263Sobrienvec_any_ge (vector unsigned int a1, vector signed int a2)
515096263Sobrien{
515196263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
515296263Sobrien}
515396263Sobrien
515496263Sobrieninline int
515596263Sobrienvec_any_ge (vector unsigned int a1, vector unsigned int a2)
515696263Sobrien{
515796263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
515896263Sobrien}
515996263Sobrien
516096263Sobrieninline int
516196263Sobrienvec_any_ge (vector signed int a1, vector signed int a2)
516296263Sobrien{
516396263Sobrien  return __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) a2, (vector signed int) a1);
516496263Sobrien}
516596263Sobrien
516696263Sobrieninline int
516796263Sobrienvec_any_ge (vector float a1, vector float a2)
516896263Sobrien{
516996263Sobrien  return __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, a1, a2);
517096263Sobrien}
517196263Sobrien
517296263Sobrien/* vec_any_gt */
517396263Sobrien
517496263Sobrieninline int
517596263Sobrienvec_any_gt (vector signed char a1, vector unsigned char a2)
517696263Sobrien{
517796263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
517896263Sobrien}
517996263Sobrien
518096263Sobrieninline int
518196263Sobrienvec_any_gt (vector unsigned char a1, vector signed char a2)
518296263Sobrien{
518396263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
518496263Sobrien}
518596263Sobrien
518696263Sobrieninline int
518796263Sobrienvec_any_gt (vector unsigned char a1, vector unsigned char a2)
518896263Sobrien{
518996263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
519096263Sobrien}
519196263Sobrien
519296263Sobrieninline int
519396263Sobrienvec_any_gt (vector signed char a1, vector signed char a2)
519496263Sobrien{
519596263Sobrien  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) a1, (vector signed char) a2);
519696263Sobrien}
519796263Sobrien
519896263Sobrieninline int
519996263Sobrienvec_any_gt (vector signed short a1, vector unsigned short a2)
520096263Sobrien{
520196263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
520296263Sobrien}
520396263Sobrien
520496263Sobrieninline int
520596263Sobrienvec_any_gt (vector unsigned short a1, vector signed short a2)
520696263Sobrien{
520796263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
520896263Sobrien}
520996263Sobrien
521096263Sobrieninline int
521196263Sobrienvec_any_gt (vector unsigned short a1, vector unsigned short a2)
521296263Sobrien{
521396263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
521496263Sobrien}
521596263Sobrien
521696263Sobrieninline int
521796263Sobrienvec_any_gt (vector signed short a1, vector signed short a2)
521896263Sobrien{
521996263Sobrien  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) a1, (vector signed short) a2);
522096263Sobrien}
522196263Sobrien
522296263Sobrieninline int
522396263Sobrienvec_any_gt (vector signed int a1, vector unsigned int a2)
522496263Sobrien{
522596263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
522696263Sobrien}
522796263Sobrien
522896263Sobrieninline int
522996263Sobrienvec_any_gt (vector unsigned int a1, vector signed int a2)
523096263Sobrien{
523196263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
523296263Sobrien}
523396263Sobrien
523496263Sobrieninline int
523596263Sobrienvec_any_gt (vector unsigned int a1, vector unsigned int a2)
523696263Sobrien{
523796263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
523896263Sobrien}
523996263Sobrien
524096263Sobrieninline int
524196263Sobrienvec_any_gt (vector signed int a1, vector signed int a2)
524296263Sobrien{
524396263Sobrien  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) a1, (vector signed int) a2);
524496263Sobrien}
524596263Sobrien
524696263Sobrieninline int
524796263Sobrienvec_any_gt (vector float a1, vector float a2)
524896263Sobrien{
524996263Sobrien  return __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, a1, a2);
525096263Sobrien}
525196263Sobrien
525296263Sobrien/* vec_any_le */
525396263Sobrien
525496263Sobrieninline int
525596263Sobrienvec_any_le (vector signed char a1, vector unsigned char a2)
525696263Sobrien{
525796263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
525896263Sobrien}
525996263Sobrien
526096263Sobrieninline int
526196263Sobrienvec_any_le (vector unsigned char a1, vector signed char a2)
526296263Sobrien{
526396263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
526496263Sobrien}
526596263Sobrien
526696263Sobrieninline int
526796263Sobrienvec_any_le (vector unsigned char a1, vector unsigned char a2)
526896263Sobrien{
526996263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
527096263Sobrien}
527196263Sobrien
527296263Sobrieninline int
527396263Sobrienvec_any_le (vector signed char a1, vector signed char a2)
527496263Sobrien{
527596263Sobrien  return __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
527696263Sobrien}
527796263Sobrien
527896263Sobrieninline int
527996263Sobrienvec_any_le (vector signed short a1, vector unsigned short a2)
528096263Sobrien{
528196263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
528296263Sobrien}
528396263Sobrien
528496263Sobrieninline int
528596263Sobrienvec_any_le (vector unsigned short a1, vector signed short a2)
528696263Sobrien{
528796263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
528896263Sobrien}
528996263Sobrien
529096263Sobrieninline int
529196263Sobrienvec_any_le (vector unsigned short a1, vector unsigned short a2)
529296263Sobrien{
529396263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
529496263Sobrien}
529596263Sobrien
529696263Sobrieninline int
529796263Sobrienvec_any_le (vector signed short a1, vector signed short a2)
529896263Sobrien{
529996263Sobrien  return __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
530096263Sobrien}
530196263Sobrien
530296263Sobrieninline int
530396263Sobrienvec_any_le (vector signed int a1, vector unsigned int a2)
530496263Sobrien{
530596263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
530696263Sobrien}
530796263Sobrien
530896263Sobrieninline int
530996263Sobrienvec_any_le (vector unsigned int a1, vector signed int a2)
531096263Sobrien{
531196263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
531296263Sobrien}
531396263Sobrien
531496263Sobrieninline int
531596263Sobrienvec_any_le (vector unsigned int a1, vector unsigned int a2)
531696263Sobrien{
531796263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
531896263Sobrien}
531996263Sobrien
532096263Sobrieninline int
532196263Sobrienvec_any_le (vector signed int a1, vector signed int a2)
532296263Sobrien{
532396263Sobrien  return __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
532496263Sobrien}
532596263Sobrien
532696263Sobrieninline int
532796263Sobrienvec_any_le (vector float a1, vector float a2)
532896263Sobrien{
532996263Sobrien  return __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a2, a1);
533096263Sobrien}
533196263Sobrien
533296263Sobrien/* vec_any_lt */
533396263Sobrien
533496263Sobrieninline int
533596263Sobrienvec_any_lt (vector signed char a1, vector unsigned char a2)
533696263Sobrien{
533796263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
533896263Sobrien}
533996263Sobrien
534096263Sobrieninline int
534196263Sobrienvec_any_lt (vector unsigned char a1, vector signed char a2)
534296263Sobrien{
534396263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
534496263Sobrien}
534596263Sobrien
534696263Sobrieninline int
534796263Sobrienvec_any_lt (vector unsigned char a1, vector unsigned char a2)
534896263Sobrien{
534996263Sobrien  return __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
535096263Sobrien}
535196263Sobrien
535296263Sobrieninline int
535396263Sobrienvec_any_lt (vector signed char a1, vector signed char a2)
535496263Sobrien{
535596263Sobrien  return __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) a2, (vector signed char) a1);
535696263Sobrien}
535796263Sobrien
535896263Sobrieninline int
535996263Sobrienvec_any_lt (vector signed short a1, vector unsigned short a2)
536096263Sobrien{
536196263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
536296263Sobrien}
536396263Sobrien
536496263Sobrieninline int
536596263Sobrienvec_any_lt (vector unsigned short a1, vector signed short a2)
536696263Sobrien{
536796263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
536896263Sobrien}
536996263Sobrien
537096263Sobrieninline int
537196263Sobrienvec_any_lt (vector unsigned short a1, vector unsigned short a2)
537296263Sobrien{
537396263Sobrien  return __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
537496263Sobrien}
537596263Sobrien
537696263Sobrieninline int
537796263Sobrienvec_any_lt (vector signed short a1, vector signed short a2)
537896263Sobrien{
537996263Sobrien  return __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) a2, (vector signed short) a1);
538096263Sobrien}
538196263Sobrien
538296263Sobrieninline int
538396263Sobrienvec_any_lt (vector signed int a1, vector unsigned int a2)
538496263Sobrien{
538596263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
538696263Sobrien}
538796263Sobrien
538896263Sobrieninline int
538996263Sobrienvec_any_lt (vector unsigned int a1, vector signed int a2)
539096263Sobrien{
539196263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
539296263Sobrien}
539396263Sobrien
539496263Sobrieninline int
539596263Sobrienvec_any_lt (vector unsigned int a1, vector unsigned int a2)
539696263Sobrien{
539796263Sobrien  return __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
539896263Sobrien}
539996263Sobrien
540096263Sobrieninline int
540196263Sobrienvec_any_lt (vector signed int a1, vector signed int a2)
540296263Sobrien{
540396263Sobrien  return __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) a2, (vector signed int) a1);
540496263Sobrien}
540596263Sobrien
540696263Sobrieninline int
540796263Sobrienvec_any_lt (vector float a1, vector float a2)
540896263Sobrien{
540996263Sobrien  return __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, a2, a1);
541096263Sobrien}
541196263Sobrien
541296263Sobrien/* vec_any_nan */
541396263Sobrien
541496263Sobrieninline int
541596263Sobrienvec_any_nan (vector float a1)
541696263Sobrien{
541796263Sobrien  return __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a1);
541896263Sobrien}
541996263Sobrien
542096263Sobrien/* vec_any_ne */
542196263Sobrien
542296263Sobrieninline int
542396263Sobrienvec_any_ne (vector signed char a1, vector unsigned char a2)
542496263Sobrien{
542596263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
542696263Sobrien}
542796263Sobrien
542896263Sobrieninline int
542996263Sobrienvec_any_ne (vector signed char a1, vector signed char a2)
543096263Sobrien{
543196263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
543296263Sobrien}
543396263Sobrien
543496263Sobrieninline int
543596263Sobrienvec_any_ne (vector unsigned char a1, vector signed char a2)
543696263Sobrien{
543796263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
543896263Sobrien}
543996263Sobrien
544096263Sobrieninline int
544196263Sobrienvec_any_ne (vector unsigned char a1, vector unsigned char a2)
544296263Sobrien{
544396263Sobrien  return __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) a1, (vector signed char) a2);
544496263Sobrien}
544596263Sobrien
544696263Sobrieninline int
544796263Sobrienvec_any_ne (vector signed short a1, vector unsigned short a2)
544896263Sobrien{
544996263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
545096263Sobrien}
545196263Sobrien
545296263Sobrieninline int
545396263Sobrienvec_any_ne (vector signed short a1, vector signed short a2)
545496263Sobrien{
545596263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
545696263Sobrien}
545796263Sobrien
545896263Sobrieninline int
545996263Sobrienvec_any_ne (vector unsigned short a1, vector signed short a2)
546096263Sobrien{
546196263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
546296263Sobrien}
546396263Sobrien
546496263Sobrieninline int
546596263Sobrienvec_any_ne (vector unsigned short a1, vector unsigned short a2)
546696263Sobrien{
546796263Sobrien  return __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) a1, (vector signed short) a2);
546896263Sobrien}
546996263Sobrien
547096263Sobrieninline int
547196263Sobrienvec_any_ne (vector signed int a1, vector unsigned int a2)
547296263Sobrien{
547396263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
547496263Sobrien}
547596263Sobrien
547696263Sobrieninline int
547796263Sobrienvec_any_ne (vector signed int a1, vector signed int a2)
547896263Sobrien{
547996263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
548096263Sobrien}
548196263Sobrien
548296263Sobrieninline int
548396263Sobrienvec_any_ne (vector unsigned int a1, vector signed int a2)
548496263Sobrien{
548596263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
548696263Sobrien}
548796263Sobrien
548896263Sobrieninline int
548996263Sobrienvec_any_ne (vector unsigned int a1, vector unsigned int a2)
549096263Sobrien{
549196263Sobrien  return __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) a1, (vector signed int) a2);
549296263Sobrien}
549396263Sobrien
549496263Sobrieninline int
549596263Sobrienvec_any_ne (vector float a1, vector float a2)
549696263Sobrien{
549796263Sobrien  return __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a2);
549896263Sobrien}
549996263Sobrien
550096263Sobrien/* vec_any_nge */
550196263Sobrien
550296263Sobrieninline int
550396263Sobrienvec_any_nge (vector float a1, vector float a2)
550496263Sobrien{
550596263Sobrien  return __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a1, a2);
550696263Sobrien}
550796263Sobrien
550896263Sobrien/* vec_any_ngt */
550996263Sobrien
551096263Sobrieninline int
551196263Sobrienvec_any_ngt (vector float a1, vector float a2)
551296263Sobrien{
551396263Sobrien  return __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, a1, a2);
551496263Sobrien}
551596263Sobrien
551696263Sobrien/* vec_any_nle */
551796263Sobrien
551896263Sobrieninline int
551996263Sobrienvec_any_nle (vector float a1, vector float a2)
552096263Sobrien{
552196263Sobrien  return __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, a2, a1);
552296263Sobrien}
552396263Sobrien
552496263Sobrien/* vec_any_nlt */
552596263Sobrien
552696263Sobrieninline int
552796263Sobrienvec_any_nlt (vector float a1, vector float a2)
552896263Sobrien{
552996263Sobrien  return __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, a2, a1);
553096263Sobrien}
553196263Sobrien
553296263Sobrien/* vec_any_numeric */
553396263Sobrien
553496263Sobrieninline int
553596263Sobrienvec_any_numeric (vector float a1)
553696263Sobrien{
553796263Sobrien  return __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, a1, a1);
553896263Sobrien}
553996263Sobrien
554096263Sobrien/* vec_any_out */
554196263Sobrien
554296263Sobrieninline int
554396263Sobrienvec_any_out (vector float a1, vector float a2)
554496263Sobrien{
554596263Sobrien  return __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, a1, a2);
554696263Sobrien}
554796263Sobrien
554896263Sobrien/* vec_step */
554996263Sobrien
555096263Sobrientemplate<typename _Tp>
555196263Sobrienstruct __vec_step_help
555296263Sobrien{
555396263Sobrien  // All proper vector types will specialize _S_elem.
555496263Sobrien};
555596263Sobrien
555696263Sobrientemplate<>
555796263Sobrienstruct __vec_step_help<vector signed short>
555896263Sobrien{
555996263Sobrien  static const int _S_elem = 8;
556096263Sobrien};
556196263Sobrien
556296263Sobrientemplate<>
556396263Sobrienstruct __vec_step_help<vector unsigned short>
556496263Sobrien{
556596263Sobrien  static const int _S_elem = 8;
556696263Sobrien};
556796263Sobrien
556896263Sobrientemplate<>
556996263Sobrienstruct __vec_step_help<vector signed int>
557096263Sobrien{
557196263Sobrien  static const int _S_elem = 4;
557296263Sobrien};
557396263Sobrien
557496263Sobrientemplate<>
557596263Sobrienstruct __vec_step_help<vector unsigned int>
557696263Sobrien{
557796263Sobrien  static const int _S_elem = 4;
557896263Sobrien};
557996263Sobrien
558096263Sobrientemplate<>
558196263Sobrienstruct __vec_step_help<vector unsigned char>
558296263Sobrien{
558396263Sobrien  static const int _S_elem = 16;
558496263Sobrien};
558596263Sobrien
558696263Sobrientemplate<>
558796263Sobrienstruct __vec_step_help<vector signed char>
558896263Sobrien{
558996263Sobrien  static const int _S_elem = 16;
559096263Sobrien};
559196263Sobrien
559296263Sobrientemplate<>
559396263Sobrienstruct __vec_step_help<vector float>
559496263Sobrien{
559596263Sobrien  static const int _S_elem = 4;
559696263Sobrien};
559796263Sobrien
559896263Sobrien#define vec_step(t)  __vec_step_help<t>::_S_elem
559996263Sobrien
560090075Sobrien#else /* not C++ */
560190075Sobrien
560296263Sobrien/* "... and so I think no man in a century will suffer as greatly as
560396263Sobrien   you will."  */
560490075Sobrien
560596263Sobrien#define vec_abs(a) \
560696263Sobrien  __ch (__un_args_eq (vector signed char, (a)), \
560796263Sobrien        ((vector signed char) __builtin_altivec_abs_v16qi ((vector signed char) (a))), \
560896263Sobrien  __ch (__un_args_eq (vector signed short, (a)), \
560996263Sobrien        ((vector signed short) __builtin_altivec_abs_v8hi ((vector signed short) (a))), \
561096263Sobrien  __ch (__un_args_eq (vector signed int, (a)), \
561196263Sobrien        ((vector signed int) __builtin_altivec_abs_v4si ((vector signed int) (a))), \
561296263Sobrien  __ch (__un_args_eq (vector float, (a)), \
561396263Sobrien        ((vector float) __builtin_altivec_abs_v4sf ((vector float) (a))), \
561496263Sobrien  __altivec_link_error_invalid_argument ()))))
561596263Sobrien
561696263Sobrien#define vec_abss(a) \
561796263Sobrien  __ch (__un_args_eq (vector signed char, (a)), \
561896263Sobrien        ((vector signed char) __builtin_altivec_abss_v16qi ((vector signed char) (a))), \
561996263Sobrien  __ch (__un_args_eq (vector signed short, (a)), \
562096263Sobrien        ((vector signed short) __builtin_altivec_abss_v8hi ((vector signed short) (a))), \
562196263Sobrien  __ch (__un_args_eq (vector signed int, (a)), \
562296263Sobrien        ((vector signed int) __builtin_altivec_abss_v4si ((vector signed int) (a))), \
562396263Sobrien  __altivec_link_error_invalid_argument ())))
562496263Sobrien
562596263Sobrien#define vec_step(t) \
562696263Sobrien  __ch (__builtin_types_compatible_p (t, vector signed int), 4,		\
562796263Sobrien  __ch (__builtin_types_compatible_p (t, vector unsigned int), 4,	\
562896263Sobrien  __ch (__builtin_types_compatible_p (t, vector signed short), 8,	\
562996263Sobrien  __ch (__builtin_types_compatible_p (t, vector unsigned short), 8,	\
563096263Sobrien  __ch (__builtin_types_compatible_p (t, vector signed char), 16,	\
563196263Sobrien  __ch (__builtin_types_compatible_p (t, vector unsigned char), 16,	\
563296263Sobrien  __ch (__builtin_types_compatible_p (t, vector float), 4,		\
563396263Sobrien  __altivec_link_error_invalid_argument ())))))))
563496263Sobrien
563596263Sobrien#define vec_vaddubm(a1, a2) \
563696263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
563796263Sobrien      ((vector signed char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
563896263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
563996263Sobrien      ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
564096263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
564196263Sobrien      ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
564296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
564396263Sobrien      ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
564496263Sobrien  __altivec_link_error_invalid_argument ()))))
564596263Sobrien
564696263Sobrien#define vec_vadduhm(a1, a2) \
564796263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
564896263Sobrien      ((vector signed short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
564996263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
565096263Sobrien      ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
565196263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
565296263Sobrien      ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
565396263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
565496263Sobrien      ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
565596263Sobrien  __altivec_link_error_invalid_argument ()))))
565696263Sobrien
565796263Sobrien#define vec_vadduwm(a1, a2) \
565896263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
565996263Sobrien      ((vector signed int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
566096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
566196263Sobrien      ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
566296263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
566396263Sobrien      ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
566496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
566596263Sobrien      ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
566696263Sobrien  __altivec_link_error_invalid_argument ()))))
566796263Sobrien
566896263Sobrien#define vec_vaddfp(a1, a2) \
566996263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
567096263Sobrien      ((vector float) __builtin_altivec_vaddfp ((vector float) (a1), (vector float) (a2))), \
567196263Sobrien  __altivec_link_error_invalid_argument ())
567296263Sobrien
567390075Sobrien#define vec_add(a1, a2) \
567496263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
567596263Sobrien      ((vector signed char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
567696263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
567796263Sobrien      ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
567896263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
567996263Sobrien      ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
568096263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
568196263Sobrien      ((vector unsigned char) __builtin_altivec_vaddubm ((vector signed char) (a1), (vector signed char) (a2))), \
568296263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
568396263Sobrien      ((vector signed short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
568496263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
568596263Sobrien      ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
568696263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
568796263Sobrien      ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
568896263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
568996263Sobrien      ((vector unsigned short) __builtin_altivec_vadduhm ((vector signed short) (a1), (vector signed short) (a2))), \
569096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
569196263Sobrien      ((vector signed int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
569296263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
569396263Sobrien      ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
569496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
569596263Sobrien      ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
569696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
569796263Sobrien      ((vector unsigned int) __builtin_altivec_vadduwm ((vector signed int) (a1), (vector signed int) (a2))), \
569896263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
569996263Sobrien      ((vector float) __builtin_altivec_vaddfp ((vector float) (a1), (vector float) (a2))), \
570090075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
570190075Sobrien
570296263Sobrien#define vec_addc(a1, a2) \
570396263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
570496263Sobrien      ((vector unsigned int) __builtin_altivec_vaddcuw ((vector signed int) (a1), (vector signed int) (a2))), \
570596263Sobrien    __altivec_link_error_invalid_argument ())
570690075Sobrien
570790075Sobrien#define vec_adds(a1, a2) \
570896263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
570996263Sobrien      ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
571096263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
571196263Sobrien      ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
571296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
571396263Sobrien      ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
571496263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
571596263Sobrien      ((vector signed char) __builtin_altivec_vaddsbs ((vector signed char) (a1), (vector signed char) (a2))), \
571696263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
571796263Sobrien      ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
571896263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
571996263Sobrien      ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
572096263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
572196263Sobrien      ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
572296263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
572396263Sobrien      ((vector signed short) __builtin_altivec_vaddshs ((vector signed short) (a1), (vector signed short) (a2))), \
572496263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
572596263Sobrien      ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
572696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
572796263Sobrien      ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
572896263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
572996263Sobrien      ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
573096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
573196263Sobrien      ((vector signed int) __builtin_altivec_vaddsws ((vector signed int) (a1), (vector signed int) (a2))), \
573290075Sobrien    __altivec_link_error_invalid_argument ()))))))))))))
573390075Sobrien
573496263Sobrien#define vec_vaddsws(a1, a2) \
573596263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
573696263Sobrien      ((vector signed int) __builtin_altivec_vaddsws ((vector signed int) (a1), (vector signed int) (a2))), \
573796263Sobrien  __altivec_link_error_invalid_argument ())
573896263Sobrien
573996263Sobrien#define vec_vadduws(a1, a2) \
574096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
574196263Sobrien      ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
574296263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
574396263Sobrien      ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
574496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
574596263Sobrien      ((vector unsigned int) __builtin_altivec_vadduws ((vector signed int) (a1), (vector signed int) (a2))), \
574696263Sobrien  __altivec_link_error_invalid_argument ())))
574796263Sobrien
574896263Sobrien#define vec_vaddshs(a1, a2) \
574996263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
575096263Sobrien      ((vector signed short) __builtin_altivec_vaddshs ((vector signed short) (a1), (vector signed short) (a2))), \
575196263Sobrien  __altivec_link_error_invalid_argument ())
575296263Sobrien
575396263Sobrien#define vec_vadduhs(a1, a2) \
575496263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
575596263Sobrien      ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
575696263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
575796263Sobrien      ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
575896263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
575996263Sobrien      ((vector unsigned short) __builtin_altivec_vadduhs ((vector signed short) (a1), (vector signed short) (a2))), \
576096263Sobrien  __altivec_link_error_invalid_argument ())))
576196263Sobrien
576296263Sobrien#define vec_vaddsbs(a1, a2) \
576396263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
576496263Sobrien      ((vector signed char) __builtin_altivec_vaddsbs ((vector signed char) (a1), (vector signed char) (a2))), \
576596263Sobrien  __altivec_link_error_invalid_argument ())
576696263Sobrien
576796263Sobrien#define vec_vaddubs(a1, a2) \
576896263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
576996263Sobrien      ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
577096263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
577196263Sobrien      ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
577296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
577396263Sobrien      ((vector unsigned char) __builtin_altivec_vaddubs ((vector signed char) (a1), (vector signed char) (a2))), \
577496263Sobrien  __altivec_link_error_invalid_argument ())))
577596263Sobrien
577690075Sobrien#define vec_and(a1, a2) \
577796263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
577896263Sobrien      ((vector float) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
577996263Sobrien__ch (__bin_args_eq (vector float, (a1), vector signed int, (a2)), \
578096263Sobrien      ((vector float) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
578196263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector float, (a2)), \
578296263Sobrien      ((vector float) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
578396263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
578496263Sobrien      ((vector signed int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
578596263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
578696263Sobrien      ((vector unsigned int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
578796263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
578896263Sobrien      ((vector unsigned int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
578996263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
579096263Sobrien      ((vector unsigned int) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
579196263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
579296263Sobrien      ((vector signed short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
579396263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
579496263Sobrien      ((vector unsigned short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
579596263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
579696263Sobrien      ((vector unsigned short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
579796263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
579896263Sobrien      ((vector unsigned short) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
579996263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
580096263Sobrien      ((vector signed char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
580196263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
580296263Sobrien      ((vector unsigned char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
580396263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
580496263Sobrien      ((vector unsigned char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
580596263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
580696263Sobrien      ((vector unsigned char) __builtin_altivec_vand ((vector signed int) (a1), (vector signed int) (a2))), \
580790075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))))
580890075Sobrien
580990075Sobrien#define vec_andc(a1, a2) \
581096263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
581196263Sobrien      ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
581296263Sobrien__ch (__bin_args_eq (vector float, (a1), vector unsigned int, (a2)), \
581396263Sobrien      ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
581496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector float, (a2)), \
581596263Sobrien      ((vector float) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
581696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
581796263Sobrien      ((vector unsigned int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
581896263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
581996263Sobrien      ((vector unsigned int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
582096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
582196263Sobrien      ((vector signed int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
582296263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
582396263Sobrien      ((vector unsigned int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
582496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
582596263Sobrien      ((vector unsigned int) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
582696263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
582796263Sobrien      ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
582896263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
582996263Sobrien      ((vector signed short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
583096263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
583196263Sobrien      ((vector signed short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
583296263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
583396263Sobrien      ((vector signed short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
583496263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
583596263Sobrien      ((vector signed short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
583696263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
583796263Sobrien      ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
583896263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
583996263Sobrien      ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
584096263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
584196263Sobrien      ((vector unsigned short) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
584296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
584396263Sobrien      ((vector unsigned char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
584496263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
584596263Sobrien      ((vector unsigned char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
584696263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
584796263Sobrien      ((vector unsigned char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
584896263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
584996263Sobrien      ((vector signed char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
585096263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
585196263Sobrien      ((vector signed char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
585296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
585396263Sobrien      ((vector signed char) __builtin_altivec_vandc ((vector signed int) (a1), (vector signed int) (a2))), \
585496263Sobrien    __altivec_link_error_invalid_argument ()))))))))))))))))))))))
585590075Sobrien
585690075Sobrien#define vec_avg(a1, a2) \
585796263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
585896263Sobrien      ((vector unsigned char) __builtin_altivec_vavgub ((vector signed char) (a1), (vector signed char) (a2))), \
585996263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
586096263Sobrien      ((vector signed char) __builtin_altivec_vavgsb ((vector signed char) (a1), (vector signed char) (a2))), \
586196263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
586296263Sobrien      ((vector unsigned short) __builtin_altivec_vavguh ((vector signed short) (a1), (vector signed short) (a2))), \
586396263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
586496263Sobrien      ((vector signed short) __builtin_altivec_vavgsh ((vector signed short) (a1), (vector signed short) (a2))), \
586596263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
586696263Sobrien      ((vector unsigned int) __builtin_altivec_vavguw ((vector signed int) (a1), (vector signed int) (a2))), \
586796263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
586896263Sobrien      ((vector signed int) __builtin_altivec_vavgsw ((vector signed int) (a1), (vector signed int) (a2))), \
586990075Sobrien    __altivec_link_error_invalid_argument ()))))))
587090075Sobrien
587196263Sobrien#define vec_vavgsw(a1, a2) \
587296263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
587396263Sobrien      ((vector signed int) __builtin_altivec_vavgsw ((vector signed int) (a1), (vector signed int) (a2))), \
587496263Sobrien  __altivec_link_error_invalid_argument ())
587590075Sobrien
587696263Sobrien#define vec_vavguw(a1, a2) \
587796263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
587896263Sobrien      ((vector unsigned int) __builtin_altivec_vavguw ((vector signed int) (a1), (vector signed int) (a2))), \
587996263Sobrien  __altivec_link_error_invalid_argument ())
588090075Sobrien
588196263Sobrien#define vec_vavgsh(a1, a2) \
588296263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
588396263Sobrien      ((vector signed short) __builtin_altivec_vavgsh ((vector signed short) (a1), (vector signed short) (a2))), \
588496263Sobrien  __altivec_link_error_invalid_argument ())
588596263Sobrien
588696263Sobrien#define vec_vavguh(a1, a2) \
588796263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
588896263Sobrien      ((vector unsigned short) __builtin_altivec_vavguh ((vector signed short) (a1), (vector signed short) (a2))), \
588996263Sobrien  __altivec_link_error_invalid_argument ())
589096263Sobrien
589196263Sobrien#define vec_vavgsb(a1, a2) \
589296263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
589396263Sobrien      ((vector signed char) __builtin_altivec_vavgsb ((vector signed char) (a1), (vector signed char) (a2))), \
589496263Sobrien  __altivec_link_error_invalid_argument ())
589596263Sobrien
589696263Sobrien#define vec_vavgub(a1, a2) \
589796263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
589896263Sobrien      ((vector unsigned char) __builtin_altivec_vavgub ((vector signed char) (a1), (vector signed char) (a2))), \
589996263Sobrien  __altivec_link_error_invalid_argument ())
590096263Sobrien
590196263Sobrien#define vec_ceil(a1) __builtin_altivec_vrfip ((a1))
590296263Sobrien
590396263Sobrien#define vec_cmpb(a1, a2) __builtin_altivec_vcmpbfp ((a1), (a2))
590496263Sobrien
590590075Sobrien#define vec_cmpeq(a1, a2) \
590696263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
590796263Sobrien      ((vector signed char) __builtin_altivec_vcmpequb ((vector signed char) (a1), (vector signed char) (a2))), \
590896263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
590996263Sobrien      ((vector signed char) __builtin_altivec_vcmpequb ((vector signed char) (a1), (vector signed char) (a2))), \
591096263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
591196263Sobrien      ((vector signed short) __builtin_altivec_vcmpequh ((vector signed short) (a1), (vector signed short) (a2))), \
591296263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
591396263Sobrien      ((vector signed short) __builtin_altivec_vcmpequh ((vector signed short) (a1), (vector signed short) (a2))), \
591496263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
591596263Sobrien      ((vector signed int) __builtin_altivec_vcmpequw ((vector signed int) (a1), (vector signed int) (a2))), \
591696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
591796263Sobrien      ((vector signed int) __builtin_altivec_vcmpequw ((vector signed int) (a1), (vector signed int) (a2))), \
591896263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
591996263Sobrien      ((vector signed int) __builtin_altivec_vcmpeqfp ((vector float) (a1), (vector float) (a2))), \
592090075Sobrien    __altivec_link_error_invalid_argument ())))))))
592190075Sobrien
592296263Sobrien#define vec_vcmpeqfp(a1, a2) \
592396263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
592496263Sobrien      ((vector signed int) __builtin_altivec_vcmpeqfp ((vector float) (a1), (vector float) (a2))), \
592596263Sobrien  __altivec_link_error_invalid_argument ())
592690075Sobrien
592796263Sobrien#define vec_vcmpequw(a1, a2) \
592896263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
592996263Sobrien      ((vector signed int) __builtin_altivec_vcmpequw ((vector signed int) (a1), (vector signed int) (a2))), \
593096263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
593196263Sobrien      ((vector signed int) __builtin_altivec_vcmpequw ((vector signed int) (a1), (vector signed int) (a2))), \
593296263Sobrien  __altivec_link_error_invalid_argument ()))
593396263Sobrien
593496263Sobrien#define vec_vcmpequh(a1, a2) \
593596263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
593696263Sobrien      ((vector signed short) __builtin_altivec_vcmpequh ((vector signed short) (a1), (vector signed short) (a2))), \
593796263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
593896263Sobrien      ((vector signed short) __builtin_altivec_vcmpequh ((vector signed short) (a1), (vector signed short) (a2))), \
593996263Sobrien  __altivec_link_error_invalid_argument ()))
594096263Sobrien
594196263Sobrien#define vec_vcmpequb(a1, a2) \
594296263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
594396263Sobrien      ((vector signed char) __builtin_altivec_vcmpequb ((vector signed char) (a1), (vector signed char) (a2))), \
594496263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
594596263Sobrien      ((vector signed char) __builtin_altivec_vcmpequb ((vector signed char) (a1), (vector signed char) (a2))), \
594696263Sobrien  __altivec_link_error_invalid_argument ()))
594796263Sobrien
594896263Sobrien#define vec_cmpge(a1, a2) (vector signed int) __builtin_altivec_vcmpgefp ((a1), (a2))
594996263Sobrien
595090075Sobrien#define vec_cmpgt(a1, a2) \
595196263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
595296263Sobrien      ((vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) (a1), (vector signed char) (a2))), \
595396263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
595496263Sobrien      ((vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) (a1), (vector signed char) (a2))), \
595596263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
595696263Sobrien      ((vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) (a1), (vector signed short) (a2))), \
595796263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
595896263Sobrien      ((vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) (a1), (vector signed short) (a2))), \
595996263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
596096263Sobrien      ((vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) (a1), (vector signed int) (a2))), \
596196263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
596296263Sobrien      ((vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) (a1), (vector signed int) (a2))), \
596396263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
596496263Sobrien      ((vector signed int) __builtin_altivec_vcmpgtfp ((vector float) (a1), (vector float) (a2))), \
596590075Sobrien    __altivec_link_error_invalid_argument ())))))))
596690075Sobrien
596796263Sobrien#define vec_vcmpgtfp(a1, a2) \
596896263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
596996263Sobrien      ((vector signed int) __builtin_altivec_vcmpgtfp ((vector float) (a1), (vector float) (a2))), \
597096263Sobrien  __altivec_link_error_invalid_argument ())
597190075Sobrien
597296263Sobrien#define vec_vcmpgtsw(a1, a2) \
597396263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
597496263Sobrien      ((vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) (a1), (vector signed int) (a2))), \
597596263Sobrien  __altivec_link_error_invalid_argument ())
597696263Sobrien
597796263Sobrien#define vec_vcmpgtuw(a1, a2) \
597896263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
597996263Sobrien      ((vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) (a1), (vector signed int) (a2))), \
598096263Sobrien  __altivec_link_error_invalid_argument ())
598196263Sobrien
598296263Sobrien#define vec_vcmpgtsh(a1, a2) \
598396263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
598496263Sobrien      ((vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) (a1), (vector signed short) (a2))), \
598596263Sobrien  __altivec_link_error_invalid_argument ())
598696263Sobrien
598796263Sobrien#define vec_vcmpgtuh(a1, a2) \
598896263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
598996263Sobrien      ((vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) (a1), (vector signed short) (a2))), \
599096263Sobrien  __altivec_link_error_invalid_argument ())
599196263Sobrien
599296263Sobrien#define vec_vcmpgtsb(a1, a2) \
599396263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
599496263Sobrien      ((vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) (a1), (vector signed char) (a2))), \
599596263Sobrien  __altivec_link_error_invalid_argument ())
599696263Sobrien
599796263Sobrien#define vec_vcmpgtub(a1, a2) \
599896263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
599996263Sobrien      ((vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) (a1), (vector signed char) (a2))), \
600096263Sobrien  __altivec_link_error_invalid_argument ())
600196263Sobrien
600296263Sobrien#define vec_cmple(a1, a2) __builtin_altivec_vcmpgefp ((a1), (a2))
600396263Sobrien
600490075Sobrien#define vec_cmplt(a1, a2) \
600596263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
600696263Sobrien      ((vector signed char) __builtin_altivec_vcmpgtub ((vector signed char) (a1), (vector signed char) (a2))), \
600796263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
600896263Sobrien      ((vector signed char) __builtin_altivec_vcmpgtsb ((vector signed char) (a1), (vector signed char) (a2))), \
600996263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
601096263Sobrien      ((vector signed short) __builtin_altivec_vcmpgtuh ((vector signed short) (a1), (vector signed short) (a2))), \
601196263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
601296263Sobrien      ((vector signed short) __builtin_altivec_vcmpgtsh ((vector signed short) (a1), (vector signed short) (a2))), \
601396263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
601496263Sobrien      ((vector signed int) __builtin_altivec_vcmpgtuw ((vector signed int) (a1), (vector signed int) (a2))), \
601596263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
601696263Sobrien      ((vector signed int) __builtin_altivec_vcmpgtsw ((vector signed int) (a1), (vector signed int) (a2))), \
601796263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
601896263Sobrien      ((vector signed int) __builtin_altivec_vcmpgtfp ((vector float) (a1), (vector float) (a2))), \
601990075Sobrien    __altivec_link_error_invalid_argument ())))))))
602090075Sobrien
602190075Sobrien#define vec_ctf(a1, a2) \
602296263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), int, (a2)), \
602396263Sobrien      ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const char) (a2))), \
602496263Sobrien__ch (__bin_args_eq (vector signed int, (a1), int, (a2)), \
602596263Sobrien      ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const char) (a2))), \
602690075Sobrien    __altivec_link_error_invalid_argument ()))
602790075Sobrien
602896263Sobrien#define vec_vcfsx(a1, a2) \
602996263Sobrien__ch (__bin_args_eq (vector signed int, (a1), int, (a2)), \
603096263Sobrien      ((vector float) __builtin_altivec_vcfsx ((vector signed int) (a1), (const char) (a2))), \
603196263Sobrien  __altivec_link_error_invalid_argument ())
603290075Sobrien
603396263Sobrien#define vec_vcfux(a1, a2) \
603496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), int, (a2)), \
603596263Sobrien      ((vector float) __builtin_altivec_vcfux ((vector signed int) (a1), (const char) (a2))), \
603696263Sobrien  __altivec_link_error_invalid_argument ())
603790075Sobrien
603896263Sobrien#define vec_cts(a1, a2) __builtin_altivec_vctsxs ((a1), (a2))
603990075Sobrien
604096263Sobrien#define vec_ctu(a1, a2) (vector unsigned int) __builtin_altivec_vctuxs ((a1), (a2))
604196263Sobrien
604296263Sobrien#define vec_dss(a1) __builtin_altivec_dss ((a1))
604396263Sobrien
604490075Sobrien#define vec_dssall() __builtin_altivec_dssall ()
604590075Sobrien
604696263Sobrien#define vec_dst(a1, a2, a3) __builtin_altivec_dst ((a1), (a2), (a3))
604790075Sobrien
604896263Sobrien#define vec_dstst(a1, a2, a3) __builtin_altivec_dstst ((a1), (a2), (a3))
604990075Sobrien
605096263Sobrien#define vec_dststt(a1, a2, a3) __builtin_altivec_dststt ((a1), (a2), (a3))
605190075Sobrien
605296263Sobrien#define vec_dstt(a1, a2, a3) __builtin_altivec_dstt ((a1), (a2), (a3))
605390075Sobrien
605496263Sobrien#define vec_expte(a1) __builtin_altivec_vexptefp ((a1))
605590075Sobrien
605690075Sobrien#define vec_floor(a1) __builtin_altivec_vrfim (a1)
605790075Sobrien
605890075Sobrien#define vec_ld(a, b) \
605996263Sobrien__ch (__un_args_eq (vector unsigned char *, (b)), \
606096263Sobrien      ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \
606196263Sobrien__ch (__un_args_eq (vector unsigned char [], (b)), \
606296263Sobrien      ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \
606396263Sobrien__ch (__un_args_eq (unsigned char *, (b)), \
606496263Sobrien      ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \
606596263Sobrien__ch (__un_args_eq (unsigned char [], (b)), \
606696263Sobrien      ((vector unsigned char) __builtin_altivec_lvx ((a), (b))), \
606796263Sobrien__ch (__un_args_eq (vector signed char *, (b)), \
606896263Sobrien      ((vector signed char) __builtin_altivec_lvx ((a), (b))), \
606996263Sobrien__ch (__un_args_eq (vector signed char [], (b)), \
607096263Sobrien      ((vector signed char) __builtin_altivec_lvx ((a), (b))), \
607196263Sobrien__ch (__un_args_eq (signed char *, (b)), \
607296263Sobrien      ((vector signed char) __builtin_altivec_lvx ((a), (b))), \
607396263Sobrien__ch (__un_args_eq (signed char [], (b)), \
607496263Sobrien      ((vector signed char) __builtin_altivec_lvx ((a), (b))), \
607596263Sobrien__ch (__un_args_eq (vector unsigned short *, (b)), \
607696263Sobrien      ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \
607796263Sobrien__ch (__un_args_eq (vector unsigned short [], (b)), \
607896263Sobrien      ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \
607996263Sobrien__ch (__un_args_eq (unsigned short *, (b)), \
608096263Sobrien      ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \
608196263Sobrien__ch (__un_args_eq (unsigned short [], (b)), \
608296263Sobrien      ((vector unsigned short) __builtin_altivec_lvx ((a), (b))), \
608396263Sobrien__ch (__un_args_eq (vector signed short *, (b)), \
608496263Sobrien      ((vector signed short) __builtin_altivec_lvx ((a), (b))), \
608596263Sobrien__ch (__un_args_eq (vector signed short [], (b)), \
608696263Sobrien      ((vector signed short) __builtin_altivec_lvx ((a), (b))), \
608796263Sobrien__ch (__un_args_eq (signed short *, (b)), \
608896263Sobrien      ((vector signed short) __builtin_altivec_lvx ((a), (b))), \
608996263Sobrien__ch (__un_args_eq (signed short [], (b)), \
609096263Sobrien      ((vector signed short) __builtin_altivec_lvx ((a), (b))), \
609196263Sobrien__ch (__un_args_eq (vector unsigned int *, (b)), \
609296263Sobrien      ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
609396263Sobrien__ch (__un_args_eq (vector unsigned int [], (b)), \
609496263Sobrien      ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
609596263Sobrien__ch (__un_args_eq (unsigned int *, (b)), \
609696263Sobrien      ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
609796263Sobrien__ch (__un_args_eq (unsigned int [], (b)), \
609896263Sobrien      ((vector unsigned int) __builtin_altivec_lvx ((a), (b))), \
609996263Sobrien__ch (__un_args_eq (vector signed int *, (b)), \
610096263Sobrien      ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
610196263Sobrien__ch (__un_args_eq (vector signed int [], (b)), \
610296263Sobrien      ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
610396263Sobrien__ch (__un_args_eq (signed int *, (b)), \
610496263Sobrien      ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
610596263Sobrien__ch (__un_args_eq (signed int [], (b)), \
610696263Sobrien      ((vector signed int) __builtin_altivec_lvx ((a), (b))), \
610796263Sobrien__ch (__un_args_eq (vector float *, (b)), \
610896263Sobrien      ((vector float) __builtin_altivec_lvx ((a), (b))), \
610996263Sobrien__ch (__un_args_eq (vector float [], (b)), \
611096263Sobrien      ((vector float) __builtin_altivec_lvx ((a), (b))), \
611196263Sobrien__ch (__un_args_eq (float *, (b)), \
611296263Sobrien      ((vector float) __builtin_altivec_lvx ((a), (b))), \
611396263Sobrien__ch (__un_args_eq (float [], (b)), \
611496263Sobrien      ((vector float) __builtin_altivec_lvx ((a), (b))), \
611596263Sobrien__altivec_link_error_invalid_argument ()))))))))))))))))))))))))))))
611696263Sobrien
611796263Sobrien#define vec_lde(a, b) \
611896263Sobrien__ch (__un_args_eq (unsigned char *, (b)), \
611996263Sobrien      ((vector unsigned char) __builtin_altivec_lvebx ((a), (b))), \
612096263Sobrien__ch (__un_args_eq (unsigned char [], (b)), \
612196263Sobrien      ((vector unsigned char) __builtin_altivec_lvebx ((a), (b))), \
612296263Sobrien__ch (__un_args_eq (signed char *, (b)), \
612396263Sobrien      ((vector signed char) __builtin_altivec_lvebx ((a), (b))), \
612496263Sobrien__ch (__un_args_eq (signed char [], (b)), \
612596263Sobrien      ((vector signed char) __builtin_altivec_lvebx ((a), (b))), \
612696263Sobrien__ch (__un_args_eq (unsigned short *, (b)), \
612796263Sobrien      ((vector unsigned short) __builtin_altivec_lvehx ((a), (b))), \
612896263Sobrien__ch (__un_args_eq (unsigned short [], (b)), \
612996263Sobrien      ((vector unsigned short) __builtin_altivec_lvehx ((a), (b))), \
613096263Sobrien__ch (__un_args_eq (signed short *, (b)), \
613196263Sobrien      ((vector signed short) __builtin_altivec_lvehx ((a), (b))), \
613296263Sobrien__ch (__un_args_eq (signed short [], (b)), \
613396263Sobrien      ((vector signed short) __builtin_altivec_lvehx ((a), (b))), \
613496263Sobrien__ch (__un_args_eq (unsigned int *, (b)), \
613596263Sobrien      ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \
613696263Sobrien__ch (__un_args_eq (unsigned int [], (b)), \
613796263Sobrien      ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \
613896263Sobrien__ch (__un_args_eq (signed int *, (b)), \
613996263Sobrien      ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \
614096263Sobrien__ch (__un_args_eq (signed int [], (b)), \
614196263Sobrien      ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \
614296263Sobrien__ch (__un_args_eq (float *, (b)), \
614396263Sobrien      ((vector float) __builtin_altivec_lvewx ((a), (b))), \
614496263Sobrien__ch (__un_args_eq (float [], (b)), \
614596263Sobrien      ((vector float) __builtin_altivec_lvewx ((a), (b))), \
614690075Sobrien__altivec_link_error_invalid_argument ()))))))))))))))
614790075Sobrien
614896263Sobrien#define vec_lvewx(a, b) \
614996263Sobrien__ch (__un_args_eq (unsigned int *, (b)), \
615096263Sobrien      ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \
615196263Sobrien__ch (__un_args_eq (unsigned int [], (b)), \
615296263Sobrien      ((vector unsigned int) __builtin_altivec_lvewx ((a), (b))), \
615396263Sobrien__ch (__un_args_eq (signed int *, (b)), \
615496263Sobrien      ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \
615596263Sobrien__ch (__un_args_eq (signed int [], (b)), \
615696263Sobrien      ((vector signed int) __builtin_altivec_lvewx ((a), (b))), \
615796263Sobrien__ch (__un_args_eq (float *, (b)), \
615896263Sobrien      ((vector float) __builtin_altivec_lvewx ((a), (b))), \
615996263Sobrien__ch (__un_args_eq (float [], (b)), \
616096263Sobrien      ((vector float) __builtin_altivec_lvewx ((a), (b))), \
616190075Sobrien__altivec_link_error_invalid_argument ()))))))
616290075Sobrien
616396263Sobrien#define vec_lvehx(a, b) \
616496263Sobrien__ch (__un_args_eq (unsigned short *, (b)), \
616596263Sobrien      ((vector unsigned short) __builtin_altivec_lvehx ((a), (b))), \
616696263Sobrien__ch (__un_args_eq (unsigned short [], (b)), \
616796263Sobrien      ((vector unsigned short) __builtin_altivec_lvehx ((a), (b))), \
616896263Sobrien__ch (__un_args_eq (signed short *, (b)), \
616996263Sobrien      ((vector signed short) __builtin_altivec_lvehx ((a), (b))), \
617096263Sobrien__ch (__un_args_eq (signed short [], (b)), \
617196263Sobrien      ((vector signed short) __builtin_altivec_lvehx ((a), (b))), \
617296263Sobrien__altivec_link_error_invalid_argument ()))))
617396263Sobrien
617496263Sobrien#define vec_lvebx(a, b) \
617596263Sobrien__ch (__un_args_eq (unsigned char *, (b)), \
617696263Sobrien      ((vector unsigned char) __builtin_altivec_lvebx ((a), (b))), \
617796263Sobrien__ch (__un_args_eq (unsigned char [], (b)), \
617896263Sobrien      ((vector unsigned char) __builtin_altivec_lvebx ((a), (b))), \
617996263Sobrien__ch (__un_args_eq (signed char *, (b)), \
618096263Sobrien      ((vector signed char) __builtin_altivec_lvebx ((a), (b))), \
618196263Sobrien__ch (__un_args_eq (signed char [], (b)), \
618296263Sobrien      ((vector signed char) __builtin_altivec_lvebx ((a), (b))), \
618396263Sobrien__altivec_link_error_invalid_argument ()))))
618496263Sobrien
618590075Sobrien#define vec_ldl(a, b) \
618696263Sobrien__ch (__un_args_eq (vector unsigned char *, (b)), \
618796263Sobrien      ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \
618896263Sobrien__ch (__un_args_eq (vector unsigned char [], (b)), \
618996263Sobrien      ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \
619096263Sobrien__ch (__un_args_eq (unsigned char *, (b)), \
619196263Sobrien      ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \
619296263Sobrien__ch (__un_args_eq (unsigned char [], (b)), \
619396263Sobrien      ((vector unsigned char) __builtin_altivec_lvxl ((a), (b))), \
619496263Sobrien__ch (__un_args_eq (vector signed char *, (b)), \
619596263Sobrien      ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \
619696263Sobrien__ch (__un_args_eq (vector signed char [], (b)), \
619796263Sobrien      ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \
619896263Sobrien__ch (__un_args_eq (signed char *, (b)), \
619996263Sobrien      ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \
620096263Sobrien__ch (__un_args_eq (signed char [], (b)), \
620196263Sobrien      ((vector signed char) __builtin_altivec_lvxl ((a), (b))), \
620296263Sobrien__ch (__un_args_eq (vector unsigned short *, (b)), \
620396263Sobrien      ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \
620496263Sobrien__ch (__un_args_eq (vector unsigned short [], (b)), \
620596263Sobrien      ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \
620696263Sobrien__ch (__un_args_eq (unsigned short *, (b)), \
620796263Sobrien      ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \
620896263Sobrien__ch (__un_args_eq (unsigned short [], (b)), \
620996263Sobrien      ((vector unsigned short) __builtin_altivec_lvxl ((a), (b))), \
621096263Sobrien__ch (__un_args_eq (vector signed short *, (b)), \
621196263Sobrien      ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \
621296263Sobrien__ch (__un_args_eq (vector signed short [], (b)), \
621396263Sobrien      ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \
621496263Sobrien__ch (__un_args_eq (signed short *, (b)), \
621596263Sobrien      ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \
621696263Sobrien__ch (__un_args_eq (signed short [], (b)), \
621796263Sobrien      ((vector signed short) __builtin_altivec_lvxl ((a), (b))), \
621896263Sobrien__ch (__un_args_eq (vector unsigned int *, (b)), \
621996263Sobrien      ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
622096263Sobrien__ch (__un_args_eq (vector unsigned int [], (b)), \
622196263Sobrien      ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
622296263Sobrien__ch (__un_args_eq (unsigned int *, (b)), \
622396263Sobrien      ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
622496263Sobrien__ch (__un_args_eq (unsigned int [], (b)), \
622596263Sobrien      ((vector unsigned int) __builtin_altivec_lvxl ((a), (b))), \
622696263Sobrien__ch (__un_args_eq (vector signed int *, (b)), \
622796263Sobrien      ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
622896263Sobrien__ch (__un_args_eq (vector signed int [], (b)), \
622996263Sobrien      ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
623096263Sobrien__ch (__un_args_eq (signed int *, (b)), \
623196263Sobrien      ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
623296263Sobrien__ch (__un_args_eq (signed int [], (b)), \
623396263Sobrien      ((vector signed int) __builtin_altivec_lvxl ((a), (b))), \
623496263Sobrien__ch (__un_args_eq (vector float *, (b)), \
623596263Sobrien      ((vector float) __builtin_altivec_lvxl ((a), (b))), \
623696263Sobrien__ch (__un_args_eq (vector float [], (b)), \
623796263Sobrien      ((vector float) __builtin_altivec_lvxl ((a), (b))), \
623896263Sobrien__ch (__un_args_eq (float *, (b)), \
623996263Sobrien      ((vector float) __builtin_altivec_lvxl ((a), (b))), \
624096263Sobrien__ch (__un_args_eq (float [], (b)), \
624196263Sobrien      ((vector float) __builtin_altivec_lvxl ((a), (b))), \
624296263Sobrien__altivec_link_error_invalid_argument ()))))))))))))))))))))))))))))
624390075Sobrien
624496263Sobrien#define vec_loge(a1) __builtin_altivec_vlogefp ((a1))
624590075Sobrien
624696263Sobrien#define vec_lvsl(a1, a2) ((vector unsigned char) __builtin_altivec_lvsl ((a1), (a2)))
624790075Sobrien
624896263Sobrien#define vec_lvsr(a1, a2) ((vector unsigned char) __builtin_altivec_lvsr ((a1), (a2)))
624990075Sobrien
625096263Sobrien#define vec_madd(a1, a2, a3) (__builtin_altivec_vmaddfp ((a1), (a2), (a3)))
625190075Sobrien
625296263Sobrien#define vec_madds(a1, a2, a3) __builtin_altivec_vmhaddshs ((a1), (a2), (a3))
625390075Sobrien
625490075Sobrien#define vec_max(a1, a2) \
625596263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
625696263Sobrien      ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
625796263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
625896263Sobrien      ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
625996263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
626096263Sobrien      ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
626196263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
626296263Sobrien      ((vector signed char) __builtin_altivec_vmaxsb ((vector signed char) (a1), (vector signed char) (a2))), \
626396263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
626496263Sobrien      ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
626596263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
626696263Sobrien      ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
626796263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
626896263Sobrien      ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
626996263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
627096263Sobrien      ((vector signed short) __builtin_altivec_vmaxsh ((vector signed short) (a1), (vector signed short) (a2))), \
627196263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
627296263Sobrien      ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
627396263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
627496263Sobrien      ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
627596263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
627696263Sobrien      ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
627796263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
627896263Sobrien      ((vector signed int) __builtin_altivec_vmaxsw ((vector signed int) (a1), (vector signed int) (a2))), \
627996263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
628096263Sobrien      ((vector float) __builtin_altivec_vmaxfp ((vector float) (a1), (vector float) (a2))), \
628190075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
628290075Sobrien
628396263Sobrien#define vec_vmaxfp(a1, a2) \
628496263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
628596263Sobrien      ((vector float) __builtin_altivec_vmaxfp ((vector float) (a1), (vector float) (a2))), \
628696263Sobrien__altivec_link_error_invalid_argument ())
628796263Sobrien
628896263Sobrien#define vec_vmaxsw(a1, a2) \
628996263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
629096263Sobrien      ((vector signed int) __builtin_altivec_vmaxsw ((vector signed int) (a1), (vector signed int) (a2))), \
629196263Sobrien__altivec_link_error_invalid_argument ())
629296263Sobrien
629396263Sobrien#define vec_vmaxuw(a1, a2) \
629496263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
629596263Sobrien      ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
629696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
629796263Sobrien      ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
629896263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
629996263Sobrien      ((vector unsigned int) __builtin_altivec_vmaxuw ((vector signed int) (a1), (vector signed int) (a2))), \
630096263Sobrien__altivec_link_error_invalid_argument ())))
630196263Sobrien
630296263Sobrien#define vec_vmaxsh(a1, a2) \
630396263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
630496263Sobrien      ((vector signed short) __builtin_altivec_vmaxsh ((vector signed short) (a1), (vector signed short) (a2))), \
630596263Sobrien__altivec_link_error_invalid_argument ())
630696263Sobrien
630796263Sobrien#define vec_vmaxuh(a1, a2) \
630896263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
630996263Sobrien      ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
631096263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
631196263Sobrien      ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
631296263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
631396263Sobrien      ((vector unsigned short) __builtin_altivec_vmaxuh ((vector signed short) (a1), (vector signed short) (a2))), \
631496263Sobrien__altivec_link_error_invalid_argument ())))
631596263Sobrien
631696263Sobrien#define vec_vmaxsb(a1, a2) \
631796263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
631896263Sobrien      ((vector signed char) __builtin_altivec_vmaxsb ((vector signed char) (a1), (vector signed char) (a2))), \
631996263Sobrien__altivec_link_error_invalid_argument ())
632096263Sobrien
632196263Sobrien#define vec_vmaxub(a1, a2) \
632296263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
632396263Sobrien      ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
632496263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
632596263Sobrien      ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
632696263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
632796263Sobrien      ((vector unsigned char) __builtin_altivec_vmaxub ((vector signed char) (a1), (vector signed char) (a2))), \
632896263Sobrien__altivec_link_error_invalid_argument ())))
632996263Sobrien
633090075Sobrien#define vec_mergeh(a1, a2) \
633196263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
633296263Sobrien      ((vector signed char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \
633396263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
633496263Sobrien      ((vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \
633596263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
633696263Sobrien      ((vector signed short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \
633796263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
633896263Sobrien      ((vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \
633996263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
634096263Sobrien      ((vector float) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
634196263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
634296263Sobrien      ((vector signed int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
634396263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
634496263Sobrien      ((vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
634590075Sobrien    __altivec_link_error_invalid_argument ())))))))
634690075Sobrien
634796263Sobrien#define vec_vmrghw(a1, a2) \
634896263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
634996263Sobrien      ((vector float) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
635096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
635196263Sobrien      ((vector signed int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
635296263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
635396263Sobrien      ((vector unsigned int) __builtin_altivec_vmrghw ((vector signed int) (a1), (vector signed int) (a2))), \
635496263Sobrien__altivec_link_error_invalid_argument ())))
635596263Sobrien
635696263Sobrien#define vec_vmrghh(a1, a2) \
635796263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
635896263Sobrien      ((vector signed short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \
635996263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
636096263Sobrien      ((vector unsigned short) __builtin_altivec_vmrghh ((vector signed short) (a1), (vector signed short) (a2))), \
636196263Sobrien__altivec_link_error_invalid_argument ()))
636296263Sobrien
636396263Sobrien#define vec_vmrghb(a1, a2) \
636496263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
636596263Sobrien      ((vector signed char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \
636696263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
636796263Sobrien      ((vector unsigned char) __builtin_altivec_vmrghb ((vector signed char) (a1), (vector signed char) (a2))), \
636896263Sobrien__altivec_link_error_invalid_argument ()))
636996263Sobrien
637090075Sobrien#define vec_mergel(a1, a2) \
637196263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
637296263Sobrien      ((vector signed char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \
637396263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
637496263Sobrien      ((vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \
637596263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
637696263Sobrien      ((vector signed short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \
637796263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
637896263Sobrien      ((vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \
637996263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
638096263Sobrien      ((vector float) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
638196263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
638296263Sobrien      ((vector signed int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
638396263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
638496263Sobrien      ((vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
638590075Sobrien    __altivec_link_error_invalid_argument ())))))))
638690075Sobrien
638796263Sobrien#define vec_vmrglw(a1, a2) \
638896263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
638996263Sobrien      ((vector float) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
639096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
639196263Sobrien      ((vector signed int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
639296263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
639396263Sobrien      ((vector unsigned int) __builtin_altivec_vmrglw ((vector signed int) (a1), (vector signed int) (a2))), \
639496263Sobrien__altivec_link_error_invalid_argument ())))
639590075Sobrien
639696263Sobrien#define vec_vmrglh(a1, a2) \
639796263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
639896263Sobrien      ((vector signed short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \
639996263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
640096263Sobrien      ((vector unsigned short) __builtin_altivec_vmrglh ((vector signed short) (a1), (vector signed short) (a2))), \
640196263Sobrien__altivec_link_error_invalid_argument ()))
640296263Sobrien
640396263Sobrien#define vec_vmrglb(a1, a2) \
640496263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
640596263Sobrien      ((vector signed char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \
640696263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
640796263Sobrien      ((vector unsigned char) __builtin_altivec_vmrglb ((vector signed char) (a1), (vector signed char) (a2))), \
640896263Sobrien__altivec_link_error_invalid_argument ()))
640996263Sobrien
641096263Sobrien#define vec_mfvscr()  (((vector unsigned short) __builtin_altivec_mfvscr ()))
641196263Sobrien
641290075Sobrien#define vec_min(a1, a2) \
641396263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
641496263Sobrien      ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
641596263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
641696263Sobrien      ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
641796263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
641896263Sobrien      ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
641996263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
642096263Sobrien      ((vector signed char) __builtin_altivec_vminsb ((vector signed char) (a1), (vector signed char) (a2))), \
642196263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
642296263Sobrien      ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
642396263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
642496263Sobrien      ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
642596263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
642696263Sobrien      ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
642796263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
642896263Sobrien      ((vector signed short) __builtin_altivec_vminsh ((vector signed short) (a1), (vector signed short) (a2))), \
642996263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
643096263Sobrien      ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
643196263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
643296263Sobrien      ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
643396263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
643496263Sobrien      ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
643596263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
643696263Sobrien      ((vector signed int) __builtin_altivec_vminsw ((vector signed int) (a1), (vector signed int) (a2))), \
643796263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
643896263Sobrien      ((vector float) __builtin_altivec_vminfp ((vector float) (a1), (vector float) (a2))), \
643990075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
644090075Sobrien
644196263Sobrien#define vec_vminfp(a1, a2) \
644296263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
644396263Sobrien      ((vector float) __builtin_altivec_vminfp ((vector float) (a1), (vector float) (a2))), \
644496263Sobrien__altivec_link_error_invalid_argument ())
644596263Sobrien
644696263Sobrien#define vec_vminsw(a1, a2) \
644796263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
644896263Sobrien      ((vector signed int) __builtin_altivec_vminsw ((vector signed int) (a1), (vector signed int) (a2))), \
644996263Sobrien__altivec_link_error_invalid_argument ())
645096263Sobrien
645196263Sobrien#define vec_vminuw(a1, a2) \
645296263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
645396263Sobrien      ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
645496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
645596263Sobrien      ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
645696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
645796263Sobrien      ((vector unsigned int) __builtin_altivec_vminuw ((vector signed int) (a1), (vector signed int) (a2))), \
645896263Sobrien__altivec_link_error_invalid_argument ())))
645996263Sobrien
646096263Sobrien#define vec_vminsh(a1, a2) \
646196263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
646296263Sobrien      ((vector signed short) __builtin_altivec_vminsh ((vector signed short) (a1), (vector signed short) (a2))), \
646396263Sobrien__altivec_link_error_invalid_argument ())
646496263Sobrien
646596263Sobrien#define vec_vminuh(a1, a2) \
646696263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
646796263Sobrien      ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
646896263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
646996263Sobrien      ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
647096263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
647196263Sobrien      ((vector unsigned short) __builtin_altivec_vminuh ((vector signed short) (a1), (vector signed short) (a2))), \
647296263Sobrien__altivec_link_error_invalid_argument ())))
647396263Sobrien
647496263Sobrien#define vec_vminsb(a1, a2) \
647596263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
647696263Sobrien      ((vector signed char) __builtin_altivec_vminsb ((vector signed char) (a1), (vector signed char) (a2))), \
647796263Sobrien__altivec_link_error_invalid_argument ())
647896263Sobrien
647996263Sobrien#define vec_vminub(a1, a2) \
648096263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
648196263Sobrien      ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
648296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
648396263Sobrien      ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
648496263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
648596263Sobrien      ((vector unsigned char) __builtin_altivec_vminub ((vector signed char) (a1), (vector signed char) (a2))), \
648696263Sobrien__altivec_link_error_invalid_argument ())))
648796263Sobrien
648890075Sobrien#define vec_mladd(a1, a2, a3) \
648996263Sobrien__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \
649096263Sobrien      ((vector signed short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \
649196263Sobrien__ch (__tern_args_eq (vector signed short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \
649296263Sobrien      ((vector signed short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \
649396263Sobrien__ch (__tern_args_eq (vector unsigned short, (a1), vector signed short, (a2), vector signed short, (a3)), \
649496263Sobrien      ((vector signed short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \
649596263Sobrien__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \
649696263Sobrien      ((vector unsigned short) __builtin_altivec_vmladduhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed short) (a3))), \
649790075Sobrien    __altivec_link_error_invalid_argument ()))))
649890075Sobrien
649996263Sobrien#define vec_mradds(a1, a2, a3) __builtin_altivec_vmhraddshs ((a1), (a2), (a3))
650090075Sobrien
650190075Sobrien#define vec_msum(a1, a2, a3) \
650296263Sobrien__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned int, (a3)), \
650396263Sobrien      ((vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \
650496263Sobrien__ch (__tern_args_eq (vector signed char, (a1), vector unsigned char, (a2), vector signed int, (a3)), \
650596263Sobrien      ((vector signed int) __builtin_altivec_vmsummbm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \
650696263Sobrien__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \
650796263Sobrien      ((vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
650896263Sobrien__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \
650996263Sobrien      ((vector signed int) __builtin_altivec_vmsumshm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
651090075Sobrien    __altivec_link_error_invalid_argument ()))))
651190075Sobrien
651296263Sobrien#define vec_vmsumshm(a1, a2, a3) \
651396263Sobrien__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \
651496263Sobrien      ((vector signed int) __builtin_altivec_vmsumshm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
651596263Sobrien__altivec_link_error_invalid_argument ())
651696263Sobrien
651796263Sobrien#define vec_vmsumuhm(a1, a2, a3) \
651896263Sobrien__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \
651996263Sobrien      ((vector unsigned int) __builtin_altivec_vmsumuhm ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
652096263Sobrien__altivec_link_error_invalid_argument ())
652196263Sobrien
652296263Sobrien#define vec_vmsummbm(a1, a2, a3) \
652396263Sobrien__ch (__tern_args_eq (vector signed char, (a1), vector unsigned char, (a2), vector signed int, (a3)), \
652496263Sobrien      ((vector signed int) __builtin_altivec_vmsummbm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \
652596263Sobrien__altivec_link_error_invalid_argument ())
652696263Sobrien
652796263Sobrien#define vec_msumubm(a1, a2, a3) \
652896263Sobrien__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned int, (a3)), \
652996263Sobrien      ((vector unsigned int) __builtin_altivec_vmsumubm ((vector signed char) (a1), (vector signed char) (a2), (vector signed int) (a3))), \
653096263Sobrien__altivec_link_error_invalid_argument ())
653196263Sobrien
653290075Sobrien#define vec_msums(a1, a2, a3) \
653396263Sobrien__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \
653496263Sobrien      ((vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
653596263Sobrien__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \
653696263Sobrien      ((vector signed int) __builtin_altivec_vmsumshs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
653790075Sobrien    __altivec_link_error_invalid_argument ()))
653890075Sobrien
653996263Sobrien#define vec_vmsumshs(a1, a2, a3) \
654096263Sobrien__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed int, (a3)), \
654196263Sobrien      ((vector signed int) __builtin_altivec_vmsumshs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
654296263Sobrien__altivec_link_error_invalid_argument ())
654396263Sobrien
654496263Sobrien#define vec_vmsumuhs(a1, a2, a3) \
654596263Sobrien__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned int, (a3)), \
654696263Sobrien      ((vector unsigned int) __builtin_altivec_vmsumuhs ((vector signed short) (a1), (vector signed short) (a2), (vector signed int) (a3))), \
654796263Sobrien__altivec_link_error_invalid_argument ())
654896263Sobrien
654990075Sobrien#define vec_mtvscr(a1) \
655096263Sobrien__ch (__un_args_eq (vector signed int, (a1)), \
655196263Sobrien      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
655296263Sobrien__ch (__un_args_eq (vector unsigned int, (a1)), \
655396263Sobrien      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
655496263Sobrien__ch (__un_args_eq (vector signed short, (a1)), \
655596263Sobrien      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
655696263Sobrien__ch (__un_args_eq (vector unsigned short, (a1)), \
655796263Sobrien      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
655896263Sobrien__ch (__un_args_eq (vector signed char, (a1)), \
655996263Sobrien      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
656096263Sobrien__ch (__un_args_eq (vector unsigned char, (a1)), \
656196263Sobrien      __builtin_altivec_mtvscr ((vector signed int) (a1)), \
656290075Sobrien    __altivec_link_error_invalid_argument ()))))))
656390075Sobrien
656490075Sobrien#define vec_mule(a1, a2) \
656596263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
656696263Sobrien      ((vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) (a1), (vector signed char) (a2))), \
656796263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
656896263Sobrien      ((vector signed short) __builtin_altivec_vmulesb ((vector signed char) (a1), (vector signed char) (a2))), \
656996263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
657096263Sobrien      ((vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) (a1), (vector signed short) (a2))), \
657196263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
657296263Sobrien      ((vector signed int) __builtin_altivec_vmulesh ((vector signed short) (a1), (vector signed short) (a2))), \
657390075Sobrien    __altivec_link_error_invalid_argument ()))))
657490075Sobrien
657596263Sobrien#define vec_vmulesh(a1, a2) \
657696263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
657796263Sobrien      ((vector signed int) __builtin_altivec_vmulesh ((vector signed short) (a1), (vector signed short) (a2))), \
657896263Sobrien__altivec_link_error_invalid_argument ())
657996263Sobrien
658096263Sobrien#define vec_vmuleuh(a1, a2) \
658196263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
658296263Sobrien      ((vector unsigned int) __builtin_altivec_vmuleuh ((vector signed short) (a1), (vector signed short) (a2))), \
658396263Sobrien__altivec_link_error_invalid_argument ())
658496263Sobrien
658596263Sobrien#define vec_vmulesb(a1, a2) \
658696263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
658796263Sobrien      ((vector signed short) __builtin_altivec_vmulesb ((vector signed char) (a1), (vector signed char) (a2))), \
658896263Sobrien__altivec_link_error_invalid_argument ())
658996263Sobrien
659096263Sobrien#define vec_vmuleub(a1, a2) \
659196263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
659296263Sobrien      ((vector unsigned short) __builtin_altivec_vmuleub ((vector signed char) (a1), (vector signed char) (a2))), \
659396263Sobrien__altivec_link_error_invalid_argument ())
659496263Sobrien
659590075Sobrien#define vec_mulo(a1, a2) \
659696263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
659796263Sobrien      ((vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) (a1), (vector signed char) (a2))), \
659896263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
659996263Sobrien      ((vector signed short) __builtin_altivec_vmulosb ((vector signed char) (a1), (vector signed char) (a2))), \
660096263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
660196263Sobrien      ((vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) (a1), (vector signed short) (a2))), \
660296263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
660396263Sobrien      ((vector signed int) __builtin_altivec_vmulosh ((vector signed short) (a1), (vector signed short) (a2))), \
660490075Sobrien    __altivec_link_error_invalid_argument ()))))
660590075Sobrien
660696263Sobrien#define vec_vmulosh(a1, a2) \
660796263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
660896263Sobrien      ((vector signed int) __builtin_altivec_vmulosh ((vector signed short) (a1), (vector signed short) (a2))), \
660996263Sobrien__altivec_link_error_invalid_argument ())
661090075Sobrien
661196263Sobrien#define vec_vmulouh(a1, a2) \
661296263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
661396263Sobrien      ((vector unsigned int) __builtin_altivec_vmulouh ((vector signed short) (a1), (vector signed short) (a2))), \
661496263Sobrien__altivec_link_error_invalid_argument ())
661596263Sobrien
661696263Sobrien#define vec_mulosb(a1, a2) \
661796263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
661896263Sobrien      ((vector signed short) __builtin_altivec_vmulosb ((vector signed char) (a1), (vector signed char) (a2))), \
661996263Sobrien__altivec_link_error_invalid_argument ())
662096263Sobrien
662196263Sobrien#define vec_vmuloub(a1, a2) \
662296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
662396263Sobrien      ((vector unsigned short) __builtin_altivec_vmuloub ((vector signed char) (a1), (vector signed char) (a2))), \
662496263Sobrien__altivec_link_error_invalid_argument ())
662596263Sobrien
662696263Sobrien#define vec_nmsub(a1, a2, a3) \
662796263Sobrien__ch (__tern_args_eq (vector float, ((a1)), vector float, ((a2)) , vector float, ((a3))), \
662896263Sobrien      ((vector float) __builtin_altivec_vnmsubfp ((vector float) ((a1)), (vector float) ((a2)), (vector float)((a3)))), \
662996263Sobrien    __altivec_link_error_invalid_argument ())
663096263Sobrien
663190075Sobrien#define vec_nor(a1, a2) \
663296263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
663396263Sobrien      ((vector float) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
663496263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
663596263Sobrien      ((vector signed int) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
663696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
663796263Sobrien      ((vector unsigned int) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
663896263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
663996263Sobrien      ((vector signed short) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
664096263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
664196263Sobrien      ((vector unsigned short) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
664296263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
664396263Sobrien      ((vector signed char) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
664496263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
664596263Sobrien      ((vector unsigned char) __builtin_altivec_vnor ((vector signed int) (a1), (vector signed int) (a2))), \
664690075Sobrien    __altivec_link_error_invalid_argument ())))))))
664790075Sobrien
664890075Sobrien#define vec_or(a1, a2) \
664996263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
665096263Sobrien      ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
665196263Sobrien__ch (__bin_args_eq (vector float, (a1), vector signed int, (a2)), \
665296263Sobrien      ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
665396263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector float, (a2)), \
665496263Sobrien      ((vector float) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
665596263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
665696263Sobrien      ((vector signed int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
665796263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
665896263Sobrien      ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
665996263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
666096263Sobrien      ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
666196263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
666296263Sobrien      ((vector unsigned int) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
666396263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
666496263Sobrien      ((vector signed short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
666596263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
666696263Sobrien      ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
666796263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
666896263Sobrien      ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
666996263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
667096263Sobrien      ((vector unsigned short) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
667196263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
667296263Sobrien      ((vector signed char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
667396263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
667496263Sobrien      ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
667596263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
667696263Sobrien      ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
667796263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
667896263Sobrien      ((vector unsigned char) __builtin_altivec_vor ((vector signed int) (a1), (vector signed int) (a2))), \
667990075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))))
668090075Sobrien
668190075Sobrien#define vec_pack(a1, a2) \
668296263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
668396263Sobrien      ((vector signed char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \
668496263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
668596263Sobrien      ((vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \
668696263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
668796263Sobrien      ((vector signed short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \
668896263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
668996263Sobrien      ((vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \
669090075Sobrien    __altivec_link_error_invalid_argument ()))))
669190075Sobrien
669296263Sobrien#define vec_vpkuwum(a1, a2) \
669396263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
669496263Sobrien      ((vector signed short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \
669596263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
669696263Sobrien      ((vector unsigned short) __builtin_altivec_vpkuwum ((vector signed int) (a1), (vector signed int) (a2))), \
669796263Sobrien__altivec_link_error_invalid_argument ()))
669890075Sobrien
669996263Sobrien#define vec_vpkuhum(a1, a2) \
670096263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
670196263Sobrien      ((vector signed char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \
670296263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
670396263Sobrien      ((vector unsigned char) __builtin_altivec_vpkuhum ((vector signed short) (a1), (vector signed short) (a2))), \
670496263Sobrien__altivec_link_error_invalid_argument ()))
670596263Sobrien
670696263Sobrien#define vec_packpx(a1, a2) __builtin_altivec_vpkpx ((a1), (a2))
670796263Sobrien
670890075Sobrien#define vec_packs(a1, a2) \
670996263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
671096263Sobrien      ((vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) (a1), (vector signed short) (a2))), \
671196263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
671296263Sobrien      ((vector signed char) __builtin_altivec_vpkshss ((vector signed short) (a1), (vector signed short) (a2))), \
671396263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
671496263Sobrien      ((vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) (a1), (vector signed int) (a2))), \
671596263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
671696263Sobrien      ((vector signed short) __builtin_altivec_vpkswss ((vector signed int) (a1), (vector signed int) (a2))), \
671790075Sobrien    __altivec_link_error_invalid_argument ()))))
671890075Sobrien
671996263Sobrien#define vec_vpkswss(a1, a2) \
672096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
672196263Sobrien      ((vector signed short) __builtin_altivec_vpkswss ((vector signed int) (a1), (vector signed int) (a2))), \
672296263Sobrien__altivec_link_error_invalid_argument ())
672396263Sobrien
672496263Sobrien#define vec_vpkuwus(a1, a2) \
672596263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
672696263Sobrien      ((vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) (a1), (vector signed int) (a2))), \
672796263Sobrien__altivec_link_error_invalid_argument ())
672896263Sobrien
672996263Sobrien#define vec_vpkshss(a1, a2) \
673096263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
673196263Sobrien      ((vector signed char) __builtin_altivec_vpkshss ((vector signed short) (a1), (vector signed short) (a2))), \
673296263Sobrien__altivec_link_error_invalid_argument ())
673396263Sobrien
673496263Sobrien#define vec_vpkuhus(a1, a2) \
673596263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
673696263Sobrien      ((vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) (a1), (vector signed short) (a2))), \
673796263Sobrien__altivec_link_error_invalid_argument ())
673896263Sobrien
673990075Sobrien#define vec_packsu(a1, a2) \
674096263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
674196263Sobrien      ((vector unsigned char) __builtin_altivec_vpkuhus ((vector signed short) (a1), (vector signed short) (a2))), \
674296263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
674396263Sobrien      ((vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) (a1), (vector signed short) (a2))), \
674496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
674596263Sobrien      ((vector unsigned short) __builtin_altivec_vpkuwus ((vector signed int) (a1), (vector signed int) (a2))), \
674696263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
674796263Sobrien      ((vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) (a1), (vector signed int) (a2))), \
674890075Sobrien    __altivec_link_error_invalid_argument ()))))
674990075Sobrien
675096263Sobrien#define vec_vpkswus(a1, a2) \
675196263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
675296263Sobrien      ((vector unsigned short) __builtin_altivec_vpkswus ((vector signed int) (a1), (vector signed int) (a2))), \
675396263Sobrien__altivec_link_error_invalid_argument ())
675496263Sobrien
675596263Sobrien#define vec_vpkshus(a1, a2) \
675696263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
675796263Sobrien      ((vector unsigned char) __builtin_altivec_vpkshus ((vector signed short) (a1), (vector signed short) (a2))), \
675896263Sobrien__altivec_link_error_invalid_argument ())
675996263Sobrien
676096263Sobrien#define vec_perm(a1, a2, a3) \
676196263Sobrien__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector unsigned char, (a3)), \
676296263Sobrien      ((vector float) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
676396263Sobrien__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector unsigned char, (a3)), \
676496263Sobrien      ((vector signed int) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
676596263Sobrien__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector unsigned char, (a3)), \
676696263Sobrien      ((vector unsigned int) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
676796263Sobrien__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector unsigned char, (a3)), \
676896263Sobrien      ((vector signed short) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
676996263Sobrien__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned char, (a3)), \
677096263Sobrien      ((vector unsigned short) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
677196263Sobrien__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector unsigned char, (a3)), \
677296263Sobrien      ((vector signed char) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
677396263Sobrien__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned char, (a3)), \
677496263Sobrien      ((vector unsigned char) __builtin_altivec_vperm_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed char) (a3))), \
677590075Sobrien    __altivec_link_error_invalid_argument ())))))))
677690075Sobrien
677796263Sobrien#define vec_re(a1) __builtin_altivec_vrefp ((a1))
677890075Sobrien
677990075Sobrien#define vec_rl(a1, a2) \
678096263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
678196263Sobrien      ((vector signed char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \
678296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
678396263Sobrien      ((vector unsigned char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \
678496263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
678596263Sobrien      ((vector signed short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \
678696263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
678796263Sobrien      ((vector unsigned short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \
678896263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
678996263Sobrien      ((vector signed int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \
679096263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
679196263Sobrien      ((vector unsigned int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \
679290075Sobrien    __altivec_link_error_invalid_argument ()))))))
679390075Sobrien
679496263Sobrien#define vec_vrlw(a1, a2) \
679596263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
679696263Sobrien      ((vector signed int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \
679796263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
679896263Sobrien      ((vector unsigned int) __builtin_altivec_vrlw ((vector signed int) (a1), (vector signed int) (a2))), \
679996263Sobrien__altivec_link_error_invalid_argument ()))
680090075Sobrien
680196263Sobrien#define vec_vrlh(a1, a2) \
680296263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
680396263Sobrien      ((vector signed short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \
680496263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
680596263Sobrien      ((vector unsigned short) __builtin_altivec_vrlh ((vector signed short) (a1), (vector signed short) (a2))), \
680696263Sobrien__altivec_link_error_invalid_argument ()))
680790075Sobrien
680896263Sobrien#define vec_vrlb(a1, a2) \
680996263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
681096263Sobrien      ((vector signed char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \
681196263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
681296263Sobrien      ((vector unsigned char) __builtin_altivec_vrlb ((vector signed char) (a1), (vector signed char) (a2))), \
681396263Sobrien__altivec_link_error_invalid_argument ()))
681496263Sobrien
681596263Sobrien#define vec_round(a1) __builtin_altivec_vrfin ((a1))
681696263Sobrien
681796263Sobrien#define vec_rsqrte(a1) __builtin_altivec_vrsqrtefp ((a1))
681896263Sobrien
681990075Sobrien#define vec_sel(a1, a2, a3) \
682096263Sobrien__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector signed int, (a3)), \
682196263Sobrien      ((vector float) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
682296263Sobrien__ch (__tern_args_eq (vector float, (a1), vector float, (a2), vector unsigned int, (a3)), \
682396263Sobrien      ((vector float) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
682496263Sobrien__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector signed int, (a3)), \
682596263Sobrien      ((vector signed int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
682696263Sobrien__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), vector unsigned int, (a3)), \
682796263Sobrien      ((vector signed int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
682896263Sobrien__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector signed int, (a3)), \
682996263Sobrien      ((vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
683096263Sobrien__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), vector unsigned int, (a3)), \
683196263Sobrien      ((vector unsigned int) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
683296263Sobrien__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector signed short, (a3)), \
683396263Sobrien      ((vector signed short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
683496263Sobrien__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), vector unsigned short, (a3)), \
683596263Sobrien      ((vector signed short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
683696263Sobrien__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector signed short, (a3)), \
683796263Sobrien      ((vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
683896263Sobrien__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), vector unsigned short, (a3)), \
683996263Sobrien      ((vector unsigned short) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
684096263Sobrien__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector signed char, (a3)), \
684196263Sobrien      ((vector signed char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
684296263Sobrien__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), vector unsigned char, (a3)), \
684396263Sobrien      ((vector signed char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
684496263Sobrien__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector signed char, (a3)), \
684596263Sobrien      ((vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
684696263Sobrien__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), vector unsigned char, (a3)), \
684796263Sobrien      ((vector unsigned char) __builtin_altivec_vsel_4si ((vector signed int) (a1), (vector signed int) (a2), (vector signed int) (a3))), \
684890075Sobrien    __altivec_link_error_invalid_argument ()))))))))))))))
684990075Sobrien
685090075Sobrien#define vec_sl(a1, a2) \
685196263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
685296263Sobrien      ((vector signed char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \
685396263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
685496263Sobrien      ((vector unsigned char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \
685596263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
685696263Sobrien      ((vector signed short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \
685796263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
685896263Sobrien      ((vector unsigned short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \
685996263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
686096263Sobrien      ((vector signed int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \
686196263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
686296263Sobrien      ((vector unsigned int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \
686390075Sobrien    __altivec_link_error_invalid_argument ()))))))
686490075Sobrien
686596263Sobrien#define vec_vslw(a1, a2) \
686696263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
686796263Sobrien      ((vector signed int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \
686896263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
686996263Sobrien      ((vector unsigned int) __builtin_altivec_vslw ((vector signed int) (a1), (vector signed int) (a2))), \
687096263Sobrien__altivec_link_error_invalid_argument ()))
687196263Sobrien
687296263Sobrien#define vec_vslh(a1, a2) \
687396263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
687496263Sobrien      ((vector signed short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \
687596263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
687696263Sobrien      ((vector unsigned short) __builtin_altivec_vslh ((vector signed short) (a1), (vector signed short) (a2))), \
687796263Sobrien__altivec_link_error_invalid_argument ()))
687896263Sobrien
687996263Sobrien#define vec_vslb(a1, a2) \
688096263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
688196263Sobrien      ((vector signed char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \
688296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
688396263Sobrien      ((vector unsigned char) __builtin_altivec_vslb ((vector signed char) (a1), (vector signed char) (a2))), \
688496263Sobrien__altivec_link_error_invalid_argument ()))
688596263Sobrien
688690075Sobrien#define vec_sld(a1, a2, a3) \
688796263Sobrien__ch (__tern_args_eq (vector float, (a1), vector float, (a2), int, (a3)), \
688896263Sobrien      ((vector float) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
688996263Sobrien__ch (__tern_args_eq (vector signed int, (a1), vector signed int, (a2), int, (a3)), \
689096263Sobrien      ((vector signed int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
689196263Sobrien__ch (__tern_args_eq (vector unsigned int, (a1), vector unsigned int, (a2), int, (a3)), \
689296263Sobrien      ((vector unsigned int) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
689396263Sobrien__ch (__tern_args_eq (vector signed short, (a1), vector signed short, (a2), int, (a3)), \
689496263Sobrien      ((vector signed short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
689596263Sobrien__ch (__tern_args_eq (vector unsigned short, (a1), vector unsigned short, (a2), int, (a3)), \
689696263Sobrien      ((vector unsigned short) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
689796263Sobrien__ch (__tern_args_eq (vector signed char, (a1), vector signed char, (a2), int, (a3)), \
689896263Sobrien      ((vector signed char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
689996263Sobrien__ch (__tern_args_eq (vector unsigned char, (a1), vector unsigned char, (a2), int, (a3)), \
690096263Sobrien      ((vector unsigned char) __builtin_altivec_vsldoi_4si ((vector signed int) (a1), (vector signed int) (a2), (const char) (a3))), \
690190075Sobrien    __altivec_link_error_invalid_argument ())))))))
690290075Sobrien
690390075Sobrien#define vec_sll(a1, a2) \
690496263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
690596263Sobrien      ((vector signed int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
690696263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned short, (a2)), \
690796263Sobrien      ((vector signed int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
690896263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \
690996263Sobrien      ((vector signed int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
691096263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
691196263Sobrien      ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
691296263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned short, (a2)), \
691396263Sobrien      ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
691496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \
691596263Sobrien      ((vector unsigned int) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
691696263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned int, (a2)), \
691796263Sobrien      ((vector signed short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
691896263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
691996263Sobrien      ((vector signed short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
692096263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \
692196263Sobrien      ((vector signed short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
692296263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned int, (a2)), \
692396263Sobrien      ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
692496263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
692596263Sobrien      ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
692696263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \
692796263Sobrien      ((vector unsigned short) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
692896263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned int, (a2)), \
692996263Sobrien      ((vector signed char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
693096263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned short, (a2)), \
693196263Sobrien      ((vector signed char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
693296263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
693396263Sobrien      ((vector signed char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
693496263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \
693596263Sobrien      ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
693696263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned short, (a2)), \
693796263Sobrien      ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
693896263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
693996263Sobrien      ((vector unsigned char) __builtin_altivec_vsl ((vector signed int) (a1), (vector signed int) (a2))), \
694090075Sobrien    __altivec_link_error_invalid_argument ()))))))))))))))))))
694190075Sobrien
694290075Sobrien#define vec_slo(a1, a2) \
694396263Sobrien__ch (__bin_args_eq (vector float, (a1), vector signed char, (a2)), \
694496263Sobrien      ((vector float) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
694596263Sobrien__ch (__bin_args_eq (vector float, (a1), vector unsigned char, (a2)), \
694696263Sobrien      ((vector float) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
694796263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed char, (a2)), \
694896263Sobrien      ((vector signed int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
694996263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \
695096263Sobrien      ((vector signed int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
695196263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed char, (a2)), \
695296263Sobrien      ((vector unsigned int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
695396263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \
695496263Sobrien      ((vector unsigned int) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
695596263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed char, (a2)), \
695696263Sobrien      ((vector signed short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
695796263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \
695896263Sobrien      ((vector signed short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
695996263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed char, (a2)), \
696096263Sobrien      ((vector unsigned short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
696196263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \
696296263Sobrien      ((vector unsigned short) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
696396263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
696496263Sobrien      ((vector signed char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
696596263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
696696263Sobrien      ((vector signed char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
696796263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
696896263Sobrien      ((vector unsigned char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
696996263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
697096263Sobrien      ((vector unsigned char) __builtin_altivec_vslo ((vector signed int) (a1), (vector signed int) (a2))), \
697190075Sobrien    __altivec_link_error_invalid_argument ()))))))))))))))
697290075Sobrien
697390075Sobrien#define vec_splat(a1, a2) \
697496263Sobrien__ch (__bin_args_eq (vector signed char, ((a1)), int, ((a2))), \
697596263Sobrien      ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
697696263Sobrien__ch (__bin_args_eq (vector unsigned char, ((a1)), int, ((a2))), \
697796263Sobrien      ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
697896263Sobrien__ch (__bin_args_eq (vector signed short, ((a1)), int, ((a2))), \
697996263Sobrien      ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
698096263Sobrien__ch (__bin_args_eq (vector unsigned short, ((a1)), int, ((a2))), \
698196263Sobrien      ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
698296263Sobrien__ch (__bin_args_eq (vector float, ((a1)), int, ((a2))), \
698396263Sobrien      ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
698496263Sobrien__ch (__bin_args_eq (vector signed int, ((a1)), int, ((a2))), \
698596263Sobrien      ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
698696263Sobrien__ch (__bin_args_eq (vector unsigned int, ((a1)), int, ((a2))), \
698796263Sobrien      ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \
698890075Sobrien    __altivec_link_error_invalid_argument ())))))))
698990075Sobrien
699096263Sobrien#define vec_vspltw(a1, a2) \
699196263Sobrien__ch (__bin_args_eq (vector float, ((a1)), int, ((a2))), \
699296263Sobrien      ((vector float) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
699396263Sobrien__ch (__bin_args_eq (vector signed int, ((a1)), int, ((a2))), \
699496263Sobrien      ((vector signed int) __builtin_altivec_vspltw ((vector signed int) ((a1)), (const char) ((a2)))), \
699596263Sobrien__ch (__bin_args_eq (vector unsigned int, ((a1)), int, ((a2))), \
699696263Sobrien      ((vector unsigned int) __builtin_altivec_vspltw ((vector signed int) (a1), (const char) ((a2)))), \
699796263Sobrien__altivec_link_error_invalid_argument ())))
699890075Sobrien
699996263Sobrien#define vec_vsplth(a1, a2) \
700096263Sobrien__ch (__bin_args_eq (vector signed short, ((a1)), int, ((a2))), \
700196263Sobrien      ((vector signed short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
700296263Sobrien__ch (__bin_args_eq (vector unsigned short, ((a1)), int, ((a2))), \
700396263Sobrien      ((vector unsigned short) __builtin_altivec_vsplth ((vector signed short) ((a1)), (const char) ((a2)))), \
700496263Sobrien__altivec_link_error_invalid_argument ()))
700590075Sobrien
700696263Sobrien#define vec_vspltb(a1, a2) \
700796263Sobrien__ch (__bin_args_eq (vector signed char, ((a1)), int, ((a2))), \
700896263Sobrien      ((vector signed char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
700996263Sobrien__ch (__bin_args_eq (vector unsigned char, ((a1)), int, ((a2))), \
701096263Sobrien      ((vector unsigned char) __builtin_altivec_vspltb ((vector signed char) ((a1)), (const char) ((a2)))), \
701196263Sobrien__altivec_link_error_invalid_argument ()))
701290075Sobrien
701396263Sobrien#define vec_splat_s8(a1) __builtin_altivec_vspltisb ((a1))
701490075Sobrien
701596263Sobrien#define vec_splat_s16(a1) __builtin_altivec_vspltish ((a1))
701690075Sobrien
701796263Sobrien#define vec_splat_s32(a1) __builtin_altivec_vspltisw ((a1))
701890075Sobrien
701996263Sobrien#define vec_splat_u8(a1) ((vector unsigned char) __builtin_altivec_vspltisb ((a1)))
702096263Sobrien
702196263Sobrien#define vec_splat_u16(a1) ((vector unsigned short) __builtin_altivec_vspltish ((a1)))
702296263Sobrien
702396263Sobrien#define vec_splat_u32(a1) ((vector unsigned int) __builtin_altivec_vspltisw ((a1)))
702496263Sobrien
702590075Sobrien#define vec_sr(a1, a2) \
702696263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
702796263Sobrien      ((vector signed char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \
702896263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
702996263Sobrien      ((vector unsigned char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \
703096263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
703196263Sobrien      ((vector signed short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \
703296263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
703396263Sobrien      ((vector unsigned short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \
703496263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
703596263Sobrien      ((vector signed int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \
703696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
703796263Sobrien      ((vector unsigned int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \
703890075Sobrien    __altivec_link_error_invalid_argument ()))))))
703990075Sobrien
704096263Sobrien#define vec_vsrw(a1, a2) \
704196263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
704296263Sobrien      ((vector signed int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \
704396263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
704496263Sobrien      ((vector unsigned int) __builtin_altivec_vsrw ((vector signed int) (a1), (vector signed int) (a2))), \
704596263Sobrien__altivec_link_error_invalid_argument ()))
704696263Sobrien
704796263Sobrien#define vec_vsrh(a1, a2) \
704896263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
704996263Sobrien      ((vector signed short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \
705096263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
705196263Sobrien      ((vector unsigned short) __builtin_altivec_vsrh ((vector signed short) (a1), (vector signed short) (a2))), \
705296263Sobrien__altivec_link_error_invalid_argument ()))
705396263Sobrien
705496263Sobrien#define vec_vsrb(a1, a2) \
705596263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
705696263Sobrien      ((vector signed char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \
705796263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
705896263Sobrien      ((vector unsigned char) __builtin_altivec_vsrb ((vector signed char) (a1), (vector signed char) (a2))), \
705996263Sobrien__altivec_link_error_invalid_argument ()))
706096263Sobrien
706190075Sobrien#define vec_sra(a1, a2) \
706296263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
706396263Sobrien      ((vector signed char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \
706496263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
706596263Sobrien      ((vector unsigned char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \
706696263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
706796263Sobrien      ((vector signed short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \
706896263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
706996263Sobrien      ((vector unsigned short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \
707096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
707196263Sobrien      ((vector signed int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \
707296263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
707396263Sobrien      ((vector unsigned int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \
707490075Sobrien    __altivec_link_error_invalid_argument ()))))))
707590075Sobrien
707696263Sobrien#define vec_vsraw(a1, a2) \
707796263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
707896263Sobrien      ((vector signed int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \
707996263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
708096263Sobrien      ((vector unsigned int) __builtin_altivec_vsraw ((vector signed int) (a1), (vector signed int) (a2))), \
708196263Sobrien__altivec_link_error_invalid_argument ()))
708296263Sobrien
708396263Sobrien#define vec_vsrah(a1, a2) \
708496263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
708596263Sobrien      ((vector signed short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \
708696263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
708796263Sobrien      ((vector unsigned short) __builtin_altivec_vsrah ((vector signed short) (a1), (vector signed short) (a2))), \
708896263Sobrien__altivec_link_error_invalid_argument ()))
708996263Sobrien
709096263Sobrien#define vec_vsrab(a1, a2) \
709196263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
709296263Sobrien      ((vector signed char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \
709396263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
709496263Sobrien      ((vector unsigned char) __builtin_altivec_vsrab ((vector signed char) (a1), (vector signed char) (a2))), \
709596263Sobrien__altivec_link_error_invalid_argument ()))
709696263Sobrien
709790075Sobrien#define vec_srl(a1, a2) \
709896263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
709996263Sobrien      ((vector signed int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
710096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned short, (a2)), \
710196263Sobrien      ((vector signed int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
710296263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \
710396263Sobrien      ((vector signed int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
710496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
710596263Sobrien      ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
710696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned short, (a2)), \
710796263Sobrien      ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
710896263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \
710996263Sobrien      ((vector unsigned int) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
711096263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned int, (a2)), \
711196263Sobrien      ((vector signed short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
711296263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
711396263Sobrien      ((vector signed short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
711496263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \
711596263Sobrien      ((vector signed short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
711696263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned int, (a2)), \
711796263Sobrien      ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
711896263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
711996263Sobrien      ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
712096263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \
712196263Sobrien      ((vector unsigned short) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
712296263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned int, (a2)), \
712396263Sobrien      ((vector signed char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
712496263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned short, (a2)), \
712596263Sobrien      ((vector signed char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
712696263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
712796263Sobrien      ((vector signed char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
712896263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \
712996263Sobrien      ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
713096263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned short, (a2)), \
713196263Sobrien      ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
713296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
713396263Sobrien      ((vector unsigned char) __builtin_altivec_vsr ((vector signed int) (a1), (vector signed int) (a2))), \
713490075Sobrien    __altivec_link_error_invalid_argument ()))))))))))))))))))
713590075Sobrien
713690075Sobrien#define vec_sro(a1, a2) \
713796263Sobrien__ch (__bin_args_eq (vector float, (a1), vector signed char, (a2)), \
713896263Sobrien      ((vector float) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
713996263Sobrien__ch (__bin_args_eq (vector float, (a1), vector unsigned char, (a2)), \
714096263Sobrien      ((vector float) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
714196263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed char, (a2)), \
714296263Sobrien      ((vector signed int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
714396263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned char, (a2)), \
714496263Sobrien      ((vector signed int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
714596263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed char, (a2)), \
714696263Sobrien      ((vector unsigned int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
714796263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned char, (a2)), \
714896263Sobrien      ((vector unsigned int) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
714996263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed char, (a2)), \
715096263Sobrien      ((vector signed short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
715196263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned char, (a2)), \
715296263Sobrien      ((vector signed short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
715396263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed char, (a2)), \
715496263Sobrien      ((vector unsigned short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
715596263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned char, (a2)), \
715696263Sobrien      ((vector unsigned short) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
715796263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
715896263Sobrien      ((vector signed char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
715996263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
716096263Sobrien      ((vector signed char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
716196263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
716296263Sobrien      ((vector unsigned char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
716396263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
716496263Sobrien      ((vector unsigned char) __builtin_altivec_vsro ((vector signed int) (a1), (vector signed int) (a2))), \
716590075Sobrien    __altivec_link_error_invalid_argument ()))))))))))))))
716690075Sobrien
716790075Sobrien#define vec_st(a1, a2, a3) \
716896263Sobrien  __builtin_altivec_stvx ((vector signed int) (a1), (a2), (a3))
716990075Sobrien
717090075Sobrien#define vec_stl(a1, a2, a3) \
717196263Sobrien  __builtin_altivec_stvxl ((vector signed int) (a1), (a2), (a3))
717290075Sobrien
717390075Sobrien#define vec_ste(a, b, c) \
717496263Sobrien__ch (__un_args_eq (vector unsigned char, (a)), \
717596263Sobrien      __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \
717696263Sobrien__ch (__un_args_eq (vector signed char, (a)), \
717796263Sobrien      __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \
717896263Sobrien__ch (__un_args_eq (vector unsigned short, (a)), \
717996263Sobrien     __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \
718096263Sobrien__ch (__un_args_eq (vector signed short, (a)), \
718196263Sobrien     __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \
718296263Sobrien__ch (__un_args_eq (vector unsigned int, (a)), \
718396263Sobrien     __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
718496263Sobrien__ch (__un_args_eq (vector signed int, (a)), \
718596263Sobrien     __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
718696263Sobrien__ch (__un_args_eq (vector float, (a)), \
718796263Sobrien     __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
718890075Sobrien     __altivec_link_error_invalid_argument ())))))))
718990075Sobrien
719096263Sobrien#define vec_stvewx(a, b, c) \
719196263Sobrien__ch (__un_args_eq (vector unsigned int, (a)), \
719296263Sobrien     __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
719396263Sobrien__ch (__un_args_eq (vector signed int, (a)), \
719496263Sobrien     __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
719596263Sobrien__ch (__un_args_eq (vector float, (a)), \
719696263Sobrien     __builtin_altivec_stvewx ((vector signed int) (a), (b), (c)), \
719796263Sobrien__altivec_link_error_invalid_argument ())))
719896263Sobrien
719996263Sobrien#define vec_stvehx(a, b, c) \
720096263Sobrien__ch (__un_args_eq (vector unsigned short, (a)), \
720196263Sobrien     __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \
720296263Sobrien__ch (__un_args_eq (vector signed short, (a)), \
720396263Sobrien     __builtin_altivec_stvehx ((vector signed short) (a), (b), (c)), \
720496263Sobrien__altivec_link_error_invalid_argument ()))
720596263Sobrien
720696263Sobrien#define vec_stvebx(a, b, c) \
720796263Sobrien__ch (__un_args_eq (vector unsigned char, (a)), \
720896263Sobrien      __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \
720996263Sobrien__ch (__un_args_eq (vector signed char, (a)), \
721096263Sobrien      __builtin_altivec_stvebx ((vector signed char) (a), (b), (c)), \
721196263Sobrien__altivec_link_error_invalid_argument ()))
721296263Sobrien
721390075Sobrien#define vec_sub(a1, a2) \
721496263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
721596263Sobrien      ((vector signed char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
721696263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
721796263Sobrien      ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
721896263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
721996263Sobrien      ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
722096263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
722196263Sobrien      ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
722296263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
722396263Sobrien      ((vector signed short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
722496263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
722596263Sobrien      ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
722696263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
722796263Sobrien      ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
722896263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
722996263Sobrien      ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
723096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
723196263Sobrien      ((vector signed int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
723296263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
723396263Sobrien      ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
723496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
723596263Sobrien      ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
723696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
723796263Sobrien      ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
723896263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
723996263Sobrien      ((vector float) __builtin_altivec_vsubfp ((vector float) (a1), (vector float) (a2))), \
724090075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
724190075Sobrien
724296263Sobrien#define vec_vsubfp(a1, a2) \
724396263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
724496263Sobrien      ((vector float) __builtin_altivec_vsubfp ((vector float) (a1), (vector float) (a2))), \
724596263Sobrien__altivec_link_error_invalid_argument ())
724690075Sobrien
724796263Sobrien#define vec_vsubuwm(a1, a2) \
724896263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
724996263Sobrien      ((vector signed int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
725096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
725196263Sobrien      ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
725296263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
725396263Sobrien      ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
725496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
725596263Sobrien      ((vector unsigned int) __builtin_altivec_vsubuwm ((vector signed int) (a1), (vector signed int) (a2))), \
725696263Sobrien__altivec_link_error_invalid_argument ()))))
725796263Sobrien
725896263Sobrien#define vec_vsubuhm(a1, a2) \
725996263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
726096263Sobrien      ((vector signed short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
726196263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
726296263Sobrien      ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
726396263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
726496263Sobrien      ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
726596263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
726696263Sobrien      ((vector unsigned short) __builtin_altivec_vsubuhm ((vector signed short) (a1), (vector signed short) (a2))), \
726796263Sobrien__altivec_link_error_invalid_argument ()))))
726896263Sobrien
726996263Sobrien#define vec_vsububm(a1, a2) \
727096263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
727196263Sobrien      ((vector signed char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
727296263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
727396263Sobrien      ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
727496263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
727596263Sobrien      ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
727696263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
727796263Sobrien      ((vector unsigned char) __builtin_altivec_vsububm ((vector signed char) (a1), (vector signed char) (a2))), \
727896263Sobrien__altivec_link_error_invalid_argument ()))))
727996263Sobrien
728096263Sobrien#define vec_subc(a1, a2) ((vector unsigned int) __builtin_altivec_vsubcuw ((vector unsigned int) (a1), (vector unsigned int) (a2)))
728196263Sobrien
728290075Sobrien#define vec_subs(a1, a2) \
728396263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
728496263Sobrien      ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
728596263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
728696263Sobrien      ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
728796263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
728896263Sobrien      ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
728996263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
729096263Sobrien      ((vector signed char) __builtin_altivec_vsubsbs ((vector signed char) (a1), (vector signed char) (a2))), \
729196263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
729296263Sobrien      ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
729396263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
729496263Sobrien      ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
729596263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
729696263Sobrien      ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
729796263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
729896263Sobrien      ((vector signed short) __builtin_altivec_vsubshs ((vector signed short) (a1), (vector signed short) (a2))), \
729996263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
730096263Sobrien      ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
730196263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
730296263Sobrien      ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
730396263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
730496263Sobrien      ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
730596263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
730696263Sobrien      ((vector signed int) __builtin_altivec_vsubsws ((vector signed int) (a1), (vector signed int) (a2))), \
730790075Sobrien    __altivec_link_error_invalid_argument ()))))))))))))
730890075Sobrien
730996263Sobrien#define vec_vsubsws(a1, a2) \
731096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
731196263Sobrien      ((vector signed int) __builtin_altivec_vsubsws ((vector signed int) (a1), (vector signed int) (a2))), \
731296263Sobrien__altivec_link_error_invalid_argument ())
731396263Sobrien
731496263Sobrien#define vec_vsubuws(a1, a2) \
731596263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
731696263Sobrien      ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
731796263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
731896263Sobrien      ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
731996263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
732096263Sobrien      ((vector unsigned int) __builtin_altivec_vsubuws ((vector signed int) (a1), (vector signed int) (a2))), \
732196263Sobrien__altivec_link_error_invalid_argument ())))
732296263Sobrien
732396263Sobrien#define vec_vsubshs(a1, a2) \
732496263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
732596263Sobrien      ((vector signed short) __builtin_altivec_vsubshs ((vector signed short) (a1), (vector signed short) (a2))), \
732696263Sobrien__altivec_link_error_invalid_argument ())
732796263Sobrien
732896263Sobrien#define vec_vsubuhs(a1, a2) \
732996263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
733096263Sobrien      ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
733196263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
733296263Sobrien      ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
733396263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
733496263Sobrien      ((vector unsigned short) __builtin_altivec_vsubuhs ((vector signed short) (a1), (vector signed short) (a2))), \
733596263Sobrien__altivec_link_error_invalid_argument ())))
733696263Sobrien
733796263Sobrien#define vec_vsubsbs(a1, a2) \
733896263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
733996263Sobrien      ((vector signed char) __builtin_altivec_vsubsbs ((vector signed char) (a1), (vector signed char) (a2))), \
734096263Sobrien__altivec_link_error_invalid_argument ())
734196263Sobrien
734296263Sobrien#define vec_vsububs(a1, a2) \
734396263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
734496263Sobrien      ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
734596263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
734696263Sobrien      ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
734796263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
734896263Sobrien      ((vector unsigned char) __builtin_altivec_vsububs ((vector signed char) (a1), (vector signed char) (a2))), \
734996263Sobrien__altivec_link_error_invalid_argument ())))
735096263Sobrien
735190075Sobrien#define vec_sum4s(a1, a2) \
735296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \
735396263Sobrien      ((vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) (a1), (vector signed int) (a2))), \
735496263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed int, (a2)), \
735596263Sobrien      ((vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) (a1), (vector signed int) (a2))), \
735696263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed int, (a2)), \
735796263Sobrien      ((vector signed int) __builtin_altivec_vsum4shs ((vector signed short) (a1), (vector signed int) (a2))), \
735890075Sobrien    __altivec_link_error_invalid_argument ())))
735990075Sobrien
736096263Sobrien#define vec_vsum4shs(a1, a2) \
736196263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed int, (a2)), \
736296263Sobrien      ((vector signed int) __builtin_altivec_vsum4shs ((vector signed short) (a1), (vector signed int) (a2))), \
736396263Sobrien__altivec_link_error_invalid_argument ())
736490075Sobrien
736596263Sobrien#define vec_vsum4sbs(a1, a2) \
736696263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed int, (a2)), \
736796263Sobrien      ((vector signed int) __builtin_altivec_vsum4sbs ((vector signed char) (a1), (vector signed int) (a2))), \
736896263Sobrien__altivec_link_error_invalid_argument ())
736990075Sobrien
737096263Sobrien#define vec_vsum4ubs(a1, a2) \
737196263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned int, (a2)), \
737296263Sobrien      ((vector unsigned int) __builtin_altivec_vsum4ubs ((vector signed char) (a1), (vector signed int) (a2))), \
737396263Sobrien__altivec_link_error_invalid_argument ())
737490075Sobrien
737596263Sobrien#define vec_sum2s(a1, a2) __builtin_altivec_vsum2sws ((a1), (a2))
737696263Sobrien
737796263Sobrien#define vec_sums(a1, a2) __builtin_altivec_vsumsws ((a1), (a2))
737896263Sobrien
737996263Sobrien#define vec_trunc(a1) __builtin_altivec_vrfiz ((a1))
738096263Sobrien
738190075Sobrien#define vec_unpackh(a1) \
738296263Sobrien__ch (__un_args_eq (vector signed char, (a1)), \
738396263Sobrien      ((vector signed short) __builtin_altivec_vupkhsb ((vector signed char) (a1))), \
738496263Sobrien__ch (__un_args_eq (vector signed short, (a1)), \
738596263Sobrien      ((vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) (a1))), \
738696263Sobrien__ch (__un_args_eq (vector signed short, (a1)), \
738796263Sobrien      ((vector signed int) __builtin_altivec_vupkhsh ((vector signed short) (a1))), \
738890075Sobrien    __altivec_link_error_invalid_argument ())))
738990075Sobrien
739096263Sobrien#define vec_vupkhsh(a1) \
739196263Sobrien__ch (__un_args_eq (vector signed short, (a1)), \
739296263Sobrien      ((vector signed int) __builtin_altivec_vupkhsh ((vector signed short) (a1))), \
739396263Sobrien__altivec_link_error_invalid_argument ())
739496263Sobrien
739596263Sobrien#define vec_vupkhpx(a1) \
739696263Sobrien__ch (__un_args_eq (vector signed short, (a1)), \
739796263Sobrien      ((vector unsigned int) __builtin_altivec_vupkhpx ((vector signed short) (a1))), \
739896263Sobrien__altivec_link_error_invalid_argument ())
739996263Sobrien
740096263Sobrien#define vec_vupkhsb(a1) \
740196263Sobrien__ch (__un_args_eq (vector signed char, (a1)), \
740296263Sobrien      ((vector signed short) __builtin_altivec_vupkhsb ((vector signed char) (a1))), \
740396263Sobrien__altivec_link_error_invalid_argument ())
740496263Sobrien
740590075Sobrien#define vec_unpackl(a1) \
740696263Sobrien__ch (__un_args_eq (vector signed char, (a1)), \
740796263Sobrien      ((vector signed short) __builtin_altivec_vupklsb ((vector signed char) (a1))), \
740896263Sobrien__ch (__un_args_eq (vector signed short, (a1)), \
740996263Sobrien      ((vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) (a1))), \
741096263Sobrien__ch (__un_args_eq (vector signed short, (a1)), \
741196263Sobrien      ((vector signed int) __builtin_altivec_vupklsh ((vector signed short) (a1))), \
741290075Sobrien    __altivec_link_error_invalid_argument ())))
741390075Sobrien
741496263Sobrien#define vec_vupklsh(a1) \
741596263Sobrien__ch (__un_args_eq (vector signed short, (a1)), \
741696263Sobrien      ((vector signed int) __builtin_altivec_vupklsh ((vector signed short) (a1))), \
741796263Sobrien__altivec_link_error_invalid_argument ())
741896263Sobrien
741996263Sobrien#define vec_vupklpx(a1) \
742096263Sobrien__ch (__un_args_eq (vector signed short, (a1)), \
742196263Sobrien      ((vector unsigned int) __builtin_altivec_vupklpx ((vector signed short) (a1))), \
742296263Sobrien__altivec_link_error_invalid_argument ())
742396263Sobrien
742496263Sobrien#define vec_vupklsb(a1) \
742596263Sobrien__ch (__un_args_eq (vector signed char, (a1)), \
742696263Sobrien      ((vector signed short) __builtin_altivec_vupklsb ((vector signed char) (a1))), \
742796263Sobrien__altivec_link_error_invalid_argument ())
742896263Sobrien
742990075Sobrien#define vec_xor(a1, a2) \
743096263Sobrien__ch (__bin_args_eq (vector float, ((a1)), vector float, ((a2))), \
743196263Sobrien      ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
743296263Sobrien__ch (__bin_args_eq (vector float, ((a1)), vector unsigned int, ((a2))), \
743396263Sobrien      ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
743496263Sobrien__ch (__bin_args_eq (vector unsigned int, ((a1)), vector float, ((a2))), \
743596263Sobrien      ((vector float) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
743696263Sobrien__ch (__bin_args_eq (vector signed int, ((a1)), vector signed int, ((a2))), \
743796263Sobrien      ((vector signed int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
743896263Sobrien__ch (__bin_args_eq (vector unsigned int, ((a1)), vector unsigned int, ((a2))), \
743996263Sobrien      ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
744096263Sobrien__ch (__bin_args_eq (vector signed int, ((a1)), vector unsigned int, ((a2))), \
744196263Sobrien      ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
744296263Sobrien__ch (__bin_args_eq (vector unsigned int, ((a1)), vector signed int, ((a2))), \
744396263Sobrien      ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
744496263Sobrien__ch (__bin_args_eq (vector unsigned int, ((a1)), vector unsigned int, ((a2))), \
744596263Sobrien      ((vector unsigned int) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
744696263Sobrien__ch (__bin_args_eq (vector unsigned short, ((a1)), vector unsigned short, ((a2))), \
744796263Sobrien      ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
744896263Sobrien__ch (__bin_args_eq (vector signed short, ((a1)), vector unsigned short, ((a2))), \
744996263Sobrien      ((vector signed short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
745096263Sobrien__ch (__bin_args_eq (vector unsigned short, ((a1)), vector signed short, ((a2))), \
745196263Sobrien      ((vector signed short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
745296263Sobrien__ch (__bin_args_eq (vector unsigned short, ((a1)), vector unsigned short, ((a2))), \
745396263Sobrien      ((vector signed short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
745496263Sobrien__ch (__bin_args_eq (vector signed short, ((a1)), vector signed short, ((a2))), \
745596263Sobrien      ((vector signed short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
745696263Sobrien__ch (__bin_args_eq (vector signed short, ((a1)), vector unsigned short, ((a2))), \
745796263Sobrien      ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
745896263Sobrien__ch (__bin_args_eq (vector unsigned short, ((a1)), vector signed short, ((a2))), \
745996263Sobrien      ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
746096263Sobrien__ch (__bin_args_eq (vector unsigned short, ((a1)), vector unsigned short, ((a2))), \
746196263Sobrien      ((vector unsigned short) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
746296263Sobrien__ch (__bin_args_eq (vector unsigned char, ((a1)), vector unsigned char, ((a2))), \
746396263Sobrien      ((vector unsigned char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
746496263Sobrien__ch (__bin_args_eq (vector signed char, ((a1)), vector unsigned char, ((a2))), \
746596263Sobrien      ((vector unsigned char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
746696263Sobrien__ch (__bin_args_eq (vector signed char, ((a1)), vector signed char, ((a2))), \
746796263Sobrien      ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
746896263Sobrien__ch (__bin_args_eq (vector unsigned char, ((a1)), vector unsigned char, ((a2))), \
746996263Sobrien      ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
747096263Sobrien__ch (__bin_args_eq (vector signed char, ((a1)), vector unsigned char, ((a2))), \
747196263Sobrien      ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
747296263Sobrien__ch (__bin_args_eq (vector unsigned char, ((a1)), vector signed char, ((a2))), \
747396263Sobrien      ((vector signed char) __builtin_altivec_vxor ((vector signed int) ((a1)), (vector signed int) ((a2)))), \
747496263Sobrien    __altivec_link_error_invalid_argument ()))))))))))))))))))))))
747590075Sobrien
747696263Sobrien/* Predicates.  */
747796263Sobrien
747890075Sobrien#define vec_all_eq(a1, a2) \
747996263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
748096263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
748196263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
748296263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
748396263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
748496263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
748596263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
748696263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
748796263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
748896263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
748996263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
749096263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
749196263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
749296263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
749396263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
749496263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
749596263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
749696263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
749796263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
749896263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
749996263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
750096263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
750196263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
750296263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
750396263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
750496263Sobrien      __builtin_altivec_vcmpeqfp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \
750590075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
750690075Sobrien
750790075Sobrien#define vec_all_ge(a1, a2) \
750896263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
750996263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
751096263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
751196263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
751296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
751396263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
751496263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
751596263Sobrien      __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a2), (vector signed char) (a1)), \
751696263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
751796263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
751896263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
751996263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
752096263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
752196263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
752296263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
752396263Sobrien      __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a2), (vector signed short) (a1)), \
752496263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
752596263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
752696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
752796263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
752896263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
752996263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
753096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
753196263Sobrien      __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a2), (vector signed int) (a1)), \
753296263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
753396263Sobrien      __builtin_altivec_vcmpgefp_p (__CR6_EQ, (vector float) (a1), (vector float) (a2)), \
753490075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
753590075Sobrien
753690075Sobrien#define vec_all_gt(a1, a2) \
753796263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
753896263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
753996263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
754096263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
754196263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
754296263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
754396263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
754496263Sobrien      __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a1), (vector signed char) (a2)), \
754596263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
754696263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
754796263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
754896263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
754996263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
755096263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
755196263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
755296263Sobrien      __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a1), (vector signed short) (a2)), \
755396263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
755496263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
755596263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
755696263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
755796263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
755896263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
755996263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
756096263Sobrien      __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a1), (vector signed int) (a2)), \
756196263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
756296263Sobrien      __builtin_altivec_vcmpgtfp_p (__CR6_LT, (vector float) (a1), (vector float) (a2)), \
756390075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
756490075Sobrien
756596263Sobrien#define vec_all_in(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ, (a1), (a2))
756690075Sobrien
756790075Sobrien#define vec_all_le(a1, a2) \
756896263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
756996263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
757096263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
757196263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
757296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
757396263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
757496263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
757596263Sobrien      __builtin_altivec_vcmpgtsb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
757696263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
757796263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
757896263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
757996263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
758096263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
758196263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
758296263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
758396263Sobrien      __builtin_altivec_vcmpgtsh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
758496263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
758596263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
758696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
758796263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
758896263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
758996263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
759096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
759196263Sobrien      __builtin_altivec_vcmpgtsw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
759296263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
759396263Sobrien      __builtin_altivec_vcmpgefp_p (__CR6_LT, (vector float) (a2), (vector float) (a1)), \
759490075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
759590075Sobrien
759690075Sobrien#define vec_all_lt(a1, a2) \
759796263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
759896263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
759996263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
760096263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
760196263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
760296263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
760396263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
760496263Sobrien      __builtin_altivec_vcmpgtsb_p (__CR6_LT, (vector signed char) (a2), (vector signed char) (a1)), \
760596263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
760696263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
760796263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
760896263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
760996263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
761096263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
761196263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
761296263Sobrien      __builtin_altivec_vcmpgtsh_p (__CR6_LT, (vector signed short) (a2), (vector signed short) (a1)), \
761396263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
761496263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
761596263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
761696263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
761796263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
761896263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
761996263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
762096263Sobrien      __builtin_altivec_vcmpgtsw_p (__CR6_LT, (vector signed int) (a2), (vector signed int) (a1)), \
762196263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
762296263Sobrien      __builtin_altivec_vcmpgtfp_p (__CR6_LT, (vector float) (a2), (vector float) (a1)), \
762390075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
762490075Sobrien
762596263Sobrien#define vec_all_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1))
762690075Sobrien
762790075Sobrien#define vec_all_ne(a1, a2) \
762896263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
762996263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
763096263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
763196263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
763296263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
763396263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
763496263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
763596263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_EQ, (vector signed char) (a1), (vector signed char) (a2)), \
763696263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
763796263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
763896263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
763996263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
764096263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
764196263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
764296263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
764396263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_EQ, (vector signed short) (a1), (vector signed short) (a2)), \
764496263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
764596263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
764696263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
764796263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
764896263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
764996263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
765096263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
765196263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_EQ, (vector signed int) (a1), (vector signed int) (a2)), \
765296263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
765396263Sobrien      __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (vector float) (a1), (vector float) (a2)), \
765490075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
765590075Sobrien
765696263Sobrien#define vec_all_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a1), (a2))
765790075Sobrien
765896263Sobrien#define vec_all_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a1), (a2))
765990075Sobrien
766096263Sobrien#define vec_all_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_EQ, (a2), (a1))
766190075Sobrien
766296263Sobrien#define vec_all_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_EQ, (a2), (a1))
766390075Sobrien
766496263Sobrien#define vec_all_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ, (a1), (a1))
766590075Sobrien
766690075Sobrien#define vec_any_eq(a1, a2) \
766796263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
766896263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
766996263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
767096263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
767196263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
767296263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
767396263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
767496263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
767596263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
767696263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
767796263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
767896263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
767996263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
768096263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
768196263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
768296263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
768396263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
768496263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
768596263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
768696263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
768796263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
768896263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
768996263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
769096263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
769196263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
769296263Sobrien      __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \
769390075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
769490075Sobrien
769590075Sobrien#define vec_any_ge(a1, a2) \
769696263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
769796263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
769896263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
769996263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
770096263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
770196263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
770296263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
770396263Sobrien      __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a2), (vector signed char) (a1)), \
770496263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
770596263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
770696263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
770796263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
770896263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
770996263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
771096263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
771196263Sobrien      __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a2), (vector signed short) (a1)), \
771296263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
771396263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
771496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
771596263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
771696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
771796263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
771896263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
771996263Sobrien      __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a2), (vector signed int) (a1)), \
772096263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
772196263Sobrien      __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \
772290075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
772390075Sobrien
772490075Sobrien#define vec_any_gt(a1, a2) \
772596263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
772696263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
772796263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
772896263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
772996263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
773096263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
773196263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
773296263Sobrien      __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a1), (vector signed char) (a2)), \
773396263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
773496263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
773596263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
773696263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
773796263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
773896263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
773996263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
774096263Sobrien      __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a1), (vector signed short) (a2)), \
774196263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
774296263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
774396263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
774496263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
774596263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
774696263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
774796263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
774896263Sobrien      __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a1), (vector signed int) (a2)), \
774996263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
775096263Sobrien      __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, (vector float) (a1), (vector float) (a2)), \
775190075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
775290075Sobrien
775390075Sobrien#define vec_any_le(a1, a2) \
775496263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
775596263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
775696263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
775796263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
775896263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
775996263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
776096263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
776196263Sobrien      __builtin_altivec_vcmpgtsb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
776296263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
776396263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
776496263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
776596263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
776696263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
776796263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
776896263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
776996263Sobrien      __builtin_altivec_vcmpgtsh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
777096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
777196263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
777296263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
777396263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
777496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
777596263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
777696263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
777796263Sobrien      __builtin_altivec_vcmpgtsw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
777896263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
777996263Sobrien      __builtin_altivec_vcmpgefp_p (__CR6_EQ_REV, (vector float) (a2), (vector float) (a1)), \
778090075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
778190075Sobrien
778290075Sobrien#define vec_any_lt(a1, a2) \
778396263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
778496263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
778596263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
778696263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
778796263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
778896263Sobrien      __builtin_altivec_vcmpgtub_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
778996263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
779096263Sobrien      __builtin_altivec_vcmpgtsb_p (__CR6_EQ_REV, (vector signed char) (a2), (vector signed char) (a1)), \
779196263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
779296263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
779396263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
779496263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
779596263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
779696263Sobrien      __builtin_altivec_vcmpgtuh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
779796263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
779896263Sobrien      __builtin_altivec_vcmpgtsh_p (__CR6_EQ_REV, (vector signed short) (a2), (vector signed short) (a1)), \
779996263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
780096263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
780196263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
780296263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
780396263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
780496263Sobrien      __builtin_altivec_vcmpgtuw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
780596263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
780696263Sobrien      __builtin_altivec_vcmpgtsw_p (__CR6_EQ_REV, (vector signed int) (a2), (vector signed int) (a1)), \
780796263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
780896263Sobrien      __builtin_altivec_vcmpgtfp_p (__CR6_EQ_REV, (vector float) (a2), (vector float) (a1)), \
780990075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
781090075Sobrien
781196263Sobrien#define vec_any_nan(a1) __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, a1, a1)
781290075Sobrien
781390075Sobrien#define vec_any_ne(a1, a2) \
781496263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector unsigned char, (a2)), \
781596263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
781696263Sobrien__ch (__bin_args_eq (vector signed char, (a1), vector signed char, (a2)), \
781796263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
781896263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector signed char, (a2)), \
781996263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
782096263Sobrien__ch (__bin_args_eq (vector unsigned char, (a1), vector unsigned char, (a2)), \
782196263Sobrien      __builtin_altivec_vcmpequb_p (__CR6_LT_REV, (vector signed char) (a1), (vector signed char) (a2)), \
782296263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector unsigned short, (a2)), \
782396263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
782496263Sobrien__ch (__bin_args_eq (vector signed short, (a1), vector signed short, (a2)), \
782596263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
782696263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector signed short, (a2)), \
782796263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
782896263Sobrien__ch (__bin_args_eq (vector unsigned short, (a1), vector unsigned short, (a2)), \
782996263Sobrien      __builtin_altivec_vcmpequh_p (__CR6_LT_REV, (vector signed short) (a1), (vector signed short) (a2)), \
783096263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector unsigned int, (a2)), \
783196263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
783296263Sobrien__ch (__bin_args_eq (vector signed int, (a1), vector signed int, (a2)), \
783396263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
783496263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector signed int, (a2)), \
783596263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
783696263Sobrien__ch (__bin_args_eq (vector unsigned int, (a1), vector unsigned int, (a2)), \
783796263Sobrien      __builtin_altivec_vcmpequw_p (__CR6_LT_REV, (vector signed int) (a1), (vector signed int) (a2)), \
783896263Sobrien__ch (__bin_args_eq (vector float, (a1), vector float, (a2)), \
783996263Sobrien      __builtin_altivec_vcmpeqfp_p (__CR6_LT_REV, (vector float) (a1), (vector float) (a2)), \
784090075Sobrien    __altivec_link_error_invalid_argument ())))))))))))))
784190075Sobrien
784296263Sobrien#define vec_any_nge(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a1), (a2))
784390075Sobrien
784496263Sobrien#define vec_any_ngt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a1), (a2))
784590075Sobrien
784696263Sobrien#define vec_any_nle(a1, a2) __builtin_altivec_vcmpgefp_p (__CR6_LT_REV, (a2), (a1))
784790075Sobrien
784896263Sobrien#define vec_any_nlt(a1, a2) __builtin_altivec_vcmpgtfp_p (__CR6_LT_REV, (a2), (a1))
784990075Sobrien
785096263Sobrien#define vec_any_numeric(a1) __builtin_altivec_vcmpeqfp_p (__CR6_EQ_REV, (a1), (a1))
785190075Sobrien
785296263Sobrien#define vec_any_out(a1, a2) __builtin_altivec_vcmpbfp_p (__CR6_EQ_REV, (a1), (a2))
785390075Sobrien
785490075Sobrien#endif /* __cplusplus */
785590075Sobrien
785690075Sobrien#endif /* _ALTIVEC_H */
7857