mirror of
https://github.com/RPCSX/rpcsx.git
synced 2025-12-06 07:12:14 +01:00
move module initialization into a module manager, still has some issues like stopping not working and debug crashing add #idef 0 to modules that aren't in the windows project don't double initialize and don't de-initialize for now, since many modules don't expect it and it leads to many errors remove duplicate module lists for empty modules and implemented ones, make Module non-copyable but movable add secondary project, no real use for it now add some memleak config to the emucore and add asmjit path to rpcs3 small rebase error fixed to get it to compile again add filters for emucore re-add the module manager and static file WIP commit, linker errors abound some more abstraction layer stuff fix the remaining linker errors, re-enable platform specific mouse, pad and keyboard handlers rebasing fix memset undefined and re() usage of se_t before declaration Add wxGUI define by default for cmake builds fix copy constructors of Datetime header fix copy constructors of other wx interface classes remove static declarations of global variables make wxGLCanvas constructor non-ambiguous even with wx2.8. compat mode, fix wrong std::exception constructor calls remove duplicate definition for FromUTF8 and ToUTF8 temp changes
890 lines
22 KiB
C++
890 lines
22 KiB
C++
#pragma once
|
|
|
|
#include "Emu/Cell/SPUOpcodes.h"
|
|
#include "Emu/Cell/PPCDisAsm.h"
|
|
#include "Emu/Cell/SPUThread.h"
|
|
#include "Emu/Memory/Memory.h"
|
|
|
|
class SPUDisAsm
|
|
: public SPUOpcodes
|
|
, public PPCDisAsm
|
|
{
|
|
public:
|
|
SPUDisAsm(CPUDisAsmMode mode) : PPCDisAsm(mode)
|
|
{
|
|
}
|
|
|
|
~SPUDisAsm()
|
|
{
|
|
}
|
|
|
|
private:
|
|
virtual u32 DisAsmBranchTarget(const s32 imm)
|
|
{
|
|
return branchTarget(dump_pc, imm);
|
|
}
|
|
|
|
private:
|
|
std::string& FixOp(std::string& op)
|
|
{
|
|
op.append(std::max<int>(10 - (int)op.length(), 0),' ');
|
|
return op;
|
|
}
|
|
void DisAsm(const char* op)
|
|
{
|
|
Write(op);
|
|
}
|
|
void DisAsm(std::string op, u32 a1)
|
|
{
|
|
Write(fmt::Format("%s 0x%x", FixOp(op).c_str(), a1));
|
|
}
|
|
void DisAsm(std::string op, const char* a1)
|
|
{
|
|
Write(fmt::Format("%s %s", FixOp(op).c_str(), a1));
|
|
}
|
|
void DisAsm(std::string op, const char* a1, const char* a2)
|
|
{
|
|
Write(fmt::Format("%s %s,%s", FixOp(op).c_str(), a1, a2));
|
|
}
|
|
void DisAsm(std::string op, int a1, const char* a2)
|
|
{
|
|
Write(fmt::Format("%s 0x%x,%s", FixOp(op).c_str(), a1, a2));
|
|
}
|
|
void DisAsm(std::string op, const char* a1, int a2)
|
|
{
|
|
Write(fmt::Format("%s %s,0x%x", FixOp(op).c_str(), a1, a2));
|
|
}
|
|
void DisAsm(std::string op, int a1, int a2)
|
|
{
|
|
Write(fmt::Format("%s 0x%x,0x%x", FixOp(op).c_str(), a1, a2));
|
|
}
|
|
void DisAsm(std::string op, const char* a1, const char* a2, const char* a3)
|
|
{
|
|
Write(fmt::Format("%s %s,%s,%s", FixOp(op).c_str(), a1, a2, a3));
|
|
}
|
|
void DisAsm(std::string op, const char* a1, int a2, const char* a3)
|
|
{
|
|
Write(fmt::Format("%s %s,0x%x(%s)", FixOp(op).c_str(), a1, a2, a3));
|
|
}
|
|
void DisAsm(std::string op, const char* a1, const char* a2, int a3)
|
|
{
|
|
Write(fmt::Format("%s %s,%s,0x%x", FixOp(op).c_str(), a1, a2, a3));
|
|
}
|
|
void DisAsm(std::string op, const char* a1, const char* a2, const char* a3, const char* a4)
|
|
{
|
|
Write(fmt::Format("%s %s,%s,%s,%s", FixOp(op).c_str(), a1, a2, a3, a4));
|
|
}
|
|
//0 - 10
|
|
void STOP(u32 code)
|
|
{
|
|
DisAsm("stop", code);
|
|
}
|
|
void LNOP()
|
|
{
|
|
DisAsm("lnop");
|
|
}
|
|
void SYNC(u32 Cbit)
|
|
{
|
|
DisAsm("sync", Cbit);
|
|
}
|
|
void DSYNC()
|
|
{
|
|
DisAsm("dsync");
|
|
}
|
|
void MFSPR(u32 rt, u32 sa)
|
|
{
|
|
DisAsm("mfspr", spu_reg_name[rt], spu_reg_name[sa]); // Are SPR mapped on the GPR or are there 128 additional registers ? Yes, there are also 128 SPR making 256 registers total
|
|
}
|
|
void RDCH(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("rdch", spu_reg_name[rt], spu_ch_name[ra]);
|
|
}
|
|
void RCHCNT(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("rchcnt", spu_reg_name[rt], spu_ch_name[ra]);
|
|
}
|
|
void SF(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("sf", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void OR(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("or", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void BG(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("bg", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void SFH(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("sfh", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void NOR(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("nor", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ABSDB(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("absdb", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ROT(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("rot", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ROTM(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("rotm", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ROTMA(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("rotma", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void SHL(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("shl", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ROTH(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("roth", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ROTHM(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("rothm", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ROTMAH(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("rotmah", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void SHLH(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("shlh", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ROTI(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("roti", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void ROTMI(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("rotmi", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void ROTMAI(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("rotmai", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void SHLI(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("shli", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void ROTHI(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("rothi", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void ROTHMI(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("rothmi", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void ROTMAHI(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("rotmahi", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void SHLHI(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("shlhi", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void A(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("a", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void AND(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("and", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CG(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("cg", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void AH(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("ah", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void NAND(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("nand", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void AVGB(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("avgb", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void MTSPR(u32 rt, u32 sa)
|
|
{
|
|
DisAsm("mtspr", spu_reg_name[rt], spu_reg_name[sa]);
|
|
}
|
|
void WRCH(u32 ra, u32 rt)
|
|
{
|
|
DisAsm("wrch", spu_ch_name[ra], spu_reg_name[rt]);
|
|
}
|
|
void BIZ(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("biz", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void BINZ(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("binz", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void BIHZ(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("bihz", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void BIHNZ(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("bihnz", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void STOPD(u32 rc, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("bihnz", spu_reg_name[rc], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void STQX(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("stqx", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void BI(u32 ra)
|
|
{
|
|
DisAsm("bi", spu_reg_name[ra]);
|
|
}
|
|
void BISL(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("bisl", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void IRET(u32 ra)
|
|
{
|
|
DisAsm("iret", spu_reg_name[ra]);
|
|
}
|
|
void BISLED(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("bisled", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void HBR(u32 p, u32 ro, u32 ra)
|
|
{
|
|
DisAsm("hbr", DisAsmBranchTarget(ro), spu_reg_name[ra]);
|
|
}
|
|
void GB(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("gb", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void GBH(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("gbh", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void GBB(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("gbb", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void FSM(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("fsm", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void FSMH(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("fsmh", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void FSMB(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("fsmb", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void FREST(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("frest", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void FRSQEST(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("frsqest", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void LQX(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("lqx", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ROTQBYBI(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("rotqbybi", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ROTQMBYBI(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("rotqmbybi", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void SHLQBYBI(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("shlqbybi", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CBX(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("cbx", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CHX(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("chx", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CWX(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("cwx", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CDX(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("cdx", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ROTQBI(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("rotqbi", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ROTQMBI(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("rotqmbi", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void SHLQBI(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("shlqbi", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ROTQBY(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("rotqby", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ROTQMBY(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("rotqmby", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void SHLQBY(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("shlqby", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ORX(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("orx", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void CBD(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("cbd", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void CHD(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("chd", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void CWD(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("cwd", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void CDD(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("cdd", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void ROTQBII(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("rotqbii", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void ROTQMBII(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("rotqmbii", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void SHLQBII(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("shlqbii", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void ROTQBYI(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("rotqbyi", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void ROTQMBYI(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("rotqmbyi", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void SHLQBYI(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("shlqbyi", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void NOP(u32 rt)
|
|
{
|
|
DisAsm("nop", spu_reg_name[rt]);
|
|
}
|
|
void CGT(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("cgt", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void XOR(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("xor", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CGTH(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("cgth", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void EQV(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("eqv", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CGTB(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("cgtb", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void SUMB(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("sumb", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void HGT(u32 rt, s32 ra, s32 rb)
|
|
{
|
|
DisAsm("hgt", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CLZ(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("clz", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void XSWD(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("xswd", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void XSHW(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("xshw", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void CNTB(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("cntb", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void XSBH(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("xsbh", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void CLGT(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("clgt", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ANDC(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("andc", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void FCGT(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("fcgt", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void DFCGT(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("dfcgt", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void FA(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("fa", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void FS(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("fs", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void FM(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("fm", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CLGTH(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("clgth", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ORC(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("orc", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void FCMGT(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("fcmgt", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void DFCMGT(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("dfcmgt", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void DFA(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("dfa", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void DFS(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("dfs", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void DFM(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("dfm", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CLGTB(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("clgtb", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void HLGT(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("hlgt", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void DFMA(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("dfma", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void DFMS(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("dfms", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void DFNMS(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("dfnms", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void DFNMA(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("dfnma", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CEQ(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("ceq", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void MPYHHU(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("mpyhhu", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void ADDX(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("addx", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void SFX(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("sfx", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CGX(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("cgx", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void BGX(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("bgx", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void MPYHHA(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("mpyhha", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void MPYHHAU(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("mpyhhau", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void FSCRRD(u32 rt)
|
|
{
|
|
DisAsm("fscrrd", spu_reg_name[rt]);
|
|
}
|
|
void FESD(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("fesd", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void FRDS(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("frds", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void FSCRWR(u32 rt, u32 ra)
|
|
{
|
|
DisAsm("fscrwr", spu_reg_name[rt], spu_reg_name[ra]);
|
|
}
|
|
void DFTSV(u32 rt, u32 ra, s32 i7)
|
|
{
|
|
DisAsm("dftsv", spu_reg_name[rt], spu_reg_name[ra], i7);
|
|
}
|
|
void FCEQ(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("fceq", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void DFCEQ(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("dfceq", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void MPY(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("mpy", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void MPYH(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("mpyh", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void MPYHH(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("mpyhh", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void MPYS(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("mpys", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CEQH(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("ceqh", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void FCMEQ(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("fcmeq", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void DFCMEQ(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("dfcmeq", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void MPYU(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("mpyu", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void CEQB(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("ceqb", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void FI(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("fi", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
void HEQ(u32 rt, u32 ra, u32 rb)
|
|
{
|
|
DisAsm("heq", spu_reg_name[rt], spu_reg_name[ra], spu_reg_name[rb]);
|
|
}
|
|
|
|
//0 - 9
|
|
void CFLTS(u32 rt, u32 ra, s32 i8)
|
|
{
|
|
DisAsm("cflts", spu_reg_name[rt], spu_reg_name[ra], i8);
|
|
}
|
|
void CFLTU(u32 rt, u32 ra, s32 i8)
|
|
{
|
|
DisAsm("cfltu", spu_reg_name[rt], spu_reg_name[ra], i8);
|
|
}
|
|
void CSFLT(u32 rt, u32 ra, s32 i8)
|
|
{
|
|
DisAsm("csflt", spu_reg_name[rt], spu_reg_name[ra], i8);
|
|
}
|
|
void CUFLT(u32 rt, u32 ra, s32 i8)
|
|
{
|
|
DisAsm("cuflt", spu_reg_name[rt], spu_reg_name[ra], i8);
|
|
}
|
|
|
|
//0 - 8
|
|
void BRZ(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("brz", spu_reg_name[rt], DisAsmBranchTarget(i16));
|
|
}
|
|
void STQA(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("stqa", spu_reg_name[rt], DisAsmBranchTarget(i16));
|
|
}
|
|
void BRNZ(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("brnz", spu_reg_name[rt], DisAsmBranchTarget(i16));
|
|
}
|
|
void BRHZ(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("brhz", spu_reg_name[rt], DisAsmBranchTarget(i16));
|
|
}
|
|
void BRHNZ(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("brhnz", spu_reg_name[rt], DisAsmBranchTarget(i16));
|
|
}
|
|
void STQR(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("stqr", spu_reg_name[rt], DisAsmBranchTarget(i16));
|
|
}
|
|
void BRA(s32 i16)
|
|
{
|
|
DisAsm("bra", DisAsmBranchTarget(i16));
|
|
}
|
|
void LQA(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("lqa", spu_reg_name[rt], DisAsmBranchTarget(i16));
|
|
}
|
|
void BRASL(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("brasl", spu_reg_name[rt], DisAsmBranchTarget(i16));
|
|
}
|
|
void BR(s32 i16)
|
|
{
|
|
DisAsm("br", DisAsmBranchTarget(i16));
|
|
}
|
|
void FSMBI(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("fsmbi", spu_reg_name[rt], i16);
|
|
}
|
|
void BRSL(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("brsl", spu_reg_name[rt], DisAsmBranchTarget(i16));
|
|
}
|
|
void LQR(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("lqr", spu_reg_name[rt], DisAsmBranchTarget(i16));
|
|
}
|
|
void IL(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("il", spu_reg_name[rt], i16);
|
|
}
|
|
void ILHU(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("ilhu", spu_reg_name[rt], i16);
|
|
}
|
|
void ILH(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("ilh", spu_reg_name[rt], i16);
|
|
}
|
|
void IOHL(u32 rt, s32 i16)
|
|
{
|
|
DisAsm("iolh", spu_reg_name[rt], i16);
|
|
}
|
|
|
|
//0 - 7
|
|
void ORI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("ori", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void ORHI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("orhi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void ORBI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("orbi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void SFI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("sfi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void SFHI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("sfhi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void ANDI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("andi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void ANDHI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("andhi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void ANDBI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("andbi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void AI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("ai", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void AHI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("ahi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void STQD(u32 rt, s32 i10, u32 ra)
|
|
{
|
|
DisAsm("stqd", spu_reg_name[rt], i10, spu_reg_name[ra]);
|
|
}
|
|
void LQD(u32 rt, s32 i10, u32 ra)
|
|
{
|
|
DisAsm("lqd", spu_reg_name[rt], i10, spu_reg_name[ra]);
|
|
}
|
|
void XORI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("xori", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void XORHI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("xorhi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void XORBI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("xorbi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void CGTI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("cgti", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void CGTHI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("cgthi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void CGTBI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("cgtbi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void HGTI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("hgti", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void CLGTI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("clgti", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void CLGTHI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("clgthi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void CLGTBI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("clgtbi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void HLGTI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("hlgti", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void MPYI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("mpyi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void MPYUI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("mpyui", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void CEQI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("ceqi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void CEQHI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("ceqhi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void CEQBI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("ceqbi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
void HEQI(u32 rt, u32 ra, s32 i10)
|
|
{
|
|
DisAsm("heqi", spu_reg_name[rt], spu_reg_name[ra], i10);
|
|
}
|
|
|
|
//0 - 6
|
|
void HBRA(s32 ro, s32 i16)
|
|
{
|
|
DisAsm("hbra", DisAsmBranchTarget(ro), DisAsmBranchTarget(i16));
|
|
}
|
|
void HBRR(s32 ro, s32 i16)
|
|
{
|
|
DisAsm("hbrr", DisAsmBranchTarget(ro), DisAsmBranchTarget(i16));
|
|
}
|
|
void ILA(u32 rt, u32 i18)
|
|
{
|
|
DisAsm("ila", spu_reg_name[rt], i18);
|
|
}
|
|
|
|
//0 - 3
|
|
void SELB(u32 rc, u32 ra, u32 rb, u32 rt)
|
|
{
|
|
DisAsm("selb", spu_reg_name[rc], spu_reg_name[ra], spu_reg_name[rb], spu_reg_name[rt]);
|
|
}
|
|
void SHUFB(u32 rc, u32 ra, u32 rb, u32 rt)
|
|
{
|
|
DisAsm("shufb", spu_reg_name[rc], spu_reg_name[ra], spu_reg_name[rb], spu_reg_name[rt]);
|
|
}
|
|
void MPYA(u32 rc, u32 ra, u32 rb, u32 rt)
|
|
{
|
|
DisAsm("mpya", spu_reg_name[rc], spu_reg_name[ra], spu_reg_name[rb], spu_reg_name[rt]);
|
|
}
|
|
void FNMS(u32 rc, u32 ra, u32 rb, u32 rt)
|
|
{
|
|
DisAsm("fnms", spu_reg_name[rc], spu_reg_name[ra], spu_reg_name[rb], spu_reg_name[rt]);
|
|
}
|
|
void FMA(u32 rc, u32 ra, u32 rb, u32 rt)
|
|
{
|
|
DisAsm("fma", spu_reg_name[rc], spu_reg_name[ra], spu_reg_name[rb], spu_reg_name[rt]);
|
|
}
|
|
void FMS(u32 rc, u32 ra, u32 rb, u32 rt)
|
|
{
|
|
DisAsm("fms", spu_reg_name[rc], spu_reg_name[ra], spu_reg_name[rb], spu_reg_name[rt]);
|
|
}
|
|
|
|
void UNK(u32 code, u32 opcode, u32 gcode)
|
|
{
|
|
Write(fmt::Format("Unknown/Illegal opcode! (0x%08x, 0x%x, 0x%x)", code, opcode, gcode));
|
|
}
|
|
};
|