Update the X86 disassembler to use xacquire and xrelease when appropriate.
authorKevin Enderby <enderby@apple.com>
Thu, 20 Jun 2013 22:32:18 +0000 (22:32 +0000)
committerKevin Enderby <enderby@apple.com>
Thu, 20 Jun 2013 22:32:18 +0000 (22:32 +0000)
commit46d7de7a192f43eb568c26c88e2dc2b804c09614
treea1e06e5fe54de1f0c2bcc67026036dd06837e99e
parent1c97082f53f15cca7f7db3a14663ef1f928c4bef
Update the X86 disassembler to use xacquire and xrelease when appropriate.

This is a bit tricky as the xacquire and xrelease hints use the same bytes,
0xf2 and 0xf3, as the repne and rep prefixes.

Fortunately llvm has different llvm MCInst Opcode enums for rep/xrelease
and repne/xacquire. So to make this work a boolean was added the
InternalInstruction struct as part of the Prefix state which is set with the
added logic in readPrefixes() when decoding an instruction to determine
if these prefix bytes are to be disassembled as xacquire or xrelease.  Then
we let the matcher pick the normal prefix instructionID and we change the
Opcode after that when it is set into the MCInst being created.

rdar://11019859

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184490 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/Disassembler/X86Disassembler.cpp
lib/Target/X86/Disassembler/X86DisassemblerDecoder.c
lib/Target/X86/Disassembler/X86DisassemblerDecoder.h
test/MC/Disassembler/X86/simple-tests.txt