From fb190d38d5c8c08c352d5b3139a58f487a05edc8 Mon Sep 17 00:00:00 2001 From: fincs Date: Tue, 25 Nov 2014 21:36:52 +0100 Subject: [PATCH] Add many new opcodes: DPH,SGE,SLT,EX2,LG2,FLR,LRP --- source/maestro_opcodes.h | 59 +++++++++++++++++++++++++----------- source/picasso_assembler.cpp | 24 +++++++++------ 2 files changed, 56 insertions(+), 27 deletions(-) diff --git a/source/maestro_opcodes.h b/source/maestro_opcodes.h index eb895d6..b3a1d91 100644 --- a/source/maestro_opcodes.h +++ b/source/maestro_opcodes.h @@ -4,31 +4,54 @@ enum MAESTRO_ADD = 0x00, MAESTRO_DP3, MAESTRO_DP4, - - MAESTRO_MUL = 0x08, - - MAESTRO_MAX = 0x0C, + MAESTRO_DPH, + MAESTRO_unk4, + MAESTRO_EX2, + MAESTRO_LG2, + MAESTRO_unk7, + MAESTRO_MUL, + MAESTRO_SGE, + MAESTRO_SLT, + MAESTRO_FLR, + MAESTRO_MAX, MAESTRO_MIN, MAESTRO_RCP, MAESTRO_RSQ, - MAESTRO_ARL = 0x12, + MAESTRO_unk10, + MAESTRO_unk11, + MAESTRO_ARL, MAESTRO_MOV, + MAESTRO_unk14, + MAESTRO_unk15, + MAESTRO_unk16, + MAESTRO_unk17, + MAESTRO_DPHI, + MAESTRO_unk19, + MAESTRO_SGEI, + MAESTRO_SLTI, + MAESTRO_unk1C, + MAESTRO_unk1D, + MAESTRO_unk1E, + MAESTRO_unk1F, - MAESTRO_NOP = 0x21, + MAESTRO_unk20, + MAESTRO_NOP, MAESTRO_END, - - MAESTRO_CALL = 0x24, - - MAESTRO_CALLC = 0x26, - MAESTRO_IFB, - MAESTRO_IF, // ??? - - MAESTRO_EMIT = 0x2A, // Geometry shader related + MAESTRO_BREAKC, + MAESTRO_CALL, + MAESTRO_CALLC, + MAESTRO_CALLU, + MAESTRO_IFU, + MAESTRO_IFC, + MAESTRO_FOR, + MAESTRO_EMIT, // Geometry shader related MAESTRO_SETEMIT, // Geometry shader related + MAESTRO_JMPC, + MAESTRO_JMPU, + MAESTRO_CMP, // only the upper 5 bits are used for the opcode - MAESTRO_CMP = 0x2E, - MAESTRO_CMP2, // ??? - - MAESTRO_MAD = 0x38, // only the upper 3 bits are used for the opcode + // Only the upper 3 bits are used for the following opcodes + MAESTRO_LRP = 0x30, + MAESTRO_MAD = 0x38, }; diff --git a/source/picasso_assembler.cpp b/source/picasso_assembler.cpp index 27fa54c..8b7c8db 100644 --- a/source/picasso_assembler.cpp +++ b/source/picasso_assembler.cpp @@ -532,7 +532,7 @@ DEF_COMMAND(format1) return 0; } -DEF_COMMAND(format2) +DEF_COMMAND(format1u) { NEXT_ARG(destName); NEXT_ARG(src1Name); @@ -552,7 +552,7 @@ DEF_COMMAND(format2) return 0; } -DEF_COMMAND(format3) +DEF_COMMAND(format5) { NEXT_ARG(destName); NEXT_ARG(src1Name); @@ -579,7 +579,7 @@ DEF_COMMAND(format3) return 0; } -DEF_COMMAND(format4) +DEF_COMMAND(formatarl) { NEXT_ARG(src1Name); ENSURE_NO_MORE_ARGS(); @@ -605,17 +605,23 @@ static const cmdTableType cmdTable[] = DEC_COMMAND(ADD, format1), DEC_COMMAND(DP3, format1), DEC_COMMAND(DP4, format1), + DEC_COMMAND(DPH, format1), DEC_COMMAND(MUL, format1), + DEC_COMMAND(SGE, format1), + DEC_COMMAND(SLT, format1), DEC_COMMAND(MAX, format1), DEC_COMMAND(MIN, format1), - DEC_COMMAND(RCP, format2), - DEC_COMMAND(RSQ, format2), - DEC_COMMAND(MOV, format2), + DEC_COMMAND(EX2, format1u), + DEC_COMMAND(LG2, format1u), + DEC_COMMAND(FLR, format1u), + DEC_COMMAND(RCP, format1u), + DEC_COMMAND(RSQ, format1u), + DEC_COMMAND(ARL, formatarl), + DEC_COMMAND(MOV, format1u), - DEC_COMMAND(MAD, format3), - - DEC_COMMAND(ARL, format4), + DEC_COMMAND(LRP, format5), + DEC_COMMAND(MAD, format5), { nullptr, nullptr }, };