IR: Removes implicit sized LUDIV/LUREM

This commit is contained in:
Ryan Houdek committed 2023-08-28 05:02:00 -07:00
1 parent b801bacb36
commit 5013473ec0
2 files changed
+6 -12

No files matched your search

@@ -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);
-6
View File
@@ -272,15 +272,9 @@ friend class FEXCore::IR::PassManager;
IRPair<IROp_LDiv> _LDiv(OrderedNode *_Lower, OrderedNode *_Upper, OrderedNode *_Divisor) {
return _LDiv(static_cast<OpSize>(std::max(GetOpSize(_Divisor), std::max(GetOpSize(_Upper), GetOpSize(_Lower)))), _Lower, _Upper, _Divisor);
}
IRPair<IROp_LUDiv> _LUDiv(OrderedNode *_Lower, OrderedNode *_Upper, OrderedNode *_Divisor) {
return _LUDiv(static_cast<OpSize>(std::max(GetOpSize(_Divisor), std::max(GetOpSize(_Upper), GetOpSize(_Lower)))), _Lower, _Upper, _Divisor);
}
IRPair<IROp_LRem> _LRem(OrderedNode *_Lower, OrderedNode *_Upper, OrderedNode *_Divisor) {
return _LRem(static_cast<OpSize>(std::max(GetOpSize(_Divisor), std::max(GetOpSize(_Upper), GetOpSize(_Lower)))), _Lower, _Upper, _Divisor);
}
IRPair<IROp_LURem> _LURem(OrderedNode *_Lower, OrderedNode *_Upper, OrderedNode *_Divisor) {
return _LURem(static_cast<OpSize>(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) {