summaryrefslogtreecommitdiffstats
path: root/disassembler/disassembler_x86.cc
diff options
context:
space:
mode:
authorRazvan A Lupusoru <razvan.a.lupusoru@intel.com>2014-02-25 17:41:08 -0800
committerIan Rogers <irogers@google.com>2014-03-26 16:20:09 -0700
commit99ad7230ccaace93bf323dea9790f35fe991a4a2 (patch)
tree095705c674703953bf4c50f6a30a105420b770b5 /disassembler/disassembler_x86.cc
parenta9e3d2ccfdbf7f4c7b1508bcb2b774037399b1d4 (diff)
downloadart-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.cc6
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;