[llvm] 91a55cf - [X86][MC] Not decode 0xf3 as rep prefix if it's right before REX2
Shengchen Kan via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 13 08:27:03 PDT 2024
Author: Shengchen Kan
Date: 2024-06-13T23:26:33+08:00
New Revision: 91a55cf5adbe37d33dc7b3b90de4bbb0b90761a1
URL: https://github.com/llvm/llvm-project/commit/91a55cf5adbe37d33dc7b3b90de4bbb0b90761a1
DIFF: https://github.com/llvm/llvm-project/commit/91a55cf5adbe37d33dc7b3b90de4bbb0b90761a1.diff
LOG: [X86][MC] Not decode 0xf3 as rep prefix if it's right before REX2
This fixes https://github.com/llvm/llvm-project/issues/95412
Added:
Modified:
llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
llvm/test/MC/Disassembler/X86/apx/rex2-format.txt
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
index 0ff440bdbe0de..6272e2d270f25 100644
--- a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
+++ b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
@@ -284,7 +284,10 @@ static int readPrefixes(struct InternalInstruction *insn) {
// it's not mandatory prefix
// 3. if (nextByte >= 0x40 && nextByte <= 0x4f) it's REX and we need
// 0x0f exactly after it to be mandatory prefix
- if (isREX(insn, nextByte) || nextByte == 0x0f || nextByte == 0x66)
+ // 4. if (nextByte == 0xd5) it's REX2 and we need
+ // 0x0f exactly after it to be mandatory prefix
+ if (isREX(insn, nextByte) || isREX2(insn, nextByte) || nextByte == 0x0f ||
+ nextByte == 0x66)
// The last of 0xf2 /0xf3 is mandatory prefix
insn->mandatoryPrefix = byte;
insn->repeatPrefix = byte;
diff --git a/llvm/test/MC/Disassembler/X86/apx/rex2-format.txt b/llvm/test/MC/Disassembler/X86/apx/rex2-format.txt
index 7412e234bff36..93cc71ac0a620 100644
--- a/llvm/test/MC/Disassembler/X86/apx/rex2-format.txt
+++ b/llvm/test/MC/Disassembler/X86/apx/rex2-format.txt
@@ -21,10 +21,10 @@
# INTEL: movsxd r17, r16d
0xd5,0x58,0x63,0xc8
-# ATT: rep
-# ATT-SAME: popcntl %r16d, %r17d
-# INTEL: rep
-# INTEL-SAME: popcnt r17d, r16d
+# ATT-NOT: rep
+# ATT: popcntl %r16d, %r17d
+# INTEL-NOT: rep
+# INTEL: popcnt r17d, r16d
0xf3,0xd5,0xd0,0xb8,0xc8
## MRMSrcRegCC
More information about the llvm-commits
mailing list