#pragma once
#include "PPUOpcodes.h"

class PPUThread;

union ppu_opcode_t
{
	u32 opcode;

	struct
	{
		u32       : 1; // 31
		u32 shh   : 1; // 30
		u32       : 3; // 27..29
		u32 mbmeh : 1; // 26
		u32 mbmel : 5; // 21..25
		u32 shl   : 5; // 16..20
		u32 vuimm : 5; // 11..15
		u32 vs    : 5; // 6..10
		u32       : 6;
	};

	struct
	{
		u32     : 6;  // 26..31
	    u32 vsh : 4;  // 22..25
		u32 oe  : 1;  // 21
		u32 spr : 10; // 11..20
		u32     : 11;
	};

	struct
	{
		u32    : 6; // 26..31
		u32 vc : 5; // 21..25
		u32 vb : 5; // 16..20
		u32 va : 5; // 11..15
		u32 vd : 5; // 6..10
		u32    : 6;
	};

	struct
	{
		u32 lk : 1; // 31
		u32 aa : 1; // 30
		u32    : 4; // 26..29
		u32    : 5; // 21..25
		u32 rb : 5; // 16..20
		u32 ra : 5; // 11..15
		u32 rd : 5; // 6..10
		u32    : 6;
	};

	struct
	{
		u32 uimm16 : 16; // 16..31
		u32        : 4;  // 12..15
		u32 l11    : 1;  // 11
		u32 rs     : 5;  // 6..10
		u32        : 6;
	};

	struct
	{
		s32 simm16 : 16; // 16..31
		s32 vsimm  : 5;  // 11..15
		s32        : 11;
	};

	struct
	{
		s32 ll : 26; // 6..31
		s32    : 6;
	};

	struct
	{
	    u32      : 5; // 27..31
	    u32 lev  : 7; // 20..26
		u32 i    : 4; // 16..19
		u32      : 2; // 14..15
		u32 crfs : 3; // 11..13
		u32 l10  : 1; // 10
		u32      : 1; // 9
		u32 crfd : 3; // 6..8
		u32      : 6;
	};

	struct
	{
		u32      : 1; // 31
		u32      : 1; // 30
		u32      : 4; // 26..29
		u32      : 5; // 21..25
		u32 crbb : 5; // 16..20
		u32 crba : 5; // 11..15
		u32 crbd : 5; // 6..10
		u32      : 6;
	};

	struct
	{
		u32 rc : 1; // 31
		u32 me : 5; // 26..30
		u32 mb : 5; // 21..25
		u32 sh : 5; // 16..20
		u32 bi : 5; // 11..15
		u32 bo : 5; // 6..10
		u32    : 6;
	};

	struct
	{
		u32     : 6; // 26..31
		u32 frc : 5; // 21..25
		u32 frb : 5; // 16..20
		u32 fra : 5; // 11..15
		u32 frd : 5; // 6..10
		u32     : 6;
	};

	struct
	{
		u32     : 12; // 20..31
		u32 crm : 8;  // 12..19
		u32     : 1;  // 11
		u32 frs : 5;  // 6..10
		u32     : 6;
	};

	struct
	{
		u32     : 17; // 15..31
		u32 flm : 8;  // 7..14
		u32     : 7;
	};
};

namespace ppu_interpreter
{
	void NULL_OP(PPUThread& CPU, ppu_opcode_t op);
	void NOP(PPUThread& CPU, ppu_opcode_t op);

	void TDI(PPUThread& CPU, ppu_opcode_t op);
	void TWI(PPUThread& CPU, ppu_opcode_t op);

	void MFVSCR(PPUThread& CPU, ppu_opcode_t op);
	void MTVSCR(PPUThread& CPU, ppu_opcode_t op);
	void VADDCUW(PPUThread& CPU, ppu_opcode_t op);
	void VADDFP(PPUThread& CPU, ppu_opcode_t op);
	void VADDSBS(PPUThread& CPU, ppu_opcode_t op);
	void VADDSHS(PPUThread& CPU, ppu_opcode_t op);
	void VADDSWS(PPUThread& CPU, ppu_opcode_t op);
	void VADDUBM(PPUThread& CPU, ppu_opcode_t op);
	void VADDUBS(PPUThread& CPU, ppu_opcode_t op);
	void VADDUHM(PPUThread& CPU, ppu_opcode_t op);
	void VADDUHS(PPUThread& CPU, ppu_opcode_t op);
	void VADDUWM(PPUThread& CPU, ppu_opcode_t op);
	void VADDUWS(PPUThread& CPU, ppu_opcode_t op);
	void VAND(PPUThread& CPU, ppu_opcode_t op);
	void VANDC(PPUThread& CPU, ppu_opcode_t op);
	void VAVGSB(PPUThread& CPU, ppu_opcode_t op);
	void VAVGSH(PPUThread& CPU, ppu_opcode_t op);
	void VAVGSW(PPUThread& CPU, ppu_opcode_t op);
	void VAVGUB(PPUThread& CPU, ppu_opcode_t op);
	void VAVGUH(PPUThread& CPU, ppu_opcode_t op);
	void VAVGUW(PPUThread& CPU, ppu_opcode_t op);
	void VCFSX(PPUThread& CPU, ppu_opcode_t op);
	void VCFUX(PPUThread& CPU, ppu_opcode_t op);
	void VCMPBFP(PPUThread& CPU, ppu_opcode_t op);
	void VCMPBFP_(PPUThread& CPU, ppu_opcode_t op);
	void VCMPEQFP(PPUThread& CPU, ppu_opcode_t op);
	void VCMPEQFP_(PPUThread& CPU, ppu_opcode_t op);
	void VCMPEQUB(PPUThread& CPU, ppu_opcode_t op);
	void VCMPEQUB_(PPUThread& CPU, ppu_opcode_t op);
	void VCMPEQUH(PPUThread& CPU, ppu_opcode_t op);
	void VCMPEQUH_(PPUThread& CPU, ppu_opcode_t op);
	void VCMPEQUW(PPUThread& CPU, ppu_opcode_t op);
	void VCMPEQUW_(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGEFP(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGEFP_(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTFP(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTFP_(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTSB(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTSB_(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTSH(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTSH_(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTSW(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTSW_(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTUB(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTUB_(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTUH(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTUH_(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTUW(PPUThread& CPU, ppu_opcode_t op);
	void VCMPGTUW_(PPUThread& CPU, ppu_opcode_t op);
	void VCTSXS(PPUThread& CPU, ppu_opcode_t op);
	void VCTUXS(PPUThread& CPU, ppu_opcode_t op);
	void VEXPTEFP(PPUThread& CPU, ppu_opcode_t op);
	void VLOGEFP(PPUThread& CPU, ppu_opcode_t op);
	void VMADDFP(PPUThread& CPU, ppu_opcode_t op);
	void VMAXFP(PPUThread& CPU, ppu_opcode_t op);
	void VMAXSB(PPUThread& CPU, ppu_opcode_t op);
	void VMAXSH(PPUThread& CPU, ppu_opcode_t op);
	void VMAXSW(PPUThread& CPU, ppu_opcode_t op);
	void VMAXUB(PPUThread& CPU, ppu_opcode_t op);
	void VMAXUH(PPUThread& CPU, ppu_opcode_t op);
	void VMAXUW(PPUThread& CPU, ppu_opcode_t op);
	void VMHADDSHS(PPUThread& CPU, ppu_opcode_t op);
	void VMHRADDSHS(PPUThread& CPU, ppu_opcode_t op);
	void VMINFP(PPUThread& CPU, ppu_opcode_t op);
	void VMINSB(PPUThread& CPU, ppu_opcode_t op);
	void VMINSH(PPUThread& CPU, ppu_opcode_t op);
	void VMINSW(PPUThread& CPU, ppu_opcode_t op);
	void VMINUB(PPUThread& CPU, ppu_opcode_t op);
	void VMINUH(PPUThread& CPU, ppu_opcode_t op);
	void VMINUW(PPUThread& CPU, ppu_opcode_t op);
	void VMLADDUHM(PPUThread& CPU, ppu_opcode_t op);
	void VMRGHB(PPUThread& CPU, ppu_opcode_t op);
	void VMRGHH(PPUThread& CPU, ppu_opcode_t op);
	void VMRGHW(PPUThread& CPU, ppu_opcode_t op);
	void VMRGLB(PPUThread& CPU, ppu_opcode_t op);
	void VMRGLH(PPUThread& CPU, ppu_opcode_t op);
	void VMRGLW(PPUThread& CPU, ppu_opcode_t op);
	void VMSUMMBM(PPUThread& CPU, ppu_opcode_t op);
	void VMSUMSHM(PPUThread& CPU, ppu_opcode_t op);
	void VMSUMSHS(PPUThread& CPU, ppu_opcode_t op);
	void VMSUMUBM(PPUThread& CPU, ppu_opcode_t op);
	void VMSUMUHM(PPUThread& CPU, ppu_opcode_t op);
	void VMSUMUHS(PPUThread& CPU, ppu_opcode_t op);
	void VMULESB(PPUThread& CPU, ppu_opcode_t op);
	void VMULESH(PPUThread& CPU, ppu_opcode_t op);
	void VMULEUB(PPUThread& CPU, ppu_opcode_t op);
	void VMULEUH(PPUThread& CPU, ppu_opcode_t op);
	void VMULOSB(PPUThread& CPU, ppu_opcode_t op);
	void VMULOSH(PPUThread& CPU, ppu_opcode_t op);
	void VMULOUB(PPUThread& CPU, ppu_opcode_t op);
	void VMULOUH(PPUThread& CPU, ppu_opcode_t op);
	void VNMSUBFP(PPUThread& CPU, ppu_opcode_t op);
	void VNOR(PPUThread& CPU, ppu_opcode_t op);
	void VOR(PPUThread& CPU, ppu_opcode_t op);
	void VPERM(PPUThread& CPU, ppu_opcode_t op);
	void VPKPX(PPUThread& CPU, ppu_opcode_t op);
	void VPKSHSS(PPUThread& CPU, ppu_opcode_t op);
	void VPKSHUS(PPUThread& CPU, ppu_opcode_t op);
	void VPKSWSS(PPUThread& CPU, ppu_opcode_t op);
	void VPKSWUS(PPUThread& CPU, ppu_opcode_t op);
	void VPKUHUM(PPUThread& CPU, ppu_opcode_t op);
	void VPKUHUS(PPUThread& CPU, ppu_opcode_t op);
	void VPKUWUM(PPUThread& CPU, ppu_opcode_t op);
	void VPKUWUS(PPUThread& CPU, ppu_opcode_t op);
	void VREFP(PPUThread& CPU, ppu_opcode_t op);
	void VRFIM(PPUThread& CPU, ppu_opcode_t op);
	void VRFIN(PPUThread& CPU, ppu_opcode_t op);
	void VRFIP(PPUThread& CPU, ppu_opcode_t op);
	void VRFIZ(PPUThread& CPU, ppu_opcode_t op);
	void VRLB(PPUThread& CPU, ppu_opcode_t op);
	void VRLH(PPUThread& CPU, ppu_opcode_t op);
	void VRLW(PPUThread& CPU, ppu_opcode_t op);
	void VRSQRTEFP(PPUThread& CPU, ppu_opcode_t op);
	void VSEL(PPUThread& CPU, ppu_opcode_t op);
	void VSL(PPUThread& CPU, ppu_opcode_t op);
	void VSLB(PPUThread& CPU, ppu_opcode_t op);
	void VSLDOI(PPUThread& CPU, ppu_opcode_t op);
	void VSLH(PPUThread& CPU, ppu_opcode_t op);
	void VSLO(PPUThread& CPU, ppu_opcode_t op);
	void VSLW(PPUThread& CPU, ppu_opcode_t op);
	void VSPLTB(PPUThread& CPU, ppu_opcode_t op);
	void VSPLTH(PPUThread& CPU, ppu_opcode_t op);
	void VSPLTISB(PPUThread& CPU, ppu_opcode_t op);
	void VSPLTISH(PPUThread& CPU, ppu_opcode_t op);
	void VSPLTISW(PPUThread& CPU, ppu_opcode_t op);
	void VSPLTW(PPUThread& CPU, ppu_opcode_t op);
	void VSR(PPUThread& CPU, ppu_opcode_t op);
	void VSRAB(PPUThread& CPU, ppu_opcode_t op);
	void VSRAH(PPUThread& CPU, ppu_opcode_t op);
	void VSRAW(PPUThread& CPU, ppu_opcode_t op);
	void VSRB(PPUThread& CPU, ppu_opcode_t op);
	void VSRH(PPUThread& CPU, ppu_opcode_t op);
	void VSRO(PPUThread& CPU, ppu_opcode_t op);
	void VSRW(PPUThread& CPU, ppu_opcode_t op);
	void VSUBCUW(PPUThread& CPU, ppu_opcode_t op);
	void VSUBFP(PPUThread& CPU, ppu_opcode_t op);
	void VSUBSBS(PPUThread& CPU, ppu_opcode_t op);
	void VSUBSHS(PPUThread& CPU, ppu_opcode_t op);
	void VSUBSWS(PPUThread& CPU, ppu_opcode_t op);
	void VSUBUBM(PPUThread& CPU, ppu_opcode_t op);
	void VSUBUBS(PPUThread& CPU, ppu_opcode_t op);
	void VSUBUHM(PPUThread& CPU, ppu_opcode_t op);
	void VSUBUHS(PPUThread& CPU, ppu_opcode_t op);
	void VSUBUWM(PPUThread& CPU, ppu_opcode_t op);
	void VSUBUWS(PPUThread& CPU, ppu_opcode_t op);
	void VSUMSWS(PPUThread& CPU, ppu_opcode_t op);
	void VSUM2SWS(PPUThread& CPU, ppu_opcode_t op);
	void VSUM4SBS(PPUThread& CPU, ppu_opcode_t op);
	void VSUM4SHS(PPUThread& CPU, ppu_opcode_t op);
	void VSUM4UBS(PPUThread& CPU, ppu_opcode_t op);
	void VUPKHPX(PPUThread& CPU, ppu_opcode_t op);
	void VUPKHSB(PPUThread& CPU, ppu_opcode_t op);
	void VUPKHSH(PPUThread& CPU, ppu_opcode_t op);
	void VUPKLPX(PPUThread& CPU, ppu_opcode_t op);
	void VUPKLSB(PPUThread& CPU, ppu_opcode_t op);
	void VUPKLSH(PPUThread& CPU, ppu_opcode_t op);
	void VXOR(PPUThread& CPU, ppu_opcode_t op);
	void MULLI(PPUThread& CPU, ppu_opcode_t op);
	void SUBFIC(PPUThread& CPU, ppu_opcode_t op);
	void CMPLI(PPUThread& CPU, ppu_opcode_t op);
	void CMPI(PPUThread& CPU, ppu_opcode_t op);
	void ADDIC(PPUThread& CPU, ppu_opcode_t op);
	void ADDIC_(PPUThread& CPU, ppu_opcode_t op);
	void ADDI(PPUThread& CPU, ppu_opcode_t op);
	void ADDIS(PPUThread& CPU, ppu_opcode_t op);
	void BC(PPUThread& CPU, ppu_opcode_t op);
	void HACK(PPUThread& CPU, ppu_opcode_t op);
	void SC(PPUThread& CPU, ppu_opcode_t op);
	void B(PPUThread& CPU, ppu_opcode_t op);
	void MCRF(PPUThread& CPU, ppu_opcode_t op);
	void BCLR(PPUThread& CPU, ppu_opcode_t op);
	void CRNOR(PPUThread& CPU, ppu_opcode_t op);
	void CRANDC(PPUThread& CPU, ppu_opcode_t op);
	void ISYNC(PPUThread& CPU, ppu_opcode_t op);
	void CRXOR(PPUThread& CPU, ppu_opcode_t op);
	void CRNAND(PPUThread& CPU, ppu_opcode_t op);
	void CRAND(PPUThread& CPU, ppu_opcode_t op);
	void CREQV(PPUThread& CPU, ppu_opcode_t op);
	void CRORC(PPUThread& CPU, ppu_opcode_t op);
	void CROR(PPUThread& CPU, ppu_opcode_t op);
	void BCCTR(PPUThread& CPU, ppu_opcode_t op);
	void RLWIMI(PPUThread& CPU, ppu_opcode_t op);
	void RLWINM(PPUThread& CPU, ppu_opcode_t op);
	void RLWNM(PPUThread& CPU, ppu_opcode_t op);
	void ORI(PPUThread& CPU, ppu_opcode_t op);
	void ORIS(PPUThread& CPU, ppu_opcode_t op);
	void XORI(PPUThread& CPU, ppu_opcode_t op);
	void XORIS(PPUThread& CPU, ppu_opcode_t op);
	void ANDI_(PPUThread& CPU, ppu_opcode_t op);
	void ANDIS_(PPUThread& CPU, ppu_opcode_t op);
	void RLDICL(PPUThread& CPU, ppu_opcode_t op);
	void RLDICR(PPUThread& CPU, ppu_opcode_t op);
	void RLDIC(PPUThread& CPU, ppu_opcode_t op);
	void RLDIMI(PPUThread& CPU, ppu_opcode_t op);
	void RLDC_LR(PPUThread& CPU, ppu_opcode_t op);
	void CMP(PPUThread& CPU, ppu_opcode_t op);
	void TW(PPUThread& CPU, ppu_opcode_t op);
	void LVSL(PPUThread& CPU, ppu_opcode_t op);
	void LVEBX(PPUThread& CPU, ppu_opcode_t op);
	void SUBFC(PPUThread& CPU, ppu_opcode_t op);
	void MULHDU(PPUThread& CPU, ppu_opcode_t op);
	void ADDC(PPUThread& CPU, ppu_opcode_t op);
	void MULHWU(PPUThread& CPU, ppu_opcode_t op);
	void MFOCRF(PPUThread& CPU, ppu_opcode_t op);
	void LWARX(PPUThread& CPU, ppu_opcode_t op);
	void LDX(PPUThread& CPU, ppu_opcode_t op);
	void LWZX(PPUThread& CPU, ppu_opcode_t op);
	void SLW(PPUThread& CPU, ppu_opcode_t op);
	void CNTLZW(PPUThread& CPU, ppu_opcode_t op);
	void SLD(PPUThread& CPU, ppu_opcode_t op);
	void AND(PPUThread& CPU, ppu_opcode_t op);
	void CMPL(PPUThread& CPU, ppu_opcode_t op);
	void LVSR(PPUThread& CPU, ppu_opcode_t op);
	void LVEHX(PPUThread& CPU, ppu_opcode_t op);
	void SUBF(PPUThread& CPU, ppu_opcode_t op);
	void LDUX(PPUThread& CPU, ppu_opcode_t op);
	void DCBST(PPUThread& CPU, ppu_opcode_t op);
	void LWZUX(PPUThread& CPU, ppu_opcode_t op);
	void CNTLZD(PPUThread& CPU, ppu_opcode_t op);
	void ANDC(PPUThread& CPU, ppu_opcode_t op);
	void TD(PPUThread& CPU, ppu_opcode_t op);
	void LVEWX(PPUThread& CPU, ppu_opcode_t op);
	void MULHD(PPUThread& CPU, ppu_opcode_t op);
	void MULHW(PPUThread& CPU, ppu_opcode_t op);
	void LDARX(PPUThread& CPU, ppu_opcode_t op);
	void DCBF(PPUThread& CPU, ppu_opcode_t op);
	void LBZX(PPUThread& CPU, ppu_opcode_t op);
	void LVX(PPUThread& CPU, ppu_opcode_t op);
	void NEG(PPUThread& CPU, ppu_opcode_t op);
	void LBZUX(PPUThread& CPU, ppu_opcode_t op);
	void NOR(PPUThread& CPU, ppu_opcode_t op);
	void STVEBX(PPUThread& CPU, ppu_opcode_t op);
	void SUBFE(PPUThread& CPU, ppu_opcode_t op);
	void ADDE(PPUThread& CPU, ppu_opcode_t op);
	void MTOCRF(PPUThread& CPU, ppu_opcode_t op);
	void STDX(PPUThread& CPU, ppu_opcode_t op);
	void STWCX_(PPUThread& CPU, ppu_opcode_t op);
	void STWX(PPUThread& CPU, ppu_opcode_t op);
	void STVEHX(PPUThread& CPU, ppu_opcode_t op);
	void STDUX(PPUThread& CPU, ppu_opcode_t op);
	void STWUX(PPUThread& CPU, ppu_opcode_t op);
	void STVEWX(PPUThread& CPU, ppu_opcode_t op);
	void SUBFZE(PPUThread& CPU, ppu_opcode_t op);
	void ADDZE(PPUThread& CPU, ppu_opcode_t op);
	void STDCX_(PPUThread& CPU, ppu_opcode_t op);
	void STBX(PPUThread& CPU, ppu_opcode_t op);
	void STVX(PPUThread& CPU, ppu_opcode_t op);
	void MULLD(PPUThread& CPU, ppu_opcode_t op);
	void SUBFME(PPUThread& CPU, ppu_opcode_t op);
	void ADDME(PPUThread& CPU, ppu_opcode_t op);
	void MULLW(PPUThread& CPU, ppu_opcode_t op);
	void DCBTST(PPUThread& CPU, ppu_opcode_t op);
	void STBUX(PPUThread& CPU, ppu_opcode_t op);
	void ADD(PPUThread& CPU, ppu_opcode_t op);
	void DCBT(PPUThread& CPU, ppu_opcode_t op);
	void LHZX(PPUThread& CPU, ppu_opcode_t op);
	void EQV(PPUThread& CPU, ppu_opcode_t op);
	void ECIWX(PPUThread& CPU, ppu_opcode_t op);
	void LHZUX(PPUThread& CPU, ppu_opcode_t op);
	void XOR(PPUThread& CPU, ppu_opcode_t op);
	void MFSPR(PPUThread& CPU, ppu_opcode_t op);
	void LWAX(PPUThread& CPU, ppu_opcode_t op);
	void DST(PPUThread& CPU, ppu_opcode_t op);
	void LHAX(PPUThread& CPU, ppu_opcode_t op);
	void LVXL(PPUThread& CPU, ppu_opcode_t op);
	void MFTB(PPUThread& CPU, ppu_opcode_t op);
	void LWAUX(PPUThread& CPU, ppu_opcode_t op);
	void DSTST(PPUThread& CPU, ppu_opcode_t op);
	void LHAUX(PPUThread& CPU, ppu_opcode_t op);
	void STHX(PPUThread& CPU, ppu_opcode_t op);
	void ORC(PPUThread& CPU, ppu_opcode_t op);
	void ECOWX(PPUThread& CPU, ppu_opcode_t op);
	void STHUX(PPUThread& CPU, ppu_opcode_t op);
	void OR(PPUThread& CPU, ppu_opcode_t op);
	void DIVDU(PPUThread& CPU, ppu_opcode_t op);
	void DIVWU(PPUThread& CPU, ppu_opcode_t op);
	void MTSPR(PPUThread& CPU, ppu_opcode_t op);
	void DCBI(PPUThread& CPU, ppu_opcode_t op);
	void NAND(PPUThread& CPU, ppu_opcode_t op);
	void STVXL(PPUThread& CPU, ppu_opcode_t op);
	void DIVD(PPUThread& CPU, ppu_opcode_t op);
	void DIVW(PPUThread& CPU, ppu_opcode_t op);
	void LVLX(PPUThread& CPU, ppu_opcode_t op);
	void LDBRX(PPUThread& CPU, ppu_opcode_t op);
	void LSWX(PPUThread& CPU, ppu_opcode_t op);
	void LWBRX(PPUThread& CPU, ppu_opcode_t op);
	void LFSX(PPUThread& CPU, ppu_opcode_t op);
	void SRW(PPUThread& CPU, ppu_opcode_t op);
	void SRD(PPUThread& CPU, ppu_opcode_t op);
	void LVRX(PPUThread& CPU, ppu_opcode_t op);
	void LSWI(PPUThread& CPU, ppu_opcode_t op);
	void LFSUX(PPUThread& CPU, ppu_opcode_t op);
	void SYNC(PPUThread& CPU, ppu_opcode_t op);
	void LFDX(PPUThread& CPU, ppu_opcode_t op);
	void LFDUX(PPUThread& CPU, ppu_opcode_t op);
	void STVLX(PPUThread& CPU, ppu_opcode_t op);
	void STDBRX(PPUThread& CPU, ppu_opcode_t op);
	void STSWX(PPUThread& CPU, ppu_opcode_t op);
	void STWBRX(PPUThread& CPU, ppu_opcode_t op);
	void STFSX(PPUThread& CPU, ppu_opcode_t op);
	void STVRX(PPUThread& CPU, ppu_opcode_t op);
	void STFSUX(PPUThread& CPU, ppu_opcode_t op);
	void STSWI(PPUThread& CPU, ppu_opcode_t op);
	void STFDX(PPUThread& CPU, ppu_opcode_t op);
	void STFDUX(PPUThread& CPU, ppu_opcode_t op);
	void LVLXL(PPUThread& CPU, ppu_opcode_t op);
	void LHBRX(PPUThread& CPU, ppu_opcode_t op);
	void SRAW(PPUThread& CPU, ppu_opcode_t op);
	void SRAD(PPUThread& CPU, ppu_opcode_t op);
	void LVRXL(PPUThread& CPU, ppu_opcode_t op);
	void DSS(PPUThread& CPU, ppu_opcode_t op);
	void SRAWI(PPUThread& CPU, ppu_opcode_t op);
	void SRADI(PPUThread& CPU, ppu_opcode_t op);
	void EIEIO(PPUThread& CPU, ppu_opcode_t op);
	void STVLXL(PPUThread& CPU, ppu_opcode_t op);
	void STHBRX(PPUThread& CPU, ppu_opcode_t op);
	void EXTSH(PPUThread& CPU, ppu_opcode_t op);
	void STVRXL(PPUThread& CPU, ppu_opcode_t op);
	void EXTSB(PPUThread& CPU, ppu_opcode_t op);
	void STFIWX(PPUThread& CPU, ppu_opcode_t op);
	void EXTSW(PPUThread& CPU, ppu_opcode_t op);
	void ICBI(PPUThread& CPU, ppu_opcode_t op);
	void DCBZ(PPUThread& CPU, ppu_opcode_t op);
	void LWZ(PPUThread& CPU, ppu_opcode_t op);
	void LWZU(PPUThread& CPU, ppu_opcode_t op);
	void LBZ(PPUThread& CPU, ppu_opcode_t op);
	void LBZU(PPUThread& CPU, ppu_opcode_t op);
	void STW(PPUThread& CPU, ppu_opcode_t op);
	void STWU(PPUThread& CPU, ppu_opcode_t op);
	void STB(PPUThread& CPU, ppu_opcode_t op);
	void STBU(PPUThread& CPU, ppu_opcode_t op);
	void LHZ(PPUThread& CPU, ppu_opcode_t op);
	void LHZU(PPUThread& CPU, ppu_opcode_t op);
	void LHA(PPUThread& CPU, ppu_opcode_t op);
	void LHAU(PPUThread& CPU, ppu_opcode_t op);
	void STH(PPUThread& CPU, ppu_opcode_t op);
	void STHU(PPUThread& CPU, ppu_opcode_t op);
	void LMW(PPUThread& CPU, ppu_opcode_t op);
	void STMW(PPUThread& CPU, ppu_opcode_t op);
	void LFS(PPUThread& CPU, ppu_opcode_t op);
	void LFSU(PPUThread& CPU, ppu_opcode_t op);
	void LFD(PPUThread& CPU, ppu_opcode_t op);
	void LFDU(PPUThread& CPU, ppu_opcode_t op);
	void STFS(PPUThread& CPU, ppu_opcode_t op);
	void STFSU(PPUThread& CPU, ppu_opcode_t op);
	void STFD(PPUThread& CPU, ppu_opcode_t op);
	void STFDU(PPUThread& CPU, ppu_opcode_t op);
	void LD(PPUThread& CPU, ppu_opcode_t op);
	void LDU(PPUThread& CPU, ppu_opcode_t op);
	void LWA(PPUThread& CPU, ppu_opcode_t op);
	void FDIVS(PPUThread& CPU, ppu_opcode_t op);
	void FSUBS(PPUThread& CPU, ppu_opcode_t op);
	void FADDS(PPUThread& CPU, ppu_opcode_t op);
	void FSQRTS(PPUThread& CPU, ppu_opcode_t op);
	void FRES(PPUThread& CPU, ppu_opcode_t op);
	void FMULS(PPUThread& CPU, ppu_opcode_t op);
	void FMADDS(PPUThread& CPU, ppu_opcode_t op);
	void FMSUBS(PPUThread& CPU, ppu_opcode_t op);
	void FNMSUBS(PPUThread& CPU, ppu_opcode_t op);
	void FNMADDS(PPUThread& CPU, ppu_opcode_t op);
	void STD(PPUThread& CPU, ppu_opcode_t op);
	void STDU(PPUThread& CPU, ppu_opcode_t op);
	void MTFSB1(PPUThread& CPU, ppu_opcode_t op);
	void MCRFS(PPUThread& CPU, ppu_opcode_t op);
	void MTFSB0(PPUThread& CPU, ppu_opcode_t op);
	void MTFSFI(PPUThread& CPU, ppu_opcode_t op);
	void MFFS(PPUThread& CPU, ppu_opcode_t op);
	void MTFSF(PPUThread& CPU, ppu_opcode_t op);

	void FCMPU(PPUThread& CPU, ppu_opcode_t op);
	void FRSP(PPUThread& CPU, ppu_opcode_t op);
	void FCTIW(PPUThread& CPU, ppu_opcode_t op);
	void FCTIWZ(PPUThread& CPU, ppu_opcode_t op);
	void FDIV(PPUThread& CPU, ppu_opcode_t op);
	void FSUB(PPUThread& CPU, ppu_opcode_t op);
	void FADD(PPUThread& CPU, ppu_opcode_t op);
	void FSQRT(PPUThread& CPU, ppu_opcode_t op);
	void FSEL(PPUThread& CPU, ppu_opcode_t op);
	void FMUL(PPUThread& CPU, ppu_opcode_t op);
	void FRSQRTE(PPUThread& CPU, ppu_opcode_t op);
	void FMSUB(PPUThread& CPU, ppu_opcode_t op);
	void FMADD(PPUThread& CPU, ppu_opcode_t op);
	void FNMSUB(PPUThread& CPU, ppu_opcode_t op);
	void FNMADD(PPUThread& CPU, ppu_opcode_t op);
	void FCMPO(PPUThread& CPU, ppu_opcode_t op);
	void FNEG(PPUThread& CPU, ppu_opcode_t op);
	void FMR(PPUThread& CPU, ppu_opcode_t op);
	void FNABS(PPUThread& CPU, ppu_opcode_t op);
	void FABS(PPUThread& CPU, ppu_opcode_t op);
	void FCTID(PPUThread& CPU, ppu_opcode_t op);
	void FCTIDZ(PPUThread& CPU, ppu_opcode_t op);
	void FCFID(PPUThread& CPU, ppu_opcode_t op);

	void UNK(PPUThread& CPU, ppu_opcode_t op);
}

class PPUInterpreter2 : public PPUOpcodes
{
public:
	virtual ~PPUInterpreter2() {}

	ppu_inter_func_t func;

	virtual void NULL_OP() { func = ppu_interpreter::NULL_OP; }
	virtual void NOP() { func = ppu_interpreter::NOP; }

	virtual void TDI(u32 to, u32 ra, s32 simm16) { func = ppu_interpreter::TDI; }
	virtual void TWI(u32 to, u32 ra, s32 simm16) { func = ppu_interpreter::TWI; }

	virtual void MFVSCR(u32 vd) { func = ppu_interpreter::MFVSCR; }
	virtual void MTVSCR(u32 vb) { func = ppu_interpreter::MTVSCR; }
	virtual void VADDCUW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VADDCUW; }
	virtual void VADDFP(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VADDFP; }
	virtual void VADDSBS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VADDSBS; }
	virtual void VADDSHS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VADDSHS; }
	virtual void VADDSWS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VADDSWS; }
	virtual void VADDUBM(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VADDUBM; }
	virtual void VADDUBS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VADDUBS; }
	virtual void VADDUHM(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VADDUHM; }
	virtual void VADDUHS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VADDUHS; }
	virtual void VADDUWM(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VADDUWM; }
	virtual void VADDUWS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VADDUWS; }
	virtual void VAND(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VAND; }
	virtual void VANDC(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VANDC; }
	virtual void VAVGSB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VAVGSB; }
	virtual void VAVGSH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VAVGSH; }
	virtual void VAVGSW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VAVGSW; }
	virtual void VAVGUB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VAVGUB; }
	virtual void VAVGUH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VAVGUH; }
	virtual void VAVGUW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VAVGUW; }
	virtual void VCFSX(u32 vd, u32 uimm5, u32 vb) { func = ppu_interpreter::VCFSX; }
	virtual void VCFUX(u32 vd, u32 uimm5, u32 vb) { func = ppu_interpreter::VCFUX; }
	virtual void VCMPBFP(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPBFP; }
	virtual void VCMPBFP_(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPBFP_; }
	virtual void VCMPEQFP(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPEQFP; }
	virtual void VCMPEQFP_(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPEQFP_; }
	virtual void VCMPEQUB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPEQUB; }
	virtual void VCMPEQUB_(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPEQUB_; }
	virtual void VCMPEQUH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPEQUH; }
	virtual void VCMPEQUH_(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPEQUH_; }
	virtual void VCMPEQUW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPEQUW; }
	virtual void VCMPEQUW_(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPEQUW_; }
	virtual void VCMPGEFP(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGEFP; }
	virtual void VCMPGEFP_(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGEFP_; }
	virtual void VCMPGTFP(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTFP; }
	virtual void VCMPGTFP_(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTFP_; }
	virtual void VCMPGTSB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTSB; }
	virtual void VCMPGTSB_(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTSB_; }
	virtual void VCMPGTSH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTSH; }
	virtual void VCMPGTSH_(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTSH_; }
	virtual void VCMPGTSW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTSW; }
	virtual void VCMPGTSW_(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTSW_; }
	virtual void VCMPGTUB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTUB; }
	virtual void VCMPGTUB_(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTUB_; }
	virtual void VCMPGTUH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTUH; }
	virtual void VCMPGTUH_(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTUH_; }
	virtual void VCMPGTUW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTUW; }
	virtual void VCMPGTUW_(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VCMPGTUW_; }
	virtual void VCTSXS(u32 vd, u32 uimm5, u32 vb) { func = ppu_interpreter::VCTSXS; }
	virtual void VCTUXS(u32 vd, u32 uimm5, u32 vb) { func = ppu_interpreter::VCTUXS; }
	virtual void VEXPTEFP(u32 vd, u32 vb) { func = ppu_interpreter::VEXPTEFP; }
	virtual void VLOGEFP(u32 vd, u32 vb) { func = ppu_interpreter::VLOGEFP; }
	virtual void VMADDFP(u32 vd, u32 va, u32 vc, u32 vb) { func = ppu_interpreter::VMADDFP; }
	virtual void VMAXFP(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMAXFP; }
	virtual void VMAXSB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMAXSB; }
	virtual void VMAXSH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMAXSH; }
	virtual void VMAXSW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMAXSW; }
	virtual void VMAXUB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMAXUB; }
	virtual void VMAXUH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMAXUH; }
	virtual void VMAXUW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMAXUW; }
	virtual void VMHADDSHS(u32 vd, u32 va, u32 vb, u32 vc) { func = ppu_interpreter::VMHADDSHS; }
	virtual void VMHRADDSHS(u32 vd, u32 va, u32 vb, u32 vc) { func = ppu_interpreter::VMHRADDSHS; }
	virtual void VMINFP(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMINFP; }
	virtual void VMINSB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMINSB; }
	virtual void VMINSH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMINSH; }
	virtual void VMINSW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMINSW; }
	virtual void VMINUB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMINUB; }
	virtual void VMINUH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMINUH; }
	virtual void VMINUW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMINUW; }
	virtual void VMLADDUHM(u32 vd, u32 va, u32 vb, u32 vc) { func = ppu_interpreter::VMLADDUHM; }
	virtual void VMRGHB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMRGHB; }
	virtual void VMRGHH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMRGHH; }
	virtual void VMRGHW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMRGHW; }
	virtual void VMRGLB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMRGLB; }
	virtual void VMRGLH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMRGLH; }
	virtual void VMRGLW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMRGLW; }
	virtual void VMSUMMBM(u32 vd, u32 va, u32 vb, u32 vc) { func = ppu_interpreter::VMSUMMBM; }
	virtual void VMSUMSHM(u32 vd, u32 va, u32 vb, u32 vc) { func = ppu_interpreter::VMSUMSHM; }
	virtual void VMSUMSHS(u32 vd, u32 va, u32 vb, u32 vc) { func = ppu_interpreter::VMSUMSHS; }
	virtual void VMSUMUBM(u32 vd, u32 va, u32 vb, u32 vc) { func = ppu_interpreter::VMSUMUBM; }
	virtual void VMSUMUHM(u32 vd, u32 va, u32 vb, u32 vc) { func = ppu_interpreter::VMSUMUHM; }
	virtual void VMSUMUHS(u32 vd, u32 va, u32 vb, u32 vc) { func = ppu_interpreter::VMSUMUHS; }
	virtual void VMULESB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMULESB; }
	virtual void VMULESH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMULESH; }
	virtual void VMULEUB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMULEUB; }
	virtual void VMULEUH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMULEUH; }
	virtual void VMULOSB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMULOSB; }
	virtual void VMULOSH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMULOSH; }
	virtual void VMULOUB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMULOUB; }
	virtual void VMULOUH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VMULOUH; }
	virtual void VNMSUBFP(u32 vd, u32 va, u32 vc, u32 vb) { func = ppu_interpreter::VNMSUBFP; }
	virtual void VNOR(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VNOR; }
	virtual void VOR(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VOR; }
	virtual void VPERM(u32 vd, u32 va, u32 vb, u32 vc) { func = ppu_interpreter::VPERM; }
	virtual void VPKPX(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VPKPX; }
	virtual void VPKSHSS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VPKSHSS; }
	virtual void VPKSHUS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VPKSHUS; }
	virtual void VPKSWSS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VPKSWSS; }
	virtual void VPKSWUS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VPKSWUS; }
	virtual void VPKUHUM(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VPKUHUM; }
	virtual void VPKUHUS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VPKUHUS; }
	virtual void VPKUWUM(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VPKUWUM; }
	virtual void VPKUWUS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VPKUWUS; }
	virtual void VREFP(u32 vd, u32 vb) { func = ppu_interpreter::VREFP; }
	virtual void VRFIM(u32 vd, u32 vb) { func = ppu_interpreter::VRFIM; }
	virtual void VRFIN(u32 vd, u32 vb) { func = ppu_interpreter::VRFIN; }
	virtual void VRFIP(u32 vd, u32 vb) { func = ppu_interpreter::VRFIP; }
	virtual void VRFIZ(u32 vd, u32 vb) { func = ppu_interpreter::VRFIZ; }
	virtual void VRLB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VRLB; }
	virtual void VRLH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VRLH; }
	virtual void VRLW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VRLW; }
	virtual void VRSQRTEFP(u32 vd, u32 vb) { func = ppu_interpreter::VRSQRTEFP; }
	virtual void VSEL(u32 vd, u32 va, u32 vb, u32 vc) { func = ppu_interpreter::VSEL; }
	virtual void VSL(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSL; }
	virtual void VSLB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSLB; }
	virtual void VSLDOI(u32 vd, u32 va, u32 vb, u32 sh) { func = ppu_interpreter::VSLDOI; }
	virtual void VSLH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSLH; }
	virtual void VSLO(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSLO; }
	virtual void VSLW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSLW; }
	virtual void VSPLTB(u32 vd, u32 uimm5, u32 vb) { func = ppu_interpreter::VSPLTB; }
	virtual void VSPLTH(u32 vd, u32 uimm5, u32 vb) { func = ppu_interpreter::VSPLTH; }
	virtual void VSPLTISB(u32 vd, s32 simm5) { func = ppu_interpreter::VSPLTISB; }
	virtual void VSPLTISH(u32 vd, s32 simm5) { func = ppu_interpreter::VSPLTISH; }
	virtual void VSPLTISW(u32 vd, s32 simm5) { func = ppu_interpreter::VSPLTISW; }
	virtual void VSPLTW(u32 vd, u32 uimm5, u32 vb) { func = ppu_interpreter::VSPLTW; }
	virtual void VSR(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSR; }
	virtual void VSRAB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSRAB; }
	virtual void VSRAH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSRAH; }
	virtual void VSRAW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSRAW; }
	virtual void VSRB(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSRB; }
	virtual void VSRH(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSRH; }
	virtual void VSRO(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSRO; }
	virtual void VSRW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSRW; }
	virtual void VSUBCUW(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUBCUW; }
	virtual void VSUBFP(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUBFP; }
	virtual void VSUBSBS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUBSBS; }
	virtual void VSUBSHS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUBSHS; }
	virtual void VSUBSWS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUBSWS; }
	virtual void VSUBUBM(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUBUBM; }
	virtual void VSUBUBS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUBUBS; }
	virtual void VSUBUHM(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUBUHM; }
	virtual void VSUBUHS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUBUHS; }
	virtual void VSUBUWM(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUBUWM; }
	virtual void VSUBUWS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUBUWS; }
	virtual void VSUMSWS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUMSWS; }
	virtual void VSUM2SWS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUM2SWS; }
	virtual void VSUM4SBS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUM4SBS; }
	virtual void VSUM4SHS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUM4SHS; }
	virtual void VSUM4UBS(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VSUM4UBS; }
	virtual void VUPKHPX(u32 vd, u32 vb) { func = ppu_interpreter::VUPKHPX; }
	virtual void VUPKHSB(u32 vd, u32 vb) { func = ppu_interpreter::VUPKHSB; }
	virtual void VUPKHSH(u32 vd, u32 vb) { func = ppu_interpreter::VUPKHSH; }
	virtual void VUPKLPX(u32 vd, u32 vb) { func = ppu_interpreter::VUPKLPX; }
	virtual void VUPKLSB(u32 vd, u32 vb) { func = ppu_interpreter::VUPKLSB; }
	virtual void VUPKLSH(u32 vd, u32 vb) { func = ppu_interpreter::VUPKLSH; }
	virtual void VXOR(u32 vd, u32 va, u32 vb) { func = ppu_interpreter::VXOR; }
	virtual void MULLI(u32 rd, u32 ra, s32 simm16) { func = ppu_interpreter::MULLI; }
	virtual void SUBFIC(u32 rd, u32 ra, s32 simm16) { func = ppu_interpreter::SUBFIC; }
	virtual void CMPLI(u32 bf, u32 l, u32 ra, u32 uimm16) { func = ppu_interpreter::CMPLI; }
	virtual void CMPI(u32 bf, u32 l, u32 ra, s32 simm16) { func = ppu_interpreter::CMPI; }
	virtual void ADDIC(u32 rd, u32 ra, s32 simm16) { func = ppu_interpreter::ADDIC; }
	virtual void ADDIC_(u32 rd, u32 ra, s32 simm16) { func = ppu_interpreter::ADDIC_; }
	virtual void ADDI(u32 rd, u32 ra, s32 simm16) { func = ppu_interpreter::ADDI; }
	virtual void ADDIS(u32 rd, u32 ra, s32 simm16) { func = ppu_interpreter::ADDIS; }
	virtual void BC(u32 bo, u32 bi, s32 bd, u32 aa, u32 lk) { func = ppu_interpreter::BC; }
	virtual void HACK(u32 index) { func = ppu_interpreter::HACK; }
	virtual void SC(u32 lev) { func = ppu_interpreter::SC; }
	virtual void B(s32 ll, u32 aa, u32 lk) { func = ppu_interpreter::B; }
	virtual void MCRF(u32 crfd, u32 crfs) { func = ppu_interpreter::MCRF; }
	virtual void BCLR(u32 bo, u32 bi, u32 bh, u32 lk) { func = ppu_interpreter::BCLR; }
	virtual void CRNOR(u32 bt, u32 ba, u32 bb) { func = ppu_interpreter::CRNOR; }
	virtual void CRANDC(u32 bt, u32 ba, u32 bb) { func = ppu_interpreter::CRANDC; }
	virtual void ISYNC() { func = ppu_interpreter::ISYNC; }
	virtual void CRXOR(u32 bt, u32 ba, u32 bb) { func = ppu_interpreter::CRXOR; }
	virtual void CRNAND(u32 bt, u32 ba, u32 bb) { func = ppu_interpreter::CRNAND; }
	virtual void CRAND(u32 bt, u32 ba, u32 bb) { func = ppu_interpreter::CRAND; }
	virtual void CREQV(u32 bt, u32 ba, u32 bb) { func = ppu_interpreter::CREQV; }
	virtual void CRORC(u32 bt, u32 ba, u32 bb) { func = ppu_interpreter::CRORC; }
	virtual void CROR(u32 bt, u32 ba, u32 bb) { func = ppu_interpreter::CROR; }
	virtual void BCCTR(u32 bo, u32 bi, u32 bh, u32 lk) { func = ppu_interpreter::BCCTR; }
	virtual void RLWIMI(u32 ra, u32 rs, u32 sh, u32 mb, u32 me, u32 rc) { func = ppu_interpreter::RLWIMI; }
	virtual void RLWINM(u32 ra, u32 rs, u32 sh, u32 mb, u32 me, u32 rc) { func = ppu_interpreter::RLWINM; }
	virtual void RLWNM(u32 ra, u32 rs, u32 rb, u32 MB, u32 ME, u32 rc) { func = ppu_interpreter::RLWNM; }
	virtual void ORI(u32 rs, u32 ra, u32 uimm16) { func = ppu_interpreter::ORI; }
	virtual void ORIS(u32 rs, u32 ra, u32 uimm16) { func = ppu_interpreter::ORIS; }
	virtual void XORI(u32 ra, u32 rs, u32 uimm16) { func = ppu_interpreter::XORI; }
	virtual void XORIS(u32 ra, u32 rs, u32 uimm16) { func = ppu_interpreter::XORIS; }
	virtual void ANDI_(u32 ra, u32 rs, u32 uimm16) { func = ppu_interpreter::ANDI_; }
	virtual void ANDIS_(u32 ra, u32 rs, u32 uimm16) { func = ppu_interpreter::ANDIS_; }
	virtual void RLDICL(u32 ra, u32 rs, u32 sh, u32 mb, u32 rc) { func = ppu_interpreter::RLDICL; }
	virtual void RLDICR(u32 ra, u32 rs, u32 sh, u32 me, u32 rc) { func = ppu_interpreter::RLDICR; }
	virtual void RLDIC(u32 ra, u32 rs, u32 sh, u32 mb, u32 rc) { func = ppu_interpreter::RLDIC; }
	virtual void RLDIMI(u32 ra, u32 rs, u32 sh, u32 mb, u32 rc) { func = ppu_interpreter::RLDIMI; }
	virtual void RLDC_LR(u32 ra, u32 rs, u32 rb, u32 m_eb, u32 is_r, u32 rc) { func = ppu_interpreter::RLDC_LR; }
	virtual void CMP(u32 crfd, u32 l, u32 ra, u32 rb) { func = ppu_interpreter::CMP; }
	virtual void TW(u32 to, u32 ra, u32 rb) { func = ppu_interpreter::TW; }
	virtual void LVSL(u32 vd, u32 ra, u32 rb) { func = ppu_interpreter::LVSL; }
	virtual void LVEBX(u32 vd, u32 ra, u32 rb) { func = ppu_interpreter::LVEBX; }
	virtual void SUBFC(u32 rd, u32 ra, u32 rb, u32 oe, u32 rc) { func = ppu_interpreter::SUBFC; }
	virtual void MULHDU(u32 rd, u32 ra, u32 rb, u32 rc) { func = ppu_interpreter::MULHDU; }
	virtual void ADDC(u32 rd, u32 ra, u32 rb, u32 oe, u32 rc) { func = ppu_interpreter::ADDC; }
	virtual void MULHWU(u32 rd, u32 ra, u32 rb, u32 rc) { func = ppu_interpreter::MULHWU; }
	virtual void MFOCRF(u32 a, u32 rd, u32 crm) { func = ppu_interpreter::MFOCRF; }
	virtual void LWARX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LWARX; }
	virtual void LDX(u32 ra, u32 rs, u32 rb) { func = ppu_interpreter::LDX; }
	virtual void LWZX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LWZX; }
	virtual void SLW(u32 ra, u32 rs, u32 rb, u32 rc) { func = ppu_interpreter::SLW; }
	virtual void CNTLZW(u32 ra, u32 rs, u32 rc) { func = ppu_interpreter::CNTLZW; }
	virtual void SLD(u32 ra, u32 rs, u32 rb, u32 rc) { func = ppu_interpreter::SLD; }
	virtual void AND(u32 ra, u32 rs, u32 rb, u32 rc) { func = ppu_interpreter::AND; }
	virtual void CMPL(u32 bf, u32 l, u32 ra, u32 rb) { func = ppu_interpreter::CMPL; }
	virtual void LVSR(u32 vd, u32 ra, u32 rb) { func = ppu_interpreter::LVSR; }
	virtual void LVEHX(u32 vd, u32 ra, u32 rb) { func = ppu_interpreter::LVEHX; }
	virtual void SUBF(u32 rd, u32 ra, u32 rb, u32 oe, u32 rc) { func = ppu_interpreter::SUBF; }
	virtual void LDUX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LDUX; }
	virtual void DCBST(u32 ra, u32 rb) { func = ppu_interpreter::DCBST; }
	virtual void LWZUX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LWZUX; }
	virtual void CNTLZD(u32 ra, u32 rs, u32 rc) { func = ppu_interpreter::CNTLZD; }
	virtual void ANDC(u32 ra, u32 rs, u32 rb, u32 rc) { func = ppu_interpreter::ANDC; }
	virtual void TD(u32 to, u32 ra, u32 rb) { func = ppu_interpreter::TD; }
	virtual void LVEWX(u32 vd, u32 ra, u32 rb) { func = ppu_interpreter::LVEWX; }
	virtual void MULHD(u32 rd, u32 ra, u32 rb, u32 rc) { func = ppu_interpreter::MULHD; }
	virtual void MULHW(u32 rd, u32 ra, u32 rb, u32 rc) { func = ppu_interpreter::MULHW; }
	virtual void LDARX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LDARX; }
	virtual void DCBF(u32 ra, u32 rb) { func = ppu_interpreter::DCBF; }
	virtual void LBZX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LBZX; }
	virtual void LVX(u32 vd, u32 ra, u32 rb) { func = ppu_interpreter::LVX; }
	virtual void NEG(u32 rd, u32 ra, u32 oe, u32 rc) { func = ppu_interpreter::NEG; }
	virtual void LBZUX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LBZUX; }
	virtual void NOR(u32 ra, u32 rs, u32 rb, u32 rc) { func = ppu_interpreter::NOR; }
	virtual void STVEBX(u32 vs, u32 ra, u32 rb) { func = ppu_interpreter::STVEBX; }
	virtual void SUBFE(u32 rd, u32 ra, u32 rb, u32 oe, u32 rc) { func = ppu_interpreter::SUBFE; }
	virtual void ADDE(u32 rd, u32 ra, u32 rb, u32 oe, u32 rc) { func = ppu_interpreter::ADDE; }
	virtual void MTOCRF(u32 l, u32 crm, u32 rs) { func = ppu_interpreter::MTOCRF; }
	virtual void STDX(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STDX; }
	virtual void STWCX_(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STWCX_; }
	virtual void STWX(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STWX; }
	virtual void STVEHX(u32 vs, u32 ra, u32 rb) { func = ppu_interpreter::STVEHX; }
	virtual void STDUX(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STDUX; }
	virtual void STWUX(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STWUX; }
	virtual void STVEWX(u32 vs, u32 ra, u32 rb) { func = ppu_interpreter::STVEWX; }
	virtual void SUBFZE(u32 rd, u32 ra, u32 oe, u32 rc) { func = ppu_interpreter::SUBFZE; }
	virtual void ADDZE(u32 rd, u32 ra, u32 oe, u32 rc) { func = ppu_interpreter::ADDZE; }
	virtual void STDCX_(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STDCX_; }
	virtual void STBX(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STBX; }
	virtual void STVX(u32 vs, u32 ra, u32 rb) { func = ppu_interpreter::STVX; }
	virtual void MULLD(u32 rd, u32 ra, u32 rb, u32 oe, u32 rc) { func = ppu_interpreter::MULLD; }
	virtual void SUBFME(u32 rd, u32 ra, u32 oe, u32 rc) { func = ppu_interpreter::SUBFME; }
	virtual void ADDME(u32 rd, u32 ra, u32 oe, u32 rc) { func = ppu_interpreter::ADDME; }
	virtual void MULLW(u32 rd, u32 ra, u32 rb, u32 oe, u32 rc) { func = ppu_interpreter::MULLW; }
	virtual void DCBTST(u32 ra, u32 rb, u32 th) { func = ppu_interpreter::DCBTST; }
	virtual void STBUX(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STBUX; }
	virtual void ADD(u32 rd, u32 ra, u32 rb, u32 oe, u32 rc) { func = ppu_interpreter::ADD; }
	virtual void DCBT(u32 ra, u32 rb, u32 th) { func = ppu_interpreter::DCBT; }
	virtual void LHZX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LHZX; }
	virtual void EQV(u32 ra, u32 rs, u32 rb, u32 rc) { func = ppu_interpreter::EQV; }
	virtual void ECIWX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::ECIWX; }
	virtual void LHZUX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LHZUX; }
	virtual void XOR(u32 rs, u32 ra, u32 rb, u32 rc) { func = ppu_interpreter::XOR; }
	virtual void MFSPR(u32 rd, u32 spr) { func = ppu_interpreter::MFSPR; }
	virtual void LWAX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LWAX; }
	virtual void DST(u32 ra, u32 rb, u32 strm, u32 t) { func = ppu_interpreter::DST; }
	virtual void LHAX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LHAX; }
	virtual void LVXL(u32 vd, u32 ra, u32 rb) { func = ppu_interpreter::LVXL; }
	virtual void MFTB(u32 rd, u32 spr) { func = ppu_interpreter::MFTB; }
	virtual void LWAUX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LWAUX; }
	virtual void DSTST(u32 ra, u32 rb, u32 strm, u32 t) { func = ppu_interpreter::DSTST; }
	virtual void LHAUX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LHAUX; }
	virtual void STHX(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STHX; }
	virtual void ORC(u32 rs, u32 ra, u32 rb, u32 rc) { func = ppu_interpreter::ORC; }
	virtual void ECOWX(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::ECOWX; }
	virtual void STHUX(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STHUX; }
	virtual void OR(u32 ra, u32 rs, u32 rb, u32 rc) { func = ppu_interpreter::OR; }
	virtual void DIVDU(u32 rd, u32 ra, u32 rb, u32 oe, u32 rc) { func = ppu_interpreter::DIVDU; }
	virtual void DIVWU(u32 rd, u32 ra, u32 rb, u32 oe, u32 rc) { func = ppu_interpreter::DIVWU; }
	virtual void MTSPR(u32 spr, u32 rs) { func = ppu_interpreter::MTSPR; }
	virtual void DCBI(u32 ra, u32 rb) { func = ppu_interpreter::DCBI; }
	virtual void NAND(u32 ra, u32 rs, u32 rb, u32 rc) { func = ppu_interpreter::NAND; }
	virtual void STVXL(u32 vs, u32 ra, u32 rb) { func = ppu_interpreter::STVXL; }
	virtual void DIVD(u32 rd, u32 ra, u32 rb, u32 oe, u32 rc) { func = ppu_interpreter::DIVD; }
	virtual void DIVW(u32 rd, u32 ra, u32 rb, u32 oe, u32 rc) { func = ppu_interpreter::DIVW; }
	virtual void LVLX(u32 vd, u32 ra, u32 rb) { func = ppu_interpreter::LVLX; }
	virtual void LDBRX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LDBRX; }
	virtual void LSWX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LSWX; }
	virtual void LWBRX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LWBRX; }
	virtual void LFSX(u32 frd, u32 ra, u32 rb) { func = ppu_interpreter::LFSX; }
	virtual void SRW(u32 ra, u32 rs, u32 rb, u32 rc) { func = ppu_interpreter::SRW; }
	virtual void SRD(u32 ra, u32 rs, u32 rb, u32 rc) { func = ppu_interpreter::SRD; }
	virtual void LVRX(u32 vd, u32 ra, u32 rb) { func = ppu_interpreter::LVRX; }
	virtual void LSWI(u32 rd, u32 ra, u32 nb) { func = ppu_interpreter::LSWI; }
	virtual void LFSUX(u32 frd, u32 ra, u32 rb) { func = ppu_interpreter::LFSUX; }
	virtual void SYNC(u32 l) { func = ppu_interpreter::SYNC; }
	virtual void LFDX(u32 frd, u32 ra, u32 rb) { func = ppu_interpreter::LFDX; }
	virtual void LFDUX(u32 frd, u32 ra, u32 rb) { func = ppu_interpreter::LFDUX; }
	virtual void STVLX(u32 vs, u32 ra, u32 rb) { func = ppu_interpreter::STVLX; }
	virtual void STDBRX(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STDBRX; }
	virtual void STSWX(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STSWX; }
	virtual void STWBRX(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STWBRX; }
	virtual void STFSX(u32 frs, u32 ra, u32 rb) { func = ppu_interpreter::STFSX; }
	virtual void STVRX(u32 vs, u32 ra, u32 rb) { func = ppu_interpreter::STVRX; }
	virtual void STFSUX(u32 frs, u32 ra, u32 rb) { func = ppu_interpreter::STFSUX; }
	virtual void STSWI(u32 rd, u32 ra, u32 nb) { func = ppu_interpreter::STSWI; }
	virtual void STFDX(u32 frs, u32 ra, u32 rb) { func = ppu_interpreter::STFDX; }
	virtual void STFDUX(u32 frs, u32 ra, u32 rb) { func = ppu_interpreter::STFDUX; }
	virtual void LVLXL(u32 vd, u32 ra, u32 rb) { func = ppu_interpreter::LVLXL; }
	virtual void LHBRX(u32 rd, u32 ra, u32 rb) { func = ppu_interpreter::LHBRX; }
	virtual void SRAW(u32 ra, u32 rs, u32 rb, u32 rc) { func = ppu_interpreter::SRAW; }
	virtual void SRAD(u32 ra, u32 rs, u32 rb, u32 rc) { func = ppu_interpreter::SRAD; }
	virtual void LVRXL(u32 vd, u32 ra, u32 rb) { func = ppu_interpreter::LVRXL; }
	virtual void DSS(u32 strm, u32 a) { func = ppu_interpreter::DSS; }
	virtual void SRAWI(u32 ra, u32 rs, u32 sh, u32 rc) { func = ppu_interpreter::SRAWI; }
	virtual void SRADI1(u32 ra, u32 rs, u32 sh, u32 rc) { func = ppu_interpreter::SRADI; }
	virtual void SRADI2(u32 ra, u32 rs, u32 sh, u32 rc) { func = ppu_interpreter::SRADI; }
	virtual void EIEIO() { func = ppu_interpreter::EIEIO; }
	virtual void STVLXL(u32 vs, u32 ra, u32 rb) { func = ppu_interpreter::STVLXL; }
	virtual void STHBRX(u32 rs, u32 ra, u32 rb) { func = ppu_interpreter::STHBRX; }
	virtual void EXTSH(u32 ra, u32 rs, u32 rc) { func = ppu_interpreter::EXTSH; }
	virtual void STVRXL(u32 sd, u32 ra, u32 rb) { func = ppu_interpreter::STVRXL; }
	virtual void EXTSB(u32 ra, u32 rs, u32 rc) { func = ppu_interpreter::EXTSB; }
	virtual void STFIWX(u32 frs, u32 ra, u32 rb) { func = ppu_interpreter::STFIWX; }
	virtual void EXTSW(u32 ra, u32 rs, u32 rc) { func = ppu_interpreter::EXTSW; }
	virtual void ICBI(u32 ra, u32 rb) { func = ppu_interpreter::ICBI; }
	virtual void DCBZ(u32 ra, u32 rb) { func = ppu_interpreter::DCBZ; }
	virtual void LWZ(u32 rd, u32 ra, s32 d) { func = ppu_interpreter::LWZ; }
	virtual void LWZU(u32 rd, u32 ra, s32 d) { func = ppu_interpreter::LWZU; }
	virtual void LBZ(u32 rd, u32 ra, s32 d) { func = ppu_interpreter::LBZ; }
	virtual void LBZU(u32 rd, u32 ra, s32 d) { func = ppu_interpreter::LBZU; }
	virtual void STW(u32 rs, u32 ra, s32 d) { func = ppu_interpreter::STW; }
	virtual void STWU(u32 rs, u32 ra, s32 d) { func = ppu_interpreter::STWU; }
	virtual void STB(u32 rs, u32 ra, s32 d) { func = ppu_interpreter::STB; }
	virtual void STBU(u32 rs, u32 ra, s32 d) { func = ppu_interpreter::STBU; }
	virtual void LHZ(u32 rd, u32 ra, s32 d) { func = ppu_interpreter::LHZ; }
	virtual void LHZU(u32 rd, u32 ra, s32 d) { func = ppu_interpreter::LHZU; }
	virtual void LHA(u32 rs, u32 ra, s32 d) { func = ppu_interpreter::LHA; }
	virtual void LHAU(u32 rs, u32 ra, s32 d) { func = ppu_interpreter::LHAU; }
	virtual void STH(u32 rs, u32 ra, s32 d) { func = ppu_interpreter::STH; }
	virtual void STHU(u32 rs, u32 ra, s32 d) { func = ppu_interpreter::STHU; }
	virtual void LMW(u32 rd, u32 ra, s32 d) { func = ppu_interpreter::LMW; }
	virtual void STMW(u32 rs, u32 ra, s32 d) { func = ppu_interpreter::STMW; }
	virtual void LFS(u32 frd, u32 ra, s32 d) { func = ppu_interpreter::LFS; }
	virtual void LFSU(u32 frd, u32 ra, s32 d) { func = ppu_interpreter::LFSU; }
	virtual void LFD(u32 frd, u32 ra, s32 d) { func = ppu_interpreter::LFD; }
	virtual void LFDU(u32 frd, u32 ra, s32 d) { func = ppu_interpreter::LFDU; }
	virtual void STFS(u32 frs, u32 ra, s32 d) { func = ppu_interpreter::STFS; }
	virtual void STFSU(u32 frs, u32 ra, s32 d) { func = ppu_interpreter::STFSU; }
	virtual void STFD(u32 frs, u32 ra, s32 d) { func = ppu_interpreter::STFD; }
	virtual void STFDU(u32 frs, u32 ra, s32 d) { func = ppu_interpreter::STFDU; }
	virtual void LD(u32 rd, u32 ra, s32 ds) { func = ppu_interpreter::LD; }
	virtual void LDU(u32 rd, u32 ra, s32 ds) { func = ppu_interpreter::LDU; }
	virtual void LWA(u32 rd, u32 ra, s32 ds) { func = ppu_interpreter::LWA; }
	virtual void FDIVS(u32 frd, u32 fra, u32 frb, u32 rc) { func = ppu_interpreter::FDIVS; }
	virtual void FSUBS(u32 frd, u32 fra, u32 frb, u32 rc) { func = ppu_interpreter::FSUBS; }
	virtual void FADDS(u32 frd, u32 fra, u32 frb, u32 rc) { func = ppu_interpreter::FADDS; }
	virtual void FSQRTS(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FSQRTS; }
	virtual void FRES(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FRES; }
	virtual void FMULS(u32 frd, u32 fra, u32 frc, u32 rc) { func = ppu_interpreter::FMULS; }
	virtual void FMADDS(u32 frd, u32 fra, u32 frc, u32 frb, u32 rc) { func = ppu_interpreter::FMADDS; }
	virtual void FMSUBS(u32 frd, u32 fra, u32 frc, u32 frb, u32 rc) { func = ppu_interpreter::FMSUBS; }
	virtual void FNMSUBS(u32 frd, u32 fra, u32 frc, u32 frb, u32 rc) { func = ppu_interpreter::FNMSUBS; }
	virtual void FNMADDS(u32 frd, u32 fra, u32 frc, u32 frb, u32 rc) { func = ppu_interpreter::FNMADDS; }
	virtual void STD(u32 rs, u32 ra, s32 ds) { func = ppu_interpreter::STD; }
	virtual void STDU(u32 rs, u32 ra, s32 ds) { func = ppu_interpreter::STDU; }
	virtual void MTFSB1(u32 bt, u32 rc) { func = ppu_interpreter::MTFSB1; }
	virtual void MCRFS(u32 bf, u32 bfa) { func = ppu_interpreter::MCRFS; }
	virtual void MTFSB0(u32 bt, u32 rc) { func = ppu_interpreter::MTFSB0; }
	virtual void MTFSFI(u32 crfd, u32 i, u32 rc) { func = ppu_interpreter::MTFSFI; }
	virtual void MFFS(u32 frd, u32 rc) { func = ppu_interpreter::MFFS; }
	virtual void MTFSF(u32 flm, u32 frb, u32 rc) { func = ppu_interpreter::MTFSF; }

	virtual void FCMPU(u32 bf, u32 fra, u32 frb) { func = ppu_interpreter::FCMPU; }
	virtual void FRSP(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FRSP; }
	virtual void FCTIW(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FCTIW; }
	virtual void FCTIWZ(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FCTIWZ; }
	virtual void FDIV(u32 frd, u32 fra, u32 frb, u32 rc) { func = ppu_interpreter::FDIV; }
	virtual void FSUB(u32 frd, u32 fra, u32 frb, u32 rc) { func = ppu_interpreter::FSUB; }
	virtual void FADD(u32 frd, u32 fra, u32 frb, u32 rc) { func = ppu_interpreter::FADD; }
	virtual void FSQRT(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FSQRT; }
	virtual void FSEL(u32 frd, u32 fra, u32 frc, u32 frb, u32 rc) { func = ppu_interpreter::FSEL; }
	virtual void FMUL(u32 frd, u32 fra, u32 frc, u32 rc) { func = ppu_interpreter::FMUL; }
	virtual void FRSQRTE(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FRSQRTE; }
	virtual void FMSUB(u32 frd, u32 fra, u32 frc, u32 frb, u32 rc) { func = ppu_interpreter::FMSUB; }
	virtual void FMADD(u32 frd, u32 fra, u32 frc, u32 frb, u32 rc) { func = ppu_interpreter::FMADD; }
	virtual void FNMSUB(u32 frd, u32 fra, u32 frc, u32 frb, u32 rc) { func = ppu_interpreter::FNMSUB; }
	virtual void FNMADD(u32 frd, u32 fra, u32 frc, u32 frb, u32 rc) { func = ppu_interpreter::FNMADD; }
	virtual void FCMPO(u32 crfd, u32 fra, u32 frb) { func = ppu_interpreter::FCMPO; }
	virtual void FNEG(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FNEG; }
	virtual void FMR(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FMR; }
	virtual void FNABS(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FNABS; }
	virtual void FABS(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FABS; }
	virtual void FCTID(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FCTID; }
	virtual void FCTIDZ(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FCTIDZ; }
	virtual void FCFID(u32 frd, u32 frb, u32 rc) { func = ppu_interpreter::FCFID; }

	virtual void UNK(const u32 code, const u32 opcode, const u32 gcode) { func = ppu_interpreter::UNK; }
};