Index: src/x64/assembler-x64.cc |
diff --git a/src/x64/assembler-x64.cc b/src/x64/assembler-x64.cc |
index 5554db749a3484dc5690e53dfe528ba615d9c09e..c06bc0c4517581a50811fba07b389bd19e0bf1b0 100644 |
--- a/src/x64/assembler-x64.cc |
+++ b/src/x64/assembler-x64.cc |
@@ -2540,6 +2540,24 @@ void Assembler::movq(Register dst, XMMRegister src) { |
} |
+void Assembler::movq(XMMRegister dst, XMMRegister src) { |
+ EnsureSpace ensure_space(this); |
+ if (dst.low_bits() == 4) { |
+ // Avoid unnecessary SIB byte. |
+ emit(0xf3); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x7e); |
+ emit_sse_operand(dst, src); |
+ } else { |
+ emit(0x66); |
+ emit_optional_rex_32(src, dst); |
+ emit(0x0F); |
+ emit(0xD6); |
+ emit_sse_operand(src, dst); |
+ } |
+} |
+ |
void Assembler::movdqa(const Operand& dst, XMMRegister src) { |
EnsureSpace ensure_space(this); |
emit(0x66); |
@@ -2603,6 +2621,42 @@ void Assembler::movsd(XMMRegister dst, const Operand& src) { |
} |
+void Assembler::movaps(XMMRegister dst, XMMRegister src) { |
+ EnsureSpace ensure_space(this); |
+ if (src.low_bits() == 4) { |
+ // Try to avoid an unnecessary SIB byte. |
+ emit_optional_rex_32(src, dst); |
+ emit(0x0F); |
+ emit(0x29); |
+ emit_sse_operand(src, dst); |
+ } else { |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x28); |
+ emit_sse_operand(dst, src); |
+ } |
+} |
+ |
+ |
+void Assembler::movapd(XMMRegister dst, XMMRegister src) { |
+ EnsureSpace ensure_space(this); |
+ if (src.low_bits() == 4) { |
+ // Try to avoid an unnecessary SIB byte. |
+ emit(0x66); |
+ emit_optional_rex_32(src, dst); |
+ emit(0x0F); |
+ emit(0x29); |
+ emit_sse_operand(src, dst); |
+ } else { |
+ emit(0x66); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x28); |
+ emit_sse_operand(dst, src); |
+ } |
+} |
+ |
+ |
void Assembler::movss(XMMRegister dst, const Operand& src) { |
EnsureSpace ensure_space(this); |
emit(0xF3); // single |
@@ -2833,6 +2887,15 @@ void Assembler::xorpd(XMMRegister dst, XMMRegister src) { |
} |
+void Assembler::xorps(XMMRegister dst, XMMRegister src) { |
+ EnsureSpace ensure_space(this); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x57); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
void Assembler::sqrtsd(XMMRegister dst, XMMRegister src) { |
EnsureSpace ensure_space(this); |
emit(0xF2); |