diff --git a/External/FEXCore/Source/Interface/Core/Interpreter/InterpreterCore.cpp b/External/FEXCore/Source/Interface/Core/Interpreter/InterpreterCore.cpp index 824479b4a..7c6939e28 100644 --- a/External/FEXCore/Source/Interface/Core/Interpreter/InterpreterCore.cpp +++ b/External/FEXCore/Source/Interface/Core/Interpreter/InterpreterCore.cpp @@ -1081,7 +1081,15 @@ void InterpreterCore::ExecuteCode(FEXCore::Core::InternalThreadState *Thread) { uint64_t Src1 = *GetSrc(SSAData, Op->Header.Args[0]); uint64_t Src2 = *GetSrc(SSAData, Op->Header.Args[1]); uint8_t Mask = OpSize * 8 - 1; - GD = Src1 >> (Src2 & Mask); + switch (OpSize) { + case 4: + GD = static_cast(Src1) >> (Src2 & Mask); + break; + case 8: + GD = static_cast(Src1) >> (Src2 & Mask); + break; + default: LogMan::Msg::A("Unknown LSHR Size: %d\n", OpSize); break; + }; break; } case IR::OP_ASHR: { @@ -1090,12 +1098,6 @@ void InterpreterCore::ExecuteCode(FEXCore::Core::InternalThreadState *Thread) { uint64_t Src2 = *GetSrc(SSAData, Op->Header.Args[1]); uint8_t Mask = OpSize * 8 - 1; switch (OpSize) { - case 1: - GD = (uint8_t)(static_cast(Src1) >> (Src2 & Mask)); - break; - case 2: - GD = (uint16_t)(static_cast(Src1) >> (Src2 & Mask)); - break; case 4: GD = (uint32_t)(static_cast(Src1) >> (Src2 & Mask)); break;