@@ -23,18 +23,32 @@ typedef enum GTE_VECTOR
2323 GTE_VECTOR_0 , /* SVec */
2424 GTE_VECTOR_1 , /* SVec */
2525 GTE_VECTOR_2 , /* SVec */
26- GTE_VECTOR_IR , /* Vec */
26+ GTE_VECTOR_IR , /* SVec */
27+ GTE_VECTOR_MAC , /* Vec */
2728} GTE_VECTOR ;
2829
30+ typedef enum GTE_IR
31+ {
32+ GTE_IR_0 , /* s16 */
33+ GTE_IR_1 , /* s16 */
34+ GTE_IR_2 , /* s16 */
35+ GTE_IR_3 , /* s16 */
36+ } GTE_IR ;
37+
2938typedef enum GTE_MAC
3039{
31- GTE_MAC_0 ,
32- GTE_MAC_1 ,
33- GTE_MAC_2 ,
34- GTE_MAC_3 ,
35- GTE_MAC_VEC , /* 1-3, Vec */
40+ GTE_MAC_0 , /* s32 */
41+ GTE_MAC_1 , /* s32 */
42+ GTE_MAC_2 , /* s32 */
43+ GTE_MAC_3 , /* s32 */
3644} GTE_MAC ;
3745
46+ typedef enum GTE_INTERPOLATE
47+ {
48+ GTE_INTERPOLATE_INT ,
49+ GTE_INTERPOLATE_FLOATING_POINT ,
50+ } GTE_INTERPOLATE ;
51+
3852/* HELPERS */
3953#define _CAT (a , b ) a##b
4054#define CAT (a , b ) _CAT(a, b)
@@ -44,23 +58,46 @@ typedef enum GTE_MAC
4458#define _gte_loadSVecMatrix_GTE_MATRIX_ROT_GTE_ROW_INDEX_0 (v ) gte_ldsvrtrow0(v)
4559#define _gte_loadSVecMatrix_GTE_MATRIX_LIGHT_GTE_ROW_INDEX_0 (v ) gte_ldsvllrow0(v)
4660#define _gte_loadSVecMatrix_GTE_MATRIX_COLOR_GTE_ROW_INDEX_0 (v ) gte_ldsvlcrow0(v)
47- #define _gte_loadVec_GTE_VECTOR_0 (v ) gte_ldv0(v)
48- #define _gte_loadVec_GTE_VECTOR_1 (v ) gte_ldv1(v)
49- #define _gte_loadVec_GTE_VECTOR_2 (v ) gte_ldv2(v)
61+ #define _gte_loadSVec_GTE_VECTOR_0 (v ) gte_ldv0(v)
62+ #define _gte_loadSVec_GTE_VECTOR_1 (v ) gte_ldv1(v)
63+ #define _gte_loadSVec_GTE_VECTOR_2 (v ) gte_ldv2(v)
64+ #define _gte_loadSVec_GTE_VECTOR_IR (v ) gte_ldsv(v)
5065#define _gte_loadVec_GTE_VECTOR_IR (v ) gte_ldlvl(v)
66+ #define _gte_loadVec_GTE_VECTOR_MAC (v ) __asm__ volatile ( \
67+ "lwc2 $25, 0( %0 );" \
68+ "lwc2 $26, 4( %0 );" \
69+ "lwc2 $27, 8( %0 );" \
70+ : \
71+ : "r"( v ) )
5172#define _gte_readMac_GTE_MAC_0 (out ) gte_stopz(out)
5273#define _gte_readMac_GTE_MAC_1 (out ) gte_stlvnl0(out)
5374#define _gte_readMac_GTE_MAC_2 (out ) gte_stlvnl1(out)
5475#define _gte_readMac_GTE_MAC_3 (out ) gte_stlvnl2(out)
55- #define _gte_readMac_GTE_MAC_VEC (out ) gte_stlvnl(out)
76+ #define _gte_readMac_GTE_VECTOR_MAC (out ) gte_stlvnl(out)
77+ #define _gte_loadIR_GTE_IR_0 (in ) gte_lddp(in)
5678#define _gte_dotProduct_GTE_ROW_INDEX_0 (out , matrixType , vecType ) gte_mvmva(0, matrixType, vecType, 3, 0); _gte_readMac_GTE_MAC_1(out)
5779#define _gte_dotProduct_GTE_ROW_INDEX_1 (out , matrixType , vecType ) gte_mvmva(0, matrixType, vecType, 3, 0); _gte_readMac_GTE_MAC_2(out)
5880#define _gte_dotProduct_GTE_ROW_INDEX_2 (out , matrixType , vecType ) gte_mvmva(0, matrixType, vecType, 3, 0); _gte_readMac_GTE_MAC_3(out)
59- #define _gte_mulMatrixVec (out , matrixType , vecType , shift ) gte_mvmva(shift, matrixType, vecType, 3, 0); _gte_readMac_GTE_MAC_VEC(out)
81+ #define _gte_mulMatrixVec (out , matrixType , vecType , shift ) gte_mvmva(shift, matrixType, vecType, 3, 0); _gte_readMac_GTE_VECTOR_MAC(out)
82+ #define _gte_interpolate_GTE_INTERPOLATE_INT () gte_gpl0()
83+ #define _gte_interpolate_GTE_INTERPOLATE_FLOATING_POINT () gte_gpl12()
84+ #define _gte_leadingZeroes (out , in ) __asm__ volatile ( \
85+ "mtc2 %1, $30;" \
86+ "nop;" \
87+ "nop;" \
88+ "swc2 $31, 0( %0 );" \
89+ : \
90+ : "r"( out ), "r"( in ) \
91+ : "memory" \
92+ )
6093
6194/* API */
6295#define gte_readMac (out , macType ) CAT(_gte_readMac_, macType)(out)
96+ #define gte_loadIR (in , irType ) CAT(_gte_loadIR_, irType)(in)
97+ #define gte_loadSVec (v , vecType ) CAT(_gte_loadSVec_, vecType)(v)
6398#define gte_loadVec (v , vecType ) CAT(_gte_loadVec_, vecType)(v)
6499#define gte_loadRowMatrix (v , rowIndex , matrixType ) CAT3(_gte_loadSVecMatrix_, matrixType, _##rowIndex)(v)
65100#define gte_mulMatrixVec (out , matrixType , vecType ) _gte_mulMatrixVec(out, matrixType, vecType, 1)
66- #define gte_dotProduct (out , rowIndex , matrixType , vecType ) CAT(_gte_dotProduct_, rowIndex)(out, matrixType, vecType)
101+ #define gte_dotProduct (out , rowIndex , matrixType , vecType ) CAT(_gte_dotProduct_, rowIndex)(out, matrixType, vecType)
102+ #define gte_leadingZeroes (out , in ) _gte_leadingZeroes(out, in)
103+ #define gte_interpolate (interpolationType ) CAT(_gte_interpolate_, interpolationType)()
0 commit comments