mirror of
https://github.com/DaedalusX64/daedalus.git
synced 2025-04-02 10:21:48 -04:00
311 lines
18 KiB
C++
311 lines
18 KiB
C++
/*
|
|
Copyright (C) 2001 StrmnNrmn
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/*
|
|
CPU: Instructions encoded by opcode field.
|
|
31---------26---------------------------------------------------0
|
|
| opcode | |
|
|
------6----------------------------------------------------------
|
|
|--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
|
|
000 | *1 | *2 | J | JAL | BEQ | BNE | BLEZ | BGTZ |
|
|
001 | ADDI | ADDIU | SLTI | SLTIU | ANDI | ORI | XORI | LUI |
|
|
010 | *3 | *4 | --- | --- | BEQL | BNEL | BLEZL | BGTZL |
|
|
011 | DADDI |DADDIU | LDL | LDR | Patch |SRHackU|SRHackO|SRHackN|
|
|
100 | LB | LH | LWL | LW | LBU | LHU | LWR | LWU |
|
|
101 | SB | SH | SWL | SW | SDL | SDR | SWR | CACHE |
|
|
110 | LL | LWC1 | --- | --- | LLD | LDC1 | LDC2 | LD |
|
|
111 | SC | SWC1 | DBkpt | --- | SCD | SDC1 | SDC2 | SD |
|
|
hi |-------|-------|-------|-------|-------|-------|-------|-------|
|
|
*1 = SPECIAL, see SPECIAL list *2 = REGIMM, see REGIMM list
|
|
*3 = COP0 *4 = COP1
|
|
// Patch, SRHackU, SRHackO, SRHackN are all optimisation hacks
|
|
// DBkpt is a debugging breakpoint
|
|
};
|
|
*/
|
|
|
|
// Opcode Jump Table
|
|
CPU_Instruction R4300Instruction[64] = {
|
|
R4300_Special, R4300_RegImm, R4300_J, R4300_JAL, R4300_BEQ, R4300_BNE, R4300_BLEZ, R4300_BGTZ,
|
|
R4300_ADDI, R4300_ADDIU, R4300_SLTI, R4300_SLTIU, R4300_ANDI, R4300_ORI, R4300_XORI, R4300_LUI,
|
|
R4300_CoPro0, R4300_CoPro1, R4300_Unk, R4300_Unk, R4300_BEQL, R4300_BNEL, R4300_BLEZL, R4300_BGTZL,
|
|
R4300_DADDI, R4300_DADDIU, R4300_LDL, R4300_LDR, R4300_Unk, R4300_Unk, R4300_Unk, R4300_Unk,
|
|
R4300_LB, R4300_LH, R4300_LWL, R4300_LW, R4300_LBU, R4300_LHU, R4300_LWR, R4300_LWU,
|
|
R4300_SB, R4300_SH, R4300_SWL, R4300_SW, R4300_SDL, R4300_SDR, R4300_SWR, R4300_CACHE,
|
|
R4300_LL, R4300_LWC1, R4300_Unk, R4300_Unk, R4300_LLD, R4300_LDC1, R4300_LDC2, R4300_LD,
|
|
R4300_SC, R4300_SWC1, R4300_DBG_Bkpt, R4300_Unk, R4300_SCD, R4300_SDC1, R4300_SDC2, R4300_SD
|
|
};
|
|
|
|
/*
|
|
SPECIAL: Instr. encoded by function field when opcode field = SPECIAL.
|
|
31---------26------------------------------------------5--------0
|
|
| = SPECIAL | | function|
|
|
------6----------------------------------------------------6-----
|
|
|--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
|
|
000 | SLL | --- | SRL | SRA | SLLV | --- | SRLV | SRAV |
|
|
001 | JR | JALR | --- | --- |SYSCALL| BREAK | --- | SYNC |
|
|
010 | MFHI | MTHI | MFLO | MTLO | DSLLV | --- | DSRLV | DSRAV |
|
|
011 | MULT | MULTU | DIV | DIVU | DMULT | DMULTU| DDIV | DDIVU |
|
|
100 | ADD | ADDU | SUB | SUBU | AND | OR | XOR | NOR |
|
|
101 | --- | --- | SLT | SLTU | DADD | DADDU | DSUB | DSUBU |
|
|
110 | TGE | TGEU | TLT | TLTU | TEQ | --- | TNE | --- |
|
|
111 | DSLL | --- | DSRL | DSRA |DSLL32 | --- |DSRL32 |DSRA32 |
|
|
hi |-------|-------|-------|-------|-------|-------|-------|-------|
|
|
*/
|
|
|
|
|
|
// SpecialOpCode Jump Table
|
|
CPU_Instruction R4300SpecialInstruction[64] = {
|
|
R4300_Special_SLL, R4300_Special_Unk, R4300_Special_SRL, R4300_Special_SRA, R4300_Special_SLLV, R4300_Special_Unk, R4300_Special_SRLV, R4300_Special_SRAV,
|
|
R4300_Special_JR, R4300_Special_JALR, R4300_Special_Unk, R4300_Special_Unk, R4300_Special_SYSCALL, R4300_Special_BREAK, R4300_Special_Unk, R4300_Special_SYNC,
|
|
R4300_Special_MFHI, R4300_Special_MTHI, R4300_Special_MFLO, R4300_Special_MTLO, R4300_Special_DSLLV, R4300_Special_Unk, R4300_Special_DSRLV, R4300_Special_DSRAV,
|
|
R4300_Special_MULT, R4300_Special_MULTU, R4300_Special_DIV, R4300_Special_DIVU, R4300_Special_DMULT, R4300_Special_DMULTU, R4300_Special_DDIV, R4300_Special_DDIVU,
|
|
R4300_Special_ADD, R4300_Special_ADDU, R4300_Special_SUB, R4300_Special_SUBU, R4300_Special_AND, R4300_Special_OR, R4300_Special_XOR, R4300_Special_NOR,
|
|
R4300_Special_Unk, R4300_Special_Unk, R4300_Special_SLT, R4300_Special_SLTU, R4300_Special_DADD, R4300_Special_DADDU, R4300_Special_DSUB, R4300_Special_DSUBU,
|
|
R4300_Special_TGE, R4300_Special_TGEU, R4300_Special_TLT, R4300_Special_TLTU, R4300_Special_TEQ, R4300_Special_Unk, R4300_Special_TNE, R4300_Special_Unk,
|
|
R4300_Special_DSLL, R4300_Special_Unk, R4300_Special_DSRL, R4300_Special_DSRA, R4300_Special_DSLL32, R4300_Special_Unk, R4300_Special_DSRL32, R4300_Special_DSRA32
|
|
};
|
|
|
|
/*
|
|
REGIMM: Instructions encoded by the rt field when opcode field = REGIMM.
|
|
31---------26----------20-------16------------------------------0
|
|
| = REGIMM | | rt | |
|
|
------6---------------------5------------------------------------
|
|
|--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
|
|
00 | BLTZ | BGEZ | BLTZL | BGEZL | --- | --- | --- | --- |
|
|
01 | TGEI | TGEIU | TLTI | TLTIU | TEQI | --- | TNEI | --- |
|
|
10 | BLTZAL| BGEZAL|BLTZALL|BGEZALL| --- | --- | --- | --- |
|
|
11 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
hi |-------|-------|-------|-------|-------|-------|-------|-------|
|
|
*/
|
|
|
|
CPU_Instruction R4300RegImmInstruction[32] = {
|
|
|
|
R4300_RegImm_BLTZ, R4300_RegImm_BGEZ, R4300_RegImm_BLTZL, R4300_RegImm_BGEZL, R4300_RegImm_Unk, R4300_RegImm_Unk, R4300_RegImm_Unk, R4300_RegImm_Unk,
|
|
R4300_RegImm_TGEI, R4300_RegImm_TGEIU, R4300_RegImm_TLTI, R4300_RegImm_TLTIU, R4300_RegImm_TEQI, R4300_RegImm_Unk, R4300_RegImm_TNEI, R4300_RegImm_Unk,
|
|
R4300_RegImm_BLTZAL, R4300_RegImm_BGEZAL, R4300_RegImm_BLTZALL, R4300_RegImm_BGEZALL, R4300_RegImm_Unk, R4300_RegImm_Unk, R4300_RegImm_Unk, R4300_RegImm_Unk,
|
|
R4300_RegImm_Unk, R4300_RegImm_Unk, R4300_RegImm_Unk, R4300_RegImm_Unk, R4300_RegImm_Unk, R4300_RegImm_Unk, R4300_RegImm_Unk, R4300_RegImm_Unk
|
|
};
|
|
|
|
|
|
/*
|
|
COP0: Instructions encoded by the fmt field when opcode = COP0.
|
|
31--------26-25------21 ----------------------------------------0
|
|
| = COP0 | fmt | |
|
|
------6----------5-----------------------------------------------
|
|
|--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
|
|
00 | MFC0 | --- | --- | --- | MTC0 | --- | --- | --- |
|
|
01 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
10 | *1 | --- | --- | --- | --- | --- | --- | --- |
|
|
11 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
hi |-------|-------|-------|-------|-------|-------|-------|-------|
|
|
*1 = TLB instr, see TLB list
|
|
*/
|
|
|
|
// COP0 Jump Table
|
|
CPU_Instruction R4300Cop0Instruction[32] = {
|
|
R4300_Cop0_MFC0, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_MTC0, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk,
|
|
R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk,
|
|
R4300_Cop0_TLB, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk,
|
|
R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk, R4300_Cop0_Unk,
|
|
};
|
|
|
|
|
|
/*
|
|
TLB: Instructions encoded by the function field when opcode
|
|
= COP0 and fmt = TLB.
|
|
31--------26-25------21 -------------------------------5--------0
|
|
| = COP0 | = TLB | | function|
|
|
------6----------5-----------------------------------------6-----
|
|
|--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
|
|
000 | --- | TLBR | TLBWI | --- | --- | --- | TLBWR | --- |
|
|
001 | TLBP | --- | --- | --- | --- | --- | --- | --- |
|
|
010 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
011 | ERET | --- | --- | --- | --- | --- | --- | --- |
|
|
100 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
101 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
110 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
111 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
hi |-------|-------|-------|-------|-------|-------|-------|-------|
|
|
|
|
*/
|
|
|
|
// TLBOpCode Jump Table
|
|
CPU_Instruction R4300TLBInstruction[64] = {
|
|
R4300_TLB_Unk, R4300_TLB_TLBR, R4300_TLB_TLBWI, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_TLBWR, R4300_TLB_Unk,
|
|
R4300_TLB_TLBP, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk,
|
|
R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk,
|
|
R4300_TLB_ERET, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk,
|
|
R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk,
|
|
R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk,
|
|
R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk,
|
|
R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk, R4300_TLB_Unk,
|
|
};
|
|
|
|
|
|
/*
|
|
COP1: Instructions encoded by the fmt field when opcode = COP1.
|
|
31--------26-25------21 ----------------------------------------0
|
|
| = COP1 | fmt | |
|
|
------6----------5-----------------------------------------------
|
|
|--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
|
|
00 | MFC1 | DMFC1 | CFC1 | --- | MTC1 | DMTC1 | CTC1 | --- |
|
|
01 | *1 | --- | --- | --- | --- | --- | --- | --- |
|
|
10 | *2 | *3 | --- | --- | *4 | *5 | --- | --- |
|
|
11 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
hi |-------|-------|-------|-------|-------|-------|-------|-------|
|
|
*1 = BC instructions, see BC1 list
|
|
*2 = S instr, see FPU list *3 = D instr, see FPU list
|
|
*4 = W instr, see FPU list *5 = L instr, see FPU list
|
|
*/
|
|
|
|
// COP1 Jump Table
|
|
CPU_Instruction R4300Cop1Instruction[32] = {
|
|
R4300_Cop1_MFC1, R4300_Cop1_DMFC1, R4300_Cop1_CFC1, R4300_Cop1_Unk, R4300_Cop1_MTC1, R4300_Cop1_DMTC1, R4300_Cop1_CTC1, R4300_Cop1_Unk,
|
|
R4300_Cop1_BCInstr, R4300_Cop1_Unk, R4300_Cop1_Unk, R4300_Cop1_Unk, R4300_Cop1_Unk, R4300_Cop1_Unk, R4300_Cop1_Unk, R4300_Cop1_Unk,
|
|
R4300_Cop1_SInstr, R4300_Cop1_DInstr, R4300_Cop1_Unk, R4300_Cop1_Unk, R4300_Cop1_WInstr, R4300_Cop1_LInstr, R4300_Cop1_Unk, R4300_Cop1_Unk,
|
|
R4300_Cop1_Unk, R4300_Cop1_Unk, R4300_Cop1_Unk, R4300_Cop1_Unk, R4300_Cop1_Unk, R4300_Cop1_Unk, R4300_Cop1_Unk, R4300_Cop1_Unk
|
|
};
|
|
|
|
/*
|
|
BC1: Instructions encoded by the nd and tf fields when opcode
|
|
= COP1 and fmt = BC
|
|
31--------26-25------21 ---17--16-------------------------------0
|
|
| = COP1 | = BC | |nd|tf| |
|
|
------6----------5-----------1--1--------------------------------
|
|
|---0---|---1---| tf
|
|
0 | BC1F | BC1T |
|
|
1 | BC1FL | BC1TL |
|
|
nd |-------|-------|
|
|
*/
|
|
|
|
CPU_Instruction R4300Cop1BC1Instruction[4] = {
|
|
R4300_BC1_BC1F, R4300_BC1_BC1T, R4300_BC1_BC1FL, R4300_BC1_BC1TL
|
|
};
|
|
|
|
|
|
/*
|
|
FPU: Instructions encoded by the function field when opcode = COP1
|
|
and fmt = S
|
|
31--------26-25------21 -------------------------------5--------0
|
|
| = COP1 | = S | | function|
|
|
------6----------5-----------------------------------------6-----
|
|
|--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
|
|
000 | ADD | SUB | MUL | DIV | SQRT | ABS | MOV | NEG |
|
|
001 |ROUND.L|TRUNC.L| CEIL.L|FLOOR.L|ROUND.W|TRUNC.W| CEIL.W|FLOOR.W|
|
|
010 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
011 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
100 | --- | CVT.D | --- | --- | CVT.W | CVT.L | --- | --- |
|
|
101 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
110 | C.F | C.UN | C.EQ | C.UEQ | C.OLT | C.ULT | C.OLE | C.ULE |
|
|
111 | C.SF | C.NGLE| C.SEQ | C.NGL | C.LT | C.NGE | C.LE | C.NGT |
|
|
hi |-------|-------|-------|-------|-------|-------|-------|-------|
|
|
*/
|
|
|
|
// Single Jump Table
|
|
CPU_Instruction R4300Cop1SInstruction[64] = {
|
|
R4300_Cop1_S_ADD, R4300_Cop1_S_SUB, R4300_Cop1_S_MUL, R4300_Cop1_S_DIV, R4300_Cop1_S_SQRT, R4300_Cop1_S_ABS, R4300_Cop1_S_MOV, R4300_Cop1_S_NEG,
|
|
R4300_Cop1_S_ROUND_L, R4300_Cop1_S_TRUNC_L, R4300_Cop1_S_CEIL_L, R4300_Cop1_S_FLOOR_L, R4300_Cop1_S_ROUND_W, R4300_Cop1_S_TRUNC_W, R4300_Cop1_S_CEIL_W, R4300_Cop1_S_FLOOR_W,
|
|
R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk,
|
|
R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk,
|
|
R4300_Cop1_S_Unk, R4300_Cop1_S_CVT_D, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_CVT_W, R4300_Cop1_S_CVT_L, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk,
|
|
R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk, R4300_Cop1_S_Unk,
|
|
R4300_Cop1_S_F, R4300_Cop1_S_UN, R4300_Cop1_S_EQ, R4300_Cop1_S_UEQ, R4300_Cop1_S_OLT, R4300_Cop1_S_ULT, R4300_Cop1_S_OLE, R4300_Cop1_S_ULE,
|
|
R4300_Cop1_S_SF, R4300_Cop1_S_NGLE, R4300_Cop1_S_SEQ, R4300_Cop1_S_NGL, R4300_Cop1_S_LT, R4300_Cop1_S_NGE, R4300_Cop1_S_LE, R4300_Cop1_S_NGT
|
|
};
|
|
|
|
/*
|
|
FPU: Instructions encoded by the function field when opcode = COP1
|
|
and fmt = D
|
|
31--------26-25------21 -------------------------------5--------0
|
|
| = COP1 | = D | | function|
|
|
------6----------5-----------------------------------------6-----
|
|
|--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo
|
|
000 | ADD | SUB | MUL | DIV | SQRT | ABS | MOV | NEG |
|
|
001 |ROUND.L|TRUNC.L| CEIL.L|FLOOR.L|ROUND.W|TRUNC.W| CEIL.W|FLOOR.W|
|
|
010 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
011 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
100 | CVT.S | --- | --- | --- | CVT.W | CVT.L | --- | --- |
|
|
101 | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
110 | C.F | C.UN | C.EQ | C.UEQ | C.OLT | C.ULT | C.OLE | C.ULE |
|
|
111 | C.SF | C.NGLE| C.SEQ | C.NGL | C.LT | C.NGE | C.LE | C.NGT |
|
|
hi |-------|-------|-------|-------|-------|-------|-------|-------|
|
|
*/
|
|
|
|
// Double Jump Table
|
|
CPU_Instruction R4300Cop1DInstruction[64] =
|
|
{
|
|
R4300_Cop1_D_ADD, R4300_Cop1_D_SUB, R4300_Cop1_D_MUL, R4300_Cop1_D_DIV, R4300_Cop1_D_SQRT, R4300_Cop1_D_ABS, R4300_Cop1_D_MOV, R4300_Cop1_D_NEG,
|
|
R4300_Cop1_D_ROUND_L, R4300_Cop1_D_TRUNC_L, R4300_Cop1_D_CEIL_L, R4300_Cop1_D_FLOOR_L, R4300_Cop1_D_ROUND_W, R4300_Cop1_D_TRUNC_W, R4300_Cop1_D_CEIL_W, R4300_Cop1_D_FLOOR_W,
|
|
R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk,
|
|
R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk,
|
|
R4300_Cop1_D_CVT_S, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_CVT_W, R4300_Cop1_D_CVT_L, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk,
|
|
R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk, R4300_Cop1_D_Unk,
|
|
R4300_Cop1_D_F, R4300_Cop1_D_UN, R4300_Cop1_D_EQ, R4300_Cop1_D_UEQ, R4300_Cop1_D_OLT, R4300_Cop1_D_ULT, R4300_Cop1_D_OLE, R4300_Cop1_D_ULE,
|
|
R4300_Cop1_D_SF, R4300_Cop1_D_NGLE, R4300_Cop1_D_SEQ, R4300_Cop1_D_NGL, R4300_Cop1_D_LT, R4300_Cop1_D_NGE, R4300_Cop1_D_LE, R4300_Cop1_D_NGT,
|
|
};
|
|
|
|
|
|
void R4300_CALL_TYPE R4300_Special( u32 op_code_bits ) { R4300_CALL_MAKE_OP( op_code ); R4300SpecialInstruction[ op_code.spec_op ]( R4300_CALL_ARGUMENTS ); }
|
|
void R4300_CALL_TYPE R4300_RegImm( u32 op_code_bits ) { R4300_CALL_MAKE_OP( op_code ); R4300RegImmInstruction[ op_code.regimm_op ]( R4300_CALL_ARGUMENTS ); }
|
|
void R4300_CALL_TYPE R4300_CoPro0( u32 op_code_bits ) { R4300_CALL_MAKE_OP( op_code ); R4300Cop0Instruction[ op_code.cop0_op ]( R4300_CALL_ARGUMENTS ); }
|
|
void R4300_CALL_TYPE R4300_CoPro1( u32 op_code_bits ) { R4300_CALL_MAKE_OP( op_code ); R4300Cop1Instruction[ op_code.cop1_op ]( R4300_CALL_ARGUMENTS ); }
|
|
void R4300_CALL_TYPE R4300_Cop0_TLB( u32 op_code_bits ) { R4300_CALL_MAKE_OP( op_code ); R4300TLBInstruction[ op_code.cop0tlb_funct ]( R4300_CALL_ARGUMENTS ); }
|
|
void R4300_CALL_TYPE R4300_Cop1_BCInstr( u32 op_code_bits ) { R4300_CALL_MAKE_OP( op_code ); R4300Cop1BC1Instruction[ op_code.cop1_bc ]( R4300_CALL_ARGUMENTS ); }
|
|
void R4300_CALL_TYPE R4300_Cop1_SInstr( u32 op_code_bits ) { R4300_CALL_MAKE_OP( op_code ); R4300Cop1SInstruction[ op_code.cop1_funct ]( R4300_CALL_ARGUMENTS ); }
|
|
void R4300_CALL_TYPE R4300_Cop1_DInstr( u32 op_code_bits )
|
|
{
|
|
R4300_CALL_MAKE_OP( op_code );
|
|
|
|
R4300Cop1DInstruction[ op_code.cop1_funct ]( R4300_CALL_ARGUMENTS );
|
|
}
|
|
|
|
void R4300_CALL_TYPE R4300_Cop1_LInstr( u32 op_code_bits )
|
|
{
|
|
R4300_CALL_MAKE_OP( op_code );
|
|
|
|
switch ( op_code.cop1_funct )
|
|
{
|
|
case Cop1OpFunc_CVT_S:
|
|
R4300_Cop1_L_CVT_S( R4300_CALL_ARGUMENTS );
|
|
return;
|
|
case Cop1OpFunc_CVT_D:
|
|
R4300_Cop1_L_CVT_D( R4300_CALL_ARGUMENTS );
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
void R4300_CALL_TYPE R4300_Cop1_WInstr( u32 op_code_bits )
|
|
{
|
|
R4300_CALL_MAKE_OP( op_code );
|
|
|
|
switch ( op_code.cop1_funct )
|
|
{
|
|
case Cop1OpFunc_CVT_S:
|
|
R4300_Cop1_W_CVT_S( R4300_CALL_ARGUMENTS );
|
|
return;
|
|
case Cop1OpFunc_CVT_D:
|
|
R4300_Cop1_W_CVT_D( R4300_CALL_ARGUMENTS );
|
|
return;
|
|
}
|
|
WARN_NOEXIST("R4300_Cop1_WInstr_Unk");
|
|
}
|