From bcba3700c842fdf7eac33d135b105e3de0b59e15 Mon Sep 17 00:00:00 2001 From: Lioncache Date: Wed, 23 Aug 2023 14:17:25 -0400 Subject: [PATCH] OpcodeDispatcher: Remove redundant moves from VMOVVectorNTOp Zero-extension will automatically occur if necessary upon storing. We can also join the SSE and AVX implementations. --- FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp | 8 ++++---- FEXCore/Source/Interface/Core/OpcodeDispatcher.h | 2 -- .../Interface/Core/OpcodeDispatcher/Vector.cpp | 12 ------------ 3 files changed, 4 insertions(+), 18 deletions(-) diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp index 31b779185..7b492e51e 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.cpp @@ -5851,8 +5851,8 @@ void OpDispatchBuilder::InstallHostSpecificOpcodeHandlers() { {OPD(1, 0b10, 0x2A), 1, &OpDispatchBuilder::AVXCVTGPR_To_FPR<4>}, {OPD(1, 0b11, 0x2A), 1, &OpDispatchBuilder::AVXCVTGPR_To_FPR<8>}, - {OPD(1, 0b00, 0x2B), 1, &OpDispatchBuilder::VMOVVectorNTOp}, - {OPD(1, 0b01, 0x2B), 1, &OpDispatchBuilder::VMOVVectorNTOp}, + {OPD(1, 0b00, 0x2B), 1, &OpDispatchBuilder::MOVVectorNTOp}, + {OPD(1, 0b01, 0x2B), 1, &OpDispatchBuilder::MOVVectorNTOp}, {OPD(1, 0b10, 0x2C), 1, &OpDispatchBuilder::CVTFPR_To_GPR<4, false>}, {OPD(1, 0b11, 0x2C), 1, &OpDispatchBuilder::CVTFPR_To_GPR<8, false>}, @@ -6012,7 +6012,7 @@ void OpDispatchBuilder::InstallHostSpecificOpcodeHandlers() { {OPD(1, 0b10, 0xE6), 1, &OpDispatchBuilder::AVXVector_CVT_Int_To_Float<4, true>}, {OPD(1, 0b11, 0xE6), 1, &OpDispatchBuilder::AVXVector_CVT_Float_To_Int<8, true, true>}, - {OPD(1, 0b01, 0xE7), 1, &OpDispatchBuilder::VMOVVectorNTOp}, + {OPD(1, 0b01, 0xE7), 1, &OpDispatchBuilder::MOVVectorNTOp}, {OPD(1, 0b01, 0xE8), 1, &OpDispatchBuilder::AVXVectorALUOp}, {OPD(1, 0b01, 0xE9), 1, &OpDispatchBuilder::AVXVectorALUOp}, @@ -6077,7 +6077,7 @@ void OpDispatchBuilder::InstallHostSpecificOpcodeHandlers() { {OPD(2, 0b01, 0x28), 1, &OpDispatchBuilder::VPMULLOp<4, true>}, {OPD(2, 0b01, 0x29), 1, &OpDispatchBuilder::AVXVectorALUOp}, - {OPD(2, 0b01, 0x2A), 1, &OpDispatchBuilder::VMOVVectorNTOp}, + {OPD(2, 0b01, 0x2A), 1, &OpDispatchBuilder::MOVVectorNTOp}, {OPD(2, 0b01, 0x2B), 1, &OpDispatchBuilder::VPACKUSOp<4>}, {OPD(2, 0b01, 0x2C), 1, &OpDispatchBuilder::VMASKMOVOp<4, false>}, {OPD(2, 0b01, 0x2D), 1, &OpDispatchBuilder::VMASKMOVOp<8, false>}, diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher.h b/FEXCore/Source/Interface/Core/OpcodeDispatcher.h index 4b7cf8a86..2bc7bc6b9 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.h +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.h @@ -484,8 +484,6 @@ public: void VMOVSDOp(OpcodeArgs); void VMOVSSOp(OpcodeArgs); - void VMOVVectorNTOp(OpcodeArgs); - void VMPSADBWOp(OpcodeArgs); template diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp index 497108c2c..7bf1e87d3 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp @@ -33,18 +33,6 @@ void OpDispatchBuilder::MOVVectorNTOp(OpcodeArgs) { StoreResult(FPRClass, Op, Src, 1, MemoryAccessType::ACCESS_STREAM); } -void OpDispatchBuilder::VMOVVectorNTOp(OpcodeArgs) { - OrderedNode *Src = LoadSource(FPRClass, Op, Op->Src[0], Op->Flags, 1, true, false, MemoryAccessType::ACCESS_STREAM); - const auto Is128BitDest = GetDstSize(Op) == Core::CPUState::XMM_SSE_REG_SIZE; - - if (Op->Dest.IsGPR() && Is128BitDest) { - // Clear the upper lane - Src = _VMov(16, Src); - } - - StoreResult(FPRClass, Op, Src, 1, MemoryAccessType::ACCESS_STREAM); -} - void OpDispatchBuilder::MOVAPS_MOVAPDOp(OpcodeArgs) { OrderedNode *Src = LoadSource(FPRClass, Op, Op->Src[0], Op->Flags, -1); StoreResult(FPRClass, Op, Src, -1);