mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-07-06 15:01:18 +12:00
Seen in the eShop version of Fatal Frame Also made some warnings less spammy since this game seems to trigger it a lot
120 lines
No EOL
5 KiB
C
120 lines
No EOL
5 KiB
C
// GPU7 instruction set is a hybrid between R600 and R700
|
|
|
|
// CF instructions
|
|
#define CF_INST_NOP (0x00)
|
|
#define CF_INST_TEX (0x01)
|
|
#define CF_INST_LOOP_END (0x05)
|
|
#define CF_INST_LOOP_START_DX10 (0x06)
|
|
#define CF_INST_JUMP (0x0A)
|
|
#define CF_INST_ELSE (0x0D)
|
|
#define CF_INST_POP (0x0E)
|
|
#define CF_INST_ELSE_AFTER (0x0F)
|
|
#define CF_INST_CALL_FS (0x13)
|
|
#define CF_INST_EXPORT (0x27)
|
|
#define CF_INST_EXPORT_DONE (0x28)
|
|
|
|
#define CF_INST_ALU (0x08)
|
|
#define CF_INST_ALU_PUSH_BEFORE (0x09)
|
|
#define CF_INST_ALU_POP_AFTER (0x0A)
|
|
#define CF_INST_ALU_POP2_AFTER (0x0B)
|
|
#define CF_INST_ALU_BREAK (0x0E) // leave loop if pred is modified
|
|
|
|
#define ALU_OMOD_NONE (0)
|
|
#define ALU_OMOD_MUL2 (1)
|
|
#define ALU_OMOD_MUL4 (2)
|
|
#define ALU_OMOD_DIV2 (3)
|
|
|
|
// ALU op2 instructions
|
|
#define ALU_OP2_INST_ADD (0x000)
|
|
#define ALU_OP2_INST_MUL (0x001)
|
|
#define ALU_OP2_INST_MUL_IEEE (0x002)
|
|
#define ALU_OP2_INST_MAX (0x003)
|
|
#define ALU_OP2_INST_MIN (0x004)
|
|
#define ALU_OP2_INST_MAX_DX10 (0x005)
|
|
#define ALU_OP2_INST_MIN_DX10 (0x006)
|
|
#define ALU_OP2_INST_SETE (0x008)
|
|
#define ALU_OP2_INST_SETGT (0x009)
|
|
#define ALU_OP2_INST_SETGE (0x00A)
|
|
#define ALU_OP2_INST_SETNE (0x00B)
|
|
#define ALU_OP2_INST_SETE_DX10 (0x00C)
|
|
#define ALU_OP2_INST_SETGT_DX10 (0x00D)
|
|
#define ALU_OP2_INST_SETGE_DX10 (0x00E)
|
|
#define ALU_OP2_INST_SETNE_DX10 (0x00F)
|
|
#define ALU_OP2_INST_FLOOR (0x014)
|
|
#define ALU_OP2_INST_FRACT (0x010)
|
|
#define ALU_OP2_INST_TRUNC (0x011)
|
|
#define ALU_OP2_INST_RNDNE (0x013)
|
|
#define ALU_OP2_INST_MOVA_FLOOR (0x016) // changes address register
|
|
#define ALU_OP2_INST_MOVA_INT (0x018) // changes address register
|
|
#define ALU_OP2_INST_MOV (0x019)
|
|
#define ALU_OP2_INST_NOP (0x01A)
|
|
#define ALU_OP2_INST_PRED_SETE (0x020)
|
|
#define ALU_OP2_INST_PRED_SETGT (0x021)
|
|
#define ALU_OP2_INST_PRED_SETGE (0x022)
|
|
#define ALU_OP2_INST_PRED_SETNE (0x023)
|
|
#define ALU_OP2_INST_AND_INT (0x030) // integer instruction
|
|
#define ALU_OP2_INST_OR_INT (0x031) // integer instruction
|
|
#define ALU_OP2_INST_XOR_INT (0x032) // integer instruction
|
|
#define ALU_OP2_INST_NOT_INT (0x033) // integer instruction
|
|
#define ALU_OP2_INST_ADD_INT (0x034) // integer instruction
|
|
#define ALU_OP2_INST_SUB_INT (0x035) // integer instruction
|
|
#define ALU_OP2_INST_MAX_INT (0x036) // integer instruction
|
|
#define ALU_OP2_INST_MIN_INT (0x037) // integer instruction
|
|
#define ALU_OP2_INST_MAX_UINT (0x038) // integer instruction
|
|
#define ALU_OP2_INST_MIN_UINT (0x039) // integer instruction
|
|
#define ALU_OP2_INST_SETE_INT (0x03A) // integer instruction
|
|
#define ALU_OP2_INST_SETGT_INT (0x03B) // integer instruction
|
|
#define ALU_OP2_INST_SETGE_INT (0x03C) // integer instruction
|
|
#define ALU_OP2_INST_SETNE_INT (0x03D) // integer instruction
|
|
#define ALU_OP2_INST_SETGT_UINT (0x03E) // integer instruction
|
|
#define ALU_OP2_INST_SETGE_UINT (0x03F) // integer instruction
|
|
#define ALU_OP2_INST_PRED_SETE_INT (0x042) // integer instruction
|
|
#define ALU_OP2_INST_PRED_SETGT_INT (0x043) // integer instruction
|
|
#define ALU_OP2_INST_PRED_SETGE_INT (0x044) // integer instruction
|
|
#define ALU_OP2_INST_PRED_SETNE_INT (0x045) // integer instruction
|
|
#define ALU_OP2_INST_KILLE (0x02C)
|
|
#define ALU_OP2_INST_KILLGT (0x02D)
|
|
#define ALU_OP2_INST_KILLGE (0x02E)
|
|
#define ALU_OP2_INST_KILLE_INT (0x046)
|
|
#define ALU_OP2_INST_KILLGT_INT (0x047)
|
|
#define ALU_OP2_INST_KILLNE_INT (0x049)
|
|
#define ALU_OP2_INST_DOT4 (0x050)
|
|
#define ALU_OP2_INST_DOT4_IEEE (0x051)
|
|
#define ALU_OP2_INST_CUBE (0x052)
|
|
#define ALU_OP2_INST_EXP_IEEE (0x061)
|
|
#define ALU_OP2_INST_LOG_CLAMPED (0x062)
|
|
#define ALU_OP2_INST_LOG_IEEE (0x063)
|
|
#define ALU_OP2_INST_SQRT_IEEE (0x06A)
|
|
#define ALU_OP2_INST_SIN (0x06E)
|
|
#define ALU_OP2_INST_COS (0x06F)
|
|
#define ALU_OP2_INST_RECIP_FF (0x065)
|
|
#define ALU_OP2_INST_RECIP_IEEE (0x066)
|
|
#define ALU_OP2_INST_RECIPSQRT_CLAMPED (0x067)
|
|
#define ALU_OP2_INST_RECIPSQRT_FF (0x068)
|
|
#define ALU_OP2_INST_RECIPSQRT_IEEE (0x069)
|
|
#define ALU_OP2_INST_FLT_TO_INT (0x06B) // conversion instruction
|
|
#define ALU_OP2_INST_INT_TO_FLOAT (0x06C) // conversion instruction
|
|
#define ALU_OP2_INST_UINT_TO_FLOAT (0x06D) // conversion instruction
|
|
#define ALU_OP2_INST_ASHR_INT (0x070) // integer instruction
|
|
#define ALU_OP2_INST_LSHR_INT (0x071) // integer instruction
|
|
#define ALU_OP2_INST_LSHL_INT (0x072) // integer instruction
|
|
#define ALU_OP2_INST_MULLO_INT (0x073) // integer instruction
|
|
#define ALU_OP2_INST_MULLO_UINT (0x075) // integer instruction
|
|
#define ALU_OP2_INST_FLT_TO_UINT (0x079) // conversion instruction
|
|
|
|
// ALU op3 instructions
|
|
#define ALU_OP3_INST_MULADD (0x10)
|
|
#define ALU_OP3_INST_MULADD_M2 (0x11)
|
|
#define ALU_OP3_INST_MULADD_M4 (0x12)
|
|
#define ALU_OP3_INST_MULADD_D2 (0x13)
|
|
#define ALU_OP3_INST_MULADD_IEEE (0x14)
|
|
#define ALU_OP3_INST_CMOVE (0x18)
|
|
#define ALU_OP3_INST_CMOVGT (0x19)
|
|
#define ALU_OP3_INST_CMOVGE (0x1A)
|
|
#define ALU_OP3_INST_CNDE_INT (0x1C) // integer instruction
|
|
#define ALU_OP3_INST_CNDGT_INT (0x1D) // integer instruction
|
|
#define ALU_OP3_INST_CMOVGE_INT (0x1E) // integer instruction
|
|
|
|
// fetch shader
|
|
#define VTX_INST_SEMANTIC (0x01)
|
|
#define VTX_INST_MEM (0x02) |