16 #define gte_ldv1(r0) \
23 #define gte_ldv2(r0) \
30 #define gte_ldv3(r0, r1, r2) \
39 : "r"(r0), "r"(r1), "r"(r2))
41 #define gte_ldv3c(r0) \
46 "lwc2 $3, 12( %0 );" \
47 "lwc2 $4, 16( %0 );" \
52 #define gte_ldv3c_vertc(r0) \
56 "lwc2 $2, 12( %0 );" \
57 "lwc2 $3, 16( %0 );" \
58 "lwc2 $4, 24( %0 );" \
63 #define gte_ldv01(r0, r1) \
72 #define gte_ldv01c(r0) \
81 #define gte_ldrgb(r0) __asm__ volatile("lwc2 $6, 0( %0 )" : : "r"(r0))
83 #define gte_ldrgb3(r0, r1, r2) \
85 "lwc2 $20, 0( %0 );" \
86 "lwc2 $21, 0( %1 );" \
87 "lwc2 $22, 0( %2 );" \
90 : "r"(r0), "r"(r1), "r"(r2))
92 #define gte_ldrgb3c(r0) \
94 "lwc2 $20, 0( %0 );" \
95 "lwc2 $21, 4( %0 );" \
96 "lwc2 $22, 8( %0 );" \
101 #define gte_ldlv0(r0) \
103 "lhu $13, 4( %0 );" \
104 "lhu $12, 0( %0 );" \
105 "sll $13, $13, 16;" \
106 "or $12, $12, $13;" \
113 #define gte_ldlvl(r0) \
115 "lwc2 $9, 0( %0 );" \
116 "lwc2 $10, 4( %0 );" \
117 "lwc2 $11, 8( %0 )" \
121 #define gte_ldsv(r0) \
123 "lhu $12, 0( %0 );" \
124 "lhu $13, 2( %0 );" \
125 "lhu $14, 4( %0 );" \
131 : "$12", "$13", "$14")
133 #define gte_ldbv(r0) \
135 "lbu $12, 0( %0 );" \
136 "lbu $13, 1( %0 );" \
143 #define gte_ldcv(r0) \
145 "lbu $12, 0( %0 );" \
146 "lbu $13, 1( %0 );" \
147 "lbu $14, 2( %0 );" \
153 : "$12", "$13", "$14")
155 #define gte_ldclmv(r0) \
157 "lhu $12, 0( %0 );" \
158 "lhu $13, 6( %0 );" \
159 "lhu $14, 12( %0 );" \
165 : "$12", "$13", "$14")
167 #define gte_lddp(r0) __asm__ volatile("mtc2 %0, $8" : : "r"(r0))
169 #define gte_ldsxy0(r0) __asm__ volatile("mtc2 %0, $12" : : "r"(r0))
171 #define gte_ldsxy1(r0) __asm__ volatile("mtc2 %0, $13" : : "r"(r0))
173 #define gte_ldsxy2(r0) __asm__ volatile("mtc2 %0, $14" : : "r"(r0))
175 #define gte_ldsxy3(r0, r1, r2) \
181 : "r"(r0), "r"(r1), "r"(r2))
183 #define gte_ldsxy3c(r0) \
185 "lwc2 $12, 0( %0 );" \
186 "lwc2 $13, 4( %0 );" \
187 "lwc2 $14, 8( %0 )" \
191 #define gte_ldsz3(r0, r1, r2) \
197 : "r"(r0), "r"(r1), "r"(r2))
199 #define gte_ldsz4(r0, r1, r2, r3) \
206 : "r"(r0), "r"(r1), "r"(r2), "r"(r3))
208 #define gte_ldopv1(r0) \
218 : "$12", "$13", "$14")
220 #define gte_ldopv2(r0) \
222 "lwc2 $11, 8( %0 );" \
223 "lwc2 $9, 0( %0 );" \
224 "lwc2 $10, 4( %0 )" \
228 #define gte_ldlzc(r0) __asm__ volatile("mtc2 %0, $30" : : "r"(r0))
230 #define gte_SetRGBcd(r0) __asm__ volatile("lwc2 $6, 0( %0 )" : : "r"(r0))
232 #define gte_ldbkdir(r0, r1, r2) \
238 : "r"(r0), "r"(r1), "r"(r2))
240 #define gte_SetBackColor(r0, r1, r2) \
249 : "r"(r0), "r"(r1), "r"(r2) \
250 : "$12", "$13", "$14")
252 #define gte_ldfcdir(r0, r1, r2) \
258 : "r"(r0), "r"(r1), "r"(r2))
260 #define gte_SetFarColor(r0, r1, r2) \
269 : "r"(r0), "r"(r1), "r"(r2) \
270 : "$12", "$13", "$14")
272 #define gte_SetGeomOffset(r0, r1) \
282 #define gte_SetGeomScreen(r0) __asm__ volatile("ctc2 %0, $26" : : "r"(r0))
284 #define gte_ldsvrtrow0(r0) \
294 #define gte_SetRotMatrix(r0) \
301 "lw $13, 12( %0 );" \
302 "lw $14, 16( %0 );" \
308 : "$12", "$13", "$14")
310 #define gte_ldsvllrow0(r0) \
320 #define gte_SetLightMatrix(r0) \
327 "lw $13, 12( %0 );" \
328 "lw $14, 16( %0 );" \
334 : "$12", "$13", "$14")
336 #define gte_ldsvlcrow0(r0) \
346 #define gte_SetColorMatrix(r0) \
353 "lw $13, 12( %0 );" \
354 "lw $14, 16( %0 );" \
360 : "$12", "$13", "$14")
362 #define gte_SetTransMatrix(r0) \
364 "lw $12, 20( %0 );" \
365 "lw $13, 24( %0 );" \
367 "lw $14, 28( %0 );" \
372 : "$12", "$13", "$14")
374 #define gte_ldtr(r0, r1, r2) \
380 : "r"(r0), "r"(r1), "r"(r2))
382 #define gte_SetTransVector(r0) \
392 : "$12", "$13", "$14")
394 #define gte_ld_intpol_uv0(r0) \
396 "lbu $12, 0( %0 );" \
397 "lbu $13, 1( %0 );" \
404 #define gte_ld_intpol_uv1(r0) \
406 "lbu $12, 0( %0 );" \
407 "lbu $13, 1( %0 );" \
414 #define gte_ld_intpol_bv0(r0) \
416 "lbu $12, 0( %0 );" \
417 "lbu $13, 1( %0 );" \
424 #define gte_ld_intpol_bv1(r0) \
426 "lbu $12, 0( %0 );" \
427 "lbu $13, 1( %0 );" \
434 #define gte_ld_intpol_sv0(r0) \
444 : "$12", "$13", "$14")
446 #define gte_ld_intpol_sv1(r0) \
456 : "$12", "$13", "$14")
458 #define gte_ldfc(r0) \
468 : "$12", "$13", "$14")
470 #define gte_ldopv2SV(r0) \
480 : "$12", "$13", "$14")
482 #define gte_ldopv1SV(r0) \
492 : "$12", "$13", "$14")
540 #define gte_rtir_sf0() \
546 #define gte_rtv0tr() \
552 #define gte_rtv1tr() \
558 #define gte_rtv2tr() \
564 #define gte_rtirtr() \
570 #define gte_rtv0bk() \
576 #define gte_rtv1bk() \
582 #define gte_rtv2bk() \
588 #define gte_rtirbk() \
624 #define gte_llv0tr() \
630 #define gte_llv1tr() \
636 #define gte_llv2tr() \
642 #define gte_llirtr() \
648 #define gte_llv0bk() \
654 #define gte_llv1bk() \
660 #define gte_llv2bk() \
666 #define gte_llirbk() \
702 #define gte_lcv0tr() \
708 #define gte_lcv1tr() \
714 #define gte_lcv2tr() \
720 #define gte_lcirtr() \
726 #define gte_lcv0bk() \
732 #define gte_lcv1bk() \
738 #define gte_lcv2bk() \
744 #define gte_lcirbk() \
768 #define gte_intpl() \
774 #define gte_sqr12() \
834 #define gte_nclip() \
840 #define gte_avsz3() \
846 #define gte_avsz4() \
864 #define gte_gpf12() \
876 #define gte_gpl12() \
888 #define gte_mvmva_core(r0) \
896 #define gte_mvmva(sf, mx, v, cv, lm) \
897 gte_mvmva_core(0x0400012 | ((sf) << 19) | ((mx) << 17) | ((v) << 15) | ((cv) << 13) | ((lm) << 10))
903 #define gte_rtps_b() __asm__ volatile("cop2 0x0180001;")
904 #define gte_rtpt_b() __asm__ volatile("cop2 0x0280030;")
905 #define gte_rt_b() __asm__ volatile("cop2 0x0480012;")
906 #define gte_rtv0_b() __asm__ volatile("cop2 0x0486012;")
907 #define gte_rtv1_b() __asm__ volatile("cop2 0x048E012;")
908 #define gte_rtv2_b() __asm__ volatile("cop2 0x0496012;")
909 #define gte_rtir_b() __asm__ volatile("cop2 0x049E012;")
910 #define gte_rtir_sf0_b() __asm__ volatile("cop2 0x041E012;")
911 #define gte_rtv0tr_b() __asm__ volatile("cop2 0x0480012;")
912 #define gte_rtv1tr_b() __asm__ volatile("cop2 0x0488012;")
913 #define gte_rtv2tr_b() __asm__ volatile("cop2 0x0490012;")
914 #define gte_rtirtr_b() __asm__ volatile("cop2 0x0498012;")
915 #define gte_rtv0bk_b() __asm__ volatile("cop2 0x0482012;")
916 #define gte_rtv1bk_b() __asm__ volatile("cop2 0x048A012;")
917 #define gte_rtv2bk_b() __asm__ volatile("cop2 0x0492012;")
918 #define gte_rtirbk_b() __asm__ volatile("cop2 0x049A012;")
919 #define gte_ll_b() __asm__ volatile("cop2 0x04A6412;")
920 #define gte_llv0_b() __asm__ volatile("cop2 0x04A6012;")
921 #define gte_llv1_b() __asm__ volatile("cop2 0x04AE012;")
922 #define gte_llv2_b() __asm__ volatile("cop2 0x04B6012;")
923 #define gte_llir_b() __asm__ volatile("cop2 0x04BE012;")
924 #define gte_llv0tr_b() __asm__ volatile("cop2 0x04A0012;")
925 #define gte_llv1tr_b() __asm__ volatile("cop2 0x04A8012;")
926 #define gte_llv2tr_b() __asm__ volatile("cop2 0x04B0012;")
927 #define gte_llirtr_b() __asm__ volatile("cop2 0x04B8012;")
928 #define gte_llv0bk_b() __asm__ volatile("cop2 0x04A2012;")
929 #define gte_llv1bk_b() __asm__ volatile("cop2 0x04AA012;")
930 #define gte_llv2bk_b() __asm__ volatile("cop2 0x04B2012;")
931 #define gte_llirbk_b() __asm__ volatile("cop2 0x04BA012;")
932 #define gte_lc_b() __asm__ volatile("cop2 0x04DA412;")
933 #define gte_lcv0_b() __asm__ volatile("cop2 0x04C6012;")
934 #define gte_lcv1_b() __asm__ volatile("cop2 0x04CE012;")
935 #define gte_lcv2_b() __asm__ volatile("cop2 0x04D6012;")
936 #define gte_lcir_b() __asm__ volatile("cop2 0x04DE012;")
937 #define gte_lcv0tr_b() __asm__ volatile("cop2 0x04C0012;")
938 #define gte_lcv1tr_b() __asm__ volatile("cop2 0x04C8012;")
939 #define gte_lcv2tr_b() __asm__ volatile("cop2 0x04D0012;")
940 #define gte_lcirtr_b() __asm__ volatile("cop2 0x04D8012;")
941 #define gte_lcv0bk_b() __asm__ volatile("cop2 0x04C2012;")
942 #define gte_lcv1bk_b() __asm__ volatile("cop2 0x04CA012;")
943 #define gte_lcv2bk_b() __asm__ volatile("cop2 0x04D2012;")
944 #define gte_lcirbk_b() __asm__ volatile("cop2 0x04DA012;")
945 #define gte_dpcl_b() __asm__ volatile("cop2 0x0680029;")
946 #define gte_dpcs_b() __asm__ volatile("cop2 0x0780010;")
947 #define gte_dpct_b() __asm__ volatile("cop2 0x0F8002A;")
948 #define gte_intpl_b() __asm__ volatile("cop2 0x0980011;")
949 #define gte_sqr12_b() __asm__ volatile("cop2 0x0A80428;")
950 #define gte_sqr0_b() __asm__ volatile("cop2 0x0A00428;")
951 #define gte_ncs_b() __asm__ volatile("cop2 0x0C8041E;")
952 #define gte_nct_b() __asm__ volatile("cop2 0x0D80420;")
953 #define gte_ncds_b() __asm__ volatile("cop2 0x0E80413;")
954 #define gte_ncdt_b() __asm__ volatile("cop2 0x0F80416;")
955 #define gte_nccs_b() __asm__ volatile("cop2 0x0108041B;")
956 #define gte_ncct_b() __asm__ volatile("cop2 0x0118043F;")
957 #define gte_cdp_b() __asm__ volatile("cop2 0x01280414;")
958 #define gte_cc_b() __asm__ volatile("cop2 0x0138041C;")
959 #define gte_nclip_b() __asm__ volatile("cop2 0x01400006;")
960 #define gte_avsz3_b() __asm__ volatile("cop2 0x0158002D;")
961 #define gte_avsz4_b() __asm__ volatile("cop2 0x0168002E;")
962 #define gte_op12_b() __asm__ volatile("cop2 0x0178000C;")
963 #define gte_op0_b() __asm__ volatile("cop2 0x0170000C;")
964 #define gte_gpf12_b() __asm__ volatile("cop2 0x0198003D;")
965 #define gte_gpf0_b() __asm__ volatile("cop2 0x0190003D;")
966 #define gte_gpl12_b() __asm__ volatile("cop2 0x01A8003E;")
967 #define gte_gpl0_b() __asm__ volatile("cop2 0x01A0003E0;")
968 #define gte_mvmva_core_b(r0) __asm__ volatile("cop2 %0" : : "g"(r0))
969 #define gte_mvmva_b(sf, mx, v, cv, lm) \
970 gte_mvmva_core_b(0x0400012 | ((sf) << 19) | ((mx) << 17) | ((v) << 15) | ((cv) << 13) | ((lm) << 10))
976 #define gte_stsxy(r0) __asm__ volatile("swc2 $14, 0( %0 )" : : "r"(r0) : "memory")
978 #define gte_stsxy3(r0, r1, r2) \
980 "swc2 $12, 0( %0 );" \
981 "swc2 $13, 0( %1 );" \
982 "swc2 $14, 0( %2 )" \
984 : "r"(r0), "r"(r1), "r"(r2) \
987 #define gte_stsxy3c(r0) \
989 "swc2 $12, 0( %0 );" \
990 "swc2 $13, 4( %0 );" \
991 "swc2 $14, 8( %0 )" \
996 #define gte_stsxy2(r0) __asm__ volatile("swc2 $14, 0( %0 )" : : "r"(r0) : "memory")
998 #define gte_stsxy1(r0) __asm__ volatile("swc2 $13, 0( %0 )" : : "r"(r0) : "memory")
1000 #define gte_stsxy0(r0) __asm__ volatile("swc2 $12, 0( %0 )" : : "r"(r0) : "memory")
1002 #define gte_stsxy01(r0, r1) \
1004 "swc2 $12, 0( %0 );" \
1005 "swc2 $13, 0( %1 )" \
1007 : "r"(r0), "r"(r1) \
1010 #define gte_stsxy01c(r0) \
1012 "swc2 $12, 0( %0 );" \
1013 "swc2 $13, 4( %0 )" \
1018 #define gte_stsxy3_f3(r0) \
1020 "swc2 $12, 8( %0 );" \
1021 "swc2 $13, 12( %0 );" \
1022 "swc2 $14, 16( %0 )" \
1027 #define gte_stsxy3_g3(r0) \
1029 "swc2 $12, 8( %0 );" \
1030 "swc2 $13, 16( %0 );" \
1031 "swc2 $14, 24( %0 )" \
1036 #define gte_stsxy3_ft3(r0) \
1038 "swc2 $12, 8( %0 );" \
1039 "swc2 $13, 16( %0 );" \
1040 "swc2 $14, 24( %0 )" \
1045 #define gte_stsxy3_gt3(r0) \
1047 "swc2 $12, 8( %0 );" \
1048 "swc2 $13, 20( %0 );" \
1049 "swc2 $14, 32( %0 )" \
1054 #define gte_stsxy3_f4(r0) \
1056 "swc2 $12, 8( %0 );" \
1057 "swc2 $13, 12( %0 );" \
1058 "swc2 $14, 16( %0 )" \
1063 #define gte_stsxy3_g4(r0) \
1065 "swc2 $12, 8( %0 );" \
1066 "swc2 $13, 16( %0 );" \
1067 "swc2 $14, 24( %0 )" \
1072 #define gte_stsxy3_ft4(r0) \
1074 "swc2 $12, 8( %0 );" \
1075 "swc2 $13, 16( %0 );" \
1076 "swc2 $14, 24( %0 )" \
1081 #define gte_stsxy3_gt4(r0) \
1083 "swc2 $12, 8( %0 );" \
1084 "swc2 $13, 20( %0 );" \
1085 "swc2 $14, 32( %0 )" \
1090 #define gte_stdp(r0) __asm__ volatile("swc2 $8, 0( %0 )" : : "r"(r0) : "memory")
1092 #define gte_stflg(r0) \
1101 #define gte_stflg_4(r0) \
1104 "addi $13, $0, 4;" \
1105 "sll $13, $13, 16;" \
1106 "and $12, $12, $13;" \
1110 : "$12", "$13", "memory")
1112 #define gte_stsz(r0) __asm__ volatile("swc2 $19, 0( %0 )" : : "r"(r0) : "memory")
1114 #define gte_stsz3(r0, r1, r2) \
1116 "swc2 $17, 0( %0 );" \
1117 "swc2 $18, 0( %1 );" \
1118 "swc2 $19, 0( %2 )" \
1120 : "r"(r0), "r"(r1), "r"(r2) \
1123 #define gte_stsz4(r0, r1, r2, r3) \
1125 "swc2 $16, 0( %0 );" \
1126 "swc2 $17, 0( %1 );" \
1127 "swc2 $18, 0( %2 );" \
1128 "swc2 $19, 0( %3 )" \
1130 : "r"(r0), "r"(r1), "r"(r2), "r"(r3) \
1133 #define gte_stsz3c(r0) \
1135 "swc2 $17, 0( %0 );" \
1136 "swc2 $18, 4( %0 );" \
1137 "swc2 $19, 8( %0 )" \
1142 #define gte_stsz4c(r0) \
1144 "swc2 $16, 0( %0 );" \
1145 "swc2 $17, 4( %0 );" \
1146 "swc2 $18, 8( %0 );" \
1147 "swc2 $19, 12( %0 )" \
1152 #define gte_stszotz(r0) \
1156 "sra $12, $12, 2;" \
1162 #define gte_stotz(r0) __asm__ volatile("swc2 $7, 0( %0 )" : : "r"(r0) : "memory")
1164 #define gte_stopz(r0) __asm__ volatile("swc2 $24, 0( %0 )" : : "r"(r0) : "memory")
1166 #define gte_stlvl(r0) \
1168 "swc2 $9, 0( %0 );" \
1169 "swc2 $10, 4( %0 );" \
1170 "swc2 $11, 8( %0 )" \
1175 #define gte_stlvnl(r0) \
1177 "swc2 $25, 0( %0 );" \
1178 "swc2 $26, 4( %0 );" \
1179 "swc2 $27, 8( %0 )" \
1184 #define gte_stlvnl0(r0) __asm__ volatile("swc2 $25, 0( %0 )" : : "r"(r0) : "memory")
1186 #define gte_stlvnl1(r0) __asm__ volatile("swc2 $26, 0( %0 )" : : "r"(r0) : "memory")
1188 #define gte_stlvnl2(r0) __asm__ volatile("swc2 $27, 0( %0 )" : : "r"(r0) : "memory")
1190 #define gte_stsv(r0) \
1195 "sh $12, 0( %0 );" \
1196 "sh $13, 2( %0 );" \
1200 : "$12", "$13", "$14", "memory")
1202 #define gte_stclmv(r0) \
1207 "sh $12, 0( %0 );" \
1208 "sh $13, 6( %0 );" \
1209 "sh $14, 12( %0 )" \
1212 : "$12", "$13", "$14", "memory")
1214 #define gte_stbv(r0) \
1218 "sb $12, 0( %0 );" \
1222 : "$12", "$13", "memory")
1224 #define gte_stcv(r0) \
1229 "sb $12, 0( %0 );" \
1230 "sb $13, 1( %0 );" \
1234 : "$12", "$13", "$14", "memory")
1236 #define gte_strgb(r0) __asm__ volatile("swc2 $22, 0( %0 )" : : "r"(r0) : "memory")
1238 #define gte_strgb3(r0, r1, r2) \
1240 "swc2 $20, 0( %0 );" \
1241 "swc2 $21, 0( %1 );" \
1242 "swc2 $22, 0( %2 )" \
1244 : "r"(r0), "r"(r1), "r"(r2) \
1247 #define gte_strgb3_g3(r0) \
1249 "swc2 $20, 4( %0 );" \
1250 "swc2 $21, 12( %0 );" \
1251 "swc2 $22, 20( %0 )" \
1256 #define gte_strgb3_gt3(r0) \
1258 "swc2 $20, 4( %0 );" \
1259 "swc2 $21, 16( %0 );" \
1260 "swc2 $22, 28( %0 )" \
1265 #define gte_strgb3_g4(r0) \
1267 "swc2 $20, 4( %0 );" \
1268 "swc2 $21, 12( %0 );" \
1269 "swc2 $22, 20( %0 )" \
1274 #define gte_strgb3_gt4(r0) \
1276 "swc2 $20, 4( %0 );" \
1277 "swc2 $21, 16( %0 );" \
1278 "swc2 $22, 28( %0 )" \
1283 #define gte_ReadGeomOffset(r0, r1) \
1287 "sra $12, $12, 16;" \
1288 "sra $13, $13, 16;" \
1289 "sw $12, 0( %0 );" \
1292 : "r"(r0), "r"(r1) \
1293 : "$12", "$13", "memory")
1295 #define gte_ReadGeomScreen(r0) \
1304 #define gte_ReadRotMatrix(r0) \
1308 "sw $12, 0( %0 );" \
1309 "sw $13, 4( %0 );" \
1313 "sw $12, 8( %0 );" \
1314 "sw $13, 12( %0 );" \
1315 "sw $14, 16( %0 );" \
1319 "sw $12, 20( %0 );" \
1320 "sw $13, 24( %0 );" \
1321 "sw $14, 28( %0 )" \
1324 : "$12", "$13", "$14", "memory")
1326 #define gte_sttr(r0) \
1331 "sw $12, 0( %0 );" \
1332 "sw $13, 4( %0 );" \
1336 : "$12", "$13", "$14", "memory")
1338 #define gte_ReadLightMatrix(r0) \
1342 "sw $12, 0( %0 );" \
1343 "sw $13, 4( %0 );" \
1347 "sw $12, 8( %0 );" \
1348 "sw $13, 12( %0 );" \
1349 "sw $14, 16( %0 );" \
1353 "sw $12, 20( %0 );" \
1354 "sw $13, 24( %0 );" \
1355 "sw $14, 28( %0 )" \
1358 : "$12", "$13", "$14", "memory")
1360 #define gte_ReadColorMatrix(r0) \
1364 "sw $12, 0( %0 );" \
1365 "sw $13, 4( %0 );" \
1369 "sw $12, 8( %0 );" \
1370 "sw $13, 12( %0 );" \
1371 "sw $14, 16( %0 );" \
1375 "sw $12, 20( %0 );" \
1376 "sw $13, 24( %0 );" \
1377 "sw $14, 28( %0 )" \
1380 : "$12", "$13", "$14", "memory")
1382 #define gte_stlzc(r0) __asm__ volatile("swc2 $31, 0( %0 )" : : "r"(r0) : "memory")
1384 #define gte_stfc(r0) \
1389 "sw $12, 0( %0 );" \
1390 "sw $13, 4( %0 );" \
1394 : "$12", "$13", "$14", "memory")
1396 #define gte_mvlvtr() \
1406 : "$12", "$13", "$14")
1408 #define gte_nop() __asm__ volatile("nop")
1410 #define gte_subdvl(r0, r1, r2) \
1412 "lw $12, 0( %0 );" \
1413 "lw $13, 0( %1 );" \
1416 "sra $12, $12, 16;" \
1417 "sra $13, $13, 16;" \
1418 "subu $15, $12, $13;" \
1421 "sw $15, 4( %2 );" \
1422 "subu $12, $12, $13;" \
1425 : "r"(r0), "r"(r1), "r"(r2) \
1426 : "$12", "$13", "$14", "$15", "memory")
1428 #define gte_subdvd(r0, r1, r2) \
1430 "lw $12, 0( %0 );" \
1431 "lw $13, 0( %1 );" \
1434 "sra $12, $12, 16;" \
1435 "sra $13, $13, 16;" \
1436 "subu $15, $12, $13;" \
1439 "sh $15, 2( %2 );" \
1440 "subu $12, $12, $13;" \
1443 : "r"(r0), "r"(r1), "r"(r2) \
1444 : "$12", "$13", "$14", "$15", "memory")
1446 #define gte_adddvl(r0, r1, r2) \
1448 "lw $12, 0( %0 );" \
1449 "lw $13, 0( %1 );" \
1452 "sra $12, $12, 16;" \
1453 "sra $13, $13, 16;" \
1454 "addu $15, $12, $13;" \
1457 "sw $15, 4( %2 );" \
1458 "addu $12, $12, $13;" \
1461 : "r"(r0), "r"(r1), "r"(r2) \
1462 : "$12", "$13", "$14", "$15", "memory")
1464 #define gte_adddvd(r0, r1, r2) \
1466 "lw $12, 0( %0 );" \
1467 "lw $13, 0( %1 );" \
1470 "sra $12, $12, 16;" \
1471 "sra $13, $13, 16;" \
1472 "addu $15, $12, $13;" \
1475 "sh $15, 2( %2 );" \
1476 "addu $12, $12, $13;" \
1479 : "r"(r0), "r"(r1), "r"(r2) \
1480 : "$12", "$13", "$14", "$15", "memory")
1482 #define gte_FlipRotMatrixX() \
1486 "sll $14, $12, 16;" \
1487 "sra $14, $14, 16;" \
1488 "subu $14, $0, $14;" \
1489 "sra $15, $12, 16;" \
1490 "subu $15, $0, $15;" \
1491 "sll $15, $15, 16;" \
1492 "sll $14, $14, 16;" \
1493 "srl $14, $14, 16;" \
1494 "or $14, $14, $15;" \
1496 "sll $14, $13, 16;" \
1497 "sra $14, $14, 16;" \
1498 "subu $14, $0, $14;" \
1499 "sra $15, $13, 16;" \
1500 "sll $15, $15, 16;" \
1501 "sll $14, $14, 16;" \
1502 "srl $14, $14, 16;" \
1503 "or $14, $14, $15;" \
1507 : "$12", "$13", "$14", "$15")
1509 #define gte_FlipTRX() \
1513 "subu $12, $0, $12;" \