diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp index a8f70f7ad..785172e2b 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp @@ -5158,8 +5158,8 @@ void OpDispatchBuilder::InstallHostSpecificOpcodeHandlers() { {OPD(1, 0b00, 0xC6), 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::VSHUFOp, OpSize::i32Bit>}, {OPD(1, 0b01, 0xC6), 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::VSHUFOp, OpSize::i64Bit>}, - {OPD(1, 0b01, 0xD0), 1, &OpDispatchBuilder::VADDSUBPOp<8>}, - {OPD(1, 0b11, 0xD0), 1, &OpDispatchBuilder::VADDSUBPOp<4>}, + {OPD(1, 0b01, 0xD0), 1, &OpDispatchBuilder::VADDSUBPOp}, + {OPD(1, 0b11, 0xD0), 1, &OpDispatchBuilder::VADDSUBPOp}, {OPD(1, 0b01, 0xD1), 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::VPSRLDOp, 2>}, {OPD(1, 0b01, 0xD2), 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::VPSRLDOp, 4>}, diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher.h b/FEXCore/Source/Interface/Core/OpcodeDispatcher.h index 1162c148b..c3e2f6c86 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.h +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.h @@ -561,7 +561,7 @@ public: template void AVXVFCMPOp(OpcodeArgs); - template + template void VADDSUBPOp(OpcodeArgs); void VAESDecOp(OpcodeArgs); @@ -807,7 +807,7 @@ public: template void MOVQ2DQ(OpcodeArgs); - template + template void ADDSUBPOp(OpcodeArgs); void PFNACCOp(OpcodeArgs); @@ -1356,7 +1356,7 @@ private: // Opcode helpers for generalizing behavior across VEX and non-VEX variants. - Ref ADDSUBPOpImpl(OpSize Size, size_t ElementSize, Ref Src1, Ref Src2); + Ref ADDSUBPOpImpl(OpSize Size, IR::OpSize ElementSize, Ref Src1, Ref Src2); void AVXVectorALUOp(OpcodeArgs, IROps IROp, IR::OpSize ElementSize); void AVXVectorUnaryOp(OpcodeArgs, IROps IROp, IR::OpSize ElementSize); diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher/SecondaryTables.h b/FEXCore/Source/Interface/Core/OpcodeDispatcher/SecondaryTables.h index 31c7241b4..34cfb279f 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher/SecondaryTables.h +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher/SecondaryTables.h @@ -197,7 +197,7 @@ constexpr std::tuple OpDisp {0x70, 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::PSHUFWOp, true>}, {0x7C, 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::VectorALUOp, IR::OP_VFADDP, OpSize::i32Bit>}, {0x7D, 1, &OpDispatchBuilder::HSUBP<4>}, - {0xD0, 1, &OpDispatchBuilder::ADDSUBPOp<4>}, + {0xD0, 1, &OpDispatchBuilder::ADDSUBPOp}, {0xD6, 1, &OpDispatchBuilder::MOVQ2DQ}, {0xC2, 1, &OpDispatchBuilder::InsertScalarFCMPOp}, {0xE6, 1, &OpDispatchBuilder::Vector_CVT_Float_To_Int<8, true, true>}, @@ -262,7 +262,7 @@ constexpr std::tuple OpDisp {0xC5, 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::PExtrOp, OpSize::i16Bit>}, {0xC6, 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::SHUFOp, OpSize::i64Bit>}, - {0xD0, 1, &OpDispatchBuilder::ADDSUBPOp<8>}, + {0xD0, 1, &OpDispatchBuilder::ADDSUBPOp}, {0xD1, 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::PSRLDOp, 2>}, {0xD2, 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::PSRLDOp, 4>}, {0xD3, 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::PSRLDOp, 8>}, diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp index 310650d77..62e3a0edd 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp @@ -2999,7 +2999,7 @@ void OpDispatchBuilder::MOVQ2DQ(OpcodeArgs) { template void OpDispatchBuilder::MOVQ2DQ(OpcodeArgs); template void OpDispatchBuilder::MOVQ2DQ(OpcodeArgs); -Ref OpDispatchBuilder::ADDSUBPOpImpl(OpSize Size, size_t ElementSize, Ref Src1, Ref Src2) { +Ref OpDispatchBuilder::ADDSUBPOpImpl(OpSize Size, IR::OpSize ElementSize, Ref Src1, Ref Src2) { if (CTX->HostFeatures.SupportsFCMA) { if (ElementSize == OpSize::i32Bit) { auto Swizzle = _VRev64(Size, OpSize::i32Bit, Src2); @@ -3016,7 +3016,7 @@ Ref OpDispatchBuilder::ADDSUBPOpImpl(OpSize Size, size_t ElementSize, Ref Src1, } } -template +template void OpDispatchBuilder::ADDSUBPOp(OpcodeArgs) { Ref Dest = LoadSource(FPRClass, Op, Op->Dest, Op->Flags); Ref Src = LoadSource(FPRClass, Op, Op->Src[0], Op->Flags); @@ -3028,7 +3028,7 @@ void OpDispatchBuilder::ADDSUBPOp(OpcodeArgs) { template void OpDispatchBuilder::ADDSUBPOp(OpcodeArgs); template void OpDispatchBuilder::ADDSUBPOp(OpcodeArgs); -template +template void OpDispatchBuilder::VADDSUBPOp(OpcodeArgs) { Ref Src1 = LoadSource(FPRClass, Op, Op->Src[0], Op->Flags); Ref Src2 = LoadSource(FPRClass, Op, Op->Src[1], Op->Flags); diff --git a/FEXCore/Source/Interface/IR/IR.json b/FEXCore/Source/Interface/IR/IR.json index 458642414..5a0c98968 100644 --- a/FEXCore/Source/Interface/IR/IR.json +++ b/FEXCore/Source/Interface/IR/IR.json @@ -2150,7 +2150,7 @@ "NumElements": "RegisterSize / ElementSize" }, - "FPR = VXor u8:#RegisterSize, u8:#ElementSize, FPR:$Vector1, FPR:$Vector2": { + "FPR = VXor OpSize:#RegisterSize, OpSize:#ElementSize, FPR:$Vector1, FPR:$Vector2": { "DestSize": "RegisterSize", "NumElements": "RegisterSize / ElementSize" }, diff --git a/FEXCore/Source/Interface/IR/Passes/x87StackOptimizationPass.cpp b/FEXCore/Source/Interface/IR/Passes/x87StackOptimizationPass.cpp index 968aac8f4..6e8dfe4b3 100644 --- a/FEXCore/Source/Interface/IR/Passes/x87StackOptimizationPass.cpp +++ b/FEXCore/Source/Interface/IR/Passes/x87StackOptimizationPass.cpp @@ -880,7 +880,7 @@ void X87StackOptimization::Run(IREmitter* Emit) { Ref High = GetConstant(0b1'000'0000'0000'0000ULL); Ref HelperNode = IREmit->_VCastFromGPR(16, 8, Low); HelperNode = IREmit->_VInsGPR(16, 8, 1, HelperNode, High); - ResultNode = IREmit->_VXor(16, 1, Value, HelperNode); + ResultNode = IREmit->_VXor(OpSize::i128Bit, OpSize::i8Bit, Value, HelperNode); } StoreStackValue(ResultNode); break;