mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-14 02:00:43 +02:00
AVX: Handle full broadcast in VDPPS
Another trivial case that can be handled without crazy codegen.
This commit is contained in:
1 parent
11fe95d8ea
commit
ee2fb57f4e
2 files changed
+9
-54
No files matched your search
@@ -4679,8 +4679,12 @@ Ref OpDispatchBuilder::VDPPSOpImpl(OpcodeArgs, const X86Tables::DecodedOperand&
|
||||
|
||||
// Now using the destination mask we choose where the result ends up
|
||||
// It can duplicate and zero results
|
||||
Ref Result = ZeroVec;
|
||||
if (DstMask == 0b1111) {
|
||||
// Full broadcast
|
||||
return _VDupElement(DstSize, ElementSize, Temp, 0);
|
||||
}
|
||||
|
||||
Ref Result = ZeroVec;
|
||||
for (size_t i = 0; i < IR::NumElements(DstSize, ElementSize); ++i) {
|
||||
const auto Bit = 1U << (i % 4);
|
||||
|
||||
@@ -4688,7 +4692,6 @@ Ref OpDispatchBuilder::VDPPSOpImpl(OpcodeArgs, const X86Tables::DecodedOperand&
|
||||
Result = _VInsElement(DstSize, ElementSize, i, 0, Result, Temp);
|
||||
}
|
||||
}
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
@@ -2846,7 +2846,7 @@
|
||||
]
|
||||
},
|
||||
"vdpps ymm0, ymm1, ymm2, 11111111b": {
|
||||
"ExpectedInstructionCount": 61,
|
||||
"ExpectedInstructionCount": 13,
|
||||
"Comment": [
|
||||
"Map 3 0b01 0x40 128-bit"
|
||||
],
|
||||
@@ -2860,58 +2860,10 @@
|
||||
"splice z3.d, p6, z3.d, z1.d",
|
||||
"movprfx z0, z3",
|
||||
"faddp z0.s, p7/m, z0.s, z2.s",
|
||||
"uzp1 z3.s, z0.s, z0.s",
|
||||
"uzp1 z2.s, z0.s, z0.s",
|
||||
"uzp2 z1.s, z0.s, z0.s",
|
||||
"splice z3.d, p6, z3.d, z1.d",
|
||||
"mov z1.s, s3",
|
||||
"mrs x0, nzcv",
|
||||
"index z0.s, #-4, #1",
|
||||
"cmpeq p0.s, p7/z, z0.s, #-4",
|
||||
"mov z2.s, p0/m, z1.s",
|
||||
"msr nzcv, x0",
|
||||
"mov z1.s, s3",
|
||||
"mrs x0, nzcv",
|
||||
"index z0.s, #-4, #1",
|
||||
"cmpeq p0.s, p7/z, z0.s, #-3",
|
||||
"mov z2.s, p0/m, z1.s",
|
||||
"msr nzcv, x0",
|
||||
"mov z1.s, s3",
|
||||
"mrs x0, nzcv",
|
||||
"index z0.s, #-4, #1",
|
||||
"cmpeq p0.s, p7/z, z0.s, #-2",
|
||||
"mov z2.s, p0/m, z1.s",
|
||||
"msr nzcv, x0",
|
||||
"mov z1.s, s3",
|
||||
"mrs x0, nzcv",
|
||||
"index z0.s, #-4, #1",
|
||||
"cmpeq p0.s, p7/z, z0.s, #-1",
|
||||
"mov z2.s, p0/m, z1.s",
|
||||
"msr nzcv, x0",
|
||||
"mov z1.s, s3",
|
||||
"mrs x0, nzcv",
|
||||
"index z0.s, #-4, #1",
|
||||
"cmpeq p0.s, p7/z, z0.s, #0",
|
||||
"mov z2.s, p0/m, z1.s",
|
||||
"msr nzcv, x0",
|
||||
"mov z1.s, s3",
|
||||
"mrs x0, nzcv",
|
||||
"index z0.s, #-4, #1",
|
||||
"cmpeq p0.s, p7/z, z0.s, #1",
|
||||
"mov z2.s, p0/m, z1.s",
|
||||
"msr nzcv, x0",
|
||||
"mov z1.s, s3",
|
||||
"mrs x0, nzcv",
|
||||
"index z0.s, #-4, #1",
|
||||
"cmpeq p0.s, p7/z, z0.s, #2",
|
||||
"mov z2.s, p0/m, z1.s",
|
||||
"msr nzcv, x0",
|
||||
"mov z1.s, s3",
|
||||
"mov z16.d, z2.d",
|
||||
"mrs x0, nzcv",
|
||||
"index z0.s, #-4, #1",
|
||||
"cmpeq p0.s, p7/z, z0.s, #3",
|
||||
"mov z16.s, p0/m, z1.s",
|
||||
"msr nzcv, x0"
|
||||
"splice z2.d, p6, z2.d, z1.d",
|
||||
"mov z16.s, s2"
|
||||
]
|
||||
},
|
||||
"vdppd xmm0, xmm1, xmm2, 00000000b": {
|
||||
|
||||
Reference in new issue
Block a user