diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher.h b/FEXCore/Source/Interface/Core/OpcodeDispatcher.h index 416bec3b4..94efddd47 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher.h +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher.h @@ -799,6 +799,7 @@ public: void VPFCMPOp(OpcodeArgs, uint8_t CompType); void PI2FWOp(OpcodeArgs); void PF2IWOp(OpcodeArgs); + void PF2IDOp(OpcodeArgs); void PMULHRWOp(OpcodeArgs); diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher/DDDTables.h b/FEXCore/Source/Interface/Core/OpcodeDispatcher/DDDTables.h index 3aa58f579..413d7a6cf 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher/DDDTables.h +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher/DDDTables.h @@ -7,7 +7,7 @@ constexpr DispatchTableEntry OpDispatch_DDDTable[] = { {0x0C, 1, &OpDispatchBuilder::PI2FWOp}, {0x0D, 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::Vector_CVT_Int_To_Float, OpSize::i32Bit, false, false>}, {0x1C, 1, &OpDispatchBuilder::PF2IWOp}, - {0x1D, 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::Vector_CVT_Float_To_Int, OpSize::i32Bit, false, false>}, + {0x1D, 1, &OpDispatchBuilder::PF2IDOp}, {0x86, 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::VectorUnaryOp, IR::OP_VFRECPPRECISION, OpSize::i32Bit>}, {0x87, 1, &OpDispatchBuilder::Bind<&OpDispatchBuilder::RSqrt3DNowOp, false>}, diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp index 0f15a367f..0b5c0e778 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher/Vector.cpp @@ -3592,6 +3592,16 @@ void OpDispatchBuilder::PF2IWOp(OpcodeArgs) { StoreResultFPR_WithOpSize(Op, Op->Dest, Src, Size); } +void OpDispatchBuilder::PF2IDOp(OpcodeArgs) { + Ref Src = LoadSourceFPR(Op, Op->Src[0], Op->Flags); + + const auto Size = OpSizeFromDst(Op); + + Src = _Vector_FToZS(Size, OpSize::i32Bit, Src); + + StoreResultFPR_WithOpSize(Op, Op->Dest, Src, Size); +} + void OpDispatchBuilder::PMULHRWOp(OpcodeArgs) { const auto Size = OpSizeFromSrc(Op);