Index: src/x64/assembler-x64.cc |
diff --git a/src/x64/assembler-x64.cc b/src/x64/assembler-x64.cc |
index 697a6fa82252421f44f3ff10293337898c228076..5b09bc204246bd335a62bbb8fb0514306f08c0f8 100644 |
--- a/src/x64/assembler-x64.cc |
+++ b/src/x64/assembler-x64.cc |
@@ -2529,6 +2529,16 @@ void Assembler::movd(XMMRegister dst, Register src) { |
} |
+void Assembler::movd(XMMRegister dst, const Operand& src) { |
+ EnsureSpace ensure_space(this); |
+ emit(0x66); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x6E); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
void Assembler::movd(Register dst, XMMRegister src) { |
EnsureSpace ensure_space(this); |
emit(0x66); |
@@ -2632,6 +2642,45 @@ void Assembler::extractps(Register dst, XMMRegister src, byte imm8) { |
} |
+void Assembler::pextrd(Register dst, XMMRegister src, int8_t imm8) { |
+ DCHECK(IsEnabled(SSE4_1)); |
+ EnsureSpace ensure_space(this); |
+ emit(0x66); |
+ emit_optional_rex_32(src, dst); |
+ emit(0x0F); |
+ emit(0x3A); |
+ emit(0x16); |
+ emit_sse_operand(src, dst); |
+ emit(imm8); |
+} |
+ |
+ |
+void Assembler::pinsrd(XMMRegister dst, Register src, int8_t imm8) { |
+ DCHECK(IsEnabled(SSE4_1)); |
+ EnsureSpace ensure_space(this); |
+ emit(0x66); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x3A); |
+ emit(0x22); |
+ emit_sse_operand(dst, src); |
+ emit(imm8); |
+} |
+ |
+ |
+void Assembler::pinsrd(XMMRegister dst, const Operand& src, int8_t imm8) { |
+ DCHECK(IsEnabled(SSE4_1)); |
+ EnsureSpace ensure_space(this); |
+ emit(0x66); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x3A); |
+ emit(0x22); |
+ emit_sse_operand(dst, src); |
+ emit(imm8); |
+} |
+ |
+ |
void Assembler::movsd(const Operand& dst, XMMRegister src) { |
EnsureSpace ensure_space(this); |
emit(0xF2); // double |
@@ -3246,6 +3295,26 @@ void Assembler::pcmpeqd(XMMRegister dst, XMMRegister src) { |
} |
+void Assembler::punpckldq(XMMRegister dst, XMMRegister src) { |
+ EnsureSpace ensure_space(this); |
+ emit(0x66); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x62); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
+void Assembler::punpckhdq(XMMRegister dst, XMMRegister src) { |
+ EnsureSpace ensure_space(this); |
+ emit(0x66); |
+ emit_optional_rex_32(dst, src); |
+ emit(0x0F); |
+ emit(0x6A); |
+ emit_sse_operand(dst, src); |
+} |
+ |
+ |
// AVX instructions |
void Assembler::vfmasd(byte op, XMMRegister dst, XMMRegister src1, |
XMMRegister src2) { |