From 1c157d1fc8b0ea2ca69fc2029c844c0cc5eb6db7 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Fri, 12 Dec 2025 00:53:45 +0000 Subject: [PATCH 1/3] GekkoDisassembler: fix conditional twi opcode --- Source/Core/Common/GekkoDisassembler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/Common/GekkoDisassembler.cpp b/Source/Core/Common/GekkoDisassembler.cpp index 18ed219e643..71217d62695 100644 --- a/Source/Core/Common/GekkoDisassembler.cpp +++ b/Source/Core/Common/GekkoDisassembler.cpp @@ -493,7 +493,7 @@ void GekkoDisassembler::trapi(u32 in, unsigned char dmode) if (cnd != nullptr) { - m_opcode = fmt::format("t{}{}", dmode ? 'd' : 'w', cnd); + m_opcode = fmt::format("t{}{}i", dmode ? 'd' : 'w', cnd); } else { From df7caeab3fb17648785ad86777acd194330c0117 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Fri, 12 Dec 2025 01:00:36 +0000 Subject: [PATCH 2/3] GekkoDisassembler: fix ps_sel operands --- Source/Core/Common/GekkoDisassembler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/Common/GekkoDisassembler.cpp b/Source/Core/Common/GekkoDisassembler.cpp index 71217d62695..e0786f7643f 100644 --- a/Source/Core/Common/GekkoDisassembler.cpp +++ b/Source/Core/Common/GekkoDisassembler.cpp @@ -1094,7 +1094,7 @@ void GekkoDisassembler::ps(u32 inst) case 23: m_opcode = "ps_sel"; - m_operands = fmt::format("p{}>=0?p{}:p{}", FD, FA, FC); + m_operands = fmt::format("p{}, p{}>=0?p{}:p{}", FD, FA, FC, FB); return; case 24: From c52dd23c58b8e93a12d6be5c0fe8cc68fc11c026 Mon Sep 17 00:00:00 2001 From: Tillmann Karras Date: Fri, 12 Dec 2025 01:23:57 +0000 Subject: [PATCH 3/3] GekkoDisassembler: drop unsupported opcodes --- Source/Core/Common/GekkoDisassembler.cpp | 50 ------------------------ 1 file changed, 50 deletions(-) diff --git a/Source/Core/Common/GekkoDisassembler.cpp b/Source/Core/Common/GekkoDisassembler.cpp index e0786f7643f..6dc66a8f1e3 100644 --- a/Source/Core/Common/GekkoDisassembler.cpp +++ b/Source/Core/Common/GekkoDisassembler.cpp @@ -918,16 +918,6 @@ void GekkoDisassembler::mtb(u32 in) } } -void GekkoDisassembler::sradi(u32 in) -{ - int s = (int)PPCGETD(in); - int a = (int)PPCGETA(in); - int bsh = (int)(((in & 2) << 4) + PPCGETB(in)); - - m_opcode = fmt::format("sradi{}", (in & 1) ? "." : ""); - m_operands = fmt::format("{}, {}, {}", regnames[a], regnames[s], bsh); -} - void GekkoDisassembler::ldst(u32 in, std::string_view name, char reg) { int s = (int)PPCGETD(in); @@ -1443,30 +1433,6 @@ u32* GekkoDisassembler::DoDisassembly(bool big_endian) ori(in, "andis."); break; - case 30: - switch ((in >> 2) & 0x7) - { - case 0: - rld(in, "icl", 0); // rldicl - break; - case 1: - rld(in, "icr", 0); // rldicr - break; - case 2: - rld(in, "ic", 0); // rldic - break; - case 3: - rld(in, "imi", 0); // rldimi - break; - case 4: - rld(in, in & 2 ? "cl" : "cr", 1); // rldcl, rldcr - break; - default: - ill(in); - break; - } - break; - case 31: switch (PPCGETIDX2(in)) { @@ -1813,10 +1779,6 @@ u32* GekkoDisassembler::DoDisassembly(bool big_endian) dab(in, "orc", 7, 1, 0, -1); break; - case 413: - sradi(in); // sradi - break; - case 434: if (in & (PPCDMASK | PPCAMASK)) ill(in); @@ -2291,18 +2253,6 @@ u32* GekkoDisassembler::DoDisassembly(bool big_endian) } break; - case 814: - fdabc(in, "fctid", 9); - break; - - case 815: - fdabc(in, "fctidz", 9); - break; - - case 846: - fdabc(in, "fcfid", 9); - break; - default: ill(in); break;