Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 18 additions & 15 deletions include/ctr/gte.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
#pragma once

#define EMULATE_GTE //enable me to enable gte simulation (and do not emit gte asm).

#include <ctr/math.h>
#if !defined(EMULATE_GTE)
#include <ctr/nugget/inline_n.h>
#include <ctr/gte_extended.h>
#else
#include <ctr/gte_simulator.h>
#endif

typedef enum GTE_ROW_INDEX
{
Expand All @@ -27,6 +34,14 @@ typedef enum GTE_VECTOR
GTE_VECTOR_MAC, /* Vec */
} GTE_VECTOR;

typedef enum GTE_TRANS_VECTOR
{
GTE_TRANS_TRANSLATION, /*Vec*/
GTE_TRANS_BG_COLOR, /*Vec*/
GTE_TRANS_FAR_COLOR, /*Vec*/
GTE_TRANS_NONE
} GTE_TRANS_VECTOR;

typedef enum GTE_IR
{
GTE_IR_0, /* s16 */
Expand All @@ -53,6 +68,7 @@ typedef enum GTE_CALC
#define _CAT(a, b) a##b
#define CAT(a, b) _CAT(a, b)
#define CAT3(a, b, c) CAT(CAT(a, b), c)
#define CAT4(a, b, c, d) CAT(CAT(CAT(a, b), c), d)

/* Private definitions */
#define _gte_loadSVecMatrix_GTE_MATRIX_ROT_GTE_ROW_INDEX_0(v) gte_ldsvrtrow0(v)
Expand All @@ -63,12 +79,7 @@ typedef enum GTE_CALC
#define _gte_loadSVec_GTE_VECTOR_2(v) gte_ldv2(v)
#define _gte_loadSVec_GTE_VECTOR_IR(v) gte_ldsv(v)
#define _gte_loadVec_GTE_VECTOR_IR(v) gte_ldlvl(v)
#define _gte_loadVec_GTE_VECTOR_MAC(v) __asm__ volatile ( \
"lwc2 $25, 0( %0 );" \
"lwc2 $26, 4( %0 );" \
"lwc2 $27, 8( %0 );" \
: \
: "r"( v ) )
#define _gte_loadVec_GTE_VECTOR_MAC(v) _Impl_gte_loadVec_GTE_VECTOR_MAC(v)
#define _gte_readMac_GTE_MAC_0(out) gte_stopz(out)
#define _gte_readMac_GTE_MAC_1(out) gte_stlvnl0(out)
#define _gte_readMac_GTE_MAC_2(out) gte_stlvnl1(out)
Expand All @@ -86,15 +97,7 @@ typedef enum GTE_CALC
#define _gte_interpolate_GTE_CALC_FLOATING_POINT() gte_gpf12()
#define _gte_interpolateBase_GTE_CALC_INT() gte_gpl0()
#define _gte_interpolateBase_GTE_CALC_FLOATING_POINT() gte_gpl12()
#define _gte_leadingZeroes(out, in) __asm__ volatile ( \
"mtc2 %1, $30;" \
"nop;" \
"nop;" \
"swc2 $31, 0( %0 );" \
: \
: "r"( out ), "r"( in ) \
: "memory" \
)
#define _gte_leadingZeroes(out, in) _Impl_gte_leadingZeroes(out, in)

/* API */
#define gte_readMac(out, macType) CAT(_gte_readMac_, macType)(out)
Expand Down
17 changes: 17 additions & 0 deletions include/ctr/gte_extended.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#pragma once

#define _Impl_gte_loadVec_GTE_VECTOR_MAC(v) __asm__ volatile ( \
"lwc2 $25, 0( %0 );" \
"lwc2 $26, 4( %0 );" \
"lwc2 $27, 8( %0 );" \
: \
: "r"( v ) )
#define _Impl_gte_leadingZeroes(out, in) __asm__ volatile ( \
"mtc2 %1, $30;" \
"nop;" \
"nop;" \
"swc2 $31, 0( %0 );" \
: \
: "r"( out ), "r"( in ) \
: "memory" \
)
Loading