From fb6f850bb404a4c4f6f96ec859fc07cb4fa277a1 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Thu, 25 Jan 2024 18:26:13 -0400 Subject: [PATCH] OpcodeDispatcher: remove rcl sub Signed-off-by: Alyssa Rosenzweig --- FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp index 95db7e2f7..e91d70b96 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp @@ -2682,10 +2682,11 @@ void OpDispatchBuilder::RCLOp(OpcodeArgs) { // Res |= (SrcMasked >> (Size - Shift + 1)), expressed as // Res | ((SrcMasked >> (-Shift)) >> 1), since Size - Shift = -Shift mod // Size. - Res = _Orlshr(OpSize, Res, _Lshr(OpSize, Dest, _Neg(OpSize, SrcMasked)), 1); + auto NegSrc = _Neg(OpSize, SrcMasked); + Res = _Orlshr(OpSize, Res, _Lshr(OpSize, Dest, NegSrc), 1); // Our new CF will be bit (Shift - 1) of the source - auto NewCF = _Lshr(OpSize, Dest, _Sub(OpSize, _Constant(Size, Size), SrcMasked)); + auto NewCF = _Lshr(OpSize, Dest, NegSrc); SetRFLAG(NewCF, 0, true); // Since Shift != 0 we can inject the CF