1 /* Copyright (C) 2000, 2001, 2004 Free Software Foundation, Inc.
3 This file is part of GCC.
5 GCC is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2, or (at your option)
10 GCC is distributed in the hope that it will be useful,
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.
15 You should have received a copy of the GNU General Public License
16 along with GCC; see the file COPYING. If not, write to
17 the Free Software Foundation, 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. */
20 /* As a special exception, if you include this header file into source
21 files compiled by GCC, this header file does not by itself cause
22 the resulting executable to be covered by the GNU General Public
23 License. This exception does not however invalidate any other
24 reasons why the executable file might be covered by the GNU General
27 /* ushmedia.h: Intrinsics corresponding to SHmedia instructions that
28 may be executed in both user and privileged mode. */
35 typedef float __GCC_FV
__attribute__ ((vector_size (4 * sizeof (float))));
36 typedef float __GCC_MTRX
__attribute__ ((vector_size (16 * sizeof (float))));
41 sh_media_MABS_L (unsigned long long mm
)
43 unsigned long long res
;
44 __asm__ ("mabs.l %1, %0" : "=r" (res
) : "r" (mm
));
50 sh_media_MABS_W (unsigned long long mm
)
52 unsigned long long res
;
53 __asm__ ("mabs.w %1, %0" : "=r" (res
) : "r" (mm
));
59 sh_media_MADD_L (unsigned long long mm
, unsigned long long mn
)
61 unsigned long long res
;
62 __asm__ ("madd.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
68 sh_media_MADD_W (unsigned long long mm
, unsigned long long mn
)
70 unsigned long long res
;
71 __asm__ ("madd.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
77 sh_media_MADDS_L (unsigned long long mm
, unsigned long long mn
)
79 unsigned long long res
;
80 __asm__ ("madds.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
86 sh_media_MADDS_UB (unsigned long long mm
, unsigned long long mn
)
88 unsigned long long res
;
89 __asm__ ("madds.ub %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
95 sh_media_MADDS_W (unsigned long long mm
, unsigned long long mn
)
97 unsigned long long res
;
98 __asm__ ("madds.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
104 sh_media_MCMPEQ_B (unsigned long long mm
, unsigned long long mn
)
106 unsigned long long res
;
107 __asm__ ("mcmpeq.b %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
113 sh_media_MCMPEQ_L (unsigned long long mm
, unsigned long long mn
)
115 unsigned long long res
;
116 __asm__ ("mcmpeq.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
122 sh_media_MCMPEQ_W (unsigned long long mm
, unsigned long long mn
)
124 unsigned long long res
;
125 __asm__ ("mcmpeq.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
131 sh_media_MCMPGT_L (unsigned long long mm
, unsigned long long mn
)
133 unsigned long long res
;
134 __asm__ ("mcmpgt.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
140 sh_media_MCMPGT_UB (unsigned long long mm
, unsigned long long mn
)
142 unsigned long long res
;
143 __asm__ ("mcmpgt.ub %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
149 sh_media_MCMPGT_W (unsigned long long mm
, unsigned long long mn
)
151 unsigned long long res
;
152 __asm__ ("mcmpgt.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
158 sh_media_MCMV (unsigned long long mm
, unsigned long long mn
, unsigned long long mw
)
160 unsigned long long res
;
161 __asm__ ("mcmv %1, %2, %0" : "=r" (res
)
162 : "r" (mm
), "r" (mn
), "0" (mw
));
168 sh_media_MCNVS_LW (unsigned long long mm
, unsigned long long mn
)
170 unsigned long long res
;
171 __asm__ ("mcnvs.lw %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
177 sh_media_MCNVS_WB (unsigned long long mm
, unsigned long long mn
)
179 unsigned long long res
;
180 __asm__ ("mcnvs.wb %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
186 sh_media_MCNVS_WUB (unsigned long long mm
, unsigned long long mn
)
188 unsigned long long res
;
189 __asm__ ("mcnvs.wub %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
195 sh_media_MEXTR1 (unsigned long long mm
, unsigned long long mn
)
197 unsigned long long res
;
198 __asm__ ("mextr1 %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
204 sh_media_MEXTR2 (unsigned long long mm
, unsigned long long mn
)
206 unsigned long long res
;
207 __asm__ ("mextr2 %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
213 sh_media_MEXTR3 (unsigned long long mm
, unsigned long long mn
)
215 unsigned long long res
;
216 __asm__ ("mextr3 %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
222 sh_media_MEXTR4 (unsigned long long mm
, unsigned long long mn
)
224 unsigned long long res
;
225 __asm__ ("mextr4 %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
231 sh_media_MEXTR5 (unsigned long long mm
, unsigned long long mn
)
233 unsigned long long res
;
234 __asm__ ("mextr5 %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
240 sh_media_MEXTR6 (unsigned long long mm
, unsigned long long mn
)
242 unsigned long long res
;
243 __asm__ ("mextr6 %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
249 sh_media_MEXTR7 (unsigned long long mm
, unsigned long long mn
)
251 unsigned long long res
;
252 __asm__ ("mextr7 %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
258 sh_media_MMACFX_WL (unsigned long long mm
, unsigned long long mn
, unsigned long long mw
)
260 unsigned long long res
;
261 __asm__ ("mmacfx.wl %1, %2, %0" : "=r" (res
)
262 : "r" (mm
), "r" (mn
), "0" (mw
));
268 sh_media_MMACNFX_WL (unsigned long long mm
, unsigned long long mn
, unsigned long long mw
)
270 unsigned long long res
;
271 __asm__ ("mmacnfx.wl %1, %2, %0" : "=r" (res
)
272 : "r" (mm
), "r" (mn
), "0" (mw
));
278 sh_media_MMUL_L (unsigned long long mm
, unsigned long long mn
)
280 unsigned long long res
;
281 __asm__ ("mmul.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
287 sh_media_MMUL_W (unsigned long long mm
, unsigned long long mn
)
289 unsigned long long res
;
290 __asm__ ("mmul.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
296 sh_media_MMULFX_L (unsigned long long mm
, unsigned long long mn
)
298 unsigned long long res
;
299 __asm__ ("mmulfx.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
305 sh_media_MMULFX_W (unsigned long long mm
, unsigned long long mn
)
307 unsigned long long res
;
308 __asm__ ("mmulfx.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
314 sh_media_MMULFXRP_W (unsigned long long mm
, unsigned long long mn
)
316 unsigned long long res
;
317 __asm__ ("mmulfxrp.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
323 sh_media_MMULHI_WL (unsigned long long mm
, unsigned long long mn
)
325 unsigned long long res
;
326 __asm__ ("mmulhi.wl %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
332 sh_media_MMULLO_WL (unsigned long long mm
, unsigned long long mn
)
334 unsigned long long res
;
335 __asm__ ("mmullo.wl %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
341 sh_media_MMULSUM_WQ (unsigned long long mm
, unsigned long long mn
, unsigned long long mw
)
343 unsigned long long res
;
344 __asm__ ("mmulsum.wq %1, %2, %0" : "=r" (res
)
345 : "r" (mm
), "r" (mn
), "0" (mw
));
351 sh_media_MPERM_W (unsigned long long mm
, unsigned int mn
)
353 unsigned long long res
;
354 __asm__ ("mperm.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
360 sh_media_MSAD_UBQ (unsigned long long mm
, unsigned long long mn
, unsigned long long mw
)
362 unsigned long long res
;
363 __asm__ ("msad.ubq %1, %2, %0" : "=r" (res
)
364 : "r" (mm
), "r" (mn
), "0" (mw
));
370 sh_media_MSHALDS_L (unsigned long long mm
, unsigned int mn
)
372 unsigned long long res
;
373 __asm__ ("mshalds.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
379 sh_media_MSHALDS_W (unsigned long long mm
, unsigned int mn
)
381 unsigned long long res
;
382 __asm__ ("mshalds.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
388 sh_media_MSHARD_L (unsigned long long mm
, unsigned int mn
)
390 unsigned long long res
;
391 __asm__ ("mshard.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
397 sh_media_MSHARD_W (unsigned long long mm
, unsigned int mn
)
399 unsigned long long res
;
400 __asm__ ("mshard.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
406 sh_media_MSHARDS_Q (long long mm
, unsigned int mn
)
409 __asm__ ("mshards.q %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
415 sh_media_MSHFHI_B (unsigned long long mm
, unsigned long long mn
)
417 unsigned long long res
;
418 __asm__ ("mshfhi.b %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
424 sh_media_MSHFHI_L (unsigned long long mm
, unsigned long long mn
)
426 unsigned long long res
;
427 __asm__ ("mshfhi.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
433 sh_media_MSHFHI_W (unsigned long long mm
, unsigned long long mn
)
435 unsigned long long res
;
436 __asm__ ("mshfhi.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
442 sh_media_MSHFLO_B (unsigned long long mm
, unsigned long long mn
)
444 unsigned long long res
;
445 __asm__ ("mshflo.b %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
451 sh_media_MSHFLO_L (unsigned long long mm
, unsigned long long mn
)
453 unsigned long long res
;
454 __asm__ ("mshflo.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
460 sh_media_MSHFLO_W (unsigned long long mm
, unsigned long long mn
)
462 unsigned long long res
;
463 __asm__ ("mshflo.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
469 sh_media_MSHLLD_L (unsigned long long mm
, unsigned int mn
)
471 unsigned long long res
;
472 __asm__ ("mshlld.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
478 sh_media_MSHLLD_W (unsigned long long mm
, unsigned int mn
)
480 unsigned long long res
;
481 __asm__ ("mshlld.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
487 sh_media_MSHLRD_L (unsigned long long mm
, unsigned int mn
)
489 unsigned long long res
;
490 __asm__ ("mshlrd.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
496 sh_media_MSHLRD_W (unsigned long long mm
, unsigned int mn
)
498 unsigned long long res
;
499 __asm__ ("mshlrd.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
505 sh_media_MSUB_L (unsigned long long mm
, unsigned long long mn
)
507 unsigned long long res
;
508 __asm__ ("msub.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
514 sh_media_MSUB_W (unsigned long long mm
, unsigned long long mn
)
516 unsigned long long res
;
517 __asm__ ("msub.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
523 sh_media_MSUBS_L (unsigned long long mm
, unsigned long long mn
)
525 unsigned long long res
;
526 __asm__ ("msubs.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
532 sh_media_MSUBS_UB (unsigned long long mm
, unsigned long long mn
)
534 unsigned long long res
;
535 __asm__ ("msubs.ub %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
541 sh_media_MSUBS_W (unsigned long long mm
, unsigned long long mn
)
543 unsigned long long res
;
544 __asm__ ("msubs.w %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
551 sh_media_FABS_D (double dg
)
554 __asm__ ("fabs.d %1, %0" : "=f" (res
) : "f" (dg
));
560 sh_media_FABS_S (float fg
)
563 __asm__ ("fabs.s %1, %0" : "=f" (res
) : "f" (fg
));
569 sh_media_FCMPUN_D (double dg
, double dh
)
572 __asm__ ("fcmpun.d %1, %2, %0" : "=f" (res
) : "f" (dg
), "f" (dh
));
578 sh_media_FCMPUN_S (float fg
, float fh
)
581 __asm__ ("fcmpun.s %1, %2, %0" : "=f" (res
) : "f" (fg
), "f" (fh
));
587 sh_media_FGETSCR (void)
590 __asm__ ("fgetscr %0" : "=f" (res
));
596 sh_media_FIPR_S (const void *fvg
, const void *fvh
)
599 __asm__ ("fipr.s %1, %2, %0" : "=f" (res
)
600 : "f" (*(const __GCC_FV
*)fvg
), "f" (*(const __GCC_FV
*)fvh
));
606 sh_media_FMAC_S (float fg
, float fh
, float fq
)
609 __asm__ ("fmac.s %1, %2, %0" : "=f" (res
)
610 : "f" (fg
), "f" (fh
), "0" (fq
));
616 sh_media_FMOV_DQ (double dg
)
619 __asm__ ("fmov.dq %1, %0" : "=r" (res
) : "f" (dg
));
625 sh_media_FMOV_LS (int mm
)
628 __asm__ ("fmov.ls %1, %0" : "=f" (res
) : "r" (mm
));
634 sh_media_FMOV_QD (long long mm
)
637 __asm__ ("fmov.qd %1, %0" : "=f" (res
) : "r" (mm
));
643 sh_media_FMOV_SL (float fg
)
646 __asm__ ("fmov.sl %1, %0" : "=r" (res
) : "f" (fg
));
652 sh_media_FPUTSCR (float fg
)
654 __asm__ ("fputscr %0" : : "f" (fg
));
659 sh_media_FSQRT_D (double dg
)
662 __asm__ ("fsqrt.d %1, %0" : "=f" (res
) : "f" (dg
));
668 sh_media_FSQRT_S (float fg
)
671 __asm__ ("fsqrt.s %1, %0" : "=f" (res
) : "f" (fg
));
677 sh_media_FTRV_S (const void *mtrxg
, const void *fvh
, void *fvf
)
679 __asm__ ("ftrv.s %2, %1, %0" : "=f" (*(__GCC_FV
*)fvf
)
680 : "f" (*(const __GCC_FV
*)fvh
), "f" (*(const __GCC_MTRX
*)mtrxg
));
682 #endif /* ! __SH4_NOFPU__ */
686 sh_media_LDHI_L (void *p
, int s
)
688 unsigned long long res
;
689 __asm__ ("ldhi.l %m1, %0" : "=r" (res
) : "o" (((char*)p
)[s
]));
695 sh_media_LDHI_Q (void *p
, int s
)
697 unsigned long long res
;
698 __asm__ ("ldhi.q %m1, %0" : "=r" (res
) : "o" (((char*)p
)[s
]));
704 sh_media_LDLO_L (void *p
, int s
)
706 unsigned long long res
;
707 __asm__ ("ldlo.l %m1, %0" : "=r" (res
) : "o" (((char*)p
)[s
]));
713 sh_media_LDLO_Q (void *p
, int s
)
715 unsigned long long res
;
716 __asm__ ("ldlo.q %m1, %0" : "=r" (res
) : "o" (((char*)p
)[s
]));
722 sh_media_STHI_L (void *p
, int s
, unsigned int mw
)
724 __asm__ ("sthi.l %m0, %1" : "+o" (((char*)p
)[s
]) : "r" (mw
));
729 sh_media_STHI_Q (void *p
, int s
, unsigned long long mw
)
731 __asm__ ("sthi.q %m0, %1" : "+o" (((char*)p
)[s
]) : "r" (mw
));
736 sh_media_STLO_L (void *p
, int s
, unsigned int mw
)
738 __asm__ ("stlo.l %m0, %1" : "+o" (((char*)p
)[s
]) : "r" (mw
));
743 sh_media_STLO_Q (void *p
, int s
, unsigned long long mw
)
745 __asm__ ("stlo.q %m0, %1" : "+o" (((char*)p
)[s
]) : "r" (mw
));
750 sh_media_NSB (long long mm
)
753 __asm__ ("nsb %1, %0" : "=r" (res
) : "r" (mm
));
759 sh_media_BYTEREV (unsigned long long mm
)
761 unsigned long long res
;
762 __asm__ ("byterev %1, %0" : "=r" (res
) : "r" (mm
));
768 sh_media_CMVEQ (unsigned long long mm
, unsigned long long mn
, unsigned long long mw
)
770 unsigned long long res
;
771 __asm__ ("cmveq %1, %2, %0" : "=r" (res
)
772 : "r" (mm
), "r" (mn
), "0" (mw
));
778 sh_media_CMVNE (unsigned long long mm
, unsigned long long mn
, unsigned long long mw
)
780 unsigned long long res
;
781 __asm__ ("cmveq %1, %2, %0" : "=r" (res
)
782 : "r" (mm
), "r" (mn
), "0" (mw
));
788 sh_media_ADDZ_L (unsigned int mm
, unsigned int mn
)
790 unsigned long long res
;
791 __asm__ ("addz.l %1, %2, %0" : "=r" (res
) : "r" (mm
), "r" (mn
));
799 __asm__
__volatile__ ("nop" : :);
804 sh_media_SWAP_Q (void *mm
, long long mn
, unsigned long long mw
)
806 unsigned long long res
;
807 unsigned long long *addr
= (unsigned long long *)((char *)mm
+ mn
);
808 __asm__ ("swap.q %m1, %0" : "=r" (res
), "+o" (*addr
) : "0" (mw
));
814 sh_media_SYNCI (void)
816 __asm__
__volatile__ ("synci");
821 sh_media_SYNCO (void)
823 __asm__
__volatile__ ("synco");
828 sh_media_ALLOCO (void *mm
, int s
)
830 __asm__
__volatile__ ("alloco %m0" : : "o" (((char*)mm
)[s
]));
835 sh_media_ICBI (void *mm
, int s
)
837 __asm__
__volatile__ ("icbi %m0" : : "o" (((char*)mm
)[s
]));
842 sh_media_OCBI (void *mm
, int s
)
844 __asm__
__volatile__ ("ocbi %m0" : : "o" (((char*)mm
)[s
]));
849 sh_media_OCBP (void *mm
, int s
)
851 __asm__
__volatile__ ("ocbp %m0" : : "o" (((char*)mm
)[s
]));
856 sh_media_OCBWB (void *mm
, int s
)
858 __asm__
__volatile__ ("ocbwb %m0" : : "o" (((char*)mm
)[s
]));
863 sh_media_PREFI (void *mm
, int s
)
865 __asm__
__volatile__ ("prefi %m0" : : "o" (((char*)mm
)[s
]));
870 sh_media_PREFO (void *mm
, int s
)
872 __asm__
__volatile__ ("ld.b %m0, r63" : : "o" (((char*)mm
)[s
]));
879 __asm__
__volatile__ ("brk");
884 sh_media_TRAPA (unsigned long long mm
)
886 __asm__
__volatile__ ("trapa %%0" : : "r" (mm
));
891 sh_media_unaligned_LD_W (void *p
)
893 #if __LITTLE_ENDIAN__
894 return (((unsigned char *)p
)[0]
895 | (((short)((__signed__
char *)p
)[1]) << 8));
897 return ((((short)((__signed__
char *)p
)[0]) << 8)
898 | ((unsigned char *)p
)[1]);
904 sh_media_unaligned_LD_UW (void *p
)
906 unsigned char *addr
= p
;
907 #if __LITTLE_ENDIAN__
908 return sh_media_MSHFLO_B (addr
[0], addr
[1]);
910 return sh_media_MSHFLO_B (addr
[1], addr
[0]);
916 sh_media_unaligned_LD_L (void *p
)
918 #if __LITTLE_ENDIAN__
919 return sh_media_LDHI_L (p
, 3) | sh_media_LDLO_L (p
, 0);
921 return sh_media_LDLO_L (p
, 3) | sh_media_LDHI_L (p
, 0);
927 sh_media_unaligned_LD_Q (void *p
)
929 #if __LITTLE_ENDIAN__
930 return sh_media_LDHI_Q (p
, 7) | sh_media_LDLO_Q (p
, 0);
932 return sh_media_LDLO_Q (p
, 7) | sh_media_LDHI_Q (p
, 0);
938 sh_media_unaligned_ST_W (void *p
, unsigned int k
)
941 #if __LITTLE_ENDIAN__
952 sh_media_unaligned_ST_L (void *p
, unsigned int k
)
954 #if __LITTLE_ENDIAN__
955 sh_media_STHI_L (p
, 3, k
);
956 sh_media_STLO_L (p
, 0, k
);
958 sh_media_STLO_L (p
, 3, k
);
959 sh_media_STHI_L (p
, 0, k
);
965 sh_media_unaligned_ST_Q (void *p
, unsigned long long k
)
967 #if __LITTLE_ENDIAN__
968 sh_media_STHI_Q (p
, 7, k
);
969 sh_media_STLO_Q (p
, 0, k
);
971 sh_media_STLO_Q (p
, 7, k
);
972 sh_media_STHI_Q (p
, 0, k
);
979 sh_media_FVCOPY_S (const void *fvg
, void *fvf
)
981 const __GCC_FV
*g
= fvg
;
988 sh_media_FVADD_S (const void *fvg
, const void *fvh
, void *fvf
)
990 const float *g
= fvg
, *h
= fvh
;
995 for (i
= 0; i
< 4; i
++)
1007 sh_media_FVSUB_S (const void *fvg
, const void *fvh
, void *fvf
)
1009 const float *g
= fvg
, *h
= fvh
;
1014 for (i
= 0; i
< 4; i
++)
1026 sh_media_FMTRXCOPY_S (const void *mtrxg
, void *mtrxf
)
1028 const __GCC_MTRX
*g
= mtrxg
;
1029 __GCC_MTRX
*f
= mtrxf
;
1035 sh_media_FMTRXADD_S (const void *mtrxg
, const void *mtrxh
, void *mtrxf
)
1037 const __GCC_FV
*g
= mtrxg
, *h
= mtrxh
;
1038 __GCC_FV
*f
= mtrxf
;
1042 for (i
= 0; i
< 4; i
++)
1043 sh_media_FVADD_S (&g
[i
], &h
[i
], &f
[i
]);
1045 sh_media_FVADD_S (&g
[0], &h
[0], &f
[0]);
1046 sh_media_FVADD_S (&g
[1], &h
[1], &f
[1]);
1047 sh_media_FVADD_S (&g
[2], &h
[2], &f
[2]);
1048 sh_media_FVADD_S (&g
[3], &h
[3], &f
[3]);
1054 sh_media_FMTRXSUB_S (const void *mtrxg
, const void *mtrxh
, void *mtrxf
)
1056 const __GCC_FV
*g
= mtrxg
, *h
= mtrxh
;
1057 __GCC_FV
*f
= mtrxf
;
1061 for (i
= 0; i
< 4; i
++)
1062 sh_media_FVSUB_S (&g
[i
], &h
[i
], &f
[i
]);
1064 sh_media_FVSUB_S (&g
[0], &h
[0], &f
[0]);
1065 sh_media_FVSUB_S (&g
[1], &h
[1], &f
[1]);
1066 sh_media_FVSUB_S (&g
[2], &h
[2], &f
[2]);
1067 sh_media_FVSUB_S (&g
[3], &h
[3], &f
[3]);
1073 sh_media_FTRVADD_S (const void *mtrxg
, const void *fvh
, const void *fvi
, void *fvf
)
1075 sh_media_FTRV_S (mtrxg
, fvh
, fvf
);
1076 sh_media_FVADD_S (fvf
, fvi
, fvf
);
1081 sh_media_FTRVSUB_S (const void *mtrxg
, const void *fvh
, const void *fvi
, void *fvf
)
1083 sh_media_FTRV_S (mtrxg
, fvh
, fvf
);
1084 sh_media_FVSUB_S (fvf
, fvi
, fvf
);
1089 sh_media_FMTRXMUL_S (const void *mtrxg
, const void *mtrxh
, void *mtrxf
)
1091 const __GCC_FV
*g
= mtrxg
;
1092 __GCC_FV
*f
= mtrxf
;
1096 for (j
= 0; j
< 4; j
++)
1097 sh_media_FTRV_S (mtrxh
, &g
[j
], &f
[j
]);
1099 sh_media_FTRV_S (mtrxh
, &g
[0], &f
[0]);
1100 sh_media_FTRV_S (mtrxh
, &g
[1], &f
[1]);
1101 sh_media_FTRV_S (mtrxh
, &g
[2], &f
[2]);
1102 sh_media_FTRV_S (mtrxh
, &g
[3], &f
[3]);
1108 sh_media_FMTRXMULADD_S (const void *mtrxg
, const void *mtrxh
, const void *mtrxi
, void *mtrxf
)
1110 const __GCC_FV
*g
= mtrxg
, *i
= mtrxi
;
1111 __GCC_FV
*f
= mtrxf
;
1115 for (j
= 0; j
< 4; j
++)
1116 sh_media_FTRVADD_S (mtrxh
, &g
[j
], &i
[j
], &f
[j
]);
1118 sh_media_FTRVADD_S (mtrxh
, &g
[0], &i
[0], &f
[0]);
1119 sh_media_FTRVADD_S (mtrxh
, &g
[1], &i
[1], &f
[1]);
1120 sh_media_FTRVADD_S (mtrxh
, &g
[2], &i
[2], &f
[2]);
1121 sh_media_FTRVADD_S (mtrxh
, &g
[3], &i
[3], &f
[3]);
1127 sh_media_FMTRXMULSUB_S (const void *mtrxg
, const void *mtrxh
, const void *mtrxi
, void *mtrxf
)
1129 const __GCC_FV
*g
= mtrxg
, *i
= mtrxi
;
1130 __GCC_FV
*f
= mtrxf
;
1134 for (j
= 0; j
< 4; j
++)
1135 sh_media_FTRVSUB_S (mtrxh
, &g
[j
], &i
[j
], &f
[j
]);
1137 sh_media_FTRVSUB_S (mtrxh
, &g
[0], &i
[0], &f
[0]);
1138 sh_media_FTRVSUB_S (mtrxh
, &g
[1], &i
[1], &f
[1]);
1139 sh_media_FTRVSUB_S (mtrxh
, &g
[2], &i
[2], &f
[2]);
1140 sh_media_FTRVSUB_S (mtrxh
, &g
[3], &i
[3], &f
[3]);
1143 #endif /* ! __SH4_NOFPU__ */
1145 #endif /* __SHMEDIA__ */
1147 #endif /* _USHMEDIA_H */