summaryrefslogtreecommitdiffstats
path: root/compiler/utils/x86/assembler_x86.cc
diff options
context:
space:
mode:
authorCalin Juravle <calin@google.com>2014-12-16 17:02:57 +0000
committerCalin Juravle <calin@google.com>2014-12-19 09:58:27 +0000
commit52c489645b6e9ae33623f1ec24143cde5444906e (patch)
treea39667aa354645bd42a7a061d08ca82df3004143 /compiler/utils/x86/assembler_x86.cc
parent193c7a94822f765b0b6b0cecd54c9f08dfd26425 (diff)
downloadart-52c489645b6e9ae33623f1ec24143cde5444906e.tar.gz
art-52c489645b6e9ae33623f1ec24143cde5444906e.tar.bz2
art-52c489645b6e9ae33623f1ec24143cde5444906e.zip
[optimizing compiler] Add support for volatile
- for backends: arm, x86, x86_64 - added necessary instructions to assemblies - clean up code gen for field set/get - fixed InstructionDataEquals for some instructions - fixed comments in compiler_enums * 003-opcode test verifies basic volatile functionality Change-Id: I144393efa312dfb2c332cb84056b00edffee338a
Diffstat (limited to 'compiler/utils/x86/assembler_x86.cc')
-rw-r--r--compiler/utils/x86/assembler_x86.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/compiler/utils/x86/assembler_x86.cc b/compiler/utils/x86/assembler_x86.cc
index f0353f6cd2..f8c0043242 100644
--- a/compiler/utils/x86/assembler_x86.cc
+++ b/compiler/utils/x86/assembler_x86.cc
@@ -443,6 +443,27 @@ void X86Assembler::movsd(XmmRegister dst, XmmRegister src) {
}
+void X86Assembler::psrlq(XmmRegister reg, const Immediate& shift_count) {
+ DCHECK(shift_count.is_uint8());
+
+ AssemblerBuffer::EnsureCapacity ensured(&buffer_);
+ EmitUint8(0x66);
+ EmitUint8(0x0F);
+ EmitUint8(0x73);
+ EmitXmmRegisterOperand(2, reg);
+ EmitUint8(shift_count.value());
+}
+
+
+void X86Assembler::punpckldq(XmmRegister dst, XmmRegister src) {
+ AssemblerBuffer::EnsureCapacity ensured(&buffer_);
+ EmitUint8(0x66);
+ EmitUint8(0x0F);
+ EmitUint8(0x62);
+ EmitXmmRegisterOperand(dst, src);
+}
+
+
void X86Assembler::addsd(XmmRegister dst, XmmRegister src) {
AssemblerBuffer::EnsureCapacity ensured(&buffer_);
EmitUint8(0xF2);