diff --git a/rpcs3/Emu/Cell/SPUAnalyser.cpp b/rpcs3/Emu/Cell/SPUAnalyser.cpp index ce528335b2..ccf284487b 100644 --- a/rpcs3/Emu/Cell/SPUAnalyser.cpp +++ b/rpcs3/Emu/Cell/SPUAnalyser.cpp @@ -1,15 +1,2 @@ #include "stdafx.h" #include "SPUAnalyser.h" - -template <> -void fmt_class_string::format(std::string& out, u64 arg) -{ - // Decode instruction name from the enum value - for (u32 i = 0; i < 10; i++) - { - if (u64 value = (arg >> (54 - i * 6)) & 0x3f) - { - out += static_cast(value + 0x20); - } - } -} diff --git a/rpcs3/Emu/Cell/SPUAnalyser.h b/rpcs3/Emu/Cell/SPUAnalyser.h index a0dd3f3fbc..0f30e5b690 100644 --- a/rpcs3/Emu/Cell/SPUAnalyser.h +++ b/rpcs3/Emu/Cell/SPUAnalyser.h @@ -490,225 +490,210 @@ struct spu_iflag } }; -// Encode instruction name: 6 bits per character (0x20..0x5f), max 10 -static constexpr u64 spu_iname_encode(const char* ptr, u64 value = 0) -{ - return *ptr == '\0' ? value : spu_iname_encode(ptr + 1, (*ptr - 0x20) | (value << 6)); -} - -#define NAME(x) x = spu_iname_encode(#x) +#define NAME(x) static constexpr const char& x = *#x struct spu_iname { - enum type : u64 - { - NAME(UNK), - NAME(HEQ), - NAME(HEQI), - NAME(HGT), - NAME(HGTI), - NAME(HLGT), - NAME(HLGTI), - NAME(HBR), - NAME(HBRA), - NAME(HBRR), - NAME(STOP), - NAME(STOPD), - NAME(LNOP), - NAME(NOP), - NAME(SYNC), - NAME(DSYNC), - NAME(MFSPR), - NAME(MTSPR), - NAME(RDCH), - NAME(RCHCNT), - NAME(WRCH), - NAME(LQD), - NAME(LQX), - NAME(LQA), - NAME(LQR), - NAME(STQD), - NAME(STQX), - NAME(STQA), - NAME(STQR), - NAME(CBD), - NAME(CBX), - NAME(CHD), - NAME(CHX), - NAME(CWD), - NAME(CWX), - NAME(CDD), - NAME(CDX), - NAME(ILH), - NAME(ILHU), - NAME(IL), - NAME(ILA), - NAME(IOHL), - NAME(FSMBI), - NAME(AH), - NAME(AHI), - NAME(A), - NAME(AI), - NAME(SFH), - NAME(SFHI), - NAME(SF), - NAME(SFI), - NAME(ADDX), - NAME(CG), - NAME(CGX), - NAME(SFX), - NAME(BG), - NAME(BGX), - NAME(MPY), - NAME(MPYU), - NAME(MPYI), - NAME(MPYUI), - NAME(MPYH), - NAME(MPYS), - NAME(MPYHH), - NAME(MPYHHA), - NAME(MPYHHU), - NAME(MPYHHAU), - NAME(CLZ), - NAME(CNTB), - NAME(FSMB), - NAME(FSMH), - NAME(FSM), - NAME(GBB), - NAME(GBH), - NAME(GB), - NAME(AVGB), - NAME(ABSDB), - NAME(SUMB), - NAME(XSBH), - NAME(XSHW), - NAME(XSWD), - NAME(AND), - NAME(ANDC), - NAME(ANDBI), - NAME(ANDHI), - NAME(ANDI), - NAME(OR), - NAME(ORC), - NAME(ORBI), - NAME(ORHI), - NAME(ORI), - NAME(ORX), - NAME(XOR), - NAME(XORBI), - NAME(XORHI), - NAME(XORI), - NAME(NAND), - NAME(NOR), - NAME(EQV), - NAME(MPYA), - NAME(SELB), - NAME(SHUFB), - NAME(SHLH), - NAME(SHLHI), - NAME(SHL), - NAME(SHLI), - NAME(SHLQBI), - NAME(SHLQBII), - NAME(SHLQBY), - NAME(SHLQBYI), - NAME(SHLQBYBI), - NAME(ROTH), - NAME(ROTHI), - NAME(ROT), - NAME(ROTI), - NAME(ROTQBY), - NAME(ROTQBYI), - NAME(ROTQBYBI), - NAME(ROTQBI), - NAME(ROTQBII), - NAME(ROTHM), - NAME(ROTHMI), - NAME(ROTM), - NAME(ROTMI), - NAME(ROTQMBY), - NAME(ROTQMBYI), - NAME(ROTQMBYBI), - NAME(ROTQMBI), - NAME(ROTQMBII), - NAME(ROTMAH), - NAME(ROTMAHI), - NAME(ROTMA), - NAME(ROTMAI), - NAME(CEQB), - NAME(CEQBI), - NAME(CEQH), - NAME(CEQHI), - NAME(CEQ), - NAME(CEQI), - NAME(CGTB), - NAME(CGTBI), - NAME(CGTH), - NAME(CGTHI), - NAME(CGT), - NAME(CGTI), - NAME(CLGTB), - NAME(CLGTBI), - NAME(CLGTH), - NAME(CLGTHI), - NAME(CLGT), - NAME(CLGTI), - NAME(BR), - NAME(BRA), - NAME(BRSL), - NAME(BRASL), - NAME(BI), - NAME(IRET), - NAME(BISLED), - NAME(BISL), - NAME(BRNZ), - NAME(BRZ), - NAME(BRHNZ), - NAME(BRHZ), - NAME(BIZ), - NAME(BINZ), - NAME(BIHZ), - NAME(BIHNZ), - NAME(FA), - NAME(DFA), - NAME(FS), - NAME(DFS), - NAME(FM), - NAME(DFM), - NAME(DFMA), - NAME(DFNMS), - NAME(DFMS), - NAME(DFNMA), - NAME(FREST), - NAME(FRSQEST), - NAME(FI), - NAME(CSFLT), - NAME(CFLTS), - NAME(CUFLT), - NAME(CFLTU), - NAME(FRDS), - NAME(FESD), - NAME(FCEQ), - NAME(FCMEQ), - NAME(FCGT), - NAME(FCMGT), - NAME(FSCRWR), - NAME(FSCRRD), - NAME(DFCEQ), - NAME(DFCMEQ), - NAME(DFCGT), - NAME(DFCMGT), - NAME(DFTSV), - NAME(FMA), - NAME(FNMS), - NAME(FMS), - }; - - // Enable address-of operator for spu_decoder<> - friend constexpr type operator &(type value) - { - return value; - } + NAME(UNK); + NAME(HEQ); + NAME(HEQI); + NAME(HGT); + NAME(HGTI); + NAME(HLGT); + NAME(HLGTI); + NAME(HBR); + NAME(HBRA); + NAME(HBRR); + NAME(STOP); + NAME(STOPD); + NAME(LNOP); + NAME(NOP); + NAME(SYNC); + NAME(DSYNC); + NAME(MFSPR); + NAME(MTSPR); + NAME(RDCH); + NAME(RCHCNT); + NAME(WRCH); + NAME(LQD); + NAME(LQX); + NAME(LQA); + NAME(LQR); + NAME(STQD); + NAME(STQX); + NAME(STQA); + NAME(STQR); + NAME(CBD); + NAME(CBX); + NAME(CHD); + NAME(CHX); + NAME(CWD); + NAME(CWX); + NAME(CDD); + NAME(CDX); + NAME(ILH); + NAME(ILHU); + NAME(IL); + NAME(ILA); + NAME(IOHL); + NAME(FSMBI); + NAME(AH); + NAME(AHI); + NAME(A); + NAME(AI); + NAME(SFH); + NAME(SFHI); + NAME(SF); + NAME(SFI); + NAME(ADDX); + NAME(CG); + NAME(CGX); + NAME(SFX); + NAME(BG); + NAME(BGX); + NAME(MPY); + NAME(MPYU); + NAME(MPYI); + NAME(MPYUI); + NAME(MPYH); + NAME(MPYS); + NAME(MPYHH); + NAME(MPYHHA); + NAME(MPYHHU); + NAME(MPYHHAU); + NAME(CLZ); + NAME(CNTB); + NAME(FSMB); + NAME(FSMH); + NAME(FSM); + NAME(GBB); + NAME(GBH); + NAME(GB); + NAME(AVGB); + NAME(ABSDB); + NAME(SUMB); + NAME(XSBH); + NAME(XSHW); + NAME(XSWD); + NAME(AND); + NAME(ANDC); + NAME(ANDBI); + NAME(ANDHI); + NAME(ANDI); + NAME(OR); + NAME(ORC); + NAME(ORBI); + NAME(ORHI); + NAME(ORI); + NAME(ORX); + NAME(XOR); + NAME(XORBI); + NAME(XORHI); + NAME(XORI); + NAME(NAND); + NAME(NOR); + NAME(EQV); + NAME(MPYA); + NAME(SELB); + NAME(SHUFB); + NAME(SHLH); + NAME(SHLHI); + NAME(SHL); + NAME(SHLI); + NAME(SHLQBI); + NAME(SHLQBII); + NAME(SHLQBY); + NAME(SHLQBYI); + NAME(SHLQBYBI); + NAME(ROTH); + NAME(ROTHI); + NAME(ROT); + NAME(ROTI); + NAME(ROTQBY); + NAME(ROTQBYI); + NAME(ROTQBYBI); + NAME(ROTQBI); + NAME(ROTQBII); + NAME(ROTHM); + NAME(ROTHMI); + NAME(ROTM); + NAME(ROTMI); + NAME(ROTQMBY); + NAME(ROTQMBYI); + NAME(ROTQMBYBI); + NAME(ROTQMBI); + NAME(ROTQMBII); + NAME(ROTMAH); + NAME(ROTMAHI); + NAME(ROTMA); + NAME(ROTMAI); + NAME(CEQB); + NAME(CEQBI); + NAME(CEQH); + NAME(CEQHI); + NAME(CEQ); + NAME(CEQI); + NAME(CGTB); + NAME(CGTBI); + NAME(CGTH); + NAME(CGTHI); + NAME(CGT); + NAME(CGTI); + NAME(CLGTB); + NAME(CLGTBI); + NAME(CLGTH); + NAME(CLGTHI); + NAME(CLGT); + NAME(CLGTI); + NAME(BR); + NAME(BRA); + NAME(BRSL); + NAME(BRASL); + NAME(BI); + NAME(IRET); + NAME(BISLED); + NAME(BISL); + NAME(BRNZ); + NAME(BRZ); + NAME(BRHNZ); + NAME(BRHZ); + NAME(BIZ); + NAME(BINZ); + NAME(BIHZ); + NAME(BIHNZ); + NAME(FA); + NAME(DFA); + NAME(FS); + NAME(DFS); + NAME(FM); + NAME(DFM); + NAME(DFMA); + NAME(DFNMS); + NAME(DFMS); + NAME(DFNMA); + NAME(FREST); + NAME(FRSQEST); + NAME(FI); + NAME(CSFLT); + NAME(CFLTS); + NAME(CUFLT); + NAME(CFLTU); + NAME(FRDS); + NAME(FESD); + NAME(FCEQ); + NAME(FCMEQ); + NAME(FCGT); + NAME(FCMGT); + NAME(FSCRWR); + NAME(FSCRRD); + NAME(DFCEQ); + NAME(DFCMEQ); + NAME(DFCGT); + NAME(DFCMGT); + NAME(DFTSV); + NAME(FMA); + NAME(FNMS); + NAME(FMS); }; #undef NAME