From c19d489c9ae267d343c40b35796015e2eef0dc24 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Tue, 18 Jun 2024 04:46:54 -0700 Subject: [PATCH] AVX128: Implement support for vinsertps This one actually reuses the core base implementation which is nice. --- FEXCore/Source/Interface/Core/OpcodeDispatcher.h | 1 + FEXCore/Source/Interface/Core/OpcodeDispatcher/AVX_128.cpp | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher.h b/FEXCore/Source/Interface/Core/OpcodeDispatcher.h index 4d218c951..cda2c19d0 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.h +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.h @@ -1087,6 +1087,7 @@ public: void AVX128_VPSLLDQ(OpcodeArgs); void AVX128_VINSERT(OpcodeArgs); + void AVX128_VINSERTPS(OpcodeArgs); // End of AVX 128-bit implementation diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher/AVX_128.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher/AVX_128.cpp index 0a4004f82..725c34c28 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher/AVX_128.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher/AVX_128.cpp @@ -356,7 +356,7 @@ void OpDispatchBuilder::InstallAVX128Handlers() { {OPD(3, 0b01, 0x18), 1, &OpDispatchBuilder::AVX128_VINSERT}, // TODO: {OPD(3, 0b01, 0x19), 1, &OpDispatchBuilder::VEXTRACT128Op}, {OPD(3, 0b01, 0x20), 1, &OpDispatchBuilder::AVX128_VPINSRB}, - // TODO: {OPD(3, 0b01, 0x21), 1, &OpDispatchBuilder::VINSERTPSOp}, + {OPD(3, 0b01, 0x21), 1, &OpDispatchBuilder::VINSERTPSOp}, {OPD(3, 0b01, 0x22), 1, &OpDispatchBuilder::AVX128_VPINSRDQ}, {OPD(3, 0b01, 0x38), 1, &OpDispatchBuilder::AVX128_VINSERT}, @@ -1369,4 +1369,9 @@ void OpDispatchBuilder::AVX128_VINSERT(OpcodeArgs) { AVX128_StoreResult_WithOpSize(Op, Op->Dest, Result); } +void OpDispatchBuilder::AVX128_VINSERTPS(OpcodeArgs) { + Ref Result = InsertPSOpImpl(Op, Op->Src[0], Op->Src[1], Op->Src[2]); + AVX128_StoreResult_WithOpSize(Op, Op->Dest, AVX128_Zext(Result)); +} + } // namespace FEXCore::IR