]>
Commit | Line | Data |
---|---|---|
23a5b65a | 1 | /* Copyright (C) 2000-2014 Free Software Foundation, Inc. |
fa5322fa | 2 | |
7ec022b2 | 3 | This file is part of GCC. |
fa5322fa | 4 | |
7ec022b2 | 5 | GCC is free software; you can redistribute it and/or modify |
fa5322fa | 6 | it under the terms of the GNU General Public License as published by |
748086b7 | 7 | the Free Software Foundation; either version 3, or (at your option) |
fa5322fa AO |
8 | any later version. |
9 | ||
7ec022b2 | 10 | GCC is distributed in the hope that it will be useful, |
fa5322fa AO |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | GNU General Public License for more details. | |
14 | ||
748086b7 JJ |
15 | Under Section 7 of GPL version 3, you are granted additional |
16 | permissions described in the GCC Runtime Library Exception, version | |
17 | 3.1, as published by the Free Software Foundation. | |
18 | ||
19 | You should have received a copy of the GNU General Public License and | |
20 | a copy of the GCC Runtime Library Exception along with this program; | |
21 | see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
22 | <http://www.gnu.org/licenses/>. */ | |
fa5322fa | 23 | |
fa5322fa AO |
24 | |
25 | /* ushmedia.h: Intrinsics corresponding to SHmedia instructions that | |
26 | may be executed in both user and privileged mode. */ | |
27 | ||
28 | #ifndef _USHMEDIA_H | |
29 | #define _USHMEDIA_H | |
30 | ||
31 | #if __SHMEDIA__ | |
32 | #if ! __SH4_NO_FPU | |
4a5eab38 PB |
33 | typedef float __GCC_FV __attribute__ ((vector_size (4 * sizeof (float)))); |
34 | typedef float __GCC_MTRX __attribute__ ((vector_size (16 * sizeof (float)))); | |
fa5322fa AO |
35 | #endif |
36 | ||
73a4d10b | 37 | static __inline unsigned long long |
fa5322fa AO |
38 | sh_media_MABS_L (unsigned long long mm) |
39 | { | |
73a4d10b R |
40 | typedef float v2si __attribute__ ((mode(V2SI))); |
41 | ||
42 | return (unsigned long long) __builtin_absv2si2 ((v2si) mm); | |
fa5322fa AO |
43 | } |
44 | ||
73a4d10b | 45 | static __inline unsigned long long |
fa5322fa AO |
46 | sh_media_MABS_W (unsigned long long mm) |
47 | { | |
73a4d10b R |
48 | typedef float v4hi __attribute__ ((mode(V4HI))); |
49 | ||
50 | return (unsigned long long) __builtin_absv4hi2 ((v4hi) mm); | |
fa5322fa AO |
51 | } |
52 | ||
73a4d10b | 53 | static __inline unsigned long long |
fa5322fa AO |
54 | sh_media_MADD_L (unsigned long long mm, unsigned long long mn) |
55 | { | |
73a4d10b R |
56 | typedef float v2si __attribute__ ((mode(V2SI))); |
57 | ||
58 | return (unsigned long long) __builtin_addv2si3 ((v2si) mm, (v2si) mn); | |
fa5322fa AO |
59 | } |
60 | ||
73a4d10b | 61 | static __inline unsigned long long |
fa5322fa AO |
62 | sh_media_MADD_W (unsigned long long mm, unsigned long long mn) |
63 | { | |
73a4d10b R |
64 | typedef float v4hi __attribute__ ((mode(V4HI))); |
65 | ||
66 | return (unsigned long long) __builtin_addv4hi3 ((v4hi) mm, (v4hi) mn); | |
fa5322fa AO |
67 | } |
68 | ||
73a4d10b | 69 | static __inline unsigned long long |
fa5322fa AO |
70 | sh_media_MADDS_L (unsigned long long mm, unsigned long long mn) |
71 | { | |
73a4d10b R |
72 | typedef float v2si __attribute__ ((mode(V2SI))); |
73 | ||
74 | return (unsigned long long) __builtin_ssaddv2si3 ((v2si) mm, (v2si) mn); | |
fa5322fa AO |
75 | } |
76 | ||
73a4d10b | 77 | static __inline unsigned long long |
fa5322fa AO |
78 | sh_media_MADDS_UB (unsigned long long mm, unsigned long long mn) |
79 | { | |
73a4d10b R |
80 | typedef float v8qi __attribute__ ((mode(V8QI))); |
81 | ||
82 | return (unsigned long long) __builtin_usaddv8qi3 ((v8qi) mm, (v8qi) mn); | |
fa5322fa AO |
83 | } |
84 | ||
73a4d10b | 85 | static __inline unsigned long long |
fa5322fa AO |
86 | sh_media_MADDS_W (unsigned long long mm, unsigned long long mn) |
87 | { | |
73a4d10b R |
88 | typedef float v4hi __attribute__ ((mode(V4HI))); |
89 | ||
90 | return (unsigned long long) __builtin_ssaddv4hi3 ((v4hi) mm, (v4hi) mn); | |
fa5322fa AO |
91 | } |
92 | ||
73a4d10b | 93 | static __inline unsigned long long |
fa5322fa AO |
94 | sh_media_MCMPEQ_B (unsigned long long mm, unsigned long long mn) |
95 | { | |
73a4d10b R |
96 | typedef float v8qi __attribute__ ((mode(V8QI))); |
97 | ||
98 | return (unsigned long long) __builtin_sh_media_MCMPEQ_B ((v8qi) mm, | |
99 | (v8qi) mn); | |
fa5322fa AO |
100 | } |
101 | ||
73a4d10b | 102 | static __inline unsigned long long |
fa5322fa AO |
103 | sh_media_MCMPEQ_L (unsigned long long mm, unsigned long long mn) |
104 | { | |
73a4d10b R |
105 | typedef float v2si __attribute__ ((mode(V2SI))); |
106 | ||
107 | return (unsigned long long) __builtin_sh_media_MCMPEQ_L ((v2si) mm, | |
108 | (v2si) mn); | |
fa5322fa AO |
109 | } |
110 | ||
73a4d10b | 111 | static __inline unsigned long long |
fa5322fa AO |
112 | sh_media_MCMPEQ_W (unsigned long long mm, unsigned long long mn) |
113 | { | |
73a4d10b | 114 | typedef float v4hi __attribute__ ((mode(V4HI))); |
fa5322fa | 115 | |
73a4d10b R |
116 | return (unsigned long long) __builtin_sh_media_MCMPEQ_W ((v4hi) mm, |
117 | (v4hi) mn); | |
fa5322fa AO |
118 | } |
119 | ||
73a4d10b | 120 | static __inline unsigned long long |
fa5322fa AO |
121 | sh_media_MCMPGT_UB (unsigned long long mm, unsigned long long mn) |
122 | { | |
73a4d10b R |
123 | typedef float v8qi __attribute__ ((mode(V8QI))); |
124 | ||
125 | return (unsigned long long) __builtin_sh_media_MCMPGT_UB ((v8qi) mm, | |
126 | (v8qi) mn); | |
fa5322fa AO |
127 | } |
128 | ||
73a4d10b R |
129 | static __inline unsigned long long |
130 | sh_media_MCMPGT_L (unsigned long long mm, unsigned long long mn) | |
fa5322fa | 131 | { |
73a4d10b R |
132 | typedef float v2si __attribute__ ((mode(V2SI))); |
133 | ||
134 | return (unsigned long long) __builtin_sh_media_MCMPGT_L ((v2si) mm, | |
135 | (v2si) mn); | |
fa5322fa AO |
136 | } |
137 | ||
73a4d10b R |
138 | static __inline unsigned long long |
139 | sh_media_MCMPGT_W (unsigned long long mm, unsigned long long mn) | |
fa5322fa | 140 | { |
73a4d10b R |
141 | typedef float v4hi __attribute__ ((mode(V4HI))); |
142 | ||
143 | return (unsigned long long) __builtin_sh_media_MCMPGT_W ((v4hi) mm, | |
144 | (v4hi) mn); | |
fa5322fa AO |
145 | } |
146 | ||
73a4d10b R |
147 | #define sh_media_MCMV __builtin_sh_media_MCMV |
148 | ||
149 | static __inline unsigned long long | |
fa5322fa AO |
150 | sh_media_MCNVS_LW (unsigned long long mm, unsigned long long mn) |
151 | { | |
73a4d10b R |
152 | typedef float v2si __attribute__ ((mode(V2SI))); |
153 | typedef unsigned int uv2si __attribute__ ((mode(V2SI))); | |
154 | ||
155 | return (unsigned long long) __builtin_sh_media_MCNVS_LW ((v2si) mm, | |
156 | (uv2si) mn); | |
fa5322fa AO |
157 | } |
158 | ||
73a4d10b | 159 | static __inline unsigned long long |
fa5322fa AO |
160 | sh_media_MCNVS_WB (unsigned long long mm, unsigned long long mn) |
161 | { | |
73a4d10b R |
162 | typedef float v4hi __attribute__ ((mode(V4HI))); |
163 | ||
164 | return (unsigned long long) __builtin_sh_media_MCNVS_WB ((v4hi) mm, | |
165 | (v4hi) mn); | |
fa5322fa AO |
166 | } |
167 | ||
73a4d10b | 168 | static __inline unsigned long long |
fa5322fa AO |
169 | sh_media_MCNVS_WUB (unsigned long long mm, unsigned long long mn) |
170 | { | |
73a4d10b R |
171 | typedef float v4hi __attribute__ ((mode(V4HI))); |
172 | ||
173 | return (unsigned long long) __builtin_sh_media_MCNVS_WUB ((v4hi) mm, | |
174 | (v4hi) mn); | |
fa5322fa AO |
175 | } |
176 | ||
73a4d10b | 177 | static __inline unsigned long long |
fa5322fa AO |
178 | sh_media_MEXTR1 (unsigned long long mm, unsigned long long mn) |
179 | { | |
73a4d10b R |
180 | typedef float v8qi __attribute__ ((mode(V8QI))); |
181 | ||
182 | return (unsigned long long) __builtin_sh_media_MEXTR1 ((v8qi) mm, | |
183 | (v8qi) mn); | |
fa5322fa AO |
184 | } |
185 | ||
73a4d10b | 186 | static __inline unsigned long long |
fa5322fa AO |
187 | sh_media_MEXTR2 (unsigned long long mm, unsigned long long mn) |
188 | { | |
73a4d10b R |
189 | typedef float v8qi __attribute__ ((mode(V8QI))); |
190 | ||
191 | return (unsigned long long) __builtin_sh_media_MEXTR2 ((v8qi) mm, | |
192 | (v8qi) mn); | |
fa5322fa AO |
193 | } |
194 | ||
73a4d10b | 195 | static __inline unsigned long long |
fa5322fa AO |
196 | sh_media_MEXTR3 (unsigned long long mm, unsigned long long mn) |
197 | { | |
73a4d10b R |
198 | typedef float v8qi __attribute__ ((mode(V8QI))); |
199 | ||
200 | return (unsigned long long) __builtin_sh_media_MEXTR3 ((v8qi) mm, | |
201 | (v8qi) mn); | |
fa5322fa AO |
202 | } |
203 | ||
73a4d10b | 204 | static __inline unsigned long long |
fa5322fa AO |
205 | sh_media_MEXTR4 (unsigned long long mm, unsigned long long mn) |
206 | { | |
73a4d10b R |
207 | typedef float v8qi __attribute__ ((mode(V8QI))); |
208 | ||
209 | return (unsigned long long) __builtin_sh_media_MEXTR4 ((v8qi) mm, | |
210 | (v8qi) mn); | |
fa5322fa AO |
211 | } |
212 | ||
73a4d10b | 213 | static __inline unsigned long long |
fa5322fa AO |
214 | sh_media_MEXTR5 (unsigned long long mm, unsigned long long mn) |
215 | { | |
73a4d10b R |
216 | typedef float v8qi __attribute__ ((mode(V8QI))); |
217 | ||
218 | return (unsigned long long) __builtin_sh_media_MEXTR5 ((v8qi) mm, | |
219 | (v8qi) mn); | |
fa5322fa AO |
220 | } |
221 | ||
73a4d10b | 222 | static __inline unsigned long long |
fa5322fa AO |
223 | sh_media_MEXTR6 (unsigned long long mm, unsigned long long mn) |
224 | { | |
73a4d10b R |
225 | typedef float v8qi __attribute__ ((mode(V8QI))); |
226 | ||
227 | return (unsigned long long) __builtin_sh_media_MEXTR6 ((v8qi) mm, | |
228 | (v8qi) mn); | |
fa5322fa AO |
229 | } |
230 | ||
73a4d10b | 231 | static __inline unsigned long long |
fa5322fa AO |
232 | sh_media_MEXTR7 (unsigned long long mm, unsigned long long mn) |
233 | { | |
73a4d10b R |
234 | typedef float v8qi __attribute__ ((mode(V8QI))); |
235 | ||
236 | return (unsigned long long) __builtin_sh_media_MEXTR7 ((v8qi) mm, | |
237 | (v8qi) mn); | |
fa5322fa AO |
238 | } |
239 | ||
73a4d10b R |
240 | static __inline unsigned long long |
241 | sh_media_MMACFX_WL (unsigned long long mm, unsigned long long mn, | |
242 | unsigned long long mw) | |
fa5322fa | 243 | { |
73a4d10b R |
244 | typedef float v2hi __attribute__ ((mode(V2HI))); |
245 | typedef float v2si __attribute__ ((mode(V2SI))); | |
246 | typedef unsigned int uv2si __attribute__ ((mode(V2SI))); | |
247 | ||
248 | long mm_l = (long) mm; | |
249 | long mn_l = (long) mn; | |
250 | ||
251 | return ((unsigned long long) | |
252 | __builtin_sh_media_MMACFX_WL ((v2hi) mm_l, (v2hi) mn_l, | |
253 | (uv2si) mw)); | |
fa5322fa AO |
254 | } |
255 | ||
73a4d10b R |
256 | static __inline unsigned long long |
257 | sh_media_MMACNFX_WL (unsigned long long mm, unsigned long long mn, | |
258 | unsigned long long mw) | |
fa5322fa | 259 | { |
73a4d10b R |
260 | typedef float v2hi __attribute__ ((mode(V2HI))); |
261 | typedef float v2si __attribute__ ((mode(V2SI))); | |
262 | typedef unsigned int uv2si __attribute__ ((mode(V2SI))); | |
263 | ||
264 | long mm_l = (long) mm; | |
265 | long mn_l = (long) mn; | |
266 | ||
267 | return ((unsigned long long) | |
268 | __builtin_sh_media_MMACNFX_WL ((v2hi) mm_l, (v2hi) mn_l, | |
269 | (uv2si) mw)); | |
fa5322fa AO |
270 | } |
271 | ||
73a4d10b | 272 | static __inline unsigned long long |
fa5322fa AO |
273 | sh_media_MMUL_L (unsigned long long mm, unsigned long long mn) |
274 | { | |
73a4d10b R |
275 | typedef float v2si __attribute__ ((mode(V2SI))); |
276 | ||
277 | return (unsigned long long) __builtin_mulv2si3 ((v2si) mm, (v2si) mn); | |
fa5322fa AO |
278 | } |
279 | ||
73a4d10b | 280 | static __inline unsigned long long |
fa5322fa AO |
281 | sh_media_MMUL_W (unsigned long long mm, unsigned long long mn) |
282 | { | |
73a4d10b R |
283 | typedef float v4hi __attribute__ ((mode(V4HI))); |
284 | ||
285 | return (unsigned long long) __builtin_mulv4hi3 ((v4hi) mm, (v4hi) mn); | |
fa5322fa AO |
286 | } |
287 | ||
73a4d10b | 288 | static __inline unsigned long long |
fa5322fa AO |
289 | sh_media_MMULFX_L (unsigned long long mm, unsigned long long mn) |
290 | { | |
73a4d10b R |
291 | typedef float v2si __attribute__ ((mode(V2SI))); |
292 | ||
293 | return (unsigned long long) __builtin_sh_media_MMULFX_L ((v2si) mm, | |
294 | (v2si) mn); | |
fa5322fa AO |
295 | } |
296 | ||
73a4d10b | 297 | static __inline unsigned long long |
fa5322fa AO |
298 | sh_media_MMULFX_W (unsigned long long mm, unsigned long long mn) |
299 | { | |
73a4d10b R |
300 | typedef float v4hi __attribute__ ((mode(V4HI))); |
301 | ||
302 | return (unsigned long long) __builtin_sh_media_MMULFX_W ((v4hi) mm, | |
303 | (v4hi) mn); | |
fa5322fa AO |
304 | } |
305 | ||
73a4d10b | 306 | static __inline unsigned long long |
fa5322fa AO |
307 | sh_media_MMULFXRP_W (unsigned long long mm, unsigned long long mn) |
308 | { | |
73a4d10b R |
309 | typedef float v4hi __attribute__ ((mode(V4HI))); |
310 | ||
311 | return (unsigned long long) __builtin_sh_media_MMULFXRP_W ((v4hi) mm, | |
312 | (v4hi) mn); | |
fa5322fa AO |
313 | } |
314 | ||
73a4d10b | 315 | static __inline unsigned long long |
fa5322fa AO |
316 | sh_media_MMULHI_WL (unsigned long long mm, unsigned long long mn) |
317 | { | |
73a4d10b R |
318 | typedef float v4hi __attribute__ ((mode(V4HI))); |
319 | ||
320 | return (unsigned long long) __builtin_sh_media_MMULHI_WL ((v4hi) mm, | |
321 | (v4hi) mn); | |
fa5322fa AO |
322 | } |
323 | ||
73a4d10b | 324 | static __inline unsigned long long |
fa5322fa AO |
325 | sh_media_MMULLO_WL (unsigned long long mm, unsigned long long mn) |
326 | { | |
73a4d10b R |
327 | typedef float v4hi __attribute__ ((mode(V4HI))); |
328 | ||
329 | return (unsigned long long) __builtin_sh_media_MMULLO_WL ((v4hi) mm, | |
330 | (v4hi) mn); | |
fa5322fa AO |
331 | } |
332 | ||
73a4d10b R |
333 | static __inline unsigned long long |
334 | sh_media_MMULSUM_WQ (unsigned long long mm, unsigned long long mn, | |
335 | unsigned long long mw) | |
fa5322fa | 336 | { |
73a4d10b R |
337 | typedef unsigned int uv4hi __attribute__ ((mode(V4HI))); |
338 | ||
339 | return __builtin_sh_media_MMULSUM_WQ ((uv4hi) mm, (uv4hi) mn, mw); | |
fa5322fa AO |
340 | } |
341 | ||
73a4d10b | 342 | static __inline unsigned long long |
fa5322fa AO |
343 | sh_media_MPERM_W (unsigned long long mm, unsigned int mn) |
344 | { | |
73a4d10b R |
345 | typedef float v4hi __attribute__ ((mode(V4HI))); |
346 | ||
347 | return (unsigned long long) __builtin_sh_media_MPERM_W ((v4hi) mm, mn); | |
fa5322fa AO |
348 | } |
349 | ||
73a4d10b R |
350 | static __inline unsigned long long |
351 | sh_media_MSAD_UBQ (unsigned long long mm, unsigned long long mn, | |
352 | unsigned long long mw) | |
fa5322fa | 353 | { |
73a4d10b R |
354 | typedef unsigned int uv8qi __attribute__ ((mode(V8QI))); |
355 | ||
356 | return __builtin_sh_media_MSAD_UBQ ((uv8qi) mm, (uv8qi) mn, mw); | |
fa5322fa AO |
357 | } |
358 | ||
73a4d10b | 359 | static __inline unsigned long long |
fa5322fa AO |
360 | sh_media_MSHALDS_L (unsigned long long mm, unsigned int mn) |
361 | { | |
73a4d10b R |
362 | typedef float v2si __attribute__ ((mode(V2SI))); |
363 | ||
364 | return (unsigned long long) __builtin_sh_media_MSHALDS_L ((v2si) mm, mn); | |
fa5322fa AO |
365 | } |
366 | ||
73a4d10b | 367 | static __inline unsigned long long |
fa5322fa AO |
368 | sh_media_MSHALDS_W (unsigned long long mm, unsigned int mn) |
369 | { | |
73a4d10b R |
370 | typedef float v4hi __attribute__ ((mode(V4HI))); |
371 | ||
372 | return (unsigned long long) __builtin_sh_media_MSHALDS_W ((v4hi) mm, mn); | |
fa5322fa AO |
373 | } |
374 | ||
73a4d10b | 375 | static __inline unsigned long long |
fa5322fa AO |
376 | sh_media_MSHARD_L (unsigned long long mm, unsigned int mn) |
377 | { | |
73a4d10b R |
378 | typedef float v2si __attribute__ ((mode(V2SI))); |
379 | ||
380 | return (unsigned long long) __builtin_ashrv2si3 ((v2si) mm, mn); | |
fa5322fa AO |
381 | } |
382 | ||
73a4d10b | 383 | static __inline unsigned long long |
fa5322fa AO |
384 | sh_media_MSHARD_W (unsigned long long mm, unsigned int mn) |
385 | { | |
73a4d10b | 386 | typedef float v4hi __attribute__ ((mode(V4HI))); |
fa5322fa | 387 | |
73a4d10b | 388 | return (unsigned long long) __builtin_ashrv4hi3 ((v4hi) mm, mn); |
fa5322fa AO |
389 | } |
390 | ||
73a4d10b R |
391 | #define sh_media_MSHARDS_Q __builtin_sh_media_MSHARDS_Q |
392 | ||
393 | static __inline unsigned long long | |
fa5322fa AO |
394 | sh_media_MSHFHI_B (unsigned long long mm, unsigned long long mn) |
395 | { | |
73a4d10b R |
396 | typedef float v8qi __attribute__ ((mode(V8QI))); |
397 | ||
398 | return (unsigned long long) __builtin_sh_media_MSHFHI_B ((v8qi) mm, | |
399 | (v8qi) mn); | |
fa5322fa AO |
400 | } |
401 | ||
73a4d10b | 402 | static __inline unsigned long long |
fa5322fa AO |
403 | sh_media_MSHFHI_L (unsigned long long mm, unsigned long long mn) |
404 | { | |
73a4d10b R |
405 | typedef float v2si __attribute__ ((mode(V2SI))); |
406 | ||
407 | return (unsigned long long) __builtin_sh_media_MSHFHI_L ((v2si) mm, | |
408 | (v2si) mn); | |
fa5322fa AO |
409 | } |
410 | ||
73a4d10b | 411 | static __inline unsigned long long |
fa5322fa AO |
412 | sh_media_MSHFHI_W (unsigned long long mm, unsigned long long mn) |
413 | { | |
73a4d10b R |
414 | typedef float v4hi __attribute__ ((mode(V4HI))); |
415 | ||
416 | return (unsigned long long) __builtin_sh_media_MSHFHI_W ((v4hi) mm, | |
417 | (v4hi) mn); | |
fa5322fa AO |
418 | } |
419 | ||
73a4d10b | 420 | static __inline unsigned long long |
fa5322fa AO |
421 | sh_media_MSHFLO_B (unsigned long long mm, unsigned long long mn) |
422 | { | |
73a4d10b R |
423 | typedef float v8qi __attribute__ ((mode(V8QI))); |
424 | ||
425 | return (unsigned long long) __builtin_sh_media_MSHFLO_B ((v8qi) mm, | |
426 | (v8qi) mn); | |
fa5322fa AO |
427 | } |
428 | ||
73a4d10b | 429 | static __inline unsigned long long |
fa5322fa AO |
430 | sh_media_MSHFLO_L (unsigned long long mm, unsigned long long mn) |
431 | { | |
73a4d10b R |
432 | typedef float v2si __attribute__ ((mode(V2SI))); |
433 | ||
434 | return (unsigned long long) __builtin_sh_media_MSHFLO_L ((v2si) mm, | |
435 | (v2si) mn); | |
fa5322fa AO |
436 | } |
437 | ||
73a4d10b | 438 | static __inline unsigned long long |
fa5322fa AO |
439 | sh_media_MSHFLO_W (unsigned long long mm, unsigned long long mn) |
440 | { | |
73a4d10b R |
441 | typedef float v4hi __attribute__ ((mode(V4HI))); |
442 | ||
443 | return (unsigned long long) __builtin_sh_media_MSHFLO_W ((v4hi) mm, | |
444 | (v4hi) mn); | |
fa5322fa AO |
445 | } |
446 | ||
73a4d10b | 447 | static __inline unsigned long long |
fa5322fa AO |
448 | sh_media_MSHLLD_L (unsigned long long mm, unsigned int mn) |
449 | { | |
73a4d10b R |
450 | typedef float v2si __attribute__ ((mode(V2SI))); |
451 | ||
452 | return (unsigned long long) __builtin_ashlv2si3 ((v2si) mm, mn); | |
fa5322fa AO |
453 | } |
454 | ||
73a4d10b | 455 | static __inline unsigned long long |
fa5322fa AO |
456 | sh_media_MSHLLD_W (unsigned long long mm, unsigned int mn) |
457 | { | |
73a4d10b R |
458 | typedef float v4hi __attribute__ ((mode(V4HI))); |
459 | ||
460 | return (unsigned long long) __builtin_ashlv4hi3 ((v4hi) mm, mn); | |
fa5322fa AO |
461 | } |
462 | ||
73a4d10b | 463 | static __inline unsigned long long |
fa5322fa AO |
464 | sh_media_MSHLRD_L (unsigned long long mm, unsigned int mn) |
465 | { | |
73a4d10b R |
466 | typedef float v2si __attribute__ ((mode(V2SI))); |
467 | ||
468 | return (unsigned long long) __builtin_lshrv2si3 ((v2si) mm, mn); | |
fa5322fa AO |
469 | } |
470 | ||
73a4d10b | 471 | static __inline unsigned long long |
fa5322fa AO |
472 | sh_media_MSHLRD_W (unsigned long long mm, unsigned int mn) |
473 | { | |
73a4d10b R |
474 | typedef float v4hi __attribute__ ((mode(V4HI))); |
475 | ||
476 | return (unsigned long long) __builtin_lshrv4hi3 ((v4hi) mm, mn); | |
fa5322fa AO |
477 | } |
478 | ||
73a4d10b | 479 | static __inline unsigned long long |
fa5322fa AO |
480 | sh_media_MSUB_L (unsigned long long mm, unsigned long long mn) |
481 | { | |
73a4d10b R |
482 | typedef float v2si __attribute__ ((mode(V2SI))); |
483 | ||
484 | return (unsigned long long) __builtin_subv2si3 ((v2si) mm, (v2si) mn); | |
fa5322fa AO |
485 | } |
486 | ||
73a4d10b | 487 | static __inline unsigned long long |
fa5322fa AO |
488 | sh_media_MSUB_W (unsigned long long mm, unsigned long long mn) |
489 | { | |
73a4d10b R |
490 | typedef float v4hi __attribute__ ((mode(V4HI))); |
491 | ||
492 | return (unsigned long long) __builtin_subv4hi3 ((v4hi) mm, (v4hi) mn); | |
fa5322fa AO |
493 | } |
494 | ||
73a4d10b | 495 | static __inline unsigned long long |
fa5322fa AO |
496 | sh_media_MSUBS_L (unsigned long long mm, unsigned long long mn) |
497 | { | |
73a4d10b R |
498 | typedef float v2si __attribute__ ((mode(V2SI))); |
499 | ||
500 | return (unsigned long long) __builtin_sssubv2si3 ((v2si) mm, (v2si) mn); | |
fa5322fa AO |
501 | } |
502 | ||
73a4d10b | 503 | static __inline unsigned long long |
fa5322fa AO |
504 | sh_media_MSUBS_UB (unsigned long long mm, unsigned long long mn) |
505 | { | |
73a4d10b R |
506 | typedef float v8qi __attribute__ ((mode(V8QI))); |
507 | ||
508 | return (unsigned long long) __builtin_ussubv8qi3 ((v8qi) mm, (v8qi) mn); | |
fa5322fa AO |
509 | } |
510 | ||
73a4d10b | 511 | static __inline unsigned long long |
fa5322fa AO |
512 | sh_media_MSUBS_W (unsigned long long mm, unsigned long long mn) |
513 | { | |
73a4d10b R |
514 | typedef float v4hi __attribute__ ((mode(V4HI))); |
515 | ||
516 | return (unsigned long long) __builtin_sssubv4hi3 ((v4hi) mm, (v4hi) mn); | |
fa5322fa AO |
517 | } |
518 | ||
519 | #if ! __SH4_NOFPU__ | |
73a4d10b | 520 | /* Floating-point Intrinsics */ |
fa5322fa | 521 | |
73a4d10b R |
522 | #define sh_media_FABS_D __builtin_fabs |
523 | #define sh_media_FABS_S __builtin_fabsf | |
524 | #define sh_media_FCMPUN_D __builtin_isunordered | |
525 | #define sh_media_FCMPUN_S __builtin_isunordered | |
fa5322fa | 526 | |
73a4d10b | 527 | static __inline float sh_media_FCOSA_S (float fg) |
fa5322fa | 528 | { |
73a4d10b | 529 | union { int i; float f; } u; |
fa5322fa | 530 | |
73a4d10b R |
531 | u.f = fg; |
532 | return __builtin_sh_media_FCOSA_S (u.i); | |
fa5322fa AO |
533 | } |
534 | ||
73a4d10b | 535 | static __inline float |
fa5322fa | 536 | sh_media_FGETSCR (void) |
73a4d10b R |
537 | { |
538 | float f; | |
539 | ||
540 | __asm volatile ("fgetscr %0" : "=f" (f)); | |
541 | return f; | |
fa5322fa AO |
542 | } |
543 | ||
73a4d10b | 544 | static __inline float |
fa5322fa AO |
545 | sh_media_FIPR_S (const void *fvg, const void *fvh) |
546 | { | |
73a4d10b R |
547 | typedef float v4sf __attribute__ ((mode(V4SF))); |
548 | v4sf vg = *(v4sf*) fvg; | |
549 | v4sf vh = *(v4sf*) fvh; | |
550 | ||
551 | return __builtin_sh_media_FIPR_S (vg, vh); | |
fa5322fa AO |
552 | } |
553 | ||
73a4d10b R |
554 | #if 0 |
555 | /* This gives different results for -O0 */ | |
556 | static __inline float | |
fa5322fa AO |
557 | sh_media_FMAC_S (float fg, float fh, float fq) |
558 | { | |
73a4d10b | 559 | return fg * fh + fq; |
fa5322fa | 560 | } |
73a4d10b | 561 | #else |
fa5322fa | 562 | |
73a4d10b R |
563 | #define sh_media_FMAC_S __builtin_sh_media_FMAC_S |
564 | #endif | |
565 | ||
566 | static __inline long long | |
fa5322fa AO |
567 | sh_media_FMOV_DQ (double dg) |
568 | { | |
73a4d10b R |
569 | union { long long l; double d; } u; |
570 | ||
571 | u.d = dg; | |
572 | return u.l; | |
fa5322fa AO |
573 | } |
574 | ||
73a4d10b | 575 | static __inline float |
fa5322fa AO |
576 | sh_media_FMOV_LS (int mm) |
577 | { | |
73a4d10b R |
578 | union { int i; float f; } u; |
579 | ||
580 | u.i = mm; | |
581 | return u.f; | |
fa5322fa AO |
582 | } |
583 | ||
73a4d10b | 584 | static __inline double |
fa5322fa AO |
585 | sh_media_FMOV_QD (long long mm) |
586 | { | |
73a4d10b R |
587 | union { long long l; double d; } u; |
588 | ||
589 | u.l = mm; | |
590 | return u.d; | |
fa5322fa AO |
591 | } |
592 | ||
73a4d10b | 593 | static __inline int |
fa5322fa AO |
594 | sh_media_FMOV_SL (float fg) |
595 | { | |
73a4d10b R |
596 | union { int i; float f; } u; |
597 | ||
598 | u.f = fg; | |
599 | return u.i; | |
fa5322fa AO |
600 | } |
601 | ||
73a4d10b | 602 | static __inline void |
fa5322fa | 603 | sh_media_FPUTSCR (float fg) |
73a4d10b R |
604 | { |
605 | __asm volatile ("fputscr %0" : : "f" (fg)); | |
fa5322fa AO |
606 | } |
607 | ||
73a4d10b | 608 | static __inline float sh_media_FSINA_S (float fg) |
fa5322fa | 609 | { |
73a4d10b | 610 | union { int i; float f; } u; |
fa5322fa | 611 | |
73a4d10b R |
612 | u.f = fg; |
613 | return __builtin_sh_media_FSINA_S (u.i); | |
fa5322fa AO |
614 | } |
615 | ||
73a4d10b R |
616 | /* Can't use __builtin_sqrt / __builtin_sqrtf because they still implement |
617 | error handling unless -ffast-math is used. */ | |
618 | #define sh_media_FSQRT_D __builtin_sh_media_FSQRT_D | |
619 | #define sh_media_FSQRT_S __builtin_sh_media_FSQRT_S | |
620 | #define sh_media_FSRRA_S __builtin_sh_media_FSRRA_S | |
621 | ||
622 | static __inline void | |
fa5322fa AO |
623 | sh_media_FTRV_S (const void *mtrxg, const void *fvh, void *fvf) |
624 | { | |
73a4d10b R |
625 | typedef float v16sf __attribute__ ((mode(V16SF))); |
626 | typedef float v4sf __attribute__ ((mode(V4SF))); | |
627 | v16sf mtrx = *(v16sf*) mtrxg; | |
628 | v4sf vh = *(v4sf*) fvh; | |
629 | ||
630 | *(v4sf*) fvf = __builtin_sh_media_FTRV_S (mtrx, vh); | |
fa5322fa AO |
631 | } |
632 | #endif /* ! __SH4_NOFPU__ */ | |
633 | ||
73a4d10b R |
634 | /* Not implemented here: Control and Configuration intrinsics. */ |
635 | /* Misaligned Access Support intrinsics */ | |
636 | ||
637 | static __inline unsigned long long | |
fa5322fa AO |
638 | sh_media_LDHI_L (void *p, int s) |
639 | { | |
73a4d10b | 640 | return __builtin_sh_media_LDHI_L ((char *)p + s); |
fa5322fa AO |
641 | } |
642 | ||
73a4d10b | 643 | static __inline unsigned long long |
fa5322fa AO |
644 | sh_media_LDHI_Q (void *p, int s) |
645 | { | |
73a4d10b | 646 | return __builtin_sh_media_LDHI_Q ((char *)p + s); |
fa5322fa AO |
647 | } |
648 | ||
73a4d10b | 649 | static __inline unsigned long long |
fa5322fa AO |
650 | sh_media_LDLO_L (void *p, int s) |
651 | { | |
73a4d10b | 652 | return __builtin_sh_media_LDLO_L ((char *)p + s); |
fa5322fa AO |
653 | } |
654 | ||
73a4d10b | 655 | static __inline unsigned long long |
fa5322fa AO |
656 | sh_media_LDLO_Q (void *p, int s) |
657 | { | |
73a4d10b | 658 | return __builtin_sh_media_LDLO_Q ((char *)p + s); |
fa5322fa AO |
659 | } |
660 | ||
73a4d10b | 661 | static __inline void |
fa5322fa AO |
662 | sh_media_STHI_L (void *p, int s, unsigned int mw) |
663 | { | |
73a4d10b | 664 | __builtin_sh_media_STHI_L ((char*)p + s, mw); |
fa5322fa AO |
665 | } |
666 | ||
73a4d10b | 667 | static __inline void |
fa5322fa AO |
668 | sh_media_STHI_Q (void *p, int s, unsigned long long mw) |
669 | { | |
73a4d10b | 670 | __builtin_sh_media_STHI_Q ((char*)p + s, mw); |
fa5322fa AO |
671 | } |
672 | ||
73a4d10b | 673 | static __inline void |
fa5322fa AO |
674 | sh_media_STLO_L (void *p, int s, unsigned int mw) |
675 | { | |
73a4d10b | 676 | __builtin_sh_media_STLO_L ((char*)p + s, mw); |
fa5322fa AO |
677 | } |
678 | ||
73a4d10b | 679 | static __inline void |
fa5322fa AO |
680 | sh_media_STLO_Q (void *p, int s, unsigned long long mw) |
681 | { | |
73a4d10b | 682 | __builtin_sh_media_STLO_Q ((char*)p + s, mw); |
fa5322fa AO |
683 | } |
684 | ||
73a4d10b | 685 | /* Miscellaneous intrinsics */ |
fa5322fa | 686 | |
73a4d10b R |
687 | #define sh_media_NSB __builtin_sh_media_NSB |
688 | ||
689 | static __inline unsigned long long | |
fa5322fa AO |
690 | sh_media_BYTEREV (unsigned long long mm) |
691 | { | |
73a4d10b R |
692 | typedef float v8qi __attribute__ ((mode(V8QI))); |
693 | ||
694 | return (unsigned long long) __builtin_sh_media_BYTEREV ((v8qi) mm); | |
fa5322fa AO |
695 | } |
696 | ||
73a4d10b R |
697 | __inline__ static unsigned long long |
698 | sh_media_CMVEQ (unsigned long long mm, unsigned long long mn, unsigned long long mw) __attribute__ ((always_inline)); | |
699 | ||
700 | __inline__ static unsigned long long | |
fa5322fa AO |
701 | sh_media_CMVEQ (unsigned long long mm, unsigned long long mn, unsigned long long mw) |
702 | { | |
73a4d10b | 703 | return mm == 0 ? mn : mw; |
fa5322fa AO |
704 | } |
705 | ||
73a4d10b R |
706 | __inline__ static unsigned long long |
707 | sh_media_CMVNE (unsigned long long mm, unsigned long long mn, unsigned long long mw) __attribute__ ((always_inline)); | |
708 | ||
709 | __inline__ static unsigned long long | |
fa5322fa AO |
710 | sh_media_CMVNE (unsigned long long mm, unsigned long long mn, unsigned long long mw) |
711 | { | |
73a4d10b | 712 | return mm != 0 ? mn : mw; |
fa5322fa AO |
713 | } |
714 | ||
73a4d10b | 715 | static __inline long long |
fa5322fa AO |
716 | sh_media_ADDZ_L (unsigned int mm, unsigned int mn) |
717 | { | |
73a4d10b | 718 | return mm + mn; |
fa5322fa AO |
719 | } |
720 | ||
0fa2e4df | 721 | /* NOP and Synchronization intrinsics not implemented here. */ |
73a4d10b R |
722 | |
723 | static __inline__ void sh_media_PREFO(void *mm, int s) | |
724 | { | |
725 | __builtin_sh_media_PREFO (mm + s, 0, 0); | |
726 | } | |
727 | ||
0fa2e4df | 728 | /* Event Handling intrinsics not implemented here. */ |
73a4d10b R |
729 | |
730 | /* Old asm stuff */ | |
731 | ||
732 | static __inline__ | |
fa5322fa AO |
733 | void |
734 | sh_media_NOP (void) | |
735 | { | |
73a4d10b | 736 | __asm__ ("nop" : :); |
fa5322fa AO |
737 | } |
738 | ||
739 | __inline__ static | |
740 | unsigned long long | |
741 | sh_media_SWAP_Q (void *mm, long long mn, unsigned long long mw) | |
742 | { | |
743 | unsigned long long res; | |
744 | unsigned long long *addr = (unsigned long long *)((char *)mm + mn); | |
745 | __asm__ ("swap.q %m1, %0" : "=r" (res), "+o" (*addr) : "0" (mw)); | |
746 | return res; | |
747 | } | |
748 | ||
749 | __inline__ static | |
750 | void | |
751 | sh_media_SYNCI (void) | |
752 | { | |
753 | __asm__ __volatile__ ("synci"); | |
754 | } | |
755 | ||
756 | __inline__ static | |
757 | void | |
758 | sh_media_SYNCO (void) | |
759 | { | |
760 | __asm__ __volatile__ ("synco"); | |
761 | } | |
762 | ||
763 | __inline__ static | |
764 | void | |
765 | sh_media_ALLOCO (void *mm, int s) | |
766 | { | |
73a4d10b | 767 | __builtin_sh_media_ALLOCO (mm + s); |
fa5322fa AO |
768 | } |
769 | ||
770 | __inline__ static | |
771 | void | |
772 | sh_media_ICBI (void *mm, int s) | |
773 | { | |
774 | __asm__ __volatile__ ("icbi %m0" : : "o" (((char*)mm)[s])); | |
775 | } | |
776 | ||
777 | __inline__ static | |
778 | void | |
779 | sh_media_OCBI (void *mm, int s) | |
780 | { | |
781 | __asm__ __volatile__ ("ocbi %m0" : : "o" (((char*)mm)[s])); | |
782 | } | |
783 | ||
784 | __inline__ static | |
785 | void | |
786 | sh_media_OCBP (void *mm, int s) | |
787 | { | |
788 | __asm__ __volatile__ ("ocbp %m0" : : "o" (((char*)mm)[s])); | |
789 | } | |
790 | ||
791 | __inline__ static | |
792 | void | |
793 | sh_media_OCBWB (void *mm, int s) | |
794 | { | |
795 | __asm__ __volatile__ ("ocbwb %m0" : : "o" (((char*)mm)[s])); | |
796 | } | |
797 | ||
798 | __inline__ static | |
799 | void | |
800 | sh_media_PREFI (void *mm, int s) | |
801 | { | |
802 | __asm__ __volatile__ ("prefi %m0" : : "o" (((char*)mm)[s])); | |
803 | } | |
804 | ||
fa5322fa AO |
805 | __inline__ static |
806 | void | |
807 | sh_media_BRK (void) | |
808 | { | |
809 | __asm__ __volatile__ ("brk"); | |
810 | } | |
811 | ||
812 | __inline__ static | |
813 | void | |
814 | sh_media_TRAPA (unsigned long long mm) | |
815 | { | |
816 | __asm__ __volatile__ ("trapa %%0" : : "r" (mm)); | |
817 | } | |
818 | ||
819 | __inline__ static | |
820 | short | |
821 | sh_media_unaligned_LD_W (void *p) | |
822 | { | |
823 | #if __LITTLE_ENDIAN__ | |
824 | return (((unsigned char *)p)[0] | |
825 | | (((short)((__signed__ char *)p)[1]) << 8)); | |
826 | #else | |
827 | return ((((short)((__signed__ char *)p)[0]) << 8) | |
828 | | ((unsigned char *)p)[1]); | |
829 | #endif | |
830 | } | |
831 | ||
832 | __inline__ static | |
833 | unsigned short | |
834 | sh_media_unaligned_LD_UW (void *p) | |
835 | { | |
836 | unsigned char *addr = p; | |
837 | #if __LITTLE_ENDIAN__ | |
838 | return sh_media_MSHFLO_B (addr[0], addr[1]); | |
839 | #else | |
840 | return sh_media_MSHFLO_B (addr[1], addr[0]); | |
841 | #endif | |
842 | } | |
843 | ||
73a4d10b R |
844 | /* We don't use the sh_media_LD* functions here because that turned out |
845 | to impede constant propagation of the offsets into the ldhi / ldlo | |
846 | instructions. */ | |
fa5322fa AO |
847 | __inline__ static |
848 | int | |
849 | sh_media_unaligned_LD_L (void *p) | |
850 | { | |
851 | #if __LITTLE_ENDIAN__ | |
73a4d10b R |
852 | return (__builtin_sh_media_LDHI_L ((char *)p + 3) |
853 | | __builtin_sh_media_LDLO_L (p)); | |
fa5322fa | 854 | #else |
73a4d10b R |
855 | return (__builtin_sh_media_LDLO_L ((char *)p + 3) |
856 | | __builtin_sh_media_LDHI_L (p)); | |
fa5322fa AO |
857 | #endif |
858 | } | |
859 | ||
860 | __inline__ static | |
861 | long long | |
862 | sh_media_unaligned_LD_Q (void *p) | |
863 | { | |
864 | #if __LITTLE_ENDIAN__ | |
73a4d10b R |
865 | return (__builtin_sh_media_LDHI_Q ((char *)p + 7) |
866 | | __builtin_sh_media_LDLO_Q (p)); | |
fa5322fa | 867 | #else |
73a4d10b R |
868 | return (__builtin_sh_media_LDLO_Q ((char *)p + 7) |
869 | | __builtin_sh_media_LDHI_Q (p)); | |
fa5322fa AO |
870 | #endif |
871 | } | |
872 | ||
873 | __inline__ static | |
874 | void | |
875 | sh_media_unaligned_ST_W (void *p, unsigned int k) | |
876 | { | |
877 | char *addr = p; | |
878 | #if __LITTLE_ENDIAN__ | |
879 | addr[0] = k; | |
880 | addr[1] = k >> 8; | |
881 | #else | |
882 | addr[1] = k; | |
883 | addr[0] = k >> 8; | |
884 | #endif | |
885 | } | |
886 | ||
73a4d10b R |
887 | /* We don't use the sh_media_ST* functions here because that turned out |
888 | to impede constant propagation of the offsets into the ldhi / ldlo | |
889 | instructions. */ | |
fa5322fa AO |
890 | __inline__ static |
891 | void | |
892 | sh_media_unaligned_ST_L (void *p, unsigned int k) | |
893 | { | |
894 | #if __LITTLE_ENDIAN__ | |
73a4d10b R |
895 | __builtin_sh_media_STHI_L (p + 3, k); |
896 | __builtin_sh_media_STLO_L (p, k); | |
fa5322fa | 897 | #else |
73a4d10b R |
898 | __builtin_sh_media_STLO_L (p + 3, k); |
899 | __builtin_sh_media_STHI_L (p, k); | |
fa5322fa AO |
900 | #endif |
901 | } | |
902 | ||
903 | __inline__ static | |
904 | void | |
905 | sh_media_unaligned_ST_Q (void *p, unsigned long long k) | |
906 | { | |
907 | #if __LITTLE_ENDIAN__ | |
73a4d10b R |
908 | __builtin_sh_media_STHI_Q (p + 7, k); |
909 | __builtin_sh_media_STLO_Q (p, k); | |
fa5322fa | 910 | #else |
73a4d10b R |
911 | __builtin_sh_media_STLO_Q (p + 7, k); |
912 | __builtin_sh_media_STHI_Q (p, k); | |
fa5322fa AO |
913 | #endif |
914 | } | |
915 | ||
916 | #if ! __SH4_NOFPU__ | |
917 | __inline__ static | |
918 | void | |
919 | sh_media_FVCOPY_S (const void *fvg, void *fvf) | |
920 | { | |
921 | const __GCC_FV *g = fvg; | |
922 | __GCC_FV *f = fvf; | |
923 | *f = *g; | |
924 | } | |
925 | ||
926 | __inline__ static | |
927 | void | |
928 | sh_media_FVADD_S (const void *fvg, const void *fvh, void *fvf) | |
929 | { | |
930 | const float *g = fvg, *h = fvh; | |
931 | float *f = fvf; | |
932 | #if 1 | |
933 | int i; | |
934 | ||
935 | for (i = 0; i < 4; i++) | |
936 | f[i] = g[i] + h[i]; | |
937 | #else | |
938 | f[0] = g[0] + h[0]; | |
939 | f[1] = g[1] + h[1]; | |
940 | f[2] = g[2] + h[2]; | |
941 | f[3] = g[3] + h[3]; | |
942 | #endif | |
943 | } | |
944 | ||
945 | __inline__ static | |
946 | void | |
947 | sh_media_FVSUB_S (const void *fvg, const void *fvh, void *fvf) | |
948 | { | |
949 | const float *g = fvg, *h = fvh; | |
950 | float *f = fvf; | |
951 | #if 1 | |
952 | int i; | |
953 | ||
954 | for (i = 0; i < 4; i++) | |
955 | f[i] = g[i] - h[i]; | |
956 | #else | |
957 | f[0] = g[0] - h[0]; | |
958 | f[1] = g[1] - h[1]; | |
959 | f[2] = g[2] - h[2]; | |
960 | f[3] = g[3] - h[3]; | |
961 | #endif | |
962 | } | |
963 | ||
964 | __inline__ static | |
965 | void | |
966 | sh_media_FMTRXCOPY_S (const void *mtrxg, void *mtrxf) | |
967 | { | |
968 | const __GCC_MTRX *g = mtrxg; | |
969 | __GCC_MTRX *f = mtrxf; | |
970 | *f = *g; | |
971 | } | |
972 | ||
973 | __inline__ static | |
974 | void | |
975 | sh_media_FMTRXADD_S (const void *mtrxg, const void *mtrxh, void *mtrxf) | |
976 | { | |
977 | const __GCC_FV *g = mtrxg, *h = mtrxh; | |
978 | __GCC_FV *f = mtrxf; | |
979 | #if 1 | |
980 | int i; | |
981 | ||
982 | for (i = 0; i < 4; i++) | |
983 | sh_media_FVADD_S (&g[i], &h[i], &f[i]); | |
984 | #else | |
985 | sh_media_FVADD_S (&g[0], &h[0], &f[0]); | |
986 | sh_media_FVADD_S (&g[1], &h[1], &f[1]); | |
987 | sh_media_FVADD_S (&g[2], &h[2], &f[2]); | |
988 | sh_media_FVADD_S (&g[3], &h[3], &f[3]); | |
989 | #endif | |
990 | } | |
991 | ||
992 | __inline__ static | |
993 | void | |
994 | sh_media_FMTRXSUB_S (const void *mtrxg, const void *mtrxh, void *mtrxf) | |
995 | { | |
996 | const __GCC_FV *g = mtrxg, *h = mtrxh; | |
997 | __GCC_FV *f = mtrxf; | |
998 | #if 1 | |
999 | int i; | |
1000 | ||
1001 | for (i = 0; i < 4; i++) | |
1002 | sh_media_FVSUB_S (&g[i], &h[i], &f[i]); | |
1003 | #else | |
1004 | sh_media_FVSUB_S (&g[0], &h[0], &f[0]); | |
1005 | sh_media_FVSUB_S (&g[1], &h[1], &f[1]); | |
1006 | sh_media_FVSUB_S (&g[2], &h[2], &f[2]); | |
1007 | sh_media_FVSUB_S (&g[3], &h[3], &f[3]); | |
1008 | #endif | |
1009 | } | |
1010 | ||
1011 | __inline__ static | |
1012 | void | |
50fe8924 OE |
1013 | sh_media_FTRVADD_S (const void *mtrxg, const void *fvh, const void *fvi, |
1014 | void *fvf) | |
fa5322fa AO |
1015 | { |
1016 | sh_media_FTRV_S (mtrxg, fvh, fvf); | |
1017 | sh_media_FVADD_S (fvf, fvi, fvf); | |
1018 | } | |
1019 | ||
1020 | __inline__ static | |
1021 | void | |
50fe8924 OE |
1022 | sh_media_FTRVSUB_S (const void *mtrxg, const void *fvh, const void *fvi, |
1023 | void *fvf) | |
fa5322fa AO |
1024 | { |
1025 | sh_media_FTRV_S (mtrxg, fvh, fvf); | |
1026 | sh_media_FVSUB_S (fvf, fvi, fvf); | |
1027 | } | |
1028 | ||
1029 | __inline__ static | |
1030 | void | |
1031 | sh_media_FMTRXMUL_S (const void *mtrxg, const void *mtrxh, void *mtrxf) | |
1032 | { | |
1033 | const __GCC_FV *g = mtrxg; | |
1034 | __GCC_FV *f = mtrxf; | |
1035 | #if 1 | |
1036 | int j; | |
1037 | ||
1038 | for (j = 0; j < 4; j++) | |
1039 | sh_media_FTRV_S (mtrxh, &g[j], &f[j]); | |
1040 | #else | |
1041 | sh_media_FTRV_S (mtrxh, &g[0], &f[0]); | |
1042 | sh_media_FTRV_S (mtrxh, &g[1], &f[1]); | |
1043 | sh_media_FTRV_S (mtrxh, &g[2], &f[2]); | |
1044 | sh_media_FTRV_S (mtrxh, &g[3], &f[3]); | |
1045 | #endif | |
1046 | } | |
1047 | ||
1048 | __inline__ static | |
1049 | void | |
50fe8924 OE |
1050 | sh_media_FMTRXMULADD_S (const void *mtrxg, const void *mtrxh, |
1051 | const void *mtrxi, void *mtrxf) | |
fa5322fa AO |
1052 | { |
1053 | const __GCC_FV *g = mtrxg, *i = mtrxi; | |
1054 | __GCC_FV *f = mtrxf; | |
1055 | #if 1 | |
1056 | int j; | |
1057 | ||
1058 | for (j = 0; j < 4; j++) | |
1059 | sh_media_FTRVADD_S (mtrxh, &g[j], &i[j], &f[j]); | |
1060 | #else | |
1061 | sh_media_FTRVADD_S (mtrxh, &g[0], &i[0], &f[0]); | |
1062 | sh_media_FTRVADD_S (mtrxh, &g[1], &i[1], &f[1]); | |
1063 | sh_media_FTRVADD_S (mtrxh, &g[2], &i[2], &f[2]); | |
1064 | sh_media_FTRVADD_S (mtrxh, &g[3], &i[3], &f[3]); | |
1065 | #endif | |
1066 | } | |
1067 | ||
1068 | __inline__ static | |
1069 | void | |
50fe8924 OE |
1070 | sh_media_FMTRXMULSUB_S (const void *mtrxg, const void *mtrxh, |
1071 | const void *mtrxi, void *mtrxf) | |
fa5322fa AO |
1072 | { |
1073 | const __GCC_FV *g = mtrxg, *i = mtrxi; | |
1074 | __GCC_FV *f = mtrxf; | |
1075 | #if 1 | |
1076 | int j; | |
1077 | ||
1078 | for (j = 0; j < 4; j++) | |
1079 | sh_media_FTRVSUB_S (mtrxh, &g[j], &i[j], &f[j]); | |
1080 | #else | |
1081 | sh_media_FTRVSUB_S (mtrxh, &g[0], &i[0], &f[0]); | |
1082 | sh_media_FTRVSUB_S (mtrxh, &g[1], &i[1], &f[1]); | |
1083 | sh_media_FTRVSUB_S (mtrxh, &g[2], &i[2], &f[2]); | |
1084 | sh_media_FTRVSUB_S (mtrxh, &g[3], &i[3], &f[3]); | |
1085 | #endif | |
1086 | } | |
1087 | #endif /* ! __SH4_NOFPU__ */ | |
1088 | ||
1089 | #endif /* __SHMEDIA__ */ | |
1090 | ||
1091 | #endif /* _USHMEDIA_H */ |