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