mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-06 10:00:16 +02:00
VectorOps: Make use of unpredicated immediate shifts
Same behavior, just without introducing a predicate register dependency.
This commit is contained in:
1 parent
12e8cf008a
commit
98d45a6a9b
4 files changed
+37
-72
No files matched your search
@@ -3181,19 +3181,12 @@ DEF_OP(VUShrI) {
|
||||
movi(ARMEmitter::SubRegSize::i64Bit, Dst.Q(), 0);
|
||||
} else {
|
||||
if (HostSupportsSVE256 && Is256Bit) {
|
||||
const auto Mask = PRED_TMP_32B.Merging();
|
||||
|
||||
if (BitShift == 0) {
|
||||
if (Dst != Vector) {
|
||||
mov(Dst.Z(), Vector.Z());
|
||||
}
|
||||
} else {
|
||||
// SVE LSR is destructive, so lets set up the destination if
|
||||
// Vector doesn't already alias it.
|
||||
if (Dst != Vector) {
|
||||
movprfx(Dst.Z(), Vector.Z());
|
||||
}
|
||||
lsr(SubRegSize, Dst.Z(), Mask, Dst.Z(), BitShift);
|
||||
lsr(SubRegSize, Dst.Z(), Vector.Z(), BitShift);
|
||||
}
|
||||
} else {
|
||||
if (BitShift == 0) {
|
||||
@@ -3222,19 +3215,12 @@ DEF_OP(VSShrI) {
|
||||
const auto Vector = GetVReg(Op->Vector);
|
||||
|
||||
if (HostSupportsSVE256 && Is256Bit) {
|
||||
const auto Mask = PRED_TMP_32B.Merging();
|
||||
|
||||
if (Shift == 0) {
|
||||
if (Dst != Vector) {
|
||||
mov(Dst.Z(), Vector.Z());
|
||||
}
|
||||
} else {
|
||||
// SVE ASR is destructive, so lets set up the destination if
|
||||
// Vector doesn't already alias it.
|
||||
if (Dst != Vector) {
|
||||
movprfx(Dst.Z(), Vector.Z());
|
||||
}
|
||||
asr(SubRegSize, Dst.Z(), Mask, Dst.Z(), Shift);
|
||||
asr(SubRegSize, Dst.Z(), Vector.Z(), Shift);
|
||||
}
|
||||
} else {
|
||||
if (Shift == 0) {
|
||||
@@ -3264,19 +3250,12 @@ DEF_OP(VShlI) {
|
||||
movi(ARMEmitter::SubRegSize::i64Bit, Dst.Q(), 0);
|
||||
} else {
|
||||
if (HostSupportsSVE256 && Is256Bit) {
|
||||
const auto Mask = PRED_TMP_32B.Merging();
|
||||
|
||||
if (BitShift == 0) {
|
||||
if (Dst != Vector) {
|
||||
mov(Dst.Z(), Vector.Z());
|
||||
}
|
||||
} else {
|
||||
// SVE LSL is destructive, so lets set up the destination if
|
||||
// Vector doesn't already alias it.
|
||||
if (Dst != Vector) {
|
||||
movprfx(Dst.Z(), Vector.Z());
|
||||
}
|
||||
lsl(SubRegSize, Dst.Z(), Mask, Dst.Z(), BitShift);
|
||||
lsl(SubRegSize, Dst.Z(), Vector.Z(), BitShift);
|
||||
}
|
||||
} else {
|
||||
if (BitShift == 0) {
|
||||
|
||||
@@ -325,8 +325,8 @@
|
||||
"smullb z0.s, z17.h, z18.h",
|
||||
"smullt z1.s, z17.h, z18.h",
|
||||
"zip2 z3.s, z0.s, z1.s",
|
||||
"asr z2.s, p7/m, z2.s, #14",
|
||||
"asr z3.s, p7/m, z3.s, #14",
|
||||
"asr z2.s, z2.s, #14",
|
||||
"asr z3.s, z3.s, #14",
|
||||
"mov z4.s, #1",
|
||||
"add z2.s, z2.s, z4.s",
|
||||
"add z3.s, z3.s, z4.s",
|
||||
@@ -366,7 +366,7 @@
|
||||
"and z2.d, z18.d, z2.d",
|
||||
"trn1 z2.b, z2.b, z2.b",
|
||||
"trn1 z2.h, z2.h, z2.h",
|
||||
"lsl z2.b, p7/m, z2.b, #2",
|
||||
"lsl z2.b, z2.b, #2",
|
||||
"mov w20, #0x100",
|
||||
"movk w20, #0x302, lsl #16",
|
||||
"mov z3.s, w20",
|
||||
@@ -404,19 +404,18 @@
|
||||
]
|
||||
},
|
||||
"vpermilpd ymm0, ymm1, ymm2": {
|
||||
"ExpectedInstructionCount": 21,
|
||||
"ExpectedInstructionCount": 20,
|
||||
"Comment": [
|
||||
"Map 2 0b01 0x0d 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z2, z18",
|
||||
"lsr z2.d, p7/m, z2.d, #1",
|
||||
"lsr z2.d, z18.d, #1",
|
||||
"mov z3.d, #1",
|
||||
"and z2.d, z2.d, z3.d",
|
||||
"trn1 z2.b, z2.b, z2.b",
|
||||
"trn1 z2.h, z2.h, z2.h",
|
||||
"trn1 z2.s, z2.s, z2.s",
|
||||
"lsl z2.b, p7/m, z2.b, #3",
|
||||
"lsl z2.b, z2.b, #3",
|
||||
"mov x20, #0x100",
|
||||
"movk x20, #0x302, lsl #16",
|
||||
"movk x20, #0x504, lsl #32",
|
||||
@@ -589,7 +588,7 @@
|
||||
"and z2.d, z17.d, z2.d",
|
||||
"trn1 z2.b, z2.b, z2.b",
|
||||
"trn1 z2.h, z2.h, z2.h",
|
||||
"lsl z2.b, p7/m, z2.b, #2",
|
||||
"lsl z2.b, z2.b, #2",
|
||||
"add z2.b, z2.b, z3.b",
|
||||
"tbl z16.b, {z18.b}, z2.b"
|
||||
]
|
||||
@@ -1162,7 +1161,7 @@
|
||||
"and z2.d, z17.d, z2.d",
|
||||
"trn1 z2.b, z2.b, z2.b",
|
||||
"trn1 z2.h, z2.h, z2.h",
|
||||
"lsl z2.b, p7/m, z2.b, #2",
|
||||
"lsl z2.b, z2.b, #2",
|
||||
"add z2.b, z2.b, z3.b",
|
||||
"tbl z16.b, {z18.b}, z2.b"
|
||||
]
|
||||
|
||||
@@ -3925,13 +3925,12 @@
|
||||
]
|
||||
},
|
||||
"vblendvps ymm0, ymm1, ymm2, ymm3": {
|
||||
"ExpectedInstructionCount": 5,
|
||||
"ExpectedInstructionCount": 4,
|
||||
"Comment": [
|
||||
"Map 3 0b01 0x4a 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z2, z19",
|
||||
"asr z2.s, p7/m, z2.s, #31",
|
||||
"asr z2.s, z19.s, #31",
|
||||
"movprfx z0, z18",
|
||||
"bsl z0.d, z0.d, z17.d, z2.d",
|
||||
"mov z16.d, z0.d"
|
||||
@@ -3949,13 +3948,12 @@
|
||||
]
|
||||
},
|
||||
"vblendvpd ymm0, ymm1, ymm2, ymm3": {
|
||||
"ExpectedInstructionCount": 5,
|
||||
"ExpectedInstructionCount": 4,
|
||||
"Comment": [
|
||||
"Map 3 0b01 0x4b 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z2, z19",
|
||||
"asr z2.d, p7/m, z2.d, #63",
|
||||
"asr z2.d, z19.d, #63",
|
||||
"movprfx z0, z18",
|
||||
"bsl z0.d, z0.d, z17.d, z2.d",
|
||||
"mov z16.d, z0.d"
|
||||
@@ -3973,13 +3971,12 @@
|
||||
]
|
||||
},
|
||||
"vpblendvb ymm0, ymm1, ymm2, ymm3": {
|
||||
"ExpectedInstructionCount": 5,
|
||||
"ExpectedInstructionCount": 4,
|
||||
"Comment": [
|
||||
"Map 3 0b01 0x4c 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z2, z19",
|
||||
"asr z2.b, p7/m, z2.b, #7",
|
||||
"asr z2.b, z19.b, #7",
|
||||
"movprfx z0, z18",
|
||||
"bsl z0.d, z0.d, z17.d, z2.d",
|
||||
"mov z16.d, z0.d"
|
||||
|
||||
@@ -48,13 +48,12 @@
|
||||
]
|
||||
},
|
||||
"vpsrlw ymm0, ymm1, 15": {
|
||||
"ExpectedInstructionCount": 2,
|
||||
"ExpectedInstructionCount": 1,
|
||||
"Comment": [
|
||||
"Map group 12 0b010 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z16, z17",
|
||||
"lsr z16.h, p7/m, z16.h, #15"
|
||||
"lsr z16.h, z17.h, #15"
|
||||
]
|
||||
},
|
||||
"vpsrlw ymm0, ymm1, 16": {
|
||||
@@ -103,23 +102,21 @@
|
||||
]
|
||||
},
|
||||
"vpsraw ymm0, ymm1, 15": {
|
||||
"ExpectedInstructionCount": 2,
|
||||
"ExpectedInstructionCount": 1,
|
||||
"Comment": [
|
||||
"Map group 12 0b100 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z16, z17",
|
||||
"asr z16.h, p7/m, z16.h, #15"
|
||||
"asr z16.h, z17.h, #15"
|
||||
]
|
||||
},
|
||||
"vpsraw ymm0, ymm1, 16": {
|
||||
"ExpectedInstructionCount": 2,
|
||||
"ExpectedInstructionCount": 1,
|
||||
"Comment": [
|
||||
"Map group 12 0b100 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z16, z17",
|
||||
"asr z16.h, p7/m, z16.h, #15"
|
||||
"asr z16.h, z17.h, #15"
|
||||
]
|
||||
},
|
||||
"vpsllw xmm0, xmm1, 0": {
|
||||
@@ -159,13 +156,12 @@
|
||||
]
|
||||
},
|
||||
"vpsllw ymm0, ymm1, 15": {
|
||||
"ExpectedInstructionCount": 2,
|
||||
"ExpectedInstructionCount": 1,
|
||||
"Comment": [
|
||||
"Map group 12 0b110 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z16, z17",
|
||||
"lsl z16.h, p7/m, z16.h, #15"
|
||||
"lsl z16.h, z17.h, #15"
|
||||
]
|
||||
},
|
||||
"vpsllw ymm0, ymm1, 16": {
|
||||
@@ -214,13 +210,12 @@
|
||||
]
|
||||
},
|
||||
"vpsrld ymm0, ymm1, 31": {
|
||||
"ExpectedInstructionCount": 2,
|
||||
"ExpectedInstructionCount": 1,
|
||||
"Comment": [
|
||||
"Map group 13 0b010 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z16, z17",
|
||||
"lsr z16.s, p7/m, z16.s, #31"
|
||||
"lsr z16.s, z17.s, #31"
|
||||
]
|
||||
},
|
||||
"vpsrld ymm0, ymm1, 32": {
|
||||
@@ -269,23 +264,21 @@
|
||||
]
|
||||
},
|
||||
"vpsrad ymm0, ymm1, 31": {
|
||||
"ExpectedInstructionCount": 2,
|
||||
"ExpectedInstructionCount": 1,
|
||||
"Comment": [
|
||||
"Map group 13 0b100 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z16, z17",
|
||||
"asr z16.s, p7/m, z16.s, #31"
|
||||
"asr z16.s, z17.s, #31"
|
||||
]
|
||||
},
|
||||
"vpsrad ymm0, ymm1, 32": {
|
||||
"ExpectedInstructionCount": 2,
|
||||
"ExpectedInstructionCount": 1,
|
||||
"Comment": [
|
||||
"Map group 13 0b100 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z16, z17",
|
||||
"asr z16.s, p7/m, z16.s, #31"
|
||||
"asr z16.s, z17.s, #31"
|
||||
]
|
||||
},
|
||||
"vpslld xmm0, xmm1, 0": {
|
||||
@@ -325,13 +318,12 @@
|
||||
]
|
||||
},
|
||||
"vpslld ymm0, ymm1, 31": {
|
||||
"ExpectedInstructionCount": 2,
|
||||
"ExpectedInstructionCount": 1,
|
||||
"Comment": [
|
||||
"Map group 13 0b110 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z16, z17",
|
||||
"lsl z16.s, p7/m, z16.s, #31"
|
||||
"lsl z16.s, z17.s, #31"
|
||||
]
|
||||
},
|
||||
"vpslld ymm0, ymm1, 32": {
|
||||
@@ -380,13 +372,12 @@
|
||||
]
|
||||
},
|
||||
"vpsrlq ymm0, ymm1, 63": {
|
||||
"ExpectedInstructionCount": 2,
|
||||
"ExpectedInstructionCount": 1,
|
||||
"Comment": [
|
||||
"Map group 14 0b010 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z16, z17",
|
||||
"lsr z16.d, p7/m, z16.d, #63"
|
||||
"lsr z16.d, z17.d, #63"
|
||||
]
|
||||
},
|
||||
"vpsrlq ymm0, ymm1, 64": {
|
||||
@@ -498,13 +489,12 @@
|
||||
]
|
||||
},
|
||||
"vpsllq ymm0, ymm1, 63": {
|
||||
"ExpectedInstructionCount": 2,
|
||||
"ExpectedInstructionCount": 1,
|
||||
"Comment": [
|
||||
"Map group 14 0b110 256-bit"
|
||||
],
|
||||
"ExpectedArm64ASM": [
|
||||
"movprfx z16, z17",
|
||||
"lsl z16.d, p7/m, z16.d, #63"
|
||||
"lsl z16.d, z17.d, #63"
|
||||
]
|
||||
},
|
||||
"vpsllq ymm0, ymm1, 64": {
|
||||
|
||||
Reference in new issue
Block a user