From f3f466ae821806d8f23fdcac05d613e6404e090b Mon Sep 17 00:00:00 2001 From: Pokechu22 Date: Sat, 31 Jul 2021 13:06:57 -0700 Subject: [PATCH] DSPDisassembler: Fix LSR/ASR formatting Originally, 1479 (for example) would disassemble as `lsr $ACC0, #-7`. At some point (likely the conversion to fmt), this regressed to `lsr $ACC0, #4294967289`. Now, it disassembles as `lsr $ACC0, #7`. --- Source/Core/Core/DSP/DSPDisassembler.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 {