From 3b2100307e6f3daa3d7941b787935e73cb7ee492 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Sun, 19 May 2024 21:50:39 -0400 Subject: [PATCH] OpcodeDispatcher: allow garbage on more shifts we're masking anyway Signed-off-by: Alyssa Rosenzweig --- FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp index a0c8713bb..d8afaa746 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp @@ -1495,7 +1495,7 @@ void OpDispatchBuilder::XGetBVOp(OpcodeArgs) { void OpDispatchBuilder::SHLOp(OpcodeArgs) { const auto Size = GetSrcBitSize(Op); auto Dest = LoadSource(GPRClass, Op, Op->Dest, Op->Flags); - auto Src = LoadSource(GPRClass, Op, Op->Src[1], Op->Flags); + auto Src = LoadSource(GPRClass, Op, Op->Src[1], Op->Flags, {.AllowUpperGarbage = true}); OrderedNode* Result = _Lshl(Size == 64 ? OpSize::i64Bit : OpSize::i32Bit, Dest, Src); HandleShift(Op, Result, Dest, ShiftType::LSL, Src); @@ -1518,7 +1518,7 @@ void OpDispatchBuilder::SHLImmediateOp(OpcodeArgs) { void OpDispatchBuilder::SHROp(OpcodeArgs) { auto Dest = LoadSource(GPRClass, Op, Op->Dest, Op->Flags); - auto Src = LoadSource(GPRClass, Op, Op->Src[1], Op->Flags); + auto Src = LoadSource(GPRClass, Op, Op->Src[1], Op->Flags, {.AllowUpperGarbage = true}); auto ALUOp = _Lshr(IR::SizeToOpSize(std::max(4, GetSrcSize(Op))), Dest, Src); HandleShift(Op, ALUOp, Dest, ShiftType::LSR, Src); @@ -1678,7 +1678,7 @@ void OpDispatchBuilder::SHRDImmediateOp(OpcodeArgs) { void OpDispatchBuilder::ASHROp(OpcodeArgs) { auto Dest = LoadSource(GPRClass, Op, Op->Dest, Op->Flags); - auto Src = LoadSource(GPRClass, Op, Op->Src[1], Op->Flags); + auto Src = LoadSource(GPRClass, Op, Op->Src[1], Op->Flags, {.AllowUpperGarbage = true}); const auto Size = GetSrcBitSize(Op); if (Size < 32) {