AVX128: Implement support for variable vpermil{ps,pd}

This commit is contained in:
Ryan Houdek 2024-06-20 09:54:07 -07:00 committed by Alyssa Rosenzweig
parent 563bf342d5
commit 1d41002dfe
2 changed files with 12 additions and 2 deletions

View File

@ -1203,6 +1203,9 @@ public:
void AVX128_VTESTP(OpcodeArgs);
void AVX128_PTest(OpcodeArgs);
template<size_t ElementSize>
void AVX128_VPERMILReg(OpcodeArgs);
// End of AVX 128-bit implementation
void InvalidOp(OpcodeArgs);

View File

@ -263,8 +263,8 @@ void OpDispatchBuilder::InstallAVX128Handlers() {
{OPD(2, 0b01, 0x09), 1, &OpDispatchBuilder::AVX128_VPSIGN<2>},
{OPD(2, 0b01, 0x0A), 1, &OpDispatchBuilder::AVX128_VPSIGN<4>},
{OPD(2, 0b01, 0x0B), 1, &OpDispatchBuilder::AVX128_VPMULHRSW},
// TODO: {OPD(2, 0b01, 0x0C), 1, &OpDispatchBuilder::VPERMILRegOp<4>},
// TODO: {OPD(2, 0b01, 0x0D), 1, &OpDispatchBuilder::VPERMILRegOp<8>},
{OPD(2, 0b01, 0x0C), 1, &OpDispatchBuilder::AVX128_VPERMILReg<4>},
{OPD(2, 0b01, 0x0D), 1, &OpDispatchBuilder::AVX128_VPERMILReg<8>},
{OPD(2, 0b01, 0x0E), 1, &OpDispatchBuilder::AVX128_VTESTP<OpSize::i32Bit>},
{OPD(2, 0b01, 0x0F), 1, &OpDispatchBuilder::AVX128_VTESTP<OpSize::i64Bit>},
@ -2209,4 +2209,11 @@ void OpDispatchBuilder::AVX128_PTest(OpcodeArgs) {
ZeroPF_AF();
}
template<size_t ElementSize>
void OpDispatchBuilder::AVX128_VPERMILReg(OpcodeArgs) {
AVX128_VectorBinaryImpl(Op, GetSrcSize(Op), ElementSize, [this](size_t _ElementSize, Ref Src, Ref Indices) {
return VPERMILRegOpImpl(OpSize::i128Bit, ElementSize, Src, Indices);
});
}
} // namespace FEXCore::IR