diff --git a/Source/Core/Core/DSP/DSPDisassembler.cpp b/Source/Core/Core/DSP/DSPDisassembler.cpp index db622ef32a..1a40c4b8bb 100644 --- a/Source/Core/Core/DSP/DSPDisassembler.cpp +++ b/Source/Core/Core/DSP/DSPDisassembler.cpp @@ -105,8 +105,9 @@ std::string DSPDisassembler::DisassembleParameters(const DSPOPCTemplate& opc, u1 // LSL, LSR, ASL, ASR if (opc.params[j].mask == 0x003f) { - // 6-bit sign extension - buf += fmt::format("#{}", (val & 0x20) != 0 ? (val | 0xFFFFFFC0) : val); + // Left and right shifts function essentially as a single shift by a 7-bit signed value, + // but are split into two intructions for clarity. + buf += fmt::format("#{}", (val & 0x20) != 0 ? (64 - val) : val); } else {