From 5013473ec07ee502dadaeface0e1efe9192cb6aa Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Sun, 27 Aug 2023 21:42:34 -0700 Subject: [PATCH] IR: Removes implicit sized LUDIV/LUREM --- FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp | 12 ++++++------ FEXCore/include/FEXCore/IR/IREmitter.h | 6 ------ 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp index 1e99536ee..9f8758c64 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp @@ -4371,8 +4371,8 @@ void OpDispatchBuilder::DIVOp(OpcodeArgs) { else if (Size == 2) { OrderedNode *Src1 = LoadGPRRegister(X86State::REG_RAX, Size); OrderedNode *Src2 = LoadGPRRegister(X86State::REG_RDX, Size); - auto UDivOp = _LUDiv(Src1, Src2, Divisor); - auto URemOp = _LURem(Src1, Src2, Divisor); + auto UDivOp = _LUDiv(OpSize::i16Bit, Src1, Src2, Divisor); + auto URemOp = _LURem(OpSize::i16Bit, Src1, Src2, Divisor); StoreGPRRegister(X86State::REG_RAX, UDivOp, Size); StoreGPRRegister(X86State::REG_RDX, URemOp, Size); @@ -4381,8 +4381,8 @@ void OpDispatchBuilder::DIVOp(OpcodeArgs) { OrderedNode *Src1 = LoadGPRRegister(X86State::REG_RAX, Size); OrderedNode *Src2 = LoadGPRRegister(X86State::REG_RDX, Size); - OrderedNode *UDivOp = _Bfe(Size * 8, 0, _LUDiv(Src1, Src2, Divisor)); - OrderedNode *URemOp = _Bfe(Size * 8, 0, _LURem(Src1, Src2, Divisor)); + OrderedNode *UDivOp = _Bfe(Size * 8, 0, _LUDiv(OpSize::i32Bit, Src1, Src2, Divisor)); + OrderedNode *URemOp = _Bfe(Size * 8, 0, _LURem(OpSize::i32Bit, Src1, Src2, Divisor)); StoreGPRRegister(X86State::REG_RAX, UDivOp); StoreGPRRegister(X86State::REG_RDX, URemOp); @@ -4396,8 +4396,8 @@ void OpDispatchBuilder::DIVOp(OpcodeArgs) { OrderedNode *Src1 = LoadGPRRegister(X86State::REG_RAX); OrderedNode *Src2 = LoadGPRRegister(X86State::REG_RDX); - auto UDivOp = _LUDiv(Src1, Src2, Divisor); - auto URemOp = _LURem(Src1, Src2, Divisor); + auto UDivOp = _LUDiv(OpSize::i64Bit, Src1, Src2, Divisor); + auto URemOp = _LURem(OpSize::i64Bit, Src1, Src2, Divisor); StoreGPRRegister(X86State::REG_RAX, UDivOp); StoreGPRRegister(X86State::REG_RDX, URemOp); diff --git a/FEXCore/include/FEXCore/IR/IREmitter.h b/FEXCore/include/FEXCore/IR/IREmitter.h index 5704a567d..f37591507 100644 --- a/FEXCore/include/FEXCore/IR/IREmitter.h +++ b/FEXCore/include/FEXCore/IR/IREmitter.h @@ -272,15 +272,9 @@ friend class FEXCore::IR::PassManager; IRPair _LDiv(OrderedNode *_Lower, OrderedNode *_Upper, OrderedNode *_Divisor) { return _LDiv(static_cast(std::max(GetOpSize(_Divisor), std::max(GetOpSize(_Upper), GetOpSize(_Lower)))), _Lower, _Upper, _Divisor); } - IRPair _LUDiv(OrderedNode *_Lower, OrderedNode *_Upper, OrderedNode *_Divisor) { - return _LUDiv(static_cast(std::max(GetOpSize(_Divisor), std::max(GetOpSize(_Upper), GetOpSize(_Lower)))), _Lower, _Upper, _Divisor); - } IRPair _LRem(OrderedNode *_Lower, OrderedNode *_Upper, OrderedNode *_Divisor) { return _LRem(static_cast(std::max(GetOpSize(_Divisor), std::max(GetOpSize(_Upper), GetOpSize(_Lower)))), _Lower, _Upper, _Divisor); } - IRPair _LURem(OrderedNode *_Lower, OrderedNode *_Upper, OrderedNode *_Divisor) { - return _LURem(static_cast(std::max(GetOpSize(_Divisor), std::max(GetOpSize(_Upper), GetOpSize(_Lower)))), _Lower, _Upper, _Divisor); - } // End of Temporary naughty implicit IR operation handlers void AddPhiValue(IR::IROp_Phi *Phi, OrderedNode *Value) {