mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-24 20:00:41 +02:00
Implements SplatVector2/4 in x86 JIT
This commit is contained in:
1 parent
2858adc0d3
commit
a684bc1aff
1 file changed
+23
@@ -1368,6 +1368,29 @@ void *JITCore::CompileCode([[maybe_unused]] FEXCore::IR::IRListView<true> const
|
||||
pinsrq(Dst, rdx, 1);
|
||||
break;
|
||||
}
|
||||
case IR::OP_SPLATVECTOR2:
|
||||
case IR::OP_SPLATVECTOR4: {
|
||||
auto Op = IROp->C<IR::IROp_SplatVector2>();
|
||||
LogMan::Throw::A(OpSize <= 16, "Can't handle a vector of size: %d", OpSize);
|
||||
uint8_t NumElements{};
|
||||
if (IROp->Op == OP_SPLATVECTOR4)
|
||||
NumElements = 4;
|
||||
else if (IROp->Op == OP_SPLATVECTOR2)
|
||||
NumElements = 2;
|
||||
uint8_t ElementSize = OpSize / NumElements;
|
||||
switch (ElementSize) {
|
||||
case 4:
|
||||
vmovd(GetDst(Node), GetSrc<RA_32>(Op->Header.Args[0].ID()).cvt32());
|
||||
shufps(GetDst(Node), GetDst(Node), 0);
|
||||
break;
|
||||
case 8:
|
||||
vmovq(GetDst(Node), GetSrc<RA_64>(Op->Header.Args[0].ID()).cvt64());
|
||||
shufpd(GetDst(Node), GetDst(Node), 0);
|
||||
break;
|
||||
default: LogMan::Msg::A("Unknown Element Size: %d", ElementSize); break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case IR::OP_EXTRACTELEMENT: {
|
||||
auto Op = IROp->C<IR::IROp_ExtractElement>();
|
||||
|
||||
|
||||
Reference in new issue
Block a user