diff options
Diffstat (limited to 'llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp')
-rw-r--r-- | llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp index c3eae29..c271774 100644 --- a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp +++ b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp @@ -329,6 +329,14 @@ static int readPrefixes(struct InternalInstruction *insn) { break; } + if (isREX(insn, byte)) { + insn->rexPrefix = byte; + isPrefix = true; + LLVM_DEBUG(dbgs() << format("Found REX prefix 0x%hhx", byte)); + } else if (isPrefix) { + insn->rexPrefix = 0; + } + if (isPrefix) LLVM_DEBUG(dbgs() << format("Found prefix 0x%hhx", byte)); } @@ -506,11 +514,6 @@ static int readPrefixes(struct InternalInstruction *insn) { LLVM_DEBUG(dbgs() << format("Found REX2 prefix 0x%hhx 0x%hhx", insn->rex2ExtensionPrefix[0], insn->rex2ExtensionPrefix[1])); - } else if (isREX(insn, byte)) { - if (peek(insn, nextByte)) - return -1; - insn->rexPrefix = byte; - LLVM_DEBUG(dbgs() << format("Found REX prefix 0x%hhx", byte)); } else --insn->readerCursor; |