mirror of https://github.com/PCSX2/pcsx2.git
994 lines
47 KiB
C
994 lines
47 KiB
C
/* Pcsx2 - Pc Ps2 Emulator
|
|
* Copyright (C) 2002-2003 Pcsx2 Team
|
|
*
|
|
* 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
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "Debug.h"
|
|
#include "VU.h"
|
|
|
|
long jumpMode;
|
|
char ostr[1024];
|
|
|
|
// Names of registers
|
|
char *disRNameGPR[] = {
|
|
"r0", "at", "v0", "v1", "a0", "a1","a2", "a3",
|
|
"t0", "t1", "t2", "t3", "t4", "t5","t6", "t7",
|
|
"s0", "s1", "s2", "s3", "s4", "s5","s6", "s7",
|
|
"t8", "t9", "k0", "k1", "gp", "sp","fp", "ra", "hi", "lo"}; // lo,hi used in rec
|
|
|
|
char *disRNameCP0[] = {
|
|
"Index" , "Random" , "EntryLo0" , "EntryLo1", "Context" , "PageMask" , "Wired" , "*RES*",
|
|
"BadVAddr" , "Count" , "EntryHi" , "Compare" , "Status" , "Cause" , "ExceptPC" , "PRevID",
|
|
"Config" , "LLAddr" , "WatchLo" , "WatchHi" , "*RES*" , "*RES*" , "*RES*" , "Debug",
|
|
"DEPC" , "PerfCnt" , "ErrCtl" , "CacheErr", "TagLo" , "TagHi" , "ErrorEPC" , "DESAVE"};
|
|
|
|
char *disRNameCP1[] = {
|
|
"FPR0" , "FPR1" , "FPR2" , "FPR3" , "FPR4" , "FPR5" , "FPR6" , "FPR7",
|
|
"FPR8" , "FPR9" , "FPR10", "FPR11", "FPR12", "FPR13", "FPR14", "FPR15",
|
|
"FPR16", "FPR17", "FPR18", "FPR19", "FPR20", "FPR21", "FPR22", "FPR23",
|
|
"FPR24", "FPR25", "FPR26", "FPR27", "FPR28", "FPR29", "FPR30", "FPR31"};
|
|
|
|
char *disRNameCP1c[] = {
|
|
"FRevID", "*RES*", "*RES*", "*RES*", "*RES*", "*RES*", "*RES*", "*RES*",
|
|
"*RES*", "*RES*", "*RES*", "*RES*", "*RES*", "*RES*", "*RES*", "*RES*",
|
|
"*RES*", "*RES*", "*RES*", "*RES*", "*RES*", "*RES*", "*RES*", "*RES*",
|
|
"*RES*", "*RES*", "*RES*", "*RES*", "*RES*", "*RES*", "*RES*", "FStatus"};
|
|
|
|
char *disRNameCP2f[] = {
|
|
"VF00", "VF01", "VF02", "VF03", "VF04", "VF05", "VF06", "VF07",
|
|
"VF08", "VF09", "VF10", "VF11", "VF12", "VF13", "VF14", "VF15",
|
|
"VF16", "VF17", "VF18", "VF19", "VF20", "VF21", "VF22", "VF23",
|
|
"VF24", "VF25", "VF26", "VF27", "VF28", "VF29", "VF30", "VF31"};
|
|
|
|
char *disRNameCP2i[] = {
|
|
"VI00", "VI01", "VI02", "VI03", "VI04", "VI05", "VI06", "VI07",
|
|
"VI08", "VI09", "VI10", "VI11", "VI12", "VI13", "VI14", "VI15",
|
|
"Status", "MAC", "Clip", "*RES*", "R", "I", "Q", "*RES*",
|
|
"*RES*", "*RES*", "TPC", "CMSAR0", "FBRST", "VPU-STAT", "*RES*", "CMSAR1"};
|
|
|
|
char *CP2VFnames[] = { "x", "y", "z", "w" };
|
|
|
|
// Type deffinition of our functions
|
|
#define DisFInterface (u32 code, u32 pc)
|
|
#define DisFInterfaceT (u32, u32)
|
|
#define DisFInterfaceN (code, pc)
|
|
|
|
typedef char* (*TdisR5900F)DisFInterface;
|
|
|
|
// These macros are used to assemble the disassembler functions
|
|
#define MakeDisF(fn, b) \
|
|
char* fn DisFInterface { \
|
|
sprintf (ostr, "%8.8x %8.8x:", pc, code); \
|
|
b; /*ostr[(strlen(ostr) - 1)] = 0;*/ return ostr; \
|
|
}
|
|
|
|
#undef _Target_
|
|
#undef _Branch_
|
|
#undef _Funct_
|
|
#undef _Rd_
|
|
#undef _Rt_
|
|
#undef _Rs_
|
|
#undef _Sa_
|
|
#undef _Im_
|
|
|
|
#define _Funct_ ((code ) & 0x3F) // The funct part of the instruction register
|
|
#define _Rd_ ((code >> 11) & 0x1F) // The rd part of the instruction register
|
|
#define _Rt_ ((code >> 16) & 0x1F) // The rt part of the instruction register
|
|
#define _Rs_ ((code >> 21) & 0x1F) // The rs part of the instruction register
|
|
#define _Sa_ ((code >> 6) & 0x1F) // The sa part of the instruction register
|
|
#define _Im_ ( code & 0xFFFF) // The immediate part of the instruction register
|
|
|
|
|
|
#define _rRs_ cpuRegs.GPR.r[_Rs_].UL[1], cpuRegs.GPR.r[_Rs_].UL[0] // Rs register
|
|
#define _rRt_ cpuRegs.GPR.r[_Rt_].UL[1], cpuRegs.GPR.r[_Rt_].UL[0] // Rt register
|
|
#define _rRd_ cpuRegs.GPR.r[_Rd_].UL[1], cpuRegs.GPR.r[_Rd_].UL[0] // Rd register
|
|
#define _rSa_ cpuRegs.GPR.r[_Sa_].UL[1], cpuRegs.GPR.r[_Sa_].UL[0] // Sa register
|
|
|
|
#define _rFs_ cpuRegs.CP0.r[_Rd_] // Fs register
|
|
|
|
#define _rRs32_ cpuRegs.GPR.r[_Rs_].UL[0] // Rs register
|
|
#define _rRt32_ cpuRegs.GPR.r[_Rt_].UL[0] // Rt register
|
|
#define _rRd32_ cpuRegs.GPR.r[_Rd_].UL[0] // Rd register
|
|
#define _rSa32_ cpuRegs.GPR.r[_Sa_].UL[0] // Sa register
|
|
|
|
|
|
#define _nRs_ _rRs_, disRNameGPR[_Rs_]
|
|
#define _nRt_ _rRt_, disRNameGPR[_Rt_]
|
|
#define _nRd_ _rRd_, disRNameGPR[_Rd_]
|
|
#define _nSa_ _rSa_, disRNameGPR[_Sa_]
|
|
#define _nRd0_ _rFs_, disRNameCP0[_Rd_]
|
|
|
|
#define _nRs32_ _rRs32_, disRNameGPR[_Rs_]
|
|
#define _nRt32_ _rRt32_, disRNameGPR[_Rt_]
|
|
#define _nRd32_ _rRd32_, disRNameGPR[_Rd_]
|
|
#define _nSa32_ _rSa32_, disRNameGPR[_Sa_]
|
|
|
|
#define _I_ _Im_, _Im_
|
|
#define _Target_ ((pc & 0xf0000000) + ((code & 0x03ffffff) * 4))
|
|
#define _Branch_ (pc + 4 + ((short)_Im_ * 4))
|
|
#define _OfB_ _Im_, _nRs_
|
|
|
|
#define _Fsf_ ((code >> 21) & 0x03)
|
|
#define _Ftf_ ((code >> 23) & 0x03)
|
|
|
|
#define dName(i) sprintf(ostr, "%s %-7s,", ostr, i)
|
|
#define dGPR128(i) sprintf(ostr, "%s %8.8x_%8.8x_%8.8x_%8.8x (%s),", ostr, cpuRegs.GPR.r[i].UL[3], cpuRegs.GPR.r[i].UL[2], cpuRegs.GPR.r[i].UL[1], cpuRegs.GPR.r[i].UL[0], disRNameGPR[i])
|
|
#define dGPR64(i) sprintf(ostr, "%s %8.8x_%8.8x (%s),", ostr, cpuRegs.GPR.r[i].UL[1], cpuRegs.GPR.r[i].UL[0], disRNameGPR[i])
|
|
#define dGPR64U(i) sprintf(ostr, "%s %8.8x_%8.8x (%s),", ostr, cpuRegs.GPR.r[i].UL[3], cpuRegs.GPR.r[i].UL[2], disRNameGPR[i])
|
|
#define dGPR32(i) sprintf(ostr, "%s %8.8x (%s),", ostr, cpuRegs.GPR.r[i].UL[0], disRNameGPR[i])
|
|
|
|
#define dCP032(i) sprintf(ostr, "%s %8.8x (%s),", ostr, cpuRegs.CP0.r[i], disRNameCP0[i])
|
|
|
|
#define dCP132(i) sprintf(ostr, "%s %f (%s),", ostr, fpuRegs.fpr[i].f, disRNameCP1[i])
|
|
#define dCP1c32(i) sprintf(ostr, "%s %8.8x (%s),", ostr, fpuRegs.fprc[i], disRNameCP1c[i])
|
|
#define dCP1acc() sprintf(ostr, "%s %f (ACC),", ostr, fpuRegs.ACC.f)
|
|
|
|
#define dCP2128f(i) sprintf(ostr, "%s w=%f z=%f y=%f x=%f (%s),", ostr, VU0.VF[i].f.w, VU0.VF[i].f.z, VU0.VF[i].f.y, VU0.VF[i].f.x, disRNameCP2f[i])
|
|
#define dCP232x(i) sprintf(ostr, "%s x=%f (%s),", ostr, VU0.VF[i].f.x, disRNameCP2f[i])
|
|
#define dCP232y(i) sprintf(ostr, "%s y=%f (%s),", ostr, VU0.VF[i].f.y, disRNameCP2f[i])
|
|
#define dCP232z(i) sprintf(ostr, "%s z=%f (%s),", ostr, VU0.VF[i].f.z, disRNameCP2f[i])
|
|
#define dCP232w(i) sprintf(ostr, "%s w=%f (%s),", ostr, VU0.VF[i].f.w, disRNameCP2f[i])
|
|
#define dCP2ACCf() sprintf(ostr, "%s w=%f z=%f y=%f x=%f (ACC),", ostr, VU0.ACC.f.w, VU0.ACC.f.z, VU0.ACC.f.y, VU0.ACC.f.x)
|
|
#define dCP232i(i) sprintf(ostr, "%s %8.8x (%s),", ostr, VU0.VI[i].UL, disRNameCP2i[i])
|
|
#define dCP232iF(i) sprintf(ostr, "%s %f (%s),", ostr, VU0.VI[i].F, disRNameCP2i[i])
|
|
#define dCP232f(i, j) sprintf(ostr, "%s Q %s=%f (%s),", ostr, CP2VFnames[j], VU0.VF[i].F[j], disRNameCP2f[i])
|
|
|
|
#define dHI64() sprintf(ostr, "%s %8.8x_%8.8x (%s),", ostr, cpuRegs.HI.UL[1], cpuRegs.HI.UL[0], "hi")
|
|
#define dLO64() sprintf(ostr, "%s %8.8x_%8.8x (%s),", ostr, cpuRegs.LO.UL[1], cpuRegs.LO.UL[0], "lo")
|
|
#define dImm() sprintf(ostr, "%s %4.4x (%d),", ostr, _Im_, _Im_)
|
|
#define dTarget() sprintf(ostr, "%s %8.8x,", ostr, _Target_)
|
|
#define dSa() sprintf(ostr, "%s %2.2x (%d),", ostr, _Sa_, _Sa_)
|
|
#define dSa32() sprintf(ostr, "%s %2.2x (%d),", ostr, _Sa_+32, _Sa_+32)
|
|
#define dOfB() sprintf(ostr, "%s %4.4x (%8.8x (%s)),", ostr, _Im_, cpuRegs.GPR.r[_Rs_].UL[0], disRNameGPR[_Rs_])
|
|
#define dOffset() sprintf(ostr, "%s %8.8x,", ostr, _Branch_)
|
|
#define dCode() sprintf(ostr, "%s %8.8x,", ostr, (code >> 6) & 0xffffff)
|
|
#define dSaR() sprintf(ostr, "%s %8.8x,", ostr, cpuRegs.sa)
|
|
|
|
typedef struct {
|
|
u32 addr;
|
|
char name[32];
|
|
} sSymbol;
|
|
|
|
static sSymbol *dSyms = NULL;
|
|
static int nSyms = 0;
|
|
|
|
void disR5900AddSym(u32 addr, char *name) {
|
|
dSyms = (sSymbol*)realloc(dSyms, sizeof(sSymbol) * (nSyms+1));
|
|
if (dSyms == NULL) return;
|
|
dSyms[nSyms].addr = addr;
|
|
strncpy(dSyms[nSyms].name, name, 32);
|
|
nSyms++;
|
|
}
|
|
|
|
void disR5900FreeSyms() {
|
|
if (dSyms != NULL) { free(dSyms); dSyms = NULL; }
|
|
nSyms = 0;
|
|
}
|
|
|
|
char *disR5900GetSym(u32 addr) {
|
|
int i;
|
|
|
|
if (dSyms == NULL) return NULL;
|
|
for (i=0; i<nSyms; i++)
|
|
if (dSyms[i].addr == addr) return dSyms[i].name;
|
|
|
|
return NULL;
|
|
}
|
|
|
|
char *disR5900GetUpperSym(u32 addr) {
|
|
u32 laddr;
|
|
int i, j=-1;
|
|
|
|
if (dSyms == NULL) return NULL;
|
|
for (i=0, laddr=0; i<nSyms; i++) {
|
|
if (dSyms[i].addr < addr && dSyms[i].addr > laddr) {
|
|
laddr = dSyms[i].addr;
|
|
j = i;
|
|
}
|
|
}
|
|
if (j == -1) return NULL;
|
|
return dSyms[j].name;
|
|
}
|
|
|
|
#define dFindSym(i) { \
|
|
char *str = disR5900GetSym(i); \
|
|
if (str != NULL) sprintf(ostr, "%s %s", ostr, str); \
|
|
}
|
|
|
|
/*********************************************************
|
|
* Arithmetic with immediate operand *
|
|
* Format: OP rt, rs, immediate *
|
|
*********************************************************/
|
|
MakeDisF(disADDI, dName("ADDI"); dGPR64(_Rt_); dGPR32(_Rs_); dImm();)
|
|
MakeDisF(disADDIU, dName("ADDIU"); dGPR64(_Rt_); dGPR32(_Rs_); dImm();)
|
|
MakeDisF(disANDI, dName("ANDI"); dGPR64(_Rt_); dGPR64(_Rs_); dImm();)
|
|
MakeDisF(disORI, dName("ORI"); dGPR64(_Rt_); dGPR64(_Rs_); dImm();)
|
|
MakeDisF(disSLTI, dName("SLTI"); dGPR64(_Rt_); dGPR64(_Rs_); dImm();)
|
|
MakeDisF(disSLTIU, dName("SLTIU"); dGPR64(_Rt_); dGPR64(_Rs_); dImm();)
|
|
MakeDisF(disXORI, dName("XORI"); dGPR64(_Rt_); dGPR64(_Rs_); dImm();)
|
|
MakeDisF(disDADDI, dName("DADDI"); dGPR64(_Rt_); dGPR64(_Rs_); dImm();)
|
|
MakeDisF(disDADDIU, dName("DADDIU"); dGPR64(_Rt_); dGPR64(_Rs_); dImm();)
|
|
|
|
/*********************************************************
|
|
* Register arithmetic *
|
|
* Format: OP rd, rs, rt *
|
|
*********************************************************/
|
|
MakeDisF(disADD, dName("ADD"); dGPR64(_Rd_); dGPR32(_Rs_); dGPR32(_Rt_);)
|
|
MakeDisF(disADDU, dName("ADDU"); dGPR64(_Rd_); dGPR32(_Rs_); dGPR32(_Rt_);)
|
|
MakeDisF(disDADD, dName("DADD"); dGPR64(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disDADDU, dName("DADDU"); dGPR64(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disSUB, dName("SUB"); dGPR64(_Rd_); dGPR32(_Rs_); dGPR32(_Rt_);)
|
|
MakeDisF(disSUBU, dName("SUBU"); dGPR64(_Rd_); dGPR32(_Rs_); dGPR32(_Rt_);)
|
|
MakeDisF(disDSUB, dName("DSUB"); dGPR64(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disDSUBU, dName("DSDBU"); dGPR64(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disAND, dName("AND"); dGPR64(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disOR, dName("OR"); dGPR64(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disXOR, dName("XOR"); dGPR64(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disNOR, dName("NOR"); dGPR64(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disSLT, dName("SLT"); dGPR64(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disSLTU, dName("SLTU"); dGPR64(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
|
|
/*********************************************************
|
|
* Jump to target *
|
|
* Format: OP target *
|
|
*********************************************************/
|
|
MakeDisF(disJ, dName("J"); dTarget(); dFindSym(_Target_);)
|
|
MakeDisF(disJAL, dName("JAL"); dTarget(); dGPR32(31); dFindSym(_Target_);)
|
|
|
|
/*********************************************************
|
|
* Register jump *
|
|
* Format: OP rs, rd *
|
|
*********************************************************/
|
|
MakeDisF(disJR, dName("JR"); dGPR32(_Rs_); dFindSym(cpuRegs.GPR.r[_Rs_].UL[0]);)
|
|
MakeDisF(disJALR, dName("JALR"); dGPR32(_Rs_); dGPR32(_Rd_); dFindSym(cpuRegs.GPR.r[_Rs_].UL[0]);)
|
|
|
|
/*********************************************************
|
|
* Register mult/div & Register trap logic *
|
|
* Format: OP rs, rt *
|
|
*********************************************************/
|
|
MakeDisF(disDIV, dName("DIV"); dGPR32(_Rs_); dGPR32(_Rt_);)
|
|
MakeDisF(disDIVU, dName("DIVU"); dGPR32(_Rs_); dGPR32(_Rt_);)
|
|
MakeDisF(disMULT, dName("MULT"); dGPR32(_Rs_); dGPR32(_Rt_); dGPR32(_Rd_);)
|
|
MakeDisF(disMULTU, dName("MULTU"); dGPR32(_Rs_); dGPR32(_Rt_); dGPR32(_Rd_);)
|
|
|
|
/*********************************************************
|
|
* Load higher 16 bits of the first word in GPR with imm *
|
|
* Format: OP rt, immediate *
|
|
*********************************************************/
|
|
MakeDisF(disLUI, dName("LUI"); dGPR64(_Rt_); dImm();)
|
|
|
|
/*********************************************************
|
|
* Move from HI/LO to GPR *
|
|
* Format: OP rd *
|
|
*********************************************************/
|
|
MakeDisF(disMFHI, dName("MFHI"); dGPR64(_Rd_); dHI64();)
|
|
MakeDisF(disMFLO, dName("MFLO"); dGPR64(_Rd_); dLO64();)
|
|
|
|
/*********************************************************
|
|
* Move to GPR to HI/LO & Register jump *
|
|
* Format: OP rs *
|
|
*********************************************************/
|
|
MakeDisF(disMTHI, dName("MTHI"); dHI64(); dGPR64(_Rs_);)
|
|
MakeDisF(disMTLO, dName("MTLO"); dLO64(); dGPR64(_Rs_);)
|
|
|
|
/*********************************************************
|
|
* Shift arithmetic with constant shift *
|
|
* Format: OP rd, rt, sa *
|
|
*********************************************************/
|
|
MakeDisF(disSLL, if (code) { dName("SLL"); dGPR64(_Rd_); dGPR32(_Rt_); dSa(); } else { dName("NOP"); })
|
|
MakeDisF(disDSLL, dName("DSLL"); dGPR64(_Rd_); dGPR64(_Rt_); dSa();)
|
|
MakeDisF(disDSLL32, dName("DSLL32"); dGPR64(_Rd_); dGPR64(_Rt_); dSa32();)
|
|
MakeDisF(disSRA, dName("SRA"); dGPR64(_Rd_); dGPR32(_Rt_); dSa();)
|
|
MakeDisF(disDSRA, dName("DSRA"); dGPR64(_Rd_); dGPR64(_Rt_); dSa();)
|
|
MakeDisF(disDSRA32, dName("DSRA32"); dGPR64(_Rd_); dGPR64(_Rt_); dSa32();)
|
|
MakeDisF(disSRL, dName("SRL"); dGPR64(_Rd_); dGPR32(_Rt_); dSa();)
|
|
MakeDisF(disDSRL, dName("DSRL"); dGPR64(_Rd_); dGPR64(_Rt_); dSa();)
|
|
MakeDisF(disDSRL32, dName("DSRL32"); dGPR64(_Rd_); dGPR64(_Rt_); dSa32();)
|
|
|
|
/*********************************************************
|
|
* Shift arithmetic with variant register shift *
|
|
* Format: OP rd, rt, rs *
|
|
*********************************************************/
|
|
MakeDisF(disSLLV, dName("SLLV"); dGPR64(_Rd_); dGPR32(_Rt_); dGPR32(_Rs_);)
|
|
MakeDisF(disDSLLV, dName("DSLLV"); dGPR64(_Rd_); dGPR64(_Rt_); dGPR32(_Rs_);)
|
|
MakeDisF(disSRAV, dName("SRAV"); dGPR64(_Rd_); dGPR32(_Rt_); dGPR32(_Rs_);)
|
|
MakeDisF(disDSRAV, dName("DSRAV"); dGPR64(_Rd_); dGPR64(_Rt_); dGPR32(_Rs_);)
|
|
MakeDisF(disSRLV, dName("SRLV"); dGPR64(_Rd_); dGPR32(_Rt_); dGPR32(_Rs_);)
|
|
MakeDisF(disDSRLV, dName("DSRLV"); dGPR64(_Rd_); dGPR64(_Rt_); dGPR32(_Rs_);)
|
|
|
|
/*********************************************************
|
|
* Load and store for GPR *
|
|
* Format: OP rt, offset(base) *
|
|
*********************************************************/
|
|
MakeDisF(disLB, dName("LB"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disLBU, dName("LBU"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disLH, dName("LH"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disLHU, dName("LHU"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disLW, dName("LW"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disLWU, dName("LWU"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disLWL, dName("LWL"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disLWR, dName("LWR"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disLD, dName("LD"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disLDL, dName("LDL"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disLDR, dName("LDR"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disLQ, dName("LQ"); dGPR128(_Rt_); dOfB();)
|
|
MakeDisF(disSB, dName("SB"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disSH, dName("SH"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disSW, dName("SW"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disSWL, dName("SWL"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disSWR, dName("SWR"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disSD, dName("SD"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disSDL, dName("SDL"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disSDR, dName("SDR"); dGPR64(_Rt_); dOfB();)
|
|
MakeDisF(disSQ, dName("SQ"); dGPR128(_Rt_); dOfB();)
|
|
|
|
/*********************************************************
|
|
* Register branch logic *
|
|
* Format: OP rs, rt, offset *
|
|
*********************************************************/
|
|
MakeDisF(disBEQ, dName("BEQ"); dGPR64(_Rs_); dGPR64(_Rt_); dOffset();)
|
|
MakeDisF(disBNE, dName("BNE"); dGPR64(_Rs_); dGPR64(_Rt_); dOffset();)
|
|
|
|
/*********************************************************
|
|
* Moves between GPR and COPx *
|
|
* Format: OP rt, rd *
|
|
*********************************************************/
|
|
MakeDisF(disMFC0, dName("MFC0"); dGPR32(_Rt_); dCP032(_Rd_);)
|
|
MakeDisF(disMTC0, dName("MTC0"); dCP032(_Rd_); dGPR32(_Rt_);)
|
|
|
|
/*********************************************************
|
|
* Register branch logic *
|
|
* Format: OP rs, offset *
|
|
*********************************************************/
|
|
|
|
MakeDisF(disBGEZ, dName("BGEZ"); dGPR64(_Rs_); dOffset();)
|
|
MakeDisF(disBGEZAL, dName("BGEZAL"); dGPR64(_Rs_); dOffset();)
|
|
MakeDisF(disBGTZ, dName("BGTZ"); dGPR64(_Rs_); dOffset();)
|
|
MakeDisF(disBLEZ, dName("BLEZ"); dGPR64(_Rs_); dOffset();)
|
|
MakeDisF(disBLTZ, dName("BLTZ"); dGPR64(_Rs_); dOffset();)
|
|
MakeDisF(disBLTZAL, dName("BLTZAL"); dGPR64(_Rs_); dOffset();)
|
|
|
|
|
|
/*********************************************************
|
|
* Register branch logic Likely *
|
|
* Format: OP rs, offset *
|
|
*********************************************************/
|
|
|
|
|
|
MakeDisF(disBEQL, dName("BEQL"); dGPR64(_Rs_); dGPR64(_Rt_); dOffset();)
|
|
MakeDisF(disBNEL, dName("BNEL"); dGPR64(_Rs_); dGPR64(_Rt_); dOffset();)
|
|
MakeDisF(disBLEZL, dName("BLEZL"); dGPR64(_Rs_); dOffset();)
|
|
MakeDisF(disBGTZL, dName("BGTZL"); dGPR64(_Rs_); dOffset();)
|
|
MakeDisF(disBLTZL, dName("BLTZL"); dGPR64(_Rs_); dOffset();)
|
|
MakeDisF(disBGEZL, dName("BGEZL"); dGPR64(_Rs_); dOffset();)
|
|
MakeDisF(disBLTZALL, dName("BLTZALL"); dGPR64(_Rs_); dOffset();)
|
|
MakeDisF(disBGEZALL, dName("BGEZALL"); dGPR64(_Rs_); dOffset();)
|
|
|
|
|
|
/*********************************************************
|
|
* COP0 opcodes *
|
|
* *
|
|
*********************************************************/
|
|
|
|
MakeDisF(disBC0F, dName("BC0F"); dOffset();)
|
|
MakeDisF(disBC0T, dName("BC0T"); dOffset();)
|
|
MakeDisF(disBC0FL, dName("BC0FL"); dOffset();)
|
|
MakeDisF(disBC0TL, dName("BC0TL"); dOffset();)
|
|
|
|
MakeDisF(disTLBR, dName("TLBR");)
|
|
MakeDisF(disTLBWI, dName("TLBWI");)
|
|
MakeDisF(disTLBWR, dName("TLBWR");)
|
|
MakeDisF(disTLBP, dName("TLBP");)
|
|
MakeDisF(disERET, dName("ERET");)
|
|
MakeDisF(disEI, dName("EI");)
|
|
MakeDisF(disDI, dName("DI");)
|
|
|
|
/*********************************************************
|
|
* COP1 opcodes *
|
|
* *
|
|
*********************************************************/
|
|
|
|
#define _Ft_ _Rt_
|
|
#define _Fs_ _Rd_
|
|
#define _Fd_ _Sa_
|
|
|
|
MakeDisF(disMFC1, dName("MFC1"); dGPR64(_Rt_); dCP132(_Fs_);)
|
|
MakeDisF(disCFC1, dName("CFC1"); dGPR64(_Rt_); dCP1c32(_Fs_);)
|
|
MakeDisF(disMTC1, dName("MTC1"); dCP132(_Fs_); dGPR64(_Rt_);)
|
|
MakeDisF(disCTC1, dName("CTC1"); dCP1c32(_Fs_); dGPR64(_Rt_);)
|
|
|
|
MakeDisF(disBC1F, dName("BC1F");)
|
|
MakeDisF(disBC1T, dName("BC1T");)
|
|
MakeDisF(disBC1FL, dName("BC1FL");)
|
|
MakeDisF(disBC1TL, dName("BC1TL");)
|
|
|
|
MakeDisF(disADDs, dName("ADDs"); dCP132(_Fd_); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disSUBs, dName("SUBs"); dCP132(_Fd_); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disMULs, dName("MULs"); dCP132(_Fd_); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disDIVs, dName("DIVs"); dCP132(_Fd_); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disSQRTs, dName("SQRTs"); dCP132(_Fd_); dCP132(_Ft_);)
|
|
MakeDisF(disABSs, dName("ABSs"); dCP132(_Fd_); dCP132(_Fs_);)
|
|
MakeDisF(disMOVs, dName("MOVs"); dCP132(_Fd_); dCP132(_Fs_);)
|
|
MakeDisF(disNEGs, dName("NEGs"); dCP132(_Fd_); dCP132(_Fs_);)
|
|
MakeDisF(disRSQRTs, dName("RSQRTs"); dCP132(_Fd_); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disADDAs, dName("ADDAs"); dCP1acc(); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disSUBAs, dName("SUBAs"); dCP1acc(); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disMULAs, dName("MULAs"); dCP1acc(); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disMADDs, dName("MADDs"); dCP132(_Fd_); dCP1acc(); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disMSUBs, dName("MSUBs"); dCP132(_Fd_); dCP1acc(); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disMADDAs, dName("MADDAs"); dCP1acc(); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disMSUBAs, dName("MSUBAs"); dCP1acc(); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disCVTWs, dName("CVTWs"); dCP132(_Fd_); dCP132(_Fs_);)
|
|
MakeDisF(disMAXs, dName("MAXs"); dCP132(_Fd_); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disMINs, dName("MINs"); dCP132(_Fd_); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disCFs, dName("CFs"); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disCEQs, dName("CEQs"); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disCLTs, dName("CLTs"); dCP132(_Fs_); dCP132(_Ft_);)
|
|
MakeDisF(disCLEs, dName("CLEs"); dCP132(_Fs_); dCP132(_Ft_);)
|
|
|
|
MakeDisF(disCVTSw, dName("CVTSw"); dCP132(_Fd_); dCP132(_Fs_);)
|
|
|
|
/*********************************************************
|
|
* Load and store for COP1 *
|
|
* Format: OP rt, offset(base) *
|
|
*********************************************************/
|
|
|
|
MakeDisF(disLWC1, dName("LWC1"); dCP132(_Rt_); dOffset();)
|
|
MakeDisF(disSWC1, dName("SWC1"); dCP132(_Rt_); dOffset();)
|
|
|
|
/*********************************************************
|
|
* Conditional Move *
|
|
* Format: OP rd, rs, rt *
|
|
*********************************************************/
|
|
|
|
MakeDisF(disMOVZ, dName("MOVZ"); dGPR64(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disMOVN, dName("MOVN"); dGPR64(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
|
|
/*********************************************************
|
|
* MMI opcodes *
|
|
* *
|
|
*********************************************************/
|
|
|
|
MakeDisF(disMULT1, dName("MULT1");)
|
|
MakeDisF(disMULTU1, dName("MULTU1");)
|
|
|
|
/*********************************************************
|
|
* MMI0 opcodes *
|
|
* *
|
|
*********************************************************/
|
|
|
|
MakeDisF(disPADDW, dName("PADDW");)
|
|
MakeDisF(disPADDH, dName("PADDH");)
|
|
MakeDisF(disPADDB, dName("PADDB");)
|
|
|
|
MakeDisF(disPADDSW, dName("PADDSW");)
|
|
MakeDisF(disPADDSH, dName("PADDSH");)
|
|
MakeDisF(disPADDSB, dName("PADDSB");)
|
|
|
|
MakeDisF(disPSUBW, dName("PSUBW");)
|
|
MakeDisF(disPSUBH, dName("PSUBH");)
|
|
MakeDisF(disPSUBB, dName("PSUBB");)
|
|
|
|
MakeDisF(disPSUBSW, dName("PSUBSW");)
|
|
MakeDisF(disPSUBSH, dName("PSUBSH");)
|
|
MakeDisF(disPSUBSB, dName("PSUBSB");)
|
|
|
|
MakeDisF(disPCGTW, dName("PCGTW");)
|
|
MakeDisF(disPCGTH, dName("PCGTH");)
|
|
MakeDisF(disPCGTB, dName("PCGTB");)
|
|
|
|
MakeDisF(disPMAXW, dName("PMAXW");)
|
|
MakeDisF(disPMAXH, dName("PMAXH");)
|
|
|
|
MakeDisF(disPEXTLW, dName("PEXTLW"); dGPR128(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disPEXTLH, dName("PEXTLH"); dGPR128(_Rd_); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disPEXTLB, dName("PEXTLB");)
|
|
MakeDisF(disPEXTS, dName("PEXTS");)
|
|
|
|
MakeDisF(disPPACW, dName("PPACW");)
|
|
MakeDisF(disPPACH, dName("PPACH");)
|
|
MakeDisF(disPPACB, dName("PPACB");)
|
|
MakeDisF(disPPACS, dName("PPACS");)
|
|
|
|
/*********************************************************
|
|
* MMI1 opcodes *
|
|
* *
|
|
*********************************************************/
|
|
|
|
MakeDisF(disPADSBH, dName("PADSBH");)
|
|
|
|
MakeDisF(disPABSW, dName("PABSW");)
|
|
MakeDisF(disPABSH, dName("PABSH");)
|
|
|
|
MakeDisF(disPCEQW, dName("PCEQW");)
|
|
MakeDisF(disPCEQH, dName("PCEQH");)
|
|
MakeDisF(disPCEQB, dName("PCEQB");)
|
|
|
|
MakeDisF(disPMINW, dName("PMINW");)
|
|
MakeDisF(disPMINH, dName("PMINH");)
|
|
|
|
MakeDisF(disPADDUW, dName("PADDUW");)
|
|
MakeDisF(disPADDUH, dName("PADDUH");)
|
|
MakeDisF(disPADDUB, dName("PADDUB");)
|
|
|
|
MakeDisF(disPSUBUW, dName("PSUBUW");)
|
|
MakeDisF(disPSUBUH, dName("PSUBUH");)
|
|
MakeDisF(disPSUBUB, dName("PSUBUB");)
|
|
|
|
MakeDisF(disPEXTUW, dName("PEXTUW"); dGPR128(_Rd_); dGPR64U(_Rs_); dGPR64U(_Rt_);)
|
|
MakeDisF(disPEXTUH, dName("PEXTUH"); dGPR128(_Rd_); dGPR64U(_Rs_); dGPR64U(_Rt_);)
|
|
MakeDisF(disPEXTUB, dName("PEXTUB");)
|
|
|
|
MakeDisF(disQFSRV, dName("QFSRV");)
|
|
|
|
/*********************************************************
|
|
* MMI2 opcodes *
|
|
* *
|
|
*********************************************************/
|
|
|
|
MakeDisF(disPMADDW, dName("PMADDW");)
|
|
MakeDisF(disPMADDH, dName("PMADDH");)
|
|
|
|
MakeDisF(disPSLLVW, dName("PSLLVW");)
|
|
MakeDisF(disPSRLVW, dName("PSRLVW");)
|
|
|
|
MakeDisF(disPMFHI, dName("PMFHI");)
|
|
MakeDisF(disPMFLO, dName("PMFLO");)
|
|
|
|
MakeDisF(disPINTH, dName("PINTH");)
|
|
|
|
MakeDisF(disPMULTW, dName("PMULTW");)
|
|
MakeDisF(disPMULTH, dName("PMULTH");)
|
|
|
|
MakeDisF(disPDIVW, dName("PDIVW");)
|
|
MakeDisF(disPDIVH, dName("PDIVH");)
|
|
|
|
MakeDisF(disPCPYLD, dName("PCPYLD"); dGPR128(_Rd_); dGPR128(_Rs_); dGPR128(_Rt_);)
|
|
|
|
MakeDisF(disPAND, dName("PAND"); dGPR128(_Rd_); dGPR128(_Rs_); dGPR128(_Rt_);)
|
|
MakeDisF(disPXOR, dName("PXOR"); dGPR128(_Rd_); dGPR128(_Rs_); dGPR128(_Rt_);)
|
|
|
|
MakeDisF(disPMSUBW, dName("PMSUBW");)
|
|
MakeDisF(disPMSUBH, dName("PMSUBH");)
|
|
|
|
MakeDisF(disPHMADH, dName("PHMADH");)
|
|
MakeDisF(disPHMSBH, dName("PHMSBH");)
|
|
|
|
MakeDisF(disPEXEW, dName("PEXEW");)
|
|
MakeDisF(disPEXEH, dName("PEXEH");)
|
|
|
|
MakeDisF(disPREVH, dName("PREVH");)
|
|
|
|
MakeDisF(disPDIVBW, dName("PDIVBW");)
|
|
|
|
MakeDisF(disPROT3W, dName("PROT3W");)
|
|
|
|
/*********************************************************
|
|
* MMI3 opcodes *
|
|
* *
|
|
*********************************************************/
|
|
|
|
MakeDisF(disPMADDUW, dName("PMADDUW");)
|
|
|
|
MakeDisF(disPSRAVW, dName("PSRAVW");)
|
|
|
|
MakeDisF(disPMTHI, dName("PMTHI");)
|
|
MakeDisF(disPMTLO, dName("PMTLO");)
|
|
|
|
MakeDisF(disPINTEH, dName("PINTEH");)
|
|
|
|
MakeDisF(disPMULTUW, dName("PMULTUW");)
|
|
MakeDisF(disPDIVUW, dName("PDIVUW");)
|
|
|
|
MakeDisF(disPCPYUD, dName("PCPYUD"); dGPR128(_Rd_); dGPR128(_Rt_); dGPR128(_Rs_);)
|
|
|
|
MakeDisF(disPOR, dName("POR"); dGPR128(_Rd_); dGPR128(_Rs_); dGPR128(_Rt_);)
|
|
MakeDisF(disPNOR, dName("PNOR"); dGPR128(_Rd_); dGPR128(_Rs_); dGPR128(_Rt_);)
|
|
|
|
MakeDisF(disPEXCH, dName("PEXCH");)
|
|
MakeDisF(disPEXCW, dName("PEXCW");)
|
|
|
|
MakeDisF(disPCPYH, dName("PCPYH"); dGPR128(_Rd_); dGPR128(_Rt_);)
|
|
|
|
/*********************************************************
|
|
* COP2 opcodes *
|
|
* *
|
|
*********************************************************/
|
|
|
|
#define _Ft_ _Rt_
|
|
#define _Fs_ _Rd_
|
|
#define _Fd_ _Sa_
|
|
|
|
#define _X code>>24
|
|
#define _Y code>>23
|
|
#define _Z code>>22
|
|
#define _W code>>21
|
|
|
|
MakeDisF(disLQC2, dName("LQC2"); dCP2128f(_Rt_); dOfB();)
|
|
MakeDisF(disSQC2, dName("SQC2"); dCP2128f(_Rt_); dOfB();)
|
|
|
|
MakeDisF(disQMFC2, dName("QMFC2");)
|
|
MakeDisF(disQMTC2, dName("QMTC2");)
|
|
MakeDisF(disCFC2, dName("CFC2"); dGPR32(_Rt_); dCP232i(_Fs_);)
|
|
MakeDisF(disCTC2, dName("CTC2"); dCP232i(_Fs_); dGPR32(_Rt_);)
|
|
|
|
MakeDisF(disBC2F, dName("BC2F");)
|
|
MakeDisF(disBC2T, dName("BC2T");)
|
|
MakeDisF(disBC2FL, dName("BC2FL");)
|
|
MakeDisF(disBC2TL, dName("BC2TL");)
|
|
|
|
// SPEC1
|
|
MakeDisF(disVADD, dName("VADD");)
|
|
MakeDisF(disVADDx, dName("VADDx"); dCP2128f(_Fd_); dCP2128f(_Fs_); dCP2128f(_Ft_);)
|
|
MakeDisF(disVADDy, dName("VADDy"); dCP2128f(_Fd_); dCP2128f(_Fs_); dCP2128f(_Ft_);)
|
|
MakeDisF(disVADDz, dName("VADDz"); dCP2128f(_Fd_); dCP2128f(_Fs_); dCP2128f(_Ft_);)
|
|
MakeDisF(disVADDw, dName("VADDw"); dCP2128f(_Fd_); dCP2128f(_Fs_); dCP2128f(_Ft_);)
|
|
MakeDisF(disVADDq, dName("VADDq"); dCP2128f(_Fd_); dCP2128f(_Fs_); dCP232iF(REG_Q);)
|
|
MakeDisF(disVADDi, dName("VADDi"); dCP2128f(_Fd_); dCP2128f(_Fs_); dCP232iF(REG_I);)
|
|
MakeDisF(disVSUB, dName("VSUB");)
|
|
MakeDisF(disVSUBx, dName("VSUBx"); dCP2128f(_Fd_); dCP2128f(_Fs_); dCP2128f(_Ft_);)
|
|
MakeDisF(disVSUBy, dName("VSUBy"); dCP2128f(_Fd_); dCP2128f(_Fs_); dCP2128f(_Ft_);)
|
|
MakeDisF(disVSUBz, dName("VSUBz"); dCP2128f(_Fd_); dCP2128f(_Fs_); dCP2128f(_Ft_);)
|
|
MakeDisF(disVSUBw, dName("VSUBw"); dCP2128f(_Fd_); dCP2128f(_Fs_); dCP2128f(_Ft_);)
|
|
MakeDisF(disVSUBq, dName("VSUBq");)
|
|
MakeDisF(disVSUBi, dName("VSUBi");)
|
|
MakeDisF(disVMADD, dName("VMADD");)
|
|
MakeDisF(disVMADDx, dName("VMADDx"); dCP2128f(_Fd_); dCP2ACCf(); dCP2128f(_Fs_); dCP232x(_Ft_);)
|
|
MakeDisF(disVMADDy, dName("VMADDy"); dCP2128f(_Fd_); dCP2ACCf(); dCP2128f(_Fs_); dCP232y(_Ft_);)
|
|
MakeDisF(disVMADDz, dName("VMADDz"); dCP2128f(_Fd_); dCP2ACCf(); dCP2128f(_Fs_); dCP232z(_Ft_);)
|
|
MakeDisF(disVMADDw, dName("VMADDw"); dCP2128f(_Fd_); dCP2ACCf(); dCP2128f(_Fs_); dCP232w(_Ft_);)
|
|
MakeDisF(disVMADDq, dName("VMADDq");)
|
|
MakeDisF(disVMADDi, dName("VMADDi");)
|
|
MakeDisF(disVMSUB, dName("VMSUB");)
|
|
MakeDisF(disVMSUBx, dName("VMSUBx");)
|
|
MakeDisF(disVMSUBy, dName("VMSUBy");)
|
|
MakeDisF(disVMSUBz, dName("VMSUBz");)
|
|
MakeDisF(disVMSUBw, dName("VMSUBw");)
|
|
MakeDisF(disVMSUBq, dName("VMSUBq");)
|
|
MakeDisF(disVMSUBi, dName("VMSUBi");)
|
|
MakeDisF(disVMAX, dName("VMAX");)
|
|
MakeDisF(disVMAXx, dName("VMAXx");)
|
|
MakeDisF(disVMAXy, dName("VMAXy");)
|
|
MakeDisF(disVMAXz, dName("VMAXz");)
|
|
MakeDisF(disVMAXw, dName("VMAXw");)
|
|
MakeDisF(disVMAXi, dName("VMAXi");)
|
|
MakeDisF(disVMINI, dName("VMINI");)
|
|
MakeDisF(disVMINIx, dName("VMINIx");)
|
|
MakeDisF(disVMINIy, dName("VMINIy");)
|
|
MakeDisF(disVMINIz, dName("VMINIz");)
|
|
MakeDisF(disVMINIw, dName("VMINIw");)
|
|
MakeDisF(disVMINIi, dName("VMINIi");)
|
|
MakeDisF(disVMUL, dName("VMUL");)
|
|
MakeDisF(disVMULx, dName("VMULx");)
|
|
MakeDisF(disVMULy, dName("VMULy");)
|
|
MakeDisF(disVMULz, dName("VMULz");)
|
|
MakeDisF(disVMULw, dName("VMULw");)
|
|
MakeDisF(disVMULq, dName("VMULq");)
|
|
MakeDisF(disVMULi, dName("VMULi");)
|
|
MakeDisF(disVIADD, dName("VIADD");)
|
|
MakeDisF(disVIADDI, dName("VIADDI");)
|
|
MakeDisF(disVISUB, dName("VISUB");)
|
|
MakeDisF(disVIAND, dName("VIAND");)
|
|
MakeDisF(disVIOR, dName("VIOR");)
|
|
MakeDisF(disVOPMSUB, dName("VOPMSUB");)
|
|
MakeDisF(disVCALLMS, dName("VCALLMS");)
|
|
MakeDisF(disVCALLMSR, dName("VCALLMSR");)
|
|
|
|
// SPEC2
|
|
MakeDisF(disVADDA, dName("VADDA");)
|
|
MakeDisF(disVADDAx, dName("VADDAx");)
|
|
MakeDisF(disVADDAy, dName("VADDAy");)
|
|
MakeDisF(disVADDAz, dName("VADDAz");)
|
|
MakeDisF(disVADDAw, dName("VADDAw");)
|
|
MakeDisF(disVADDAq, dName("VADDAq");)
|
|
MakeDisF(disVADDAi, dName("VADDAi");)
|
|
MakeDisF(disVMADDA, dName("VMADDA");)
|
|
MakeDisF(disVMADDAx, dName("VMADDAx"); dCP2ACCf(); dCP2128f(_Fs_); dCP232x(_Ft_);)
|
|
MakeDisF(disVMADDAy, dName("VMADDAy"); dCP2ACCf(); dCP2128f(_Fs_); dCP232y(_Ft_);)
|
|
MakeDisF(disVMADDAz, dName("VMADDAz"); dCP2ACCf(); dCP2128f(_Fs_); dCP232z(_Ft_);)
|
|
MakeDisF(disVMADDAw, dName("VMADDAw"); dCP2ACCf(); dCP2128f(_Fs_); dCP232w(_Ft_);)
|
|
MakeDisF(disVMADDAq, dName("VMADDAq");)
|
|
MakeDisF(disVMADDAi, dName("VMADDAi");)
|
|
MakeDisF(disVSUBAx, dName("VSUBAx");)
|
|
MakeDisF(disVSUBAy, dName("VSUBAy");)
|
|
MakeDisF(disVSUBAz, dName("VSUBAz");)
|
|
MakeDisF(disVSUBAw, dName("VSUBAw");)
|
|
MakeDisF(disVMSUBAx, dName("VMSUBAx");)
|
|
MakeDisF(disVMSUBAy, dName("VMSUBAy");)
|
|
MakeDisF(disVMSUBAz, dName("VMSUBAz");)
|
|
MakeDisF(disVMSUBAw, dName("VMSUBAw");)
|
|
MakeDisF(disVITOF0, dName("VITOF0");)
|
|
MakeDisF(disVITOF4, dName("VITOF4");)
|
|
MakeDisF(disVITOF12, dName("VITOF12");)
|
|
MakeDisF(disVITOF15, dName("VITOF15");)
|
|
MakeDisF(disVFTOI0, dName("VFTOI0");)
|
|
MakeDisF(disVFTOI4, dName("VFTOI4");)
|
|
MakeDisF(disVFTOI12, dName("VFTOI12");)
|
|
MakeDisF(disVFTOI15, dName("VFTOI15");)
|
|
MakeDisF(disVMULA, dName("VMULA");)
|
|
MakeDisF(disVMULAx, dName("VMULAx"); dCP2ACCf(); dCP2128f(_Fs_); dCP232x(_Ft_);)
|
|
MakeDisF(disVMULAy, dName("VMULAy");)
|
|
MakeDisF(disVMULAz, dName("VMULAz");)
|
|
MakeDisF(disVMULAw, dName("VMULAw");)
|
|
MakeDisF(disVMOVE, dName("VMOVE"); dCP2128f(_Ft_); dCP2128f(_Fs_);)
|
|
MakeDisF(disVMR32, dName("VMR32");)
|
|
MakeDisF(disVDIV, dName("VDIV");)
|
|
MakeDisF(disVSQRT, dName("VSQRT"); dCP232f(_Ft_, _Ftf_);)
|
|
MakeDisF(disVRSQRT, dName("VRSQRT");)
|
|
MakeDisF(disVRNEXT, dName("VRNEXT");)
|
|
MakeDisF(disVRGET, dName("VRGET");)
|
|
MakeDisF(disVRINIT, dName("VRINIT");)
|
|
MakeDisF(disVRXOR, dName("VRXOR");)
|
|
MakeDisF(disVWAITQ, dName("VWAITQ");)
|
|
|
|
/*********************************************************
|
|
* Special purpose instructions *
|
|
* Format: OP *
|
|
*********************************************************/
|
|
|
|
MakeDisF(disSYNC, dName("SYNC");)
|
|
MakeDisF(disBREAK, dName("BREAK");)
|
|
MakeDisF(disSYSCALL, dName("SYSCALL"); dCode();)
|
|
MakeDisF(disCACHE, sprintf(ostr, "%s %-7s, %x,", ostr, "CACHE", _Rt_); dOfB();)
|
|
MakeDisF(disPREF, dName("PREF");)
|
|
|
|
MakeDisF(disMFSA, dName("MFSA"); dGPR64(_Rd_); dSaR();)
|
|
MakeDisF(disMTSA, dName("MTSA"); dGPR64(_Rs_); dSaR();)
|
|
|
|
MakeDisF(disMTSAB, dName("MTSAB");dGPR64(_Rs_); dImm();)
|
|
MakeDisF(disMTSAH, dName("MTSAH");dGPR64(_Rs_); dImm();)
|
|
|
|
MakeDisF(disTGE, dName("TGE"); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disTGEU, dName("TGEU"); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disTLT, dName("TLT"); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disTLTU, dName("TLTU"); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disTEQ, dName("TEQ"); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
MakeDisF(disTNE, dName("TNE"); dGPR64(_Rs_); dGPR64(_Rt_);)
|
|
|
|
MakeDisF(disTGEI, dName("TGEI"); dGPR64(_Rs_); dImm();)
|
|
MakeDisF(disTGEIU, dName("TGEIU"); dGPR64(_Rs_); dImm();)
|
|
MakeDisF(disTLTI, dName("TLTI"); dGPR64(_Rs_); dImm();)
|
|
MakeDisF(disTLTIU, dName("TLTIU"); dGPR64(_Rs_); dImm();)
|
|
MakeDisF(disTEQI, dName("TEQI"); dGPR64(_Rs_); dImm();)
|
|
MakeDisF(disTNEI, dName("TNEI"); dGPR64(_Rs_); dImm();)
|
|
|
|
/*********************************************************
|
|
* Unknow instruction (would generate an exception) *
|
|
* Format: ? *
|
|
*********************************************************/
|
|
MakeDisF(disNULL, dName("*** Bad OP ***");)
|
|
|
|
TdisR5900F disR5900_MMI0[] = { // Subset of disMMI0
|
|
disPADDW, disPSUBW, disPCGTW, disPMAXW,
|
|
disPADDH, disPSUBH, disPCGTH, disPMAXH,
|
|
disPADDB, disPSUBB, disPCGTB, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL,
|
|
disPADDSW, disPSUBSW, disPEXTLW, disPPACW,
|
|
disPADDSH, disPSUBSH, disPEXTLH, disPPACH,
|
|
disPADDSB, disPSUBSB, disPEXTLB, disPPACB,
|
|
disNULL, disNULL, disPEXTS, disPPACS};
|
|
|
|
MakeDisF(disMMI0, disR5900_MMI0[_Sa_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_MMI1[] = { // Subset of disMMI1
|
|
disNULL, disPABSW, disPCEQW, disPMINW,
|
|
disPADSBH, disPABSH, disPCEQH, disPMINH,
|
|
disNULL, disNULL, disPCEQB, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL,
|
|
disPADDUW, disPSUBUW, disPEXTUW, disNULL,
|
|
disPADDUH, disPSUBUH, disPEXTUH, disNULL,
|
|
disPADDUB, disPSUBUB, disPEXTUB, disQFSRV,
|
|
disNULL, disNULL, disNULL, disNULL};
|
|
|
|
MakeDisF(disMMI1, disR5900_MMI1[_Sa_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_MMI2[] = { // Subset of disMMI2
|
|
disPMADDW, disNULL, disPSLLVW, disPSRLVW,
|
|
disPMSUBW, disNULL, disNULL, disNULL,
|
|
disPMFHI, disPMFLO, disPINTH, disNULL,
|
|
disPMULTW, disPDIVW, disPCPYLD, disNULL,
|
|
disPMADDH, disPHMADH, disPAND, disPXOR,
|
|
disPMSUBH, disPHMSBH, disNULL, disNULL,
|
|
disNULL, disNULL, disPEXEH, disPREVH,
|
|
disPMULTH, disPDIVBW, disPEXEW, disPROT3W};
|
|
|
|
MakeDisF(disMMI2, disR5900_MMI2[_Sa_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_MMI3[] = { // Subset of disMMI3
|
|
disPMADDUW, disNULL, disNULL, disPSRAVW,
|
|
disNULL, disNULL, disNULL, disNULL,
|
|
disPMTHI, disPMTLO, disPINTEH, disNULL,
|
|
disPMULTUW, disPDIVUW, disPCPYUD, disNULL,
|
|
disNULL, disNULL, disPOR, disPNOR,
|
|
disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disPEXCH, disPCPYH,
|
|
disNULL, disNULL, disPEXCW, disNULL};
|
|
|
|
MakeDisF(disMMI3, disR5900_MMI3[_Sa_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_MMI[] = { // Subset of disMMI
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disMMI0, disMMI2, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disMULT1, disMULTU1, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disMMI1, disMMI3, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL};
|
|
|
|
MakeDisF(disMMI, disR5900_MMI[_Funct_] DisFInterfaceN)
|
|
|
|
|
|
TdisR5900F disR5900_COP0_BC0[] = { //subset of disCOP0 BC
|
|
disBC0F, disBC0T, disBC0FL, disBC0TL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL , disNULL , disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL , disNULL , disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL , disNULL , disNULL, disNULL, disNULL, disNULL,
|
|
};
|
|
|
|
MakeDisF(disCOP0_BC0, disR5900_COP0_BC0[_Rt_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_COP0_Func[] = { //subset of disCOP0 Function
|
|
disNULL, disTLBR, disTLBWI, disNULL, disNULL, disNULL, disTLBWR, disNULL,
|
|
disTLBP, disNULL, disNULL , disNULL, disNULL, disNULL, disNULL , disNULL,
|
|
disNULL, disNULL, disNULL , disNULL, disNULL, disNULL, disNULL , disNULL,
|
|
disERET, disNULL, disNULL , disNULL, disNULL, disNULL, disNULL , disNULL,
|
|
disNULL, disNULL, disNULL , disNULL, disNULL, disNULL, disNULL , disNULL,
|
|
disNULL, disNULL, disNULL , disNULL, disNULL, disNULL, disNULL , disNULL,
|
|
disNULL, disNULL, disNULL , disNULL, disNULL, disNULL, disNULL , disNULL,
|
|
disEI , disDI , disNULL , disNULL, disNULL, disNULL, disNULL , disNULL
|
|
};
|
|
MakeDisF(disCOP0_Func, disR5900_COP0_Func[_Funct_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_COP0[] = { // Subset of disCOP0
|
|
disMFC0, disNULL, disNULL, disNULL, disMTC0, disNULL, disNULL, disNULL,
|
|
disCOP0_BC0, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disCOP0_Func, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL};
|
|
|
|
MakeDisF(disCOP0, disR5900_COP0[_Rs_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_COP1_S[] = { //subset of disCOP1 S
|
|
disADDs, disSUBs, disMULs, disDIVs, disSQRTs, disABSs, disMOVs, disNEGs,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disRSQRTs, disNULL,
|
|
disADDAs, disSUBAs, disMULAs, disNULL, disMADDs, disMSUBs, disMADDAs, disMSUBAs,
|
|
disNULL, disNULL, disNULL, disNULL, disCVTWs, disNULL, disNULL, disNULL,
|
|
disMINs, disMAXs, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disCFs, disNULL, disCEQs, disNULL, disCLTs, disNULL, disCLEs, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
};
|
|
|
|
MakeDisF(disCOP1_S, disR5900_COP1_S[_Funct_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_COP1_W[] = { //subset of disCOP1 W
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disCVTSw, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
};
|
|
|
|
MakeDisF(disCOP1_W, disR5900_COP1_W[_Funct_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_COP1_BC1[] = { //subset of disCOP1 BC
|
|
disBC1F, disBC1T, disBC1FL, disBC1TL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL , disNULL , disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL , disNULL , disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL , disNULL , disNULL, disNULL, disNULL, disNULL,
|
|
};
|
|
|
|
MakeDisF(disCOP1_BC1, disR5900_COP1_BC1[_Rt_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_COP1[] = { // Subset of disCOP1
|
|
disMFC1, disNULL, disCFC1, disNULL, disMTC1, disNULL, disCTC1, disNULL,
|
|
disCOP1_BC1, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disCOP1_S, disNULL, disNULL, disNULL, disCOP1_W, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL};
|
|
|
|
MakeDisF(disCOP1, disR5900_COP1[_Rs_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_COP2_SPEC2[] = { //subset of disCOP2 SPEC2
|
|
disVADDAx, disVADDAy, disVADDAz, disVADDAw, disVSUBAx, disVSUBAy, disVSUBAz, disVSUBAw,
|
|
disVMADDAx, disVMADDAy, disVMADDAz, disVMADDAw, disVMSUBAx, disVMSUBAy, disVMSUBAz, disVMSUBAw,
|
|
disVITOF0, disVITOF4, disVITOF12, disVITOF15, disVFTOI0, disVFTOI4, disVFTOI12, disVFTOI15,
|
|
disVMULAx, disVMULAy, disVMULAz, disVMULAw, disNULL, disNULL, disNULL, disNULL,
|
|
disVADDAq, disVMADDAq, disVADDAi, disVMADDAi, disNULL, disNULL, disNULL, disNULL,
|
|
disVADDA, disVMADDA, disVMULA, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disVMOVE, disVMR32, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disVDIV, disVSQRT, disVRSQRT, disVWAITQ, disNULL, disNULL, disNULL, disNULL,
|
|
disVRNEXT, disVRGET, disVRINIT, disVRXOR, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
};
|
|
|
|
MakeDisF(disCOP2_SPEC2, disR5900_COP2_SPEC2[(code & 0x3) | ((code >> 4) & 0x7c)] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_COP2_SPEC1[] = { //subset of disCOP2 SPEC1
|
|
disVADDx, disVADDy, disVADDz, disVADDw, disVSUBx, disVSUBy, disVSUBz, disVSUBw,
|
|
disVMADDx, disVMADDy, disVMADDz, disVMADDw, disVMSUBx, disVMSUBy, disVMSUBz, disVMSUBw,
|
|
disVMAXx, disVMAXy, disVMAXz, disVMAXw, disVMINIx, disVMINIy, disVMINIz, disVMINIw,
|
|
disVMULx, disVMULy, disVMULz, disVMULw, disVMULq, disVMAXi, disVMULi, disVMINIi,
|
|
disVADDq, disVMADDq, disVADDi, disVMADDi, disVSUBq, disVMSUBq, disVSUBi, disVMSUBi,
|
|
disVADD, disVMADD, disVMUL, disVMAX, disVSUB, disVMSUB, disVOPMSUB, disVMINI,
|
|
disVIADD, disVISUB, disVIADDI, disNULL, disVIAND, disVIOR, disNULL, disNULL,
|
|
disVCALLMS, disVCALLMSR, disNULL, disNULL, disCOP2_SPEC2, disCOP2_SPEC2, disCOP2_SPEC2, disCOP2_SPEC2,
|
|
};
|
|
|
|
MakeDisF(disCOP2_SPEC1, disR5900_COP2_SPEC1[_Funct_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_COP2_BC2[] = { //subset of disCOP2 BC
|
|
disBC2F, disBC2T, disBC2FL, disBC2TL, disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL , disNULL , disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL , disNULL , disNULL, disNULL, disNULL, disNULL,
|
|
disNULL, disNULL, disNULL , disNULL , disNULL, disNULL, disNULL, disNULL,
|
|
};
|
|
|
|
MakeDisF(disCOP2_BC2, disR5900_COP2_BC2[_Rt_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_COP2[] = { // Subset of disCOP2
|
|
disNULL, disQMFC2, disCFC2, disNULL, disNULL, disQMTC2, disCTC2, disNULL,
|
|
disCOP2_BC2, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL, disNULL,
|
|
disCOP2_SPEC1, disCOP2_SPEC1, disCOP2_SPEC1, disCOP2_SPEC1, disCOP2_SPEC1, disCOP2_SPEC1, disCOP2_SPEC1, disCOP2_SPEC1,
|
|
disCOP2_SPEC1, disCOP2_SPEC1, disCOP2_SPEC1, disCOP2_SPEC1, disCOP2_SPEC1, disCOP2_SPEC1, disCOP2_SPEC1, disCOP2_SPEC1};
|
|
|
|
MakeDisF(disCOP2, disR5900_COP2[_Rs_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_REGIMM[] = { // Subset of disREGIMM
|
|
disBLTZ, disBGEZ, disBLTZL, disBGEZL, disNULL, disNULL, disNULL, disNULL,
|
|
disTGEI, disTGEIU, disTLTI, disTLTIU, disTEQI, disNULL, disTNEI, disNULL,
|
|
disBLTZAL, disBGEZAL, disBLTZALL, disBGEZALL, disNULL, disNULL, disNULL, disNULL,
|
|
disMTSAB, disMTSAH , disNULL, disNULL, disNULL, disNULL, disNULL, disNULL};
|
|
|
|
MakeDisF(disREGIMM, disR5900_REGIMM[_Rt_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900_SPECIAL[] = {
|
|
disSLL, disNULL, disSRL, disSRA, disSLLV, disNULL, disSRLV, disSRAV,
|
|
disJR, disJALR, disMOVZ, disMOVN, disSYSCALL, disBREAK,disNULL, disSYNC,
|
|
disMFHI, disMTHI, disMFLO, disMTLO, disDSLLV, disNULL, disDSRLV, disDSRAV,
|
|
disMULT, disMULTU,disDIV, disDIVU, disNULL, disNULL, disNULL, disNULL,
|
|
disADD, disADDU, disSUB, disSUBU, disAND, disOR, disXOR, disNOR,
|
|
disMFSA , disMTSA, disSLT, disSLTU, disDADD, disDADDU,disDSUB, disDSUBU,
|
|
disTGE, disTGEU, disTLT, disTLTU, disTEQ, disNULL, disTNE, disNULL,
|
|
disDSLL, disNULL, disDSRL, disDSRA, disDSLL32, disNULL, disDSRL32,disDSRA32 };
|
|
|
|
MakeDisF(disSPECIAL, disR5900_SPECIAL[_Funct_] DisFInterfaceN)
|
|
|
|
TdisR5900F disR5900[] = {
|
|
disSPECIAL, disREGIMM, disJ , disJAL , disBEQ , disBNE , disBLEZ , disBGTZ ,
|
|
disADDI , disADDIU , disSLTI, disSLTIU, disANDI, disORI , disXORI , disLUI ,
|
|
disCOP0 , disCOP1 , disCOP2, disNULL , disBEQL, disBNEL, disBLEZL, disBGTZL,
|
|
disDADDI , disDADDIU, disLDL , disLDR , disMMI , disNULL, disLQ , disSQ ,
|
|
disLB , disLH , disLWL , disLW , disLBU , disLHU , disLWR , disLWU ,
|
|
disSB , disSH , disSWL , disSW , disSDL , disSDR , disSWR , disCACHE,
|
|
disNULL , disLWC1 , disNULL, disPREF , disNULL, disNULL, disLQC2 , disLD ,
|
|
disNULL , disSWC1 , disNULL, disNULL , disNULL, disNULL, disSQC2 , disSD };
|
|
|
|
MakeDisF(disR5900F, disR5900[code >> 26] DisFInterfaceN)
|
|
|