annotate gcc/config/powerpcspe/spu2vmx.h @ 111:04ced10e8804

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