x86_64/VectorOps: Separate 128-bit VFCMPNEQ path

This commit is contained in:
lioncash 2022-11-16 19:16:57 +00:00
parent 48900662ae
commit b951f4ad4b

View File

@ -2156,6 +2156,7 @@ DEF_OP(VFCMPNEQ) {
const auto OpSize = IROp->Size;
const auto ElementSize = Op->Header.ElementSize;
const auto Is256Bit = OpSize == Core::CPUState::XMM_AVX_REG_SIZE;
const auto IsScalar = ElementSize == OpSize;
const auto Dst = GetDst(Node);
@ -2174,18 +2175,21 @@ DEF_OP(VFCMPNEQ) {
LOGMAN_MSG_A_FMT("Unsupported element size: {}", ElementSize);
break;
}
}
else {
const auto DstYMM = ToYMM(Dst);
const auto Vector1YMM = ToYMM(Vector1);
const auto Vector2YMM = ToYMM(Vector2);
} else {
switch (ElementSize) {
case 4:
vcmpps(DstYMM, Vector1YMM, Vector2YMM, 4);
if (Is256Bit) {
vcmpps(ToYMM(Dst), ToYMM(Vector1), ToYMM(Vector2), 4);
} else {
vcmpps(Dst, Vector1, Vector2, 4);
}
break;
case 8:
vcmppd(DstYMM, Vector1YMM, Vector2YMM, 4);
if (Is256Bit) {
vcmppd(ToYMM(Dst), ToYMM(Vector1), ToYMM(Vector2), 4);
} else {
vcmppd(Dst, Vector1, Vector2, 4);
}
break;
default:
LOGMAN_MSG_A_FMT("Unsupported element size: {}", ElementSize);