Merge pull request #3109 from lioncash/shlx

OpcodeDispatcher: Improve output of SHLX/SHRX/SARX
This commit is contained in:
Ryan Houdek authored and GitHub committed 2023-09-15 18:49:36 -07:00
commit ad8b0c673f
2 files changed
+77 -10

No files matched your search

@@ -2627,12 +2627,16 @@ void OpDispatchBuilder::BLSRBMIOp(OpcodeArgs) {
GenerateFlags_BLSR(Op, Result, Src); GenerateFlags_BLSR(Op, Result, Src);
} }
// Handles SARX, SHLX, and SHRX
void OpDispatchBuilder::BMI2Shift(OpcodeArgs) { void OpDispatchBuilder::BMI2Shift(OpcodeArgs) {
// Handles SARX, SHLX, and SHRX // In the event the source is a memory operand, use the
// exact width instead of the GPR size.
auto* Src = LoadSource(GPRClass, Op, Op->Src[0], Op->Flags, -1); const auto GPRSize = CTX->GetGPRSize();
auto* Shift = LoadSource(GPRClass, Op, Op->Src[1], Op->Flags, -1);
const auto Size = GetSrcSize(Op); const auto Size = GetSrcSize(Op);
const auto SrcSize = Op->Src[0].IsGPR() ? GPRSize : Size;
auto* Src = LoadSource_WithOpSize(GPRClass, Op, Op->Src[0], SrcSize, Op->Flags, -1);
auto* Shift = LoadSource_WithOpSize(GPRClass, Op, Op->Src[1], GPRSize, Op->Flags, -1);
auto* Result = [&]() -> OrderedNode* { auto* Result = [&]() -> OrderedNode* {
// SARX // SARX
+69 -6
View File
@@ -4036,6 +4036,16 @@
] ]
}, },
"shlx eax, ebx, ecx": { "shlx eax, ebx, ecx": {
"ExpectedInstructionCount": 1,
"Optimal": "Yes",
"Comment": [
"Map 2 0b01 0xf7 32-bit"
],
"ExpectedArm64ASM": [
"lsl w4, w7, w5"
]
},
"shlx eax, [ebx], ecx": {
"ExpectedInstructionCount": 3, "ExpectedInstructionCount": 3,
"Optimal": "No", "Optimal": "No",
"Comment": [ "Comment": [
@@ -4043,8 +4053,8 @@
], ],
"ExpectedArm64ASM": [ "ExpectedArm64ASM": [
"mov w20, w7", "mov w20, w7",
"mov w21, w5", "ldr w20, [x20]",
"lsl w4, w20, w21" "lsl w4, w20, w5"
] ]
}, },
"shlx rax, rbx, rcx": { "shlx rax, rbx, rcx": {
@@ -4057,7 +4067,28 @@
"lsl x4, x7, x5" "lsl x4, x7, x5"
] ]
}, },
"shlx rax, [rbx], rcx": {
"ExpectedInstructionCount": 2,
"Optimal": "Yes",
"Comment": [
"Map 2 0b01 0xf7 64-bit"
],
"ExpectedArm64ASM": [
"ldr x20, [x7]",
"lsl x4, x20, x5"
]
},
"sarx eax, ebx, ecx": { "sarx eax, ebx, ecx": {
"ExpectedInstructionCount": 1,
"Optimal": "Yes",
"Comment": [
"Map 2 0b10 0xf7 32-bit"
],
"ExpectedArm64ASM": [
"asr w4, w7, w5"
]
},
"sarx eax, [ebx], ecx": {
"ExpectedInstructionCount": 3, "ExpectedInstructionCount": 3,
"Optimal": "No", "Optimal": "No",
"Comment": [ "Comment": [
@@ -4065,8 +4096,8 @@
], ],
"ExpectedArm64ASM": [ "ExpectedArm64ASM": [
"mov w20, w7", "mov w20, w7",
"mov w21, w5", "ldr w20, [x20]",
"asr w4, w20, w21" "asr w4, w20, w5"
] ]
}, },
"sarx rax, rbx, rcx": { "sarx rax, rbx, rcx": {
@@ -4079,7 +4110,28 @@
"asr x4, x7, x5" "asr x4, x7, x5"
] ]
}, },
"sarx rax, [rbx], rcx": {
"ExpectedInstructionCount": 2,
"Optimal": "Yes",
"Comment": [
"Map 2 0b10 0xf7 64-bit"
],
"ExpectedArm64ASM": [
"ldr x20, [x7]",
"asr x4, x20, x5"
]
},
"shrx eax, ebx, ecx": { "shrx eax, ebx, ecx": {
"ExpectedInstructionCount": 1,
"Optimal": "Yes",
"Comment": [
"Map 2 0b11 0xf7 32-bit"
],
"ExpectedArm64ASM": [
"lsr w4, w7, w5"
]
},
"shrx eax, [ebx], ecx": {
"ExpectedInstructionCount": 3, "ExpectedInstructionCount": 3,
"Optimal": "No", "Optimal": "No",
"Comment": [ "Comment": [
@@ -4087,8 +4139,8 @@
], ],
"ExpectedArm64ASM": [ "ExpectedArm64ASM": [
"mov w20, w7", "mov w20, w7",
"mov w21, w5", "ldr w20, [x20]",
"lsr w4, w20, w21" "lsr w4, w20, w5"
] ]
}, },
"shrx rax, rbx, rcx": { "shrx rax, rbx, rcx": {
@@ -4100,6 +4152,17 @@
"ExpectedArm64ASM": [ "ExpectedArm64ASM": [
"lsr x4, x7, x5" "lsr x4, x7, x5"
] ]
},
"shrx rax, [rbx], rcx": {
"ExpectedInstructionCount": 2,
"Optimal": "Yes",
"Comment": [
"Map 2 0b11 0xf7 64-bit"
],
"ExpectedArm64ASM": [
"ldr x20, [x7]",
"lsr x4, x20, x5"
]
} }
} }
} }