spu2vmx.h revision 1.1.1.1.8.2 1 1.1.1.1.8.2 tls /* Cell SPU 2 VMX intrinsics header
2 1.1.1.1.8.2 tls Copyright (C) 2007, 2009 Free Software Foundation, Inc.
3 1.1.1.1.8.2 tls
4 1.1.1.1.8.2 tls This file is free software; you can redistribute it and/or modify it under
5 1.1.1.1.8.2 tls the terms of the GNU General Public License as published by the Free
6 1.1.1.1.8.2 tls Software Foundation; either version 3 of the License, or (at your option)
7 1.1.1.1.8.2 tls any later version.
8 1.1.1.1.8.2 tls
9 1.1.1.1.8.2 tls This file is distributed in the hope that it will be useful, but WITHOUT
10 1.1.1.1.8.2 tls ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 1.1.1.1.8.2 tls FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 1.1.1.1.8.2 tls for more details.
13 1.1.1.1.8.2 tls
14 1.1.1.1.8.2 tls Under Section 7 of GPL version 3, you are granted additional
15 1.1.1.1.8.2 tls permissions described in the GCC Runtime Library Exception, version
16 1.1.1.1.8.2 tls 3.1, as published by the Free Software Foundation.
17 1.1.1.1.8.2 tls
18 1.1.1.1.8.2 tls You should have received a copy of the GNU General Public License and
19 1.1.1.1.8.2 tls a copy of the GCC Runtime Library Exception along with this program;
20 1.1.1.1.8.2 tls see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
21 1.1.1.1.8.2 tls <http://www.gnu.org/licenses/>. */
22 1.1.1.1.8.2 tls
23 1.1.1.1.8.2 tls #ifndef _SPU2VMX_H_
24 1.1.1.1.8.2 tls #define _SPU2VMX_H_ 1
25 1.1.1.1.8.2 tls
26 1.1.1.1.8.2 tls #ifdef __cplusplus
27 1.1.1.1.8.2 tls
28 1.1.1.1.8.2 tls #ifndef __SPU__
29 1.1.1.1.8.2 tls
30 1.1.1.1.8.2 tls #include <si2vmx.h>
31 1.1.1.1.8.2 tls
32 1.1.1.1.8.2 tls /* spu_absd (absolute difference)
33 1.1.1.1.8.2 tls * ========
34 1.1.1.1.8.2 tls */
35 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_absd(vec_uchar16 a, vec_uchar16 b)
36 1.1.1.1.8.2 tls {
37 1.1.1.1.8.2 tls return ((vec_uchar16)(si_absdb((qword)(a), (qword)(b))));
38 1.1.1.1.8.2 tls
39 1.1.1.1.8.2 tls }
40 1.1.1.1.8.2 tls
41 1.1.1.1.8.2 tls
42 1.1.1.1.8.2 tls /* spu_add
43 1.1.1.1.8.2 tls * =======
44 1.1.1.1.8.2 tls */
45 1.1.1.1.8.2 tls static __inline vec_uint4 spu_add(vec_uint4 a, vec_uint4 b)
46 1.1.1.1.8.2 tls {
47 1.1.1.1.8.2 tls return ((vec_uint4)(si_a((qword)(a), (qword)(b))));
48 1.1.1.1.8.2 tls }
49 1.1.1.1.8.2 tls
50 1.1.1.1.8.2 tls static __inline vec_int4 spu_add(vec_int4 a, vec_int4 b)
51 1.1.1.1.8.2 tls {
52 1.1.1.1.8.2 tls return ((vec_int4)(si_a((qword)(a), (qword)(b))));
53 1.1.1.1.8.2 tls }
54 1.1.1.1.8.2 tls
55 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_add(vec_ushort8 a, vec_ushort8 b)
56 1.1.1.1.8.2 tls {
57 1.1.1.1.8.2 tls return ((vec_ushort8)(si_ah((qword)(a), (qword)(b))));
58 1.1.1.1.8.2 tls }
59 1.1.1.1.8.2 tls
60 1.1.1.1.8.2 tls static __inline vec_short8 spu_add(vec_short8 a, vec_short8 b)
61 1.1.1.1.8.2 tls {
62 1.1.1.1.8.2 tls return ((vec_short8)(si_ah((qword)(a), (qword)(b))));
63 1.1.1.1.8.2 tls }
64 1.1.1.1.8.2 tls
65 1.1.1.1.8.2 tls static __inline vec_uint4 spu_add(vec_uint4 a, unsigned int b)
66 1.1.1.1.8.2 tls {
67 1.1.1.1.8.2 tls return ((vec_uint4)(si_ai((qword)(a), (int)(b))));
68 1.1.1.1.8.2 tls }
69 1.1.1.1.8.2 tls
70 1.1.1.1.8.2 tls static __inline vec_int4 spu_add(vec_int4 a, int b)
71 1.1.1.1.8.2 tls {
72 1.1.1.1.8.2 tls return ((vec_int4)(si_ai((qword)(a), b)));
73 1.1.1.1.8.2 tls }
74 1.1.1.1.8.2 tls
75 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_add(vec_ushort8 a, unsigned short b)
76 1.1.1.1.8.2 tls {
77 1.1.1.1.8.2 tls return ((vec_ushort8)(si_ahi((qword)(a), (short)(b))));
78 1.1.1.1.8.2 tls }
79 1.1.1.1.8.2 tls
80 1.1.1.1.8.2 tls static __inline vec_short8 spu_add(vec_short8 a, short b)
81 1.1.1.1.8.2 tls {
82 1.1.1.1.8.2 tls return ((vec_short8)(si_ahi((qword)(a), b)));
83 1.1.1.1.8.2 tls }
84 1.1.1.1.8.2 tls
85 1.1.1.1.8.2 tls static __inline vec_float4 spu_add(vec_float4 a, vec_float4 b)
86 1.1.1.1.8.2 tls {
87 1.1.1.1.8.2 tls return ((vec_float4)(si_fa((qword)(a), (qword)(b))));
88 1.1.1.1.8.2 tls }
89 1.1.1.1.8.2 tls
90 1.1.1.1.8.2 tls static __inline vec_double2 spu_add(vec_double2 a, vec_double2 b)
91 1.1.1.1.8.2 tls {
92 1.1.1.1.8.2 tls return ((vec_double2)(si_dfa((qword)(a), (qword)(b))));
93 1.1.1.1.8.2 tls }
94 1.1.1.1.8.2 tls
95 1.1.1.1.8.2 tls
96 1.1.1.1.8.2 tls /* spu_addx
97 1.1.1.1.8.2 tls * ========
98 1.1.1.1.8.2 tls */
99 1.1.1.1.8.2 tls static __inline vec_uint4 spu_addx(vec_uint4 a, vec_uint4 b, vec_uint4 c)
100 1.1.1.1.8.2 tls {
101 1.1.1.1.8.2 tls return ((vec_uint4)(si_addx((qword)(a), (qword)(b), (qword)(c))));
102 1.1.1.1.8.2 tls }
103 1.1.1.1.8.2 tls
104 1.1.1.1.8.2 tls static __inline vec_int4 spu_addx(vec_int4 a, vec_int4 b, vec_int4 c)
105 1.1.1.1.8.2 tls {
106 1.1.1.1.8.2 tls return ((vec_int4)(si_addx((qword)(a), (qword)(b), (qword)(c))));
107 1.1.1.1.8.2 tls }
108 1.1.1.1.8.2 tls
109 1.1.1.1.8.2 tls
110 1.1.1.1.8.2 tls /* spu_and
111 1.1.1.1.8.2 tls * =======
112 1.1.1.1.8.2 tls */
113 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_and(vec_uchar16 a, vec_uchar16 b)
114 1.1.1.1.8.2 tls {
115 1.1.1.1.8.2 tls return ((vec_uchar16)(si_and((qword)(a), (qword)(b))));
116 1.1.1.1.8.2 tls }
117 1.1.1.1.8.2 tls
118 1.1.1.1.8.2 tls static __inline vec_char16 spu_and(vec_char16 a, vec_char16 b)
119 1.1.1.1.8.2 tls {
120 1.1.1.1.8.2 tls return ((vec_char16)(si_and((qword)(a), (qword)(b))));
121 1.1.1.1.8.2 tls }
122 1.1.1.1.8.2 tls
123 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_and(vec_ushort8 a, vec_ushort8 b)
124 1.1.1.1.8.2 tls {
125 1.1.1.1.8.2 tls return ((vec_ushort8)(si_and((qword)(a), (qword)(b))));
126 1.1.1.1.8.2 tls }
127 1.1.1.1.8.2 tls
128 1.1.1.1.8.2 tls static __inline vec_short8 spu_and(vec_short8 a, vec_short8 b)
129 1.1.1.1.8.2 tls {
130 1.1.1.1.8.2 tls return ((vec_short8)(si_and((qword)(a), (qword)(b))));
131 1.1.1.1.8.2 tls }
132 1.1.1.1.8.2 tls
133 1.1.1.1.8.2 tls static __inline vec_uint4 spu_and(vec_uint4 a, vec_uint4 b)
134 1.1.1.1.8.2 tls {
135 1.1.1.1.8.2 tls return ((vec_uint4)(si_and((qword)(a), (qword)(b))));
136 1.1.1.1.8.2 tls }
137 1.1.1.1.8.2 tls
138 1.1.1.1.8.2 tls static __inline vec_int4 spu_and(vec_int4 a, vec_int4 b)
139 1.1.1.1.8.2 tls {
140 1.1.1.1.8.2 tls return ((vec_int4)(si_and((qword)(a), (qword)(b))));
141 1.1.1.1.8.2 tls }
142 1.1.1.1.8.2 tls
143 1.1.1.1.8.2 tls static __inline vec_float4 spu_and(vec_float4 a, vec_float4 b)
144 1.1.1.1.8.2 tls {
145 1.1.1.1.8.2 tls return ((vec_float4)(si_and((qword)(a), (qword)(b))));
146 1.1.1.1.8.2 tls }
147 1.1.1.1.8.2 tls
148 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_and(vec_ullong2 a, vec_ullong2 b)
149 1.1.1.1.8.2 tls {
150 1.1.1.1.8.2 tls return ((vec_ullong2)(si_and((qword)(a), (qword)(b))));
151 1.1.1.1.8.2 tls }
152 1.1.1.1.8.2 tls
153 1.1.1.1.8.2 tls static __inline vec_llong2 spu_and(vec_llong2 a, vec_llong2 b)
154 1.1.1.1.8.2 tls {
155 1.1.1.1.8.2 tls return ((vec_llong2)(si_and((qword)(a), (qword)(b))));
156 1.1.1.1.8.2 tls }
157 1.1.1.1.8.2 tls
158 1.1.1.1.8.2 tls static __inline vec_double2 spu_and(vec_double2 a, vec_double2 b)
159 1.1.1.1.8.2 tls {
160 1.1.1.1.8.2 tls return ((vec_double2)(si_and((qword)(a), (qword)(b))));
161 1.1.1.1.8.2 tls }
162 1.1.1.1.8.2 tls
163 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_and(vec_uchar16 a, unsigned char b)
164 1.1.1.1.8.2 tls {
165 1.1.1.1.8.2 tls return ((vec_uchar16)(si_andbi((qword)(a), (signed char)(b))));
166 1.1.1.1.8.2 tls }
167 1.1.1.1.8.2 tls
168 1.1.1.1.8.2 tls
169 1.1.1.1.8.2 tls static __inline vec_char16 spu_and(vec_char16 a, signed char b)
170 1.1.1.1.8.2 tls {
171 1.1.1.1.8.2 tls return ((vec_char16)(si_andbi((qword)(a), b)));
172 1.1.1.1.8.2 tls }
173 1.1.1.1.8.2 tls
174 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_and(vec_ushort8 a, unsigned short b)
175 1.1.1.1.8.2 tls {
176 1.1.1.1.8.2 tls return ((vec_ushort8)(si_andhi((qword)(a), (signed short)(b))));
177 1.1.1.1.8.2 tls }
178 1.1.1.1.8.2 tls
179 1.1.1.1.8.2 tls static __inline vec_short8 spu_and(vec_short8 a, signed short b)
180 1.1.1.1.8.2 tls {
181 1.1.1.1.8.2 tls return ((vec_short8)(si_andhi((qword)(a), b)));
182 1.1.1.1.8.2 tls }
183 1.1.1.1.8.2 tls
184 1.1.1.1.8.2 tls static __inline vec_uint4 spu_and(vec_uint4 a, unsigned int b)
185 1.1.1.1.8.2 tls {
186 1.1.1.1.8.2 tls return ((vec_uint4)(si_andi((qword)(a), (signed int)(b))));
187 1.1.1.1.8.2 tls }
188 1.1.1.1.8.2 tls
189 1.1.1.1.8.2 tls static __inline vec_int4 spu_and(vec_int4 a, signed int b)
190 1.1.1.1.8.2 tls {
191 1.1.1.1.8.2 tls return ((vec_int4)(si_andi((qword)(a), b)));
192 1.1.1.1.8.2 tls }
193 1.1.1.1.8.2 tls
194 1.1.1.1.8.2 tls
195 1.1.1.1.8.2 tls /* spu_andc
196 1.1.1.1.8.2 tls * ========
197 1.1.1.1.8.2 tls */
198 1.1.1.1.8.2 tls #define spu_andc(_a, _b) vec_andc(_a, _b)
199 1.1.1.1.8.2 tls
200 1.1.1.1.8.2 tls
201 1.1.1.1.8.2 tls /* spu_avg
202 1.1.1.1.8.2 tls * =======
203 1.1.1.1.8.2 tls */
204 1.1.1.1.8.2 tls #define spu_avg(_a, _b) vec_avg(_a, _b)
205 1.1.1.1.8.2 tls
206 1.1.1.1.8.2 tls
207 1.1.1.1.8.2 tls /* spu_bisled
208 1.1.1.1.8.2 tls * spu_bisled_d
209 1.1.1.1.8.2 tls * spu_bisled_e
210 1.1.1.1.8.2 tls * ============
211 1.1.1.1.8.2 tls */
212 1.1.1.1.8.2 tls #define spu_bisled(_func) /* not mappable */
213 1.1.1.1.8.2 tls #define spu_bisled_d(_func) /* not mappable */
214 1.1.1.1.8.2 tls #define spu_bisled_e(_func) /* not mappable */
215 1.1.1.1.8.2 tls
216 1.1.1.1.8.2 tls /* spu_cmpabseq
217 1.1.1.1.8.2 tls * ============
218 1.1.1.1.8.2 tls */
219 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cmpabseq(vec_float4 a, vec_float4 b)
220 1.1.1.1.8.2 tls {
221 1.1.1.1.8.2 tls return ((vec_uint4)(si_fcmeq((qword)(a), (qword)(b))));
222 1.1.1.1.8.2 tls
223 1.1.1.1.8.2 tls }
224 1.1.1.1.8.2 tls
225 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_cmpabseq(vec_double2 a, vec_double2 b)
226 1.1.1.1.8.2 tls {
227 1.1.1.1.8.2 tls return ((vec_ullong2)(si_dfcmeq((qword)(a), (qword)(b))));
228 1.1.1.1.8.2 tls }
229 1.1.1.1.8.2 tls
230 1.1.1.1.8.2 tls
231 1.1.1.1.8.2 tls /* spu_cmpabsgt
232 1.1.1.1.8.2 tls * ============
233 1.1.1.1.8.2 tls */
234 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cmpabsgt(vec_float4 a, vec_float4 b)
235 1.1.1.1.8.2 tls {
236 1.1.1.1.8.2 tls return ((vec_uint4)(si_fcmgt((qword)(a), (qword)(b))));
237 1.1.1.1.8.2 tls }
238 1.1.1.1.8.2 tls
239 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_cmpabsgt(vec_double2 a, vec_double2 b)
240 1.1.1.1.8.2 tls {
241 1.1.1.1.8.2 tls return ((vec_ullong2)(si_dfcmgt((qword)(a), (qword)(b))));
242 1.1.1.1.8.2 tls }
243 1.1.1.1.8.2 tls
244 1.1.1.1.8.2 tls
245 1.1.1.1.8.2 tls /* spu_cmpeq
246 1.1.1.1.8.2 tls * ========
247 1.1.1.1.8.2 tls */
248 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_cmpeq(vec_uchar16 a, vec_uchar16 b)
249 1.1.1.1.8.2 tls {
250 1.1.1.1.8.2 tls return ((vec_uchar16)(si_ceqb((qword)(a), (qword)(b))));
251 1.1.1.1.8.2 tls }
252 1.1.1.1.8.2 tls
253 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_cmpeq(vec_char16 a, vec_char16 b)
254 1.1.1.1.8.2 tls {
255 1.1.1.1.8.2 tls return ((vec_uchar16)(si_ceqb((qword)(a), (qword)(b))));
256 1.1.1.1.8.2 tls }
257 1.1.1.1.8.2 tls
258 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_cmpeq(vec_ushort8 a, vec_ushort8 b)
259 1.1.1.1.8.2 tls {
260 1.1.1.1.8.2 tls return ((vec_ushort8)(si_ceqh((qword)(a), (qword)(b))));
261 1.1.1.1.8.2 tls }
262 1.1.1.1.8.2 tls
263 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_cmpeq(vec_short8 a, vec_short8 b)
264 1.1.1.1.8.2 tls {
265 1.1.1.1.8.2 tls return ((vec_ushort8)(si_ceqh((qword)(a), (qword)(b))));
266 1.1.1.1.8.2 tls }
267 1.1.1.1.8.2 tls
268 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cmpeq(vec_uint4 a, vec_uint4 b)
269 1.1.1.1.8.2 tls {
270 1.1.1.1.8.2 tls return ((vec_uint4)(si_ceq((qword)(a), (qword)(b))));
271 1.1.1.1.8.2 tls }
272 1.1.1.1.8.2 tls
273 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cmpeq(vec_int4 a, vec_int4 b)
274 1.1.1.1.8.2 tls {
275 1.1.1.1.8.2 tls return ((vec_uint4)(si_ceq((qword)(a), (qword)(b))));
276 1.1.1.1.8.2 tls }
277 1.1.1.1.8.2 tls
278 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cmpeq(vec_float4 a, vec_float4 b)
279 1.1.1.1.8.2 tls {
280 1.1.1.1.8.2 tls return ((vec_uint4)(si_fceq((qword)(a), (qword)(b))));
281 1.1.1.1.8.2 tls }
282 1.1.1.1.8.2 tls
283 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_cmpeq(vec_uchar16 a, unsigned char b)
284 1.1.1.1.8.2 tls {
285 1.1.1.1.8.2 tls return ((vec_uchar16)(si_ceqbi((qword)(a), (signed char)(b))));
286 1.1.1.1.8.2 tls }
287 1.1.1.1.8.2 tls
288 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_cmpeq(vec_char16 a, signed char b)
289 1.1.1.1.8.2 tls {
290 1.1.1.1.8.2 tls return ((vec_uchar16)(si_ceqbi((qword)(a), b)));
291 1.1.1.1.8.2 tls }
292 1.1.1.1.8.2 tls
293 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_cmpeq(vec_ushort8 a, unsigned short b)
294 1.1.1.1.8.2 tls {
295 1.1.1.1.8.2 tls return ((vec_ushort8)(si_ceqhi((qword)(a), (signed short)(b))));
296 1.1.1.1.8.2 tls }
297 1.1.1.1.8.2 tls
298 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_cmpeq(vec_short8 a, signed short b)
299 1.1.1.1.8.2 tls {
300 1.1.1.1.8.2 tls return ((vec_ushort8)(si_ceqhi((qword)(a), b)));
301 1.1.1.1.8.2 tls }
302 1.1.1.1.8.2 tls
303 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cmpeq(vec_uint4 a, unsigned int b)
304 1.1.1.1.8.2 tls {
305 1.1.1.1.8.2 tls return ((vec_uint4)(si_ceqi((qword)(a), (signed int)(b))));
306 1.1.1.1.8.2 tls }
307 1.1.1.1.8.2 tls
308 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cmpeq(vec_int4 a, signed int b)
309 1.1.1.1.8.2 tls {
310 1.1.1.1.8.2 tls return ((vec_uint4)(si_ceqi((qword)(a), b)));
311 1.1.1.1.8.2 tls }
312 1.1.1.1.8.2 tls
313 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_cmpeq(vec_double2 a, vec_double2 b)
314 1.1.1.1.8.2 tls {
315 1.1.1.1.8.2 tls return ((vec_ullong2)(si_dfceq((qword)(a), (qword)(b))));
316 1.1.1.1.8.2 tls }
317 1.1.1.1.8.2 tls
318 1.1.1.1.8.2 tls
319 1.1.1.1.8.2 tls /* spu_cmpgt
320 1.1.1.1.8.2 tls * ========
321 1.1.1.1.8.2 tls */
322 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_cmpgt(vec_uchar16 a, vec_uchar16 b)
323 1.1.1.1.8.2 tls {
324 1.1.1.1.8.2 tls return ((vec_uchar16)(si_clgtb((qword)(a), (qword)(b))));
325 1.1.1.1.8.2 tls }
326 1.1.1.1.8.2 tls
327 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_cmpgt(vec_char16 a, vec_char16 b)
328 1.1.1.1.8.2 tls {
329 1.1.1.1.8.2 tls return ((vec_uchar16)(si_cgtb((qword)(a), (qword)(b))));
330 1.1.1.1.8.2 tls }
331 1.1.1.1.8.2 tls
332 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_cmpgt(vec_ushort8 a, vec_ushort8 b)
333 1.1.1.1.8.2 tls {
334 1.1.1.1.8.2 tls return ((vec_ushort8)(si_clgth((qword)(a), (qword)(b))));
335 1.1.1.1.8.2 tls }
336 1.1.1.1.8.2 tls
337 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_cmpgt(vec_short8 a, vec_short8 b)
338 1.1.1.1.8.2 tls {
339 1.1.1.1.8.2 tls return ((vec_ushort8)(si_cgth((qword)(a), (qword)(b))));
340 1.1.1.1.8.2 tls }
341 1.1.1.1.8.2 tls
342 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cmpgt(vec_uint4 a, vec_uint4 b)
343 1.1.1.1.8.2 tls {
344 1.1.1.1.8.2 tls return ((vec_uint4)(si_clgt((qword)(a), (qword)(b))));
345 1.1.1.1.8.2 tls }
346 1.1.1.1.8.2 tls
347 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cmpgt(vec_int4 a, vec_int4 b)
348 1.1.1.1.8.2 tls {
349 1.1.1.1.8.2 tls return ((vec_uint4)(si_cgt((qword)(a), (qword)(b))));
350 1.1.1.1.8.2 tls }
351 1.1.1.1.8.2 tls
352 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cmpgt(vec_float4 a, vec_float4 b)
353 1.1.1.1.8.2 tls {
354 1.1.1.1.8.2 tls return ((vec_uint4)(si_fcgt((qword)(a), (qword)(b))));
355 1.1.1.1.8.2 tls }
356 1.1.1.1.8.2 tls
357 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_cmpgt(vec_uchar16 a, unsigned char b)
358 1.1.1.1.8.2 tls {
359 1.1.1.1.8.2 tls return ((vec_uchar16)(si_clgtbi((qword)(a), b)));
360 1.1.1.1.8.2 tls }
361 1.1.1.1.8.2 tls
362 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_cmpgt(vec_char16 a, signed char b)
363 1.1.1.1.8.2 tls {
364 1.1.1.1.8.2 tls return ((vec_uchar16)(si_cgtbi((qword)(a), b)));
365 1.1.1.1.8.2 tls }
366 1.1.1.1.8.2 tls
367 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_cmpgt(vec_ushort8 a, unsigned short b)
368 1.1.1.1.8.2 tls {
369 1.1.1.1.8.2 tls return ((vec_ushort8)(si_clgthi((qword)(a), b)));
370 1.1.1.1.8.2 tls }
371 1.1.1.1.8.2 tls
372 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_cmpgt(vec_short8 a, signed short b)
373 1.1.1.1.8.2 tls {
374 1.1.1.1.8.2 tls return ((vec_ushort8)(si_cgthi((qword)(a), b)));
375 1.1.1.1.8.2 tls }
376 1.1.1.1.8.2 tls
377 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cmpgt(vec_uint4 a, unsigned int b)
378 1.1.1.1.8.2 tls {
379 1.1.1.1.8.2 tls return ((vec_uint4)(si_clgti((qword)(a), b)));
380 1.1.1.1.8.2 tls }
381 1.1.1.1.8.2 tls
382 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cmpgt(vec_int4 a, signed int b)
383 1.1.1.1.8.2 tls {
384 1.1.1.1.8.2 tls return ((vec_uint4)(si_cgti((qword)(a), b)));
385 1.1.1.1.8.2 tls }
386 1.1.1.1.8.2 tls
387 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_cmpgt(vec_double2 a, vec_double2 b)
388 1.1.1.1.8.2 tls {
389 1.1.1.1.8.2 tls return ((vec_ullong2)(si_dfcgt((qword)(a), (qword)(b))));
390 1.1.1.1.8.2 tls }
391 1.1.1.1.8.2 tls
392 1.1.1.1.8.2 tls
393 1.1.1.1.8.2 tls /* spu_cntb
394 1.1.1.1.8.2 tls * ========
395 1.1.1.1.8.2 tls */
396 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_cntb(vec_uchar16 a)
397 1.1.1.1.8.2 tls {
398 1.1.1.1.8.2 tls return ((vec_uchar16)(si_cntb((qword)(a))));
399 1.1.1.1.8.2 tls }
400 1.1.1.1.8.2 tls
401 1.1.1.1.8.2 tls
402 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_cntb(vec_char16 a)
403 1.1.1.1.8.2 tls {
404 1.1.1.1.8.2 tls return ((vec_uchar16)(si_cntb((qword)(a))));
405 1.1.1.1.8.2 tls }
406 1.1.1.1.8.2 tls
407 1.1.1.1.8.2 tls /* spu_cntlz
408 1.1.1.1.8.2 tls * =========
409 1.1.1.1.8.2 tls */
410 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cntlz(vec_uint4 a)
411 1.1.1.1.8.2 tls {
412 1.1.1.1.8.2 tls return ((vec_uint4)(si_clz((qword)(a))));
413 1.1.1.1.8.2 tls }
414 1.1.1.1.8.2 tls
415 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cntlz(vec_int4 a)
416 1.1.1.1.8.2 tls {
417 1.1.1.1.8.2 tls return ((vec_uint4)(si_clz((qword)(a))));
418 1.1.1.1.8.2 tls }
419 1.1.1.1.8.2 tls
420 1.1.1.1.8.2 tls static __inline vec_uint4 spu_cntlz(vec_float4 a)
421 1.1.1.1.8.2 tls {
422 1.1.1.1.8.2 tls return ((vec_uint4)(si_clz((qword)(a))));
423 1.1.1.1.8.2 tls }
424 1.1.1.1.8.2 tls
425 1.1.1.1.8.2 tls /* spu_testsv
426 1.1.1.1.8.2 tls * ==========
427 1.1.1.1.8.2 tls */
428 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_testsv(vec_double2 a, char b)
429 1.1.1.1.8.2 tls {
430 1.1.1.1.8.2 tls return ((vec_ullong2)(si_dftsv((qword)(a), b)));
431 1.1.1.1.8.2 tls }
432 1.1.1.1.8.2 tls
433 1.1.1.1.8.2 tls /* spu_convtf
434 1.1.1.1.8.2 tls * ==========
435 1.1.1.1.8.2 tls */
436 1.1.1.1.8.2 tls #define spu_convtf(_a, _b) (vec_ctf(_a, _b))
437 1.1.1.1.8.2 tls
438 1.1.1.1.8.2 tls /* spu_convts
439 1.1.1.1.8.2 tls * ==========
440 1.1.1.1.8.2 tls */
441 1.1.1.1.8.2 tls #define spu_convts(_a, _b) (vec_cts(_a, _b))
442 1.1.1.1.8.2 tls
443 1.1.1.1.8.2 tls /* spu_convtu
444 1.1.1.1.8.2 tls * ==========
445 1.1.1.1.8.2 tls */
446 1.1.1.1.8.2 tls #define spu_convtu(_a, _b) (vec_ctu(_a, _b))
447 1.1.1.1.8.2 tls
448 1.1.1.1.8.2 tls
449 1.1.1.1.8.2 tls /* spu_dsync
450 1.1.1.1.8.2 tls * ========
451 1.1.1.1.8.2 tls */
452 1.1.1.1.8.2 tls #define spu_dsync()
453 1.1.1.1.8.2 tls
454 1.1.1.1.8.2 tls /* spu_eqv
455 1.1.1.1.8.2 tls * =======
456 1.1.1.1.8.2 tls */
457 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_eqv(vec_uchar16 a, vec_uchar16 b)
458 1.1.1.1.8.2 tls {
459 1.1.1.1.8.2 tls return ((vec_uchar16)(si_eqv((qword)(a), (qword)(b))));
460 1.1.1.1.8.2 tls }
461 1.1.1.1.8.2 tls
462 1.1.1.1.8.2 tls static __inline vec_char16 spu_eqv(vec_char16 a, vec_char16 b)
463 1.1.1.1.8.2 tls {
464 1.1.1.1.8.2 tls return ((vec_char16)(si_eqv((qword)(a), (qword)(b))));
465 1.1.1.1.8.2 tls }
466 1.1.1.1.8.2 tls
467 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_eqv(vec_ushort8 a, vec_ushort8 b)
468 1.1.1.1.8.2 tls {
469 1.1.1.1.8.2 tls return ((vec_ushort8)(si_eqv((qword)(a), (qword)(b))));
470 1.1.1.1.8.2 tls }
471 1.1.1.1.8.2 tls
472 1.1.1.1.8.2 tls static __inline vec_short8 spu_eqv(vec_short8 a, vec_short8 b)
473 1.1.1.1.8.2 tls {
474 1.1.1.1.8.2 tls return ((vec_short8)(si_eqv((qword)(a), (qword)(b))));
475 1.1.1.1.8.2 tls }
476 1.1.1.1.8.2 tls
477 1.1.1.1.8.2 tls static __inline vec_uint4 spu_eqv(vec_uint4 a, vec_uint4 b)
478 1.1.1.1.8.2 tls {
479 1.1.1.1.8.2 tls return ((vec_uint4)(si_eqv((qword)(a), (qword)(b))));
480 1.1.1.1.8.2 tls }
481 1.1.1.1.8.2 tls
482 1.1.1.1.8.2 tls static __inline vec_int4 spu_eqv(vec_int4 a, vec_int4 b)
483 1.1.1.1.8.2 tls {
484 1.1.1.1.8.2 tls return ((vec_int4)(si_eqv((qword)(a), (qword)(b))));
485 1.1.1.1.8.2 tls }
486 1.1.1.1.8.2 tls
487 1.1.1.1.8.2 tls static __inline vec_float4 spu_eqv(vec_float4 a, vec_float4 b)
488 1.1.1.1.8.2 tls {
489 1.1.1.1.8.2 tls return ((vec_float4)(si_eqv((qword)(a), (qword)(b))));
490 1.1.1.1.8.2 tls }
491 1.1.1.1.8.2 tls
492 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_eqv(vec_ullong2 a, vec_ullong2 b)
493 1.1.1.1.8.2 tls {
494 1.1.1.1.8.2 tls return ((vec_ullong2)(si_eqv((qword)(a), (qword)(b))));
495 1.1.1.1.8.2 tls }
496 1.1.1.1.8.2 tls
497 1.1.1.1.8.2 tls static __inline vec_llong2 spu_eqv(vec_llong2 a, vec_llong2 b)
498 1.1.1.1.8.2 tls {
499 1.1.1.1.8.2 tls return ((vec_llong2)(si_eqv((qword)(a), (qword)(b))));
500 1.1.1.1.8.2 tls }
501 1.1.1.1.8.2 tls
502 1.1.1.1.8.2 tls static __inline vec_double2 spu_eqv(vec_double2 a, vec_double2 b)
503 1.1.1.1.8.2 tls {
504 1.1.1.1.8.2 tls return ((vec_double2)(si_eqv((qword)(a), (qword)(b))));
505 1.1.1.1.8.2 tls }
506 1.1.1.1.8.2 tls
507 1.1.1.1.8.2 tls /* spu_extend
508 1.1.1.1.8.2 tls * ========
509 1.1.1.1.8.2 tls */
510 1.1.1.1.8.2 tls static __inline vec_short8 spu_extend(vec_char16 a)
511 1.1.1.1.8.2 tls {
512 1.1.1.1.8.2 tls return ((vec_short8)(si_xsbh((qword)(a))));
513 1.1.1.1.8.2 tls }
514 1.1.1.1.8.2 tls
515 1.1.1.1.8.2 tls
516 1.1.1.1.8.2 tls static __inline vec_int4 spu_extend(vec_short8 a)
517 1.1.1.1.8.2 tls {
518 1.1.1.1.8.2 tls return ((vec_int4)(si_xshw((qword)(a))));
519 1.1.1.1.8.2 tls }
520 1.1.1.1.8.2 tls
521 1.1.1.1.8.2 tls static __inline vec_llong2 spu_extend(vec_int4 a)
522 1.1.1.1.8.2 tls {
523 1.1.1.1.8.2 tls return ((vec_llong2)(si_xswd((qword)(a))));
524 1.1.1.1.8.2 tls }
525 1.1.1.1.8.2 tls
526 1.1.1.1.8.2 tls
527 1.1.1.1.8.2 tls static __inline vec_double2 spu_extend(vec_float4 a)
528 1.1.1.1.8.2 tls {
529 1.1.1.1.8.2 tls return ((vec_double2)(si_fesd((qword)(a))));
530 1.1.1.1.8.2 tls }
531 1.1.1.1.8.2 tls
532 1.1.1.1.8.2 tls
533 1.1.1.1.8.2 tls /* spu_extract
534 1.1.1.1.8.2 tls * ========
535 1.1.1.1.8.2 tls */
536 1.1.1.1.8.2 tls static __inline unsigned char spu_extract(vec_uchar16 a, int element)
537 1.1.1.1.8.2 tls {
538 1.1.1.1.8.2 tls union {
539 1.1.1.1.8.2 tls vec_uchar16 v;
540 1.1.1.1.8.2 tls unsigned char c[16];
541 1.1.1.1.8.2 tls } in;
542 1.1.1.1.8.2 tls
543 1.1.1.1.8.2 tls in.v = a;
544 1.1.1.1.8.2 tls return (in.c[element & 15]);
545 1.1.1.1.8.2 tls }
546 1.1.1.1.8.2 tls
547 1.1.1.1.8.2 tls static __inline signed char spu_extract(vec_char16 a, int element)
548 1.1.1.1.8.2 tls {
549 1.1.1.1.8.2 tls union {
550 1.1.1.1.8.2 tls vec_char16 v;
551 1.1.1.1.8.2 tls signed char c[16];
552 1.1.1.1.8.2 tls } in;
553 1.1.1.1.8.2 tls
554 1.1.1.1.8.2 tls in.v = a;
555 1.1.1.1.8.2 tls return (in.c[element & 15]);
556 1.1.1.1.8.2 tls }
557 1.1.1.1.8.2 tls
558 1.1.1.1.8.2 tls static __inline unsigned short spu_extract(vec_ushort8 a, int element)
559 1.1.1.1.8.2 tls {
560 1.1.1.1.8.2 tls union {
561 1.1.1.1.8.2 tls vec_ushort8 v;
562 1.1.1.1.8.2 tls unsigned short s[8];
563 1.1.1.1.8.2 tls } in;
564 1.1.1.1.8.2 tls
565 1.1.1.1.8.2 tls in.v = a;
566 1.1.1.1.8.2 tls return (in.s[element & 7]);
567 1.1.1.1.8.2 tls }
568 1.1.1.1.8.2 tls
569 1.1.1.1.8.2 tls static __inline signed short spu_extract(vec_short8 a, int element)
570 1.1.1.1.8.2 tls {
571 1.1.1.1.8.2 tls union {
572 1.1.1.1.8.2 tls vec_short8 v;
573 1.1.1.1.8.2 tls signed short s[8];
574 1.1.1.1.8.2 tls } in;
575 1.1.1.1.8.2 tls
576 1.1.1.1.8.2 tls in.v = a;
577 1.1.1.1.8.2 tls return (in.s[element & 7]);
578 1.1.1.1.8.2 tls }
579 1.1.1.1.8.2 tls
580 1.1.1.1.8.2 tls static __inline unsigned int spu_extract(vec_uint4 a, int element)
581 1.1.1.1.8.2 tls {
582 1.1.1.1.8.2 tls union {
583 1.1.1.1.8.2 tls vec_uint4 v;
584 1.1.1.1.8.2 tls unsigned int i[4];
585 1.1.1.1.8.2 tls } in;
586 1.1.1.1.8.2 tls
587 1.1.1.1.8.2 tls in.v = a;
588 1.1.1.1.8.2 tls return (in.i[element & 3]);
589 1.1.1.1.8.2 tls }
590 1.1.1.1.8.2 tls
591 1.1.1.1.8.2 tls static __inline signed int spu_extract(vec_int4 a, int element)
592 1.1.1.1.8.2 tls {
593 1.1.1.1.8.2 tls union {
594 1.1.1.1.8.2 tls vec_int4 v;
595 1.1.1.1.8.2 tls signed int i[4];
596 1.1.1.1.8.2 tls } in;
597 1.1.1.1.8.2 tls
598 1.1.1.1.8.2 tls in.v = a;
599 1.1.1.1.8.2 tls return (in.i[element & 3]);
600 1.1.1.1.8.2 tls }
601 1.1.1.1.8.2 tls
602 1.1.1.1.8.2 tls static __inline float spu_extract(vec_float4 a, int element)
603 1.1.1.1.8.2 tls {
604 1.1.1.1.8.2 tls union {
605 1.1.1.1.8.2 tls vec_float4 v;
606 1.1.1.1.8.2 tls float f[4];
607 1.1.1.1.8.2 tls } in;
608 1.1.1.1.8.2 tls
609 1.1.1.1.8.2 tls in.v = a;
610 1.1.1.1.8.2 tls return (in.f[element & 3]);
611 1.1.1.1.8.2 tls }
612 1.1.1.1.8.2 tls
613 1.1.1.1.8.2 tls static __inline unsigned long long spu_extract(vec_ullong2 a, int element)
614 1.1.1.1.8.2 tls {
615 1.1.1.1.8.2 tls union {
616 1.1.1.1.8.2 tls vec_ullong2 v;
617 1.1.1.1.8.2 tls unsigned long long l[2];
618 1.1.1.1.8.2 tls } in;
619 1.1.1.1.8.2 tls
620 1.1.1.1.8.2 tls in.v = a;
621 1.1.1.1.8.2 tls return (in.l[element & 1]);
622 1.1.1.1.8.2 tls }
623 1.1.1.1.8.2 tls
624 1.1.1.1.8.2 tls static __inline signed long long spu_extract(vec_llong2 a, int element)
625 1.1.1.1.8.2 tls {
626 1.1.1.1.8.2 tls union {
627 1.1.1.1.8.2 tls vec_llong2 v;
628 1.1.1.1.8.2 tls signed long long l[2];
629 1.1.1.1.8.2 tls } in;
630 1.1.1.1.8.2 tls
631 1.1.1.1.8.2 tls in.v = a;
632 1.1.1.1.8.2 tls return (in.l[element & 1]);
633 1.1.1.1.8.2 tls }
634 1.1.1.1.8.2 tls
635 1.1.1.1.8.2 tls static __inline double spu_extract(vec_double2 a, int element)
636 1.1.1.1.8.2 tls {
637 1.1.1.1.8.2 tls union {
638 1.1.1.1.8.2 tls vec_double2 v;
639 1.1.1.1.8.2 tls double d[2];
640 1.1.1.1.8.2 tls } in;
641 1.1.1.1.8.2 tls
642 1.1.1.1.8.2 tls in.v = a;
643 1.1.1.1.8.2 tls return (in.d[element & 1]);
644 1.1.1.1.8.2 tls }
645 1.1.1.1.8.2 tls
646 1.1.1.1.8.2 tls /* spu_gather
647 1.1.1.1.8.2 tls * ========
648 1.1.1.1.8.2 tls */
649 1.1.1.1.8.2 tls static __inline vec_uint4 spu_gather(vec_uchar16 a)
650 1.1.1.1.8.2 tls {
651 1.1.1.1.8.2 tls return ((vec_uint4)(si_gbb((qword)(a))));
652 1.1.1.1.8.2 tls }
653 1.1.1.1.8.2 tls
654 1.1.1.1.8.2 tls
655 1.1.1.1.8.2 tls static __inline vec_uint4 spu_gather(vec_char16 a)
656 1.1.1.1.8.2 tls {
657 1.1.1.1.8.2 tls return ((vec_uint4)(si_gbb((qword)(a))));
658 1.1.1.1.8.2 tls }
659 1.1.1.1.8.2 tls
660 1.1.1.1.8.2 tls static __inline vec_uint4 spu_gather(vec_ushort8 a)
661 1.1.1.1.8.2 tls {
662 1.1.1.1.8.2 tls return ((vec_uint4)(si_gbh((qword)(a))));
663 1.1.1.1.8.2 tls }
664 1.1.1.1.8.2 tls
665 1.1.1.1.8.2 tls static __inline vec_uint4 spu_gather(vec_short8 a)
666 1.1.1.1.8.2 tls {
667 1.1.1.1.8.2 tls return ((vec_uint4)(si_gbh((qword)(a))));
668 1.1.1.1.8.2 tls }
669 1.1.1.1.8.2 tls
670 1.1.1.1.8.2 tls
671 1.1.1.1.8.2 tls static __inline vec_uint4 spu_gather(vec_uint4 a)
672 1.1.1.1.8.2 tls {
673 1.1.1.1.8.2 tls return ((vec_uint4)(si_gb((qword)(a))));
674 1.1.1.1.8.2 tls }
675 1.1.1.1.8.2 tls
676 1.1.1.1.8.2 tls static __inline vec_uint4 spu_gather(vec_int4 a)
677 1.1.1.1.8.2 tls {
678 1.1.1.1.8.2 tls return ((vec_uint4)(si_gb((qword)(a))));
679 1.1.1.1.8.2 tls }
680 1.1.1.1.8.2 tls
681 1.1.1.1.8.2 tls static __inline vec_uint4 spu_gather(vec_float4 a)
682 1.1.1.1.8.2 tls {
683 1.1.1.1.8.2 tls return ((vec_uint4)(si_gb((qword)(a))));
684 1.1.1.1.8.2 tls }
685 1.1.1.1.8.2 tls
686 1.1.1.1.8.2 tls /* spu_genb
687 1.1.1.1.8.2 tls * ========
688 1.1.1.1.8.2 tls */
689 1.1.1.1.8.2 tls static __inline vec_uint4 spu_genb(vec_uint4 a, vec_uint4 b)
690 1.1.1.1.8.2 tls {
691 1.1.1.1.8.2 tls return ((vec_uint4)(si_bg((qword)(b), (qword)(a))));
692 1.1.1.1.8.2 tls }
693 1.1.1.1.8.2 tls
694 1.1.1.1.8.2 tls static __inline vec_int4 spu_genb(vec_int4 a, vec_int4 b)
695 1.1.1.1.8.2 tls {
696 1.1.1.1.8.2 tls return ((vec_int4)(si_bg((qword)(b), (qword)(a))));
697 1.1.1.1.8.2 tls }
698 1.1.1.1.8.2 tls
699 1.1.1.1.8.2 tls /* spu_genbx
700 1.1.1.1.8.2 tls * =========
701 1.1.1.1.8.2 tls */
702 1.1.1.1.8.2 tls static __inline vec_uint4 spu_genbx(vec_uint4 a, vec_uint4 b, vec_uint4 c)
703 1.1.1.1.8.2 tls {
704 1.1.1.1.8.2 tls return ((vec_uint4)(si_bgx((qword)(b), (qword)(a), (qword)(c))));
705 1.1.1.1.8.2 tls }
706 1.1.1.1.8.2 tls
707 1.1.1.1.8.2 tls static __inline vec_int4 spu_genbx(vec_int4 a, vec_int4 b, vec_int4 c)
708 1.1.1.1.8.2 tls {
709 1.1.1.1.8.2 tls return ((vec_int4)(si_bgx((qword)(b), (qword)(a), (qword)(c))));
710 1.1.1.1.8.2 tls }
711 1.1.1.1.8.2 tls
712 1.1.1.1.8.2 tls
713 1.1.1.1.8.2 tls /* spu_genc
714 1.1.1.1.8.2 tls * ========
715 1.1.1.1.8.2 tls */
716 1.1.1.1.8.2 tls static __inline vec_uint4 spu_genc(vec_uint4 a, vec_uint4 b)
717 1.1.1.1.8.2 tls {
718 1.1.1.1.8.2 tls return ((vec_uint4)(si_cg((qword)(a), (qword)(b))));
719 1.1.1.1.8.2 tls }
720 1.1.1.1.8.2 tls
721 1.1.1.1.8.2 tls static __inline vec_int4 spu_genc(vec_int4 a, vec_int4 b)
722 1.1.1.1.8.2 tls {
723 1.1.1.1.8.2 tls return ((vec_int4)(si_cg((qword)(a), (qword)(b))));
724 1.1.1.1.8.2 tls }
725 1.1.1.1.8.2 tls
726 1.1.1.1.8.2 tls /* spu_gencx
727 1.1.1.1.8.2 tls * =========
728 1.1.1.1.8.2 tls */
729 1.1.1.1.8.2 tls static __inline vec_uint4 spu_gencx(vec_uint4 a, vec_uint4 b, vec_uint4 c)
730 1.1.1.1.8.2 tls {
731 1.1.1.1.8.2 tls return ((vec_uint4)(si_cgx((qword)(a), (qword)(b), (qword)(c))));
732 1.1.1.1.8.2 tls }
733 1.1.1.1.8.2 tls
734 1.1.1.1.8.2 tls static __inline vec_int4 spu_gencx(vec_int4 a, vec_int4 b, vec_int4 c)
735 1.1.1.1.8.2 tls {
736 1.1.1.1.8.2 tls return ((vec_int4)(si_cgx((qword)(a), (qword)(b), (qword)(c))));
737 1.1.1.1.8.2 tls }
738 1.1.1.1.8.2 tls
739 1.1.1.1.8.2 tls
740 1.1.1.1.8.2 tls /* spu_hcmpeq
741 1.1.1.1.8.2 tls * ========
742 1.1.1.1.8.2 tls */
743 1.1.1.1.8.2 tls #define spu_hcmpeq(_a, _b) if (_a == _b) { SPU_HALT_ACTION; };
744 1.1.1.1.8.2 tls
745 1.1.1.1.8.2 tls
746 1.1.1.1.8.2 tls /* spu_hcmpgt
747 1.1.1.1.8.2 tls * ========
748 1.1.1.1.8.2 tls */
749 1.1.1.1.8.2 tls #define spu_hcmpgt(_a, _b) if (_a > _b) { SPU_HALT_ACTION; };
750 1.1.1.1.8.2 tls
751 1.1.1.1.8.2 tls
752 1.1.1.1.8.2 tls /* spu_idisable
753 1.1.1.1.8.2 tls * ============
754 1.1.1.1.8.2 tls */
755 1.1.1.1.8.2 tls #define spu_idisable() SPU_UNSUPPORTED_ACTION
756 1.1.1.1.8.2 tls
757 1.1.1.1.8.2 tls
758 1.1.1.1.8.2 tls /* spu_ienable
759 1.1.1.1.8.2 tls * ===========
760 1.1.1.1.8.2 tls */
761 1.1.1.1.8.2 tls #define spu_ienable() SPU_UNSUPPORTED_ACTION
762 1.1.1.1.8.2 tls
763 1.1.1.1.8.2 tls
764 1.1.1.1.8.2 tls /* spu_insert
765 1.1.1.1.8.2 tls * ========
766 1.1.1.1.8.2 tls */
767 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_insert(unsigned char a, vec_uchar16 b, int element)
768 1.1.1.1.8.2 tls {
769 1.1.1.1.8.2 tls union {
770 1.1.1.1.8.2 tls vec_uchar16 v;
771 1.1.1.1.8.2 tls unsigned char c[16];
772 1.1.1.1.8.2 tls } in;
773 1.1.1.1.8.2 tls
774 1.1.1.1.8.2 tls in.v = b;
775 1.1.1.1.8.2 tls in.c[element & 15] = a;
776 1.1.1.1.8.2 tls return (in.v);
777 1.1.1.1.8.2 tls }
778 1.1.1.1.8.2 tls
779 1.1.1.1.8.2 tls static __inline vec_char16 spu_insert(signed char a, vec_char16 b, int element)
780 1.1.1.1.8.2 tls {
781 1.1.1.1.8.2 tls return ((vec_char16)spu_insert((unsigned char)(a), (vec_uchar16)(b), element));
782 1.1.1.1.8.2 tls }
783 1.1.1.1.8.2 tls
784 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_insert(unsigned short a, vec_ushort8 b, int element)
785 1.1.1.1.8.2 tls {
786 1.1.1.1.8.2 tls union {
787 1.1.1.1.8.2 tls vec_ushort8 v;
788 1.1.1.1.8.2 tls unsigned short s[8];
789 1.1.1.1.8.2 tls } in;
790 1.1.1.1.8.2 tls
791 1.1.1.1.8.2 tls in.v = b;
792 1.1.1.1.8.2 tls in.s[element & 7] = a;
793 1.1.1.1.8.2 tls return (in.v);
794 1.1.1.1.8.2 tls }
795 1.1.1.1.8.2 tls
796 1.1.1.1.8.2 tls static __inline vec_short8 spu_insert(signed short a, vec_short8 b, int element)
797 1.1.1.1.8.2 tls {
798 1.1.1.1.8.2 tls return ((vec_short8)spu_insert((unsigned short)(a), (vec_ushort8)(b), element));
799 1.1.1.1.8.2 tls }
800 1.1.1.1.8.2 tls
801 1.1.1.1.8.2 tls static __inline vec_uint4 spu_insert(unsigned int a, vec_uint4 b, int element)
802 1.1.1.1.8.2 tls {
803 1.1.1.1.8.2 tls union {
804 1.1.1.1.8.2 tls vec_uint4 v;
805 1.1.1.1.8.2 tls unsigned int i[4];
806 1.1.1.1.8.2 tls } in;
807 1.1.1.1.8.2 tls
808 1.1.1.1.8.2 tls in.v = b;
809 1.1.1.1.8.2 tls in.i[element & 3] = a;
810 1.1.1.1.8.2 tls return (in.v);
811 1.1.1.1.8.2 tls }
812 1.1.1.1.8.2 tls
813 1.1.1.1.8.2 tls static __inline vec_int4 spu_insert(signed int a, vec_int4 b, int element)
814 1.1.1.1.8.2 tls {
815 1.1.1.1.8.2 tls return ((vec_int4)spu_insert((unsigned int)(a), (vec_uint4)(b), element));
816 1.1.1.1.8.2 tls }
817 1.1.1.1.8.2 tls
818 1.1.1.1.8.2 tls static __inline vec_float4 spu_insert(float a, vec_float4 b, int element)
819 1.1.1.1.8.2 tls {
820 1.1.1.1.8.2 tls union {
821 1.1.1.1.8.2 tls vec_float4 v;
822 1.1.1.1.8.2 tls float f[4];
823 1.1.1.1.8.2 tls } in;
824 1.1.1.1.8.2 tls
825 1.1.1.1.8.2 tls in.v = b;
826 1.1.1.1.8.2 tls in.f[element & 3] = a;
827 1.1.1.1.8.2 tls return (in.v);
828 1.1.1.1.8.2 tls }
829 1.1.1.1.8.2 tls
830 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_insert(unsigned long long a, vec_ullong2 b, int element)
831 1.1.1.1.8.2 tls {
832 1.1.1.1.8.2 tls union {
833 1.1.1.1.8.2 tls vec_ullong2 v;
834 1.1.1.1.8.2 tls unsigned long long l[2];
835 1.1.1.1.8.2 tls } in;
836 1.1.1.1.8.2 tls
837 1.1.1.1.8.2 tls in.v = b;
838 1.1.1.1.8.2 tls in.l[element & 1] = a;
839 1.1.1.1.8.2 tls return (in.v);
840 1.1.1.1.8.2 tls }
841 1.1.1.1.8.2 tls
842 1.1.1.1.8.2 tls static __inline vec_llong2 spu_insert(signed long long a, vec_llong2 b, int element)
843 1.1.1.1.8.2 tls {
844 1.1.1.1.8.2 tls return ((vec_llong2)spu_insert((unsigned long long)(a), (vec_ullong2)(b), element));
845 1.1.1.1.8.2 tls }
846 1.1.1.1.8.2 tls
847 1.1.1.1.8.2 tls static __inline vec_double2 spu_insert(double a, vec_double2 b, int element)
848 1.1.1.1.8.2 tls {
849 1.1.1.1.8.2 tls union {
850 1.1.1.1.8.2 tls vec_double2 v;
851 1.1.1.1.8.2 tls double d[2];
852 1.1.1.1.8.2 tls } in;
853 1.1.1.1.8.2 tls
854 1.1.1.1.8.2 tls in.v = b;
855 1.1.1.1.8.2 tls in.d[element & 1] = a;
856 1.1.1.1.8.2 tls return (in.v);
857 1.1.1.1.8.2 tls }
858 1.1.1.1.8.2 tls
859 1.1.1.1.8.2 tls
860 1.1.1.1.8.2 tls /* spu_madd
861 1.1.1.1.8.2 tls * ========
862 1.1.1.1.8.2 tls */
863 1.1.1.1.8.2 tls static __inline vec_int4 spu_madd(vec_short8 a, vec_short8 b, vec_int4 c)
864 1.1.1.1.8.2 tls {
865 1.1.1.1.8.2 tls return ((vec_int4)(si_mpya((qword)(a), (qword)(b), (qword)(c))));
866 1.1.1.1.8.2 tls }
867 1.1.1.1.8.2 tls
868 1.1.1.1.8.2 tls static __inline vec_float4 spu_madd(vec_float4 a, vec_float4 b, vec_float4 c)
869 1.1.1.1.8.2 tls {
870 1.1.1.1.8.2 tls return ((vec_float4)(si_fma((qword)(a), (qword)(b), (qword)(c))));
871 1.1.1.1.8.2 tls }
872 1.1.1.1.8.2 tls
873 1.1.1.1.8.2 tls static __inline vec_double2 spu_madd(vec_double2 a, vec_double2 b, vec_double2 c)
874 1.1.1.1.8.2 tls {
875 1.1.1.1.8.2 tls return ((vec_double2)(si_dfma((qword)(a), (qword)(b), (qword)(c))));
876 1.1.1.1.8.2 tls }
877 1.1.1.1.8.2 tls
878 1.1.1.1.8.2 tls
879 1.1.1.1.8.2 tls /* spu_maskb
880 1.1.1.1.8.2 tls * ========
881 1.1.1.1.8.2 tls */
882 1.1.1.1.8.2 tls #define spu_maskb(_a) (vec_uchar16)(si_fsmb(si_from_int((int)(_a))))
883 1.1.1.1.8.2 tls
884 1.1.1.1.8.2 tls /* spu_maskh
885 1.1.1.1.8.2 tls * ========
886 1.1.1.1.8.2 tls */
887 1.1.1.1.8.2 tls #define spu_maskh(_a) (vec_ushort8)(si_fsmh(si_from_int((int)(_a))))
888 1.1.1.1.8.2 tls
889 1.1.1.1.8.2 tls
890 1.1.1.1.8.2 tls /* spu_maskw
891 1.1.1.1.8.2 tls * ========
892 1.1.1.1.8.2 tls */
893 1.1.1.1.8.2 tls #define spu_maskw(_a) (vec_uint4)(si_fsm(si_from_int((int)(_a))))
894 1.1.1.1.8.2 tls
895 1.1.1.1.8.2 tls
896 1.1.1.1.8.2 tls /* spu_mfcdma32
897 1.1.1.1.8.2 tls * ========
898 1.1.1.1.8.2 tls */
899 1.1.1.1.8.2 tls #define spu_mfcdma32(_ls, _ea, _size, _tagid, _cmd)
900 1.1.1.1.8.2 tls
901 1.1.1.1.8.2 tls
902 1.1.1.1.8.2 tls /* spu_mfcdma64
903 1.1.1.1.8.2 tls * ========
904 1.1.1.1.8.2 tls */
905 1.1.1.1.8.2 tls #define spu_mfcdma64(_ls, _eahi, _ealow, _size, _tagid, _cmd)
906 1.1.1.1.8.2 tls
907 1.1.1.1.8.2 tls /* spu_mfcstat
908 1.1.1.1.8.2 tls * ========
909 1.1.1.1.8.2 tls */
910 1.1.1.1.8.2 tls #define spu_mfcstat(_type) 0xFFFFFFFF
911 1.1.1.1.8.2 tls
912 1.1.1.1.8.2 tls
913 1.1.1.1.8.2 tls
914 1.1.1.1.8.2 tls /* spu_mffpscr
915 1.1.1.1.8.2 tls * ===========
916 1.1.1.1.8.2 tls */
917 1.1.1.1.8.2 tls #define spu_mffpscr() (vec_uint4)(si_fscrrd())
918 1.1.1.1.8.2 tls
919 1.1.1.1.8.2 tls
920 1.1.1.1.8.2 tls /* spu_mfspr
921 1.1.1.1.8.2 tls * ========
922 1.1.1.1.8.2 tls */
923 1.1.1.1.8.2 tls
924 1.1.1.1.8.2 tls #define spu_mfspr(_reg) si_to_uint(si_mfspr(_reg))
925 1.1.1.1.8.2 tls
926 1.1.1.1.8.2 tls
927 1.1.1.1.8.2 tls
928 1.1.1.1.8.2 tls /* spu_mhhadd
929 1.1.1.1.8.2 tls * ==========
930 1.1.1.1.8.2 tls */
931 1.1.1.1.8.2 tls static __inline vec_int4 spu_mhhadd(vec_short8 a, vec_short8 b, vec_int4 c)
932 1.1.1.1.8.2 tls {
933 1.1.1.1.8.2 tls return ((vec_int4)(si_mpyhha((qword)(a), (qword)(b), (qword)(c))));
934 1.1.1.1.8.2 tls }
935 1.1.1.1.8.2 tls
936 1.1.1.1.8.2 tls
937 1.1.1.1.8.2 tls static __inline vec_uint4 spu_mhhadd(vec_ushort8 a, vec_ushort8 b, vec_uint4 c)
938 1.1.1.1.8.2 tls {
939 1.1.1.1.8.2 tls return ((vec_uint4)(si_mpyhhau((qword)(a), (qword)(b), (qword)(c))));
940 1.1.1.1.8.2 tls }
941 1.1.1.1.8.2 tls
942 1.1.1.1.8.2 tls
943 1.1.1.1.8.2 tls /* spu_msub
944 1.1.1.1.8.2 tls * ========
945 1.1.1.1.8.2 tls */
946 1.1.1.1.8.2 tls static __inline vec_float4 spu_msub(vec_float4 a, vec_float4 b, vec_float4 c)
947 1.1.1.1.8.2 tls {
948 1.1.1.1.8.2 tls return ((vec_float4)(si_fms((qword)(a), (qword)(b), (qword)(c))));
949 1.1.1.1.8.2 tls }
950 1.1.1.1.8.2 tls
951 1.1.1.1.8.2 tls static __inline vec_double2 spu_msub(vec_double2 a, vec_double2 b, vec_double2 c)
952 1.1.1.1.8.2 tls {
953 1.1.1.1.8.2 tls return ((vec_double2)(si_dfms((qword)(a), (qword)(b), (qword)(c))));
954 1.1.1.1.8.2 tls }
955 1.1.1.1.8.2 tls
956 1.1.1.1.8.2 tls
957 1.1.1.1.8.2 tls /* spu_mtfpscr
958 1.1.1.1.8.2 tls * ===========
959 1.1.1.1.8.2 tls */
960 1.1.1.1.8.2 tls #define spu_mtfpscr(_a)
961 1.1.1.1.8.2 tls
962 1.1.1.1.8.2 tls
963 1.1.1.1.8.2 tls /* spu_mtspr
964 1.1.1.1.8.2 tls * ========
965 1.1.1.1.8.2 tls */
966 1.1.1.1.8.2 tls #define spu_mtspr(_reg, _a)
967 1.1.1.1.8.2 tls
968 1.1.1.1.8.2 tls
969 1.1.1.1.8.2 tls /* spu_mul
970 1.1.1.1.8.2 tls * ========
971 1.1.1.1.8.2 tls */
972 1.1.1.1.8.2 tls static __inline vec_float4 spu_mul(vec_float4 a, vec_float4 b)
973 1.1.1.1.8.2 tls {
974 1.1.1.1.8.2 tls return ((vec_float4)(si_fm((qword)(a), (qword)(b))));
975 1.1.1.1.8.2 tls }
976 1.1.1.1.8.2 tls
977 1.1.1.1.8.2 tls static __inline vec_double2 spu_mul(vec_double2 a, vec_double2 b)
978 1.1.1.1.8.2 tls {
979 1.1.1.1.8.2 tls return ((vec_double2)(si_dfm((qword)(a), (qword)(b))));
980 1.1.1.1.8.2 tls }
981 1.1.1.1.8.2 tls
982 1.1.1.1.8.2 tls
983 1.1.1.1.8.2 tls /* spu_mulh
984 1.1.1.1.8.2 tls * ========
985 1.1.1.1.8.2 tls */
986 1.1.1.1.8.2 tls static __inline vec_int4 spu_mulh(vec_short8 a, vec_short8 b)
987 1.1.1.1.8.2 tls {
988 1.1.1.1.8.2 tls return ((vec_int4)(si_mpyh((qword)(a), (qword)(b))));
989 1.1.1.1.8.2 tls }
990 1.1.1.1.8.2 tls
991 1.1.1.1.8.2 tls /* spu_mule
992 1.1.1.1.8.2 tls * =========
993 1.1.1.1.8.2 tls */
994 1.1.1.1.8.2 tls #define spu_mule(_a, _b) vec_mule(_a, _b)
995 1.1.1.1.8.2 tls
996 1.1.1.1.8.2 tls
997 1.1.1.1.8.2 tls
998 1.1.1.1.8.2 tls /* spu_mulo
999 1.1.1.1.8.2 tls * ========
1000 1.1.1.1.8.2 tls */
1001 1.1.1.1.8.2 tls static __inline vec_int4 spu_mulo(vec_short8 a, vec_short8 b)
1002 1.1.1.1.8.2 tls {
1003 1.1.1.1.8.2 tls return ((vec_int4)(si_mpy((qword)(a), (qword)(b))));
1004 1.1.1.1.8.2 tls }
1005 1.1.1.1.8.2 tls
1006 1.1.1.1.8.2 tls
1007 1.1.1.1.8.2 tls static __inline vec_uint4 spu_mulo(vec_ushort8 a, vec_ushort8 b)
1008 1.1.1.1.8.2 tls {
1009 1.1.1.1.8.2 tls return ((vec_uint4)(si_mpyu((qword)(a), (qword)(b))));
1010 1.1.1.1.8.2 tls }
1011 1.1.1.1.8.2 tls
1012 1.1.1.1.8.2 tls
1013 1.1.1.1.8.2 tls static __inline vec_int4 spu_mulo(vec_short8 a, short b)
1014 1.1.1.1.8.2 tls {
1015 1.1.1.1.8.2 tls return ((vec_int4)(si_mpyi((qword)(a), b)));
1016 1.1.1.1.8.2 tls }
1017 1.1.1.1.8.2 tls
1018 1.1.1.1.8.2 tls static __inline vec_uint4 spu_mulo(vec_ushort8 a, unsigned short b)
1019 1.1.1.1.8.2 tls {
1020 1.1.1.1.8.2 tls return ((vec_uint4)(si_mpyui((qword)(a), b)));
1021 1.1.1.1.8.2 tls }
1022 1.1.1.1.8.2 tls
1023 1.1.1.1.8.2 tls
1024 1.1.1.1.8.2 tls /* spu_mulsr
1025 1.1.1.1.8.2 tls * =========
1026 1.1.1.1.8.2 tls */
1027 1.1.1.1.8.2 tls static __inline vec_int4 spu_mulsr(vec_short8 a, vec_short8 b)
1028 1.1.1.1.8.2 tls {
1029 1.1.1.1.8.2 tls return ((vec_int4)(si_mpys((qword)(a), (qword)(b))));
1030 1.1.1.1.8.2 tls }
1031 1.1.1.1.8.2 tls
1032 1.1.1.1.8.2 tls
1033 1.1.1.1.8.2 tls /* spu_nand
1034 1.1.1.1.8.2 tls * ========
1035 1.1.1.1.8.2 tls */
1036 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_nand(vec_uchar16 a, vec_uchar16 b)
1037 1.1.1.1.8.2 tls {
1038 1.1.1.1.8.2 tls return ((vec_uchar16)(si_nand((qword)(a), (qword)(b))));
1039 1.1.1.1.8.2 tls }
1040 1.1.1.1.8.2 tls
1041 1.1.1.1.8.2 tls static __inline vec_char16 spu_nand(vec_char16 a, vec_char16 b)
1042 1.1.1.1.8.2 tls {
1043 1.1.1.1.8.2 tls return ((vec_char16)(si_nand((qword)(a), (qword)(b))));
1044 1.1.1.1.8.2 tls }
1045 1.1.1.1.8.2 tls
1046 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_nand(vec_ushort8 a, vec_ushort8 b)
1047 1.1.1.1.8.2 tls {
1048 1.1.1.1.8.2 tls return ((vec_ushort8)(si_nand((qword)(a), (qword)(b))));
1049 1.1.1.1.8.2 tls }
1050 1.1.1.1.8.2 tls
1051 1.1.1.1.8.2 tls static __inline vec_short8 spu_nand(vec_short8 a, vec_short8 b)
1052 1.1.1.1.8.2 tls {
1053 1.1.1.1.8.2 tls return ((vec_short8)(si_nand((qword)(a), (qword)(b))));
1054 1.1.1.1.8.2 tls }
1055 1.1.1.1.8.2 tls
1056 1.1.1.1.8.2 tls static __inline vec_uint4 spu_nand(vec_uint4 a, vec_uint4 b)
1057 1.1.1.1.8.2 tls {
1058 1.1.1.1.8.2 tls return ((vec_uint4)(si_nand((qword)(a), (qword)(b))));
1059 1.1.1.1.8.2 tls }
1060 1.1.1.1.8.2 tls
1061 1.1.1.1.8.2 tls static __inline vec_int4 spu_nand(vec_int4 a, vec_int4 b)
1062 1.1.1.1.8.2 tls {
1063 1.1.1.1.8.2 tls return ((vec_int4)(si_nand((qword)(a), (qword)(b))));
1064 1.1.1.1.8.2 tls }
1065 1.1.1.1.8.2 tls
1066 1.1.1.1.8.2 tls static __inline vec_float4 spu_nand(vec_float4 a, vec_float4 b)
1067 1.1.1.1.8.2 tls {
1068 1.1.1.1.8.2 tls return ((vec_float4)(si_nand((qword)(a), (qword)(b))));
1069 1.1.1.1.8.2 tls }
1070 1.1.1.1.8.2 tls
1071 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_nand(vec_ullong2 a, vec_ullong2 b)
1072 1.1.1.1.8.2 tls {
1073 1.1.1.1.8.2 tls return ((vec_ullong2)(si_nand((qword)(a), (qword)(b))));
1074 1.1.1.1.8.2 tls }
1075 1.1.1.1.8.2 tls
1076 1.1.1.1.8.2 tls static __inline vec_llong2 spu_nand(vec_llong2 a, vec_llong2 b)
1077 1.1.1.1.8.2 tls {
1078 1.1.1.1.8.2 tls return ((vec_llong2)(si_nand((qword)(a), (qword)(b))));
1079 1.1.1.1.8.2 tls }
1080 1.1.1.1.8.2 tls
1081 1.1.1.1.8.2 tls static __inline vec_double2 spu_nand(vec_double2 a, vec_double2 b)
1082 1.1.1.1.8.2 tls {
1083 1.1.1.1.8.2 tls return ((vec_double2)(si_nand((qword)(a), (qword)(b))));
1084 1.1.1.1.8.2 tls }
1085 1.1.1.1.8.2 tls
1086 1.1.1.1.8.2 tls
1087 1.1.1.1.8.2 tls /* spu_nmadd
1088 1.1.1.1.8.2 tls * =========
1089 1.1.1.1.8.2 tls */
1090 1.1.1.1.8.2 tls static __inline vec_double2 spu_nmadd(vec_double2 a, vec_double2 b, vec_double2 c)
1091 1.1.1.1.8.2 tls {
1092 1.1.1.1.8.2 tls return ((vec_double2)(si_dfnma((qword)(a), (qword)(b), (qword)(c))));
1093 1.1.1.1.8.2 tls }
1094 1.1.1.1.8.2 tls
1095 1.1.1.1.8.2 tls
1096 1.1.1.1.8.2 tls /* spu_nmsub
1097 1.1.1.1.8.2 tls * =========
1098 1.1.1.1.8.2 tls */
1099 1.1.1.1.8.2 tls static __inline vec_float4 spu_nmsub(vec_float4 a, vec_float4 b, vec_float4 c)
1100 1.1.1.1.8.2 tls {
1101 1.1.1.1.8.2 tls return ((vec_float4)(si_fnms((qword)(a), (qword)(b), (qword)(c))));
1102 1.1.1.1.8.2 tls }
1103 1.1.1.1.8.2 tls
1104 1.1.1.1.8.2 tls static __inline vec_double2 spu_nmsub(vec_double2 a, vec_double2 b, vec_double2 c)
1105 1.1.1.1.8.2 tls {
1106 1.1.1.1.8.2 tls return ((vec_double2)(si_dfnms((qword)(a), (qword)(b), (qword)(c))));
1107 1.1.1.1.8.2 tls }
1108 1.1.1.1.8.2 tls
1109 1.1.1.1.8.2 tls
1110 1.1.1.1.8.2 tls /* spu_nor
1111 1.1.1.1.8.2 tls * =======
1112 1.1.1.1.8.2 tls */
1113 1.1.1.1.8.2 tls #define spu_nor(_a, _b) vec_nor(_a, _b)
1114 1.1.1.1.8.2 tls
1115 1.1.1.1.8.2 tls
1116 1.1.1.1.8.2 tls /* spu_or
1117 1.1.1.1.8.2 tls * ======
1118 1.1.1.1.8.2 tls */
1119 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_or(vec_uchar16 a, vec_uchar16 b)
1120 1.1.1.1.8.2 tls {
1121 1.1.1.1.8.2 tls return ((vec_uchar16)(si_or((qword)(a), (qword)(b))));
1122 1.1.1.1.8.2 tls }
1123 1.1.1.1.8.2 tls
1124 1.1.1.1.8.2 tls static __inline vec_char16 spu_or(vec_char16 a, vec_char16 b)
1125 1.1.1.1.8.2 tls {
1126 1.1.1.1.8.2 tls return ((vec_char16)(si_or((qword)(a), (qword)(b))));
1127 1.1.1.1.8.2 tls }
1128 1.1.1.1.8.2 tls
1129 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_or(vec_ushort8 a, vec_ushort8 b)
1130 1.1.1.1.8.2 tls {
1131 1.1.1.1.8.2 tls return ((vec_ushort8)(si_or((qword)(a), (qword)(b))));
1132 1.1.1.1.8.2 tls }
1133 1.1.1.1.8.2 tls
1134 1.1.1.1.8.2 tls static __inline vec_short8 spu_or(vec_short8 a, vec_short8 b)
1135 1.1.1.1.8.2 tls {
1136 1.1.1.1.8.2 tls return ((vec_short8)(si_or((qword)(a), (qword)(b))));
1137 1.1.1.1.8.2 tls }
1138 1.1.1.1.8.2 tls
1139 1.1.1.1.8.2 tls static __inline vec_uint4 spu_or(vec_uint4 a, vec_uint4 b)
1140 1.1.1.1.8.2 tls {
1141 1.1.1.1.8.2 tls return ((vec_uint4)(si_or((qword)(a), (qword)(b))));
1142 1.1.1.1.8.2 tls }
1143 1.1.1.1.8.2 tls
1144 1.1.1.1.8.2 tls static __inline vec_int4 spu_or(vec_int4 a, vec_int4 b)
1145 1.1.1.1.8.2 tls {
1146 1.1.1.1.8.2 tls return ((vec_int4)(si_or((qword)(a), (qword)(b))));
1147 1.1.1.1.8.2 tls }
1148 1.1.1.1.8.2 tls
1149 1.1.1.1.8.2 tls static __inline vec_float4 spu_or(vec_float4 a, vec_float4 b)
1150 1.1.1.1.8.2 tls {
1151 1.1.1.1.8.2 tls return ((vec_float4)(si_or((qword)(a), (qword)(b))));
1152 1.1.1.1.8.2 tls }
1153 1.1.1.1.8.2 tls
1154 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_or(vec_ullong2 a, vec_ullong2 b)
1155 1.1.1.1.8.2 tls {
1156 1.1.1.1.8.2 tls return ((vec_ullong2)(si_or((qword)(a), (qword)(b))));
1157 1.1.1.1.8.2 tls }
1158 1.1.1.1.8.2 tls
1159 1.1.1.1.8.2 tls static __inline vec_llong2 spu_or(vec_llong2 a, vec_llong2 b)
1160 1.1.1.1.8.2 tls {
1161 1.1.1.1.8.2 tls return ((vec_llong2)(si_or((qword)(a), (qword)(b))));
1162 1.1.1.1.8.2 tls }
1163 1.1.1.1.8.2 tls
1164 1.1.1.1.8.2 tls static __inline vec_double2 spu_or(vec_double2 a, vec_double2 b)
1165 1.1.1.1.8.2 tls {
1166 1.1.1.1.8.2 tls return ((vec_double2)(si_or((qword)(a), (qword)(b))));
1167 1.1.1.1.8.2 tls }
1168 1.1.1.1.8.2 tls
1169 1.1.1.1.8.2 tls
1170 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_or(vec_uchar16 a, unsigned char b)
1171 1.1.1.1.8.2 tls {
1172 1.1.1.1.8.2 tls return ((vec_uchar16)(si_orbi((qword)(a), b)));
1173 1.1.1.1.8.2 tls }
1174 1.1.1.1.8.2 tls
1175 1.1.1.1.8.2 tls static __inline vec_char16 spu_or(vec_char16 a, signed char b)
1176 1.1.1.1.8.2 tls {
1177 1.1.1.1.8.2 tls return ((vec_char16)(si_orbi((qword)(a), (unsigned char)(b))));
1178 1.1.1.1.8.2 tls }
1179 1.1.1.1.8.2 tls
1180 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_or(vec_ushort8 a, unsigned short b)
1181 1.1.1.1.8.2 tls {
1182 1.1.1.1.8.2 tls return ((vec_ushort8)(si_orhi((qword)(a), b)));
1183 1.1.1.1.8.2 tls }
1184 1.1.1.1.8.2 tls
1185 1.1.1.1.8.2 tls static __inline vec_short8 spu_or(vec_short8 a, signed short b)
1186 1.1.1.1.8.2 tls {
1187 1.1.1.1.8.2 tls return ((vec_short8)(si_orhi((qword)(a), (unsigned short)(b))));
1188 1.1.1.1.8.2 tls }
1189 1.1.1.1.8.2 tls
1190 1.1.1.1.8.2 tls static __inline vec_uint4 spu_or(vec_uint4 a, unsigned int b)
1191 1.1.1.1.8.2 tls {
1192 1.1.1.1.8.2 tls return ((vec_uint4)(si_ori((qword)(a), b)));
1193 1.1.1.1.8.2 tls }
1194 1.1.1.1.8.2 tls
1195 1.1.1.1.8.2 tls static __inline vec_int4 spu_or(vec_int4 a, signed int b)
1196 1.1.1.1.8.2 tls {
1197 1.1.1.1.8.2 tls return ((vec_int4)(si_ori((qword)(a), (unsigned int)(b))));
1198 1.1.1.1.8.2 tls }
1199 1.1.1.1.8.2 tls
1200 1.1.1.1.8.2 tls
1201 1.1.1.1.8.2 tls /* spu_orc
1202 1.1.1.1.8.2 tls * =======
1203 1.1.1.1.8.2 tls */
1204 1.1.1.1.8.2 tls #define spu_orc(_a, _b) vec_or(_a, vec_nor(_b, _b))
1205 1.1.1.1.8.2 tls
1206 1.1.1.1.8.2 tls
1207 1.1.1.1.8.2 tls /* spu_orx
1208 1.1.1.1.8.2 tls * =======
1209 1.1.1.1.8.2 tls */
1210 1.1.1.1.8.2 tls static __inline vec_uint4 spu_orx(vec_uint4 a)
1211 1.1.1.1.8.2 tls {
1212 1.1.1.1.8.2 tls return ((vec_uint4)(si_orx((qword)(a))));
1213 1.1.1.1.8.2 tls }
1214 1.1.1.1.8.2 tls
1215 1.1.1.1.8.2 tls static __inline vec_int4 spu_orx(vec_int4 a)
1216 1.1.1.1.8.2 tls {
1217 1.1.1.1.8.2 tls return ((vec_int4)(si_orx((qword)(a))));
1218 1.1.1.1.8.2 tls }
1219 1.1.1.1.8.2 tls
1220 1.1.1.1.8.2 tls
1221 1.1.1.1.8.2 tls /* spu_promote
1222 1.1.1.1.8.2 tls * ===========
1223 1.1.1.1.8.2 tls */
1224 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_promote(unsigned char a, int element)
1225 1.1.1.1.8.2 tls {
1226 1.1.1.1.8.2 tls union {
1227 1.1.1.1.8.2 tls vec_uchar16 v;
1228 1.1.1.1.8.2 tls unsigned char c[16];
1229 1.1.1.1.8.2 tls } in;
1230 1.1.1.1.8.2 tls
1231 1.1.1.1.8.2 tls in.c[element & 15] = a;
1232 1.1.1.1.8.2 tls return (in.v);
1233 1.1.1.1.8.2 tls }
1234 1.1.1.1.8.2 tls
1235 1.1.1.1.8.2 tls static __inline vec_char16 spu_promote(signed char a, int element)
1236 1.1.1.1.8.2 tls {
1237 1.1.1.1.8.2 tls union {
1238 1.1.1.1.8.2 tls vec_char16 v;
1239 1.1.1.1.8.2 tls signed char c[16];
1240 1.1.1.1.8.2 tls } in;
1241 1.1.1.1.8.2 tls
1242 1.1.1.1.8.2 tls in.c[element & 15] = a;
1243 1.1.1.1.8.2 tls return (in.v);
1244 1.1.1.1.8.2 tls }
1245 1.1.1.1.8.2 tls
1246 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_promote(unsigned short a, int element)
1247 1.1.1.1.8.2 tls {
1248 1.1.1.1.8.2 tls union {
1249 1.1.1.1.8.2 tls vec_ushort8 v;
1250 1.1.1.1.8.2 tls unsigned short s[8];
1251 1.1.1.1.8.2 tls } in;
1252 1.1.1.1.8.2 tls
1253 1.1.1.1.8.2 tls in.s[element & 7] = a;
1254 1.1.1.1.8.2 tls return (in.v);
1255 1.1.1.1.8.2 tls }
1256 1.1.1.1.8.2 tls
1257 1.1.1.1.8.2 tls static __inline vec_short8 spu_promote(signed short a, int element)
1258 1.1.1.1.8.2 tls {
1259 1.1.1.1.8.2 tls union {
1260 1.1.1.1.8.2 tls vec_short8 v;
1261 1.1.1.1.8.2 tls signed short s[8];
1262 1.1.1.1.8.2 tls } in;
1263 1.1.1.1.8.2 tls
1264 1.1.1.1.8.2 tls in.s[element & 7] = a;
1265 1.1.1.1.8.2 tls return (in.v);
1266 1.1.1.1.8.2 tls }
1267 1.1.1.1.8.2 tls
1268 1.1.1.1.8.2 tls static __inline vec_uint4 spu_promote(unsigned int a, int element)
1269 1.1.1.1.8.2 tls {
1270 1.1.1.1.8.2 tls union {
1271 1.1.1.1.8.2 tls vec_uint4 v;
1272 1.1.1.1.8.2 tls unsigned int i[4];
1273 1.1.1.1.8.2 tls } in;
1274 1.1.1.1.8.2 tls
1275 1.1.1.1.8.2 tls in.i[element & 3] = a;
1276 1.1.1.1.8.2 tls return (in.v);
1277 1.1.1.1.8.2 tls }
1278 1.1.1.1.8.2 tls
1279 1.1.1.1.8.2 tls static __inline vec_int4 spu_promote(signed int a, int element)
1280 1.1.1.1.8.2 tls {
1281 1.1.1.1.8.2 tls union {
1282 1.1.1.1.8.2 tls vec_int4 v;
1283 1.1.1.1.8.2 tls signed int i[4];
1284 1.1.1.1.8.2 tls } in;
1285 1.1.1.1.8.2 tls
1286 1.1.1.1.8.2 tls in.i[element & 3] = a;
1287 1.1.1.1.8.2 tls return (in.v);
1288 1.1.1.1.8.2 tls }
1289 1.1.1.1.8.2 tls
1290 1.1.1.1.8.2 tls static __inline vec_float4 spu_promote(float a, int element)
1291 1.1.1.1.8.2 tls {
1292 1.1.1.1.8.2 tls union {
1293 1.1.1.1.8.2 tls vec_float4 v;
1294 1.1.1.1.8.2 tls float f[4];
1295 1.1.1.1.8.2 tls } in;
1296 1.1.1.1.8.2 tls
1297 1.1.1.1.8.2 tls in.f[element & 3] = a;
1298 1.1.1.1.8.2 tls return (in.v);
1299 1.1.1.1.8.2 tls }
1300 1.1.1.1.8.2 tls
1301 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_promote(unsigned long long a, int element)
1302 1.1.1.1.8.2 tls {
1303 1.1.1.1.8.2 tls union {
1304 1.1.1.1.8.2 tls vec_ullong2 v;
1305 1.1.1.1.8.2 tls unsigned long long l[2];
1306 1.1.1.1.8.2 tls } in;
1307 1.1.1.1.8.2 tls
1308 1.1.1.1.8.2 tls in.l[element & 1] = a;
1309 1.1.1.1.8.2 tls return (in.v);
1310 1.1.1.1.8.2 tls }
1311 1.1.1.1.8.2 tls
1312 1.1.1.1.8.2 tls static __inline vec_llong2 spu_promote(signed long long a, int element)
1313 1.1.1.1.8.2 tls {
1314 1.1.1.1.8.2 tls union {
1315 1.1.1.1.8.2 tls vec_llong2 v;
1316 1.1.1.1.8.2 tls signed long long l[2];
1317 1.1.1.1.8.2 tls } in;
1318 1.1.1.1.8.2 tls
1319 1.1.1.1.8.2 tls in.l[element & 1] = a;
1320 1.1.1.1.8.2 tls return (in.v);
1321 1.1.1.1.8.2 tls }
1322 1.1.1.1.8.2 tls
1323 1.1.1.1.8.2 tls static __inline vec_double2 spu_promote(double a, int element)
1324 1.1.1.1.8.2 tls {
1325 1.1.1.1.8.2 tls union {
1326 1.1.1.1.8.2 tls vec_double2 v;
1327 1.1.1.1.8.2 tls double d[2];
1328 1.1.1.1.8.2 tls } in;
1329 1.1.1.1.8.2 tls
1330 1.1.1.1.8.2 tls in.d[element & 1] = a;
1331 1.1.1.1.8.2 tls return (in.v);
1332 1.1.1.1.8.2 tls }
1333 1.1.1.1.8.2 tls
1334 1.1.1.1.8.2 tls /* spu_re
1335 1.1.1.1.8.2 tls * ======
1336 1.1.1.1.8.2 tls */
1337 1.1.1.1.8.2 tls #define spu_re(_a) vec_re(_a)
1338 1.1.1.1.8.2 tls
1339 1.1.1.1.8.2 tls
1340 1.1.1.1.8.2 tls /* spu_readch
1341 1.1.1.1.8.2 tls * ==========
1342 1.1.1.1.8.2 tls */
1343 1.1.1.1.8.2 tls #define spu_readch(_channel) 0 /* not mappable */
1344 1.1.1.1.8.2 tls
1345 1.1.1.1.8.2 tls
1346 1.1.1.1.8.2 tls /* spu_readchcnt
1347 1.1.1.1.8.2 tls * =============
1348 1.1.1.1.8.2 tls */
1349 1.1.1.1.8.2 tls #define spu_readchcnt(_channel) 0 /* not mappable */
1350 1.1.1.1.8.2 tls
1351 1.1.1.1.8.2 tls
1352 1.1.1.1.8.2 tls /* spu_readchqw
1353 1.1.1.1.8.2 tls * ============
1354 1.1.1.1.8.2 tls */
1355 1.1.1.1.8.2 tls #define spu_readchqw(_channel) __extension__ ({ vec_uint4 result = { 0, 0, 0, 0 }; result; })
1356 1.1.1.1.8.2 tls
1357 1.1.1.1.8.2 tls /* spu_rl
1358 1.1.1.1.8.2 tls * ======
1359 1.1.1.1.8.2 tls */
1360 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_rl(vec_ushort8 a, vec_short8 b)
1361 1.1.1.1.8.2 tls {
1362 1.1.1.1.8.2 tls return ((vec_ushort8)(si_roth((qword)(a), (qword)(b))));
1363 1.1.1.1.8.2 tls }
1364 1.1.1.1.8.2 tls
1365 1.1.1.1.8.2 tls static __inline vec_short8 spu_rl(vec_short8 a, vec_short8 b)
1366 1.1.1.1.8.2 tls {
1367 1.1.1.1.8.2 tls return ((vec_short8)(si_roth((qword)(a), (qword)(b))));
1368 1.1.1.1.8.2 tls }
1369 1.1.1.1.8.2 tls
1370 1.1.1.1.8.2 tls static __inline vec_uint4 spu_rl(vec_uint4 a, vec_int4 b)
1371 1.1.1.1.8.2 tls {
1372 1.1.1.1.8.2 tls return ((vec_uint4)(si_rot((qword)(a), (qword)(b))));
1373 1.1.1.1.8.2 tls }
1374 1.1.1.1.8.2 tls
1375 1.1.1.1.8.2 tls static __inline vec_int4 spu_rl(vec_int4 a, vec_int4 b)
1376 1.1.1.1.8.2 tls {
1377 1.1.1.1.8.2 tls return ((vec_int4)(si_rot((qword)(a), (qword)(b))));
1378 1.1.1.1.8.2 tls }
1379 1.1.1.1.8.2 tls
1380 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_rl(vec_ushort8 a, int b)
1381 1.1.1.1.8.2 tls {
1382 1.1.1.1.8.2 tls return ((vec_ushort8)(si_rothi((qword)(a), b)));
1383 1.1.1.1.8.2 tls }
1384 1.1.1.1.8.2 tls
1385 1.1.1.1.8.2 tls static __inline vec_short8 spu_rl(vec_short8 a, int b)
1386 1.1.1.1.8.2 tls {
1387 1.1.1.1.8.2 tls return ((vec_short8)(si_rothi((qword)(a), b)));
1388 1.1.1.1.8.2 tls }
1389 1.1.1.1.8.2 tls
1390 1.1.1.1.8.2 tls static __inline vec_uint4 spu_rl(vec_uint4 a, int b)
1391 1.1.1.1.8.2 tls {
1392 1.1.1.1.8.2 tls return ((vec_uint4)(si_roti((qword)(a), b)));
1393 1.1.1.1.8.2 tls }
1394 1.1.1.1.8.2 tls
1395 1.1.1.1.8.2 tls static __inline vec_int4 spu_rl(vec_int4 a, int b)
1396 1.1.1.1.8.2 tls {
1397 1.1.1.1.8.2 tls return ((vec_int4)(si_roti((qword)(a), b)));
1398 1.1.1.1.8.2 tls }
1399 1.1.1.1.8.2 tls
1400 1.1.1.1.8.2 tls
1401 1.1.1.1.8.2 tls /* spu_rlmask
1402 1.1.1.1.8.2 tls * ==========
1403 1.1.1.1.8.2 tls */
1404 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_rlmask(vec_ushort8 a, vec_short8 b)
1405 1.1.1.1.8.2 tls {
1406 1.1.1.1.8.2 tls return ((vec_ushort8)(si_rothm((qword)(a), (qword)(b))));
1407 1.1.1.1.8.2 tls }
1408 1.1.1.1.8.2 tls
1409 1.1.1.1.8.2 tls static __inline vec_short8 spu_rlmask(vec_short8 a, vec_short8 b)
1410 1.1.1.1.8.2 tls {
1411 1.1.1.1.8.2 tls return ((vec_short8)(si_rothm((qword)(a), (qword)(b))));
1412 1.1.1.1.8.2 tls }
1413 1.1.1.1.8.2 tls
1414 1.1.1.1.8.2 tls static __inline vec_uint4 spu_rlmask(vec_uint4 a, vec_int4 b)
1415 1.1.1.1.8.2 tls {
1416 1.1.1.1.8.2 tls return ((vec_uint4)(si_rotm((qword)(a), (qword)(b))));
1417 1.1.1.1.8.2 tls }
1418 1.1.1.1.8.2 tls
1419 1.1.1.1.8.2 tls static __inline vec_int4 spu_rlmask(vec_int4 a, vec_int4 b)
1420 1.1.1.1.8.2 tls {
1421 1.1.1.1.8.2 tls return ((vec_int4)(si_rotm((qword)(a), (qword)(b))));
1422 1.1.1.1.8.2 tls }
1423 1.1.1.1.8.2 tls
1424 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_rlmask(vec_ushort8 a, int b)
1425 1.1.1.1.8.2 tls {
1426 1.1.1.1.8.2 tls return ((vec_ushort8)(si_rothmi((qword)(a), b)));
1427 1.1.1.1.8.2 tls }
1428 1.1.1.1.8.2 tls
1429 1.1.1.1.8.2 tls static __inline vec_short8 spu_rlmask(vec_short8 a, int b)
1430 1.1.1.1.8.2 tls {
1431 1.1.1.1.8.2 tls return ((vec_short8)(si_rothmi((qword)(a), b)));
1432 1.1.1.1.8.2 tls }
1433 1.1.1.1.8.2 tls
1434 1.1.1.1.8.2 tls
1435 1.1.1.1.8.2 tls static __inline vec_uint4 spu_rlmask(vec_uint4 a, int b)
1436 1.1.1.1.8.2 tls {
1437 1.1.1.1.8.2 tls return ((vec_uint4)(si_rotmi((qword)(a), b)));
1438 1.1.1.1.8.2 tls }
1439 1.1.1.1.8.2 tls
1440 1.1.1.1.8.2 tls static __inline vec_int4 spu_rlmask(vec_int4 a, int b)
1441 1.1.1.1.8.2 tls {
1442 1.1.1.1.8.2 tls return ((vec_int4)(si_rotmi((qword)(a), b)));
1443 1.1.1.1.8.2 tls }
1444 1.1.1.1.8.2 tls
1445 1.1.1.1.8.2 tls /* spu_rlmaska
1446 1.1.1.1.8.2 tls * ===========
1447 1.1.1.1.8.2 tls */
1448 1.1.1.1.8.2 tls static __inline vec_short8 spu_rlmaska(vec_short8 a, vec_short8 b)
1449 1.1.1.1.8.2 tls {
1450 1.1.1.1.8.2 tls return ((vec_short8)(si_rotmah((qword)(a), (qword)(b))));
1451 1.1.1.1.8.2 tls }
1452 1.1.1.1.8.2 tls
1453 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_rlmaska(vec_ushort8 a, vec_short8 b)
1454 1.1.1.1.8.2 tls {
1455 1.1.1.1.8.2 tls return ((vec_ushort8)(si_rotmah((qword)(a), (qword)(b))));
1456 1.1.1.1.8.2 tls }
1457 1.1.1.1.8.2 tls
1458 1.1.1.1.8.2 tls
1459 1.1.1.1.8.2 tls static __inline vec_int4 spu_rlmaska(vec_int4 a, vec_int4 b)
1460 1.1.1.1.8.2 tls {
1461 1.1.1.1.8.2 tls return ((vec_int4)(si_rotma((qword)(a), (qword)(b))));
1462 1.1.1.1.8.2 tls }
1463 1.1.1.1.8.2 tls
1464 1.1.1.1.8.2 tls static __inline vec_uint4 spu_rlmaska(vec_uint4 a, vec_int4 b)
1465 1.1.1.1.8.2 tls {
1466 1.1.1.1.8.2 tls return ((vec_uint4)(si_rotma((qword)(a), (qword)(b))));
1467 1.1.1.1.8.2 tls }
1468 1.1.1.1.8.2 tls
1469 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_rlmaska(vec_ushort8 a, int b)
1470 1.1.1.1.8.2 tls {
1471 1.1.1.1.8.2 tls return ((vec_ushort8)(si_rotmahi((qword)(a), b)));
1472 1.1.1.1.8.2 tls }
1473 1.1.1.1.8.2 tls
1474 1.1.1.1.8.2 tls static __inline vec_short8 spu_rlmaska(vec_short8 a, int b)
1475 1.1.1.1.8.2 tls {
1476 1.1.1.1.8.2 tls return ((vec_short8)(si_rotmahi((qword)(a), b)));
1477 1.1.1.1.8.2 tls }
1478 1.1.1.1.8.2 tls
1479 1.1.1.1.8.2 tls static __inline vec_uint4 spu_rlmaska(vec_uint4 a, int b)
1480 1.1.1.1.8.2 tls {
1481 1.1.1.1.8.2 tls return ((vec_uint4)(si_rotmai((qword)(a), b)));
1482 1.1.1.1.8.2 tls }
1483 1.1.1.1.8.2 tls
1484 1.1.1.1.8.2 tls static __inline vec_int4 spu_rlmaska(vec_int4 a, int b)
1485 1.1.1.1.8.2 tls {
1486 1.1.1.1.8.2 tls return ((vec_int4)(si_rotmai((qword)(a), b)));
1487 1.1.1.1.8.2 tls }
1488 1.1.1.1.8.2 tls
1489 1.1.1.1.8.2 tls
1490 1.1.1.1.8.2 tls /* spu_rlmaskqw
1491 1.1.1.1.8.2 tls * ============
1492 1.1.1.1.8.2 tls */
1493 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_rlmaskqw(vec_uchar16 a, int count)
1494 1.1.1.1.8.2 tls {
1495 1.1.1.1.8.2 tls return ((vec_uchar16)(si_rotqmbi((qword)(a), si_from_int(count))));
1496 1.1.1.1.8.2 tls }
1497 1.1.1.1.8.2 tls
1498 1.1.1.1.8.2 tls static __inline vec_char16 spu_rlmaskqw(vec_char16 a, int count)
1499 1.1.1.1.8.2 tls {
1500 1.1.1.1.8.2 tls return ((vec_char16)(si_rotqmbi((qword)(a), si_from_int(count))));
1501 1.1.1.1.8.2 tls }
1502 1.1.1.1.8.2 tls
1503 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_rlmaskqw(vec_ushort8 a, int count)
1504 1.1.1.1.8.2 tls {
1505 1.1.1.1.8.2 tls return ((vec_ushort8)(si_rotqmbi((qword)(a), si_from_int(count))));
1506 1.1.1.1.8.2 tls }
1507 1.1.1.1.8.2 tls
1508 1.1.1.1.8.2 tls static __inline vec_short8 spu_rlmaskqw(vec_short8 a, int count)
1509 1.1.1.1.8.2 tls {
1510 1.1.1.1.8.2 tls return ((vec_short8)(si_rotqmbi((qword)(a), si_from_int(count))));
1511 1.1.1.1.8.2 tls }
1512 1.1.1.1.8.2 tls
1513 1.1.1.1.8.2 tls static __inline vec_uint4 spu_rlmaskqw(vec_uint4 a, int count)
1514 1.1.1.1.8.2 tls {
1515 1.1.1.1.8.2 tls return ((vec_uint4)(si_rotqmbi((qword)(a), si_from_int(count))));
1516 1.1.1.1.8.2 tls }
1517 1.1.1.1.8.2 tls
1518 1.1.1.1.8.2 tls static __inline vec_int4 spu_rlmaskqw(vec_int4 a, int count)
1519 1.1.1.1.8.2 tls {
1520 1.1.1.1.8.2 tls return ((vec_int4)(si_rotqmbi((qword)(a), si_from_int(count))));
1521 1.1.1.1.8.2 tls }
1522 1.1.1.1.8.2 tls
1523 1.1.1.1.8.2 tls static __inline vec_float4 spu_rlmaskqw(vec_float4 a, int count)
1524 1.1.1.1.8.2 tls {
1525 1.1.1.1.8.2 tls return ((vec_float4)(si_rotqmbi((qword)(a), si_from_int(count))));
1526 1.1.1.1.8.2 tls }
1527 1.1.1.1.8.2 tls
1528 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_rlmaskqw(vec_ullong2 a, int count)
1529 1.1.1.1.8.2 tls {
1530 1.1.1.1.8.2 tls return ((vec_ullong2)(si_rotqmbi((qword)(a), si_from_int(count))));
1531 1.1.1.1.8.2 tls }
1532 1.1.1.1.8.2 tls
1533 1.1.1.1.8.2 tls static __inline vec_llong2 spu_rlmaskqw(vec_llong2 a, int count)
1534 1.1.1.1.8.2 tls {
1535 1.1.1.1.8.2 tls return ((vec_llong2)(si_rotqmbi((qword)(a), si_from_int(count))));
1536 1.1.1.1.8.2 tls }
1537 1.1.1.1.8.2 tls
1538 1.1.1.1.8.2 tls static __inline vec_double2 spu_rlmaskqw(vec_double2 a, int count)
1539 1.1.1.1.8.2 tls {
1540 1.1.1.1.8.2 tls return ((vec_double2)(si_rotqmbi((qword)(a), si_from_int(count))));
1541 1.1.1.1.8.2 tls }
1542 1.1.1.1.8.2 tls
1543 1.1.1.1.8.2 tls /* spu_rlmaskqwbyte
1544 1.1.1.1.8.2 tls * ================
1545 1.1.1.1.8.2 tls */
1546 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_rlmaskqwbyte(vec_uchar16 a, int count)
1547 1.1.1.1.8.2 tls {
1548 1.1.1.1.8.2 tls return ((vec_uchar16)(si_rotqmby((qword)(a), si_from_int(count))));
1549 1.1.1.1.8.2 tls }
1550 1.1.1.1.8.2 tls
1551 1.1.1.1.8.2 tls static __inline vec_char16 spu_rlmaskqwbyte(vec_char16 a, int count)
1552 1.1.1.1.8.2 tls {
1553 1.1.1.1.8.2 tls return ((vec_char16)(si_rotqmby((qword)(a), si_from_int(count))));
1554 1.1.1.1.8.2 tls }
1555 1.1.1.1.8.2 tls
1556 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_rlmaskqwbyte(vec_ushort8 a, int count)
1557 1.1.1.1.8.2 tls {
1558 1.1.1.1.8.2 tls return ((vec_ushort8)(si_rotqmby((qword)(a), si_from_int(count))));
1559 1.1.1.1.8.2 tls }
1560 1.1.1.1.8.2 tls
1561 1.1.1.1.8.2 tls static __inline vec_short8 spu_rlmaskqwbyte(vec_short8 a, int count)
1562 1.1.1.1.8.2 tls {
1563 1.1.1.1.8.2 tls return ((vec_short8)(si_rotqmby((qword)(a), si_from_int(count))));
1564 1.1.1.1.8.2 tls }
1565 1.1.1.1.8.2 tls
1566 1.1.1.1.8.2 tls static __inline vec_uint4 spu_rlmaskqwbyte(vec_uint4 a, int count)
1567 1.1.1.1.8.2 tls {
1568 1.1.1.1.8.2 tls return ((vec_uint4)(si_rotqmby((qword)(a), si_from_int(count))));
1569 1.1.1.1.8.2 tls }
1570 1.1.1.1.8.2 tls
1571 1.1.1.1.8.2 tls static __inline vec_int4 spu_rlmaskqwbyte(vec_int4 a, int count)
1572 1.1.1.1.8.2 tls {
1573 1.1.1.1.8.2 tls return ((vec_int4)(si_rotqmby((qword)(a), si_from_int(count))));
1574 1.1.1.1.8.2 tls }
1575 1.1.1.1.8.2 tls
1576 1.1.1.1.8.2 tls static __inline vec_float4 spu_rlmaskqwbyte(vec_float4 a, int count)
1577 1.1.1.1.8.2 tls {
1578 1.1.1.1.8.2 tls return ((vec_float4)(si_rotqmby((qword)(a), si_from_int(count))));
1579 1.1.1.1.8.2 tls }
1580 1.1.1.1.8.2 tls
1581 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_rlmaskqwbyte(vec_ullong2 a, int count)
1582 1.1.1.1.8.2 tls {
1583 1.1.1.1.8.2 tls return ((vec_ullong2)(si_rotqmby((qword)(a), si_from_int(count))));
1584 1.1.1.1.8.2 tls }
1585 1.1.1.1.8.2 tls
1586 1.1.1.1.8.2 tls static __inline vec_llong2 spu_rlmaskqwbyte(vec_llong2 a, int count)
1587 1.1.1.1.8.2 tls {
1588 1.1.1.1.8.2 tls return ((vec_llong2)(si_rotqmby((qword)(a), si_from_int(count))));
1589 1.1.1.1.8.2 tls }
1590 1.1.1.1.8.2 tls
1591 1.1.1.1.8.2 tls static __inline vec_double2 spu_rlmaskqwbyte(vec_double2 a, int count)
1592 1.1.1.1.8.2 tls {
1593 1.1.1.1.8.2 tls return ((vec_double2)(si_rotqmby((qword)(a), si_from_int(count))));
1594 1.1.1.1.8.2 tls }
1595 1.1.1.1.8.2 tls
1596 1.1.1.1.8.2 tls /* spu_rlmaskqwbytebc
1597 1.1.1.1.8.2 tls * ==================
1598 1.1.1.1.8.2 tls */
1599 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_rlmaskqwbytebc(vec_uchar16 a, int count)
1600 1.1.1.1.8.2 tls {
1601 1.1.1.1.8.2 tls return ((vec_uchar16)(si_rotqmbybi((qword)(a), si_from_int(count))));
1602 1.1.1.1.8.2 tls }
1603 1.1.1.1.8.2 tls
1604 1.1.1.1.8.2 tls static __inline vec_char16 spu_rlmaskqwbytebc(vec_char16 a, int count)
1605 1.1.1.1.8.2 tls {
1606 1.1.1.1.8.2 tls return ((vec_char16)(si_rotqmbybi((qword)(a), si_from_int(count))));
1607 1.1.1.1.8.2 tls }
1608 1.1.1.1.8.2 tls
1609 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_rlmaskqwbytebc(vec_ushort8 a, int count)
1610 1.1.1.1.8.2 tls {
1611 1.1.1.1.8.2 tls return ((vec_ushort8)(si_rotqmbybi((qword)(a), si_from_int(count))));
1612 1.1.1.1.8.2 tls }
1613 1.1.1.1.8.2 tls
1614 1.1.1.1.8.2 tls static __inline vec_short8 spu_rlmaskqwbytebc(vec_short8 a, int count)
1615 1.1.1.1.8.2 tls {
1616 1.1.1.1.8.2 tls return ((vec_short8)(si_rotqmbybi((qword)(a), si_from_int(count))));
1617 1.1.1.1.8.2 tls }
1618 1.1.1.1.8.2 tls
1619 1.1.1.1.8.2 tls static __inline vec_uint4 spu_rlmaskqwbytebc(vec_uint4 a, int count)
1620 1.1.1.1.8.2 tls {
1621 1.1.1.1.8.2 tls return ((vec_uint4)(si_rotqmbybi((qword)(a), si_from_int(count))));
1622 1.1.1.1.8.2 tls }
1623 1.1.1.1.8.2 tls
1624 1.1.1.1.8.2 tls static __inline vec_int4 spu_rlmaskqwbytebc(vec_int4 a, int count)
1625 1.1.1.1.8.2 tls {
1626 1.1.1.1.8.2 tls return ((vec_int4)(si_rotqmbybi((qword)(a), si_from_int(count))));
1627 1.1.1.1.8.2 tls }
1628 1.1.1.1.8.2 tls
1629 1.1.1.1.8.2 tls static __inline vec_float4 spu_rlmaskqwbytebc(vec_float4 a, int count)
1630 1.1.1.1.8.2 tls {
1631 1.1.1.1.8.2 tls return ((vec_float4)(si_rotqmbybi((qword)(a), si_from_int(count))));
1632 1.1.1.1.8.2 tls }
1633 1.1.1.1.8.2 tls
1634 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_rlmaskqwbytebc(vec_ullong2 a, int count)
1635 1.1.1.1.8.2 tls {
1636 1.1.1.1.8.2 tls return ((vec_ullong2)(si_rotqmbybi((qword)(a), si_from_int(count))));
1637 1.1.1.1.8.2 tls }
1638 1.1.1.1.8.2 tls
1639 1.1.1.1.8.2 tls static __inline vec_llong2 spu_rlmaskqwbytebc(vec_llong2 a, int count)
1640 1.1.1.1.8.2 tls {
1641 1.1.1.1.8.2 tls return ((vec_llong2)(si_rotqmbybi((qword)(a), si_from_int(count))));
1642 1.1.1.1.8.2 tls }
1643 1.1.1.1.8.2 tls
1644 1.1.1.1.8.2 tls static __inline vec_double2 spu_rlmaskqwbytebc(vec_double2 a, int count)
1645 1.1.1.1.8.2 tls {
1646 1.1.1.1.8.2 tls return ((vec_double2)(si_rotqmbybi((qword)(a), si_from_int(count))));
1647 1.1.1.1.8.2 tls }
1648 1.1.1.1.8.2 tls
1649 1.1.1.1.8.2 tls
1650 1.1.1.1.8.2 tls /* spu_rlqwbyte
1651 1.1.1.1.8.2 tls * ============
1652 1.1.1.1.8.2 tls */
1653 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_rlqwbyte(vec_uchar16 a, int count)
1654 1.1.1.1.8.2 tls {
1655 1.1.1.1.8.2 tls return ((vec_uchar16)(si_rotqby((qword)(a), si_from_int(count))));
1656 1.1.1.1.8.2 tls }
1657 1.1.1.1.8.2 tls
1658 1.1.1.1.8.2 tls static __inline vec_char16 spu_rlqwbyte(vec_char16 a, int count)
1659 1.1.1.1.8.2 tls {
1660 1.1.1.1.8.2 tls return ((vec_char16)(si_rotqby((qword)(a), si_from_int(count))));
1661 1.1.1.1.8.2 tls }
1662 1.1.1.1.8.2 tls
1663 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_rlqwbyte(vec_ushort8 a, int count)
1664 1.1.1.1.8.2 tls {
1665 1.1.1.1.8.2 tls return ((vec_ushort8)(si_rotqby((qword)(a), si_from_int(count))));
1666 1.1.1.1.8.2 tls }
1667 1.1.1.1.8.2 tls
1668 1.1.1.1.8.2 tls static __inline vec_short8 spu_rlqwbyte(vec_short8 a, int count)
1669 1.1.1.1.8.2 tls {
1670 1.1.1.1.8.2 tls return ((vec_short8)(si_rotqby((qword)(a), si_from_int(count))));
1671 1.1.1.1.8.2 tls }
1672 1.1.1.1.8.2 tls
1673 1.1.1.1.8.2 tls static __inline vec_uint4 spu_rlqwbyte(vec_uint4 a, int count)
1674 1.1.1.1.8.2 tls {
1675 1.1.1.1.8.2 tls return ((vec_uint4)(si_rotqby((qword)(a), si_from_int(count))));
1676 1.1.1.1.8.2 tls }
1677 1.1.1.1.8.2 tls
1678 1.1.1.1.8.2 tls static __inline vec_int4 spu_rlqwbyte(vec_int4 a, int count)
1679 1.1.1.1.8.2 tls {
1680 1.1.1.1.8.2 tls return ((vec_int4)(si_rotqby((qword)(a), si_from_int(count))));
1681 1.1.1.1.8.2 tls }
1682 1.1.1.1.8.2 tls
1683 1.1.1.1.8.2 tls static __inline vec_float4 spu_rlqwbyte(vec_float4 a, int count)
1684 1.1.1.1.8.2 tls {
1685 1.1.1.1.8.2 tls return ((vec_float4)(si_rotqby((qword)(a), si_from_int(count))));
1686 1.1.1.1.8.2 tls }
1687 1.1.1.1.8.2 tls
1688 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_rlqwbyte(vec_ullong2 a, int count)
1689 1.1.1.1.8.2 tls {
1690 1.1.1.1.8.2 tls return ((vec_ullong2)(si_rotqby((qword)(a), si_from_int(count))));
1691 1.1.1.1.8.2 tls }
1692 1.1.1.1.8.2 tls
1693 1.1.1.1.8.2 tls static __inline vec_llong2 spu_rlqwbyte(vec_llong2 a, int count)
1694 1.1.1.1.8.2 tls {
1695 1.1.1.1.8.2 tls return ((vec_llong2)(si_rotqby((qword)(a), si_from_int(count))));
1696 1.1.1.1.8.2 tls }
1697 1.1.1.1.8.2 tls
1698 1.1.1.1.8.2 tls static __inline vec_double2 spu_rlqwbyte(vec_double2 a, int count)
1699 1.1.1.1.8.2 tls {
1700 1.1.1.1.8.2 tls return ((vec_double2)(si_rotqby((qword)(a), si_from_int(count))));
1701 1.1.1.1.8.2 tls }
1702 1.1.1.1.8.2 tls
1703 1.1.1.1.8.2 tls
1704 1.1.1.1.8.2 tls /* spu_rlqwbytebc
1705 1.1.1.1.8.2 tls * ==============
1706 1.1.1.1.8.2 tls */
1707 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_rlqwbytebc(vec_uchar16 a, int count)
1708 1.1.1.1.8.2 tls {
1709 1.1.1.1.8.2 tls return ((vec_uchar16)(si_rotqbybi((qword)(a), si_from_int(count))));
1710 1.1.1.1.8.2 tls }
1711 1.1.1.1.8.2 tls
1712 1.1.1.1.8.2 tls static __inline vec_char16 spu_rlqwbytebc(vec_char16 a, int count)
1713 1.1.1.1.8.2 tls {
1714 1.1.1.1.8.2 tls return ((vec_char16)(si_rotqbybi((qword)(a), si_from_int(count))));
1715 1.1.1.1.8.2 tls }
1716 1.1.1.1.8.2 tls
1717 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_rlqwbytebc(vec_ushort8 a, int count)
1718 1.1.1.1.8.2 tls {
1719 1.1.1.1.8.2 tls return ((vec_ushort8)(si_rotqbybi((qword)(a), si_from_int(count))));
1720 1.1.1.1.8.2 tls }
1721 1.1.1.1.8.2 tls
1722 1.1.1.1.8.2 tls static __inline vec_short8 spu_rlqwbytebc(vec_short8 a, int count)
1723 1.1.1.1.8.2 tls {
1724 1.1.1.1.8.2 tls return ((vec_short8)(si_rotqbybi((qword)(a), si_from_int(count))));
1725 1.1.1.1.8.2 tls }
1726 1.1.1.1.8.2 tls
1727 1.1.1.1.8.2 tls static __inline vec_uint4 spu_rlqwbytebc(vec_uint4 a, int count)
1728 1.1.1.1.8.2 tls {
1729 1.1.1.1.8.2 tls return ((vec_uint4)(si_rotqbybi((qword)(a), si_from_int(count))));
1730 1.1.1.1.8.2 tls }
1731 1.1.1.1.8.2 tls
1732 1.1.1.1.8.2 tls static __inline vec_int4 spu_rlqwbytebc(vec_int4 a, int count)
1733 1.1.1.1.8.2 tls {
1734 1.1.1.1.8.2 tls return ((vec_int4)(si_rotqbybi((qword)(a), si_from_int(count))));
1735 1.1.1.1.8.2 tls }
1736 1.1.1.1.8.2 tls
1737 1.1.1.1.8.2 tls static __inline vec_float4 spu_rlqwbytebc(vec_float4 a, int count)
1738 1.1.1.1.8.2 tls {
1739 1.1.1.1.8.2 tls return ((vec_float4)(si_rotqbybi((qword)(a), si_from_int(count))));
1740 1.1.1.1.8.2 tls }
1741 1.1.1.1.8.2 tls
1742 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_rlqwbytebc(vec_ullong2 a, int count)
1743 1.1.1.1.8.2 tls {
1744 1.1.1.1.8.2 tls return ((vec_ullong2)(si_rotqbybi((qword)(a), si_from_int(count))));
1745 1.1.1.1.8.2 tls }
1746 1.1.1.1.8.2 tls
1747 1.1.1.1.8.2 tls static __inline vec_llong2 spu_rlqwbytebc(vec_llong2 a, int count)
1748 1.1.1.1.8.2 tls {
1749 1.1.1.1.8.2 tls return ((vec_llong2)(si_rotqbybi((qword)(a), si_from_int(count))));
1750 1.1.1.1.8.2 tls }
1751 1.1.1.1.8.2 tls
1752 1.1.1.1.8.2 tls static __inline vec_double2 spu_rlqwbytebc(vec_double2 a, int count)
1753 1.1.1.1.8.2 tls {
1754 1.1.1.1.8.2 tls return ((vec_double2)(si_rotqbybi((qword)(a), si_from_int(count))));
1755 1.1.1.1.8.2 tls }
1756 1.1.1.1.8.2 tls
1757 1.1.1.1.8.2 tls /* spu_rlqw
1758 1.1.1.1.8.2 tls * ========
1759 1.1.1.1.8.2 tls */
1760 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_rlqw(vec_uchar16 a, int count)
1761 1.1.1.1.8.2 tls {
1762 1.1.1.1.8.2 tls return ((vec_uchar16)(si_rotqbi((qword)(a), si_from_int(count))));
1763 1.1.1.1.8.2 tls }
1764 1.1.1.1.8.2 tls
1765 1.1.1.1.8.2 tls static __inline vec_char16 spu_rlqw(vec_char16 a, int count)
1766 1.1.1.1.8.2 tls {
1767 1.1.1.1.8.2 tls return ((vec_char16)(si_rotqbi((qword)(a), si_from_int(count))));
1768 1.1.1.1.8.2 tls }
1769 1.1.1.1.8.2 tls
1770 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_rlqw(vec_ushort8 a, int count)
1771 1.1.1.1.8.2 tls {
1772 1.1.1.1.8.2 tls return ((vec_ushort8)(si_rotqbi((qword)(a), si_from_int(count))));
1773 1.1.1.1.8.2 tls }
1774 1.1.1.1.8.2 tls
1775 1.1.1.1.8.2 tls static __inline vec_short8 spu_rlqw(vec_short8 a, int count)
1776 1.1.1.1.8.2 tls {
1777 1.1.1.1.8.2 tls return ((vec_short8)(si_rotqbi((qword)(a), si_from_int(count))));
1778 1.1.1.1.8.2 tls }
1779 1.1.1.1.8.2 tls
1780 1.1.1.1.8.2 tls static __inline vec_uint4 spu_rlqw(vec_uint4 a, int count)
1781 1.1.1.1.8.2 tls {
1782 1.1.1.1.8.2 tls return ((vec_uint4)(si_rotqbi((qword)(a), si_from_int(count))));
1783 1.1.1.1.8.2 tls }
1784 1.1.1.1.8.2 tls
1785 1.1.1.1.8.2 tls static __inline vec_int4 spu_rlqw(vec_int4 a, int count)
1786 1.1.1.1.8.2 tls {
1787 1.1.1.1.8.2 tls return ((vec_int4)(si_rotqbi((qword)(a), si_from_int(count))));
1788 1.1.1.1.8.2 tls }
1789 1.1.1.1.8.2 tls
1790 1.1.1.1.8.2 tls static __inline vec_float4 spu_rlqw(vec_float4 a, int count)
1791 1.1.1.1.8.2 tls {
1792 1.1.1.1.8.2 tls return ((vec_float4)(si_rotqbi((qword)(a), si_from_int(count))));
1793 1.1.1.1.8.2 tls }
1794 1.1.1.1.8.2 tls
1795 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_rlqw(vec_ullong2 a, int count)
1796 1.1.1.1.8.2 tls {
1797 1.1.1.1.8.2 tls return ((vec_ullong2)(si_rotqbi((qword)(a), si_from_int(count))));
1798 1.1.1.1.8.2 tls }
1799 1.1.1.1.8.2 tls
1800 1.1.1.1.8.2 tls static __inline vec_llong2 spu_rlqw(vec_llong2 a, int count)
1801 1.1.1.1.8.2 tls {
1802 1.1.1.1.8.2 tls return ((vec_llong2)(si_rotqbi((qword)(a), si_from_int(count))));
1803 1.1.1.1.8.2 tls }
1804 1.1.1.1.8.2 tls
1805 1.1.1.1.8.2 tls static __inline vec_double2 spu_rlqw(vec_double2 a, int count)
1806 1.1.1.1.8.2 tls {
1807 1.1.1.1.8.2 tls return ((vec_double2)(si_rotqbi((qword)(a), si_from_int(count))));
1808 1.1.1.1.8.2 tls }
1809 1.1.1.1.8.2 tls
1810 1.1.1.1.8.2 tls /* spu_roundtf
1811 1.1.1.1.8.2 tls * ===========
1812 1.1.1.1.8.2 tls */
1813 1.1.1.1.8.2 tls static __inline vec_float4 spu_roundtf(vec_double2 a)
1814 1.1.1.1.8.2 tls {
1815 1.1.1.1.8.2 tls return ((vec_float4)(si_frds((qword)(a))));
1816 1.1.1.1.8.2 tls }
1817 1.1.1.1.8.2 tls
1818 1.1.1.1.8.2 tls
1819 1.1.1.1.8.2 tls /* spu_rsqrte
1820 1.1.1.1.8.2 tls * ==========
1821 1.1.1.1.8.2 tls */
1822 1.1.1.1.8.2 tls #define spu_rsqrte(_a) vec_rsqrte(_a)
1823 1.1.1.1.8.2 tls
1824 1.1.1.1.8.2 tls
1825 1.1.1.1.8.2 tls /* spu_sel
1826 1.1.1.1.8.2 tls * =======
1827 1.1.1.1.8.2 tls */
1828 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_sel(vec_uchar16 a, vec_uchar16 b, vec_uchar16 pattern)
1829 1.1.1.1.8.2 tls {
1830 1.1.1.1.8.2 tls return ((vec_uchar16)(si_selb((qword)(a), (qword)(b), (qword)(pattern))));
1831 1.1.1.1.8.2 tls }
1832 1.1.1.1.8.2 tls
1833 1.1.1.1.8.2 tls static __inline vec_char16 spu_sel(vec_char16 a, vec_char16 b, vec_uchar16 pattern)
1834 1.1.1.1.8.2 tls {
1835 1.1.1.1.8.2 tls return ((vec_char16)(si_selb((qword)(a), (qword)(b), (qword)(pattern))));
1836 1.1.1.1.8.2 tls }
1837 1.1.1.1.8.2 tls
1838 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_sel(vec_ushort8 a, vec_ushort8 b, vec_ushort8 pattern)
1839 1.1.1.1.8.2 tls {
1840 1.1.1.1.8.2 tls return ((vec_ushort8)(si_selb((qword)(a), (qword)(b), (qword)(pattern))));
1841 1.1.1.1.8.2 tls }
1842 1.1.1.1.8.2 tls
1843 1.1.1.1.8.2 tls static __inline vec_short8 spu_sel(vec_short8 a, vec_short8 b, vec_ushort8 pattern)
1844 1.1.1.1.8.2 tls {
1845 1.1.1.1.8.2 tls return ((vec_short8)(si_selb((qword)(a), (qword)(b), (qword)(pattern))));
1846 1.1.1.1.8.2 tls }
1847 1.1.1.1.8.2 tls
1848 1.1.1.1.8.2 tls static __inline vec_uint4 spu_sel(vec_uint4 a, vec_uint4 b, vec_uint4 pattern)
1849 1.1.1.1.8.2 tls {
1850 1.1.1.1.8.2 tls return ((vec_uint4)(si_selb((qword)(a), (qword)(b), (qword)(pattern))));
1851 1.1.1.1.8.2 tls }
1852 1.1.1.1.8.2 tls
1853 1.1.1.1.8.2 tls static __inline vec_int4 spu_sel(vec_int4 a, vec_int4 b, vec_uint4 pattern)
1854 1.1.1.1.8.2 tls {
1855 1.1.1.1.8.2 tls return ((vec_int4)(si_selb((qword)(a), (qword)(b), (qword)(pattern))));
1856 1.1.1.1.8.2 tls }
1857 1.1.1.1.8.2 tls
1858 1.1.1.1.8.2 tls static __inline vec_float4 spu_sel(vec_float4 a, vec_float4 b, vec_uint4 pattern)
1859 1.1.1.1.8.2 tls {
1860 1.1.1.1.8.2 tls return ((vec_float4)(si_selb((qword)(a), (qword)(b), (qword)(pattern))));
1861 1.1.1.1.8.2 tls }
1862 1.1.1.1.8.2 tls
1863 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_sel(vec_ullong2 a, vec_ullong2 b, vec_ullong2 pattern)
1864 1.1.1.1.8.2 tls {
1865 1.1.1.1.8.2 tls return ((vec_ullong2)(si_selb((qword)(a), (qword)(b), (qword)(pattern))));
1866 1.1.1.1.8.2 tls }
1867 1.1.1.1.8.2 tls
1868 1.1.1.1.8.2 tls static __inline vec_llong2 spu_sel(vec_llong2 a, vec_llong2 b, vec_ullong2 pattern)
1869 1.1.1.1.8.2 tls {
1870 1.1.1.1.8.2 tls return ((vec_llong2)(si_selb((qword)(a), (qword)(b), (qword)(pattern))));
1871 1.1.1.1.8.2 tls }
1872 1.1.1.1.8.2 tls
1873 1.1.1.1.8.2 tls static __inline vec_double2 spu_sel(vec_double2 a, vec_double2 b, vec_ullong2 pattern)
1874 1.1.1.1.8.2 tls {
1875 1.1.1.1.8.2 tls return ((vec_double2)(si_selb((qword)(a), (qword)(b), (qword)(pattern))));
1876 1.1.1.1.8.2 tls }
1877 1.1.1.1.8.2 tls
1878 1.1.1.1.8.2 tls
1879 1.1.1.1.8.2 tls
1880 1.1.1.1.8.2 tls /* spu_shuffle
1881 1.1.1.1.8.2 tls * ===========
1882 1.1.1.1.8.2 tls */
1883 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_shuffle(vec_uchar16 a, vec_uchar16 b, vec_uchar16 pattern)
1884 1.1.1.1.8.2 tls {
1885 1.1.1.1.8.2 tls return ((vec_uchar16)(si_shufb((qword)(a), (qword)(b), (qword)(pattern))));
1886 1.1.1.1.8.2 tls }
1887 1.1.1.1.8.2 tls
1888 1.1.1.1.8.2 tls static __inline vec_char16 spu_shuffle(vec_char16 a, vec_char16 b, vec_uchar16 pattern)
1889 1.1.1.1.8.2 tls {
1890 1.1.1.1.8.2 tls return ((vec_char16)(si_shufb((qword)(a), (qword)(b), (qword)(pattern))));
1891 1.1.1.1.8.2 tls }
1892 1.1.1.1.8.2 tls
1893 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_shuffle(vec_ushort8 a, vec_ushort8 b, vec_uchar16 pattern)
1894 1.1.1.1.8.2 tls {
1895 1.1.1.1.8.2 tls return ((vec_ushort8)(si_shufb((qword)(a), (qword)(b), (qword)(pattern))));
1896 1.1.1.1.8.2 tls }
1897 1.1.1.1.8.2 tls
1898 1.1.1.1.8.2 tls static __inline vec_short8 spu_shuffle(vec_short8 a, vec_short8 b, vec_uchar16 pattern)
1899 1.1.1.1.8.2 tls {
1900 1.1.1.1.8.2 tls return ((vec_short8)(si_shufb((qword)(a), (qword)(b), (qword)(pattern))));
1901 1.1.1.1.8.2 tls }
1902 1.1.1.1.8.2 tls
1903 1.1.1.1.8.2 tls static __inline vec_uint4 spu_shuffle(vec_uint4 a, vec_uint4 b, vec_uchar16 pattern)
1904 1.1.1.1.8.2 tls {
1905 1.1.1.1.8.2 tls return ((vec_uint4)(si_shufb((qword)(a), (qword)(b), (qword)(pattern))));
1906 1.1.1.1.8.2 tls }
1907 1.1.1.1.8.2 tls
1908 1.1.1.1.8.2 tls static __inline vec_int4 spu_shuffle(vec_int4 a, vec_int4 b, vec_uchar16 pattern)
1909 1.1.1.1.8.2 tls {
1910 1.1.1.1.8.2 tls return ((vec_int4)(si_shufb((qword)(a), (qword)(b), (qword)(pattern))));
1911 1.1.1.1.8.2 tls }
1912 1.1.1.1.8.2 tls
1913 1.1.1.1.8.2 tls static __inline vec_float4 spu_shuffle(vec_float4 a, vec_float4 b, vec_uchar16 pattern)
1914 1.1.1.1.8.2 tls {
1915 1.1.1.1.8.2 tls return ((vec_float4)(si_shufb((qword)(a), (qword)(b), (qword)(pattern))));
1916 1.1.1.1.8.2 tls }
1917 1.1.1.1.8.2 tls
1918 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_shuffle(vec_ullong2 a, vec_ullong2 b, vec_uchar16 pattern)
1919 1.1.1.1.8.2 tls {
1920 1.1.1.1.8.2 tls return ((vec_ullong2)(si_shufb((qword)(a), (qword)(b), (qword)(pattern))));
1921 1.1.1.1.8.2 tls }
1922 1.1.1.1.8.2 tls
1923 1.1.1.1.8.2 tls static __inline vec_llong2 spu_shuffle(vec_llong2 a, vec_llong2 b, vec_uchar16 pattern)
1924 1.1.1.1.8.2 tls {
1925 1.1.1.1.8.2 tls return ((vec_llong2)(si_shufb((qword)(a), (qword)(b), (qword)(pattern))));
1926 1.1.1.1.8.2 tls }
1927 1.1.1.1.8.2 tls
1928 1.1.1.1.8.2 tls static __inline vec_double2 spu_shuffle(vec_double2 a, vec_double2 b, vec_uchar16 pattern)
1929 1.1.1.1.8.2 tls {
1930 1.1.1.1.8.2 tls return ((vec_double2)(si_shufb((qword)(a), (qword)(b), (qword)(pattern))));
1931 1.1.1.1.8.2 tls }
1932 1.1.1.1.8.2 tls
1933 1.1.1.1.8.2 tls
1934 1.1.1.1.8.2 tls /* spu_sl
1935 1.1.1.1.8.2 tls * ======
1936 1.1.1.1.8.2 tls */
1937 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_sl(vec_ushort8 a, vec_ushort8 b)
1938 1.1.1.1.8.2 tls {
1939 1.1.1.1.8.2 tls return ((vec_ushort8)(si_shlh((qword)(a), (qword)(b))));
1940 1.1.1.1.8.2 tls }
1941 1.1.1.1.8.2 tls
1942 1.1.1.1.8.2 tls static __inline vec_short8 spu_sl(vec_short8 a, vec_ushort8 b)
1943 1.1.1.1.8.2 tls {
1944 1.1.1.1.8.2 tls return ((vec_short8)(si_shlh((qword)(a), (qword)(b))));
1945 1.1.1.1.8.2 tls }
1946 1.1.1.1.8.2 tls
1947 1.1.1.1.8.2 tls static __inline vec_uint4 spu_sl(vec_uint4 a, vec_uint4 b)
1948 1.1.1.1.8.2 tls {
1949 1.1.1.1.8.2 tls return ((vec_uint4)(si_shl((qword)(a), (qword)(b))));
1950 1.1.1.1.8.2 tls }
1951 1.1.1.1.8.2 tls
1952 1.1.1.1.8.2 tls static __inline vec_int4 spu_sl(vec_int4 a, vec_uint4 b)
1953 1.1.1.1.8.2 tls {
1954 1.1.1.1.8.2 tls return ((vec_int4)(si_shl((qword)(a), (qword)(b))));
1955 1.1.1.1.8.2 tls }
1956 1.1.1.1.8.2 tls
1957 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_sl(vec_ushort8 a, unsigned int b)
1958 1.1.1.1.8.2 tls {
1959 1.1.1.1.8.2 tls return ((vec_ushort8)(si_shlhi((qword)(a), b)));
1960 1.1.1.1.8.2 tls }
1961 1.1.1.1.8.2 tls
1962 1.1.1.1.8.2 tls static __inline vec_short8 spu_sl(vec_short8 a, unsigned int b)
1963 1.1.1.1.8.2 tls {
1964 1.1.1.1.8.2 tls return ((vec_short8)(si_shlhi((qword)(a), b)));
1965 1.1.1.1.8.2 tls }
1966 1.1.1.1.8.2 tls
1967 1.1.1.1.8.2 tls static __inline vec_uint4 spu_sl(vec_uint4 a, unsigned int b)
1968 1.1.1.1.8.2 tls {
1969 1.1.1.1.8.2 tls return ((vec_uint4)(si_shli((qword)(a), b)));
1970 1.1.1.1.8.2 tls }
1971 1.1.1.1.8.2 tls
1972 1.1.1.1.8.2 tls static __inline vec_int4 spu_sl(vec_int4 a, unsigned int b)
1973 1.1.1.1.8.2 tls {
1974 1.1.1.1.8.2 tls return ((vec_int4)(si_shli((qword)(a), b)));
1975 1.1.1.1.8.2 tls }
1976 1.1.1.1.8.2 tls
1977 1.1.1.1.8.2 tls
1978 1.1.1.1.8.2 tls /* spu_slqw
1979 1.1.1.1.8.2 tls * ========
1980 1.1.1.1.8.2 tls */
1981 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_slqw(vec_uchar16 a, unsigned int count)
1982 1.1.1.1.8.2 tls {
1983 1.1.1.1.8.2 tls return ((vec_uchar16)(si_shlqbi((qword)(a), si_from_uint(count))));
1984 1.1.1.1.8.2 tls }
1985 1.1.1.1.8.2 tls
1986 1.1.1.1.8.2 tls static __inline vec_char16 spu_slqw(vec_char16 a, unsigned int count)
1987 1.1.1.1.8.2 tls {
1988 1.1.1.1.8.2 tls return ((vec_char16)(si_shlqbi((qword)(a), si_from_uint(count))));
1989 1.1.1.1.8.2 tls }
1990 1.1.1.1.8.2 tls
1991 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_slqw(vec_ushort8 a, unsigned int count)
1992 1.1.1.1.8.2 tls {
1993 1.1.1.1.8.2 tls return ((vec_ushort8)(si_shlqbi((qword)(a), si_from_uint(count))));
1994 1.1.1.1.8.2 tls }
1995 1.1.1.1.8.2 tls
1996 1.1.1.1.8.2 tls static __inline vec_short8 spu_slqw(vec_short8 a, unsigned int count)
1997 1.1.1.1.8.2 tls {
1998 1.1.1.1.8.2 tls return ((vec_short8)(si_shlqbi((qword)(a), si_from_uint(count))));
1999 1.1.1.1.8.2 tls }
2000 1.1.1.1.8.2 tls
2001 1.1.1.1.8.2 tls static __inline vec_uint4 spu_slqw(vec_uint4 a, unsigned int count)
2002 1.1.1.1.8.2 tls {
2003 1.1.1.1.8.2 tls return ((vec_uint4)(si_shlqbi((qword)(a), si_from_uint(count))));
2004 1.1.1.1.8.2 tls }
2005 1.1.1.1.8.2 tls
2006 1.1.1.1.8.2 tls static __inline vec_int4 spu_slqw(vec_int4 a, unsigned int count)
2007 1.1.1.1.8.2 tls {
2008 1.1.1.1.8.2 tls return ((vec_int4)(si_shlqbi((qword)(a), si_from_uint(count))));
2009 1.1.1.1.8.2 tls }
2010 1.1.1.1.8.2 tls
2011 1.1.1.1.8.2 tls static __inline vec_float4 spu_slqw(vec_float4 a, unsigned int count)
2012 1.1.1.1.8.2 tls {
2013 1.1.1.1.8.2 tls return ((vec_float4)(si_shlqbi((qword)(a), si_from_uint(count))));
2014 1.1.1.1.8.2 tls }
2015 1.1.1.1.8.2 tls
2016 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_slqw(vec_ullong2 a, unsigned int count)
2017 1.1.1.1.8.2 tls {
2018 1.1.1.1.8.2 tls return ((vec_ullong2)(si_shlqbi((qword)(a), si_from_uint(count))));
2019 1.1.1.1.8.2 tls }
2020 1.1.1.1.8.2 tls
2021 1.1.1.1.8.2 tls static __inline vec_llong2 spu_slqw(vec_llong2 a, unsigned int count)
2022 1.1.1.1.8.2 tls {
2023 1.1.1.1.8.2 tls return ((vec_llong2)(si_shlqbi((qword)(a), si_from_uint(count))));
2024 1.1.1.1.8.2 tls }
2025 1.1.1.1.8.2 tls
2026 1.1.1.1.8.2 tls static __inline vec_double2 spu_slqw(vec_double2 a, unsigned int count)
2027 1.1.1.1.8.2 tls {
2028 1.1.1.1.8.2 tls return ((vec_double2)(si_shlqbi((qword)(a), si_from_uint(count))));
2029 1.1.1.1.8.2 tls }
2030 1.1.1.1.8.2 tls
2031 1.1.1.1.8.2 tls /* spu_slqwbyte
2032 1.1.1.1.8.2 tls * ============
2033 1.1.1.1.8.2 tls */
2034 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_slqwbyte(vec_uchar16 a, unsigned int count)
2035 1.1.1.1.8.2 tls {
2036 1.1.1.1.8.2 tls return ((vec_uchar16)(si_shlqby((qword)(a), si_from_uint(count))));
2037 1.1.1.1.8.2 tls }
2038 1.1.1.1.8.2 tls
2039 1.1.1.1.8.2 tls static __inline vec_char16 spu_slqwbyte(vec_char16 a, unsigned int count)
2040 1.1.1.1.8.2 tls {
2041 1.1.1.1.8.2 tls return ((vec_char16)(si_shlqby((qword)(a), si_from_uint(count))));
2042 1.1.1.1.8.2 tls }
2043 1.1.1.1.8.2 tls
2044 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_slqwbyte(vec_ushort8 a, unsigned int count)
2045 1.1.1.1.8.2 tls {
2046 1.1.1.1.8.2 tls return ((vec_ushort8)(si_shlqby((qword)(a), si_from_uint(count))));
2047 1.1.1.1.8.2 tls }
2048 1.1.1.1.8.2 tls
2049 1.1.1.1.8.2 tls static __inline vec_short8 spu_slqwbyte(vec_short8 a, unsigned int count)
2050 1.1.1.1.8.2 tls {
2051 1.1.1.1.8.2 tls return ((vec_short8)(si_shlqby((qword)(a), si_from_uint(count))));
2052 1.1.1.1.8.2 tls }
2053 1.1.1.1.8.2 tls
2054 1.1.1.1.8.2 tls static __inline vec_uint4 spu_slqwbyte(vec_uint4 a, unsigned int count)
2055 1.1.1.1.8.2 tls {
2056 1.1.1.1.8.2 tls return ((vec_uint4)(si_shlqby((qword)(a), si_from_uint(count))));
2057 1.1.1.1.8.2 tls }
2058 1.1.1.1.8.2 tls
2059 1.1.1.1.8.2 tls static __inline vec_int4 spu_slqwbyte(vec_int4 a, unsigned int count)
2060 1.1.1.1.8.2 tls {
2061 1.1.1.1.8.2 tls return ((vec_int4)(si_shlqby((qword)(a), si_from_uint(count))));
2062 1.1.1.1.8.2 tls }
2063 1.1.1.1.8.2 tls
2064 1.1.1.1.8.2 tls static __inline vec_float4 spu_slqwbyte(vec_float4 a, unsigned int count)
2065 1.1.1.1.8.2 tls {
2066 1.1.1.1.8.2 tls return ((vec_float4)(si_shlqby((qword)(a), si_from_uint(count))));
2067 1.1.1.1.8.2 tls }
2068 1.1.1.1.8.2 tls
2069 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_slqwbyte(vec_ullong2 a, unsigned int count)
2070 1.1.1.1.8.2 tls {
2071 1.1.1.1.8.2 tls return ((vec_ullong2)(si_shlqby((qword)(a), si_from_uint(count))));
2072 1.1.1.1.8.2 tls }
2073 1.1.1.1.8.2 tls
2074 1.1.1.1.8.2 tls static __inline vec_llong2 spu_slqwbyte(vec_llong2 a, unsigned int count)
2075 1.1.1.1.8.2 tls {
2076 1.1.1.1.8.2 tls return ((vec_llong2)(si_shlqby((qword)(a), si_from_uint(count))));
2077 1.1.1.1.8.2 tls }
2078 1.1.1.1.8.2 tls
2079 1.1.1.1.8.2 tls static __inline vec_double2 spu_slqwbyte(vec_double2 a, unsigned int count)
2080 1.1.1.1.8.2 tls {
2081 1.1.1.1.8.2 tls return ((vec_double2)(si_shlqby((qword)(a), si_from_uint(count))));
2082 1.1.1.1.8.2 tls }
2083 1.1.1.1.8.2 tls
2084 1.1.1.1.8.2 tls /* spu_slqwbytebc
2085 1.1.1.1.8.2 tls * ==============
2086 1.1.1.1.8.2 tls */
2087 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_slqwbytebc(vec_uchar16 a, unsigned int count)
2088 1.1.1.1.8.2 tls {
2089 1.1.1.1.8.2 tls return ((vec_uchar16)(si_shlqbybi((qword)(a), si_from_uint(count))));
2090 1.1.1.1.8.2 tls }
2091 1.1.1.1.8.2 tls
2092 1.1.1.1.8.2 tls static __inline vec_char16 spu_slqwbytebc(vec_char16 a, unsigned int count)
2093 1.1.1.1.8.2 tls {
2094 1.1.1.1.8.2 tls return ((vec_char16)(si_shlqbybi((qword)(a), si_from_uint(count))));
2095 1.1.1.1.8.2 tls }
2096 1.1.1.1.8.2 tls
2097 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_slqwbytebc(vec_ushort8 a, unsigned int count)
2098 1.1.1.1.8.2 tls {
2099 1.1.1.1.8.2 tls return ((vec_ushort8)(si_shlqbybi((qword)(a), si_from_uint(count))));
2100 1.1.1.1.8.2 tls }
2101 1.1.1.1.8.2 tls
2102 1.1.1.1.8.2 tls static __inline vec_short8 spu_slqwbytebc(vec_short8 a, unsigned int count)
2103 1.1.1.1.8.2 tls {
2104 1.1.1.1.8.2 tls return ((vec_short8)(si_shlqbybi((qword)(a), si_from_uint(count))));
2105 1.1.1.1.8.2 tls }
2106 1.1.1.1.8.2 tls
2107 1.1.1.1.8.2 tls static __inline vec_uint4 spu_slqwbytebc(vec_uint4 a, unsigned int count)
2108 1.1.1.1.8.2 tls {
2109 1.1.1.1.8.2 tls return ((vec_uint4)(si_shlqbybi((qword)(a), si_from_uint(count))));
2110 1.1.1.1.8.2 tls }
2111 1.1.1.1.8.2 tls
2112 1.1.1.1.8.2 tls static __inline vec_int4 spu_slqwbytebc(vec_int4 a, unsigned int count)
2113 1.1.1.1.8.2 tls {
2114 1.1.1.1.8.2 tls return ((vec_int4)(si_shlqbybi((qword)(a), si_from_uint(count))));
2115 1.1.1.1.8.2 tls }
2116 1.1.1.1.8.2 tls
2117 1.1.1.1.8.2 tls static __inline vec_float4 spu_slqwbytebc(vec_float4 a, unsigned int count)
2118 1.1.1.1.8.2 tls {
2119 1.1.1.1.8.2 tls return ((vec_float4)(si_shlqbybi((qword)(a), si_from_uint(count))));
2120 1.1.1.1.8.2 tls }
2121 1.1.1.1.8.2 tls
2122 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_slqwbytebc(vec_ullong2 a, unsigned int count)
2123 1.1.1.1.8.2 tls {
2124 1.1.1.1.8.2 tls return ((vec_ullong2)(si_shlqbybi((qword)(a), si_from_uint(count))));
2125 1.1.1.1.8.2 tls }
2126 1.1.1.1.8.2 tls
2127 1.1.1.1.8.2 tls static __inline vec_llong2 spu_slqwbytebc(vec_llong2 a, unsigned int count)
2128 1.1.1.1.8.2 tls {
2129 1.1.1.1.8.2 tls return ((vec_llong2)(si_shlqbybi((qword)(a), si_from_uint(count))));
2130 1.1.1.1.8.2 tls }
2131 1.1.1.1.8.2 tls
2132 1.1.1.1.8.2 tls static __inline vec_double2 spu_slqwbytebc(vec_double2 a, unsigned int count)
2133 1.1.1.1.8.2 tls {
2134 1.1.1.1.8.2 tls return ((vec_double2)(si_shlqbybi((qword)(a), si_from_uint(count))));
2135 1.1.1.1.8.2 tls }
2136 1.1.1.1.8.2 tls
2137 1.1.1.1.8.2 tls /* spu_splats
2138 1.1.1.1.8.2 tls * ==========
2139 1.1.1.1.8.2 tls */
2140 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_splats(unsigned char a)
2141 1.1.1.1.8.2 tls {
2142 1.1.1.1.8.2 tls union {
2143 1.1.1.1.8.2 tls vec_uchar16 v;
2144 1.1.1.1.8.2 tls unsigned char c[16];
2145 1.1.1.1.8.2 tls } in;
2146 1.1.1.1.8.2 tls
2147 1.1.1.1.8.2 tls in.c[0] = a;
2148 1.1.1.1.8.2 tls return (vec_splat(in.v, 0));
2149 1.1.1.1.8.2 tls }
2150 1.1.1.1.8.2 tls
2151 1.1.1.1.8.2 tls static __inline vec_char16 spu_splats(signed char a)
2152 1.1.1.1.8.2 tls {
2153 1.1.1.1.8.2 tls return ((vec_char16)spu_splats((unsigned char)(a)));
2154 1.1.1.1.8.2 tls }
2155 1.1.1.1.8.2 tls
2156 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_splats(unsigned short a)
2157 1.1.1.1.8.2 tls {
2158 1.1.1.1.8.2 tls union {
2159 1.1.1.1.8.2 tls vec_ushort8 v;
2160 1.1.1.1.8.2 tls unsigned short s[8];
2161 1.1.1.1.8.2 tls } in;
2162 1.1.1.1.8.2 tls
2163 1.1.1.1.8.2 tls in.s[0] = a;
2164 1.1.1.1.8.2 tls return (vec_splat(in.v, 0));
2165 1.1.1.1.8.2 tls }
2166 1.1.1.1.8.2 tls
2167 1.1.1.1.8.2 tls static __inline vec_short8 spu_splats(signed short a)
2168 1.1.1.1.8.2 tls {
2169 1.1.1.1.8.2 tls return ((vec_short8)spu_splats((unsigned short)(a)));
2170 1.1.1.1.8.2 tls }
2171 1.1.1.1.8.2 tls
2172 1.1.1.1.8.2 tls static __inline vec_uint4 spu_splats(unsigned int a)
2173 1.1.1.1.8.2 tls {
2174 1.1.1.1.8.2 tls union {
2175 1.1.1.1.8.2 tls vec_uint4 v;
2176 1.1.1.1.8.2 tls unsigned int i[4];
2177 1.1.1.1.8.2 tls } in;
2178 1.1.1.1.8.2 tls
2179 1.1.1.1.8.2 tls in.i[0] = a;
2180 1.1.1.1.8.2 tls return (vec_splat(in.v, 0));
2181 1.1.1.1.8.2 tls }
2182 1.1.1.1.8.2 tls
2183 1.1.1.1.8.2 tls static __inline vec_int4 spu_splats(signed int a)
2184 1.1.1.1.8.2 tls {
2185 1.1.1.1.8.2 tls return ((vec_int4)spu_splats((unsigned int)(a)));
2186 1.1.1.1.8.2 tls }
2187 1.1.1.1.8.2 tls
2188 1.1.1.1.8.2 tls static __inline vec_float4 spu_splats(float a)
2189 1.1.1.1.8.2 tls {
2190 1.1.1.1.8.2 tls union {
2191 1.1.1.1.8.2 tls vec_float4 v;
2192 1.1.1.1.8.2 tls float f[4];
2193 1.1.1.1.8.2 tls } in;
2194 1.1.1.1.8.2 tls
2195 1.1.1.1.8.2 tls in.f[0] = a;
2196 1.1.1.1.8.2 tls return (vec_splat(in.v, 0));
2197 1.1.1.1.8.2 tls }
2198 1.1.1.1.8.2 tls
2199 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_splats(unsigned long long a)
2200 1.1.1.1.8.2 tls {
2201 1.1.1.1.8.2 tls union {
2202 1.1.1.1.8.2 tls vec_ullong2 v;
2203 1.1.1.1.8.2 tls unsigned long long l[2];
2204 1.1.1.1.8.2 tls } in;
2205 1.1.1.1.8.2 tls
2206 1.1.1.1.8.2 tls in.l[0] = a;
2207 1.1.1.1.8.2 tls in.l[1] = a;
2208 1.1.1.1.8.2 tls return (in.v);
2209 1.1.1.1.8.2 tls }
2210 1.1.1.1.8.2 tls
2211 1.1.1.1.8.2 tls static __inline vec_llong2 spu_splats(signed long long a)
2212 1.1.1.1.8.2 tls {
2213 1.1.1.1.8.2 tls return ((vec_llong2)spu_splats((unsigned long long)(a)));
2214 1.1.1.1.8.2 tls }
2215 1.1.1.1.8.2 tls
2216 1.1.1.1.8.2 tls static __inline vec_double2 spu_splats(double a)
2217 1.1.1.1.8.2 tls {
2218 1.1.1.1.8.2 tls union {
2219 1.1.1.1.8.2 tls vec_double2 v;
2220 1.1.1.1.8.2 tls double d[2];
2221 1.1.1.1.8.2 tls } in;
2222 1.1.1.1.8.2 tls
2223 1.1.1.1.8.2 tls in.d[0] = a;
2224 1.1.1.1.8.2 tls in.d[1] = a;
2225 1.1.1.1.8.2 tls return (in.v);
2226 1.1.1.1.8.2 tls }
2227 1.1.1.1.8.2 tls
2228 1.1.1.1.8.2 tls
2229 1.1.1.1.8.2 tls /* spu_stop
2230 1.1.1.1.8.2 tls * ========
2231 1.1.1.1.8.2 tls */
2232 1.1.1.1.8.2 tls #define spu_stop(_type) si_stop(_type)
2233 1.1.1.1.8.2 tls
2234 1.1.1.1.8.2 tls
2235 1.1.1.1.8.2 tls /* spu_sub
2236 1.1.1.1.8.2 tls * =======
2237 1.1.1.1.8.2 tls */
2238 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_sub(vec_ushort8 a, vec_ushort8 b)
2239 1.1.1.1.8.2 tls {
2240 1.1.1.1.8.2 tls return ((vec_ushort8)(si_sfh((qword)(b), (qword)(a))));
2241 1.1.1.1.8.2 tls }
2242 1.1.1.1.8.2 tls
2243 1.1.1.1.8.2 tls static __inline vec_short8 spu_sub(vec_short8 a, vec_short8 b)
2244 1.1.1.1.8.2 tls {
2245 1.1.1.1.8.2 tls return ((vec_short8)(si_sfh((qword)(b), (qword)(a))));
2246 1.1.1.1.8.2 tls }
2247 1.1.1.1.8.2 tls
2248 1.1.1.1.8.2 tls static __inline vec_uint4 spu_sub(vec_uint4 a, vec_uint4 b)
2249 1.1.1.1.8.2 tls {
2250 1.1.1.1.8.2 tls return ((vec_uint4)(si_sf((qword)(b), (qword)(a))));
2251 1.1.1.1.8.2 tls }
2252 1.1.1.1.8.2 tls
2253 1.1.1.1.8.2 tls static __inline vec_int4 spu_sub(vec_int4 a, vec_int4 b)
2254 1.1.1.1.8.2 tls {
2255 1.1.1.1.8.2 tls return ((vec_int4)(si_sf((qword)(b), (qword)(a))));
2256 1.1.1.1.8.2 tls }
2257 1.1.1.1.8.2 tls
2258 1.1.1.1.8.2 tls static __inline vec_float4 spu_sub(vec_float4 a, vec_float4 b)
2259 1.1.1.1.8.2 tls {
2260 1.1.1.1.8.2 tls return ((vec_float4)(si_fs((qword)(a), (qword)(b))));
2261 1.1.1.1.8.2 tls }
2262 1.1.1.1.8.2 tls
2263 1.1.1.1.8.2 tls static __inline vec_double2 spu_sub(vec_double2 a, vec_double2 b)
2264 1.1.1.1.8.2 tls {
2265 1.1.1.1.8.2 tls return ((vec_double2)(si_dfs((qword)(a), (qword)(b))));
2266 1.1.1.1.8.2 tls }
2267 1.1.1.1.8.2 tls
2268 1.1.1.1.8.2 tls static __inline vec_uint4 spu_sub(unsigned int a, vec_uint4 b)
2269 1.1.1.1.8.2 tls {
2270 1.1.1.1.8.2 tls return ((vec_uint4)(si_sfi((qword)b, (int)a)));
2271 1.1.1.1.8.2 tls }
2272 1.1.1.1.8.2 tls
2273 1.1.1.1.8.2 tls static __inline vec_int4 spu_sub(signed int a, vec_int4 b)
2274 1.1.1.1.8.2 tls {
2275 1.1.1.1.8.2 tls return ((vec_int4)(si_sfi((qword)b, (int)a)));
2276 1.1.1.1.8.2 tls }
2277 1.1.1.1.8.2 tls
2278 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_sub(unsigned short a, vec_ushort8 b)
2279 1.1.1.1.8.2 tls {
2280 1.1.1.1.8.2 tls return ((vec_ushort8)(si_sfhi((qword)b, (short)a)));
2281 1.1.1.1.8.2 tls }
2282 1.1.1.1.8.2 tls
2283 1.1.1.1.8.2 tls static __inline vec_short8 spu_sub(signed short a, vec_short8 b)
2284 1.1.1.1.8.2 tls {
2285 1.1.1.1.8.2 tls return ((vec_short8)(si_sfhi((qword)b, (short)a)));
2286 1.1.1.1.8.2 tls }
2287 1.1.1.1.8.2 tls
2288 1.1.1.1.8.2 tls /* spu_subx
2289 1.1.1.1.8.2 tls * ========
2290 1.1.1.1.8.2 tls */
2291 1.1.1.1.8.2 tls static __inline vec_uint4 spu_subx(vec_uint4 a, vec_uint4 b, vec_uint4 c)
2292 1.1.1.1.8.2 tls {
2293 1.1.1.1.8.2 tls return ((vec_uint4)(si_sfx((qword)(b), (qword)(a), (qword)(c))));
2294 1.1.1.1.8.2 tls }
2295 1.1.1.1.8.2 tls
2296 1.1.1.1.8.2 tls static __inline vec_int4 spu_subx(vec_int4 a, vec_int4 b, vec_int4 c)
2297 1.1.1.1.8.2 tls {
2298 1.1.1.1.8.2 tls return ((vec_int4)(si_sfx((qword)(b), (qword)(a), (qword)(c))));
2299 1.1.1.1.8.2 tls }
2300 1.1.1.1.8.2 tls
2301 1.1.1.1.8.2 tls /* spu_sumb
2302 1.1.1.1.8.2 tls * ========
2303 1.1.1.1.8.2 tls */
2304 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_sumb(vec_uchar16 a, vec_uchar16 b)
2305 1.1.1.1.8.2 tls {
2306 1.1.1.1.8.2 tls return ((vec_ushort8)(si_sumb((qword)(a), (qword)(b))));
2307 1.1.1.1.8.2 tls }
2308 1.1.1.1.8.2 tls
2309 1.1.1.1.8.2 tls
2310 1.1.1.1.8.2 tls /* spu_sync
2311 1.1.1.1.8.2 tls * spu_sync_c
2312 1.1.1.1.8.2 tls * ========
2313 1.1.1.1.8.2 tls */
2314 1.1.1.1.8.2 tls #define spu_sync() /* do nothing */
2315 1.1.1.1.8.2 tls
2316 1.1.1.1.8.2 tls #define spu_sync_c() /* do nothing */
2317 1.1.1.1.8.2 tls
2318 1.1.1.1.8.2 tls
2319 1.1.1.1.8.2 tls /* spu_writech
2320 1.1.1.1.8.2 tls * ===========
2321 1.1.1.1.8.2 tls */
2322 1.1.1.1.8.2 tls #define spu_writech(_channel, _a) /* not mappable */
2323 1.1.1.1.8.2 tls
2324 1.1.1.1.8.2 tls /* spu_writechqw
2325 1.1.1.1.8.2 tls * =============
2326 1.1.1.1.8.2 tls */
2327 1.1.1.1.8.2 tls #define spu_writechqw(_channel, _a) /* not mappable */
2328 1.1.1.1.8.2 tls
2329 1.1.1.1.8.2 tls
2330 1.1.1.1.8.2 tls /* spu_xor
2331 1.1.1.1.8.2 tls * =======
2332 1.1.1.1.8.2 tls */
2333 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_xor(vec_uchar16 a, vec_uchar16 b)
2334 1.1.1.1.8.2 tls {
2335 1.1.1.1.8.2 tls return ((vec_uchar16)(si_xor((qword)(a), (qword)(b))));
2336 1.1.1.1.8.2 tls }
2337 1.1.1.1.8.2 tls
2338 1.1.1.1.8.2 tls static __inline vec_char16 spu_xor(vec_char16 a, vec_char16 b)
2339 1.1.1.1.8.2 tls {
2340 1.1.1.1.8.2 tls return ((vec_char16)(si_xor((qword)(a), (qword)(b))));
2341 1.1.1.1.8.2 tls }
2342 1.1.1.1.8.2 tls
2343 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_xor(vec_ushort8 a, vec_ushort8 b)
2344 1.1.1.1.8.2 tls {
2345 1.1.1.1.8.2 tls return ((vec_ushort8)(si_xor((qword)(a), (qword)(b))));
2346 1.1.1.1.8.2 tls }
2347 1.1.1.1.8.2 tls
2348 1.1.1.1.8.2 tls static __inline vec_short8 spu_xor(vec_short8 a, vec_short8 b)
2349 1.1.1.1.8.2 tls {
2350 1.1.1.1.8.2 tls return ((vec_short8)(si_xor((qword)(a), (qword)(b))));
2351 1.1.1.1.8.2 tls }
2352 1.1.1.1.8.2 tls
2353 1.1.1.1.8.2 tls static __inline vec_uint4 spu_xor(vec_uint4 a, vec_uint4 b)
2354 1.1.1.1.8.2 tls {
2355 1.1.1.1.8.2 tls return ((vec_uint4)(si_xor((qword)(a), (qword)(b))));
2356 1.1.1.1.8.2 tls }
2357 1.1.1.1.8.2 tls
2358 1.1.1.1.8.2 tls static __inline vec_int4 spu_xor(vec_int4 a, vec_int4 b)
2359 1.1.1.1.8.2 tls {
2360 1.1.1.1.8.2 tls return ((vec_int4)(si_xor((qword)(a), (qword)(b))));
2361 1.1.1.1.8.2 tls }
2362 1.1.1.1.8.2 tls
2363 1.1.1.1.8.2 tls static __inline vec_float4 spu_xor(vec_float4 a, vec_float4 b)
2364 1.1.1.1.8.2 tls {
2365 1.1.1.1.8.2 tls return ((vec_float4)(si_xor((qword)(a), (qword)(b))));
2366 1.1.1.1.8.2 tls }
2367 1.1.1.1.8.2 tls
2368 1.1.1.1.8.2 tls static __inline vec_ullong2 spu_xor(vec_ullong2 a, vec_ullong2 b)
2369 1.1.1.1.8.2 tls {
2370 1.1.1.1.8.2 tls return ((vec_ullong2)(si_xor((qword)(a), (qword)(b))));
2371 1.1.1.1.8.2 tls }
2372 1.1.1.1.8.2 tls
2373 1.1.1.1.8.2 tls static __inline vec_llong2 spu_xor(vec_llong2 a, vec_llong2 b)
2374 1.1.1.1.8.2 tls {
2375 1.1.1.1.8.2 tls return ((vec_llong2)(si_xor((qword)(a), (qword)(b))));
2376 1.1.1.1.8.2 tls }
2377 1.1.1.1.8.2 tls
2378 1.1.1.1.8.2 tls static __inline vec_double2 spu_xor(vec_double2 a, vec_double2 b)
2379 1.1.1.1.8.2 tls {
2380 1.1.1.1.8.2 tls return ((vec_double2)(si_xor((qword)(a), (qword)(b))));
2381 1.1.1.1.8.2 tls }
2382 1.1.1.1.8.2 tls
2383 1.1.1.1.8.2 tls static __inline vec_uchar16 spu_xor(vec_uchar16 a, unsigned char b)
2384 1.1.1.1.8.2 tls {
2385 1.1.1.1.8.2 tls return ((vec_uchar16)(si_xorbi((qword)(a), b)));
2386 1.1.1.1.8.2 tls }
2387 1.1.1.1.8.2 tls
2388 1.1.1.1.8.2 tls static __inline vec_char16 spu_xor(vec_char16 a, signed char b)
2389 1.1.1.1.8.2 tls {
2390 1.1.1.1.8.2 tls return ((vec_char16)(si_xorbi((qword)(a), (unsigned char)(b))));
2391 1.1.1.1.8.2 tls }
2392 1.1.1.1.8.2 tls
2393 1.1.1.1.8.2 tls static __inline vec_ushort8 spu_xor(vec_ushort8 a, unsigned short b)
2394 1.1.1.1.8.2 tls {
2395 1.1.1.1.8.2 tls return ((vec_ushort8)(si_xorhi((qword)(a), b)));
2396 1.1.1.1.8.2 tls }
2397 1.1.1.1.8.2 tls
2398 1.1.1.1.8.2 tls static __inline vec_short8 spu_xor(vec_short8 a, signed short b)
2399 1.1.1.1.8.2 tls {
2400 1.1.1.1.8.2 tls return ((vec_short8)(si_xorhi((qword)(a), (unsigned short)(b))));
2401 1.1.1.1.8.2 tls }
2402 1.1.1.1.8.2 tls
2403 1.1.1.1.8.2 tls static __inline vec_uint4 spu_xor(vec_uint4 a, unsigned int b)
2404 1.1.1.1.8.2 tls {
2405 1.1.1.1.8.2 tls return ((vec_uint4)(si_xori((qword)(a), b)));
2406 1.1.1.1.8.2 tls }
2407 1.1.1.1.8.2 tls
2408 1.1.1.1.8.2 tls static __inline vec_int4 spu_xor(vec_int4 a, signed int b)
2409 1.1.1.1.8.2 tls {
2410 1.1.1.1.8.2 tls return ((vec_int4)(si_xori((qword)(a), (unsigned int)(b))));
2411 1.1.1.1.8.2 tls }
2412 1.1.1.1.8.2 tls
2413 1.1.1.1.8.2 tls #endif /* !__SPU__ */
2414 1.1.1.1.8.2 tls #endif /* __cplusplus */
2415 1.1.1.1.8.2 tls #endif /* !_SPU2VMX_H_ */
2416