OpcodeDispatcher: Fix pf2id overflow saturation

This commit is contained in:
Simon Scherer committed 2026-08-27 11:50:45 +02:00
1 parent 926a871dd4
commit b21a8dafa7
3 files changed
+12 -1

No files matched your search

@@ -799,6 +799,7 @@ public:
void VPFCMPOp(OpcodeArgs, uint8_t CompType);
void PI2FWOp(OpcodeArgs);
void PF2IWOp(OpcodeArgs);
void PF2IDOp(OpcodeArgs);
void PMULHRWOp(OpcodeArgs);
@@ -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>},
@@ -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);