mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-26 13:10:34 +00:00
Fix the x86 disassembler to at least print the lock prefix if it is the first
prefix. Added a FIXME to remind us this still does not work when it is not the first prefix. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152414 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
75c0d8e0d8
commit
faf72ffda3
@ -312,6 +312,13 @@ static int readPrefixes(struct InternalInstruction* insn) {
|
||||
|
||||
if (consumeByte(insn, &byte))
|
||||
return -1;
|
||||
|
||||
// If the the first byte is a LOCK prefix break and let it be disassembled
|
||||
// as a lock "instruction", by creating an <MCInst #xxxx LOCK_PREFIX>.
|
||||
// FIXME there is currently no way to get the disassembler to print the
|
||||
// lock prefix if it is not the first byte.
|
||||
if (insn->readerCursor - 1 == insn->startLocation && byte == 0xf0)
|
||||
break;
|
||||
|
||||
switch (byte) {
|
||||
case 0xf0: /* LOCK */
|
||||
|
@ -724,3 +724,8 @@
|
||||
|
||||
# CHECK: vpermil2ps $1, 4(%rax), %xmm2, %xmm3, %xmm0
|
||||
0xc4 0xe3 0xe1 0x48 0x40 0x04 0x21
|
||||
|
||||
# rdar://8812056 lldb doesn't print the x86 lock prefix when disassembling
|
||||
# CHECK: lock
|
||||
# CHECK: xaddq %rcx, %rbx
|
||||
0xf0 0x48 0x0f 0xc1 0xcb
|
||||
|
@ -405,13 +405,13 @@ RecognizableInstr::filter_ret RecognizableInstr::filter() const {
|
||||
return FILTER_STRONG;
|
||||
|
||||
|
||||
// Filter out artificial instructions
|
||||
// Filter out artificial instructions but leave in the LOCK_PREFIX so it is
|
||||
// printed as a separate "instruction".
|
||||
|
||||
if (Name.find("_Int") != Name.npos ||
|
||||
Name.find("Int_") != Name.npos ||
|
||||
Name.find("_NOREX") != Name.npos ||
|
||||
Name.find("2SDL") != Name.npos ||
|
||||
Name == "LOCK_PREFIX")
|
||||
Name.find("2SDL") != Name.npos)
|
||||
return FILTER_STRONG;
|
||||
|
||||
// Filter out instructions with segment override prefixes.
|
||||
|
Loading…
Reference in New Issue
Block a user