Index: src/x64/assembler-x64.cc |
diff --git a/src/x64/assembler-x64.cc b/src/x64/assembler-x64.cc |
index a1b2a0ebf22160275494fbec0d8c9b926d9d5f16..49bd78d1ffc9e52dde1dba42ef36f0cbe6734646 100644 |
--- a/src/x64/assembler-x64.cc |
+++ b/src/x64/assembler-x64.cc |
@@ -76,7 +76,7 @@ void CpuFeatures::Probe() { |
ASSERT(cpu.has_sse2()); |
probed_features |= static_cast<uint64_t>(1) << SSE2; |
- // CMOD must be available on every x64 CPU. |
+ // CMOV must be available on every x64 CPU. |
ASSERT(cpu.has_cmov()); |
probed_features |= static_cast<uint64_t>(1) << CMOV; |
@@ -2496,6 +2496,15 @@ void Assembler::andps(XMMRegister dst, XMMRegister src) { |
} |
+void Assembler::andps(XMMRegister dst, const Operand& src) { |
+ EnsureSpace ensure_space(this); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x54); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
void Assembler::orps(XMMRegister dst, XMMRegister src) { |
EnsureSpace ensure_space(this); |
emit_optional_rex_32(dst, src); |
@@ -2505,6 +2514,15 @@ void Assembler::orps(XMMRegister dst, XMMRegister src) { |
} |
+void Assembler::orps(XMMRegister dst, const Operand& src) { |
+ EnsureSpace ensure_space(this); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x56); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
void Assembler::xorps(XMMRegister dst, XMMRegister src) { |
EnsureSpace ensure_space(this); |
emit_optional_rex_32(dst, src); |
@@ -2514,6 +2532,87 @@ void Assembler::xorps(XMMRegister dst, XMMRegister src) { |
} |
+void Assembler::xorps(XMMRegister dst, const Operand& src) { |
+ EnsureSpace ensure_space(this); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x57); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
+void Assembler::addps(XMMRegister dst, XMMRegister src) { |
+ EnsureSpace ensure_space(this); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x58); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
+void Assembler::addps(XMMRegister dst, const Operand& src) { |
+ EnsureSpace ensure_space(this); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x58); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
+void Assembler::subps(XMMRegister dst, XMMRegister src) { |
+ EnsureSpace ensure_space(this); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x5C); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
+void Assembler::subps(XMMRegister dst, const Operand& src) { |
+ EnsureSpace ensure_space(this); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x5C); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
+void Assembler::mulps(XMMRegister dst, XMMRegister src) { |
+ EnsureSpace ensure_space(this); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x59); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
+void Assembler::mulps(XMMRegister dst, const Operand& src) { |
+ EnsureSpace ensure_space(this); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x59); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
+void Assembler::divps(XMMRegister dst, XMMRegister src) { |
+ EnsureSpace ensure_space(this); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x5E); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
+void Assembler::divps(XMMRegister dst, const Operand& src) { |
+ EnsureSpace ensure_space(this); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x5E); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
// SSE 2 operations. |
void Assembler::movd(XMMRegister dst, Register src) { |
@@ -2676,6 +2775,17 @@ void Assembler::movaps(XMMRegister dst, XMMRegister src) { |
} |
+void Assembler::shufps(XMMRegister dst, XMMRegister src, byte imm8) { |
+ ASSERT(is_uint8(imm8)); |
+ EnsureSpace ensure_space(this); |
+ emit_optional_rex_32(src, dst); |
+ emit(0x0F); |
+ emit(0xC6); |
+ emit_sse_operand(dst, src); |
+ emit(imm8); |
+} |
+ |
+ |
void Assembler::movapd(XMMRegister dst, XMMRegister src) { |
EnsureSpace ensure_space(this); |
if (src.low_bits() == 4) { |