Index: src/x64/assembler-x64.h |
diff --git a/src/x64/assembler-x64.h b/src/x64/assembler-x64.h |
index 709b61b52ea9e3dabe48738f4b51027a6ccdea77..1950b883879dc1e5093cc7eafbd4d9d4956ea32b 100644 |
--- a/src/x64/assembler-x64.h |
+++ b/src/x64/assembler-x64.h |
@@ -300,6 +300,8 @@ const XMMRegister xmm15 = { 15 }; |
typedef XMMRegister DoubleRegister; |
+typedef XMMRegister Float32x4Register; |
+typedef XMMRegister Int32x4Register; |
enum Condition { |
@@ -1344,7 +1346,6 @@ class Assembler : public AssemblerBase { |
void movaps(XMMRegister dst, XMMRegister src); |
void movss(XMMRegister dst, const Operand& src); |
void movss(const Operand& dst, XMMRegister src); |
- void shufps(XMMRegister dst, XMMRegister src, byte imm8); |
void cvttss2si(Register dst, const Operand& src); |
void cvttss2si(Register dst, XMMRegister src); |
@@ -1366,7 +1367,9 @@ class Assembler : public AssemblerBase { |
void divps(XMMRegister dst, XMMRegister src); |
void divps(XMMRegister dst, const Operand& src); |
- void movmskps(Register dst, XMMRegister src); |
+ // SSE4_1 instructions |
+ void insertps(XMMRegister dst, XMMRegister src, byte imm8); |
+ void pinsrd(XMMRegister dst, Register src, byte imm8); |
// SSE2 instructions |
void movd(XMMRegister dst, Register src); |
@@ -1374,6 +1377,7 @@ class Assembler : public AssemblerBase { |
void movq(XMMRegister dst, Register src); |
void movq(Register dst, XMMRegister src); |
void movq(XMMRegister dst, XMMRegister src); |
+ void shufps(XMMRegister dst, XMMRegister src, byte imm8); |
// Don't use this unless it's important to keep the |
// top half of the destination register unchanged. |
@@ -1426,10 +1430,41 @@ class Assembler : public AssemblerBase { |
void cmpltsd(XMMRegister dst, XMMRegister src); |
void movmskpd(Register dst, XMMRegister src); |
+ void movmskps(Register dst, XMMRegister src); |
// SSE 4.1 instruction |
void extractps(Register dst, XMMRegister src, byte imm8); |
+ void minps(XMMRegister dst, XMMRegister src); |
+ void minps(XMMRegister dst, const Operand& src); |
+ void maxps(XMMRegister dst, XMMRegister src); |
+ void maxps(XMMRegister dst, const Operand& src); |
+ void rcpps(XMMRegister dst, XMMRegister src); |
+ void rcpps(XMMRegister dst, const Operand& src); |
+ void rsqrtps(XMMRegister dst, XMMRegister src); |
+ void rsqrtps(XMMRegister dst, const Operand& src); |
+ void sqrtps(XMMRegister dst, XMMRegister src); |
+ void sqrtps(XMMRegister dst, const Operand& src); |
+ void movups(XMMRegister dst, XMMRegister src); |
+ void movups(XMMRegister dst, const Operand& src); |
+ void movups(const Operand& dst, XMMRegister src); |
+ void paddd(XMMRegister dst, XMMRegister src); |
+ void paddd(XMMRegister dst, const Operand& src); |
+ void psubd(XMMRegister dst, XMMRegister src); |
+ void psubd(XMMRegister dst, const Operand& src); |
+ void pmulld(XMMRegister dst, XMMRegister src); |
+ void pmulld(XMMRegister dst, const Operand& src); |
+ void pmuludq(XMMRegister dst, XMMRegister src); |
+ void pmuludq(XMMRegister dst, const Operand& src); |
+ void punpackldq(XMMRegister dst, XMMRegister src); |
+ void punpackldq(XMMRegister dst, const Operand& src); |
+ void psrldq(XMMRegister dst, uint8_t shift); |
+ void pshufd(XMMRegister dst, XMMRegister src, uint8_t shuffle); |
+ void cvtps2dq(XMMRegister dst, XMMRegister src); |
+ void cvtps2dq(XMMRegister dst, const Operand& src); |
+ void cvtdq2ps(XMMRegister dst, XMMRegister src); |
+ void cvtdq2ps(XMMRegister dst, const Operand& src); |
+ |
enum RoundingMode { |
kRoundToNearest = 0x0, |
kRoundDown = 0x1, |
@@ -1439,6 +1474,14 @@ class Assembler : public AssemblerBase { |
void roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode); |
+ void cmpps(XMMRegister dst, XMMRegister src, int8_t cmp); |
+ void cmpeqps(XMMRegister dst, XMMRegister src); |
+ void cmpltps(XMMRegister dst, XMMRegister src); |
+ void cmpleps(XMMRegister dst, XMMRegister src); |
+ void cmpneqps(XMMRegister dst, XMMRegister src); |
+ void cmpnltps(XMMRegister dst, XMMRegister src); |
+ void cmpnleps(XMMRegister dst, XMMRegister src); |
+ |
// Debugging |
void Print(); |
@@ -1586,6 +1629,10 @@ class Assembler : public AssemblerBase { |
// the high bit set. |
inline void emit_optional_rex_32(Register rm_reg); |
+ // As for emit_optional_rex_32(Register), except that the register is |
+ // an XMM register. |
+ inline void emit_optional_rex_32(XMMRegister rm_reg); |
+ |
// Optionally do as emit_rex_32(const Operand&) if the operand register |
// numbers have a high bit set. |
inline void emit_optional_rex_32(const Operand& op); |
@@ -1624,6 +1671,7 @@ class Assembler : public AssemblerBase { |
void emit_sse_operand(XMMRegister reg, const Operand& adr); |
void emit_sse_operand(XMMRegister dst, Register src); |
void emit_sse_operand(Register dst, XMMRegister src); |
+ void emit_sse_operand(XMMRegister dst); |
// Emit machine code for one of the operations ADD, ADC, SUB, SBC, |
// AND, OR, XOR, or CMP. The encodings of these operations are all |