Home | History | Annotate | Line # | Download | only in spu
vmx2spu.h revision 1.1.1.1.4.2
      1  1.1.1.1.4.2  yamt /* Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc.
      2  1.1.1.1.4.2  yamt 
      3  1.1.1.1.4.2  yamt    This file is free software; you can redistribute it and/or modify it under
      4  1.1.1.1.4.2  yamt    the terms of the GNU General Public License as published by the Free
      5  1.1.1.1.4.2  yamt    Software Foundation; either version 3 of the License, or (at your option)
      6  1.1.1.1.4.2  yamt    any later version.
      7  1.1.1.1.4.2  yamt 
      8  1.1.1.1.4.2  yamt    This file is distributed in the hope that it will be useful, but WITHOUT
      9  1.1.1.1.4.2  yamt    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     10  1.1.1.1.4.2  yamt    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     11  1.1.1.1.4.2  yamt    for more details.
     12  1.1.1.1.4.2  yamt 
     13  1.1.1.1.4.2  yamt    Under Section 7 of GPL version 3, you are granted additional
     14  1.1.1.1.4.2  yamt    permissions described in the GCC Runtime Library Exception, version
     15  1.1.1.1.4.2  yamt    3.1, as published by the Free Software Foundation.
     16  1.1.1.1.4.2  yamt 
     17  1.1.1.1.4.2  yamt    You should have received a copy of the GNU General Public License and
     18  1.1.1.1.4.2  yamt    a copy of the GCC Runtime Library Exception along with this program;
     19  1.1.1.1.4.2  yamt    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     20  1.1.1.1.4.2  yamt    <http://www.gnu.org/licenses/>.  */
     21  1.1.1.1.4.2  yamt 
     22  1.1.1.1.4.2  yamt #ifndef _VMX2SPU_H_
     23  1.1.1.1.4.2  yamt #define _VMX2SPU_H_	1
     24  1.1.1.1.4.2  yamt 
     25  1.1.1.1.4.2  yamt #ifdef __cplusplus
     26  1.1.1.1.4.2  yamt 
     27  1.1.1.1.4.2  yamt #ifdef __SPU__
     28  1.1.1.1.4.2  yamt 
     29  1.1.1.1.4.2  yamt #include <spu_intrinsics.h>
     30  1.1.1.1.4.2  yamt #include <vec_types.h>
     31  1.1.1.1.4.2  yamt 
     32  1.1.1.1.4.2  yamt /* This file maps generic VMX intrinsics and predicates to the SPU using
     33  1.1.1.1.4.2  yamt  * overloaded C++ functions.
     34  1.1.1.1.4.2  yamt  */
     35  1.1.1.1.4.2  yamt 
     36  1.1.1.1.4.2  yamt /************************************************************************
     37  1.1.1.1.4.2  yamt  *                        INTRINSICS
     38  1.1.1.1.4.2  yamt  ************************************************************************/
     39  1.1.1.1.4.2  yamt 
     40  1.1.1.1.4.2  yamt /* vec_abs (vector absolute value)
     41  1.1.1.1.4.2  yamt  * =======
     42  1.1.1.1.4.2  yamt  */
     43  1.1.1.1.4.2  yamt static inline vec_char16 vec_abs(vec_char16 a)
     44  1.1.1.1.4.2  yamt {
     45  1.1.1.1.4.2  yamt   vec_char16 minus_a;
     46  1.1.1.1.4.2  yamt 
     47  1.1.1.1.4.2  yamt   minus_a = (vec_char16)(spu_add((vec_ushort8)(spu_and(spu_xor(a, 0xFF), 0x7F)), 0x101));
     48  1.1.1.1.4.2  yamt   return (spu_sel(minus_a, a, spu_cmpgt(a, -1)));
     49  1.1.1.1.4.2  yamt }
     50  1.1.1.1.4.2  yamt 
     51  1.1.1.1.4.2  yamt static inline vec_short8 vec_abs(vec_short8 a)
     52  1.1.1.1.4.2  yamt {
     53  1.1.1.1.4.2  yamt   return (spu_sel(spu_sub(0, a), a, spu_cmpgt(a, -1)));
     54  1.1.1.1.4.2  yamt }
     55  1.1.1.1.4.2  yamt 
     56  1.1.1.1.4.2  yamt static inline vec_int4 vec_abs(vec_int4 a)
     57  1.1.1.1.4.2  yamt {
     58  1.1.1.1.4.2  yamt   return (spu_sel(spu_sub(0, a), a, spu_cmpgt(a, -1)));
     59  1.1.1.1.4.2  yamt }
     60  1.1.1.1.4.2  yamt 
     61  1.1.1.1.4.2  yamt static inline vec_float4 vec_abs(vec_float4 a)
     62  1.1.1.1.4.2  yamt {
     63  1.1.1.1.4.2  yamt   return ((vec_float4)(spu_rlmask(spu_sl((vec_uint4)(a), 1), -1)));
     64  1.1.1.1.4.2  yamt }
     65  1.1.1.1.4.2  yamt 
     66  1.1.1.1.4.2  yamt /* vec_abss (vector absolute value saturate)
     67  1.1.1.1.4.2  yamt  * ========
     68  1.1.1.1.4.2  yamt  */
     69  1.1.1.1.4.2  yamt static inline vec_char16 vec_abss(vec_char16 a)
     70  1.1.1.1.4.2  yamt {
     71  1.1.1.1.4.2  yamt   vec_char16 minus_a;
     72  1.1.1.1.4.2  yamt 
     73  1.1.1.1.4.2  yamt   minus_a = (vec_char16)spu_add((vec_short8)(spu_xor(a, -1)),
     74  1.1.1.1.4.2  yamt 				(vec_short8)(spu_and(spu_cmpgt((vec_uchar16)(a), 0x80), 1)));
     75  1.1.1.1.4.2  yamt   return (spu_sel(minus_a, a, spu_cmpgt(a, -1)));
     76  1.1.1.1.4.2  yamt }
     77  1.1.1.1.4.2  yamt 
     78  1.1.1.1.4.2  yamt static inline vec_short8 vec_abss(vec_short8 a)
     79  1.1.1.1.4.2  yamt {
     80  1.1.1.1.4.2  yamt   vec_short8 minus_a;
     81  1.1.1.1.4.2  yamt 
     82  1.1.1.1.4.2  yamt   minus_a = spu_add(spu_sub(0, a), (vec_short8)(spu_cmpeq(a, ((vec_short8){0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000,0x8000}))));
     83  1.1.1.1.4.2  yamt   return (spu_sel(minus_a, a, spu_cmpgt(a, -1)));
     84  1.1.1.1.4.2  yamt }
     85  1.1.1.1.4.2  yamt 
     86  1.1.1.1.4.2  yamt static inline vec_int4 vec_abss(vec_int4 a)
     87  1.1.1.1.4.2  yamt {
     88  1.1.1.1.4.2  yamt   vec_int4 minus_a;
     89  1.1.1.1.4.2  yamt 
     90  1.1.1.1.4.2  yamt   minus_a = spu_add(spu_sub(0, a), (vec_int4)(spu_cmpeq(a, ((vec_int4){0x80000000,0x80000000,0x80000000,0x80000000}))));
     91  1.1.1.1.4.2  yamt   return (spu_sel(minus_a, a, spu_cmpgt(a, -1)));
     92  1.1.1.1.4.2  yamt }
     93  1.1.1.1.4.2  yamt 
     94  1.1.1.1.4.2  yamt 
     95  1.1.1.1.4.2  yamt /* vec_add (vector add)
     96  1.1.1.1.4.2  yamt  * =======
     97  1.1.1.1.4.2  yamt  */
     98  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_add(vec_uchar16 a, vec_uchar16 b)
     99  1.1.1.1.4.2  yamt {
    100  1.1.1.1.4.2  yamt   return ((vec_uchar16)(spu_sel(spu_add((vec_ushort8)(a), (vec_ushort8)(b)),
    101  1.1.1.1.4.2  yamt 				spu_add(spu_and((vec_ushort8)(a), 0xFF00), spu_and((vec_ushort8)(b), 0xFF00)),
    102  1.1.1.1.4.2  yamt 				spu_splats((unsigned short)(0xFF00)))));
    103  1.1.1.1.4.2  yamt }
    104  1.1.1.1.4.2  yamt 
    105  1.1.1.1.4.2  yamt static inline vec_char16 vec_add(vec_char16 a, vec_char16 b)
    106  1.1.1.1.4.2  yamt {
    107  1.1.1.1.4.2  yamt   return ((vec_char16)vec_add((vec_uchar16)(a), (vec_uchar16)(b)));
    108  1.1.1.1.4.2  yamt }
    109  1.1.1.1.4.2  yamt 
    110  1.1.1.1.4.2  yamt static inline vec_char16 vec_add(vec_bchar16 a, vec_char16 b)
    111  1.1.1.1.4.2  yamt {
    112  1.1.1.1.4.2  yamt   return ((vec_char16)vec_add((vec_uchar16)(a), (vec_uchar16)(b)));
    113  1.1.1.1.4.2  yamt }
    114  1.1.1.1.4.2  yamt 
    115  1.1.1.1.4.2  yamt static inline vec_char16 vec_add(vec_char16 a, vec_bchar16 b)
    116  1.1.1.1.4.2  yamt {
    117  1.1.1.1.4.2  yamt   return ((vec_char16)vec_add((vec_uchar16)(a), (vec_uchar16)(b)));
    118  1.1.1.1.4.2  yamt }
    119  1.1.1.1.4.2  yamt 
    120  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_add(vec_ushort8 a, vec_ushort8 b)
    121  1.1.1.1.4.2  yamt {
    122  1.1.1.1.4.2  yamt   return (spu_add(a, b));
    123  1.1.1.1.4.2  yamt }
    124  1.1.1.1.4.2  yamt 
    125  1.1.1.1.4.2  yamt static inline vec_short8 vec_add(vec_short8 a, vec_short8 b)
    126  1.1.1.1.4.2  yamt {
    127  1.1.1.1.4.2  yamt   return (spu_add(a, b));
    128  1.1.1.1.4.2  yamt }
    129  1.1.1.1.4.2  yamt 
    130  1.1.1.1.4.2  yamt static inline vec_short8 vec_add(vec_bshort8 a, vec_short8 b)
    131  1.1.1.1.4.2  yamt {
    132  1.1.1.1.4.2  yamt   return (spu_add((vec_short8)(a), b));
    133  1.1.1.1.4.2  yamt }
    134  1.1.1.1.4.2  yamt 
    135  1.1.1.1.4.2  yamt static inline vec_short8 vec_add(vec_short8 a, vec_bshort8 b)
    136  1.1.1.1.4.2  yamt {
    137  1.1.1.1.4.2  yamt   return (spu_add(a, (vec_short8)(b)));
    138  1.1.1.1.4.2  yamt }
    139  1.1.1.1.4.2  yamt 
    140  1.1.1.1.4.2  yamt static inline vec_uint4 vec_add(vec_uint4 a, vec_uint4 b)
    141  1.1.1.1.4.2  yamt {
    142  1.1.1.1.4.2  yamt   return (spu_add(a, b));
    143  1.1.1.1.4.2  yamt }
    144  1.1.1.1.4.2  yamt 
    145  1.1.1.1.4.2  yamt static inline vec_int4 vec_add(vec_int4 a, vec_int4 b)
    146  1.1.1.1.4.2  yamt {
    147  1.1.1.1.4.2  yamt   return (spu_add(a, b));
    148  1.1.1.1.4.2  yamt }
    149  1.1.1.1.4.2  yamt 
    150  1.1.1.1.4.2  yamt static inline vec_int4 vec_add(vec_bint4 a, vec_int4 b)
    151  1.1.1.1.4.2  yamt {
    152  1.1.1.1.4.2  yamt   return (spu_add((vec_int4)(a), b));
    153  1.1.1.1.4.2  yamt }
    154  1.1.1.1.4.2  yamt 
    155  1.1.1.1.4.2  yamt static inline vec_int4 vec_add(vec_int4 a, vec_bint4 b)
    156  1.1.1.1.4.2  yamt {
    157  1.1.1.1.4.2  yamt   return (spu_add(a, (vec_int4)(b)));
    158  1.1.1.1.4.2  yamt }
    159  1.1.1.1.4.2  yamt 
    160  1.1.1.1.4.2  yamt static inline vec_float4 vec_add(vec_float4 a, vec_float4 b)
    161  1.1.1.1.4.2  yamt {
    162  1.1.1.1.4.2  yamt   return (spu_add(a, b));
    163  1.1.1.1.4.2  yamt }
    164  1.1.1.1.4.2  yamt 
    165  1.1.1.1.4.2  yamt /* vec_addc (vector add carryout unsigned word)
    166  1.1.1.1.4.2  yamt  * ========
    167  1.1.1.1.4.2  yamt  */
    168  1.1.1.1.4.2  yamt #define vec_addc(_a, _b)	spu_genc(_a, _b)
    169  1.1.1.1.4.2  yamt 
    170  1.1.1.1.4.2  yamt /* vec_adds (vector add saturated)
    171  1.1.1.1.4.2  yamt  * ========
    172  1.1.1.1.4.2  yamt  */
    173  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_adds(vec_uchar16 a, vec_uchar16 b)
    174  1.1.1.1.4.2  yamt {
    175  1.1.1.1.4.2  yamt   vec_uchar16 s1, s2, s, d;
    176  1.1.1.1.4.2  yamt 
    177  1.1.1.1.4.2  yamt   s1 = (vec_uchar16)(spu_add(spu_rlmask((vec_ushort8)(a), -8), spu_rlmask((vec_ushort8)(b), -8)));
    178  1.1.1.1.4.2  yamt   s2 = (vec_uchar16)(spu_add(spu_and((vec_ushort8)(a), 0xFF), spu_and((vec_ushort8)(b), 0xFF)));
    179  1.1.1.1.4.2  yamt   s  = spu_shuffle(s1, s2, ((vec_uchar16){0, 16,  2, 18,  4, 20,  6, 22,
    180  1.1.1.1.4.2  yamt 				          8, 24, 10, 26, 12, 28, 14, 30}));
    181  1.1.1.1.4.2  yamt   d  = spu_shuffle(s1, s2, ((vec_uchar16){1, 17,  3, 19,  5, 21,  7, 23,
    182  1.1.1.1.4.2  yamt 				          9, 25, 11, 27, 13, 29, 15, 31}));
    183  1.1.1.1.4.2  yamt   return (spu_or(d, spu_cmpeq(s, 1)));
    184  1.1.1.1.4.2  yamt }
    185  1.1.1.1.4.2  yamt 
    186  1.1.1.1.4.2  yamt static inline vec_char16 vec_adds(vec_char16 a, vec_char16 b)
    187  1.1.1.1.4.2  yamt {
    188  1.1.1.1.4.2  yamt   vec_uchar16 s1, s2, s, d;
    189  1.1.1.1.4.2  yamt 
    190  1.1.1.1.4.2  yamt   s1 = (vec_uchar16)(spu_add(spu_rlmask((vec_ushort8)(a), -8), spu_rlmask((vec_ushort8)(b), -8)));
    191  1.1.1.1.4.2  yamt   s2 = (vec_uchar16)(spu_add(spu_and((vec_ushort8)(a), 0xFF), spu_and((vec_ushort8)(b), 0xFF)));
    192  1.1.1.1.4.2  yamt   s  = spu_shuffle(s1, s2, ((vec_uchar16){1, 17,  3, 19,  5, 21,  7, 23,
    193  1.1.1.1.4.2  yamt 				          9, 25, 11, 27, 13, 29, 15, 31}));
    194  1.1.1.1.4.2  yamt   d = spu_sel(s, spu_splats((unsigned char)0x7F), spu_cmpgt(spu_and(s, (vec_uchar16)(spu_nor(a, b))), 0x7F));
    195  1.1.1.1.4.2  yamt   d = spu_sel(d, spu_splats((unsigned char)0x80), spu_cmpgt(spu_nor(s, (vec_uchar16)(spu_nand(a, b))), 0x7F));
    196  1.1.1.1.4.2  yamt   return ((vec_char16)(d));
    197  1.1.1.1.4.2  yamt }
    198  1.1.1.1.4.2  yamt 
    199  1.1.1.1.4.2  yamt static inline vec_char16 vec_adds(vec_bchar16 a, vec_char16 b)
    200  1.1.1.1.4.2  yamt {
    201  1.1.1.1.4.2  yamt   return (vec_adds((vec_char16)(a), b));
    202  1.1.1.1.4.2  yamt }
    203  1.1.1.1.4.2  yamt 
    204  1.1.1.1.4.2  yamt static inline vec_char16 vec_adds(vec_char16 a, vec_bchar16 b)
    205  1.1.1.1.4.2  yamt {
    206  1.1.1.1.4.2  yamt   return (vec_adds(a, (vec_char16)(b)));
    207  1.1.1.1.4.2  yamt }
    208  1.1.1.1.4.2  yamt 
    209  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_adds(vec_ushort8 a, vec_ushort8 b)
    210  1.1.1.1.4.2  yamt {
    211  1.1.1.1.4.2  yamt   vec_ushort8 s, d;
    212  1.1.1.1.4.2  yamt 
    213  1.1.1.1.4.2  yamt   s = spu_add(a, b);
    214  1.1.1.1.4.2  yamt   d = spu_or(s, spu_rlmaska(spu_sel(spu_xor(s, -1), a, spu_eqv(a, b)), -15));
    215  1.1.1.1.4.2  yamt   return (d);
    216  1.1.1.1.4.2  yamt }
    217  1.1.1.1.4.2  yamt 
    218  1.1.1.1.4.2  yamt static inline vec_short8 vec_adds(vec_short8 a, vec_short8 b)
    219  1.1.1.1.4.2  yamt {
    220  1.1.1.1.4.2  yamt   vec_short8 s, d;
    221  1.1.1.1.4.2  yamt 
    222  1.1.1.1.4.2  yamt   s = spu_add(a, b);
    223  1.1.1.1.4.2  yamt   d = spu_sel(s, spu_splats((signed short)0x7FFF), (vec_ushort8)(spu_rlmaska(spu_and(s, spu_nor(a, b)), -15)));
    224  1.1.1.1.4.2  yamt   d = spu_sel(d, spu_splats((signed short)0x8000), (vec_ushort8)(spu_rlmaska(spu_nor(s, spu_nand(a, b)), -15)));
    225  1.1.1.1.4.2  yamt   return (d);
    226  1.1.1.1.4.2  yamt }
    227  1.1.1.1.4.2  yamt 
    228  1.1.1.1.4.2  yamt static inline vec_short8 vec_adds(vec_bshort8 a, vec_short8 b)
    229  1.1.1.1.4.2  yamt {
    230  1.1.1.1.4.2  yamt   return (vec_adds((vec_short8)(a), b));
    231  1.1.1.1.4.2  yamt }
    232  1.1.1.1.4.2  yamt 
    233  1.1.1.1.4.2  yamt static inline vec_short8 vec_adds(vec_short8 a, vec_bshort8 b)
    234  1.1.1.1.4.2  yamt {
    235  1.1.1.1.4.2  yamt   return (vec_adds(a, (vec_short8)(b)));
    236  1.1.1.1.4.2  yamt }
    237  1.1.1.1.4.2  yamt 
    238  1.1.1.1.4.2  yamt static inline vec_uint4 vec_adds(vec_uint4 a, vec_uint4 b)
    239  1.1.1.1.4.2  yamt {
    240  1.1.1.1.4.2  yamt   return (spu_or(spu_add(a, b), spu_rlmaska(spu_sl(spu_genc(a, b), 31), -31)));
    241  1.1.1.1.4.2  yamt }
    242  1.1.1.1.4.2  yamt 
    243  1.1.1.1.4.2  yamt static inline vec_int4 vec_adds(vec_int4 a, vec_int4 b)
    244  1.1.1.1.4.2  yamt {
    245  1.1.1.1.4.2  yamt   vec_int4 s, d;
    246  1.1.1.1.4.2  yamt 
    247  1.1.1.1.4.2  yamt   s = spu_add(a, b);
    248  1.1.1.1.4.2  yamt   d = spu_sel(s, spu_splats((signed int)0x7FFFFFFF), (vec_uint4)spu_rlmaska(spu_and(s, spu_nor(a, b)), -31));
    249  1.1.1.1.4.2  yamt   d = spu_sel(d, spu_splats((signed int)0x80000000), (vec_uint4)spu_rlmaska(spu_nor(s, spu_nand(a, b)), -31));
    250  1.1.1.1.4.2  yamt   return (d);
    251  1.1.1.1.4.2  yamt }
    252  1.1.1.1.4.2  yamt 
    253  1.1.1.1.4.2  yamt static inline vec_int4 vec_adds(vec_bint4 a, vec_int4 b)
    254  1.1.1.1.4.2  yamt {
    255  1.1.1.1.4.2  yamt   return (vec_adds((vec_int4)(a), b));
    256  1.1.1.1.4.2  yamt }
    257  1.1.1.1.4.2  yamt 
    258  1.1.1.1.4.2  yamt static inline vec_int4 vec_adds(vec_int4 a, vec_bint4 b)
    259  1.1.1.1.4.2  yamt {
    260  1.1.1.1.4.2  yamt   return (vec_adds(a, (vec_int4)(b)));
    261  1.1.1.1.4.2  yamt }
    262  1.1.1.1.4.2  yamt 
    263  1.1.1.1.4.2  yamt /* vec_and (vector logical and)
    264  1.1.1.1.4.2  yamt  * =======
    265  1.1.1.1.4.2  yamt  */
    266  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_and(vec_uchar16 a, vec_uchar16 b)
    267  1.1.1.1.4.2  yamt {
    268  1.1.1.1.4.2  yamt   return (spu_and(a, b));
    269  1.1.1.1.4.2  yamt }
    270  1.1.1.1.4.2  yamt 
    271  1.1.1.1.4.2  yamt static inline vec_char16 vec_and(vec_char16 a, vec_char16 b)
    272  1.1.1.1.4.2  yamt {
    273  1.1.1.1.4.2  yamt   return (spu_and(a, b));
    274  1.1.1.1.4.2  yamt }
    275  1.1.1.1.4.2  yamt 
    276  1.1.1.1.4.2  yamt static inline vec_char16 vec_and(vec_bchar16 a, vec_char16 b)
    277  1.1.1.1.4.2  yamt {
    278  1.1.1.1.4.2  yamt   return (spu_and((vec_char16)(a), b));
    279  1.1.1.1.4.2  yamt }
    280  1.1.1.1.4.2  yamt 
    281  1.1.1.1.4.2  yamt static inline vec_char16 vec_and(vec_char16 a, vec_bchar16 b)
    282  1.1.1.1.4.2  yamt {
    283  1.1.1.1.4.2  yamt   return (spu_and(a, (vec_char16)(b)));
    284  1.1.1.1.4.2  yamt }
    285  1.1.1.1.4.2  yamt 
    286  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_and(vec_ushort8 a, vec_ushort8 b)
    287  1.1.1.1.4.2  yamt {
    288  1.1.1.1.4.2  yamt   return (spu_and(a, b));
    289  1.1.1.1.4.2  yamt }
    290  1.1.1.1.4.2  yamt 
    291  1.1.1.1.4.2  yamt static inline vec_short8 vec_and(vec_short8 a, vec_short8 b)
    292  1.1.1.1.4.2  yamt {
    293  1.1.1.1.4.2  yamt   return (spu_and(a, b));
    294  1.1.1.1.4.2  yamt }
    295  1.1.1.1.4.2  yamt 
    296  1.1.1.1.4.2  yamt static inline vec_short8 vec_and(vec_bshort8 a, vec_short8 b)
    297  1.1.1.1.4.2  yamt {
    298  1.1.1.1.4.2  yamt   return (spu_and((vec_short8)(a), b));
    299  1.1.1.1.4.2  yamt }
    300  1.1.1.1.4.2  yamt 
    301  1.1.1.1.4.2  yamt static inline vec_short8 vec_and(vec_short8 a, vec_bshort8 b)
    302  1.1.1.1.4.2  yamt {
    303  1.1.1.1.4.2  yamt   return (spu_and(a, (vec_short8)(b)));
    304  1.1.1.1.4.2  yamt }
    305  1.1.1.1.4.2  yamt 
    306  1.1.1.1.4.2  yamt static inline vec_uint4 vec_and(vec_uint4 a, vec_uint4 b)
    307  1.1.1.1.4.2  yamt {
    308  1.1.1.1.4.2  yamt   return (spu_and(a, b));
    309  1.1.1.1.4.2  yamt }
    310  1.1.1.1.4.2  yamt 
    311  1.1.1.1.4.2  yamt static inline vec_int4 vec_and(vec_int4 a, vec_int4 b)
    312  1.1.1.1.4.2  yamt {
    313  1.1.1.1.4.2  yamt   return (spu_and(a, b));
    314  1.1.1.1.4.2  yamt }
    315  1.1.1.1.4.2  yamt 
    316  1.1.1.1.4.2  yamt static inline vec_int4 vec_and(vec_bint4 a, vec_int4 b)
    317  1.1.1.1.4.2  yamt {
    318  1.1.1.1.4.2  yamt   return (spu_and((vec_int4)(a), b));
    319  1.1.1.1.4.2  yamt }
    320  1.1.1.1.4.2  yamt 
    321  1.1.1.1.4.2  yamt static inline vec_int4 vec_and(vec_int4 a, vec_bint4 b)
    322  1.1.1.1.4.2  yamt {
    323  1.1.1.1.4.2  yamt   return (spu_and(a, (vec_int4)(b)));
    324  1.1.1.1.4.2  yamt }
    325  1.1.1.1.4.2  yamt 
    326  1.1.1.1.4.2  yamt static inline vec_float4 vec_and(vec_float4 a, vec_float4 b)
    327  1.1.1.1.4.2  yamt {
    328  1.1.1.1.4.2  yamt   return (spu_and(a, b));
    329  1.1.1.1.4.2  yamt }
    330  1.1.1.1.4.2  yamt 
    331  1.1.1.1.4.2  yamt static inline vec_float4 vec_and(vec_bint4 a, vec_float4 b)
    332  1.1.1.1.4.2  yamt {
    333  1.1.1.1.4.2  yamt   return (spu_and((vec_float4)(a),b));
    334  1.1.1.1.4.2  yamt }
    335  1.1.1.1.4.2  yamt 
    336  1.1.1.1.4.2  yamt static inline vec_float4 vec_and(vec_float4 a, vec_bint4 b)
    337  1.1.1.1.4.2  yamt {
    338  1.1.1.1.4.2  yamt   return (spu_and(a, (vec_float4)(b)));
    339  1.1.1.1.4.2  yamt }
    340  1.1.1.1.4.2  yamt 
    341  1.1.1.1.4.2  yamt 
    342  1.1.1.1.4.2  yamt /* vec_andc (vector logical and with complement)
    343  1.1.1.1.4.2  yamt  * ========
    344  1.1.1.1.4.2  yamt  */
    345  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_andc(vec_uchar16 a, vec_uchar16 b)
    346  1.1.1.1.4.2  yamt {
    347  1.1.1.1.4.2  yamt   return (spu_andc(a, b));
    348  1.1.1.1.4.2  yamt }
    349  1.1.1.1.4.2  yamt 
    350  1.1.1.1.4.2  yamt static inline vec_char16 vec_andc(vec_char16 a, vec_char16 b)
    351  1.1.1.1.4.2  yamt {
    352  1.1.1.1.4.2  yamt   return (spu_andc(a, b));
    353  1.1.1.1.4.2  yamt }
    354  1.1.1.1.4.2  yamt 
    355  1.1.1.1.4.2  yamt static inline vec_char16 vec_andc(vec_bchar16 a, vec_char16 b)
    356  1.1.1.1.4.2  yamt {
    357  1.1.1.1.4.2  yamt   return (spu_andc((vec_char16)(a), b));
    358  1.1.1.1.4.2  yamt }
    359  1.1.1.1.4.2  yamt 
    360  1.1.1.1.4.2  yamt static inline vec_char16 vec_andc(vec_char16 a, vec_bchar16 b)
    361  1.1.1.1.4.2  yamt {
    362  1.1.1.1.4.2  yamt   return (spu_andc(a, (vec_char16)(b)));
    363  1.1.1.1.4.2  yamt }
    364  1.1.1.1.4.2  yamt 
    365  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_andc(vec_ushort8 a, vec_ushort8 b)
    366  1.1.1.1.4.2  yamt {
    367  1.1.1.1.4.2  yamt   return (spu_andc(a, b));
    368  1.1.1.1.4.2  yamt }
    369  1.1.1.1.4.2  yamt 
    370  1.1.1.1.4.2  yamt static inline vec_short8 vec_andc(vec_short8 a, vec_short8 b)
    371  1.1.1.1.4.2  yamt {
    372  1.1.1.1.4.2  yamt   return (spu_andc(a, b));
    373  1.1.1.1.4.2  yamt }
    374  1.1.1.1.4.2  yamt 
    375  1.1.1.1.4.2  yamt static inline vec_short8 vec_andc(vec_bshort8 a, vec_short8 b)
    376  1.1.1.1.4.2  yamt {
    377  1.1.1.1.4.2  yamt   return (spu_andc((vec_short8)(a), b));
    378  1.1.1.1.4.2  yamt }
    379  1.1.1.1.4.2  yamt 
    380  1.1.1.1.4.2  yamt static inline vec_short8 vec_andc(vec_short8 a, vec_bshort8 b)
    381  1.1.1.1.4.2  yamt {
    382  1.1.1.1.4.2  yamt   return (spu_andc(a, (vec_short8)(b)));
    383  1.1.1.1.4.2  yamt }
    384  1.1.1.1.4.2  yamt 
    385  1.1.1.1.4.2  yamt static inline vec_uint4 vec_andc(vec_uint4 a, vec_uint4 b)
    386  1.1.1.1.4.2  yamt {
    387  1.1.1.1.4.2  yamt   return (spu_andc(a, b));
    388  1.1.1.1.4.2  yamt }
    389  1.1.1.1.4.2  yamt 
    390  1.1.1.1.4.2  yamt static inline vec_int4 vec_andc(vec_int4 a, vec_int4 b)
    391  1.1.1.1.4.2  yamt {
    392  1.1.1.1.4.2  yamt   return (spu_andc(a, b));
    393  1.1.1.1.4.2  yamt }
    394  1.1.1.1.4.2  yamt 
    395  1.1.1.1.4.2  yamt static inline vec_int4 vec_andc(vec_bint4 a, vec_int4 b)
    396  1.1.1.1.4.2  yamt {
    397  1.1.1.1.4.2  yamt   return (spu_andc((vec_int4)(a), b));
    398  1.1.1.1.4.2  yamt }
    399  1.1.1.1.4.2  yamt 
    400  1.1.1.1.4.2  yamt static inline vec_int4 vec_andc(vec_int4 a, vec_bint4 b)
    401  1.1.1.1.4.2  yamt {
    402  1.1.1.1.4.2  yamt   return (spu_andc(a, (vec_int4)(b)));
    403  1.1.1.1.4.2  yamt }
    404  1.1.1.1.4.2  yamt 
    405  1.1.1.1.4.2  yamt static inline vec_float4 vec_andc(vec_float4 a, vec_float4 b)
    406  1.1.1.1.4.2  yamt {
    407  1.1.1.1.4.2  yamt   return (spu_andc(a,b));
    408  1.1.1.1.4.2  yamt }
    409  1.1.1.1.4.2  yamt 
    410  1.1.1.1.4.2  yamt static inline vec_float4 vec_andc(vec_bint4 a, vec_float4 b)
    411  1.1.1.1.4.2  yamt {
    412  1.1.1.1.4.2  yamt   return (spu_andc((vec_float4)(a),b));
    413  1.1.1.1.4.2  yamt }
    414  1.1.1.1.4.2  yamt 
    415  1.1.1.1.4.2  yamt static inline vec_float4 vec_andc(vec_float4 a, vec_bint4 b)
    416  1.1.1.1.4.2  yamt {
    417  1.1.1.1.4.2  yamt   return (spu_andc(a, (vec_float4)(b)));
    418  1.1.1.1.4.2  yamt }
    419  1.1.1.1.4.2  yamt 
    420  1.1.1.1.4.2  yamt /* vec_avg (vector average)
    421  1.1.1.1.4.2  yamt  * =======
    422  1.1.1.1.4.2  yamt  */
    423  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_avg(vec_uchar16 a, vec_uchar16 b)
    424  1.1.1.1.4.2  yamt {
    425  1.1.1.1.4.2  yamt   return (spu_avg(a, b));
    426  1.1.1.1.4.2  yamt }
    427  1.1.1.1.4.2  yamt 
    428  1.1.1.1.4.2  yamt static inline vec_char16 vec_avg(vec_char16 a, vec_char16 b)
    429  1.1.1.1.4.2  yamt {
    430  1.1.1.1.4.2  yamt   return ((vec_char16)(spu_xor(spu_avg((vec_uchar16)(a), (vec_uchar16)(b)),
    431  1.1.1.1.4.2  yamt 			       (vec_uchar16)(spu_and(spu_xor(a,b), 0x80)))));
    432  1.1.1.1.4.2  yamt }
    433  1.1.1.1.4.2  yamt 
    434  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_avg(vec_ushort8 a, vec_ushort8 b)
    435  1.1.1.1.4.2  yamt {
    436  1.1.1.1.4.2  yamt   return (spu_add(spu_add(spu_rlmask(a, -1), spu_rlmask(b, -1)),
    437  1.1.1.1.4.2  yamt 		  spu_and(spu_or(a, b), 1)));
    438  1.1.1.1.4.2  yamt }
    439  1.1.1.1.4.2  yamt 
    440  1.1.1.1.4.2  yamt static inline vec_short8 vec_avg(vec_short8 a, vec_short8 b)
    441  1.1.1.1.4.2  yamt {
    442  1.1.1.1.4.2  yamt   return (spu_add(spu_add(spu_rlmaska(a, -1), spu_rlmaska(b, -1)),
    443  1.1.1.1.4.2  yamt 		  spu_and(spu_or(a, b), 1)));
    444  1.1.1.1.4.2  yamt }
    445  1.1.1.1.4.2  yamt 
    446  1.1.1.1.4.2  yamt static inline vec_uint4 vec_avg(vec_uint4 a, vec_uint4 b)
    447  1.1.1.1.4.2  yamt {
    448  1.1.1.1.4.2  yamt   return (spu_add(spu_add(spu_rlmask(a, -1), spu_rlmask(b, -1)),
    449  1.1.1.1.4.2  yamt 		  spu_and(spu_or(a, b), 1)));
    450  1.1.1.1.4.2  yamt }
    451  1.1.1.1.4.2  yamt 
    452  1.1.1.1.4.2  yamt static inline vec_int4 vec_avg(vec_int4 a, vec_int4 b)
    453  1.1.1.1.4.2  yamt {
    454  1.1.1.1.4.2  yamt   return (spu_add(spu_add(spu_rlmaska(a, -1), spu_rlmaska(b, -1)),
    455  1.1.1.1.4.2  yamt 		  spu_and(spu_or(a, b), 1)));
    456  1.1.1.1.4.2  yamt }
    457  1.1.1.1.4.2  yamt 
    458  1.1.1.1.4.2  yamt 
    459  1.1.1.1.4.2  yamt /* vec_ceil (vector ceiling)
    460  1.1.1.1.4.2  yamt  * ========
    461  1.1.1.1.4.2  yamt  */
    462  1.1.1.1.4.2  yamt static inline vec_float4 vec_ceil(vec_float4 a)
    463  1.1.1.1.4.2  yamt {
    464  1.1.1.1.4.2  yamt   vec_int4  exp;
    465  1.1.1.1.4.2  yamt   vec_uint4 mask;
    466  1.1.1.1.4.2  yamt 
    467  1.1.1.1.4.2  yamt   a = spu_add(a, (vec_float4)(spu_and(spu_xor(spu_rlmaska((vec_int4)a, -31), -1), spu_splats((signed int)0x3F7FFFFF))));
    468  1.1.1.1.4.2  yamt   exp = spu_sub(127, (vec_int4)(spu_and(spu_rlmask((vec_uint4)(a), -23), 0xFF)));
    469  1.1.1.1.4.2  yamt   mask = spu_rlmask(spu_splats((unsigned int)0x7FFFFF), exp);
    470  1.1.1.1.4.2  yamt   mask = spu_sel(spu_splats((unsigned int)0), mask, spu_cmpgt(exp, -31));
    471  1.1.1.1.4.2  yamt   mask = spu_or(mask, spu_xor((vec_uint4)(spu_rlmaska(spu_add(exp, -1), -31)), -1));
    472  1.1.1.1.4.2  yamt 
    473  1.1.1.1.4.2  yamt   return ((vec_float4)(spu_andc((vec_uint4)(a), mask)));
    474  1.1.1.1.4.2  yamt }
    475  1.1.1.1.4.2  yamt 
    476  1.1.1.1.4.2  yamt 
    477  1.1.1.1.4.2  yamt /* vec_cmpb (vector compare bounds floating-point)
    478  1.1.1.1.4.2  yamt  * ========
    479  1.1.1.1.4.2  yamt  */
    480  1.1.1.1.4.2  yamt static inline vec_int4 vec_cmpb(vec_float4 a, vec_float4 b)
    481  1.1.1.1.4.2  yamt {
    482  1.1.1.1.4.2  yamt   vec_int4 b0 = (vec_int4)spu_splats(0x80000000);
    483  1.1.1.1.4.2  yamt   vec_int4 b1 = (vec_int4)spu_splats(0x40000000);
    484  1.1.1.1.4.2  yamt 
    485  1.1.1.1.4.2  yamt   return (spu_or(spu_and((vec_int4)spu_cmpgt(a, b), b0),
    486  1.1.1.1.4.2  yamt 		 spu_and((vec_int4)spu_cmpgt(spu_xor(b, (vec_float4)(b0)), a), b1)));
    487  1.1.1.1.4.2  yamt }
    488  1.1.1.1.4.2  yamt 
    489  1.1.1.1.4.2  yamt /* vec_cmpeq (vector compare equal)
    490  1.1.1.1.4.2  yamt  * =========
    491  1.1.1.1.4.2  yamt  */
    492  1.1.1.1.4.2  yamt #define vec_cmpeq(_a, _b)	spu_cmpeq(_a, _b)
    493  1.1.1.1.4.2  yamt 
    494  1.1.1.1.4.2  yamt 
    495  1.1.1.1.4.2  yamt /* vec_cmpge (vector compare greater than or equal)
    496  1.1.1.1.4.2  yamt  * =========
    497  1.1.1.1.4.2  yamt  */
    498  1.1.1.1.4.2  yamt static inline vec_bint4 vec_cmpge(vec_float4 a, vec_float4 b)
    499  1.1.1.1.4.2  yamt {
    500  1.1.1.1.4.2  yamt   return (spu_xor(spu_cmpgt(b, a), -1));
    501  1.1.1.1.4.2  yamt }
    502  1.1.1.1.4.2  yamt 
    503  1.1.1.1.4.2  yamt 
    504  1.1.1.1.4.2  yamt /* vec_cmpgt (vector compare greater than)
    505  1.1.1.1.4.2  yamt  * =========
    506  1.1.1.1.4.2  yamt  */
    507  1.1.1.1.4.2  yamt #define vec_cmpgt(_a, _b)	spu_cmpgt(_a, _b)
    508  1.1.1.1.4.2  yamt 
    509  1.1.1.1.4.2  yamt 
    510  1.1.1.1.4.2  yamt /* vec_cmple (vector compare less than or equal)
    511  1.1.1.1.4.2  yamt  * =========
    512  1.1.1.1.4.2  yamt  */
    513  1.1.1.1.4.2  yamt static inline vec_bint4 vec_cmple(vec_float4 a, vec_float4 b)
    514  1.1.1.1.4.2  yamt {
    515  1.1.1.1.4.2  yamt   return (spu_xor(spu_cmpgt(a, b), -1));
    516  1.1.1.1.4.2  yamt }
    517  1.1.1.1.4.2  yamt 
    518  1.1.1.1.4.2  yamt 
    519  1.1.1.1.4.2  yamt /* vec_cmplt (vector compare less than)
    520  1.1.1.1.4.2  yamt  * =========
    521  1.1.1.1.4.2  yamt  */
    522  1.1.1.1.4.2  yamt #define vec_cmplt(_a, _b)	spu_cmpgt(_b, _a)
    523  1.1.1.1.4.2  yamt 
    524  1.1.1.1.4.2  yamt 
    525  1.1.1.1.4.2  yamt /* vec_ctf (vector convert from fixed-point word)
    526  1.1.1.1.4.2  yamt  * =======
    527  1.1.1.1.4.2  yamt  */
    528  1.1.1.1.4.2  yamt #define vec_ctf(_a, _b)		spu_convtf(_a, _b)
    529  1.1.1.1.4.2  yamt 
    530  1.1.1.1.4.2  yamt 
    531  1.1.1.1.4.2  yamt /* vec_cts (vector convert to signed fixed-point word saturate)
    532  1.1.1.1.4.2  yamt  * =======
    533  1.1.1.1.4.2  yamt  */
    534  1.1.1.1.4.2  yamt #define vec_cts(_a, _b)		spu_convts(_a, _b)
    535  1.1.1.1.4.2  yamt 
    536  1.1.1.1.4.2  yamt 
    537  1.1.1.1.4.2  yamt /* vec_ctu (vector convert to unsigned fixed-point word saturate)
    538  1.1.1.1.4.2  yamt  * =======
    539  1.1.1.1.4.2  yamt  */
    540  1.1.1.1.4.2  yamt #define vec_ctu(_a, _b)		spu_convtu(_a, _b)
    541  1.1.1.1.4.2  yamt 
    542  1.1.1.1.4.2  yamt 
    543  1.1.1.1.4.2  yamt /* vec_dss (vector data stream stop)
    544  1.1.1.1.4.2  yamt  * =======
    545  1.1.1.1.4.2  yamt  */
    546  1.1.1.1.4.2  yamt #define vec_dss(_a)
    547  1.1.1.1.4.2  yamt 
    548  1.1.1.1.4.2  yamt 
    549  1.1.1.1.4.2  yamt /* vec_dssall (vector data stream stop all)
    550  1.1.1.1.4.2  yamt  * ==========
    551  1.1.1.1.4.2  yamt  */
    552  1.1.1.1.4.2  yamt #define vec_dssall()
    553  1.1.1.1.4.2  yamt 
    554  1.1.1.1.4.2  yamt 
    555  1.1.1.1.4.2  yamt /* vec_dst (vector data stream touch)
    556  1.1.1.1.4.2  yamt  * =======
    557  1.1.1.1.4.2  yamt  */
    558  1.1.1.1.4.2  yamt #define vec_dst(_a, _b, _c)
    559  1.1.1.1.4.2  yamt 
    560  1.1.1.1.4.2  yamt 
    561  1.1.1.1.4.2  yamt /* vec_dstst (vector data stream touch for store)
    562  1.1.1.1.4.2  yamt  * =========
    563  1.1.1.1.4.2  yamt  */
    564  1.1.1.1.4.2  yamt #define vec_dstst(_a, _b, _c)
    565  1.1.1.1.4.2  yamt 
    566  1.1.1.1.4.2  yamt 
    567  1.1.1.1.4.2  yamt /* vec_dststt (vector data stream touch for store transient)
    568  1.1.1.1.4.2  yamt  * ==========
    569  1.1.1.1.4.2  yamt  */
    570  1.1.1.1.4.2  yamt #define vec_dststt(_a, _b, _c)
    571  1.1.1.1.4.2  yamt 
    572  1.1.1.1.4.2  yamt 
    573  1.1.1.1.4.2  yamt /* vec_dstt (vector data stream touch transient)
    574  1.1.1.1.4.2  yamt  * ========
    575  1.1.1.1.4.2  yamt  */
    576  1.1.1.1.4.2  yamt #define vec_dstt(_a, _b, _c)
    577  1.1.1.1.4.2  yamt 
    578  1.1.1.1.4.2  yamt 
    579  1.1.1.1.4.2  yamt /* vec_expte (vector is 2 raised tp the exponent estimate floating-point)
    580  1.1.1.1.4.2  yamt  * =========
    581  1.1.1.1.4.2  yamt  */
    582  1.1.1.1.4.2  yamt static inline vec_float4 vec_expte(vec_float4 a)
    583  1.1.1.1.4.2  yamt {
    584  1.1.1.1.4.2  yamt   vec_float4 bias, frac, exp;
    585  1.1.1.1.4.2  yamt   vec_int4 ia;
    586  1.1.1.1.4.2  yamt 
    587  1.1.1.1.4.2  yamt   bias = (vec_float4)(spu_andc(spu_splats((signed int)0x3F7FFFFF), spu_rlmaska((vec_int4)(a), -31)));
    588  1.1.1.1.4.2  yamt   ia   = spu_convts(spu_add(a, bias), 0);
    589  1.1.1.1.4.2  yamt   frac = spu_sub(spu_convtf(ia, 0), a);
    590  1.1.1.1.4.2  yamt   exp  = (vec_float4)(spu_sl(spu_add(ia, 127), 23));
    591  1.1.1.1.4.2  yamt 
    592  1.1.1.1.4.2  yamt   return (spu_mul(spu_madd(spu_madd(spu_splats(0.17157287f), frac, spu_splats(-0.67157287f)),
    593  1.1.1.1.4.2  yamt 			   frac, spu_splats(1.0f)), exp));
    594  1.1.1.1.4.2  yamt }
    595  1.1.1.1.4.2  yamt 
    596  1.1.1.1.4.2  yamt 
    597  1.1.1.1.4.2  yamt /* vec_floor (vector floor)
    598  1.1.1.1.4.2  yamt  * =========
    599  1.1.1.1.4.2  yamt  */
    600  1.1.1.1.4.2  yamt static inline vec_float4 vec_floor(vec_float4 a)
    601  1.1.1.1.4.2  yamt {
    602  1.1.1.1.4.2  yamt   vec_int4  exp;
    603  1.1.1.1.4.2  yamt   vec_uint4 mask;
    604  1.1.1.1.4.2  yamt 
    605  1.1.1.1.4.2  yamt   a = spu_sub(a, (vec_float4)(spu_and(spu_rlmaska((vec_int4)a, -31), spu_splats((signed int)0x3F7FFFFF))));
    606  1.1.1.1.4.2  yamt   exp = spu_sub(127, (vec_int4)(spu_and(spu_rlmask((vec_uint4)(a), -23), 0xFF)));
    607  1.1.1.1.4.2  yamt   mask = spu_rlmask(spu_splats((unsigned int)0x7FFFFF), exp);
    608  1.1.1.1.4.2  yamt   mask = spu_sel(spu_splats((unsigned int)0), mask, spu_cmpgt(exp, -31));
    609  1.1.1.1.4.2  yamt   mask = spu_or(mask, spu_xor((vec_uint4)(spu_rlmaska(spu_add(exp, -1), -31)), -1));
    610  1.1.1.1.4.2  yamt 
    611  1.1.1.1.4.2  yamt   return ((vec_float4)(spu_andc((vec_uint4)(a), mask)));
    612  1.1.1.1.4.2  yamt }
    613  1.1.1.1.4.2  yamt 
    614  1.1.1.1.4.2  yamt 
    615  1.1.1.1.4.2  yamt /* vec_ld (vector load indexed)
    616  1.1.1.1.4.2  yamt  * ======
    617  1.1.1.1.4.2  yamt  */
    618  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_ld(int a, unsigned char *b)
    619  1.1.1.1.4.2  yamt {
    620  1.1.1.1.4.2  yamt   return (*((vec_uchar16 *)(b+a)));
    621  1.1.1.1.4.2  yamt }
    622  1.1.1.1.4.2  yamt 
    623  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_ld(int a, vec_uchar16 *b)
    624  1.1.1.1.4.2  yamt {
    625  1.1.1.1.4.2  yamt   return (*((vec_uchar16 *)((unsigned char *)(b)+a)));
    626  1.1.1.1.4.2  yamt }
    627  1.1.1.1.4.2  yamt 
    628  1.1.1.1.4.2  yamt static inline vec_char16 vec_ld(int a, signed char *b)
    629  1.1.1.1.4.2  yamt {
    630  1.1.1.1.4.2  yamt   return (*((vec_char16 *)(b+a)));
    631  1.1.1.1.4.2  yamt }
    632  1.1.1.1.4.2  yamt 
    633  1.1.1.1.4.2  yamt static inline vec_char16 vec_ld(int a, vec_char16 *b)
    634  1.1.1.1.4.2  yamt {
    635  1.1.1.1.4.2  yamt   return (*((vec_char16 *)((signed char *)(b)+a)));
    636  1.1.1.1.4.2  yamt }
    637  1.1.1.1.4.2  yamt 
    638  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_ld(int a, unsigned short *b)
    639  1.1.1.1.4.2  yamt {
    640  1.1.1.1.4.2  yamt   return (*((vec_ushort8 *)((unsigned char *)(b)+a)));
    641  1.1.1.1.4.2  yamt }
    642  1.1.1.1.4.2  yamt 
    643  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_ld(int a, vec_ushort8 *b)
    644  1.1.1.1.4.2  yamt {
    645  1.1.1.1.4.2  yamt   return (*((vec_ushort8 *)((unsigned char *)(b)+a)));
    646  1.1.1.1.4.2  yamt }
    647  1.1.1.1.4.2  yamt 
    648  1.1.1.1.4.2  yamt static inline vec_short8 vec_ld(int a, signed short *b)
    649  1.1.1.1.4.2  yamt {
    650  1.1.1.1.4.2  yamt   return (*((vec_short8 *)((unsigned char *)(b)+a)));
    651  1.1.1.1.4.2  yamt }
    652  1.1.1.1.4.2  yamt 
    653  1.1.1.1.4.2  yamt static inline vec_short8 vec_ld(int a, vec_short8 *b)
    654  1.1.1.1.4.2  yamt {
    655  1.1.1.1.4.2  yamt   return (*((vec_short8 *)((signed char *)(b)+a)));
    656  1.1.1.1.4.2  yamt }
    657  1.1.1.1.4.2  yamt 
    658  1.1.1.1.4.2  yamt static inline vec_uint4 vec_ld(int a, unsigned int *b)
    659  1.1.1.1.4.2  yamt {
    660  1.1.1.1.4.2  yamt   return (*((vec_uint4 *)((unsigned char *)(b)+a)));
    661  1.1.1.1.4.2  yamt }
    662  1.1.1.1.4.2  yamt 
    663  1.1.1.1.4.2  yamt static inline vec_uint4 vec_ld(int a, vec_uint4 *b)
    664  1.1.1.1.4.2  yamt {
    665  1.1.1.1.4.2  yamt   return (*((vec_uint4 *)((unsigned char *)(b)+a)));
    666  1.1.1.1.4.2  yamt }
    667  1.1.1.1.4.2  yamt 
    668  1.1.1.1.4.2  yamt static inline vec_int4 vec_ld(int a, signed int *b)
    669  1.1.1.1.4.2  yamt {
    670  1.1.1.1.4.2  yamt   return (*((vec_int4 *)((unsigned char *)(b)+a)));
    671  1.1.1.1.4.2  yamt }
    672  1.1.1.1.4.2  yamt 
    673  1.1.1.1.4.2  yamt static inline vec_int4 vec_ld(int a, vec_int4 *b)
    674  1.1.1.1.4.2  yamt {
    675  1.1.1.1.4.2  yamt   return (*((vec_int4 *)((signed char *)(b)+a)));
    676  1.1.1.1.4.2  yamt }
    677  1.1.1.1.4.2  yamt 
    678  1.1.1.1.4.2  yamt static inline vec_float4 vec_ld(int a, float *b)
    679  1.1.1.1.4.2  yamt {
    680  1.1.1.1.4.2  yamt   return (*((vec_float4 *)((unsigned char *)(b)+a)));
    681  1.1.1.1.4.2  yamt }
    682  1.1.1.1.4.2  yamt 
    683  1.1.1.1.4.2  yamt static inline vec_float4 vec_ld(int a, vec_float4 *b)
    684  1.1.1.1.4.2  yamt {
    685  1.1.1.1.4.2  yamt   return (*((vec_float4 *)((unsigned char *)(b)+a)));
    686  1.1.1.1.4.2  yamt }
    687  1.1.1.1.4.2  yamt 
    688  1.1.1.1.4.2  yamt /* vec_lde (vector load element indexed)
    689  1.1.1.1.4.2  yamt  * =======
    690  1.1.1.1.4.2  yamt  */
    691  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lde(int a, unsigned char *b)
    692  1.1.1.1.4.2  yamt {
    693  1.1.1.1.4.2  yamt   return (*((vec_uchar16 *)(b+a)));
    694  1.1.1.1.4.2  yamt }
    695  1.1.1.1.4.2  yamt 
    696  1.1.1.1.4.2  yamt static inline vec_char16 vec_lde(int a, signed char *b)
    697  1.1.1.1.4.2  yamt {
    698  1.1.1.1.4.2  yamt   return (*((vec_char16 *)(b+a)));
    699  1.1.1.1.4.2  yamt }
    700  1.1.1.1.4.2  yamt 
    701  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_lde(int a, unsigned short *b)
    702  1.1.1.1.4.2  yamt {
    703  1.1.1.1.4.2  yamt   return (*((vec_ushort8 *)((unsigned char *)(b)+a)));
    704  1.1.1.1.4.2  yamt }
    705  1.1.1.1.4.2  yamt 
    706  1.1.1.1.4.2  yamt static inline vec_short8 vec_lde(int a, signed short *b)
    707  1.1.1.1.4.2  yamt {
    708  1.1.1.1.4.2  yamt   return (*((vec_short8 *)((unsigned char *)(b)+a)));
    709  1.1.1.1.4.2  yamt }
    710  1.1.1.1.4.2  yamt 
    711  1.1.1.1.4.2  yamt 
    712  1.1.1.1.4.2  yamt static inline vec_uint4 vec_lde(int a, unsigned int *b)
    713  1.1.1.1.4.2  yamt {
    714  1.1.1.1.4.2  yamt   return (*((vec_uint4 *)((unsigned char *)(b)+a)));
    715  1.1.1.1.4.2  yamt }
    716  1.1.1.1.4.2  yamt 
    717  1.1.1.1.4.2  yamt static inline vec_int4 vec_lde(int a, signed int *b)
    718  1.1.1.1.4.2  yamt {
    719  1.1.1.1.4.2  yamt   return (*((vec_int4 *)((unsigned char *)(b)+a)));
    720  1.1.1.1.4.2  yamt }
    721  1.1.1.1.4.2  yamt 
    722  1.1.1.1.4.2  yamt 
    723  1.1.1.1.4.2  yamt static inline vec_float4 vec_lde(int a, float *b)
    724  1.1.1.1.4.2  yamt {
    725  1.1.1.1.4.2  yamt   return (*((vec_float4 *)((unsigned char *)(b)+a)));
    726  1.1.1.1.4.2  yamt }
    727  1.1.1.1.4.2  yamt 
    728  1.1.1.1.4.2  yamt /* vec_ldl (vector load indexed LRU)
    729  1.1.1.1.4.2  yamt  * =======
    730  1.1.1.1.4.2  yamt  */
    731  1.1.1.1.4.2  yamt #define vec_ldl(_a, _b)		vec_ld(_a, _b)
    732  1.1.1.1.4.2  yamt 
    733  1.1.1.1.4.2  yamt 
    734  1.1.1.1.4.2  yamt /* vec_loge (vector log2 estimate floating-point)
    735  1.1.1.1.4.2  yamt  * ========
    736  1.1.1.1.4.2  yamt  */
    737  1.1.1.1.4.2  yamt static inline vec_float4 vec_loge(vec_float4 a)
    738  1.1.1.1.4.2  yamt {
    739  1.1.1.1.4.2  yamt   vec_int4 exp;
    740  1.1.1.1.4.2  yamt   vec_float4 frac;
    741  1.1.1.1.4.2  yamt 
    742  1.1.1.1.4.2  yamt   exp  = spu_add((vec_int4)(spu_and(spu_rlmask((vec_uint4)(a), -23), 0xFF)), -127);
    743  1.1.1.1.4.2  yamt   frac = (vec_float4)(spu_sub((vec_int4)(a), spu_sl(exp, 23)));
    744  1.1.1.1.4.2  yamt 
    745  1.1.1.1.4.2  yamt   return (spu_madd(spu_madd(spu_splats(-0.33985f), frac, spu_splats(2.01955f)),
    746  1.1.1.1.4.2  yamt 		   frac, spu_sub(spu_convtf(exp, 0), spu_splats(1.6797f))));
    747  1.1.1.1.4.2  yamt }
    748  1.1.1.1.4.2  yamt 
    749  1.1.1.1.4.2  yamt 
    750  1.1.1.1.4.2  yamt /* vec_lvsl (vector load for shift left)
    751  1.1.1.1.4.2  yamt  * ========
    752  1.1.1.1.4.2  yamt  */
    753  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvsl(int a, unsigned char *b)
    754  1.1.1.1.4.2  yamt {
    755  1.1.1.1.4.2  yamt   return ((vec_uchar16)spu_add((vec_ushort8)(spu_splats((unsigned char)((a + (int)(b)) & 0xF))),
    756  1.1.1.1.4.2  yamt 			       ((vec_ushort8){0x0001, 0x0203, 0x0405, 0x0607,
    757  1.1.1.1.4.2  yamt 				              0x0809, 0x0A0B, 0x0C0D, 0x0E0F})));
    758  1.1.1.1.4.2  yamt }
    759  1.1.1.1.4.2  yamt 
    760  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvsl(int a, signed char *b)
    761  1.1.1.1.4.2  yamt {
    762  1.1.1.1.4.2  yamt   return (vec_lvsl(a, (unsigned char *)b));
    763  1.1.1.1.4.2  yamt }
    764  1.1.1.1.4.2  yamt 
    765  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvsl(int a, unsigned short *b)
    766  1.1.1.1.4.2  yamt {
    767  1.1.1.1.4.2  yamt   return (vec_lvsl(a, (unsigned char *)b));
    768  1.1.1.1.4.2  yamt }
    769  1.1.1.1.4.2  yamt 
    770  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvsl(int a, short *b)
    771  1.1.1.1.4.2  yamt {
    772  1.1.1.1.4.2  yamt   return (vec_lvsl(a, (unsigned char *)b));
    773  1.1.1.1.4.2  yamt }
    774  1.1.1.1.4.2  yamt 
    775  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvsl(int a, unsigned int *b)
    776  1.1.1.1.4.2  yamt {
    777  1.1.1.1.4.2  yamt   return (vec_lvsl(a, (unsigned char *)b));
    778  1.1.1.1.4.2  yamt }
    779  1.1.1.1.4.2  yamt 
    780  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvsl(int a, int *b)
    781  1.1.1.1.4.2  yamt {
    782  1.1.1.1.4.2  yamt   return (vec_lvsl(a, (unsigned char *)b));
    783  1.1.1.1.4.2  yamt }
    784  1.1.1.1.4.2  yamt 
    785  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvsl(int a, float *b)
    786  1.1.1.1.4.2  yamt {
    787  1.1.1.1.4.2  yamt   return (vec_lvsl(a, (unsigned char *)b));
    788  1.1.1.1.4.2  yamt }
    789  1.1.1.1.4.2  yamt 
    790  1.1.1.1.4.2  yamt 
    791  1.1.1.1.4.2  yamt /* vec_lvsr (vector load for shift right)
    792  1.1.1.1.4.2  yamt  * ========
    793  1.1.1.1.4.2  yamt  */
    794  1.1.1.1.4.2  yamt static  inline vec_uchar16 vec_lvsr(int a, unsigned char *b)
    795  1.1.1.1.4.2  yamt {
    796  1.1.1.1.4.2  yamt   return ((vec_uchar16)(spu_sub(((vec_ushort8){0x1011, 0x1213, 0x1415, 0x1617,
    797  1.1.1.1.4.2  yamt 				               0x1819, 0x1A1B, 0x1C1D, 0x1E1F}),
    798  1.1.1.1.4.2  yamt 				(vec_ushort8)(spu_splats((unsigned char)((a + (int)(b)) & 0xF))))));
    799  1.1.1.1.4.2  yamt }
    800  1.1.1.1.4.2  yamt 
    801  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvsr(int a, signed char *b)
    802  1.1.1.1.4.2  yamt {
    803  1.1.1.1.4.2  yamt   return (vec_lvsr(a, (unsigned char *)b));
    804  1.1.1.1.4.2  yamt }
    805  1.1.1.1.4.2  yamt 
    806  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvsr(int a, unsigned short *b)
    807  1.1.1.1.4.2  yamt {
    808  1.1.1.1.4.2  yamt   return (vec_lvsr(a, (unsigned char *)b));
    809  1.1.1.1.4.2  yamt }
    810  1.1.1.1.4.2  yamt 
    811  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvsr(int a, short *b)
    812  1.1.1.1.4.2  yamt {
    813  1.1.1.1.4.2  yamt   return (vec_lvsr(a, (unsigned char *)b));
    814  1.1.1.1.4.2  yamt }
    815  1.1.1.1.4.2  yamt 
    816  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvsr(int a, unsigned int *b)
    817  1.1.1.1.4.2  yamt {
    818  1.1.1.1.4.2  yamt   return (vec_lvsr(a, (unsigned char *)b));
    819  1.1.1.1.4.2  yamt }
    820  1.1.1.1.4.2  yamt 
    821  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvsr(int a, int *b)
    822  1.1.1.1.4.2  yamt {
    823  1.1.1.1.4.2  yamt   return (vec_lvsr(a, (unsigned char *)b));
    824  1.1.1.1.4.2  yamt }
    825  1.1.1.1.4.2  yamt 
    826  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvsr(int a, float *b)
    827  1.1.1.1.4.2  yamt {
    828  1.1.1.1.4.2  yamt   return (vec_lvsr(a, (unsigned char *)b));
    829  1.1.1.1.4.2  yamt }
    830  1.1.1.1.4.2  yamt 
    831  1.1.1.1.4.2  yamt /* vec_madd (vector multiply add)
    832  1.1.1.1.4.2  yamt  * ========
    833  1.1.1.1.4.2  yamt  */
    834  1.1.1.1.4.2  yamt #define vec_madd(_a, _b, _c)	spu_madd(_a, _b, _c)
    835  1.1.1.1.4.2  yamt 
    836  1.1.1.1.4.2  yamt 
    837  1.1.1.1.4.2  yamt 
    838  1.1.1.1.4.2  yamt /* vec_madds (vector multiply add saturate)
    839  1.1.1.1.4.2  yamt  * =========
    840  1.1.1.1.4.2  yamt  */
    841  1.1.1.1.4.2  yamt static inline vec_short8 vec_madds(vec_short8 a, vec_short8 b, vec_short8 c)
    842  1.1.1.1.4.2  yamt {
    843  1.1.1.1.4.2  yamt   return (vec_adds(c, spu_sel((vec_short8)(spu_sl(spu_mule(a, b), 1)),
    844  1.1.1.1.4.2  yamt 			      (vec_short8)(spu_rlmask(spu_mulo(a, b), -15)),
    845  1.1.1.1.4.2  yamt 			      ((vec_ushort8){0, 0xFFFF, 0, 0xFFFF, 0, 0xFFFF, 0, 0xFFFF}))));
    846  1.1.1.1.4.2  yamt }
    847  1.1.1.1.4.2  yamt 
    848  1.1.1.1.4.2  yamt /* vec_max (vector maximum)
    849  1.1.1.1.4.2  yamt  * =======
    850  1.1.1.1.4.2  yamt  */
    851  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_max(vec_uchar16 a, vec_uchar16 b)
    852  1.1.1.1.4.2  yamt {
    853  1.1.1.1.4.2  yamt   return (spu_sel(b, a, spu_cmpgt(a, b)));
    854  1.1.1.1.4.2  yamt }
    855  1.1.1.1.4.2  yamt 
    856  1.1.1.1.4.2  yamt static inline vec_char16 vec_max(vec_char16 a, vec_char16 b)
    857  1.1.1.1.4.2  yamt {
    858  1.1.1.1.4.2  yamt   return (spu_sel(b, a, spu_cmpgt(a, b)));
    859  1.1.1.1.4.2  yamt }
    860  1.1.1.1.4.2  yamt 
    861  1.1.1.1.4.2  yamt static inline vec_char16 vec_max(vec_bchar16 a, vec_char16 b)
    862  1.1.1.1.4.2  yamt {
    863  1.1.1.1.4.2  yamt   return (spu_sel(b, (vec_char16)(a), spu_cmpgt((vec_char16)(a), b)));
    864  1.1.1.1.4.2  yamt }
    865  1.1.1.1.4.2  yamt 
    866  1.1.1.1.4.2  yamt static inline vec_char16 vec_max(vec_char16 a, vec_bchar16 b)
    867  1.1.1.1.4.2  yamt {
    868  1.1.1.1.4.2  yamt   return (spu_sel((vec_char16)(b), a, spu_cmpgt(a, (vec_char16)(b))));
    869  1.1.1.1.4.2  yamt }
    870  1.1.1.1.4.2  yamt 
    871  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_max(vec_ushort8 a, vec_ushort8 b)
    872  1.1.1.1.4.2  yamt {
    873  1.1.1.1.4.2  yamt   return (spu_sel(b, a, spu_cmpgt(a, b)));
    874  1.1.1.1.4.2  yamt }
    875  1.1.1.1.4.2  yamt 
    876  1.1.1.1.4.2  yamt static inline vec_short8 vec_max(vec_short8 a, vec_short8 b)
    877  1.1.1.1.4.2  yamt {
    878  1.1.1.1.4.2  yamt   return (spu_sel(b, a, spu_cmpgt(a, b)));
    879  1.1.1.1.4.2  yamt }
    880  1.1.1.1.4.2  yamt 
    881  1.1.1.1.4.2  yamt static inline vec_short8 vec_max(vec_bshort8 a, vec_short8 b)
    882  1.1.1.1.4.2  yamt {
    883  1.1.1.1.4.2  yamt   return (spu_sel(b, (vec_short8)(a), spu_cmpgt((vec_short8)(a), b)));
    884  1.1.1.1.4.2  yamt }
    885  1.1.1.1.4.2  yamt 
    886  1.1.1.1.4.2  yamt static inline vec_short8 vec_max(vec_short8 a, vec_bshort8 b)
    887  1.1.1.1.4.2  yamt {
    888  1.1.1.1.4.2  yamt   return (spu_sel((vec_short8)(b), a, spu_cmpgt(a, (vec_short8)(b))));
    889  1.1.1.1.4.2  yamt }
    890  1.1.1.1.4.2  yamt 
    891  1.1.1.1.4.2  yamt static inline vec_uint4 vec_max(vec_uint4 a, vec_uint4 b)
    892  1.1.1.1.4.2  yamt {
    893  1.1.1.1.4.2  yamt   return (spu_sel(b, a, spu_cmpgt(a, b)));
    894  1.1.1.1.4.2  yamt }
    895  1.1.1.1.4.2  yamt 
    896  1.1.1.1.4.2  yamt static inline vec_int4 vec_max(vec_int4 a, vec_int4 b)
    897  1.1.1.1.4.2  yamt {
    898  1.1.1.1.4.2  yamt   return (spu_sel(b, a, spu_cmpgt(a, b)));
    899  1.1.1.1.4.2  yamt }
    900  1.1.1.1.4.2  yamt 
    901  1.1.1.1.4.2  yamt static inline vec_int4 vec_max(vec_bint4 a, vec_int4 b)
    902  1.1.1.1.4.2  yamt {
    903  1.1.1.1.4.2  yamt   return (spu_sel(b, (vec_int4)(a), spu_cmpgt((vec_int4)(a), b)));
    904  1.1.1.1.4.2  yamt }
    905  1.1.1.1.4.2  yamt 
    906  1.1.1.1.4.2  yamt static inline vec_int4 vec_max(vec_int4 a, vec_bint4 b)
    907  1.1.1.1.4.2  yamt {
    908  1.1.1.1.4.2  yamt   return (spu_sel((vec_int4)(b), a, spu_cmpgt(a, (vec_int4)(b))));
    909  1.1.1.1.4.2  yamt }
    910  1.1.1.1.4.2  yamt 
    911  1.1.1.1.4.2  yamt static inline vec_float4 vec_max(vec_float4 a, vec_float4 b)
    912  1.1.1.1.4.2  yamt {
    913  1.1.1.1.4.2  yamt   return (spu_sel(b, a, spu_cmpgt(a, b)));
    914  1.1.1.1.4.2  yamt }
    915  1.1.1.1.4.2  yamt 
    916  1.1.1.1.4.2  yamt 
    917  1.1.1.1.4.2  yamt /* vec_mergeh (vector merge high)
    918  1.1.1.1.4.2  yamt  * ==========
    919  1.1.1.1.4.2  yamt  */
    920  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_mergeh(vec_uchar16 a, vec_uchar16 b)
    921  1.1.1.1.4.2  yamt {
    922  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){0, 16, 1, 17, 2, 18, 3, 19,
    923  1.1.1.1.4.2  yamt 				           4, 20, 5, 21, 6, 22, 7, 23})));
    924  1.1.1.1.4.2  yamt }
    925  1.1.1.1.4.2  yamt 
    926  1.1.1.1.4.2  yamt static inline vec_char16 vec_mergeh(vec_char16 a, vec_char16 b)
    927  1.1.1.1.4.2  yamt {
    928  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){0, 16, 1, 17, 2, 18, 3, 19,
    929  1.1.1.1.4.2  yamt 				           4, 20, 5, 21, 6, 22, 7, 23})));
    930  1.1.1.1.4.2  yamt }
    931  1.1.1.1.4.2  yamt 
    932  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_mergeh(vec_ushort8 a, vec_ushort8 b)
    933  1.1.1.1.4.2  yamt {
    934  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){0, 1, 16, 17, 2, 3, 18, 19,
    935  1.1.1.1.4.2  yamt 				           4, 5, 20, 21, 6, 7, 22, 23})));
    936  1.1.1.1.4.2  yamt }
    937  1.1.1.1.4.2  yamt 
    938  1.1.1.1.4.2  yamt static inline vec_short8 vec_mergeh(vec_short8 a, vec_short8 b)
    939  1.1.1.1.4.2  yamt {
    940  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){0, 1, 16, 17, 2, 3, 18, 19,
    941  1.1.1.1.4.2  yamt 				           4, 5, 20, 21, 6, 7, 22, 23})));
    942  1.1.1.1.4.2  yamt }
    943  1.1.1.1.4.2  yamt 
    944  1.1.1.1.4.2  yamt static inline vec_uint4 vec_mergeh(vec_uint4 a, vec_uint4 b)
    945  1.1.1.1.4.2  yamt {
    946  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){0, 1, 2, 3, 16, 17, 18, 19,
    947  1.1.1.1.4.2  yamt 				           4, 5, 6, 7, 20, 21, 22, 23})));
    948  1.1.1.1.4.2  yamt }
    949  1.1.1.1.4.2  yamt 
    950  1.1.1.1.4.2  yamt static inline vec_int4 vec_mergeh(vec_int4 a, vec_int4 b)
    951  1.1.1.1.4.2  yamt {
    952  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){0, 1, 2, 3, 16, 17, 18, 19,
    953  1.1.1.1.4.2  yamt 				           4, 5, 6, 7, 20, 21, 22, 23})));
    954  1.1.1.1.4.2  yamt }
    955  1.1.1.1.4.2  yamt 
    956  1.1.1.1.4.2  yamt static inline vec_float4 vec_mergeh(vec_float4 a, vec_float4 b)
    957  1.1.1.1.4.2  yamt {
    958  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){0, 1, 2, 3, 16, 17, 18, 19,
    959  1.1.1.1.4.2  yamt 				           4, 5, 6, 7, 20, 21, 22, 23})));
    960  1.1.1.1.4.2  yamt }
    961  1.1.1.1.4.2  yamt 
    962  1.1.1.1.4.2  yamt /* vec_mergel (vector merge low)
    963  1.1.1.1.4.2  yamt  * ==========
    964  1.1.1.1.4.2  yamt  */
    965  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_mergel(vec_uchar16 a, vec_uchar16 b)
    966  1.1.1.1.4.2  yamt {
    967  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){ 8, 24,  9, 25, 10, 26, 11, 27,
    968  1.1.1.1.4.2  yamt 				           12, 28, 13, 29, 14, 30, 15, 31})));
    969  1.1.1.1.4.2  yamt }
    970  1.1.1.1.4.2  yamt 
    971  1.1.1.1.4.2  yamt static inline vec_char16 vec_mergel(vec_char16 a, vec_char16 b)
    972  1.1.1.1.4.2  yamt {
    973  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){ 8, 24,  9, 25, 10, 26, 11, 27,
    974  1.1.1.1.4.2  yamt 				           12, 28, 13, 29, 14, 30, 15, 31})));
    975  1.1.1.1.4.2  yamt }
    976  1.1.1.1.4.2  yamt 
    977  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_mergel(vec_ushort8 a, vec_ushort8 b)
    978  1.1.1.1.4.2  yamt {
    979  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){ 8,  9, 24, 25, 10, 11, 26, 27,
    980  1.1.1.1.4.2  yamt 				           12, 13, 28, 29, 14, 15, 30, 31})));
    981  1.1.1.1.4.2  yamt }
    982  1.1.1.1.4.2  yamt 
    983  1.1.1.1.4.2  yamt static inline vec_short8 vec_mergel(vec_short8 a, vec_short8 b)
    984  1.1.1.1.4.2  yamt {
    985  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){ 8,  9, 24, 25, 10, 11, 26, 27,
    986  1.1.1.1.4.2  yamt 				           12, 13, 28, 29, 14, 15, 30, 31})));
    987  1.1.1.1.4.2  yamt }
    988  1.1.1.1.4.2  yamt 
    989  1.1.1.1.4.2  yamt static inline vec_uint4 vec_mergel(vec_uint4 a, vec_uint4 b)
    990  1.1.1.1.4.2  yamt {
    991  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){ 8,  9, 10, 11, 24, 25, 26, 27,
    992  1.1.1.1.4.2  yamt 				           12, 13, 14, 15, 28, 29, 30, 31})));
    993  1.1.1.1.4.2  yamt }
    994  1.1.1.1.4.2  yamt 
    995  1.1.1.1.4.2  yamt static inline vec_int4 vec_mergel(vec_int4 a, vec_int4 b)
    996  1.1.1.1.4.2  yamt {
    997  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){ 8,  9, 10, 11, 24, 25, 26, 27,
    998  1.1.1.1.4.2  yamt 				           12, 13, 14, 15, 28, 29, 30, 31})));
    999  1.1.1.1.4.2  yamt }
   1000  1.1.1.1.4.2  yamt 
   1001  1.1.1.1.4.2  yamt static inline vec_float4 vec_mergel(vec_float4 a, vec_float4 b)
   1002  1.1.1.1.4.2  yamt {
   1003  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, ((vec_uchar16){ 8,  9, 10, 11, 24, 25, 26, 27,
   1004  1.1.1.1.4.2  yamt 				           12, 13, 14, 15, 28, 29, 30, 31})));
   1005  1.1.1.1.4.2  yamt }
   1006  1.1.1.1.4.2  yamt 
   1007  1.1.1.1.4.2  yamt /* vec_mfvscr (vector move from vector status and control register)
   1008  1.1.1.1.4.2  yamt  * ==========
   1009  1.1.1.1.4.2  yamt  */
   1010  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_mfvscr()
   1011  1.1.1.1.4.2  yamt {
   1012  1.1.1.1.4.2  yamt   return ((vec_ushort8)spu_splats(0)); 		/* not supported */
   1013  1.1.1.1.4.2  yamt }
   1014  1.1.1.1.4.2  yamt 
   1015  1.1.1.1.4.2  yamt 
   1016  1.1.1.1.4.2  yamt /* vec_min (vector minimum)
   1017  1.1.1.1.4.2  yamt  * =======
   1018  1.1.1.1.4.2  yamt  */
   1019  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_min(vec_uchar16 a, vec_uchar16 b)
   1020  1.1.1.1.4.2  yamt {
   1021  1.1.1.1.4.2  yamt   return (spu_sel(a, b, spu_cmpgt(a, b)));
   1022  1.1.1.1.4.2  yamt }
   1023  1.1.1.1.4.2  yamt 
   1024  1.1.1.1.4.2  yamt static inline vec_char16 vec_min(vec_char16 a, vec_char16 b)
   1025  1.1.1.1.4.2  yamt {
   1026  1.1.1.1.4.2  yamt   return (spu_sel(a, b, spu_cmpgt(a, b)));
   1027  1.1.1.1.4.2  yamt }
   1028  1.1.1.1.4.2  yamt 
   1029  1.1.1.1.4.2  yamt static inline vec_char16 vec_min(vec_bchar16 a, vec_char16 b)
   1030  1.1.1.1.4.2  yamt {
   1031  1.1.1.1.4.2  yamt   return (spu_sel((vec_char16)(a), b, spu_cmpgt((vec_char16)(a), b)));
   1032  1.1.1.1.4.2  yamt }
   1033  1.1.1.1.4.2  yamt 
   1034  1.1.1.1.4.2  yamt static inline vec_char16 vec_min(vec_char16 a, vec_bchar16 b)
   1035  1.1.1.1.4.2  yamt {
   1036  1.1.1.1.4.2  yamt   return (spu_sel(a, (vec_char16)(b), spu_cmpgt(a, (vec_char16)(b))));
   1037  1.1.1.1.4.2  yamt }
   1038  1.1.1.1.4.2  yamt 
   1039  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_min(vec_ushort8 a, vec_ushort8 b)
   1040  1.1.1.1.4.2  yamt {
   1041  1.1.1.1.4.2  yamt   return (spu_sel(a, b, spu_cmpgt(a, b)));
   1042  1.1.1.1.4.2  yamt }
   1043  1.1.1.1.4.2  yamt 
   1044  1.1.1.1.4.2  yamt static inline vec_short8 vec_min(vec_short8 a, vec_short8 b)
   1045  1.1.1.1.4.2  yamt {
   1046  1.1.1.1.4.2  yamt   return (spu_sel(a, b, spu_cmpgt(a, b)));
   1047  1.1.1.1.4.2  yamt }
   1048  1.1.1.1.4.2  yamt 
   1049  1.1.1.1.4.2  yamt static inline vec_short8 vec_min(vec_bshort8 a, vec_short8 b)
   1050  1.1.1.1.4.2  yamt {
   1051  1.1.1.1.4.2  yamt   return (spu_sel((vec_short8)(a), b, spu_cmpgt((vec_short8)(a), b)));
   1052  1.1.1.1.4.2  yamt }
   1053  1.1.1.1.4.2  yamt 
   1054  1.1.1.1.4.2  yamt static inline vec_short8 vec_min(vec_short8 a, vec_bshort8 b)
   1055  1.1.1.1.4.2  yamt {
   1056  1.1.1.1.4.2  yamt   return (spu_sel(a, (vec_short8)(b), spu_cmpgt(a, (vec_short8)(b))));
   1057  1.1.1.1.4.2  yamt }
   1058  1.1.1.1.4.2  yamt 
   1059  1.1.1.1.4.2  yamt static inline vec_uint4 vec_min(vec_uint4 a, vec_uint4 b)
   1060  1.1.1.1.4.2  yamt {
   1061  1.1.1.1.4.2  yamt   return (spu_sel(a, b, spu_cmpgt(a, b)));
   1062  1.1.1.1.4.2  yamt }
   1063  1.1.1.1.4.2  yamt 
   1064  1.1.1.1.4.2  yamt static inline vec_int4 vec_min(vec_int4 a, vec_int4 b)
   1065  1.1.1.1.4.2  yamt {
   1066  1.1.1.1.4.2  yamt   return (spu_sel(a, b, spu_cmpgt(a, b)));
   1067  1.1.1.1.4.2  yamt }
   1068  1.1.1.1.4.2  yamt 
   1069  1.1.1.1.4.2  yamt static inline vec_int4 vec_min(vec_bint4 a, vec_int4 b)
   1070  1.1.1.1.4.2  yamt {
   1071  1.1.1.1.4.2  yamt   return (spu_sel((vec_int4)(a), b, spu_cmpgt((vec_int4)(a), b)));
   1072  1.1.1.1.4.2  yamt }
   1073  1.1.1.1.4.2  yamt 
   1074  1.1.1.1.4.2  yamt static inline vec_int4 vec_min(vec_int4 a, vec_bint4 b)
   1075  1.1.1.1.4.2  yamt {
   1076  1.1.1.1.4.2  yamt   return (spu_sel(a, (vec_int4)(b), spu_cmpgt(a, (vec_int4)(b))));
   1077  1.1.1.1.4.2  yamt }
   1078  1.1.1.1.4.2  yamt 
   1079  1.1.1.1.4.2  yamt static inline vec_float4 vec_min(vec_float4 a, vec_float4 b)
   1080  1.1.1.1.4.2  yamt {
   1081  1.1.1.1.4.2  yamt   return (spu_sel(a, b, spu_cmpgt(a, b)));
   1082  1.1.1.1.4.2  yamt }
   1083  1.1.1.1.4.2  yamt 
   1084  1.1.1.1.4.2  yamt /* vec_mladd (vector multiply low and add unsigned half word)
   1085  1.1.1.1.4.2  yamt  * =========
   1086  1.1.1.1.4.2  yamt  */
   1087  1.1.1.1.4.2  yamt static inline vec_short8 vec_mladd(vec_short8 a, vec_short8 b, vec_short8 c)
   1088  1.1.1.1.4.2  yamt {
   1089  1.1.1.1.4.2  yamt   return ((vec_short8)(spu_shuffle(spu_madd((vec_short8)(spu_rl((vec_uint4)(a), -16)),
   1090  1.1.1.1.4.2  yamt 					    (vec_short8)(spu_rl((vec_uint4)(b), -16)),
   1091  1.1.1.1.4.2  yamt 					    (vec_int4)(spu_rl((vec_uint4)(c), -16))),
   1092  1.1.1.1.4.2  yamt 				   spu_madd(a, b, spu_extend(c)),
   1093  1.1.1.1.4.2  yamt 				   ((vec_uchar16){ 2,  3, 18, 19,  6,  7, 22, 23,
   1094  1.1.1.1.4.2  yamt 					          10, 11, 26, 27, 14, 15, 30, 31}))));
   1095  1.1.1.1.4.2  yamt }
   1096  1.1.1.1.4.2  yamt 
   1097  1.1.1.1.4.2  yamt 
   1098  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_mladd(vec_ushort8 a, vec_ushort8 b, vec_ushort8 c)
   1099  1.1.1.1.4.2  yamt {
   1100  1.1.1.1.4.2  yamt   return ((vec_ushort8)(vec_mladd((vec_short8)(a), (vec_short8)(b), (vec_short8)(c))));
   1101  1.1.1.1.4.2  yamt }
   1102  1.1.1.1.4.2  yamt 
   1103  1.1.1.1.4.2  yamt static inline vec_short8 vec_mladd(vec_ushort8 a, vec_short8 b, vec_short8 c)
   1104  1.1.1.1.4.2  yamt {
   1105  1.1.1.1.4.2  yamt   return (vec_mladd((vec_short8)(a), b, c));
   1106  1.1.1.1.4.2  yamt }
   1107  1.1.1.1.4.2  yamt 
   1108  1.1.1.1.4.2  yamt static inline vec_short8 vec_mladd(vec_short8 a, vec_ushort8 b, vec_ushort8 c)
   1109  1.1.1.1.4.2  yamt {
   1110  1.1.1.1.4.2  yamt   return (vec_mladd(a, (vec_short8)(b), (vec_short8)(c)));
   1111  1.1.1.1.4.2  yamt }
   1112  1.1.1.1.4.2  yamt 
   1113  1.1.1.1.4.2  yamt 
   1114  1.1.1.1.4.2  yamt /* vec_mradds (vector multiply round and add saturate)
   1115  1.1.1.1.4.2  yamt  * ==========
   1116  1.1.1.1.4.2  yamt  */
   1117  1.1.1.1.4.2  yamt static inline vec_short8 vec_mradds(vec_short8 a, vec_short8 b, vec_short8 c)
   1118  1.1.1.1.4.2  yamt {
   1119  1.1.1.1.4.2  yamt   vec_int4 round = (vec_int4)spu_splats(0x4000);
   1120  1.1.1.1.4.2  yamt   vec_short8 hi, lo;
   1121  1.1.1.1.4.2  yamt 
   1122  1.1.1.1.4.2  yamt   hi = (vec_short8)(spu_sl(spu_add(spu_mule(a, b), round), 1));
   1123  1.1.1.1.4.2  yamt   lo = (vec_short8)(spu_rlmask(spu_add(spu_mulo(a, b), round), -15));
   1124  1.1.1.1.4.2  yamt 
   1125  1.1.1.1.4.2  yamt   return (vec_adds(spu_sel(hi, lo, ((vec_ushort8){0, 0xFFFF, 0, 0xFFFF, 0, 0xFFFF, 0, 0xFFFF})), c));
   1126  1.1.1.1.4.2  yamt }
   1127  1.1.1.1.4.2  yamt 
   1128  1.1.1.1.4.2  yamt 
   1129  1.1.1.1.4.2  yamt /* vec_msum (vector multiply sum)
   1130  1.1.1.1.4.2  yamt  * ========
   1131  1.1.1.1.4.2  yamt  */
   1132  1.1.1.1.4.2  yamt static inline vec_uint4 vec_msum(vec_uchar16 a, vec_uchar16 b, vec_uint4 c)
   1133  1.1.1.1.4.2  yamt {
   1134  1.1.1.1.4.2  yamt   vec_ushort8 a1, a2, b1, b2;
   1135  1.1.1.1.4.2  yamt   vec_uint4 p1, p2;
   1136  1.1.1.1.4.2  yamt 
   1137  1.1.1.1.4.2  yamt   a1 = spu_and((vec_ushort8)(a), 0xFF);
   1138  1.1.1.1.4.2  yamt   a2 = spu_rlmask((vec_ushort8)(a), -8);
   1139  1.1.1.1.4.2  yamt   b1 = spu_and((vec_ushort8)(b), 0xFF);
   1140  1.1.1.1.4.2  yamt   b2 = spu_rlmask((vec_ushort8)(b), -8);
   1141  1.1.1.1.4.2  yamt 
   1142  1.1.1.1.4.2  yamt   p1 = spu_add(spu_mulo(a1, b1), spu_mulo(spu_rlqwbyte(a1, -2), spu_rlqwbyte(b1, -2)));
   1143  1.1.1.1.4.2  yamt   p2 = spu_add(spu_mulo(a2, b2), spu_mulo(spu_rlqwbyte(a2, -2), spu_rlqwbyte(b2, -2)));
   1144  1.1.1.1.4.2  yamt   return (spu_add(p2, spu_add(p1, c)));
   1145  1.1.1.1.4.2  yamt }
   1146  1.1.1.1.4.2  yamt 
   1147  1.1.1.1.4.2  yamt static inline vec_int4 vec_msum(vec_char16 a, vec_uchar16 b, vec_int4 c)
   1148  1.1.1.1.4.2  yamt {
   1149  1.1.1.1.4.2  yamt   vec_short8 a1, a2, b1, b2;
   1150  1.1.1.1.4.2  yamt   vec_int4 p1, p2;
   1151  1.1.1.1.4.2  yamt 
   1152  1.1.1.1.4.2  yamt   a1 = (vec_short8)(spu_extend(a));
   1153  1.1.1.1.4.2  yamt   a2 = spu_rlmaska((vec_short8)(a), -8);
   1154  1.1.1.1.4.2  yamt   b1 = (vec_short8)(spu_and((vec_ushort8)(b), 0xFF));
   1155  1.1.1.1.4.2  yamt   b2 = (vec_short8)spu_rlmask((vec_ushort8)(b), -8);
   1156  1.1.1.1.4.2  yamt 
   1157  1.1.1.1.4.2  yamt   p1 = spu_add(spu_mulo(a1, b1), spu_mulo(spu_rlqwbyte(a1, -2), spu_rlqwbyte(b1, -2)));
   1158  1.1.1.1.4.2  yamt   p2 = spu_add(spu_mulo(a2, b2), spu_mulo(spu_rlqwbyte(a2, -2), spu_rlqwbyte(b2, -2)));
   1159  1.1.1.1.4.2  yamt   return (spu_add(p2, spu_add(p1, c)));
   1160  1.1.1.1.4.2  yamt }
   1161  1.1.1.1.4.2  yamt 
   1162  1.1.1.1.4.2  yamt static inline vec_uint4 vec_msum(vec_ushort8 a, vec_ushort8 b, vec_uint4 c)
   1163  1.1.1.1.4.2  yamt {
   1164  1.1.1.1.4.2  yamt   return (spu_add(spu_add(spu_mulo(a, b), spu_mulo(spu_rlqwbyte(a, -2), spu_rlqwbyte(b, -2))), c));
   1165  1.1.1.1.4.2  yamt }
   1166  1.1.1.1.4.2  yamt 
   1167  1.1.1.1.4.2  yamt static inline vec_int4 vec_msum(vec_short8 a, vec_short8 b, vec_int4 c)
   1168  1.1.1.1.4.2  yamt {
   1169  1.1.1.1.4.2  yamt   return (spu_add(spu_add(spu_mulo(a, b), spu_mulo(spu_rlqwbyte(a, -2), spu_rlqwbyte(b, -2))), c));
   1170  1.1.1.1.4.2  yamt }
   1171  1.1.1.1.4.2  yamt 
   1172  1.1.1.1.4.2  yamt 
   1173  1.1.1.1.4.2  yamt /* vec_msums (vector multiply sum saturate)
   1174  1.1.1.1.4.2  yamt  * ========
   1175  1.1.1.1.4.2  yamt  */
   1176  1.1.1.1.4.2  yamt static inline vec_uint4 vec_msums(vec_ushort8 a, vec_ushort8 b, vec_uint4 c)
   1177  1.1.1.1.4.2  yamt {
   1178  1.1.1.1.4.2  yamt   vec_uint4 p1, p2;
   1179  1.1.1.1.4.2  yamt 
   1180  1.1.1.1.4.2  yamt   p1 = spu_mulo(a, b);
   1181  1.1.1.1.4.2  yamt   p2 = spu_mulo(spu_rlqwbyte(a, -2), spu_rlqwbyte(b, -2));
   1182  1.1.1.1.4.2  yamt 
   1183  1.1.1.1.4.2  yamt   return (vec_adds(p2, vec_adds(p1, c)));
   1184  1.1.1.1.4.2  yamt }
   1185  1.1.1.1.4.2  yamt 
   1186  1.1.1.1.4.2  yamt static inline vec_int4 vec_msums(vec_short8 a, vec_short8 b, vec_int4 c)
   1187  1.1.1.1.4.2  yamt {
   1188  1.1.1.1.4.2  yamt   return (vec_adds(spu_add(spu_mulo(a, b), spu_mulo(spu_rlqwbyte(a, -2), spu_rlqwbyte(b, -2))), c));
   1189  1.1.1.1.4.2  yamt }
   1190  1.1.1.1.4.2  yamt 
   1191  1.1.1.1.4.2  yamt /* vec_mtvscr (vector move to vector status and control register)
   1192  1.1.1.1.4.2  yamt  * ==========
   1193  1.1.1.1.4.2  yamt  */
   1194  1.1.1.1.4.2  yamt #define vec_mtvscr(_a)		/* not supported */
   1195  1.1.1.1.4.2  yamt 
   1196  1.1.1.1.4.2  yamt 
   1197  1.1.1.1.4.2  yamt /* vec_mule (vector multiply even)
   1198  1.1.1.1.4.2  yamt  * ========
   1199  1.1.1.1.4.2  yamt  */
   1200  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_mule(vec_uchar16 a, vec_uchar16 b)
   1201  1.1.1.1.4.2  yamt {
   1202  1.1.1.1.4.2  yamt   vec_ushort8 hi, lo;
   1203  1.1.1.1.4.2  yamt 
   1204  1.1.1.1.4.2  yamt   hi = (vec_ushort8)spu_mulo((vec_ushort8)(spu_rlmask((vec_uint4)(a), -24)),
   1205  1.1.1.1.4.2  yamt 			     (vec_ushort8)(spu_rlmask((vec_uint4)(b), -24)));
   1206  1.1.1.1.4.2  yamt   lo = (vec_ushort8)spu_mulo((vec_ushort8)(spu_rlmask((vec_short8)(a), -8)),
   1207  1.1.1.1.4.2  yamt 			     (vec_ushort8)(spu_rlmask((vec_short8)(b), -8)));
   1208  1.1.1.1.4.2  yamt 
   1209  1.1.1.1.4.2  yamt   return (spu_shuffle(hi, lo, ((vec_uchar16){ 2,  3, 18, 19,  6,  7, 22, 23,
   1210  1.1.1.1.4.2  yamt 				             10, 11, 26, 27, 14, 15, 30, 31})));
   1211  1.1.1.1.4.2  yamt }
   1212  1.1.1.1.4.2  yamt 
   1213  1.1.1.1.4.2  yamt static inline vec_short8 vec_mule(vec_char16 a, vec_char16 b)
   1214  1.1.1.1.4.2  yamt {
   1215  1.1.1.1.4.2  yamt   vec_short8 hi, lo;
   1216  1.1.1.1.4.2  yamt 
   1217  1.1.1.1.4.2  yamt   hi = (vec_short8)spu_mulo((vec_short8)(spu_rlmaska((vec_uint4)(a), -24)),
   1218  1.1.1.1.4.2  yamt 			    (vec_short8)(spu_rlmaska((vec_uint4)(b), -24)));
   1219  1.1.1.1.4.2  yamt   lo = (vec_short8)spu_mulo((vec_short8)(spu_rlmaska((vec_short8)(a), -8)),
   1220  1.1.1.1.4.2  yamt 			    (vec_short8)(spu_rlmaska((vec_short8)(b), -8)));
   1221  1.1.1.1.4.2  yamt 
   1222  1.1.1.1.4.2  yamt   return (spu_shuffle(hi, lo, ((vec_uchar16){ 2,  3, 18, 19,  6,  7, 22, 23,
   1223  1.1.1.1.4.2  yamt 				             10, 11, 26, 27, 14, 15, 30, 31})));
   1224  1.1.1.1.4.2  yamt }
   1225  1.1.1.1.4.2  yamt 
   1226  1.1.1.1.4.2  yamt static inline vec_uint4 vec_mule(vec_ushort8 a, vec_ushort8 b)
   1227  1.1.1.1.4.2  yamt {
   1228  1.1.1.1.4.2  yamt  return (spu_mulo((vec_ushort8)spu_rlmask((vec_uint4)(a), -16),
   1229  1.1.1.1.4.2  yamt 		  (vec_ushort8)spu_rlmask((vec_uint4)(b), -16)));
   1230  1.1.1.1.4.2  yamt }
   1231  1.1.1.1.4.2  yamt 
   1232  1.1.1.1.4.2  yamt 
   1233  1.1.1.1.4.2  yamt static inline vec_int4 vec_mule(vec_short8 a, vec_short8 b)
   1234  1.1.1.1.4.2  yamt {
   1235  1.1.1.1.4.2  yamt  return (spu_mulo((vec_short8)spu_rlmaska((vec_int4)(a), -16),
   1236  1.1.1.1.4.2  yamt 		  (vec_short8)spu_rlmaska((vec_int4)(b), -16)));
   1237  1.1.1.1.4.2  yamt }
   1238  1.1.1.1.4.2  yamt 
   1239  1.1.1.1.4.2  yamt 
   1240  1.1.1.1.4.2  yamt /* vec_mulo (vector multiply odd)
   1241  1.1.1.1.4.2  yamt  * ========
   1242  1.1.1.1.4.2  yamt  */
   1243  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_mulo(vec_uchar16 a, vec_uchar16 b)
   1244  1.1.1.1.4.2  yamt {
   1245  1.1.1.1.4.2  yamt   vec_ushort8 hi, lo;
   1246  1.1.1.1.4.2  yamt 
   1247  1.1.1.1.4.2  yamt   hi = (vec_ushort8)spu_mulo((vec_ushort8)(spu_and(spu_rlmask((vec_uint4)(a), -16), 0xFF)),
   1248  1.1.1.1.4.2  yamt 			     (vec_ushort8)(spu_and(spu_rlmask((vec_uint4)(b), -16), 0xFF)));
   1249  1.1.1.1.4.2  yamt   lo = (vec_ushort8)spu_mulo(spu_and((vec_ushort8)(a), 0xFF), spu_and((vec_ushort8)(b), 0xFF));
   1250  1.1.1.1.4.2  yamt 
   1251  1.1.1.1.4.2  yamt   return (spu_shuffle(hi, lo, ((vec_uchar16){ 2,  3, 18, 19,  6,  7, 22, 23,
   1252  1.1.1.1.4.2  yamt 				             10, 11, 26, 27, 14, 15, 30, 31})));
   1253  1.1.1.1.4.2  yamt }
   1254  1.1.1.1.4.2  yamt 
   1255  1.1.1.1.4.2  yamt static inline vec_short8 vec_mulo(vec_char16 a, vec_char16 b)
   1256  1.1.1.1.4.2  yamt {
   1257  1.1.1.1.4.2  yamt   vec_short8 aa, bb, hi, lo;
   1258  1.1.1.1.4.2  yamt 
   1259  1.1.1.1.4.2  yamt   aa = spu_extend(a);
   1260  1.1.1.1.4.2  yamt   bb = spu_extend(b);
   1261  1.1.1.1.4.2  yamt 
   1262  1.1.1.1.4.2  yamt   hi = (vec_short8)spu_mulo((vec_short8)(spu_rlmaska((vec_uint4)(aa), -16)),
   1263  1.1.1.1.4.2  yamt 		(vec_short8)(spu_rlmaska((vec_uint4)(bb), -16)));
   1264  1.1.1.1.4.2  yamt   lo = (vec_short8)spu_mulo(aa, bb);
   1265  1.1.1.1.4.2  yamt   return (spu_shuffle(hi, lo, ((vec_uchar16){ 2,  3, 18, 19,  6,  7, 22, 23,
   1266  1.1.1.1.4.2  yamt 				             10, 11, 26, 27, 14, 15, 30, 31})));
   1267  1.1.1.1.4.2  yamt }
   1268  1.1.1.1.4.2  yamt 
   1269  1.1.1.1.4.2  yamt static inline vec_uint4 vec_mulo(vec_ushort8 a, vec_ushort8 b)
   1270  1.1.1.1.4.2  yamt {
   1271  1.1.1.1.4.2  yamt   return (spu_mulo(a, b));
   1272  1.1.1.1.4.2  yamt }
   1273  1.1.1.1.4.2  yamt 
   1274  1.1.1.1.4.2  yamt 
   1275  1.1.1.1.4.2  yamt static inline vec_int4 vec_mulo(vec_short8 a, vec_short8 b)
   1276  1.1.1.1.4.2  yamt {
   1277  1.1.1.1.4.2  yamt   return (spu_mulo(a, b));
   1278  1.1.1.1.4.2  yamt }
   1279  1.1.1.1.4.2  yamt 
   1280  1.1.1.1.4.2  yamt 
   1281  1.1.1.1.4.2  yamt /* vec_nmsub (vector negative multiply subtract)
   1282  1.1.1.1.4.2  yamt  * =========
   1283  1.1.1.1.4.2  yamt  */
   1284  1.1.1.1.4.2  yamt #define vec_nmsub(_a, _b, _c)	spu_nmsub(_a, _b, _c)
   1285  1.1.1.1.4.2  yamt 
   1286  1.1.1.1.4.2  yamt 
   1287  1.1.1.1.4.2  yamt /* vec_nor (vector logical nor)
   1288  1.1.1.1.4.2  yamt  * =======
   1289  1.1.1.1.4.2  yamt  */
   1290  1.1.1.1.4.2  yamt #define vec_nor(_a, _b)		spu_nor(_a, _b)
   1291  1.1.1.1.4.2  yamt 
   1292  1.1.1.1.4.2  yamt 
   1293  1.1.1.1.4.2  yamt /* vec_or (vector logical or)
   1294  1.1.1.1.4.2  yamt  * ======
   1295  1.1.1.1.4.2  yamt  */
   1296  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_or(vec_uchar16 a, vec_uchar16 b)
   1297  1.1.1.1.4.2  yamt {
   1298  1.1.1.1.4.2  yamt   return (spu_or(a, b));
   1299  1.1.1.1.4.2  yamt }
   1300  1.1.1.1.4.2  yamt 
   1301  1.1.1.1.4.2  yamt static inline vec_char16 vec_or(vec_char16 a, vec_char16 b)
   1302  1.1.1.1.4.2  yamt {
   1303  1.1.1.1.4.2  yamt   return (spu_or(a, b));
   1304  1.1.1.1.4.2  yamt }
   1305  1.1.1.1.4.2  yamt 
   1306  1.1.1.1.4.2  yamt static inline vec_char16 vec_or(vec_bchar16 a, vec_char16 b)
   1307  1.1.1.1.4.2  yamt {
   1308  1.1.1.1.4.2  yamt   return (spu_or((vec_char16)(a), b));
   1309  1.1.1.1.4.2  yamt }
   1310  1.1.1.1.4.2  yamt 
   1311  1.1.1.1.4.2  yamt static inline vec_char16 vec_or(vec_char16 a, vec_bchar16 b)
   1312  1.1.1.1.4.2  yamt {
   1313  1.1.1.1.4.2  yamt   return (spu_or(a, (vec_char16)(b)));
   1314  1.1.1.1.4.2  yamt }
   1315  1.1.1.1.4.2  yamt 
   1316  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_or(vec_ushort8 a, vec_ushort8 b)
   1317  1.1.1.1.4.2  yamt {
   1318  1.1.1.1.4.2  yamt   return (spu_or(a, b));
   1319  1.1.1.1.4.2  yamt }
   1320  1.1.1.1.4.2  yamt 
   1321  1.1.1.1.4.2  yamt static inline vec_short8 vec_or(vec_short8 a, vec_short8 b)
   1322  1.1.1.1.4.2  yamt {
   1323  1.1.1.1.4.2  yamt   return (spu_or(a, b));
   1324  1.1.1.1.4.2  yamt }
   1325  1.1.1.1.4.2  yamt 
   1326  1.1.1.1.4.2  yamt static inline vec_short8 vec_or(vec_bshort8 a, vec_short8 b)
   1327  1.1.1.1.4.2  yamt {
   1328  1.1.1.1.4.2  yamt   return (spu_or((vec_short8)(a), b));
   1329  1.1.1.1.4.2  yamt }
   1330  1.1.1.1.4.2  yamt 
   1331  1.1.1.1.4.2  yamt static inline vec_short8 vec_or(vec_short8 a, vec_bshort8 b)
   1332  1.1.1.1.4.2  yamt {
   1333  1.1.1.1.4.2  yamt   return (spu_or(a, (vec_short8)(b)));
   1334  1.1.1.1.4.2  yamt }
   1335  1.1.1.1.4.2  yamt 
   1336  1.1.1.1.4.2  yamt static inline vec_uint4 vec_or(vec_uint4 a, vec_uint4 b)
   1337  1.1.1.1.4.2  yamt {
   1338  1.1.1.1.4.2  yamt   return (spu_or(a, b));
   1339  1.1.1.1.4.2  yamt }
   1340  1.1.1.1.4.2  yamt 
   1341  1.1.1.1.4.2  yamt static inline vec_int4 vec_or(vec_int4 a, vec_int4 b)
   1342  1.1.1.1.4.2  yamt {
   1343  1.1.1.1.4.2  yamt   return (spu_or(a, b));
   1344  1.1.1.1.4.2  yamt }
   1345  1.1.1.1.4.2  yamt 
   1346  1.1.1.1.4.2  yamt static inline vec_int4 vec_or(vec_bint4 a, vec_int4 b)
   1347  1.1.1.1.4.2  yamt {
   1348  1.1.1.1.4.2  yamt   return (spu_or((vec_int4)(a), b));
   1349  1.1.1.1.4.2  yamt }
   1350  1.1.1.1.4.2  yamt 
   1351  1.1.1.1.4.2  yamt static inline vec_int4 vec_or(vec_int4 a, vec_bint4 b)
   1352  1.1.1.1.4.2  yamt {
   1353  1.1.1.1.4.2  yamt   return (spu_or(a, (vec_int4)(b)));
   1354  1.1.1.1.4.2  yamt }
   1355  1.1.1.1.4.2  yamt 
   1356  1.1.1.1.4.2  yamt static inline vec_float4 vec_or(vec_float4 a, vec_float4 b)
   1357  1.1.1.1.4.2  yamt {
   1358  1.1.1.1.4.2  yamt   return (spu_or(a, b));
   1359  1.1.1.1.4.2  yamt }
   1360  1.1.1.1.4.2  yamt 
   1361  1.1.1.1.4.2  yamt static inline vec_float4 vec_or(vec_bint4 a, vec_float4 b)
   1362  1.1.1.1.4.2  yamt {
   1363  1.1.1.1.4.2  yamt   return (spu_or((vec_float4)(a),b));
   1364  1.1.1.1.4.2  yamt }
   1365  1.1.1.1.4.2  yamt 
   1366  1.1.1.1.4.2  yamt static inline vec_float4 vec_or(vec_float4 a, vec_bint4 b)
   1367  1.1.1.1.4.2  yamt {
   1368  1.1.1.1.4.2  yamt   return (spu_or(a, (vec_float4)(b)));
   1369  1.1.1.1.4.2  yamt }
   1370  1.1.1.1.4.2  yamt 
   1371  1.1.1.1.4.2  yamt 
   1372  1.1.1.1.4.2  yamt /* vec_pack (vector pack)
   1373  1.1.1.1.4.2  yamt  * ========
   1374  1.1.1.1.4.2  yamt  */
   1375  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_pack(vec_ushort8 a, vec_ushort8 b)
   1376  1.1.1.1.4.2  yamt {
   1377  1.1.1.1.4.2  yamt   return ((vec_uchar16)spu_shuffle(a, b, ((vec_uchar16){ 1,  3,  5,  7,  9, 11, 13, 15,
   1378  1.1.1.1.4.2  yamt 					                17, 19, 21, 23, 25, 27, 29, 31})));
   1379  1.1.1.1.4.2  yamt }
   1380  1.1.1.1.4.2  yamt 
   1381  1.1.1.1.4.2  yamt static inline vec_char16 vec_pack(vec_short8 a, vec_short8 b)
   1382  1.1.1.1.4.2  yamt {
   1383  1.1.1.1.4.2  yamt   return ((vec_char16)spu_shuffle(a, b, ((vec_uchar16){ 1,  3,  5,  7,  9, 11, 13, 15,
   1384  1.1.1.1.4.2  yamt 					               17, 19, 21, 23, 25, 27, 29, 31})));
   1385  1.1.1.1.4.2  yamt }
   1386  1.1.1.1.4.2  yamt 
   1387  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_pack(vec_uint4 a, vec_uint4 b)
   1388  1.1.1.1.4.2  yamt {
   1389  1.1.1.1.4.2  yamt   return ((vec_ushort8)spu_shuffle(a, b, ((vec_uchar16){ 2,  3,  6,  7, 10, 11, 14, 15,
   1390  1.1.1.1.4.2  yamt 					                18, 19, 22, 23, 26, 27, 30, 31})));
   1391  1.1.1.1.4.2  yamt }
   1392  1.1.1.1.4.2  yamt 
   1393  1.1.1.1.4.2  yamt static inline vec_short8 vec_pack(vec_int4 a, vec_int4 b)
   1394  1.1.1.1.4.2  yamt {
   1395  1.1.1.1.4.2  yamt   return ((vec_short8)spu_shuffle(a, b, ((vec_uchar16){ 2,  3,  6,  7, 10, 11, 14, 15,
   1396  1.1.1.1.4.2  yamt 					               18, 19, 22, 23, 26, 27, 30, 31})));
   1397  1.1.1.1.4.2  yamt }
   1398  1.1.1.1.4.2  yamt 
   1399  1.1.1.1.4.2  yamt 
   1400  1.1.1.1.4.2  yamt /* vec_packpx (vector pack pixel)
   1401  1.1.1.1.4.2  yamt  * ==========
   1402  1.1.1.1.4.2  yamt  */
   1403  1.1.1.1.4.2  yamt static inline vec_pixel8 vec_packpx(vec_uint4 a, vec_uint4 b)
   1404  1.1.1.1.4.2  yamt {
   1405  1.1.1.1.4.2  yamt   vec_uint4 x03FF = (vec_uint4)(spu_splats((unsigned short)0x03FF));
   1406  1.1.1.1.4.2  yamt   vec_uint4 x001F = (vec_uint4)(spu_splats((unsigned short)0x001F));
   1407  1.1.1.1.4.2  yamt 
   1408  1.1.1.1.4.2  yamt   return ((vec_pixel8)(spu_shuffle(spu_sel(spu_sel(spu_sl(a, 7), spu_sl(a, 10), x03FF),
   1409  1.1.1.1.4.2  yamt 					   spu_sl(a, 13), x001F),
   1410  1.1.1.1.4.2  yamt 				   spu_sel(spu_sel(spu_sl(b, 7), spu_sl(b, 10), x03FF),
   1411  1.1.1.1.4.2  yamt 					   spu_sl(b, 13), x001F),
   1412  1.1.1.1.4.2  yamt 				   ((vec_uchar16){ 0,  1,  4,  5,   8,  9, 12, 13,
   1413  1.1.1.1.4.2  yamt 					          16, 17, 20, 21, 24, 25, 28, 29}))));
   1414  1.1.1.1.4.2  yamt }
   1415  1.1.1.1.4.2  yamt 
   1416  1.1.1.1.4.2  yamt 
   1417  1.1.1.1.4.2  yamt /* vec_packs (vector pack saturate)
   1418  1.1.1.1.4.2  yamt  * =========
   1419  1.1.1.1.4.2  yamt  */
   1420  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_packs(vec_ushort8 a, vec_ushort8 b)
   1421  1.1.1.1.4.2  yamt {
   1422  1.1.1.1.4.2  yamt   vec_ushort8 max = spu_splats((unsigned short)0x00FF);
   1423  1.1.1.1.4.2  yamt 
   1424  1.1.1.1.4.2  yamt   return ((vec_uchar16)(spu_shuffle(spu_sel(a, max, spu_cmpgt(a, 255)),
   1425  1.1.1.1.4.2  yamt 				    spu_sel(b, max, spu_cmpgt(b, 255)),
   1426  1.1.1.1.4.2  yamt 				    ((vec_uchar16){ 1,  3,  5,  7,  9, 11, 13, 15,
   1427  1.1.1.1.4.2  yamt 					           17, 19, 21, 23, 25, 27, 29, 31}))));
   1428  1.1.1.1.4.2  yamt }
   1429  1.1.1.1.4.2  yamt 
   1430  1.1.1.1.4.2  yamt static inline vec_char16 vec_packs(vec_short8 a, vec_short8 b)
   1431  1.1.1.1.4.2  yamt {
   1432  1.1.1.1.4.2  yamt   vec_short8 max = spu_splats((signed short)0x007F);
   1433  1.1.1.1.4.2  yamt   vec_short8 min = spu_splats((signed short)0xFF80);
   1434  1.1.1.1.4.2  yamt 
   1435  1.1.1.1.4.2  yamt   return ((vec_char16)(spu_shuffle(spu_sel(min, spu_sel(a, max, spu_cmpgt(a, 127)), spu_cmpgt(a, -128)),
   1436  1.1.1.1.4.2  yamt 				    spu_sel(min, spu_sel(b, max, spu_cmpgt(b, 127)), spu_cmpgt(b, -128)),
   1437  1.1.1.1.4.2  yamt 				   ((vec_uchar16){ 1,  3,  5,  7,  9, 11, 13, 15,
   1438  1.1.1.1.4.2  yamt 					          17, 19, 21, 23, 25, 27, 29, 31}))));
   1439  1.1.1.1.4.2  yamt }
   1440  1.1.1.1.4.2  yamt 
   1441  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_packs(vec_uint4 a, vec_uint4 b)
   1442  1.1.1.1.4.2  yamt {
   1443  1.1.1.1.4.2  yamt   vec_uint4 max = spu_splats((unsigned int)0x0000FFFF);
   1444  1.1.1.1.4.2  yamt 
   1445  1.1.1.1.4.2  yamt   return ((vec_ushort8)(spu_shuffle(spu_sel(a, max, spu_cmpgt(a, max)),
   1446  1.1.1.1.4.2  yamt 				    spu_sel(b, max, spu_cmpgt(b, max)),
   1447  1.1.1.1.4.2  yamt 				    ((vec_uchar16){ 2,  3,  6,  7, 10, 11, 14, 15,
   1448  1.1.1.1.4.2  yamt 					           18, 19, 22, 23, 26, 27, 30, 31}))));
   1449  1.1.1.1.4.2  yamt }
   1450  1.1.1.1.4.2  yamt 
   1451  1.1.1.1.4.2  yamt static inline vec_short8 vec_packs(vec_int4 a, vec_int4 b)
   1452  1.1.1.1.4.2  yamt {
   1453  1.1.1.1.4.2  yamt   vec_int4 max = spu_splats((signed int)0x00007FFF);
   1454  1.1.1.1.4.2  yamt   vec_int4 min = spu_splats((signed int)0xFFFF8000);
   1455  1.1.1.1.4.2  yamt 
   1456  1.1.1.1.4.2  yamt   return ((vec_short8)(spu_shuffle(spu_sel(min, spu_sel(a, max, spu_cmpgt(a, max)), spu_cmpgt(a, min)),
   1457  1.1.1.1.4.2  yamt 				   spu_sel(min, spu_sel(b, max, spu_cmpgt(b, max)), spu_cmpgt(b, min)),
   1458  1.1.1.1.4.2  yamt 				   ((vec_uchar16){ 2,  3,  6,  7, 10, 11, 14, 15,
   1459  1.1.1.1.4.2  yamt 					          18, 19, 22, 23, 26, 27, 30, 31}))));
   1460  1.1.1.1.4.2  yamt }
   1461  1.1.1.1.4.2  yamt 
   1462  1.1.1.1.4.2  yamt 
   1463  1.1.1.1.4.2  yamt /* vec_packsu (vector pack saturate unsigned)
   1464  1.1.1.1.4.2  yamt  * ==========
   1465  1.1.1.1.4.2  yamt  */
   1466  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_packsu(vec_ushort8 a, vec_ushort8 b)
   1467  1.1.1.1.4.2  yamt {
   1468  1.1.1.1.4.2  yamt   return ((vec_uchar16)spu_shuffle(spu_or(a, (vec_ushort8)(spu_cmpgt(a, 255))),
   1469  1.1.1.1.4.2  yamt 				   spu_or(b, (vec_ushort8)(spu_cmpgt(b, 255))),
   1470  1.1.1.1.4.2  yamt 				   ((vec_uchar16){ 1,  3,  5,  7,  9, 11, 13, 15,
   1471  1.1.1.1.4.2  yamt 					          17, 19, 21, 23, 25, 27, 29, 31})));
   1472  1.1.1.1.4.2  yamt }
   1473  1.1.1.1.4.2  yamt 
   1474  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_packsu(vec_short8 a, vec_short8 b)
   1475  1.1.1.1.4.2  yamt {
   1476  1.1.1.1.4.2  yamt   vec_short8 max = spu_splats((signed short)0x00FF);
   1477  1.1.1.1.4.2  yamt   vec_short8 min = spu_splats((signed short)0x0000);
   1478  1.1.1.1.4.2  yamt 
   1479  1.1.1.1.4.2  yamt   return ((vec_uchar16)(spu_shuffle(spu_sel(min, spu_sel(a, max, spu_cmpgt(a, 255)), spu_cmpgt(a, 0)),
   1480  1.1.1.1.4.2  yamt 				    spu_sel(min, spu_sel(b, max, spu_cmpgt(b, 255)), spu_cmpgt(b, 0)),
   1481  1.1.1.1.4.2  yamt 				    ((vec_uchar16){ 1,  3,  5,  7,  9, 11, 13, 15,
   1482  1.1.1.1.4.2  yamt 					           17, 19, 21, 23, 25, 27, 29, 31}))));
   1483  1.1.1.1.4.2  yamt 
   1484  1.1.1.1.4.2  yamt   return (vec_packsu((vec_ushort8)(a), (vec_ushort8)(b)));
   1485  1.1.1.1.4.2  yamt }
   1486  1.1.1.1.4.2  yamt 
   1487  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_packsu(vec_uint4 a, vec_uint4 b)
   1488  1.1.1.1.4.2  yamt {
   1489  1.1.1.1.4.2  yamt   vec_uint4 max = spu_splats((unsigned int)0xFFFF);
   1490  1.1.1.1.4.2  yamt 
   1491  1.1.1.1.4.2  yamt   return ((vec_ushort8)spu_shuffle(spu_or(a, (vec_uint4)(spu_cmpgt(a, max))),
   1492  1.1.1.1.4.2  yamt 				   spu_or(b, (vec_uint4)(spu_cmpgt(b, max))),
   1493  1.1.1.1.4.2  yamt 				   ((vec_uchar16){ 2,  3,  6,  7, 10, 11, 14, 15,
   1494  1.1.1.1.4.2  yamt 					          18, 19, 22, 23, 26, 27, 30, 31})));
   1495  1.1.1.1.4.2  yamt }
   1496  1.1.1.1.4.2  yamt 
   1497  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_packsu(vec_int4 a, vec_int4 b)
   1498  1.1.1.1.4.2  yamt {
   1499  1.1.1.1.4.2  yamt   vec_int4 max = spu_splats((signed int)0x0000FFFF);
   1500  1.1.1.1.4.2  yamt   vec_int4 min = spu_splats((signed int)0x00000000);
   1501  1.1.1.1.4.2  yamt 
   1502  1.1.1.1.4.2  yamt   return ((vec_ushort8)(spu_shuffle(spu_sel(min, spu_sel(a, max, spu_cmpgt(a, max)), spu_cmpgt(a, min)),
   1503  1.1.1.1.4.2  yamt 				    spu_sel(min, spu_sel(b, max, spu_cmpgt(b, max)), spu_cmpgt(b, min)),
   1504  1.1.1.1.4.2  yamt 				    ((vec_uchar16){ 2,  3,  6,  7, 10, 11, 14, 15,
   1505  1.1.1.1.4.2  yamt 					           18, 19, 22, 23, 26, 27, 30, 31}))));
   1506  1.1.1.1.4.2  yamt }
   1507  1.1.1.1.4.2  yamt 
   1508  1.1.1.1.4.2  yamt 
   1509  1.1.1.1.4.2  yamt /* vec_perm (vector permute)
   1510  1.1.1.1.4.2  yamt  * ========
   1511  1.1.1.1.4.2  yamt  */
   1512  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_perm(vec_uchar16 a, vec_uchar16 b, vec_uchar16 c)
   1513  1.1.1.1.4.2  yamt {
   1514  1.1.1.1.4.2  yamt   return (spu_shuffle(a, b, spu_and(c, 0x1F)));
   1515  1.1.1.1.4.2  yamt }
   1516  1.1.1.1.4.2  yamt 
   1517  1.1.1.1.4.2  yamt static inline vec_char16 vec_perm(vec_char16 a, vec_char16 b, vec_uchar16 c)
   1518  1.1.1.1.4.2  yamt {
   1519  1.1.1.1.4.2  yamt   return ((vec_char16)(vec_perm((vec_uchar16)(a), (vec_uchar16)(b), c)));
   1520  1.1.1.1.4.2  yamt }
   1521  1.1.1.1.4.2  yamt 
   1522  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_perm(vec_ushort8 a, vec_ushort8 b, vec_uchar16 c)
   1523  1.1.1.1.4.2  yamt {
   1524  1.1.1.1.4.2  yamt   return ((vec_ushort8)(vec_perm((vec_uchar16)(a), (vec_uchar16)(b), c)));
   1525  1.1.1.1.4.2  yamt }
   1526  1.1.1.1.4.2  yamt 
   1527  1.1.1.1.4.2  yamt static inline vec_short8 vec_perm(vec_short8 a, vec_short8 b, vec_uchar16 c)
   1528  1.1.1.1.4.2  yamt {
   1529  1.1.1.1.4.2  yamt   return ((vec_short8)(vec_perm((vec_uchar16)(a), (vec_uchar16)(b), c)));
   1530  1.1.1.1.4.2  yamt }
   1531  1.1.1.1.4.2  yamt 
   1532  1.1.1.1.4.2  yamt static inline vec_uint4 vec_perm(vec_uint4 a, vec_uint4 b, vec_uchar16 c)
   1533  1.1.1.1.4.2  yamt {
   1534  1.1.1.1.4.2  yamt   return ((vec_uint4)(vec_perm((vec_uchar16)(a), (vec_uchar16)(b), c)));
   1535  1.1.1.1.4.2  yamt }
   1536  1.1.1.1.4.2  yamt 
   1537  1.1.1.1.4.2  yamt static inline vec_int4 vec_perm(vec_int4 a, vec_int4 b, vec_uchar16 c)
   1538  1.1.1.1.4.2  yamt {
   1539  1.1.1.1.4.2  yamt   return ((vec_int4)(vec_perm((vec_uchar16)(a), (vec_uchar16)(b), c)));
   1540  1.1.1.1.4.2  yamt }
   1541  1.1.1.1.4.2  yamt 
   1542  1.1.1.1.4.2  yamt static inline vec_float4 vec_perm(vec_float4 a, vec_float4 b, vec_uchar16 c)
   1543  1.1.1.1.4.2  yamt {
   1544  1.1.1.1.4.2  yamt   return ((vec_float4)(vec_perm((vec_uchar16)(a), (vec_uchar16)(b), c)));
   1545  1.1.1.1.4.2  yamt }
   1546  1.1.1.1.4.2  yamt 
   1547  1.1.1.1.4.2  yamt 
   1548  1.1.1.1.4.2  yamt /* vec_re (vector reciprocal estimate)
   1549  1.1.1.1.4.2  yamt  * ======
   1550  1.1.1.1.4.2  yamt  */
   1551  1.1.1.1.4.2  yamt #define vec_re(_a)	spu_re(_a)
   1552  1.1.1.1.4.2  yamt 
   1553  1.1.1.1.4.2  yamt 
   1554  1.1.1.1.4.2  yamt /* vec_rl (vector rotate left)
   1555  1.1.1.1.4.2  yamt  * ======
   1556  1.1.1.1.4.2  yamt  */
   1557  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_rl(vec_uchar16 a, vec_uchar16 b)
   1558  1.1.1.1.4.2  yamt {
   1559  1.1.1.1.4.2  yamt   vec_ushort8 r1, r2;
   1560  1.1.1.1.4.2  yamt 
   1561  1.1.1.1.4.2  yamt   r1 = spu_rl(spu_and((vec_ushort8)(a), 0xFF), (vec_short8)spu_and((vec_ushort8)(b), 7));
   1562  1.1.1.1.4.2  yamt   r2 = spu_rl(spu_and((vec_ushort8)(a), -256), (vec_short8)spu_and(spu_rlmask((vec_ushort8)(b), -8), 7));
   1563  1.1.1.1.4.2  yamt   return ((vec_uchar16)(spu_sel(spu_or(r2, spu_sl(r2, 8)), spu_or(r1, spu_rlmask(r1, -8)), spu_splats((unsigned short)0xFF))));
   1564  1.1.1.1.4.2  yamt }
   1565  1.1.1.1.4.2  yamt 
   1566  1.1.1.1.4.2  yamt static inline vec_char16 vec_rl(vec_char16 a, vec_uchar16 b)
   1567  1.1.1.1.4.2  yamt {
   1568  1.1.1.1.4.2  yamt   return ((vec_char16)(vec_rl((vec_uchar16)(a), b)));
   1569  1.1.1.1.4.2  yamt }
   1570  1.1.1.1.4.2  yamt 
   1571  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_rl(vec_ushort8 a, vec_ushort8 b)
   1572  1.1.1.1.4.2  yamt {
   1573  1.1.1.1.4.2  yamt   return (spu_rl(a, (vec_short8)(b)));
   1574  1.1.1.1.4.2  yamt }
   1575  1.1.1.1.4.2  yamt 
   1576  1.1.1.1.4.2  yamt static inline vec_short8 vec_rl(vec_short8 a, vec_ushort8 b)
   1577  1.1.1.1.4.2  yamt {
   1578  1.1.1.1.4.2  yamt   return (spu_rl(a, (vec_short8)(b)));
   1579  1.1.1.1.4.2  yamt }
   1580  1.1.1.1.4.2  yamt 
   1581  1.1.1.1.4.2  yamt static inline vec_uint4 vec_rl(vec_uint4 a, vec_uint4 b)
   1582  1.1.1.1.4.2  yamt {
   1583  1.1.1.1.4.2  yamt   return (spu_rl(a, (vec_int4)(b)));
   1584  1.1.1.1.4.2  yamt }
   1585  1.1.1.1.4.2  yamt 
   1586  1.1.1.1.4.2  yamt static inline vec_int4 vec_rl(vec_int4 a, vec_uint4 b)
   1587  1.1.1.1.4.2  yamt {
   1588  1.1.1.1.4.2  yamt   return (spu_rl(a, (vec_int4)(b)));
   1589  1.1.1.1.4.2  yamt }
   1590  1.1.1.1.4.2  yamt 
   1591  1.1.1.1.4.2  yamt 
   1592  1.1.1.1.4.2  yamt /* vec_round (vector round)
   1593  1.1.1.1.4.2  yamt  * =========
   1594  1.1.1.1.4.2  yamt  */
   1595  1.1.1.1.4.2  yamt static inline vec_float4 vec_round(vec_float4 a)
   1596  1.1.1.1.4.2  yamt {
   1597  1.1.1.1.4.2  yamt   vec_float4 s_half, s_one, d;
   1598  1.1.1.1.4.2  yamt   vec_uint4 odd;
   1599  1.1.1.1.4.2  yamt   vec_uint4 msb = spu_splats((unsigned int)0x80000000);
   1600  1.1.1.1.4.2  yamt   vec_float4 half = spu_splats(0.5f);
   1601  1.1.1.1.4.2  yamt   vec_int4 exp;
   1602  1.1.1.1.4.2  yamt   vec_uint4 mask;
   1603  1.1.1.1.4.2  yamt 
   1604  1.1.1.1.4.2  yamt   s_half = (vec_float4)(spu_sel((vec_uint4)(half), (vec_uint4)(a), msb));
   1605  1.1.1.1.4.2  yamt   a = spu_add(a, s_half);
   1606  1.1.1.1.4.2  yamt   s_one = spu_add(s_half, s_half);
   1607  1.1.1.1.4.2  yamt   exp  = spu_sub(127, (vec_int4)(spu_and(spu_rlmask((vec_uint4)(a), -23), 0xFF)));
   1608  1.1.1.1.4.2  yamt   mask = spu_rlmask(spu_splats((unsigned int)0x7FFFFF), exp);
   1609  1.1.1.1.4.2  yamt   mask = spu_sel(spu_splats((unsigned int)0), mask, spu_cmpgt(exp, -31));
   1610  1.1.1.1.4.2  yamt   mask = spu_or(mask, spu_xor((vec_uint4)(spu_rlmaska(spu_add(exp, -1), -31)), -1));
   1611  1.1.1.1.4.2  yamt 
   1612  1.1.1.1.4.2  yamt   odd = spu_and((vec_uint4)(spu_convts(a, 0)), 1);
   1613  1.1.1.1.4.2  yamt   s_one = spu_andc(s_one, (vec_float4)spu_cmpeq(mask, 0));
   1614  1.1.1.1.4.2  yamt   s_one = spu_and(s_one, spu_and((vec_float4)spu_cmpeq(spu_and((vec_uint4)(a), mask), 0),
   1615  1.1.1.1.4.2  yamt 				 (vec_float4)spu_cmpeq(odd, 1)));
   1616  1.1.1.1.4.2  yamt   d = spu_andc(a, (vec_float4)(mask));
   1617  1.1.1.1.4.2  yamt   d = spu_sub(d, s_one);
   1618  1.1.1.1.4.2  yamt   return (d);
   1619  1.1.1.1.4.2  yamt }
   1620  1.1.1.1.4.2  yamt 
   1621  1.1.1.1.4.2  yamt /* vec_rsqrte (vector reciprocal square root estimate)
   1622  1.1.1.1.4.2  yamt  * ==========
   1623  1.1.1.1.4.2  yamt  */
   1624  1.1.1.1.4.2  yamt #define vec_rsqrte(_a)	spu_rsqrte(_a)
   1625  1.1.1.1.4.2  yamt 
   1626  1.1.1.1.4.2  yamt 
   1627  1.1.1.1.4.2  yamt /* vec_sel (vector select)
   1628  1.1.1.1.4.2  yamt  * =======
   1629  1.1.1.1.4.2  yamt  */
   1630  1.1.1.1.4.2  yamt #define vec_sel(_a, _b, _c)	spu_sel(_a, _b, _c)
   1631  1.1.1.1.4.2  yamt 
   1632  1.1.1.1.4.2  yamt 
   1633  1.1.1.1.4.2  yamt /* vec_sl (vector shift left)
   1634  1.1.1.1.4.2  yamt  * ======
   1635  1.1.1.1.4.2  yamt  */
   1636  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_sl(vec_uchar16 a, vec_uchar16 b)
   1637  1.1.1.1.4.2  yamt {
   1638  1.1.1.1.4.2  yamt   vec_ushort8 hi, lo;
   1639  1.1.1.1.4.2  yamt 
   1640  1.1.1.1.4.2  yamt   lo = spu_and(spu_sl((vec_ushort8)(a), spu_and((vec_ushort8)(b), 7)), 0xFF);
   1641  1.1.1.1.4.2  yamt   hi = spu_sl(spu_and((vec_ushort8)(a), -256), spu_and(spu_rlmask((vec_ushort8)(b), -8), 7));
   1642  1.1.1.1.4.2  yamt 
   1643  1.1.1.1.4.2  yamt   return ((vec_uchar16)(spu_or(hi, lo)));
   1644  1.1.1.1.4.2  yamt }
   1645  1.1.1.1.4.2  yamt 
   1646  1.1.1.1.4.2  yamt static inline vec_char16 vec_sl(vec_char16 a, vec_uchar16 b)
   1647  1.1.1.1.4.2  yamt {
   1648  1.1.1.1.4.2  yamt   return ((vec_char16)(vec_sl((vec_uchar16)(a), b)));
   1649  1.1.1.1.4.2  yamt }
   1650  1.1.1.1.4.2  yamt 
   1651  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_sl(vec_ushort8 a, vec_ushort8 b)
   1652  1.1.1.1.4.2  yamt {
   1653  1.1.1.1.4.2  yamt   return (spu_sl(a, spu_and(b, 15)));
   1654  1.1.1.1.4.2  yamt }
   1655  1.1.1.1.4.2  yamt 
   1656  1.1.1.1.4.2  yamt static inline vec_short8 vec_sl(vec_short8 a, vec_ushort8 b)
   1657  1.1.1.1.4.2  yamt {
   1658  1.1.1.1.4.2  yamt   return (spu_sl(a, spu_and((vec_ushort8)(b), 15)));
   1659  1.1.1.1.4.2  yamt }
   1660  1.1.1.1.4.2  yamt 
   1661  1.1.1.1.4.2  yamt static inline vec_uint4 vec_sl(vec_uint4 a, vec_uint4 b)
   1662  1.1.1.1.4.2  yamt {
   1663  1.1.1.1.4.2  yamt   return (spu_sl(a, spu_and(b, 31)));
   1664  1.1.1.1.4.2  yamt }
   1665  1.1.1.1.4.2  yamt 
   1666  1.1.1.1.4.2  yamt static inline vec_int4 vec_sl(vec_int4 a, vec_uint4 b)
   1667  1.1.1.1.4.2  yamt {
   1668  1.1.1.1.4.2  yamt   return (spu_sl(a, spu_and(b, 31)));
   1669  1.1.1.1.4.2  yamt }
   1670  1.1.1.1.4.2  yamt 
   1671  1.1.1.1.4.2  yamt 
   1672  1.1.1.1.4.2  yamt /* vec_sld (vector shift left double)
   1673  1.1.1.1.4.2  yamt  * =======
   1674  1.1.1.1.4.2  yamt  */
   1675  1.1.1.1.4.2  yamt #define vec_sld(_a, _b, _c)	spu_shuffle(_a, _b, ((vec_uchar16){ 0+(_c),  1+(_c),  2+(_c),  3+(_c),  \
   1676  1.1.1.1.4.2  yamt 								    4+(_c),  5+(_c),  6+(_c),  7+(_c), 	\
   1677  1.1.1.1.4.2  yamt 								    8+(_c),  9+(_c), 10+(_c), 11+(_c), 	\
   1678  1.1.1.1.4.2  yamt 							           12+(_c), 13+(_c), 14+(_c), 15+(_c)}))
   1679  1.1.1.1.4.2  yamt 
   1680  1.1.1.1.4.2  yamt 
   1681  1.1.1.1.4.2  yamt /* vec_sll (vector shift left long)
   1682  1.1.1.1.4.2  yamt  * =======
   1683  1.1.1.1.4.2  yamt  */
   1684  1.1.1.1.4.2  yamt #define vec_sll(_a, _b)		spu_slqw(_a, spu_extract((vec_uint4)(_b), 0))
   1685  1.1.1.1.4.2  yamt 
   1686  1.1.1.1.4.2  yamt 
   1687  1.1.1.1.4.2  yamt /* vec_slo (vector shift left by octet)
   1688  1.1.1.1.4.2  yamt  * =======
   1689  1.1.1.1.4.2  yamt  */
   1690  1.1.1.1.4.2  yamt #define vec_slo(_a, _b)		spu_slqwbytebc(_a, spu_extract((vec_uint4)(_b), 3) & 0x7F)
   1691  1.1.1.1.4.2  yamt 
   1692  1.1.1.1.4.2  yamt 
   1693  1.1.1.1.4.2  yamt /* vec_splat (vector splat)
   1694  1.1.1.1.4.2  yamt  * =========
   1695  1.1.1.1.4.2  yamt  */
   1696  1.1.1.1.4.2  yamt #define vec_splat(_a, _b)	spu_splats(spu_extract(_a, _b))
   1697  1.1.1.1.4.2  yamt 
   1698  1.1.1.1.4.2  yamt 
   1699  1.1.1.1.4.2  yamt /* vec_splat_s8 (vector splat signed byte)
   1700  1.1.1.1.4.2  yamt  * ============
   1701  1.1.1.1.4.2  yamt  */
   1702  1.1.1.1.4.2  yamt #define vec_splat_s8(_a)	spu_splats((signed char)(_a))
   1703  1.1.1.1.4.2  yamt 
   1704  1.1.1.1.4.2  yamt 
   1705  1.1.1.1.4.2  yamt /* vec_splat_s16 (vector splat signed half-word)
   1706  1.1.1.1.4.2  yamt  * =============
   1707  1.1.1.1.4.2  yamt  */
   1708  1.1.1.1.4.2  yamt #define vec_splat_s16(_a)	spu_splats((signed short)(_a))
   1709  1.1.1.1.4.2  yamt 
   1710  1.1.1.1.4.2  yamt 
   1711  1.1.1.1.4.2  yamt /* vec_splat_s32 (vector splat signed word)
   1712  1.1.1.1.4.2  yamt  * =============
   1713  1.1.1.1.4.2  yamt  */
   1714  1.1.1.1.4.2  yamt #define vec_splat_s32(_a)	spu_splats((signed int)(_a))
   1715  1.1.1.1.4.2  yamt 
   1716  1.1.1.1.4.2  yamt 
   1717  1.1.1.1.4.2  yamt /* vec_splat_u8 (vector splat unsigned byte)
   1718  1.1.1.1.4.2  yamt  * ============
   1719  1.1.1.1.4.2  yamt  */
   1720  1.1.1.1.4.2  yamt #define vec_splat_u8(_a)	spu_splats((unsigned char)(_a))
   1721  1.1.1.1.4.2  yamt 
   1722  1.1.1.1.4.2  yamt 
   1723  1.1.1.1.4.2  yamt /* vec_splat_u16 (vector splat unsigned half-word)
   1724  1.1.1.1.4.2  yamt  * =============
   1725  1.1.1.1.4.2  yamt  */
   1726  1.1.1.1.4.2  yamt #define vec_splat_u16(_a)	spu_splats((unsigned short)(_a))
   1727  1.1.1.1.4.2  yamt 
   1728  1.1.1.1.4.2  yamt 
   1729  1.1.1.1.4.2  yamt /* vec_splat_u32 (vector splat unsigned word)
   1730  1.1.1.1.4.2  yamt  * =============
   1731  1.1.1.1.4.2  yamt  */
   1732  1.1.1.1.4.2  yamt #define vec_splat_u32(_a)	spu_splats((unsigned int)(_a))
   1733  1.1.1.1.4.2  yamt 
   1734  1.1.1.1.4.2  yamt 
   1735  1.1.1.1.4.2  yamt /* vec_sr (vector shift right)
   1736  1.1.1.1.4.2  yamt  * ======
   1737  1.1.1.1.4.2  yamt  */
   1738  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_sr(vec_uchar16 a, vec_uchar16 b)
   1739  1.1.1.1.4.2  yamt {
   1740  1.1.1.1.4.2  yamt   vec_ushort8 hi, lo;
   1741  1.1.1.1.4.2  yamt 
   1742  1.1.1.1.4.2  yamt   lo = spu_rlmask(spu_and((vec_ushort8)(a), 0xFF), spu_sub(0, (vec_short8)(spu_and((vec_ushort8)(b), 7))));
   1743  1.1.1.1.4.2  yamt   hi = spu_and(spu_rlmask((vec_ushort8)(a), spu_sub(0, (vec_short8)(spu_and(spu_rlmask((vec_ushort8)(b), -8), 7)))), -256);
   1744  1.1.1.1.4.2  yamt 
   1745  1.1.1.1.4.2  yamt   return ((vec_uchar16)(spu_or(hi, lo)));
   1746  1.1.1.1.4.2  yamt }
   1747  1.1.1.1.4.2  yamt 
   1748  1.1.1.1.4.2  yamt static inline vec_char16 vec_sr(vec_char16 a, vec_uchar16 b)
   1749  1.1.1.1.4.2  yamt {
   1750  1.1.1.1.4.2  yamt   return ((vec_char16)(vec_sr((vec_uchar16)(a), b)));
   1751  1.1.1.1.4.2  yamt }
   1752  1.1.1.1.4.2  yamt 
   1753  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_sr(vec_ushort8 a, vec_ushort8 b)
   1754  1.1.1.1.4.2  yamt {
   1755  1.1.1.1.4.2  yamt   return (spu_rlmask(a, spu_sub(0, (vec_short8)(spu_and(b, 15)))));
   1756  1.1.1.1.4.2  yamt }
   1757  1.1.1.1.4.2  yamt 
   1758  1.1.1.1.4.2  yamt static inline vec_short8 vec_sr(vec_short8 a, vec_ushort8 b)
   1759  1.1.1.1.4.2  yamt {
   1760  1.1.1.1.4.2  yamt   return ((vec_short8)(vec_sr((vec_ushort8)(a), b)));
   1761  1.1.1.1.4.2  yamt }
   1762  1.1.1.1.4.2  yamt 
   1763  1.1.1.1.4.2  yamt static inline vec_uint4 vec_sr(vec_uint4 a, vec_uint4 b)
   1764  1.1.1.1.4.2  yamt {
   1765  1.1.1.1.4.2  yamt   return (spu_rlmask(a, spu_sub(0, (vec_int4)(spu_and(b, 31)))));
   1766  1.1.1.1.4.2  yamt }
   1767  1.1.1.1.4.2  yamt 
   1768  1.1.1.1.4.2  yamt static inline vec_int4 vec_sr(vec_int4 a, vec_uint4 b)
   1769  1.1.1.1.4.2  yamt {
   1770  1.1.1.1.4.2  yamt   return ((vec_int4)(vec_sr((vec_uint4)(a), b)));
   1771  1.1.1.1.4.2  yamt }
   1772  1.1.1.1.4.2  yamt 
   1773  1.1.1.1.4.2  yamt 
   1774  1.1.1.1.4.2  yamt /* vec_sra (vector shift right algebraic)
   1775  1.1.1.1.4.2  yamt  * =======
   1776  1.1.1.1.4.2  yamt  */
   1777  1.1.1.1.4.2  yamt static inline vec_char16 vec_sra(vec_char16 a, vec_uchar16 b)
   1778  1.1.1.1.4.2  yamt {
   1779  1.1.1.1.4.2  yamt   vec_short8 hi, lo;
   1780  1.1.1.1.4.2  yamt 
   1781  1.1.1.1.4.2  yamt   lo = spu_and(spu_rlmaska(spu_extend(a), spu_sub(0, (vec_short8)(spu_and((vec_ushort8)(b), 7)))), 0xFF);
   1782  1.1.1.1.4.2  yamt   hi = spu_and(spu_rlmaska((vec_short8)(a), spu_sub(0, (vec_short8)(spu_and(spu_rlmask((vec_ushort8)(b), -8), 7)))), -256);
   1783  1.1.1.1.4.2  yamt 
   1784  1.1.1.1.4.2  yamt   return ((vec_char16)(spu_or(hi, lo)));
   1785  1.1.1.1.4.2  yamt }
   1786  1.1.1.1.4.2  yamt 
   1787  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_sra(vec_uchar16 a, vec_uchar16 b)
   1788  1.1.1.1.4.2  yamt {
   1789  1.1.1.1.4.2  yamt   return ((vec_uchar16)(vec_sra((vec_char16)(a), b)));
   1790  1.1.1.1.4.2  yamt }
   1791  1.1.1.1.4.2  yamt 
   1792  1.1.1.1.4.2  yamt static inline vec_short8 vec_sra(vec_short8 a, vec_ushort8 b)
   1793  1.1.1.1.4.2  yamt {
   1794  1.1.1.1.4.2  yamt   return (spu_rlmaska(a, spu_sub(0, (vec_short8)(spu_and(b, 15)))));
   1795  1.1.1.1.4.2  yamt }
   1796  1.1.1.1.4.2  yamt 
   1797  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_sra(vec_ushort8 a, vec_ushort8 b)
   1798  1.1.1.1.4.2  yamt {
   1799  1.1.1.1.4.2  yamt   return ((vec_ushort8)(vec_sra((vec_short8)(a), b)));
   1800  1.1.1.1.4.2  yamt }
   1801  1.1.1.1.4.2  yamt 
   1802  1.1.1.1.4.2  yamt static inline vec_int4 vec_sra(vec_int4 a, vec_uint4 b)
   1803  1.1.1.1.4.2  yamt {
   1804  1.1.1.1.4.2  yamt   return (spu_rlmaska(a, spu_sub(0, (vec_int4)(spu_and(b, 31)))));
   1805  1.1.1.1.4.2  yamt }
   1806  1.1.1.1.4.2  yamt 
   1807  1.1.1.1.4.2  yamt static inline vec_uint4 vec_sra(vec_uint4 a, vec_uint4 b)
   1808  1.1.1.1.4.2  yamt {
   1809  1.1.1.1.4.2  yamt   return ((vec_uint4)(vec_sra((vec_int4)(a), b)));
   1810  1.1.1.1.4.2  yamt }
   1811  1.1.1.1.4.2  yamt 
   1812  1.1.1.1.4.2  yamt 
   1813  1.1.1.1.4.2  yamt /* vec_srl (vector shift right long)
   1814  1.1.1.1.4.2  yamt  * =======
   1815  1.1.1.1.4.2  yamt  */
   1816  1.1.1.1.4.2  yamt #define vec_srl(_a, _b)		spu_rlmaskqw(_a, 0-spu_extract((vec_int4)(_b), 3))
   1817  1.1.1.1.4.2  yamt 
   1818  1.1.1.1.4.2  yamt 
   1819  1.1.1.1.4.2  yamt /* vec_sro (vector shift right by octet)
   1820  1.1.1.1.4.2  yamt  * =======
   1821  1.1.1.1.4.2  yamt  */
   1822  1.1.1.1.4.2  yamt #define vec_sro(_a, _b)		spu_rlmaskqwbyte(_a, 0 - ((spu_extract((vec_int4)(_b), 3) >> 3) & 0xF))
   1823  1.1.1.1.4.2  yamt 
   1824  1.1.1.1.4.2  yamt /* vec_st (vector store indexed)
   1825  1.1.1.1.4.2  yamt  * ======
   1826  1.1.1.1.4.2  yamt  */
   1827  1.1.1.1.4.2  yamt static inline void vec_st(vec_uchar16 a, int b, unsigned char *c)
   1828  1.1.1.1.4.2  yamt {
   1829  1.1.1.1.4.2  yamt   *((vec_uchar16 *)(c+b)) = a;
   1830  1.1.1.1.4.2  yamt }
   1831  1.1.1.1.4.2  yamt 
   1832  1.1.1.1.4.2  yamt static inline void vec_st(vec_uchar16 a, int b, vec_uchar16 *c)
   1833  1.1.1.1.4.2  yamt {
   1834  1.1.1.1.4.2  yamt   *((vec_uchar16 *)((unsigned char *)(c)+b)) = a;
   1835  1.1.1.1.4.2  yamt }
   1836  1.1.1.1.4.2  yamt 
   1837  1.1.1.1.4.2  yamt static inline void vec_st(vec_char16 a, int b, signed char *c)
   1838  1.1.1.1.4.2  yamt {
   1839  1.1.1.1.4.2  yamt   *((vec_char16 *)(c+b)) = a;
   1840  1.1.1.1.4.2  yamt }
   1841  1.1.1.1.4.2  yamt 
   1842  1.1.1.1.4.2  yamt static inline void vec_st(vec_char16 a, int b, vec_char16 *c)
   1843  1.1.1.1.4.2  yamt {
   1844  1.1.1.1.4.2  yamt   *((vec_char16 *)((signed char *)(c)+b)) = a;
   1845  1.1.1.1.4.2  yamt }
   1846  1.1.1.1.4.2  yamt 
   1847  1.1.1.1.4.2  yamt static inline void vec_st(vec_bchar16 a, int b, signed char *c)
   1848  1.1.1.1.4.2  yamt {
   1849  1.1.1.1.4.2  yamt   *((vec_bchar16 *)((signed char *)(c)+b)) = a;
   1850  1.1.1.1.4.2  yamt }
   1851  1.1.1.1.4.2  yamt 
   1852  1.1.1.1.4.2  yamt static inline void vec_st(vec_ushort8 a, int b, unsigned short *c)
   1853  1.1.1.1.4.2  yamt {
   1854  1.1.1.1.4.2  yamt   *((vec_ushort8 *)((unsigned char *)(c)+b)) = a;
   1855  1.1.1.1.4.2  yamt }
   1856  1.1.1.1.4.2  yamt 
   1857  1.1.1.1.4.2  yamt static inline void vec_st(vec_ushort8 a, int b, vec_ushort8 *c)
   1858  1.1.1.1.4.2  yamt {
   1859  1.1.1.1.4.2  yamt   *((vec_ushort8 *)((unsigned char *)(c)+b)) = a;
   1860  1.1.1.1.4.2  yamt }
   1861  1.1.1.1.4.2  yamt 
   1862  1.1.1.1.4.2  yamt static inline void vec_st(vec_short8 a, int b, signed short *c)
   1863  1.1.1.1.4.2  yamt {
   1864  1.1.1.1.4.2  yamt   *((vec_short8 *)((unsigned char *)(c)+b)) = a;
   1865  1.1.1.1.4.2  yamt }
   1866  1.1.1.1.4.2  yamt 
   1867  1.1.1.1.4.2  yamt static inline void vec_st(vec_short8 a, int b, vec_short8 *c)
   1868  1.1.1.1.4.2  yamt {
   1869  1.1.1.1.4.2  yamt   *((vec_short8 *)((signed char *)(c)+b)) = a;
   1870  1.1.1.1.4.2  yamt }
   1871  1.1.1.1.4.2  yamt 
   1872  1.1.1.1.4.2  yamt static inline void vec_st(vec_bshort8 a, int b, signed short *c)
   1873  1.1.1.1.4.2  yamt {
   1874  1.1.1.1.4.2  yamt   *((vec_bshort8 *)((signed char *)(c)+b)) = a;
   1875  1.1.1.1.4.2  yamt }
   1876  1.1.1.1.4.2  yamt 
   1877  1.1.1.1.4.2  yamt static inline void vec_st(vec_uint4 a, int b, unsigned int *c)
   1878  1.1.1.1.4.2  yamt {
   1879  1.1.1.1.4.2  yamt   *((vec_uint4 *)((unsigned char *)(c)+b)) = a;
   1880  1.1.1.1.4.2  yamt }
   1881  1.1.1.1.4.2  yamt 
   1882  1.1.1.1.4.2  yamt static inline void vec_st(vec_uint4 a, int b, vec_uint4 *c)
   1883  1.1.1.1.4.2  yamt {
   1884  1.1.1.1.4.2  yamt   *((vec_uint4 *)((unsigned char *)(c)+b)) = a;
   1885  1.1.1.1.4.2  yamt }
   1886  1.1.1.1.4.2  yamt 
   1887  1.1.1.1.4.2  yamt static inline void vec_st(vec_int4 a, int b, signed int *c)
   1888  1.1.1.1.4.2  yamt {
   1889  1.1.1.1.4.2  yamt   *((vec_int4 *)((unsigned char *)(c)+b)) = a;
   1890  1.1.1.1.4.2  yamt }
   1891  1.1.1.1.4.2  yamt 
   1892  1.1.1.1.4.2  yamt static inline void vec_st(vec_int4 a, int b, vec_int4 *c)
   1893  1.1.1.1.4.2  yamt {
   1894  1.1.1.1.4.2  yamt   *((vec_int4 *)((signed char *)(c)+b)) = a;
   1895  1.1.1.1.4.2  yamt }
   1896  1.1.1.1.4.2  yamt 
   1897  1.1.1.1.4.2  yamt static inline void vec_st(vec_bint4 a, int b, signed int *c)
   1898  1.1.1.1.4.2  yamt {
   1899  1.1.1.1.4.2  yamt   *((vec_bint4 *)((signed char *)(c)+b)) = a;
   1900  1.1.1.1.4.2  yamt }
   1901  1.1.1.1.4.2  yamt 
   1902  1.1.1.1.4.2  yamt static inline void vec_st(vec_float4 a, int b, float *c)
   1903  1.1.1.1.4.2  yamt {
   1904  1.1.1.1.4.2  yamt   *((vec_float4 *)((unsigned char *)(c)+b)) = a;
   1905  1.1.1.1.4.2  yamt }
   1906  1.1.1.1.4.2  yamt 
   1907  1.1.1.1.4.2  yamt static inline void vec_st(vec_float4 a, int b, vec_float4 *c)
   1908  1.1.1.1.4.2  yamt {
   1909  1.1.1.1.4.2  yamt   *((vec_float4 *)((unsigned char *)(c)+b)) = a;
   1910  1.1.1.1.4.2  yamt }
   1911  1.1.1.1.4.2  yamt 
   1912  1.1.1.1.4.2  yamt 
   1913  1.1.1.1.4.2  yamt /* vec_ste (vector store element indexed)
   1914  1.1.1.1.4.2  yamt  * =======
   1915  1.1.1.1.4.2  yamt  */
   1916  1.1.1.1.4.2  yamt static inline void vec_ste(vec_uchar16 a, int b, unsigned char *c)
   1917  1.1.1.1.4.2  yamt {
   1918  1.1.1.1.4.2  yamt   unsigned char *ptr;
   1919  1.1.1.1.4.2  yamt 
   1920  1.1.1.1.4.2  yamt   ptr = c + b;
   1921  1.1.1.1.4.2  yamt   *ptr = spu_extract(a, (int)(ptr) & 15);
   1922  1.1.1.1.4.2  yamt }
   1923  1.1.1.1.4.2  yamt 
   1924  1.1.1.1.4.2  yamt static inline void vec_ste(vec_char16 a, int b, signed char *c)
   1925  1.1.1.1.4.2  yamt {
   1926  1.1.1.1.4.2  yamt   vec_ste((vec_uchar16)(a), b, (unsigned char *)(c));
   1927  1.1.1.1.4.2  yamt }
   1928  1.1.1.1.4.2  yamt 
   1929  1.1.1.1.4.2  yamt static inline void vec_ste(vec_bchar16 a, int b, signed char *c)
   1930  1.1.1.1.4.2  yamt {
   1931  1.1.1.1.4.2  yamt   vec_ste((vec_uchar16)(a), b, (unsigned char *)(c));
   1932  1.1.1.1.4.2  yamt }
   1933  1.1.1.1.4.2  yamt 
   1934  1.1.1.1.4.2  yamt static inline void vec_ste(vec_ushort8 a, int b, unsigned short *c)
   1935  1.1.1.1.4.2  yamt {
   1936  1.1.1.1.4.2  yamt   unsigned short *ptr;
   1937  1.1.1.1.4.2  yamt 
   1938  1.1.1.1.4.2  yamt   ptr = (unsigned short *)(((unsigned int)(c) + b) & ~1);
   1939  1.1.1.1.4.2  yamt   *ptr = spu_extract(a, ((int)(ptr) >> 1) & 7);
   1940  1.1.1.1.4.2  yamt }
   1941  1.1.1.1.4.2  yamt 
   1942  1.1.1.1.4.2  yamt static inline void vec_ste(vec_short8 a, int b, signed short *c)
   1943  1.1.1.1.4.2  yamt {
   1944  1.1.1.1.4.2  yamt   vec_ste((vec_ushort8)(a), b, (unsigned short *)(c));
   1945  1.1.1.1.4.2  yamt }
   1946  1.1.1.1.4.2  yamt 
   1947  1.1.1.1.4.2  yamt static inline void vec_ste(vec_bshort8 a, int b, signed short *c)
   1948  1.1.1.1.4.2  yamt {
   1949  1.1.1.1.4.2  yamt   vec_ste((vec_ushort8)(a), b, (unsigned short *)(c));
   1950  1.1.1.1.4.2  yamt }
   1951  1.1.1.1.4.2  yamt 
   1952  1.1.1.1.4.2  yamt static inline void vec_ste(vec_uint4 a, int b, unsigned int *c)
   1953  1.1.1.1.4.2  yamt {
   1954  1.1.1.1.4.2  yamt   unsigned int *ptr;
   1955  1.1.1.1.4.2  yamt 
   1956  1.1.1.1.4.2  yamt   ptr = (unsigned int *)(((unsigned int)(c) + b) & ~3);
   1957  1.1.1.1.4.2  yamt   *ptr = spu_extract(a, ((int)(ptr) >> 2) & 3);
   1958  1.1.1.1.4.2  yamt }
   1959  1.1.1.1.4.2  yamt 
   1960  1.1.1.1.4.2  yamt static inline void vec_ste(vec_int4 a, int b, signed int *c)
   1961  1.1.1.1.4.2  yamt {
   1962  1.1.1.1.4.2  yamt   vec_ste((vec_uint4)(a), b, (unsigned int *)(c));
   1963  1.1.1.1.4.2  yamt }
   1964  1.1.1.1.4.2  yamt 
   1965  1.1.1.1.4.2  yamt static inline void vec_ste(vec_bint4 a, int b, signed int *c)
   1966  1.1.1.1.4.2  yamt {
   1967  1.1.1.1.4.2  yamt   vec_ste((vec_uint4)(a), b, (unsigned int *)(c));
   1968  1.1.1.1.4.2  yamt }
   1969  1.1.1.1.4.2  yamt 
   1970  1.1.1.1.4.2  yamt static inline void vec_ste(vec_float4 a, int b, float *c)
   1971  1.1.1.1.4.2  yamt {
   1972  1.1.1.1.4.2  yamt   vec_ste((vec_uint4)(a), b, (unsigned int *)(c));
   1973  1.1.1.1.4.2  yamt }
   1974  1.1.1.1.4.2  yamt 
   1975  1.1.1.1.4.2  yamt 
   1976  1.1.1.1.4.2  yamt /* vec_stl (vector store indexed LRU)
   1977  1.1.1.1.4.2  yamt  * =======
   1978  1.1.1.1.4.2  yamt  */
   1979  1.1.1.1.4.2  yamt #define vec_stl(_a, _b, _c)		vec_st(_a, _b, _c)
   1980  1.1.1.1.4.2  yamt 
   1981  1.1.1.1.4.2  yamt 
   1982  1.1.1.1.4.2  yamt /* vec_sub (vector subtract)
   1983  1.1.1.1.4.2  yamt  * =======
   1984  1.1.1.1.4.2  yamt  */
   1985  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_sub(vec_uchar16 a, vec_uchar16 b)
   1986  1.1.1.1.4.2  yamt {
   1987  1.1.1.1.4.2  yamt   return ((vec_uchar16)(spu_sel(spu_sub((vec_ushort8)(a), (vec_ushort8)(b)),
   1988  1.1.1.1.4.2  yamt 				spu_sub(spu_and((vec_ushort8)(a), -256), spu_and((vec_ushort8)(b), -256)),
   1989  1.1.1.1.4.2  yamt 				spu_splats((unsigned short)0xFF00))));
   1990  1.1.1.1.4.2  yamt }
   1991  1.1.1.1.4.2  yamt 
   1992  1.1.1.1.4.2  yamt static inline vec_char16 vec_sub(vec_char16 a, vec_char16 b)
   1993  1.1.1.1.4.2  yamt {
   1994  1.1.1.1.4.2  yamt   return ((vec_char16)(vec_sub((vec_uchar16)(a), (vec_uchar16)(b))));
   1995  1.1.1.1.4.2  yamt }
   1996  1.1.1.1.4.2  yamt 
   1997  1.1.1.1.4.2  yamt static inline vec_char16 vec_sub(vec_bchar16 a, vec_char16 b)
   1998  1.1.1.1.4.2  yamt {
   1999  1.1.1.1.4.2  yamt   return ((vec_char16)(vec_sub((vec_uchar16)(a), (vec_uchar16)(b))));
   2000  1.1.1.1.4.2  yamt }
   2001  1.1.1.1.4.2  yamt 
   2002  1.1.1.1.4.2  yamt static inline vec_char16 vec_sub(vec_char16 a, vec_bchar16 b)
   2003  1.1.1.1.4.2  yamt {
   2004  1.1.1.1.4.2  yamt   return ((vec_char16)(vec_sub((vec_uchar16)(a), (vec_uchar16)(b))));
   2005  1.1.1.1.4.2  yamt }
   2006  1.1.1.1.4.2  yamt 
   2007  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_sub(vec_ushort8 a, vec_ushort8 b)
   2008  1.1.1.1.4.2  yamt {
   2009  1.1.1.1.4.2  yamt   return (spu_sub(a, b));
   2010  1.1.1.1.4.2  yamt }
   2011  1.1.1.1.4.2  yamt 
   2012  1.1.1.1.4.2  yamt static inline vec_short8 vec_sub(vec_short8 a, vec_short8 b)
   2013  1.1.1.1.4.2  yamt {
   2014  1.1.1.1.4.2  yamt   return (spu_sub(a, b));
   2015  1.1.1.1.4.2  yamt }
   2016  1.1.1.1.4.2  yamt 
   2017  1.1.1.1.4.2  yamt static inline vec_short8 vec_sub(vec_bshort8 a, vec_short8 b)
   2018  1.1.1.1.4.2  yamt {
   2019  1.1.1.1.4.2  yamt   return (spu_sub((vec_short8)(a), b));
   2020  1.1.1.1.4.2  yamt }
   2021  1.1.1.1.4.2  yamt 
   2022  1.1.1.1.4.2  yamt static inline vec_short8 vec_sub(vec_short8 a, vec_bshort8 b)
   2023  1.1.1.1.4.2  yamt {
   2024  1.1.1.1.4.2  yamt   return (spu_sub(a, (vec_short8)(b)));
   2025  1.1.1.1.4.2  yamt }
   2026  1.1.1.1.4.2  yamt 
   2027  1.1.1.1.4.2  yamt static inline vec_uint4 vec_sub(vec_uint4 a, vec_uint4 b)
   2028  1.1.1.1.4.2  yamt {
   2029  1.1.1.1.4.2  yamt   return (spu_sub(a, b));
   2030  1.1.1.1.4.2  yamt }
   2031  1.1.1.1.4.2  yamt 
   2032  1.1.1.1.4.2  yamt static inline vec_int4 vec_sub(vec_int4 a, vec_int4 b)
   2033  1.1.1.1.4.2  yamt {
   2034  1.1.1.1.4.2  yamt   return (spu_sub(a, b));
   2035  1.1.1.1.4.2  yamt }
   2036  1.1.1.1.4.2  yamt 
   2037  1.1.1.1.4.2  yamt static inline vec_int4 vec_sub(vec_bint4 a, vec_int4 b)
   2038  1.1.1.1.4.2  yamt {
   2039  1.1.1.1.4.2  yamt   return (spu_sub((vec_int4)(a), b));
   2040  1.1.1.1.4.2  yamt }
   2041  1.1.1.1.4.2  yamt 
   2042  1.1.1.1.4.2  yamt static inline vec_int4 vec_sub(vec_int4 a, vec_bint4 b)
   2043  1.1.1.1.4.2  yamt {
   2044  1.1.1.1.4.2  yamt   return (spu_sub(a, (vec_int4)(b)));
   2045  1.1.1.1.4.2  yamt }
   2046  1.1.1.1.4.2  yamt 
   2047  1.1.1.1.4.2  yamt static inline vec_float4 vec_sub(vec_float4 a, vec_float4 b)
   2048  1.1.1.1.4.2  yamt {
   2049  1.1.1.1.4.2  yamt   return (spu_sub(a, b));
   2050  1.1.1.1.4.2  yamt }
   2051  1.1.1.1.4.2  yamt 
   2052  1.1.1.1.4.2  yamt 
   2053  1.1.1.1.4.2  yamt /* vec_subc (vector subtract carryout)
   2054  1.1.1.1.4.2  yamt  * ========
   2055  1.1.1.1.4.2  yamt  */
   2056  1.1.1.1.4.2  yamt #define vec_subc(_a, _b)	spu_genb(_a, _b)
   2057  1.1.1.1.4.2  yamt 
   2058  1.1.1.1.4.2  yamt 
   2059  1.1.1.1.4.2  yamt /* vec_subs (vector subtract saturate)
   2060  1.1.1.1.4.2  yamt  * ========
   2061  1.1.1.1.4.2  yamt  */
   2062  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_subs(vec_uchar16 a, vec_uchar16 b)
   2063  1.1.1.1.4.2  yamt {
   2064  1.1.1.1.4.2  yamt   vec_ushort8 s1, s2;
   2065  1.1.1.1.4.2  yamt   vec_uchar16 s, d;
   2066  1.1.1.1.4.2  yamt 
   2067  1.1.1.1.4.2  yamt   s1 = spu_sub(spu_rlmask((vec_ushort8)(a), -8), spu_rlmask((vec_ushort8)(b), -8));
   2068  1.1.1.1.4.2  yamt   s2 = spu_sub(spu_and((vec_ushort8)(a), 0xFF), spu_and((vec_ushort8)(b), 0xFF));
   2069  1.1.1.1.4.2  yamt   s  = (vec_uchar16)(spu_shuffle(s1, s2, ((vec_uchar16){0, 16,  2, 18,  4, 20,  6, 22,
   2070  1.1.1.1.4.2  yamt 					                8, 24, 10, 26, 12, 28, 14, 30})));
   2071  1.1.1.1.4.2  yamt   d  = (vec_uchar16)(spu_shuffle(s1, s2, ((vec_uchar16){1, 17,  3, 19,  5, 21,  7, 23,
   2072  1.1.1.1.4.2  yamt 					                9, 25, 11, 27, 13, 29, 15, 31})));
   2073  1.1.1.1.4.2  yamt   return (spu_andc(d, s));
   2074  1.1.1.1.4.2  yamt }
   2075  1.1.1.1.4.2  yamt 
   2076  1.1.1.1.4.2  yamt static inline vec_char16 vec_subs(vec_char16 a, vec_char16 b)
   2077  1.1.1.1.4.2  yamt {
   2078  1.1.1.1.4.2  yamt   vec_ushort8 s1, s2;
   2079  1.1.1.1.4.2  yamt   vec_uchar16 s, d;
   2080  1.1.1.1.4.2  yamt 
   2081  1.1.1.1.4.2  yamt   s1 = spu_sub(spu_rlmask((vec_ushort8)(a), -8), spu_rlmask((vec_ushort8)(b), -8));
   2082  1.1.1.1.4.2  yamt   s2 = spu_sub(spu_and((vec_ushort8)(a), 0xFF), spu_and((vec_ushort8)(b), 0xFF));
   2083  1.1.1.1.4.2  yamt   s  = (vec_uchar16)(spu_shuffle(s1, s2, ((vec_uchar16){1, 17,  3, 19,  5, 21,  7, 23,
   2084  1.1.1.1.4.2  yamt 					                9, 25, 11, 27, 13, 29, 15, 31})));
   2085  1.1.1.1.4.2  yamt   d  = spu_sel(s, spu_splats((unsigned char)0x7F), spu_cmpgt(spu_nor((vec_uchar16)(a), spu_nand(s, (vec_uchar16)(b))), 0x7F));
   2086  1.1.1.1.4.2  yamt   d  = spu_sel(d, spu_splats((unsigned char)0x80), spu_cmpgt(spu_and((vec_uchar16)(a), spu_nor(s, (vec_uchar16)(b))), 0x7F));
   2087  1.1.1.1.4.2  yamt 
   2088  1.1.1.1.4.2  yamt   return ((vec_char16)(d));
   2089  1.1.1.1.4.2  yamt }
   2090  1.1.1.1.4.2  yamt 
   2091  1.1.1.1.4.2  yamt static inline vec_char16 vec_subs(vec_bchar16 a, vec_char16 b)
   2092  1.1.1.1.4.2  yamt {
   2093  1.1.1.1.4.2  yamt   return (vec_subs((vec_char16)(a), b));
   2094  1.1.1.1.4.2  yamt }
   2095  1.1.1.1.4.2  yamt 
   2096  1.1.1.1.4.2  yamt static inline vec_char16 vec_subs(vec_char16 a, vec_bchar16 b)
   2097  1.1.1.1.4.2  yamt {
   2098  1.1.1.1.4.2  yamt   return (vec_subs(a, (vec_char16)(b)));
   2099  1.1.1.1.4.2  yamt }
   2100  1.1.1.1.4.2  yamt 
   2101  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_subs(vec_ushort8 a, vec_ushort8 b)
   2102  1.1.1.1.4.2  yamt {
   2103  1.1.1.1.4.2  yamt   return (spu_andc(spu_sub(a, b), spu_cmpgt(b, a)));
   2104  1.1.1.1.4.2  yamt }
   2105  1.1.1.1.4.2  yamt 
   2106  1.1.1.1.4.2  yamt static inline vec_short8 vec_subs(vec_short8 a, vec_short8 b)
   2107  1.1.1.1.4.2  yamt {
   2108  1.1.1.1.4.2  yamt   vec_short8 s;
   2109  1.1.1.1.4.2  yamt   vec_short8 d;
   2110  1.1.1.1.4.2  yamt 
   2111  1.1.1.1.4.2  yamt   s = spu_sub(a, b);
   2112  1.1.1.1.4.2  yamt   d = spu_sel(s, spu_splats((signed short)0x7FFF), (vec_ushort8)(spu_rlmaska(spu_nor(a, spu_nand(s, b)), -15)));
   2113  1.1.1.1.4.2  yamt   d = spu_sel(d, spu_splats((signed short)0x8000), (vec_ushort8)(spu_rlmaska(spu_and(a, spu_nor(s, b)), -15)));
   2114  1.1.1.1.4.2  yamt 
   2115  1.1.1.1.4.2  yamt   return (d);
   2116  1.1.1.1.4.2  yamt }
   2117  1.1.1.1.4.2  yamt 
   2118  1.1.1.1.4.2  yamt static inline vec_short8 vec_subs(vec_bshort8 a, vec_short8 b)
   2119  1.1.1.1.4.2  yamt {
   2120  1.1.1.1.4.2  yamt   return ((vec_short8)(vec_subs((vec_short8)(a), b)));
   2121  1.1.1.1.4.2  yamt }
   2122  1.1.1.1.4.2  yamt 
   2123  1.1.1.1.4.2  yamt static inline vec_short8 vec_subs(vec_short8 a, vec_bshort8 b)
   2124  1.1.1.1.4.2  yamt {
   2125  1.1.1.1.4.2  yamt   return ((vec_short8)(vec_subs(a, (vec_short8)(b))));
   2126  1.1.1.1.4.2  yamt }
   2127  1.1.1.1.4.2  yamt 
   2128  1.1.1.1.4.2  yamt static inline vec_uint4 vec_subs(vec_uint4 a, vec_uint4 b)
   2129  1.1.1.1.4.2  yamt {
   2130  1.1.1.1.4.2  yamt   return (spu_andc(spu_sub(a, b), spu_cmpgt(b, a)));
   2131  1.1.1.1.4.2  yamt }
   2132  1.1.1.1.4.2  yamt 
   2133  1.1.1.1.4.2  yamt static inline vec_int4 vec_subs(vec_int4 a, vec_int4 b)
   2134  1.1.1.1.4.2  yamt {
   2135  1.1.1.1.4.2  yamt   vec_int4 s;
   2136  1.1.1.1.4.2  yamt   vec_int4 d;
   2137  1.1.1.1.4.2  yamt 
   2138  1.1.1.1.4.2  yamt   s = spu_sub(a, b);
   2139  1.1.1.1.4.2  yamt   d = spu_sel(s, spu_splats((signed int)0x7FFFFFFF), (vec_uint4)(spu_rlmaska(spu_nor(a, spu_nand(s, b)), -31)));
   2140  1.1.1.1.4.2  yamt   d = spu_sel(d, spu_splats((signed int)0x80000000), (vec_uint4)(spu_rlmaska(spu_and(a, spu_nor(s, b)), -31)));
   2141  1.1.1.1.4.2  yamt 
   2142  1.1.1.1.4.2  yamt   return (d);
   2143  1.1.1.1.4.2  yamt }
   2144  1.1.1.1.4.2  yamt 
   2145  1.1.1.1.4.2  yamt static inline vec_int4 vec_subs(vec_bint4 a, vec_int4 b)
   2146  1.1.1.1.4.2  yamt {
   2147  1.1.1.1.4.2  yamt   return ((vec_int4)(vec_subs((vec_int4)(a), b)));
   2148  1.1.1.1.4.2  yamt }
   2149  1.1.1.1.4.2  yamt 
   2150  1.1.1.1.4.2  yamt static inline vec_int4 vec_subs(vec_int4 a, vec_bint4 b)
   2151  1.1.1.1.4.2  yamt {
   2152  1.1.1.1.4.2  yamt   return ((vec_int4)(vec_subs(a, (vec_int4)(b))));
   2153  1.1.1.1.4.2  yamt }
   2154  1.1.1.1.4.2  yamt 
   2155  1.1.1.1.4.2  yamt 
   2156  1.1.1.1.4.2  yamt /* vec_sum4s (vector sum across partial (1/4) saturated)
   2157  1.1.1.1.4.2  yamt  * =========
   2158  1.1.1.1.4.2  yamt  */
   2159  1.1.1.1.4.2  yamt static inline vec_uint4 vec_sum4s(vec_uchar16 a, vec_uint4 b)
   2160  1.1.1.1.4.2  yamt {
   2161  1.1.1.1.4.2  yamt   vec_uint4 a01_23, a0123;
   2162  1.1.1.1.4.2  yamt 
   2163  1.1.1.1.4.2  yamt   a01_23 = (vec_uint4)(spu_add(spu_rlmask((vec_ushort8)(a), -8),
   2164  1.1.1.1.4.2  yamt 			       spu_and((vec_ushort8)(a), 0xFF)));
   2165  1.1.1.1.4.2  yamt   a0123 = spu_add(spu_rlmask(a01_23, -16), spu_and(a01_23, 0x1FF));
   2166  1.1.1.1.4.2  yamt   return (vec_adds(a0123, b));
   2167  1.1.1.1.4.2  yamt }
   2168  1.1.1.1.4.2  yamt 
   2169  1.1.1.1.4.2  yamt static inline vec_int4 vec_sum4s(vec_char16 a, vec_int4 b)
   2170  1.1.1.1.4.2  yamt {
   2171  1.1.1.1.4.2  yamt   vec_int4 a01_23, a0123;
   2172  1.1.1.1.4.2  yamt 
   2173  1.1.1.1.4.2  yamt   a01_23 = (vec_int4)(spu_add(spu_rlmaska((vec_short8)(a), -8),
   2174  1.1.1.1.4.2  yamt 			      spu_extend(a)));
   2175  1.1.1.1.4.2  yamt   a0123 = spu_add(spu_rlmaska(a01_23, -16), spu_extend((vec_short8)(a01_23)));
   2176  1.1.1.1.4.2  yamt   return (vec_adds(a0123, b));
   2177  1.1.1.1.4.2  yamt }
   2178  1.1.1.1.4.2  yamt 
   2179  1.1.1.1.4.2  yamt static inline vec_int4 vec_sum4s(vec_short8 a, vec_int4 b)
   2180  1.1.1.1.4.2  yamt {
   2181  1.1.1.1.4.2  yamt   vec_int4 a0123;
   2182  1.1.1.1.4.2  yamt 
   2183  1.1.1.1.4.2  yamt   a0123 = spu_add(spu_rlmaska((vec_int4)(a), -16), spu_extend(a));
   2184  1.1.1.1.4.2  yamt   return (vec_adds(a0123, b));
   2185  1.1.1.1.4.2  yamt }
   2186  1.1.1.1.4.2  yamt 
   2187  1.1.1.1.4.2  yamt 
   2188  1.1.1.1.4.2  yamt /* vec_sum2s (vector sum across partial (1/2) saturated)
   2189  1.1.1.1.4.2  yamt  * =========
   2190  1.1.1.1.4.2  yamt  */
   2191  1.1.1.1.4.2  yamt static inline vec_int4 vec_sum2s(vec_int4 a, vec_int4 b)
   2192  1.1.1.1.4.2  yamt {
   2193  1.1.1.1.4.2  yamt   vec_int4 c, d;
   2194  1.1.1.1.4.2  yamt   vec_int4 sign1, sign2, sign3;
   2195  1.1.1.1.4.2  yamt   vec_int4 carry, sum_l, sum_h, sat, sat_val;
   2196  1.1.1.1.4.2  yamt 
   2197  1.1.1.1.4.2  yamt   sign1 = spu_rlmaska(a, -31);
   2198  1.1.1.1.4.2  yamt   sign2 = spu_rlmaska(b, -31);
   2199  1.1.1.1.4.2  yamt 
   2200  1.1.1.1.4.2  yamt   c = spu_rlqwbyte(a, -4);
   2201  1.1.1.1.4.2  yamt   sign3 = spu_rlqwbyte(sign1, -4);
   2202  1.1.1.1.4.2  yamt 
   2203  1.1.1.1.4.2  yamt   carry = spu_genc(a, b);
   2204  1.1.1.1.4.2  yamt   sum_l = spu_add(a, b);
   2205  1.1.1.1.4.2  yamt   sum_h = spu_addx(sign1, sign2, carry);
   2206  1.1.1.1.4.2  yamt 
   2207  1.1.1.1.4.2  yamt   carry = spu_genc(sum_l, c);
   2208  1.1.1.1.4.2  yamt   sum_l = spu_add(sum_l, c);
   2209  1.1.1.1.4.2  yamt   sum_h = spu_addx(sum_h, sign3, carry);
   2210  1.1.1.1.4.2  yamt 
   2211  1.1.1.1.4.2  yamt   sign1 = spu_rlmaska(sum_l, -31);
   2212  1.1.1.1.4.2  yamt   sign2 = spu_rlmaska(sum_h, -31);
   2213  1.1.1.1.4.2  yamt 
   2214  1.1.1.1.4.2  yamt   sat_val = spu_xor(sign2, spu_splats((signed int)0x7FFFFFFF));
   2215  1.1.1.1.4.2  yamt 
   2216  1.1.1.1.4.2  yamt   sat = spu_orc(spu_xor(sign1, sign2), (vec_int4)spu_cmpeq(sum_h, sign2));
   2217  1.1.1.1.4.2  yamt 
   2218  1.1.1.1.4.2  yamt   d = spu_and(spu_sel(sum_l, sat_val, (vec_uint4)(sat)), (vec_int4){0, -1, 0, -1});
   2219  1.1.1.1.4.2  yamt 
   2220  1.1.1.1.4.2  yamt   return (d);
   2221  1.1.1.1.4.2  yamt }
   2222  1.1.1.1.4.2  yamt 
   2223  1.1.1.1.4.2  yamt 
   2224  1.1.1.1.4.2  yamt /* vec_sums (vector sum saturated)
   2225  1.1.1.1.4.2  yamt  * ========
   2226  1.1.1.1.4.2  yamt  */
   2227  1.1.1.1.4.2  yamt static inline vec_int4 vec_sums(vec_int4 a, vec_int4 b)
   2228  1.1.1.1.4.2  yamt {
   2229  1.1.1.1.4.2  yamt   vec_int4 a0, a1, a2, c0, c1, c2, d;
   2230  1.1.1.1.4.2  yamt   vec_int4 sign_a, sign_b, sign_l, sign_h;
   2231  1.1.1.1.4.2  yamt   vec_int4 sum_l, sum_h, sat, sat_val;
   2232  1.1.1.1.4.2  yamt 
   2233  1.1.1.1.4.2  yamt   sign_a = spu_rlmaska(a, -31);
   2234  1.1.1.1.4.2  yamt   sign_b = spu_rlmaska(b, -31);
   2235  1.1.1.1.4.2  yamt 
   2236  1.1.1.1.4.2  yamt   a0 = spu_rlqwbyte(a, -12);
   2237  1.1.1.1.4.2  yamt   a1 = spu_rlqwbyte(a, -8);
   2238  1.1.1.1.4.2  yamt   a2 = spu_rlqwbyte(a, -4);
   2239  1.1.1.1.4.2  yamt 
   2240  1.1.1.1.4.2  yamt   sum_l = spu_add(a, b);
   2241  1.1.1.1.4.2  yamt   sum_h = spu_addx(sign_a, sign_b, spu_genc(a, b));
   2242  1.1.1.1.4.2  yamt 
   2243  1.1.1.1.4.2  yamt   c2 = spu_genc(sum_l, a2);
   2244  1.1.1.1.4.2  yamt   sum_l = spu_add(sum_l, a2);
   2245  1.1.1.1.4.2  yamt   sum_h = spu_addx(sum_h, spu_rlqwbyte(sign_a, -4), c2);
   2246  1.1.1.1.4.2  yamt 
   2247  1.1.1.1.4.2  yamt   c1 = spu_genc(sum_l, a1);
   2248  1.1.1.1.4.2  yamt   sum_l = spu_add(sum_l, a1);
   2249  1.1.1.1.4.2  yamt   sum_h = spu_addx(sum_h, spu_rlqwbyte(sign_a, -8), c1);
   2250  1.1.1.1.4.2  yamt 
   2251  1.1.1.1.4.2  yamt   c0 = spu_genc(sum_l, a0);
   2252  1.1.1.1.4.2  yamt   sum_l = spu_add(sum_l, a0);
   2253  1.1.1.1.4.2  yamt   sum_h = spu_addx(sum_h, spu_rlqwbyte(sign_a, -12), c0);
   2254  1.1.1.1.4.2  yamt 
   2255  1.1.1.1.4.2  yamt   sign_l = spu_rlmaska(sum_l, -31);
   2256  1.1.1.1.4.2  yamt   sign_h = spu_rlmaska(sum_h, -31);
   2257  1.1.1.1.4.2  yamt 
   2258  1.1.1.1.4.2  yamt   sat_val = spu_xor(sign_h, spu_splats((signed int)0x7FFFFFFF));
   2259  1.1.1.1.4.2  yamt 
   2260  1.1.1.1.4.2  yamt   sat = spu_orc(spu_xor(sign_l, sign_h), (vec_int4)spu_cmpeq(sum_h, sign_h));
   2261  1.1.1.1.4.2  yamt 
   2262  1.1.1.1.4.2  yamt   d = spu_and(spu_sel(sum_l, sat_val, (vec_uint4)(sat)), ((vec_int4){0, 0, 0, -1}));
   2263  1.1.1.1.4.2  yamt 
   2264  1.1.1.1.4.2  yamt   return (d);
   2265  1.1.1.1.4.2  yamt }
   2266  1.1.1.1.4.2  yamt 
   2267  1.1.1.1.4.2  yamt 
   2268  1.1.1.1.4.2  yamt /* vec_trunc (vector truncate)
   2269  1.1.1.1.4.2  yamt  * =========
   2270  1.1.1.1.4.2  yamt  */
   2271  1.1.1.1.4.2  yamt static inline vec_float4 vec_trunc(vec_float4 a)
   2272  1.1.1.1.4.2  yamt {
   2273  1.1.1.1.4.2  yamt   vec_int4 exp;
   2274  1.1.1.1.4.2  yamt   vec_uint4 mask;
   2275  1.1.1.1.4.2  yamt 
   2276  1.1.1.1.4.2  yamt   exp  = spu_sub(127, (vec_int4)(spu_and(spu_rlmask((vec_uint4)(a), -23), 0xFF)));
   2277  1.1.1.1.4.2  yamt   mask = spu_rlmask(spu_splats((unsigned int)0x7FFFFF), exp);
   2278  1.1.1.1.4.2  yamt   mask = spu_sel(spu_splats((unsigned int)0), mask, spu_cmpgt(exp, -31));
   2279  1.1.1.1.4.2  yamt   mask = spu_or(mask, spu_xor((vec_uint4)(spu_rlmaska(spu_add(exp, -1), -31)), -1));
   2280  1.1.1.1.4.2  yamt   return (spu_andc(a, (vec_float4)(mask)));
   2281  1.1.1.1.4.2  yamt }
   2282  1.1.1.1.4.2  yamt 
   2283  1.1.1.1.4.2  yamt /* vec_unpackh (vector unpack high element)
   2284  1.1.1.1.4.2  yamt  * ===========
   2285  1.1.1.1.4.2  yamt  */
   2286  1.1.1.1.4.2  yamt static inline vec_short8 vec_unpackh(vec_char16 a)
   2287  1.1.1.1.4.2  yamt {
   2288  1.1.1.1.4.2  yamt   return (spu_extend(spu_shuffle(a, a, ((vec_uchar16){0, 0, 1, 1, 2, 2, 3, 3,
   2289  1.1.1.1.4.2  yamt 					              4, 4, 5, 5, 6, 6, 7, 7}))));
   2290  1.1.1.1.4.2  yamt }
   2291  1.1.1.1.4.2  yamt 
   2292  1.1.1.1.4.2  yamt static inline vec_bshort8 vec_unpackh(vec_bchar16 a)
   2293  1.1.1.1.4.2  yamt {
   2294  1.1.1.1.4.2  yamt   return ((vec_bshort8)(vec_unpackh((vec_char16)(a))));
   2295  1.1.1.1.4.2  yamt }
   2296  1.1.1.1.4.2  yamt 
   2297  1.1.1.1.4.2  yamt static inline vec_int4 vec_unpackh(vec_short8 a)
   2298  1.1.1.1.4.2  yamt {
   2299  1.1.1.1.4.2  yamt   return (spu_extend(spu_shuffle(a, a, ((vec_uchar16){0, 0, 0, 1, 0, 0, 2, 3,
   2300  1.1.1.1.4.2  yamt 					              0, 0, 4, 5, 0, 0, 6, 7}))));
   2301  1.1.1.1.4.2  yamt }
   2302  1.1.1.1.4.2  yamt 
   2303  1.1.1.1.4.2  yamt #ifdef SUPPORT_UNPACK_PIXEL
   2304  1.1.1.1.4.2  yamt /* Due to type conflicts, unpacking of pixel types and boolean shorts
   2305  1.1.1.1.4.2  yamt  * can not simultaneously be supported. By default, the boolean short is
   2306  1.1.1.1.4.2  yamt  * supported.
   2307  1.1.1.1.4.2  yamt  */
   2308  1.1.1.1.4.2  yamt static inline vec_uint4 vec_unpackh(vec_pixel8 a)
   2309  1.1.1.1.4.2  yamt {
   2310  1.1.1.1.4.2  yamt   vec_ushort8 p1, p2;
   2311  1.1.1.1.4.2  yamt 
   2312  1.1.1.1.4.2  yamt   p1 = spu_shuffle((vec_ushort8)(spu_rlmaska((vec_short8)(a.p), -7)),
   2313  1.1.1.1.4.2  yamt 		   spu_and((vec_ushort8)(a.p), 0x1F),
   2314  1.1.1.1.4.2  yamt 		   ((vec_uchar16){ 0, 128, 128, 17,  2, 128, 128, 19,
   2315  1.1.1.1.4.2  yamt 			           4, 128, 128, 21,  6, 128, 128, 23}));
   2316  1.1.1.1.4.2  yamt   p2 = spu_shuffle(spu_and(spu_rlmask((vec_ushort8)(a.p), -5), 0x1F),
   2317  1.1.1.1.4.2  yamt 		   spu_and(spu_rlmask((vec_ushort8)(a.p), -10), 0x1F),
   2318  1.1.1.1.4.2  yamt 		   ((vec_uchar16){ 128,  17, 1, 128, 128,  19, 3, 128,
   2319  1.1.1.1.4.2  yamt 			           128,  21, 5, 128, 128,  23, 7, 128}));
   2320  1.1.1.1.4.2  yamt   return ((vec_uint4)(spu_or(p1, p2)));
   2321  1.1.1.1.4.2  yamt }
   2322  1.1.1.1.4.2  yamt 
   2323  1.1.1.1.4.2  yamt #else
   2324  1.1.1.1.4.2  yamt 
   2325  1.1.1.1.4.2  yamt static inline vec_bint4 vec_unpackh(vec_bshort8 a)
   2326  1.1.1.1.4.2  yamt {
   2327  1.1.1.1.4.2  yamt   return ((vec_bint4)(vec_unpackh((vec_short8)(a))));
   2328  1.1.1.1.4.2  yamt }
   2329  1.1.1.1.4.2  yamt #endif
   2330  1.1.1.1.4.2  yamt 
   2331  1.1.1.1.4.2  yamt 
   2332  1.1.1.1.4.2  yamt 
   2333  1.1.1.1.4.2  yamt 
   2334  1.1.1.1.4.2  yamt 
   2335  1.1.1.1.4.2  yamt /* vec_unpackl (vector unpack low element)
   2336  1.1.1.1.4.2  yamt  * ===========
   2337  1.1.1.1.4.2  yamt  */
   2338  1.1.1.1.4.2  yamt static inline vec_short8 vec_unpackl(vec_char16 a)
   2339  1.1.1.1.4.2  yamt {
   2340  1.1.1.1.4.2  yamt   return (spu_extend(spu_shuffle(a, a, ((vec_uchar16){8, 8, 9, 9, 10, 10, 11, 11,
   2341  1.1.1.1.4.2  yamt 					              12, 12, 13, 13, 14, 14, 15, 15}))));
   2342  1.1.1.1.4.2  yamt }
   2343  1.1.1.1.4.2  yamt 
   2344  1.1.1.1.4.2  yamt static inline vec_bshort8 vec_unpackl(vec_bchar16 a)
   2345  1.1.1.1.4.2  yamt {
   2346  1.1.1.1.4.2  yamt   return ((vec_bshort8)(vec_unpackl((vec_char16)(a))));
   2347  1.1.1.1.4.2  yamt }
   2348  1.1.1.1.4.2  yamt 
   2349  1.1.1.1.4.2  yamt 
   2350  1.1.1.1.4.2  yamt static inline vec_int4 vec_unpackl(vec_short8 a)
   2351  1.1.1.1.4.2  yamt {
   2352  1.1.1.1.4.2  yamt   return (spu_extend(spu_shuffle(a, a, ((vec_uchar16){0, 0, 8, 9, 0, 0, 10, 11,
   2353  1.1.1.1.4.2  yamt 					              0, 0,12,13, 0, 0, 14, 15}))));
   2354  1.1.1.1.4.2  yamt }
   2355  1.1.1.1.4.2  yamt 
   2356  1.1.1.1.4.2  yamt 
   2357  1.1.1.1.4.2  yamt #ifdef SUPPORT_UNPACK_PIXEL
   2358  1.1.1.1.4.2  yamt /* Due to type conflicts, unpacking of pixel types and boolean shorts
   2359  1.1.1.1.4.2  yamt  * can not simultaneously be supported. By default, the boolean short is
   2360  1.1.1.1.4.2  yamt  * supported.
   2361  1.1.1.1.4.2  yamt  */
   2362  1.1.1.1.4.2  yamt static inline vec_uint4 vec_unpackl(vec_pixel8 a)
   2363  1.1.1.1.4.2  yamt {
   2364  1.1.1.1.4.2  yamt   vec_ushort8 p1, p2;
   2365  1.1.1.1.4.2  yamt 
   2366  1.1.1.1.4.2  yamt   p1 = spu_shuffle((vec_ushort8)(spu_rlmaska((vec_short8)(a), -7)),
   2367  1.1.1.1.4.2  yamt 		   spu_and((vec_ushort8)(a), 0x1F),
   2368  1.1.1.1.4.2  yamt 		   ((vec_uchar16){ 8, 128, 128, 25,  10, 128, 128, 27,
   2369  1.1.1.1.4.2  yamt 			          12, 128, 128, 29,  14, 128, 128, 31}));
   2370  1.1.1.1.4.2  yamt   p2 = spu_shuffle(spu_and(spu_rlmask((vec_ushort8)(a), -5), 0x1F),
   2371  1.1.1.1.4.2  yamt 		   spu_and(spu_rlmask((vec_ushort8)(a), -10), 0x1F),
   2372  1.1.1.1.4.2  yamt 		   ((vec_uchar16){ 128, 25,  9, 128, 128, 27, 11, 128,
   2373  1.1.1.1.4.2  yamt 			           128, 29, 13, 128, 128, 31, 15, 128}));
   2374  1.1.1.1.4.2  yamt   return ((vec_uint4)(spu_or(p1, p2)));
   2375  1.1.1.1.4.2  yamt }
   2376  1.1.1.1.4.2  yamt 
   2377  1.1.1.1.4.2  yamt #else
   2378  1.1.1.1.4.2  yamt 
   2379  1.1.1.1.4.2  yamt static inline vec_bint4 vec_unpackl(vec_bshort8 a)
   2380  1.1.1.1.4.2  yamt {
   2381  1.1.1.1.4.2  yamt   return ((vec_bint4)(vec_unpackl((vec_short8)(a))));
   2382  1.1.1.1.4.2  yamt 
   2383  1.1.1.1.4.2  yamt }
   2384  1.1.1.1.4.2  yamt #endif
   2385  1.1.1.1.4.2  yamt 
   2386  1.1.1.1.4.2  yamt 
   2387  1.1.1.1.4.2  yamt 
   2388  1.1.1.1.4.2  yamt /* vec_xor (vector logical xor)
   2389  1.1.1.1.4.2  yamt  * ======
   2390  1.1.1.1.4.2  yamt  */
   2391  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_xor(vec_uchar16 a, vec_uchar16 b)
   2392  1.1.1.1.4.2  yamt {
   2393  1.1.1.1.4.2  yamt   return (spu_xor(a, b));
   2394  1.1.1.1.4.2  yamt }
   2395  1.1.1.1.4.2  yamt 
   2396  1.1.1.1.4.2  yamt static inline vec_char16 vec_xor(vec_char16 a, vec_char16 b)
   2397  1.1.1.1.4.2  yamt {
   2398  1.1.1.1.4.2  yamt   return (spu_xor(a, b));
   2399  1.1.1.1.4.2  yamt }
   2400  1.1.1.1.4.2  yamt 
   2401  1.1.1.1.4.2  yamt static inline vec_char16 vec_xor(vec_bchar16 a, vec_char16 b)
   2402  1.1.1.1.4.2  yamt {
   2403  1.1.1.1.4.2  yamt   return (spu_xor((vec_char16)(a), b));
   2404  1.1.1.1.4.2  yamt }
   2405  1.1.1.1.4.2  yamt 
   2406  1.1.1.1.4.2  yamt static inline vec_char16 vec_xor(vec_char16 a, vec_bchar16 b)
   2407  1.1.1.1.4.2  yamt {
   2408  1.1.1.1.4.2  yamt   return (spu_xor(a, (vec_char16)(b)));
   2409  1.1.1.1.4.2  yamt }
   2410  1.1.1.1.4.2  yamt 
   2411  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_xor(vec_ushort8 a, vec_ushort8 b)
   2412  1.1.1.1.4.2  yamt {
   2413  1.1.1.1.4.2  yamt   return (spu_xor(a, b));
   2414  1.1.1.1.4.2  yamt }
   2415  1.1.1.1.4.2  yamt 
   2416  1.1.1.1.4.2  yamt static inline vec_short8 vec_xor(vec_short8 a, vec_short8 b)
   2417  1.1.1.1.4.2  yamt {
   2418  1.1.1.1.4.2  yamt   return (spu_xor(a, b));
   2419  1.1.1.1.4.2  yamt }
   2420  1.1.1.1.4.2  yamt 
   2421  1.1.1.1.4.2  yamt static inline vec_short8 vec_xor(vec_bshort8 a, vec_short8 b)
   2422  1.1.1.1.4.2  yamt {
   2423  1.1.1.1.4.2  yamt   return (spu_xor((vec_short8)(a), b));
   2424  1.1.1.1.4.2  yamt }
   2425  1.1.1.1.4.2  yamt 
   2426  1.1.1.1.4.2  yamt static inline vec_short8 vec_xor(vec_short8 a, vec_bshort8 b)
   2427  1.1.1.1.4.2  yamt {
   2428  1.1.1.1.4.2  yamt   return (spu_xor(a, (vec_short8)(b)));
   2429  1.1.1.1.4.2  yamt }
   2430  1.1.1.1.4.2  yamt 
   2431  1.1.1.1.4.2  yamt static inline vec_uint4 vec_xor(vec_uint4 a, vec_uint4 b)
   2432  1.1.1.1.4.2  yamt {
   2433  1.1.1.1.4.2  yamt   return (spu_xor(a, b));
   2434  1.1.1.1.4.2  yamt }
   2435  1.1.1.1.4.2  yamt 
   2436  1.1.1.1.4.2  yamt static inline vec_int4 vec_xor(vec_int4 a, vec_int4 b)
   2437  1.1.1.1.4.2  yamt {
   2438  1.1.1.1.4.2  yamt   return (spu_xor(a, b));
   2439  1.1.1.1.4.2  yamt }
   2440  1.1.1.1.4.2  yamt 
   2441  1.1.1.1.4.2  yamt static inline vec_int4 vec_xor(vec_bint4 a, vec_int4 b)
   2442  1.1.1.1.4.2  yamt {
   2443  1.1.1.1.4.2  yamt   return (spu_xor((vec_int4)(a), b));
   2444  1.1.1.1.4.2  yamt }
   2445  1.1.1.1.4.2  yamt 
   2446  1.1.1.1.4.2  yamt static inline vec_int4 vec_xor(vec_int4 a, vec_bint4 b)
   2447  1.1.1.1.4.2  yamt {
   2448  1.1.1.1.4.2  yamt   return (spu_xor(a, (vec_int4)(b)));
   2449  1.1.1.1.4.2  yamt }
   2450  1.1.1.1.4.2  yamt 
   2451  1.1.1.1.4.2  yamt static inline vec_float4 vec_xor(vec_float4 a, vec_float4 b)
   2452  1.1.1.1.4.2  yamt {
   2453  1.1.1.1.4.2  yamt   return (spu_xor(a, b));
   2454  1.1.1.1.4.2  yamt }
   2455  1.1.1.1.4.2  yamt 
   2456  1.1.1.1.4.2  yamt static inline vec_float4 vec_xor(vec_bint4 a, vec_float4 b)
   2457  1.1.1.1.4.2  yamt {
   2458  1.1.1.1.4.2  yamt   return (spu_xor((vec_float4)(a),b));
   2459  1.1.1.1.4.2  yamt }
   2460  1.1.1.1.4.2  yamt 
   2461  1.1.1.1.4.2  yamt static inline vec_float4 vec_xor(vec_float4 a, vec_bint4 b)
   2462  1.1.1.1.4.2  yamt {
   2463  1.1.1.1.4.2  yamt   return (spu_xor(a, (vec_float4)(b)));
   2464  1.1.1.1.4.2  yamt }
   2465  1.1.1.1.4.2  yamt 
   2466  1.1.1.1.4.2  yamt /************************************************************************
   2467  1.1.1.1.4.2  yamt  *                        PREDICATES
   2468  1.1.1.1.4.2  yamt  ************************************************************************/
   2469  1.1.1.1.4.2  yamt 
   2470  1.1.1.1.4.2  yamt /* vec_all_eq (all elements equal)
   2471  1.1.1.1.4.2  yamt  * ==========
   2472  1.1.1.1.4.2  yamt  */
   2473  1.1.1.1.4.2  yamt static inline int vec_all_eq(vec_uchar16 a, vec_uchar16 b)
   2474  1.1.1.1.4.2  yamt {
   2475  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0xFFFF));
   2476  1.1.1.1.4.2  yamt }
   2477  1.1.1.1.4.2  yamt 
   2478  1.1.1.1.4.2  yamt static inline int vec_all_eq(vec_char16 a, vec_char16 b)
   2479  1.1.1.1.4.2  yamt {
   2480  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0xFFFF));
   2481  1.1.1.1.4.2  yamt }
   2482  1.1.1.1.4.2  yamt 
   2483  1.1.1.1.4.2  yamt static inline int vec_all_eq(vec_bchar16 a, vec_char16 b)
   2484  1.1.1.1.4.2  yamt {
   2485  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq((vec_char16)(a), b)), 0) == 0xFFFF));
   2486  1.1.1.1.4.2  yamt }
   2487  1.1.1.1.4.2  yamt 
   2488  1.1.1.1.4.2  yamt static inline int vec_all_eq(vec_char16 a, vec_bchar16 b)
   2489  1.1.1.1.4.2  yamt {
   2490  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, (vec_char16)(b))), 0) == 0xFFFF));
   2491  1.1.1.1.4.2  yamt }
   2492  1.1.1.1.4.2  yamt 
   2493  1.1.1.1.4.2  yamt static inline int vec_all_eq(vec_ushort8 a, vec_ushort8 b)
   2494  1.1.1.1.4.2  yamt {
   2495  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0xFF));
   2496  1.1.1.1.4.2  yamt }
   2497  1.1.1.1.4.2  yamt 
   2498  1.1.1.1.4.2  yamt static inline int vec_all_eq(vec_short8 a, vec_short8 b)
   2499  1.1.1.1.4.2  yamt {
   2500  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0xFF));
   2501  1.1.1.1.4.2  yamt }
   2502  1.1.1.1.4.2  yamt 
   2503  1.1.1.1.4.2  yamt static inline int vec_all_eq(vec_bshort8 a, vec_short8 b)
   2504  1.1.1.1.4.2  yamt {
   2505  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq((vec_short8)(a), b)), 0) == 0xFF));
   2506  1.1.1.1.4.2  yamt }
   2507  1.1.1.1.4.2  yamt 
   2508  1.1.1.1.4.2  yamt static inline int vec_all_eq(vec_short8 a, vec_bshort8 b)
   2509  1.1.1.1.4.2  yamt {
   2510  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, (vec_short8)(b))), 0) == 0xFF));
   2511  1.1.1.1.4.2  yamt }
   2512  1.1.1.1.4.2  yamt 
   2513  1.1.1.1.4.2  yamt static inline int vec_all_eq(vec_uint4 a, vec_uint4 b)
   2514  1.1.1.1.4.2  yamt {
   2515  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0xF));
   2516  1.1.1.1.4.2  yamt }
   2517  1.1.1.1.4.2  yamt 
   2518  1.1.1.1.4.2  yamt static inline int vec_all_eq(vec_int4 a, vec_int4 b)
   2519  1.1.1.1.4.2  yamt {
   2520  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0xF));
   2521  1.1.1.1.4.2  yamt }
   2522  1.1.1.1.4.2  yamt 
   2523  1.1.1.1.4.2  yamt static inline int vec_all_eq(vec_bint4 a, vec_int4 b)
   2524  1.1.1.1.4.2  yamt {
   2525  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq((vec_int4)(a), b)), 0) == 0xF));
   2526  1.1.1.1.4.2  yamt }
   2527  1.1.1.1.4.2  yamt 
   2528  1.1.1.1.4.2  yamt static inline int vec_all_eq(vec_int4 a, vec_bint4 b)
   2529  1.1.1.1.4.2  yamt {
   2530  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, (vec_int4)(b))), 0) == 0xF));
   2531  1.1.1.1.4.2  yamt }
   2532  1.1.1.1.4.2  yamt 
   2533  1.1.1.1.4.2  yamt static inline int vec_all_eq(vec_float4 a, vec_float4 b)
   2534  1.1.1.1.4.2  yamt {
   2535  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0xF));
   2536  1.1.1.1.4.2  yamt }
   2537  1.1.1.1.4.2  yamt 
   2538  1.1.1.1.4.2  yamt 
   2539  1.1.1.1.4.2  yamt /* vec_all_ge (all elements greater than or equal)
   2540  1.1.1.1.4.2  yamt  * ==========
   2541  1.1.1.1.4.2  yamt  */
   2542  1.1.1.1.4.2  yamt static inline int vec_all_ge(vec_uchar16 a, vec_uchar16 b)
   2543  1.1.1.1.4.2  yamt {
   2544  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0));
   2545  1.1.1.1.4.2  yamt }
   2546  1.1.1.1.4.2  yamt 
   2547  1.1.1.1.4.2  yamt static inline int vec_all_ge(vec_char16 a, vec_char16 b)
   2548  1.1.1.1.4.2  yamt {
   2549  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0));
   2550  1.1.1.1.4.2  yamt }
   2551  1.1.1.1.4.2  yamt 
   2552  1.1.1.1.4.2  yamt static inline  int vec_all_ge(vec_bchar16 a, vec_char16 b)
   2553  1.1.1.1.4.2  yamt {
   2554  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, (vec_char16)(a))), 0) == 0));
   2555  1.1.1.1.4.2  yamt }
   2556  1.1.1.1.4.2  yamt 
   2557  1.1.1.1.4.2  yamt static inline int vec_all_ge(vec_char16 a, vec_bchar16 b)
   2558  1.1.1.1.4.2  yamt {
   2559  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_char16)(b), a)), 0) == 0));
   2560  1.1.1.1.4.2  yamt }
   2561  1.1.1.1.4.2  yamt 
   2562  1.1.1.1.4.2  yamt static inline int vec_all_ge(vec_ushort8 a, vec_ushort8 b)
   2563  1.1.1.1.4.2  yamt {
   2564  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0));
   2565  1.1.1.1.4.2  yamt }
   2566  1.1.1.1.4.2  yamt 
   2567  1.1.1.1.4.2  yamt static inline int vec_all_ge(vec_short8 a, vec_short8 b)
   2568  1.1.1.1.4.2  yamt {
   2569  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0));
   2570  1.1.1.1.4.2  yamt }
   2571  1.1.1.1.4.2  yamt 
   2572  1.1.1.1.4.2  yamt static inline int vec_all_ge(vec_bshort8 a, vec_short8 b)
   2573  1.1.1.1.4.2  yamt {
   2574  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, (vec_short8)(a))), 0) == 0));
   2575  1.1.1.1.4.2  yamt }
   2576  1.1.1.1.4.2  yamt 
   2577  1.1.1.1.4.2  yamt static inline int vec_all_ge(vec_short8 a, vec_bshort8 b)
   2578  1.1.1.1.4.2  yamt {
   2579  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_short8)(b), a)), 0) == 0));
   2580  1.1.1.1.4.2  yamt }
   2581  1.1.1.1.4.2  yamt 
   2582  1.1.1.1.4.2  yamt static inline int vec_all_ge(vec_uint4 a, vec_uint4 b)
   2583  1.1.1.1.4.2  yamt {
   2584  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0));
   2585  1.1.1.1.4.2  yamt }
   2586  1.1.1.1.4.2  yamt 
   2587  1.1.1.1.4.2  yamt static inline int vec_all_ge(vec_int4 a, vec_int4 b)
   2588  1.1.1.1.4.2  yamt {
   2589  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0));
   2590  1.1.1.1.4.2  yamt }
   2591  1.1.1.1.4.2  yamt 
   2592  1.1.1.1.4.2  yamt static inline int vec_all_ge(vec_bint4 a, vec_int4 b)
   2593  1.1.1.1.4.2  yamt {
   2594  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, (vec_int4)(a))), 0) == 0));
   2595  1.1.1.1.4.2  yamt }
   2596  1.1.1.1.4.2  yamt 
   2597  1.1.1.1.4.2  yamt static inline int vec_all_ge(vec_int4 a, vec_bint4 b)
   2598  1.1.1.1.4.2  yamt {
   2599  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_int4)(b), a)), 0) == 0));
   2600  1.1.1.1.4.2  yamt }
   2601  1.1.1.1.4.2  yamt 
   2602  1.1.1.1.4.2  yamt static inline int vec_all_ge(vec_float4 a, vec_float4 b)
   2603  1.1.1.1.4.2  yamt {
   2604  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0));
   2605  1.1.1.1.4.2  yamt }
   2606  1.1.1.1.4.2  yamt 
   2607  1.1.1.1.4.2  yamt 
   2608  1.1.1.1.4.2  yamt /* vec_all_gt (all elements greater than)
   2609  1.1.1.1.4.2  yamt  * ==========
   2610  1.1.1.1.4.2  yamt  */
   2611  1.1.1.1.4.2  yamt static inline int vec_all_gt(vec_uchar16 a, vec_uchar16 b)
   2612  1.1.1.1.4.2  yamt {
   2613  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0xFFFF));
   2614  1.1.1.1.4.2  yamt }
   2615  1.1.1.1.4.2  yamt 
   2616  1.1.1.1.4.2  yamt static inline int vec_all_gt(vec_char16 a, vec_char16 b)
   2617  1.1.1.1.4.2  yamt {
   2618  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0xFFFF));
   2619  1.1.1.1.4.2  yamt }
   2620  1.1.1.1.4.2  yamt 
   2621  1.1.1.1.4.2  yamt static inline int vec_all_gt(vec_bchar16 a, vec_char16 b)
   2622  1.1.1.1.4.2  yamt {
   2623  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_char16)(a), b)), 0) == 0xFFFF));
   2624  1.1.1.1.4.2  yamt }
   2625  1.1.1.1.4.2  yamt 
   2626  1.1.1.1.4.2  yamt static inline int vec_all_gt(vec_char16 a, vec_bchar16 b)
   2627  1.1.1.1.4.2  yamt {
   2628  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, (vec_char16)(b))), 0) == 0xFFFF));
   2629  1.1.1.1.4.2  yamt }
   2630  1.1.1.1.4.2  yamt 
   2631  1.1.1.1.4.2  yamt static inline int vec_all_gt(vec_ushort8 a, vec_ushort8 b)
   2632  1.1.1.1.4.2  yamt {
   2633  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0xFF));
   2634  1.1.1.1.4.2  yamt }
   2635  1.1.1.1.4.2  yamt 
   2636  1.1.1.1.4.2  yamt static inline int vec_all_gt(vec_short8 a, vec_short8 b)
   2637  1.1.1.1.4.2  yamt {
   2638  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0xFF));
   2639  1.1.1.1.4.2  yamt }
   2640  1.1.1.1.4.2  yamt 
   2641  1.1.1.1.4.2  yamt static inline int vec_all_gt(vec_bshort8 a, vec_short8 b)
   2642  1.1.1.1.4.2  yamt {
   2643  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_short8)(a), b)), 0) == 0xFF));
   2644  1.1.1.1.4.2  yamt }
   2645  1.1.1.1.4.2  yamt 
   2646  1.1.1.1.4.2  yamt static inline int vec_all_gt(vec_short8 a, vec_bshort8 b)
   2647  1.1.1.1.4.2  yamt {
   2648  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, (vec_short8)(b))), 0) == 0xFF));
   2649  1.1.1.1.4.2  yamt }
   2650  1.1.1.1.4.2  yamt 
   2651  1.1.1.1.4.2  yamt static inline int vec_all_gt(vec_uint4 a, vec_uint4 b)
   2652  1.1.1.1.4.2  yamt {
   2653  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0xF));
   2654  1.1.1.1.4.2  yamt }
   2655  1.1.1.1.4.2  yamt 
   2656  1.1.1.1.4.2  yamt static inline int vec_all_gt(vec_int4 a, vec_int4 b)
   2657  1.1.1.1.4.2  yamt {
   2658  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0xF));
   2659  1.1.1.1.4.2  yamt }
   2660  1.1.1.1.4.2  yamt 
   2661  1.1.1.1.4.2  yamt static inline int vec_all_gt(vec_bint4 a, vec_int4 b)
   2662  1.1.1.1.4.2  yamt {
   2663  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_int4)(a), b)), 0) == 0xF));
   2664  1.1.1.1.4.2  yamt }
   2665  1.1.1.1.4.2  yamt 
   2666  1.1.1.1.4.2  yamt static inline int vec_all_gt(vec_int4 a, vec_bint4 b)
   2667  1.1.1.1.4.2  yamt {
   2668  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, (vec_int4)(b))), 0) == 0xF));
   2669  1.1.1.1.4.2  yamt }
   2670  1.1.1.1.4.2  yamt 
   2671  1.1.1.1.4.2  yamt static inline int vec_all_gt(vec_float4 a, vec_float4 b)
   2672  1.1.1.1.4.2  yamt {
   2673  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0xF));
   2674  1.1.1.1.4.2  yamt }
   2675  1.1.1.1.4.2  yamt 
   2676  1.1.1.1.4.2  yamt 
   2677  1.1.1.1.4.2  yamt /* vec_all_in (all elements in bounds)
   2678  1.1.1.1.4.2  yamt  * ==========
   2679  1.1.1.1.4.2  yamt  */
   2680  1.1.1.1.4.2  yamt static inline int vec_all_in(vec_float4 a, vec_float4 b)
   2681  1.1.1.1.4.2  yamt {
   2682  1.1.1.1.4.2  yamt   return (spu_extract(spu_gather(spu_nor(spu_cmpabsgt(a, b), (vec_uint4)(spu_rlmaska((vec_int4)(b), -31)))), 0) == 0xF);
   2683  1.1.1.1.4.2  yamt }
   2684  1.1.1.1.4.2  yamt 
   2685  1.1.1.1.4.2  yamt 
   2686  1.1.1.1.4.2  yamt /* vec_all_le (all elements less than or equal)
   2687  1.1.1.1.4.2  yamt  * ==========
   2688  1.1.1.1.4.2  yamt  */
   2689  1.1.1.1.4.2  yamt static inline int vec_all_le(vec_uchar16 a, vec_uchar16 b)
   2690  1.1.1.1.4.2  yamt {
   2691  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0));
   2692  1.1.1.1.4.2  yamt }
   2693  1.1.1.1.4.2  yamt 
   2694  1.1.1.1.4.2  yamt static inline int vec_all_le(vec_char16 a, vec_char16 b)
   2695  1.1.1.1.4.2  yamt {
   2696  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0));
   2697  1.1.1.1.4.2  yamt }
   2698  1.1.1.1.4.2  yamt 
   2699  1.1.1.1.4.2  yamt static inline int vec_all_le(vec_bchar16 a, vec_char16 b)
   2700  1.1.1.1.4.2  yamt {
   2701  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_char16)(a), b)), 0) == 0));
   2702  1.1.1.1.4.2  yamt }
   2703  1.1.1.1.4.2  yamt 
   2704  1.1.1.1.4.2  yamt static inline int vec_all_le(vec_char16 a, vec_bchar16 b)
   2705  1.1.1.1.4.2  yamt {
   2706  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, (vec_char16)(b))), 0) == 0));
   2707  1.1.1.1.4.2  yamt }
   2708  1.1.1.1.4.2  yamt 
   2709  1.1.1.1.4.2  yamt static inline int vec_all_le(vec_ushort8 a, vec_ushort8 b)
   2710  1.1.1.1.4.2  yamt {
   2711  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0));
   2712  1.1.1.1.4.2  yamt }
   2713  1.1.1.1.4.2  yamt 
   2714  1.1.1.1.4.2  yamt static inline int vec_all_le(vec_short8 a, vec_short8 b)
   2715  1.1.1.1.4.2  yamt {
   2716  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0));
   2717  1.1.1.1.4.2  yamt }
   2718  1.1.1.1.4.2  yamt 
   2719  1.1.1.1.4.2  yamt static inline int vec_all_le(vec_bshort8 a, vec_short8 b)
   2720  1.1.1.1.4.2  yamt {
   2721  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_short8)(a), b)), 0) == 0));
   2722  1.1.1.1.4.2  yamt }
   2723  1.1.1.1.4.2  yamt 
   2724  1.1.1.1.4.2  yamt static inline int vec_all_le(vec_short8 a, vec_bshort8 b)
   2725  1.1.1.1.4.2  yamt {
   2726  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, (vec_short8)(b))), 0) == 0));
   2727  1.1.1.1.4.2  yamt }
   2728  1.1.1.1.4.2  yamt 
   2729  1.1.1.1.4.2  yamt static inline int vec_all_le(vec_uint4 a, vec_uint4 b)
   2730  1.1.1.1.4.2  yamt {
   2731  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0));
   2732  1.1.1.1.4.2  yamt }
   2733  1.1.1.1.4.2  yamt 
   2734  1.1.1.1.4.2  yamt static inline int vec_all_le(vec_int4 a, vec_int4 b)
   2735  1.1.1.1.4.2  yamt {
   2736  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0));
   2737  1.1.1.1.4.2  yamt }
   2738  1.1.1.1.4.2  yamt 
   2739  1.1.1.1.4.2  yamt static inline int vec_all_le(vec_bint4 a, vec_int4 b)
   2740  1.1.1.1.4.2  yamt {
   2741  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_int4)(a), b)), 0) == 0));
   2742  1.1.1.1.4.2  yamt }
   2743  1.1.1.1.4.2  yamt 
   2744  1.1.1.1.4.2  yamt static inline int vec_all_le(vec_int4 a, vec_bint4 b)
   2745  1.1.1.1.4.2  yamt {
   2746  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, (vec_int4)(b))), 0) == 0));
   2747  1.1.1.1.4.2  yamt }
   2748  1.1.1.1.4.2  yamt 
   2749  1.1.1.1.4.2  yamt static inline int vec_all_le(vec_float4 a, vec_float4 b)
   2750  1.1.1.1.4.2  yamt {
   2751  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0));
   2752  1.1.1.1.4.2  yamt }
   2753  1.1.1.1.4.2  yamt 
   2754  1.1.1.1.4.2  yamt 
   2755  1.1.1.1.4.2  yamt /* vec_all_lt (all elements less than)
   2756  1.1.1.1.4.2  yamt  * ==========
   2757  1.1.1.1.4.2  yamt  */
   2758  1.1.1.1.4.2  yamt static inline int vec_all_lt(vec_uchar16 a, vec_uchar16 b)
   2759  1.1.1.1.4.2  yamt {
   2760  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0xFFFF));
   2761  1.1.1.1.4.2  yamt }
   2762  1.1.1.1.4.2  yamt 
   2763  1.1.1.1.4.2  yamt static inline int vec_all_lt(vec_char16 a, vec_char16 b)
   2764  1.1.1.1.4.2  yamt {
   2765  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0xFFFF));
   2766  1.1.1.1.4.2  yamt }
   2767  1.1.1.1.4.2  yamt 
   2768  1.1.1.1.4.2  yamt static inline int vec_all_lt(vec_bchar16 a, vec_char16 b)
   2769  1.1.1.1.4.2  yamt {
   2770  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, (vec_char16)(a))), 0) == 0xFFFF));
   2771  1.1.1.1.4.2  yamt }
   2772  1.1.1.1.4.2  yamt 
   2773  1.1.1.1.4.2  yamt static inline int vec_all_lt(vec_char16 a, vec_bchar16 b)
   2774  1.1.1.1.4.2  yamt {
   2775  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_char16)(b), a)), 0) == 0xFFFF));
   2776  1.1.1.1.4.2  yamt }
   2777  1.1.1.1.4.2  yamt 
   2778  1.1.1.1.4.2  yamt static inline int vec_all_lt(vec_ushort8 a, vec_ushort8 b)
   2779  1.1.1.1.4.2  yamt {
   2780  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0xFF));
   2781  1.1.1.1.4.2  yamt }
   2782  1.1.1.1.4.2  yamt 
   2783  1.1.1.1.4.2  yamt static inline int vec_all_lt(vec_short8 a, vec_short8 b)
   2784  1.1.1.1.4.2  yamt {
   2785  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0xFF));
   2786  1.1.1.1.4.2  yamt }
   2787  1.1.1.1.4.2  yamt 
   2788  1.1.1.1.4.2  yamt static inline int vec_all_lt(vec_bshort8 a, vec_short8 b)
   2789  1.1.1.1.4.2  yamt {
   2790  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, (vec_short8)(a))), 0) == 0xFF));
   2791  1.1.1.1.4.2  yamt }
   2792  1.1.1.1.4.2  yamt 
   2793  1.1.1.1.4.2  yamt static inline int vec_all_lt(vec_short8 a, vec_bshort8 b)
   2794  1.1.1.1.4.2  yamt {
   2795  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_short8)(b), a)), 0) == 0xFF));
   2796  1.1.1.1.4.2  yamt }
   2797  1.1.1.1.4.2  yamt 
   2798  1.1.1.1.4.2  yamt static inline int vec_all_lt(vec_uint4 a, vec_uint4 b)
   2799  1.1.1.1.4.2  yamt {
   2800  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0xF));
   2801  1.1.1.1.4.2  yamt }
   2802  1.1.1.1.4.2  yamt 
   2803  1.1.1.1.4.2  yamt static inline int vec_all_lt(vec_int4 a, vec_int4 b)
   2804  1.1.1.1.4.2  yamt {
   2805  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0xF));
   2806  1.1.1.1.4.2  yamt }
   2807  1.1.1.1.4.2  yamt 
   2808  1.1.1.1.4.2  yamt static inline int vec_all_lt(vec_bint4 a, vec_int4 b)
   2809  1.1.1.1.4.2  yamt {
   2810  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, (vec_int4)(a))), 0) == 0xF));
   2811  1.1.1.1.4.2  yamt }
   2812  1.1.1.1.4.2  yamt 
   2813  1.1.1.1.4.2  yamt static inline int vec_all_lt(vec_int4 a, vec_bint4 b)
   2814  1.1.1.1.4.2  yamt {
   2815  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_int4)(b), a)), 0) == 0xF));
   2816  1.1.1.1.4.2  yamt }
   2817  1.1.1.1.4.2  yamt 
   2818  1.1.1.1.4.2  yamt static inline int vec_all_lt(vec_float4 a, vec_float4 b)
   2819  1.1.1.1.4.2  yamt {
   2820  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0xF));
   2821  1.1.1.1.4.2  yamt }
   2822  1.1.1.1.4.2  yamt 
   2823  1.1.1.1.4.2  yamt 
   2824  1.1.1.1.4.2  yamt /* vec_all_nan (all elements not a number)
   2825  1.1.1.1.4.2  yamt  * ===========
   2826  1.1.1.1.4.2  yamt  */
   2827  1.1.1.1.4.2  yamt static inline int vec_all_nan(vec_float4 a)
   2828  1.1.1.1.4.2  yamt {
   2829  1.1.1.1.4.2  yamt   vec_uint4 exp, man;
   2830  1.1.1.1.4.2  yamt   vec_uint4 exp_mask = spu_splats((unsigned int)0x7F800000);
   2831  1.1.1.1.4.2  yamt 
   2832  1.1.1.1.4.2  yamt   exp = spu_and((vec_uint4)(a), exp_mask);
   2833  1.1.1.1.4.2  yamt   man = spu_and((vec_uint4)(a), spu_splats((unsigned int)0x007FFFFF));
   2834  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_andc(spu_cmpeq(exp, exp_mask),
   2835  1.1.1.1.4.2  yamt 						spu_cmpeq(man, 0))), 0) == 0xF));
   2836  1.1.1.1.4.2  yamt }
   2837  1.1.1.1.4.2  yamt 
   2838  1.1.1.1.4.2  yamt #define vec_all_nan(_a)		(0)
   2839  1.1.1.1.4.2  yamt 
   2840  1.1.1.1.4.2  yamt 
   2841  1.1.1.1.4.2  yamt /* vec_all_ne (all elements not equal)
   2842  1.1.1.1.4.2  yamt  * ==========
   2843  1.1.1.1.4.2  yamt  */
   2844  1.1.1.1.4.2  yamt static inline int vec_all_ne(vec_uchar16 a, vec_uchar16 b)
   2845  1.1.1.1.4.2  yamt {
   2846  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0));
   2847  1.1.1.1.4.2  yamt }
   2848  1.1.1.1.4.2  yamt 
   2849  1.1.1.1.4.2  yamt static inline int vec_all_ne(vec_char16 a, vec_char16 b)
   2850  1.1.1.1.4.2  yamt {
   2851  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0));
   2852  1.1.1.1.4.2  yamt }
   2853  1.1.1.1.4.2  yamt 
   2854  1.1.1.1.4.2  yamt static inline int vec_all_ne(vec_bchar16 a, vec_char16 b)
   2855  1.1.1.1.4.2  yamt {
   2856  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq((vec_char16)(a), b)), 0) == 0));
   2857  1.1.1.1.4.2  yamt }
   2858  1.1.1.1.4.2  yamt 
   2859  1.1.1.1.4.2  yamt static inline int vec_all_ne(vec_char16 a, vec_bchar16 b)
   2860  1.1.1.1.4.2  yamt {
   2861  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, (vec_char16)(b))), 0) == 0));
   2862  1.1.1.1.4.2  yamt }
   2863  1.1.1.1.4.2  yamt 
   2864  1.1.1.1.4.2  yamt static inline int vec_all_ne(vec_ushort8 a, vec_ushort8 b)
   2865  1.1.1.1.4.2  yamt {
   2866  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0));
   2867  1.1.1.1.4.2  yamt }
   2868  1.1.1.1.4.2  yamt 
   2869  1.1.1.1.4.2  yamt static inline int vec_all_ne(vec_short8 a, vec_short8 b)
   2870  1.1.1.1.4.2  yamt {
   2871  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0));
   2872  1.1.1.1.4.2  yamt }
   2873  1.1.1.1.4.2  yamt 
   2874  1.1.1.1.4.2  yamt static inline int vec_all_ne(vec_bshort8 a, vec_short8 b)
   2875  1.1.1.1.4.2  yamt {
   2876  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq((vec_short8)(a), b)), 0) == 0));
   2877  1.1.1.1.4.2  yamt }
   2878  1.1.1.1.4.2  yamt 
   2879  1.1.1.1.4.2  yamt static inline int vec_all_ne(vec_short8 a, vec_bshort8 b)
   2880  1.1.1.1.4.2  yamt {
   2881  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, (vec_short8)(b))), 0) == 0));
   2882  1.1.1.1.4.2  yamt }
   2883  1.1.1.1.4.2  yamt 
   2884  1.1.1.1.4.2  yamt static inline int vec_all_ne(vec_uint4 a, vec_uint4 b)
   2885  1.1.1.1.4.2  yamt {
   2886  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0));
   2887  1.1.1.1.4.2  yamt }
   2888  1.1.1.1.4.2  yamt 
   2889  1.1.1.1.4.2  yamt static inline int vec_all_ne(vec_int4 a, vec_int4 b)
   2890  1.1.1.1.4.2  yamt {
   2891  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0));
   2892  1.1.1.1.4.2  yamt }
   2893  1.1.1.1.4.2  yamt 
   2894  1.1.1.1.4.2  yamt static inline int vec_all_ne(vec_bint4 a, vec_int4 b)
   2895  1.1.1.1.4.2  yamt {
   2896  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq((vec_int4)(a), b)), 0) == 0));
   2897  1.1.1.1.4.2  yamt }
   2898  1.1.1.1.4.2  yamt 
   2899  1.1.1.1.4.2  yamt static inline int vec_all_ne(vec_int4 a, vec_bint4 b)
   2900  1.1.1.1.4.2  yamt {
   2901  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, (vec_int4)(b))), 0) == 0));
   2902  1.1.1.1.4.2  yamt }
   2903  1.1.1.1.4.2  yamt 
   2904  1.1.1.1.4.2  yamt static inline int vec_all_ne(vec_float4 a, vec_float4 b)
   2905  1.1.1.1.4.2  yamt {
   2906  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) == 0));
   2907  1.1.1.1.4.2  yamt }
   2908  1.1.1.1.4.2  yamt 
   2909  1.1.1.1.4.2  yamt 
   2910  1.1.1.1.4.2  yamt /* vec_all_nge (all elements not greater than or equal)
   2911  1.1.1.1.4.2  yamt  * ===========
   2912  1.1.1.1.4.2  yamt  */
   2913  1.1.1.1.4.2  yamt static inline int vec_all_nge(vec_float4 a, vec_float4 b)
   2914  1.1.1.1.4.2  yamt {
   2915  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0xF));
   2916  1.1.1.1.4.2  yamt }
   2917  1.1.1.1.4.2  yamt 
   2918  1.1.1.1.4.2  yamt 
   2919  1.1.1.1.4.2  yamt /* vec_all_ngt (all elements not greater than)
   2920  1.1.1.1.4.2  yamt  * ===========
   2921  1.1.1.1.4.2  yamt  */
   2922  1.1.1.1.4.2  yamt static inline int vec_all_ngt(vec_float4 a, vec_float4 b)
   2923  1.1.1.1.4.2  yamt {
   2924  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0));
   2925  1.1.1.1.4.2  yamt }
   2926  1.1.1.1.4.2  yamt 
   2927  1.1.1.1.4.2  yamt 
   2928  1.1.1.1.4.2  yamt /* vec_all_nle (all elements not less than or equal)
   2929  1.1.1.1.4.2  yamt  * ===========
   2930  1.1.1.1.4.2  yamt  */
   2931  1.1.1.1.4.2  yamt static inline int vec_all_nle(vec_float4 a, vec_float4 b)
   2932  1.1.1.1.4.2  yamt {
   2933  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) == 0xF));
   2934  1.1.1.1.4.2  yamt }
   2935  1.1.1.1.4.2  yamt 
   2936  1.1.1.1.4.2  yamt 
   2937  1.1.1.1.4.2  yamt /* vec_all_nlt (all elements not less than)
   2938  1.1.1.1.4.2  yamt  * ===========
   2939  1.1.1.1.4.2  yamt  */
   2940  1.1.1.1.4.2  yamt static inline int vec_all_nlt(vec_float4 a, vec_float4 b)
   2941  1.1.1.1.4.2  yamt {
   2942  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) == 0));
   2943  1.1.1.1.4.2  yamt }
   2944  1.1.1.1.4.2  yamt 
   2945  1.1.1.1.4.2  yamt 
   2946  1.1.1.1.4.2  yamt /* vec_all_numeric (all elements numeric)
   2947  1.1.1.1.4.2  yamt  * ===========
   2948  1.1.1.1.4.2  yamt  */
   2949  1.1.1.1.4.2  yamt static inline int vec_all_numeric(vec_float4 a)
   2950  1.1.1.1.4.2  yamt {
   2951  1.1.1.1.4.2  yamt   vec_uint4 exp;
   2952  1.1.1.1.4.2  yamt 
   2953  1.1.1.1.4.2  yamt   exp = spu_and(spu_rlmask((vec_uint4)(a), -23), 0xFF);
   2954  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(exp, 255)), 0) == 0));
   2955  1.1.1.1.4.2  yamt }
   2956  1.1.1.1.4.2  yamt 
   2957  1.1.1.1.4.2  yamt 
   2958  1.1.1.1.4.2  yamt 
   2959  1.1.1.1.4.2  yamt /* vec_any_eq (any elements equal)
   2960  1.1.1.1.4.2  yamt  * ==========
   2961  1.1.1.1.4.2  yamt  */
   2962  1.1.1.1.4.2  yamt static inline int vec_any_eq(vec_uchar16 a, vec_uchar16 b)
   2963  1.1.1.1.4.2  yamt {
   2964  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) != 0));
   2965  1.1.1.1.4.2  yamt }
   2966  1.1.1.1.4.2  yamt 
   2967  1.1.1.1.4.2  yamt static inline int vec_any_eq(vec_char16 a, vec_char16 b)
   2968  1.1.1.1.4.2  yamt {
   2969  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) != 0));
   2970  1.1.1.1.4.2  yamt }
   2971  1.1.1.1.4.2  yamt 
   2972  1.1.1.1.4.2  yamt static inline int vec_any_eq(vec_bchar16 a, vec_char16 b)
   2973  1.1.1.1.4.2  yamt {
   2974  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq((vec_char16)(a), b)), 0) != 0));
   2975  1.1.1.1.4.2  yamt }
   2976  1.1.1.1.4.2  yamt 
   2977  1.1.1.1.4.2  yamt static inline int vec_any_eq(vec_char16 a, vec_bchar16 b)
   2978  1.1.1.1.4.2  yamt {
   2979  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, (vec_char16)(b))), 0) != 0));
   2980  1.1.1.1.4.2  yamt }
   2981  1.1.1.1.4.2  yamt 
   2982  1.1.1.1.4.2  yamt static inline int vec_any_eq(vec_ushort8 a, vec_ushort8 b)
   2983  1.1.1.1.4.2  yamt {
   2984  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) != 0));
   2985  1.1.1.1.4.2  yamt }
   2986  1.1.1.1.4.2  yamt 
   2987  1.1.1.1.4.2  yamt static inline int vec_any_eq(vec_short8 a, vec_short8 b)
   2988  1.1.1.1.4.2  yamt {
   2989  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) != 0));
   2990  1.1.1.1.4.2  yamt }
   2991  1.1.1.1.4.2  yamt 
   2992  1.1.1.1.4.2  yamt static inline int vec_any_eq(vec_bshort8 a, vec_short8 b)
   2993  1.1.1.1.4.2  yamt {
   2994  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq((vec_short8)(a), b)), 0) != 0));
   2995  1.1.1.1.4.2  yamt }
   2996  1.1.1.1.4.2  yamt 
   2997  1.1.1.1.4.2  yamt static inline int vec_any_eq(vec_short8 a, vec_bshort8 b)
   2998  1.1.1.1.4.2  yamt {
   2999  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, (vec_short8)(b))), 0) != 0));
   3000  1.1.1.1.4.2  yamt }
   3001  1.1.1.1.4.2  yamt 
   3002  1.1.1.1.4.2  yamt static inline int vec_any_eq(vec_uint4 a, vec_uint4 b)
   3003  1.1.1.1.4.2  yamt {
   3004  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpeq(a, b), -31)), 0)));
   3005  1.1.1.1.4.2  yamt }
   3006  1.1.1.1.4.2  yamt 
   3007  1.1.1.1.4.2  yamt static inline int vec_any_eq(vec_int4 a, vec_int4 b)
   3008  1.1.1.1.4.2  yamt {
   3009  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpeq(a, b), -31)), 0)));
   3010  1.1.1.1.4.2  yamt }
   3011  1.1.1.1.4.2  yamt 
   3012  1.1.1.1.4.2  yamt static inline int vec_any_eq(vec_bint4 a, vec_int4 b)
   3013  1.1.1.1.4.2  yamt {
   3014  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpeq((vec_int4)(a), b), -31)), 0)));
   3015  1.1.1.1.4.2  yamt }
   3016  1.1.1.1.4.2  yamt 
   3017  1.1.1.1.4.2  yamt static inline int vec_any_eq(vec_int4 a, vec_bint4 b)
   3018  1.1.1.1.4.2  yamt {
   3019  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpeq(a, (vec_int4)(b)), -31)), 0)));
   3020  1.1.1.1.4.2  yamt }
   3021  1.1.1.1.4.2  yamt 
   3022  1.1.1.1.4.2  yamt static inline int vec_any_eq(vec_float4 a, vec_float4 b)
   3023  1.1.1.1.4.2  yamt {
   3024  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpeq(a, b), -31)), 0)));
   3025  1.1.1.1.4.2  yamt }
   3026  1.1.1.1.4.2  yamt 
   3027  1.1.1.1.4.2  yamt /* vec_any_ge (any elements greater than or equal)
   3028  1.1.1.1.4.2  yamt  * ==========
   3029  1.1.1.1.4.2  yamt  */
   3030  1.1.1.1.4.2  yamt static inline int vec_any_ge(vec_uchar16 a, vec_uchar16 b)
   3031  1.1.1.1.4.2  yamt {
   3032  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) != 0xFFFF));
   3033  1.1.1.1.4.2  yamt }
   3034  1.1.1.1.4.2  yamt 
   3035  1.1.1.1.4.2  yamt static inline int vec_any_ge(vec_char16 a, vec_char16 b)
   3036  1.1.1.1.4.2  yamt {
   3037  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) != 0xFFFF));
   3038  1.1.1.1.4.2  yamt }
   3039  1.1.1.1.4.2  yamt 
   3040  1.1.1.1.4.2  yamt static inline int vec_any_ge(vec_bchar16 a, vec_char16 b)
   3041  1.1.1.1.4.2  yamt {
   3042  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, (vec_char16)(a))), 0) != 0xFFFF));
   3043  1.1.1.1.4.2  yamt }
   3044  1.1.1.1.4.2  yamt 
   3045  1.1.1.1.4.2  yamt static inline int vec_any_ge(vec_char16 a, vec_bchar16 b)
   3046  1.1.1.1.4.2  yamt {
   3047  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_char16)(b), a)), 0) != 0xFFFF));
   3048  1.1.1.1.4.2  yamt }
   3049  1.1.1.1.4.2  yamt 
   3050  1.1.1.1.4.2  yamt static inline int vec_any_ge(vec_ushort8 a, vec_ushort8 b)
   3051  1.1.1.1.4.2  yamt {
   3052  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) != 0xFF));
   3053  1.1.1.1.4.2  yamt }
   3054  1.1.1.1.4.2  yamt 
   3055  1.1.1.1.4.2  yamt static inline int vec_any_ge(vec_short8 a, vec_short8 b)
   3056  1.1.1.1.4.2  yamt {
   3057  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) != 0xFF));
   3058  1.1.1.1.4.2  yamt }
   3059  1.1.1.1.4.2  yamt 
   3060  1.1.1.1.4.2  yamt static inline int vec_any_ge(vec_bshort8 a, vec_short8 b)
   3061  1.1.1.1.4.2  yamt {
   3062  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, (vec_short8)(a))), 0) != 0xFF));
   3063  1.1.1.1.4.2  yamt }
   3064  1.1.1.1.4.2  yamt 
   3065  1.1.1.1.4.2  yamt static inline int vec_any_ge(vec_short8 a, vec_bshort8 b)
   3066  1.1.1.1.4.2  yamt {
   3067  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_short8)(b), a)), 0) != 0xFF));
   3068  1.1.1.1.4.2  yamt }
   3069  1.1.1.1.4.2  yamt 
   3070  1.1.1.1.4.2  yamt static inline int vec_any_ge(vec_uint4 a, vec_uint4 b)
   3071  1.1.1.1.4.2  yamt {
   3072  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) != 0xF));
   3073  1.1.1.1.4.2  yamt }
   3074  1.1.1.1.4.2  yamt 
   3075  1.1.1.1.4.2  yamt static inline int vec_any_ge(vec_int4 a, vec_int4 b)
   3076  1.1.1.1.4.2  yamt {
   3077  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) != 0xF));
   3078  1.1.1.1.4.2  yamt }
   3079  1.1.1.1.4.2  yamt 
   3080  1.1.1.1.4.2  yamt static inline int vec_any_ge(vec_bint4 a, vec_int4 b)
   3081  1.1.1.1.4.2  yamt {
   3082  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, (vec_int4)(a))), 0) != 0xF));
   3083  1.1.1.1.4.2  yamt }
   3084  1.1.1.1.4.2  yamt 
   3085  1.1.1.1.4.2  yamt static inline int vec_any_ge(vec_int4 a, vec_bint4 b)
   3086  1.1.1.1.4.2  yamt {
   3087  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_int4)(b), a)), 0) != 0xF));
   3088  1.1.1.1.4.2  yamt }
   3089  1.1.1.1.4.2  yamt 
   3090  1.1.1.1.4.2  yamt static inline int vec_any_ge(vec_float4 a, vec_float4 b)
   3091  1.1.1.1.4.2  yamt {
   3092  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) != 0xF));
   3093  1.1.1.1.4.2  yamt }
   3094  1.1.1.1.4.2  yamt 
   3095  1.1.1.1.4.2  yamt 
   3096  1.1.1.1.4.2  yamt /* vec_any_gt (any elements greater than)
   3097  1.1.1.1.4.2  yamt  * ==========
   3098  1.1.1.1.4.2  yamt  */
   3099  1.1.1.1.4.2  yamt static inline int vec_any_gt(vec_uchar16 a, vec_uchar16 b)
   3100  1.1.1.1.4.2  yamt {
   3101  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) != 0));
   3102  1.1.1.1.4.2  yamt }
   3103  1.1.1.1.4.2  yamt 
   3104  1.1.1.1.4.2  yamt static inline int vec_any_gt(vec_char16 a, vec_char16 b)
   3105  1.1.1.1.4.2  yamt {
   3106  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) != 0));
   3107  1.1.1.1.4.2  yamt }
   3108  1.1.1.1.4.2  yamt 
   3109  1.1.1.1.4.2  yamt static inline int vec_any_gt(vec_bchar16 a, vec_char16 b)
   3110  1.1.1.1.4.2  yamt {
   3111  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_char16)(a), b)), 0) != 0));
   3112  1.1.1.1.4.2  yamt }
   3113  1.1.1.1.4.2  yamt 
   3114  1.1.1.1.4.2  yamt static inline int vec_any_gt(vec_char16 a, vec_bchar16 b)
   3115  1.1.1.1.4.2  yamt {
   3116  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, (vec_char16)(b))), 0) != 0));
   3117  1.1.1.1.4.2  yamt }
   3118  1.1.1.1.4.2  yamt 
   3119  1.1.1.1.4.2  yamt static inline int vec_any_gt(vec_ushort8 a, vec_ushort8 b)
   3120  1.1.1.1.4.2  yamt {
   3121  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) != 0));
   3122  1.1.1.1.4.2  yamt }
   3123  1.1.1.1.4.2  yamt 
   3124  1.1.1.1.4.2  yamt static inline int vec_any_gt(vec_short8 a, vec_short8 b)
   3125  1.1.1.1.4.2  yamt {
   3126  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) != 0));
   3127  1.1.1.1.4.2  yamt }
   3128  1.1.1.1.4.2  yamt 
   3129  1.1.1.1.4.2  yamt static inline int vec_any_gt(vec_bshort8 a, vec_short8 b)
   3130  1.1.1.1.4.2  yamt {
   3131  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_short8)(a), b)), 0) != 0));
   3132  1.1.1.1.4.2  yamt }
   3133  1.1.1.1.4.2  yamt 
   3134  1.1.1.1.4.2  yamt static inline int vec_any_gt(vec_short8 a, vec_bshort8 b)
   3135  1.1.1.1.4.2  yamt {
   3136  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, (vec_short8)(b))), 0) != 0));
   3137  1.1.1.1.4.2  yamt }
   3138  1.1.1.1.4.2  yamt 
   3139  1.1.1.1.4.2  yamt 
   3140  1.1.1.1.4.2  yamt static inline int vec_any_gt(vec_uint4 a, vec_uint4 b)
   3141  1.1.1.1.4.2  yamt {
   3142  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpgt(a, b), -31)), 0)));
   3143  1.1.1.1.4.2  yamt }
   3144  1.1.1.1.4.2  yamt 
   3145  1.1.1.1.4.2  yamt static inline int vec_any_gt(vec_int4 a, vec_int4 b)
   3146  1.1.1.1.4.2  yamt {
   3147  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpgt(a, b), -31)), 0)));
   3148  1.1.1.1.4.2  yamt }
   3149  1.1.1.1.4.2  yamt 
   3150  1.1.1.1.4.2  yamt static inline int vec_any_gt(vec_bint4 a, vec_int4 b)
   3151  1.1.1.1.4.2  yamt {
   3152  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpgt((vec_int4)(a), b), -31)), 0)));
   3153  1.1.1.1.4.2  yamt }
   3154  1.1.1.1.4.2  yamt 
   3155  1.1.1.1.4.2  yamt static inline int vec_any_gt(vec_int4 a, vec_bint4 b)
   3156  1.1.1.1.4.2  yamt {
   3157  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpgt(a, (vec_int4)(b)), -31)), 0)));
   3158  1.1.1.1.4.2  yamt }
   3159  1.1.1.1.4.2  yamt 
   3160  1.1.1.1.4.2  yamt static inline int vec_any_gt(vec_float4 a, vec_float4 b)
   3161  1.1.1.1.4.2  yamt {
   3162  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpgt(a, b), -31)), 0)));
   3163  1.1.1.1.4.2  yamt }
   3164  1.1.1.1.4.2  yamt 
   3165  1.1.1.1.4.2  yamt /* vec_any_le (any elements less than or equal)
   3166  1.1.1.1.4.2  yamt  * ==========
   3167  1.1.1.1.4.2  yamt  */
   3168  1.1.1.1.4.2  yamt static inline int vec_any_le(vec_uchar16 a, vec_uchar16 b)
   3169  1.1.1.1.4.2  yamt {
   3170  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) != 0xFFFF));
   3171  1.1.1.1.4.2  yamt }
   3172  1.1.1.1.4.2  yamt 
   3173  1.1.1.1.4.2  yamt static inline int vec_any_le(vec_char16 a, vec_char16 b)
   3174  1.1.1.1.4.2  yamt {
   3175  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) != 0xFFFF));
   3176  1.1.1.1.4.2  yamt }
   3177  1.1.1.1.4.2  yamt 
   3178  1.1.1.1.4.2  yamt static inline int vec_any_le(vec_bchar16 a, vec_char16 b)
   3179  1.1.1.1.4.2  yamt {
   3180  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_char16)(a), b)), 0) != 0xFFFF));
   3181  1.1.1.1.4.2  yamt }
   3182  1.1.1.1.4.2  yamt 
   3183  1.1.1.1.4.2  yamt static inline int vec_any_le(vec_char16 a, vec_bchar16 b)
   3184  1.1.1.1.4.2  yamt {
   3185  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, (vec_char16)(b))), 0) != 0xFFFF));
   3186  1.1.1.1.4.2  yamt }
   3187  1.1.1.1.4.2  yamt 
   3188  1.1.1.1.4.2  yamt static inline int vec_any_le(vec_ushort8 a, vec_ushort8 b)
   3189  1.1.1.1.4.2  yamt {
   3190  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) != 0xFF));
   3191  1.1.1.1.4.2  yamt }
   3192  1.1.1.1.4.2  yamt 
   3193  1.1.1.1.4.2  yamt static inline int vec_any_le(vec_short8 a, vec_short8 b)
   3194  1.1.1.1.4.2  yamt {
   3195  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) != 0xFF));
   3196  1.1.1.1.4.2  yamt }
   3197  1.1.1.1.4.2  yamt 
   3198  1.1.1.1.4.2  yamt static inline int vec_any_le(vec_bshort8 a, vec_short8 b)
   3199  1.1.1.1.4.2  yamt {
   3200  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_short8)(a), b)), 0) != 0xFF));
   3201  1.1.1.1.4.2  yamt }
   3202  1.1.1.1.4.2  yamt 
   3203  1.1.1.1.4.2  yamt static inline int vec_any_le(vec_short8 a, vec_bshort8 b)
   3204  1.1.1.1.4.2  yamt {
   3205  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, (vec_short8)(b))), 0) != 0xFF));
   3206  1.1.1.1.4.2  yamt }
   3207  1.1.1.1.4.2  yamt 
   3208  1.1.1.1.4.2  yamt static inline int vec_any_le(vec_uint4 a, vec_uint4 b)
   3209  1.1.1.1.4.2  yamt {
   3210  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) != 0xF));
   3211  1.1.1.1.4.2  yamt }
   3212  1.1.1.1.4.2  yamt 
   3213  1.1.1.1.4.2  yamt static inline int vec_any_le(vec_int4 a, vec_int4 b)
   3214  1.1.1.1.4.2  yamt {
   3215  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) != 0xF));
   3216  1.1.1.1.4.2  yamt }
   3217  1.1.1.1.4.2  yamt 
   3218  1.1.1.1.4.2  yamt static inline int vec_any_le(vec_bint4 a, vec_int4 b)
   3219  1.1.1.1.4.2  yamt {
   3220  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_int4)(a), b)), 0) != 0xF));
   3221  1.1.1.1.4.2  yamt }
   3222  1.1.1.1.4.2  yamt 
   3223  1.1.1.1.4.2  yamt static inline int vec_any_le(vec_int4 a, vec_bint4 b)
   3224  1.1.1.1.4.2  yamt {
   3225  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, (vec_int4)(b))), 0) != 0xF));
   3226  1.1.1.1.4.2  yamt }
   3227  1.1.1.1.4.2  yamt 
   3228  1.1.1.1.4.2  yamt static inline int vec_any_le(vec_float4 a, vec_float4 b)
   3229  1.1.1.1.4.2  yamt {
   3230  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) != 0xF));
   3231  1.1.1.1.4.2  yamt }
   3232  1.1.1.1.4.2  yamt 
   3233  1.1.1.1.4.2  yamt 
   3234  1.1.1.1.4.2  yamt /* vec_any_lt (any elements less than)
   3235  1.1.1.1.4.2  yamt  * ==========
   3236  1.1.1.1.4.2  yamt  */
   3237  1.1.1.1.4.2  yamt static inline int vec_any_lt(vec_uchar16 a, vec_uchar16 b)
   3238  1.1.1.1.4.2  yamt {
   3239  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) != 0));
   3240  1.1.1.1.4.2  yamt }
   3241  1.1.1.1.4.2  yamt 
   3242  1.1.1.1.4.2  yamt static inline int vec_any_lt(vec_char16 a, vec_char16 b)
   3243  1.1.1.1.4.2  yamt {
   3244  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) != 0));
   3245  1.1.1.1.4.2  yamt }
   3246  1.1.1.1.4.2  yamt 
   3247  1.1.1.1.4.2  yamt static inline int vec_any_lt(vec_bchar16 a, vec_char16 b)
   3248  1.1.1.1.4.2  yamt {
   3249  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, (vec_char16)(a))), 0) != 0));
   3250  1.1.1.1.4.2  yamt }
   3251  1.1.1.1.4.2  yamt 
   3252  1.1.1.1.4.2  yamt static inline int vec_any_lt(vec_char16 a, vec_bchar16 b)
   3253  1.1.1.1.4.2  yamt {
   3254  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_char16)(b), a)), 0) != 0));
   3255  1.1.1.1.4.2  yamt }
   3256  1.1.1.1.4.2  yamt 
   3257  1.1.1.1.4.2  yamt static inline int vec_any_lt(vec_ushort8 a, vec_ushort8 b)
   3258  1.1.1.1.4.2  yamt {
   3259  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) != 0));
   3260  1.1.1.1.4.2  yamt }
   3261  1.1.1.1.4.2  yamt 
   3262  1.1.1.1.4.2  yamt static inline int vec_any_lt(vec_short8 a, vec_short8 b)
   3263  1.1.1.1.4.2  yamt {
   3264  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) != 0));
   3265  1.1.1.1.4.2  yamt }
   3266  1.1.1.1.4.2  yamt 
   3267  1.1.1.1.4.2  yamt static inline int vec_any_lt(vec_bshort8 a, vec_short8 b)
   3268  1.1.1.1.4.2  yamt {
   3269  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, (vec_short8)(a))), 0) != 0));
   3270  1.1.1.1.4.2  yamt }
   3271  1.1.1.1.4.2  yamt 
   3272  1.1.1.1.4.2  yamt static inline int vec_any_lt(vec_short8 a, vec_bshort8 b)
   3273  1.1.1.1.4.2  yamt {
   3274  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt((vec_short8)(b), a)), 0) != 0));
   3275  1.1.1.1.4.2  yamt }
   3276  1.1.1.1.4.2  yamt 
   3277  1.1.1.1.4.2  yamt static inline int vec_any_lt(vec_uint4 a, vec_uint4 b)
   3278  1.1.1.1.4.2  yamt {
   3279  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpgt(b, a), -31)), 0)));
   3280  1.1.1.1.4.2  yamt }
   3281  1.1.1.1.4.2  yamt 
   3282  1.1.1.1.4.2  yamt static inline int vec_any_lt(vec_int4 a, vec_int4 b)
   3283  1.1.1.1.4.2  yamt {
   3284  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpgt(b, a), -31)), 0)));
   3285  1.1.1.1.4.2  yamt }
   3286  1.1.1.1.4.2  yamt 
   3287  1.1.1.1.4.2  yamt static inline int vec_any_lt(vec_bint4 a, vec_int4 b)
   3288  1.1.1.1.4.2  yamt {
   3289  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpgt(b, (vec_int4)(a)), -31)), 0)));
   3290  1.1.1.1.4.2  yamt }
   3291  1.1.1.1.4.2  yamt 
   3292  1.1.1.1.4.2  yamt static inline int vec_any_lt(vec_int4 a, vec_bint4 b)
   3293  1.1.1.1.4.2  yamt {
   3294  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpgt((vec_int4)(b), a), -31)), 0)));
   3295  1.1.1.1.4.2  yamt }
   3296  1.1.1.1.4.2  yamt 
   3297  1.1.1.1.4.2  yamt static inline int vec_any_lt(vec_float4 a, vec_float4 b)
   3298  1.1.1.1.4.2  yamt {
   3299  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpgt(b, a), -31)), 0)));
   3300  1.1.1.1.4.2  yamt }
   3301  1.1.1.1.4.2  yamt 
   3302  1.1.1.1.4.2  yamt /* vec_any_nan (any elements not a number)
   3303  1.1.1.1.4.2  yamt  * ===========
   3304  1.1.1.1.4.2  yamt  */
   3305  1.1.1.1.4.2  yamt static inline int vec_any_nan(vec_float4 a)
   3306  1.1.1.1.4.2  yamt {
   3307  1.1.1.1.4.2  yamt   vec_uint4 exp, man;
   3308  1.1.1.1.4.2  yamt   vec_uint4 exp_mask = spu_splats((unsigned int)0x7F800000);
   3309  1.1.1.1.4.2  yamt 
   3310  1.1.1.1.4.2  yamt   exp = spu_and((vec_uint4)(a), exp_mask);
   3311  1.1.1.1.4.2  yamt   man = spu_and((vec_uint4)(a), spu_splats((unsigned int)0x007FFFFF));
   3312  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_andc(spu_cmpeq(exp, exp_mask),
   3313  1.1.1.1.4.2  yamt 						spu_cmpeq(man, 0))), 0) != 0));
   3314  1.1.1.1.4.2  yamt }
   3315  1.1.1.1.4.2  yamt 
   3316  1.1.1.1.4.2  yamt 
   3317  1.1.1.1.4.2  yamt /* vec_any_ne (any elements not equal)
   3318  1.1.1.1.4.2  yamt  * ==========
   3319  1.1.1.1.4.2  yamt  */
   3320  1.1.1.1.4.2  yamt static inline int vec_any_ne(vec_uchar16 a, vec_uchar16 b)
   3321  1.1.1.1.4.2  yamt {
   3322  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) != 0xFFFF));
   3323  1.1.1.1.4.2  yamt }
   3324  1.1.1.1.4.2  yamt 
   3325  1.1.1.1.4.2  yamt static inline int vec_any_ne(vec_char16 a, vec_char16 b)
   3326  1.1.1.1.4.2  yamt {
   3327  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) != 0xFFFF));
   3328  1.1.1.1.4.2  yamt }
   3329  1.1.1.1.4.2  yamt 
   3330  1.1.1.1.4.2  yamt static inline int vec_any_ne(vec_bchar16 a, vec_char16 b)
   3331  1.1.1.1.4.2  yamt {
   3332  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq((vec_char16)(a), b)), 0) != 0xFFFF));
   3333  1.1.1.1.4.2  yamt }
   3334  1.1.1.1.4.2  yamt 
   3335  1.1.1.1.4.2  yamt static inline int vec_any_ne(vec_char16 a, vec_bchar16 b)
   3336  1.1.1.1.4.2  yamt {
   3337  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, (vec_char16)(b))), 0) != 0xFFFF));
   3338  1.1.1.1.4.2  yamt }
   3339  1.1.1.1.4.2  yamt 
   3340  1.1.1.1.4.2  yamt static inline int vec_any_ne(vec_ushort8 a, vec_ushort8 b)
   3341  1.1.1.1.4.2  yamt {
   3342  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) != 0xFF));
   3343  1.1.1.1.4.2  yamt }
   3344  1.1.1.1.4.2  yamt 
   3345  1.1.1.1.4.2  yamt static inline int vec_any_ne(vec_short8 a, vec_short8 b)
   3346  1.1.1.1.4.2  yamt {
   3347  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) != 0xFF));
   3348  1.1.1.1.4.2  yamt }
   3349  1.1.1.1.4.2  yamt 
   3350  1.1.1.1.4.2  yamt static inline int vec_any_ne(vec_bshort8 a, vec_short8 b)
   3351  1.1.1.1.4.2  yamt {
   3352  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq((vec_short8)(a), b)), 0) != 0xFF));
   3353  1.1.1.1.4.2  yamt }
   3354  1.1.1.1.4.2  yamt 
   3355  1.1.1.1.4.2  yamt static inline int vec_any_ne(vec_short8 a, vec_bshort8 b)
   3356  1.1.1.1.4.2  yamt {
   3357  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, (vec_short8)(b))), 0) != 0xFF));
   3358  1.1.1.1.4.2  yamt }
   3359  1.1.1.1.4.2  yamt 
   3360  1.1.1.1.4.2  yamt static inline int vec_any_ne(vec_uint4 a, vec_uint4 b)
   3361  1.1.1.1.4.2  yamt {
   3362  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) != 0xF));
   3363  1.1.1.1.4.2  yamt }
   3364  1.1.1.1.4.2  yamt 
   3365  1.1.1.1.4.2  yamt static inline int vec_any_ne(vec_int4 a, vec_int4 b)
   3366  1.1.1.1.4.2  yamt {
   3367  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) != 0xF));
   3368  1.1.1.1.4.2  yamt }
   3369  1.1.1.1.4.2  yamt 
   3370  1.1.1.1.4.2  yamt static inline int vec_any_ne(vec_bint4 a, vec_int4 b)
   3371  1.1.1.1.4.2  yamt {
   3372  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq((vec_int4)(a), b)), 0) != 0xF));
   3373  1.1.1.1.4.2  yamt }
   3374  1.1.1.1.4.2  yamt 
   3375  1.1.1.1.4.2  yamt static inline int vec_any_ne(vec_int4 a, vec_bint4 b)
   3376  1.1.1.1.4.2  yamt {
   3377  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, (vec_int4)(b))), 0) != 0xF));
   3378  1.1.1.1.4.2  yamt }
   3379  1.1.1.1.4.2  yamt 
   3380  1.1.1.1.4.2  yamt static inline int vec_any_ne(vec_float4 a, vec_float4 b)
   3381  1.1.1.1.4.2  yamt {
   3382  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(a, b)), 0) != 0xF));
   3383  1.1.1.1.4.2  yamt }
   3384  1.1.1.1.4.2  yamt 
   3385  1.1.1.1.4.2  yamt 
   3386  1.1.1.1.4.2  yamt /* vec_any_nge (any elements not greater than or equal)
   3387  1.1.1.1.4.2  yamt  * ===========
   3388  1.1.1.1.4.2  yamt  */
   3389  1.1.1.1.4.2  yamt static inline int vec_any_nge(vec_float4 a, vec_float4 b)
   3390  1.1.1.1.4.2  yamt {
   3391  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_orx(spu_rlmask(spu_cmpgt(b, a), -31)), 0)));
   3392  1.1.1.1.4.2  yamt }
   3393  1.1.1.1.4.2  yamt 
   3394  1.1.1.1.4.2  yamt /* vec_any_ngt (any elements not greater than)
   3395  1.1.1.1.4.2  yamt  * ===========
   3396  1.1.1.1.4.2  yamt  */
   3397  1.1.1.1.4.2  yamt static inline int vec_any_ngt(vec_float4 a, vec_float4 b)
   3398  1.1.1.1.4.2  yamt {
   3399  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) != 0xF));
   3400  1.1.1.1.4.2  yamt }
   3401  1.1.1.1.4.2  yamt 
   3402  1.1.1.1.4.2  yamt 
   3403  1.1.1.1.4.2  yamt /* vec_any_nle (any elements not less than or equal)
   3404  1.1.1.1.4.2  yamt  * ===========
   3405  1.1.1.1.4.2  yamt  */
   3406  1.1.1.1.4.2  yamt static inline int vec_any_nle(vec_float4 a, vec_float4 b)
   3407  1.1.1.1.4.2  yamt {
   3408  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(a, b)), 0) != 0));
   3409  1.1.1.1.4.2  yamt }
   3410  1.1.1.1.4.2  yamt 
   3411  1.1.1.1.4.2  yamt 
   3412  1.1.1.1.4.2  yamt /* vec_any_nlt (any elements not less than)
   3413  1.1.1.1.4.2  yamt  * ===========
   3414  1.1.1.1.4.2  yamt  */
   3415  1.1.1.1.4.2  yamt static inline int vec_any_nlt(vec_float4 a, vec_float4 b)
   3416  1.1.1.1.4.2  yamt {
   3417  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpgt(b, a)), 0) != 0xF));
   3418  1.1.1.1.4.2  yamt }
   3419  1.1.1.1.4.2  yamt 
   3420  1.1.1.1.4.2  yamt 
   3421  1.1.1.1.4.2  yamt /* vec_any_numeric (any elements numeric)
   3422  1.1.1.1.4.2  yamt  * ===============
   3423  1.1.1.1.4.2  yamt  */
   3424  1.1.1.1.4.2  yamt static inline int vec_any_numeric(vec_float4 a)
   3425  1.1.1.1.4.2  yamt {
   3426  1.1.1.1.4.2  yamt   vec_uint4 exp;
   3427  1.1.1.1.4.2  yamt 
   3428  1.1.1.1.4.2  yamt   exp = spu_and(spu_rlmask((vec_uint4)(a), -23), 0xFF);
   3429  1.1.1.1.4.2  yamt   return ((int)(spu_extract(spu_gather(spu_cmpeq(exp, 255)), 0) != 0xF));
   3430  1.1.1.1.4.2  yamt }
   3431  1.1.1.1.4.2  yamt 
   3432  1.1.1.1.4.2  yamt 
   3433  1.1.1.1.4.2  yamt /* vec_any_out (any elements out of bounds)
   3434  1.1.1.1.4.2  yamt  * ===========
   3435  1.1.1.1.4.2  yamt  */
   3436  1.1.1.1.4.2  yamt static inline int vec_any_out(vec_float4 a, vec_float4 b)
   3437  1.1.1.1.4.2  yamt {
   3438  1.1.1.1.4.2  yamt   return (spu_extract(spu_gather(spu_nor(spu_cmpabsgt(a, b), (vec_uint4)(spu_rlmaska((vec_int4)(b), -31)))), 0) != 0xF);
   3439  1.1.1.1.4.2  yamt }
   3440  1.1.1.1.4.2  yamt 
   3441  1.1.1.1.4.2  yamt 
   3442  1.1.1.1.4.2  yamt /* CBE Language Extension Intrinsics
   3443  1.1.1.1.4.2  yamt  */
   3444  1.1.1.1.4.2  yamt 
   3445  1.1.1.1.4.2  yamt /* vec_extract (extract element from vector)
   3446  1.1.1.1.4.2  yamt  * ===========
   3447  1.1.1.1.4.2  yamt  */
   3448  1.1.1.1.4.2  yamt #define vec_extract(_a, _element)	spu_extract(_a, _element)
   3449  1.1.1.1.4.2  yamt 
   3450  1.1.1.1.4.2  yamt 
   3451  1.1.1.1.4.2  yamt /* vec_insert (insert scalar into specified vector element)
   3452  1.1.1.1.4.2  yamt  * ==========
   3453  1.1.1.1.4.2  yamt  */
   3454  1.1.1.1.4.2  yamt #define vec_insert(_a, _b, _element)	spu_insert(_a, _b, _element)
   3455  1.1.1.1.4.2  yamt 
   3456  1.1.1.1.4.2  yamt /* vec_lvlx (load vector left indexed)
   3457  1.1.1.1.4.2  yamt  * ========
   3458  1.1.1.1.4.2  yamt  */
   3459  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvlx(int a, unsigned char *b)
   3460  1.1.1.1.4.2  yamt {
   3461  1.1.1.1.4.2  yamt   vec_uchar16 *p = (vec_uchar16 *)((unsigned char *)(b) + a);
   3462  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3463  1.1.1.1.4.2  yamt }
   3464  1.1.1.1.4.2  yamt 
   3465  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvlx(int a, vec_uchar16 *b)
   3466  1.1.1.1.4.2  yamt {
   3467  1.1.1.1.4.2  yamt   vec_uchar16 *p = (vec_uchar16 *)((unsigned char *)(b) + a);
   3468  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3469  1.1.1.1.4.2  yamt }
   3470  1.1.1.1.4.2  yamt 
   3471  1.1.1.1.4.2  yamt static inline vec_char16 vec_lvlx(int a, signed char *b)
   3472  1.1.1.1.4.2  yamt {
   3473  1.1.1.1.4.2  yamt   vec_char16 *p = (vec_char16 *)((unsigned char *)(b) + a);
   3474  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3475  1.1.1.1.4.2  yamt }
   3476  1.1.1.1.4.2  yamt 
   3477  1.1.1.1.4.2  yamt static inline vec_char16 vec_lvlx(int a, vec_char16 *b)
   3478  1.1.1.1.4.2  yamt {
   3479  1.1.1.1.4.2  yamt   vec_char16 *p = (vec_char16 *)((unsigned char *)(b) + a);
   3480  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3481  1.1.1.1.4.2  yamt }
   3482  1.1.1.1.4.2  yamt 
   3483  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_lvlx(int a, unsigned short *b)
   3484  1.1.1.1.4.2  yamt {
   3485  1.1.1.1.4.2  yamt   vec_ushort8 *p = (vec_ushort8 *)((unsigned char *)(b) + a);
   3486  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3487  1.1.1.1.4.2  yamt }
   3488  1.1.1.1.4.2  yamt 
   3489  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_lvlx(int a, vec_ushort8 *b)
   3490  1.1.1.1.4.2  yamt {
   3491  1.1.1.1.4.2  yamt   vec_ushort8 *p = (vec_ushort8 *)((unsigned char *)(b) + a);
   3492  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3493  1.1.1.1.4.2  yamt }
   3494  1.1.1.1.4.2  yamt 
   3495  1.1.1.1.4.2  yamt static inline vec_short8 vec_lvlx(int a, signed short *b)
   3496  1.1.1.1.4.2  yamt {
   3497  1.1.1.1.4.2  yamt   vec_short8 *p = (vec_short8 *)((unsigned char *)(b) + a);
   3498  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3499  1.1.1.1.4.2  yamt }
   3500  1.1.1.1.4.2  yamt 
   3501  1.1.1.1.4.2  yamt static inline vec_short8 vec_lvlx(int a, vec_short8 *b)
   3502  1.1.1.1.4.2  yamt {
   3503  1.1.1.1.4.2  yamt   vec_short8 *p = (vec_short8 *)((unsigned char *)(b) + a);
   3504  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3505  1.1.1.1.4.2  yamt }
   3506  1.1.1.1.4.2  yamt 
   3507  1.1.1.1.4.2  yamt static inline vec_uint4 vec_lvlx(int a, unsigned int *b)
   3508  1.1.1.1.4.2  yamt {
   3509  1.1.1.1.4.2  yamt   vec_uint4 *p = (vec_uint4 *)((unsigned char *)(b) + a);
   3510  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3511  1.1.1.1.4.2  yamt }
   3512  1.1.1.1.4.2  yamt 
   3513  1.1.1.1.4.2  yamt static inline vec_uint4 vec_lvlx(int a, vec_uint4 *b)
   3514  1.1.1.1.4.2  yamt {
   3515  1.1.1.1.4.2  yamt   vec_uint4 *p = (vec_uint4 *)((unsigned char *)(b) + a);
   3516  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3517  1.1.1.1.4.2  yamt }
   3518  1.1.1.1.4.2  yamt 
   3519  1.1.1.1.4.2  yamt static inline vec_int4 vec_lvlx(int a, signed int *b)
   3520  1.1.1.1.4.2  yamt {
   3521  1.1.1.1.4.2  yamt   vec_int4 *p = (vec_int4 *)((unsigned char *)(b) + a);
   3522  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3523  1.1.1.1.4.2  yamt }
   3524  1.1.1.1.4.2  yamt 
   3525  1.1.1.1.4.2  yamt static inline vec_int4 vec_lvlx(int a, vec_int4 *b)
   3526  1.1.1.1.4.2  yamt {
   3527  1.1.1.1.4.2  yamt   vec_int4 *p = (vec_int4 *)((unsigned char *)(b) + a);
   3528  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3529  1.1.1.1.4.2  yamt }
   3530  1.1.1.1.4.2  yamt 
   3531  1.1.1.1.4.2  yamt static inline vec_float4 vec_lvlx(int a, float *b)
   3532  1.1.1.1.4.2  yamt {
   3533  1.1.1.1.4.2  yamt   vec_float4 *p = (vec_float4 *)((unsigned char *)(b) + a);
   3534  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3535  1.1.1.1.4.2  yamt }
   3536  1.1.1.1.4.2  yamt 
   3537  1.1.1.1.4.2  yamt static inline vec_float4 vec_lvlx(int a, vec_float4 *b)
   3538  1.1.1.1.4.2  yamt {
   3539  1.1.1.1.4.2  yamt   vec_float4 *p = (vec_float4 *)((unsigned char *)(b) + a);
   3540  1.1.1.1.4.2  yamt   return(spu_slqwbyte(*p, (unsigned int)p & 0xF));
   3541  1.1.1.1.4.2  yamt }
   3542  1.1.1.1.4.2  yamt 
   3543  1.1.1.1.4.2  yamt 
   3544  1.1.1.1.4.2  yamt /* vec_lvlxl (load vector left indexed last)
   3545  1.1.1.1.4.2  yamt  * =========
   3546  1.1.1.1.4.2  yamt  */
   3547  1.1.1.1.4.2  yamt #define vec_lvlxl(_a, _b)	vec_lvlx(_a, _b)
   3548  1.1.1.1.4.2  yamt 
   3549  1.1.1.1.4.2  yamt 
   3550  1.1.1.1.4.2  yamt /* vec_lvrx (load vector right indexed)
   3551  1.1.1.1.4.2  yamt  * ========
   3552  1.1.1.1.4.2  yamt  */
   3553  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvrx(int a, unsigned char *b)
   3554  1.1.1.1.4.2  yamt {
   3555  1.1.1.1.4.2  yamt   vec_uchar16 *p = (vec_uchar16 *)((unsigned char *)(b) + a);
   3556  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3557  1.1.1.1.4.2  yamt }
   3558  1.1.1.1.4.2  yamt 
   3559  1.1.1.1.4.2  yamt static inline vec_uchar16 vec_lvrx(int a, vec_uchar16 *b)
   3560  1.1.1.1.4.2  yamt {
   3561  1.1.1.1.4.2  yamt   vec_uchar16 *p = (vec_uchar16 *)((unsigned char *)(b) + a);
   3562  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3563  1.1.1.1.4.2  yamt }
   3564  1.1.1.1.4.2  yamt 
   3565  1.1.1.1.4.2  yamt static inline vec_char16 vec_lvrx(int a, signed char *b)
   3566  1.1.1.1.4.2  yamt {
   3567  1.1.1.1.4.2  yamt   vec_char16 *p = (vec_char16 *)((unsigned char *)(b) + a);
   3568  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3569  1.1.1.1.4.2  yamt }
   3570  1.1.1.1.4.2  yamt 
   3571  1.1.1.1.4.2  yamt static inline vec_char16 vec_lvrx(int a, vec_char16 *b)
   3572  1.1.1.1.4.2  yamt {
   3573  1.1.1.1.4.2  yamt   vec_char16 *p = (vec_char16 *)((unsigned char *)(b) + a);
   3574  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3575  1.1.1.1.4.2  yamt }
   3576  1.1.1.1.4.2  yamt 
   3577  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_lvrx(int a, unsigned short *b)
   3578  1.1.1.1.4.2  yamt {
   3579  1.1.1.1.4.2  yamt   vec_ushort8 *p = (vec_ushort8 *)((unsigned char *)(b) + a);
   3580  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3581  1.1.1.1.4.2  yamt }
   3582  1.1.1.1.4.2  yamt 
   3583  1.1.1.1.4.2  yamt static inline vec_ushort8 vec_lvrx(int a, vec_ushort8 *b)
   3584  1.1.1.1.4.2  yamt {
   3585  1.1.1.1.4.2  yamt   vec_ushort8 *p = (vec_ushort8 *)((unsigned char *)(b) + a);
   3586  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3587  1.1.1.1.4.2  yamt }
   3588  1.1.1.1.4.2  yamt 
   3589  1.1.1.1.4.2  yamt static inline vec_short8 vec_lvrx(int a, signed short *b)
   3590  1.1.1.1.4.2  yamt {
   3591  1.1.1.1.4.2  yamt   vec_short8 *p = (vec_short8 *)((unsigned char *)(b) + a);
   3592  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3593  1.1.1.1.4.2  yamt }
   3594  1.1.1.1.4.2  yamt 
   3595  1.1.1.1.4.2  yamt static inline vec_short8 vec_lvrx(int a, vec_short8 *b)
   3596  1.1.1.1.4.2  yamt {
   3597  1.1.1.1.4.2  yamt   vec_short8 *p = (vec_short8 *)((unsigned char *)(b) + a);
   3598  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3599  1.1.1.1.4.2  yamt }
   3600  1.1.1.1.4.2  yamt 
   3601  1.1.1.1.4.2  yamt static inline vec_uint4 vec_lvrx(int a, unsigned int *b)
   3602  1.1.1.1.4.2  yamt {
   3603  1.1.1.1.4.2  yamt   vec_uint4 *p = (vec_uint4 *)((unsigned char *)(b) + a);
   3604  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3605  1.1.1.1.4.2  yamt }
   3606  1.1.1.1.4.2  yamt 
   3607  1.1.1.1.4.2  yamt static inline vec_uint4 vec_lvrx(int a, vec_uint4 *b)
   3608  1.1.1.1.4.2  yamt {
   3609  1.1.1.1.4.2  yamt   vec_uint4 *p = (vec_uint4 *)((unsigned char *)(b) + a);
   3610  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3611  1.1.1.1.4.2  yamt }
   3612  1.1.1.1.4.2  yamt 
   3613  1.1.1.1.4.2  yamt static inline vec_int4 vec_lvrx(int a, signed int *b)
   3614  1.1.1.1.4.2  yamt {
   3615  1.1.1.1.4.2  yamt   vec_int4 *p = (vec_int4 *)((unsigned char *)(b) + a);
   3616  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3617  1.1.1.1.4.2  yamt }
   3618  1.1.1.1.4.2  yamt 
   3619  1.1.1.1.4.2  yamt static inline vec_int4 vec_lvrx(int a, vec_int4 *b)
   3620  1.1.1.1.4.2  yamt {
   3621  1.1.1.1.4.2  yamt   vec_int4 *p = (vec_int4 *)((unsigned char *)(b) + a);
   3622  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3623  1.1.1.1.4.2  yamt }
   3624  1.1.1.1.4.2  yamt 
   3625  1.1.1.1.4.2  yamt static inline vec_float4 vec_lvrx(int a, float *b)
   3626  1.1.1.1.4.2  yamt {
   3627  1.1.1.1.4.2  yamt   vec_float4 *p = (vec_float4 *)((unsigned char *)(b) + a);
   3628  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3629  1.1.1.1.4.2  yamt }
   3630  1.1.1.1.4.2  yamt 
   3631  1.1.1.1.4.2  yamt static inline vec_float4 vec_lvrx(int a, vec_float4 *b)
   3632  1.1.1.1.4.2  yamt {
   3633  1.1.1.1.4.2  yamt   vec_float4 *p = (vec_float4 *)((unsigned char *)(b) + a);
   3634  1.1.1.1.4.2  yamt   return(spu_rlmaskqwbyte(*p, ((int)p & 0xF)-16));
   3635  1.1.1.1.4.2  yamt }
   3636  1.1.1.1.4.2  yamt 
   3637  1.1.1.1.4.2  yamt 
   3638  1.1.1.1.4.2  yamt 
   3639  1.1.1.1.4.2  yamt /* vec_lvrxl (load vector right indexed last)
   3640  1.1.1.1.4.2  yamt  * =========
   3641  1.1.1.1.4.2  yamt  */
   3642  1.1.1.1.4.2  yamt #define vec_lvrxl(_a, _b)	vec_lvrx(_a, _b)
   3643  1.1.1.1.4.2  yamt 
   3644  1.1.1.1.4.2  yamt 
   3645  1.1.1.1.4.2  yamt /* vec_promote (promote scalar to a vector)
   3646  1.1.1.1.4.2  yamt  * ===========
   3647  1.1.1.1.4.2  yamt  */
   3648  1.1.1.1.4.2  yamt #define vec_promote(_a, _element)	spu_promote(_a, _element)
   3649  1.1.1.1.4.2  yamt 
   3650  1.1.1.1.4.2  yamt 
   3651  1.1.1.1.4.2  yamt /* vec_splats (splat scalar to a vector)
   3652  1.1.1.1.4.2  yamt  * ==========
   3653  1.1.1.1.4.2  yamt  */
   3654  1.1.1.1.4.2  yamt #define vec_splats(_a)	spu_splats(_a)
   3655  1.1.1.1.4.2  yamt 
   3656  1.1.1.1.4.2  yamt 
   3657  1.1.1.1.4.2  yamt /* vec_stvlx (store vector left indexed)
   3658  1.1.1.1.4.2  yamt  * =========
   3659  1.1.1.1.4.2  yamt  */
   3660  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_uchar16 a, int b, unsigned char *c)
   3661  1.1.1.1.4.2  yamt {
   3662  1.1.1.1.4.2  yamt   int shift;
   3663  1.1.1.1.4.2  yamt   vec_uchar16 *p = (vec_uchar16 *)((unsigned char *)(c) + b);
   3664  1.1.1.1.4.2  yamt 
   3665  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3666  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3667  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3668  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned char)0xFF), shift));
   3669  1.1.1.1.4.2  yamt }
   3670  1.1.1.1.4.2  yamt 
   3671  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_uchar16 a, int b, vec_uchar16 *c)
   3672  1.1.1.1.4.2  yamt {
   3673  1.1.1.1.4.2  yamt   int shift;
   3674  1.1.1.1.4.2  yamt   vec_uchar16 *p = (vec_uchar16 *)((unsigned char *)(c) + b);
   3675  1.1.1.1.4.2  yamt 
   3676  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3677  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3678  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3679  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned char)0xFF), shift));
   3680  1.1.1.1.4.2  yamt }
   3681  1.1.1.1.4.2  yamt 
   3682  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_char16 a, int b, signed char *c)
   3683  1.1.1.1.4.2  yamt {
   3684  1.1.1.1.4.2  yamt   int shift;
   3685  1.1.1.1.4.2  yamt   vec_char16 *p = (vec_char16 *)((unsigned char *)(c) + b);
   3686  1.1.1.1.4.2  yamt 
   3687  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3688  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3689  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3690  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned char)0xFF), shift));
   3691  1.1.1.1.4.2  yamt }
   3692  1.1.1.1.4.2  yamt 
   3693  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_char16 a, int b, vec_char16 *c)
   3694  1.1.1.1.4.2  yamt {
   3695  1.1.1.1.4.2  yamt   int shift;
   3696  1.1.1.1.4.2  yamt   vec_char16 *p = (vec_char16 *)((unsigned char *)(c) + b);
   3697  1.1.1.1.4.2  yamt 
   3698  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3699  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3700  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3701  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned char)0xFF), shift));
   3702  1.1.1.1.4.2  yamt }
   3703  1.1.1.1.4.2  yamt 
   3704  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_ushort8 a, int b, unsigned short *c)
   3705  1.1.1.1.4.2  yamt {
   3706  1.1.1.1.4.2  yamt   int shift;
   3707  1.1.1.1.4.2  yamt   vec_ushort8 *p = (vec_ushort8 *)((unsigned char *)(c) + b);
   3708  1.1.1.1.4.2  yamt 
   3709  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3710  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3711  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3712  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned short)0xFFFF), shift));
   3713  1.1.1.1.4.2  yamt }
   3714  1.1.1.1.4.2  yamt 
   3715  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_ushort8 a, int b, vec_ushort8 *c)
   3716  1.1.1.1.4.2  yamt {
   3717  1.1.1.1.4.2  yamt   int shift;
   3718  1.1.1.1.4.2  yamt   vec_ushort8 *p = (vec_ushort8 *)((unsigned char *)(c) + b);
   3719  1.1.1.1.4.2  yamt 
   3720  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3721  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3722  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3723  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned short)0xFFFF), shift));
   3724  1.1.1.1.4.2  yamt }
   3725  1.1.1.1.4.2  yamt 
   3726  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_short8 a, int b, signed short *c)
   3727  1.1.1.1.4.2  yamt {
   3728  1.1.1.1.4.2  yamt   int shift;
   3729  1.1.1.1.4.2  yamt   vec_short8 *p = (vec_short8 *)((unsigned char *)(c) + b);
   3730  1.1.1.1.4.2  yamt 
   3731  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3732  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3733  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3734  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned short)0xFFFF), shift));
   3735  1.1.1.1.4.2  yamt }
   3736  1.1.1.1.4.2  yamt 
   3737  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_short8 a, int b, vec_short8 *c)
   3738  1.1.1.1.4.2  yamt {
   3739  1.1.1.1.4.2  yamt   int shift;
   3740  1.1.1.1.4.2  yamt   vec_short8 *p = (vec_short8 *)((unsigned char *)(c) + b);
   3741  1.1.1.1.4.2  yamt 
   3742  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3743  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3744  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3745  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned short)0xFFFF), shift));
   3746  1.1.1.1.4.2  yamt }
   3747  1.1.1.1.4.2  yamt 
   3748  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_uint4 a, int b, unsigned int *c)
   3749  1.1.1.1.4.2  yamt {
   3750  1.1.1.1.4.2  yamt   int shift;
   3751  1.1.1.1.4.2  yamt   vec_uint4 *p = (vec_uint4 *)((unsigned char *)(c) + b);
   3752  1.1.1.1.4.2  yamt 
   3753  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3754  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3755  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3756  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned int)0xFFFFFFFF), shift));
   3757  1.1.1.1.4.2  yamt }
   3758  1.1.1.1.4.2  yamt 
   3759  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_uint4 a, int b, vec_uint4 *c)
   3760  1.1.1.1.4.2  yamt {
   3761  1.1.1.1.4.2  yamt   int shift;
   3762  1.1.1.1.4.2  yamt   vec_uint4 *p = (vec_uint4 *)((unsigned char *)(c) + b);
   3763  1.1.1.1.4.2  yamt 
   3764  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3765  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3766  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3767  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned int)0xFFFFFFFF), shift));
   3768  1.1.1.1.4.2  yamt }
   3769  1.1.1.1.4.2  yamt 
   3770  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_int4 a, int b, signed int *c)
   3771  1.1.1.1.4.2  yamt {
   3772  1.1.1.1.4.2  yamt   int shift;
   3773  1.1.1.1.4.2  yamt   vec_int4 *p = (vec_int4 *)((unsigned char *)(c) + b);
   3774  1.1.1.1.4.2  yamt 
   3775  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3776  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3777  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3778  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned int)0xFFFFFFFF), shift));
   3779  1.1.1.1.4.2  yamt }
   3780  1.1.1.1.4.2  yamt 
   3781  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_int4 a, int b, vec_int4 *c)
   3782  1.1.1.1.4.2  yamt {
   3783  1.1.1.1.4.2  yamt   int shift;
   3784  1.1.1.1.4.2  yamt   vec_int4 *p = (vec_int4 *)((unsigned char *)(c) + b);
   3785  1.1.1.1.4.2  yamt 
   3786  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3787  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3788  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3789  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned int)0xFFFFFFFF), shift));
   3790  1.1.1.1.4.2  yamt }
   3791  1.1.1.1.4.2  yamt 
   3792  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_float4 a, int b, float *c)
   3793  1.1.1.1.4.2  yamt {
   3794  1.1.1.1.4.2  yamt   int shift;
   3795  1.1.1.1.4.2  yamt   vec_float4 *p = (vec_float4 *)((unsigned char *)(c) + b);
   3796  1.1.1.1.4.2  yamt 
   3797  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3798  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3799  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3800  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned int)0xFFFFFFFF), shift));
   3801  1.1.1.1.4.2  yamt }
   3802  1.1.1.1.4.2  yamt 
   3803  1.1.1.1.4.2  yamt static inline void vec_stvlx(vec_float4 a, int b, vec_float4 *c)
   3804  1.1.1.1.4.2  yamt {
   3805  1.1.1.1.4.2  yamt   int shift;
   3806  1.1.1.1.4.2  yamt   vec_float4 *p = (vec_float4 *)((unsigned char *)(c) + b);
   3807  1.1.1.1.4.2  yamt 
   3808  1.1.1.1.4.2  yamt   shift = -((int)p & 0xF);
   3809  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3810  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(a, shift),
   3811  1.1.1.1.4.2  yamt 	       spu_rlmaskqwbyte(spu_splats((unsigned int)0xFFFFFFFF), shift));
   3812  1.1.1.1.4.2  yamt }
   3813  1.1.1.1.4.2  yamt 
   3814  1.1.1.1.4.2  yamt /* vec_stvlxl (store vector left indexed last)
   3815  1.1.1.1.4.2  yamt  * ==========
   3816  1.1.1.1.4.2  yamt  */
   3817  1.1.1.1.4.2  yamt #define vec_stvlxl(_a, _b, _c)	vec_stvlx(_a, _b, _c)
   3818  1.1.1.1.4.2  yamt 
   3819  1.1.1.1.4.2  yamt 
   3820  1.1.1.1.4.2  yamt /* vec_stvrx (store vector right indexed)
   3821  1.1.1.1.4.2  yamt  * =========
   3822  1.1.1.1.4.2  yamt  */
   3823  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_uchar16 a, int b, unsigned char *c)
   3824  1.1.1.1.4.2  yamt {
   3825  1.1.1.1.4.2  yamt   int shift;
   3826  1.1.1.1.4.2  yamt   vec_uchar16 *p = (vec_uchar16 *)((unsigned char *)(c) + b);
   3827  1.1.1.1.4.2  yamt 
   3828  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3829  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3830  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3831  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned char)0xFF), shift));
   3832  1.1.1.1.4.2  yamt }
   3833  1.1.1.1.4.2  yamt 
   3834  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_uchar16 a, int b, vec_uchar16 *c)
   3835  1.1.1.1.4.2  yamt {
   3836  1.1.1.1.4.2  yamt   int shift;
   3837  1.1.1.1.4.2  yamt   vec_uchar16 *p = (vec_uchar16 *)((unsigned char *)(c) + b);
   3838  1.1.1.1.4.2  yamt 
   3839  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3840  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3841  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3842  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned char)0xFF), shift));
   3843  1.1.1.1.4.2  yamt }
   3844  1.1.1.1.4.2  yamt 
   3845  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_char16 a, int b, signed char *c)
   3846  1.1.1.1.4.2  yamt {
   3847  1.1.1.1.4.2  yamt   int shift;
   3848  1.1.1.1.4.2  yamt   vec_char16 *p = (vec_char16 *)((unsigned char *)(c) + b);
   3849  1.1.1.1.4.2  yamt 
   3850  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3851  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3852  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3853  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned char)0xFF), shift));
   3854  1.1.1.1.4.2  yamt }
   3855  1.1.1.1.4.2  yamt 
   3856  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_char16 a, int b, vec_char16 *c)
   3857  1.1.1.1.4.2  yamt {
   3858  1.1.1.1.4.2  yamt   int shift;
   3859  1.1.1.1.4.2  yamt   vec_char16 *p = (vec_char16 *)((unsigned char *)(c) + b);
   3860  1.1.1.1.4.2  yamt 
   3861  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3862  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3863  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3864  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned char)0xFF), shift));
   3865  1.1.1.1.4.2  yamt }
   3866  1.1.1.1.4.2  yamt 
   3867  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_ushort8 a, int b, unsigned short *c)
   3868  1.1.1.1.4.2  yamt {
   3869  1.1.1.1.4.2  yamt   int shift;
   3870  1.1.1.1.4.2  yamt   vec_ushort8 *p = (vec_ushort8 *)((unsigned char *)(c) + b);
   3871  1.1.1.1.4.2  yamt 
   3872  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3873  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3874  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3875  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned short)0xFFFF), shift));
   3876  1.1.1.1.4.2  yamt }
   3877  1.1.1.1.4.2  yamt 
   3878  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_ushort8 a, int b, vec_ushort8 *c)
   3879  1.1.1.1.4.2  yamt {
   3880  1.1.1.1.4.2  yamt   int shift;
   3881  1.1.1.1.4.2  yamt   vec_ushort8 *p = (vec_ushort8 *)((unsigned char *)(c) + b);
   3882  1.1.1.1.4.2  yamt 
   3883  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3884  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3885  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3886  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned short)0xFFFF), shift));
   3887  1.1.1.1.4.2  yamt }
   3888  1.1.1.1.4.2  yamt 
   3889  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_short8 a, int b, signed short *c)
   3890  1.1.1.1.4.2  yamt {
   3891  1.1.1.1.4.2  yamt   int shift;
   3892  1.1.1.1.4.2  yamt   vec_short8 *p = (vec_short8 *)((unsigned char *)(c) + b);
   3893  1.1.1.1.4.2  yamt 
   3894  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3895  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3896  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3897  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned short)0xFFFF), shift));
   3898  1.1.1.1.4.2  yamt }
   3899  1.1.1.1.4.2  yamt 
   3900  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_short8 a, int b, vec_short8 *c)
   3901  1.1.1.1.4.2  yamt {
   3902  1.1.1.1.4.2  yamt   int shift;
   3903  1.1.1.1.4.2  yamt   vec_short8 *p = (vec_short8 *)((unsigned char *)(c) + b);
   3904  1.1.1.1.4.2  yamt 
   3905  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3906  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3907  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3908  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned short)0xFFFF), shift));
   3909  1.1.1.1.4.2  yamt }
   3910  1.1.1.1.4.2  yamt 
   3911  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_uint4 a, int b, unsigned int *c)
   3912  1.1.1.1.4.2  yamt {
   3913  1.1.1.1.4.2  yamt   int shift;
   3914  1.1.1.1.4.2  yamt   vec_uint4 *p = (vec_uint4 *)((unsigned char *)(c) + b);
   3915  1.1.1.1.4.2  yamt 
   3916  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3917  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3918  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3919  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned int)0xFFFFFFFF), shift));
   3920  1.1.1.1.4.2  yamt }
   3921  1.1.1.1.4.2  yamt 
   3922  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_uint4 a, int b, vec_uint4 *c)
   3923  1.1.1.1.4.2  yamt {
   3924  1.1.1.1.4.2  yamt   int shift;
   3925  1.1.1.1.4.2  yamt   vec_uint4 *p = (vec_uint4 *)((unsigned char *)(c) + b);
   3926  1.1.1.1.4.2  yamt 
   3927  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3928  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3929  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3930  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned int)0xFFFFFFFF), shift));
   3931  1.1.1.1.4.2  yamt }
   3932  1.1.1.1.4.2  yamt 
   3933  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_int4 a, int b, signed int *c)
   3934  1.1.1.1.4.2  yamt {
   3935  1.1.1.1.4.2  yamt   int shift;
   3936  1.1.1.1.4.2  yamt   vec_int4 *p = (vec_int4 *)((unsigned char *)(c) + b);
   3937  1.1.1.1.4.2  yamt 
   3938  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3939  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3940  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3941  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned int)0xFFFFFFFF), shift));
   3942  1.1.1.1.4.2  yamt }
   3943  1.1.1.1.4.2  yamt 
   3944  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_int4 a, int b, vec_int4 *c)
   3945  1.1.1.1.4.2  yamt {
   3946  1.1.1.1.4.2  yamt   int shift;
   3947  1.1.1.1.4.2  yamt   vec_int4 *p = (vec_int4 *)((unsigned char *)(c) + b);
   3948  1.1.1.1.4.2  yamt 
   3949  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3950  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3951  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3952  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned int)0xFFFFFFFF), shift));
   3953  1.1.1.1.4.2  yamt }
   3954  1.1.1.1.4.2  yamt 
   3955  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_float4 a, int b, float *c)
   3956  1.1.1.1.4.2  yamt {
   3957  1.1.1.1.4.2  yamt   int shift;
   3958  1.1.1.1.4.2  yamt   vec_float4 *p = (vec_float4 *)((unsigned char *)(c) + b);
   3959  1.1.1.1.4.2  yamt 
   3960  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3961  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3962  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3963  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned int)0xFFFFFFFF), shift));
   3964  1.1.1.1.4.2  yamt }
   3965  1.1.1.1.4.2  yamt 
   3966  1.1.1.1.4.2  yamt static inline void vec_stvrx(vec_float4 a, int b, vec_float4 *c)
   3967  1.1.1.1.4.2  yamt {
   3968  1.1.1.1.4.2  yamt   int shift;
   3969  1.1.1.1.4.2  yamt   vec_float4 *p = (vec_float4 *)((unsigned char *)(c) + b);
   3970  1.1.1.1.4.2  yamt 
   3971  1.1.1.1.4.2  yamt   shift = 16-((int)p & 0xF);
   3972  1.1.1.1.4.2  yamt   *p = spu_sel(*p,
   3973  1.1.1.1.4.2  yamt 	       spu_slqwbyte(a, shift),
   3974  1.1.1.1.4.2  yamt 	       spu_slqwbyte(spu_splats((unsigned int)0xFFFFFFFF), shift));
   3975  1.1.1.1.4.2  yamt }
   3976  1.1.1.1.4.2  yamt 
   3977  1.1.1.1.4.2  yamt /* vec_stvrxl (store vector right indexed last)
   3978  1.1.1.1.4.2  yamt  * ==========
   3979  1.1.1.1.4.2  yamt  */
   3980  1.1.1.1.4.2  yamt #define vec_stvrxl(_a, _b, _c)	vec_stvrx(_a, _b, _c)
   3981  1.1.1.1.4.2  yamt 
   3982  1.1.1.1.4.2  yamt 
   3983  1.1.1.1.4.2  yamt #endif /* __SPU__ */
   3984  1.1.1.1.4.2  yamt #endif /* __cplusplus */
   3985  1.1.1.1.4.2  yamt #endif /* !_VMX2SPU_H_ */
   3986