summaryrefslogtreecommitdiffstats
path: root/disassembler
diff options
context:
space:
mode:
authorVladimir Marko <vmarko@google.com>2013-12-03 15:25:24 +0000
committerVladimir Marko <vmarko@google.com>2013-12-03 18:32:29 +0000
commit70b797d998f2a28e39f7d6ffc8a07c9cbc47da14 (patch)
treee5607068be133899ff9111e33327e0c2aa525cd1 /disassembler
parent057c74a3a2d50d1247d4e6472763ca6f59060762 (diff)
downloadart-70b797d998f2a28e39f7d6ffc8a07c9cbc47da14.tar.gz
art-70b797d998f2a28e39f7d6ffc8a07c9cbc47da14.tar.bz2
art-70b797d998f2a28e39f7d6ffc8a07c9cbc47da14.zip
Unsafe.compareAndSwapLong() intrinsic for x86.
Change-Id: Idbc5371a62dfdd84485a657d4548990519200205
Diffstat (limited to 'disassembler')
-rw-r--r--disassembler/disassembler_x86.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/disassembler/disassembler_x86.cc b/disassembler/disassembler_x86.cc
index 9ed65cd80a..8781c7a274 100644
--- a/disassembler/disassembler_x86.cc
+++ b/disassembler/disassembler_x86.cc
@@ -520,6 +520,13 @@ DISASSEMBLER_ENTRY(cmp,
case 0xB7: opcode << "movzxw"; has_modrm = true; load = true; break;
case 0xBE: opcode << "movsxb"; has_modrm = true; load = true; break;
case 0xBF: opcode << "movsxw"; has_modrm = true; load = true; break;
+ case 0xC7:
+ static const char* x0FxC7_opcodes[] = { "unknown-0f-c7", "cmpxchg8b", "unknown-0f-c7", "unknown-0f-c7", "unknown-0f-c7", "unknown-0f-c7", "unknown-0f-c7", "unknown-0f-c7" };
+ modrm_opcodes = x0FxC7_opcodes;
+ has_modrm = true;
+ reg_is_opcode = true;
+ store = true;
+ break;
case 0xC8: case 0xC9: case 0xCA: case 0xCB: case 0xCC: case 0xCD: case 0xCE: case 0xCF:
opcode << "bswap";
reg_in_opcode = true;