diff options
author | Razvan A Lupusoru <razvan.a.lupusoru@intel.com> | 2014-02-25 17:41:08 -0800 |
---|---|---|
committer | Ian Rogers <irogers@google.com> | 2014-03-26 16:20:09 -0700 |
commit | 99ad7230ccaace93bf323dea9790f35fe991a4a2 (patch) | |
tree | 095705c674703953bf4c50f6a30a105420b770b5 /disassembler/disassembler_x86.cc | |
parent | a9e3d2ccfdbf7f4c7b1508bcb2b774037399b1d4 (diff) | |
download | art-99ad7230ccaace93bf323dea9790f35fe991a4a2.tar.gz art-99ad7230ccaace93bf323dea9790f35fe991a4a2.tar.bz2 art-99ad7230ccaace93bf323dea9790f35fe991a4a2.zip |
Relaxed memory barriers for x86
X86 provides stronger memory guarantees and thus the memory barriers can be
optimized. This patch ensures that all memory barriers for x86 are treated
as scheduling barriers. And in cases where a barrier is needed (StoreLoad case),
an mfence is used.
Change-Id: I13d02bf3f152083ba9f358052aedb583b0d48640
Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
Diffstat (limited to 'disassembler/disassembler_x86.cc')
-rw-r--r-- | disassembler/disassembler_x86.cc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/disassembler/disassembler_x86.cc b/disassembler/disassembler_x86.cc index ab0ee52205..4a03ebea0c 100644 --- a/disassembler/disassembler_x86.cc +++ b/disassembler/disassembler_x86.cc @@ -226,6 +226,12 @@ DISASSEMBLER_ENTRY(cmp, opcode << "j" << condition_codes[*instr & 0xF]; branch_bytes = 1; break; + case 0x86: case 0x87: + opcode << "xchg"; + store = true; + has_modrm = true; + byte_operand = (*instr == 0x86); + break; case 0x88: opcode << "mov"; store = true; has_modrm = true; byte_operand = true; break; case 0x89: opcode << "mov"; store = true; has_modrm = true; break; case 0x8A: opcode << "mov"; load = true; has_modrm = true; byte_operand = true; break; |