From 6864d48dcf77ac9955e76e465af7a74ff01c1da2 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Tue, 3 Jun 2025 14:55:28 -0400 Subject: [PATCH] OpcodeDispatcher: optimize cdq prereq to optimizing sign-ext+ldiv in a reasonable way. 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 4ff689957..30a8ff648 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp @@ -1044,9 +1044,9 @@ void OpDispatchBuilder::CMPOp(OpcodeArgs, uint32_t SrcIndex) { } void OpDispatchBuilder::CQOOp(OpcodeArgs) { - Ref Src = LoadSource(GPRClass, Op, Op->Src[0], Op->Flags); - auto Size = GetSrcSize(Op); - Ref Upper = _Sbfe(OpSize::i64Bit, 1, Size * 8 - 1, Src); + Ref Src = LoadSource(GPRClass, Op, Op->Src[0], Op->Flags, {.AllowUpperGarbage = true}); + auto Size = OpSizeFromSrc(Op); + Ref Upper = _Sbfe(std::max(OpSize::i32Bit, Size), 1, GetSrcBitSize(Op) - 1, Src); StoreResult(GPRClass, Op, Upper, OpSize::iInvalid); }