| 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);
|
|
|