2012-11-15 00:39:56 +01:00
|
|
|
#pragma once
|
|
|
|
|
|
2015-08-26 04:54:06 +02:00
|
|
|
#include "SPUOpcodes.h"
|
2015-01-18 19:19:10 +01:00
|
|
|
|
2015-08-26 04:54:06 +02:00
|
|
|
class SPUThread;
|
2015-01-18 19:19:10 +01:00
|
|
|
|
2015-08-26 04:54:06 +02:00
|
|
|
using spu_inter_func_t = void(*)(SPUThread& spu, spu_opcode_t opcode);
|
2012-11-15 00:39:56 +01:00
|
|
|
|
2015-08-26 04:54:06 +02:00
|
|
|
namespace spu_interpreter
|
2015-01-18 19:19:10 +01:00
|
|
|
{
|
2015-08-26 04:54:06 +02:00
|
|
|
namespace fast
|
|
|
|
|
{
|
|
|
|
|
extern const spu_opcode_table_t<spu_inter_func_t> g_spu_opcode_table;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
namespace precise
|
|
|
|
|
{
|
|
|
|
|
extern const spu_opcode_table_t<spu_inter_func_t> g_spu_opcode_table;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void default_function(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void set_interrupt_status(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
|
|
|
|
|
void STOP(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void LNOP(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SYNC(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DSYNC(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void MFSPR(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void RDCH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void RCHCNT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SF(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void OR(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BG(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SFH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void NOR(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ABSDB(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTM(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTMA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SHL(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTHM(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTMAH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SHLH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTMI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTMAI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SHLI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTHI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTHMI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTMAHI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SHLHI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void A(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void AND(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CG(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void AH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void NAND(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void AVGB(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void MTSPR(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void WRCH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BIZ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BINZ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BIHZ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BIHNZ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void STOPD(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void STQX(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BISL(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void IRET(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BISLED(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void HBR(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void GB(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void GBH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void GBB(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FSM(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FSMH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FSMB(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void LQX(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTQBYBI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTQMBYBI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SHLQBYBI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CBX(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CHX(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CWX(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CDX(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTQBI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTQMBI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SHLQBI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTQBY(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTQMBY(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SHLQBY(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ORX(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CBD(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CHD(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CWD(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CDD(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTQBII(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTQMBII(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SHLQBII(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTQBYI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ROTQMBYI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SHLQBYI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void NOP(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CGT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void XOR(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CGTH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void EQV(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CGTB(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SUMB(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void HGT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CLZ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void XSWD(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void XSHW(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CNTB(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void XSBH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CLGT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ANDC(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CLGTH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ORC(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CLGTB(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void HLGT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CEQ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void MPYHHU(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ADDX(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SFX(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CGX(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BGX(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void MPYHHA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void MPYHHAU(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void MPY(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void MPYH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void MPYHH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void MPYS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CEQH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void MPYU(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CEQB(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void HEQ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BRZ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void STQA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BRNZ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BRHZ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BRHNZ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void STQR(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BRA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void LQA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BRASL(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BR(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FSMBI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void BRSL(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void LQR(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void IL(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ILHU(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ILH(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void IOHL(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ORI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ORHI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ORBI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SFI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SFHI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ANDI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ANDHI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ANDBI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void AI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void AHI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void STQD(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void LQD(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void XORI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void XORHI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void XORBI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CGTI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CGTHI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CGTBI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void HGTI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CLGTI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CLGTHI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CLGTBI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void HLGTI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void MPYI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void MPYUI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CEQI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CEQHI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CEQBI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void HEQI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void HBRA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void HBRR(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void ILA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SELB(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void SHUFB(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void MPYA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFCGT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFCMGT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFTSV(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFCEQ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFCMEQ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
|
|
|
|
|
namespace fast
|
|
|
|
|
{
|
|
|
|
|
void FREST(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FRSQEST(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FCGT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FM(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FCMGT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFM(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFMA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFMS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFNMS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFNMA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FSCRRD(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FESD(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FRDS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FSCRWR(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FCEQ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FCMEQ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CFLTS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CFLTU(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CSFLT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CUFLT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FNMS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FMA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FMS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
namespace precise
|
|
|
|
|
{
|
|
|
|
|
void FREST(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FRSQEST(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FCGT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FM(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FCMGT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFM(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFMA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFMS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFNMS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void DFNMA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FSCRRD(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FESD(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FRDS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FSCRWR(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FCEQ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FCMEQ(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FI(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CFLTS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CFLTU(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CSFLT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void CUFLT(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FNMS(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FMA(SPUThread& spu, spu_opcode_t op);
|
|
|
|
|
void FMS(SPUThread& spu, spu_opcode_t op);
|
2013-06-30 10:46:29 +02:00
|
|
|
}
|
2015-08-26 04:54:06 +02:00
|
|
|
}
|