[PATCH] D49001: [X86][Disassembler] Fix LOCK prefix disassembler support
Phabricator via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 5 16:37:52 PDT 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL336400: [X86][Disassembler] Fix LOCK prefix disassembler support (authored by maks, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D49001?vs=154324&id=154334#toc
Repository:
rL LLVM
https://reviews.llvm.org/D49001
Files:
llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp
llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp
llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h
llvm/trunk/test/MC/Disassembler/X86/prefixes.txt
Index: llvm/trunk/test/MC/Disassembler/X86/prefixes.txt
===================================================================
--- llvm/trunk/test/MC/Disassembler/X86/prefixes.txt
+++ llvm/trunk/test/MC/Disassembler/X86/prefixes.txt
@@ -101,6 +101,10 @@
# CHECK: movq %mm0, %mm1
0x46 0x0f 0x7f 0xc1
+# Test that lock prefix is not dropped if it's not the first prefix
+# CHECK: lock cmpxchgw %di, (%rcx)
+0x66 0xf0 0x0f 0xb1 0x39
+
# Test that a prefix on it's own works. It's debatable as to if this is
# something that is considered valid, but however as LLVM's own disassembler
# has decided to disassemble prefixes as being separate opcodes, it therefore
Index: llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp
===================================================================
--- llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp
+++ llvm/trunk/lib/Target/X86/Disassembler/X86Disassembler.cpp
@@ -247,6 +247,8 @@
// It should not be 'pause' f3 90
InternalInstr.opcode != 0x90)
Flags |= X86::IP_HAS_REPEAT;
+ if (InternalInstr.hasLockPrefix)
+ Flags |= X86::IP_HAS_LOCK;
}
Instr.setFlags(Flags);
}
Index: llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h
===================================================================
--- llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h
+++ llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h
@@ -563,6 +563,8 @@
bool hasAdSize;
// Operand-size override
bool hasOpSize;
+ // Lock prefix
+ bool hasLockPrefix;
// The repeat prefix if any
uint8_t repeatPrefix;
Index: llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp
===================================================================
--- llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp
+++ llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp
@@ -298,6 +298,9 @@
static void setPrefixPresent(struct InternalInstruction *insn, uint8_t prefix) {
uint8_t nextByte;
switch (prefix) {
+ case 0xf0:
+ insn->hasLockPrefix = true;
+ break;
case 0xf2:
case 0xf3:
if (lookAtByte(insn, &nextByte))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49001.154334.patch
Type: text/x-patch
Size: 2221 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180705/752952cc/attachment.bin>
More information about the llvm-commits
mailing list