| Index: src/x64/assembler-x64.h
|
| diff --git a/src/x64/assembler-x64.h b/src/x64/assembler-x64.h
|
| index c9e319b9f16b70d057f13a461fb052d7bda127fe..27728b6a45edf3269657737b68a6ec24190ca69b 100644
|
| --- a/src/x64/assembler-x64.h
|
| +++ b/src/x64/assembler-x64.h
|
| @@ -1014,6 +1014,17 @@ class Assembler : public AssemblerBase {
|
| void sahf();
|
|
|
| // SSE instructions
|
| + void addss(XMMRegister dst, XMMRegister src);
|
| + void addss(XMMRegister dst, const Operand& src);
|
| + void subss(XMMRegister dst, XMMRegister src);
|
| + void subss(XMMRegister dst, const Operand& src);
|
| + void mulss(XMMRegister dst, XMMRegister src);
|
| + void mulss(XMMRegister dst, const Operand& src);
|
| + void divss(XMMRegister dst, XMMRegister src);
|
| + void divss(XMMRegister dst, const Operand& src);
|
| +
|
| + void ucomiss(XMMRegister dst, XMMRegister src);
|
| + void ucomiss(XMMRegister dst, const Operand& src);
|
| void movaps(XMMRegister dst, XMMRegister src);
|
| void movss(XMMRegister dst, const Operand& src);
|
| void movss(const Operand& dst, XMMRegister src);
|
| @@ -1123,6 +1134,157 @@ class Assembler : public AssemblerBase {
|
|
|
| void roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode);
|
|
|
| + // AVX instruction
|
| + void vfmadd132sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmasd(0x99, dst, src1, src2);
|
| + }
|
| + void vfmadd213sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmasd(0xa9, dst, src1, src2);
|
| + }
|
| + void vfmadd231sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmasd(0xb9, dst, src1, src2);
|
| + }
|
| + void vfmadd132sd(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmasd(0x99, dst, src1, src2);
|
| + }
|
| + void vfmadd213sd(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmasd(0xa9, dst, src1, src2);
|
| + }
|
| + void vfmadd231sd(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmasd(0xb9, dst, src1, src2);
|
| + }
|
| + void vfmsub132sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmasd(0x9b, dst, src1, src2);
|
| + }
|
| + void vfmsub213sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmasd(0xab, dst, src1, src2);
|
| + }
|
| + void vfmsub231sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmasd(0xbb, dst, src1, src2);
|
| + }
|
| + void vfmsub132sd(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmasd(0x9b, dst, src1, src2);
|
| + }
|
| + void vfmsub213sd(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmasd(0xab, dst, src1, src2);
|
| + }
|
| + void vfmsub231sd(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmasd(0xbb, dst, src1, src2);
|
| + }
|
| + void vfnmadd132sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmasd(0x9d, dst, src1, src2);
|
| + }
|
| + void vfnmadd213sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmasd(0xad, dst, src1, src2);
|
| + }
|
| + void vfnmadd231sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmasd(0xbd, dst, src1, src2);
|
| + }
|
| + void vfnmadd132sd(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmasd(0x9d, dst, src1, src2);
|
| + }
|
| + void vfnmadd213sd(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmasd(0xad, dst, src1, src2);
|
| + }
|
| + void vfnmadd231sd(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmasd(0xbd, dst, src1, src2);
|
| + }
|
| + void vfnmsub132sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmasd(0x9f, dst, src1, src2);
|
| + }
|
| + void vfnmsub213sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmasd(0xaf, dst, src1, src2);
|
| + }
|
| + void vfnmsub231sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmasd(0xbf, dst, src1, src2);
|
| + }
|
| + void vfnmsub132sd(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmasd(0x9f, dst, src1, src2);
|
| + }
|
| + void vfnmsub213sd(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmasd(0xaf, dst, src1, src2);
|
| + }
|
| + void vfnmsub231sd(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmasd(0xbf, dst, src1, src2);
|
| + }
|
| + void vfmasd(byte op, XMMRegister dst, XMMRegister src1, XMMRegister src2);
|
| + void vfmasd(byte op, XMMRegister dst, XMMRegister src1, const Operand& src2);
|
| +
|
| + void vfmadd132ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmass(0x99, dst, src1, src2);
|
| + }
|
| + void vfmadd213ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmass(0xa9, dst, src1, src2);
|
| + }
|
| + void vfmadd231ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmass(0xb9, dst, src1, src2);
|
| + }
|
| + void vfmadd132ss(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmass(0x99, dst, src1, src2);
|
| + }
|
| + void vfmadd213ss(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmass(0xa9, dst, src1, src2);
|
| + }
|
| + void vfmadd231ss(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmass(0xb9, dst, src1, src2);
|
| + }
|
| + void vfmsub132ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmass(0x9b, dst, src1, src2);
|
| + }
|
| + void vfmsub213ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmass(0xab, dst, src1, src2);
|
| + }
|
| + void vfmsub231ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmass(0xbb, dst, src1, src2);
|
| + }
|
| + void vfmsub132ss(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmass(0x9b, dst, src1, src2);
|
| + }
|
| + void vfmsub213ss(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmass(0xab, dst, src1, src2);
|
| + }
|
| + void vfmsub231ss(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmass(0xbb, dst, src1, src2);
|
| + }
|
| + void vfnmadd132ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmass(0x9d, dst, src1, src2);
|
| + }
|
| + void vfnmadd213ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmass(0xad, dst, src1, src2);
|
| + }
|
| + void vfnmadd231ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmass(0xbd, dst, src1, src2);
|
| + }
|
| + void vfnmadd132ss(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmass(0x9d, dst, src1, src2);
|
| + }
|
| + void vfnmadd213ss(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmass(0xad, dst, src1, src2);
|
| + }
|
| + void vfnmadd231ss(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmass(0xbd, dst, src1, src2);
|
| + }
|
| + void vfnmsub132ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmass(0x9f, dst, src1, src2);
|
| + }
|
| + void vfnmsub213ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmass(0xaf, dst, src1, src2);
|
| + }
|
| + void vfnmsub231ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
|
| + vfmass(0xbf, dst, src1, src2);
|
| + }
|
| + void vfnmsub132ss(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmass(0x9f, dst, src1, src2);
|
| + }
|
| + void vfnmsub213ss(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmass(0xaf, dst, src1, src2);
|
| + }
|
| + void vfnmsub231ss(XMMRegister dst, XMMRegister src1, const Operand& src2) {
|
| + vfmass(0xbf, dst, src1, src2);
|
| + }
|
| + void vfmass(byte op, XMMRegister dst, XMMRegister src1, XMMRegister src2);
|
| + void vfmass(byte op, XMMRegister dst, XMMRegister src1, const Operand& src2);
|
| +
|
| // Debugging
|
| void Print();
|
|
|
| @@ -1316,6 +1478,14 @@ class Assembler : public AssemblerBase {
|
| }
|
| }
|
|
|
| + // Emit vex prefix
|
| + void emit_vex2_byte0() { emit(0xc5); }
|
| + void emit_vex2_byte1(XMMRegister reg, XMMRegister v, byte lpp);
|
| + void emit_vex3_byte0() { emit(0xc4); }
|
| + void emit_vex3_byte1(XMMRegister reg, XMMRegister rm, byte m);
|
| + void emit_vex3_byte1(XMMRegister reg, const Operand& rm, byte m);
|
| + void emit_vex3_byte2(byte w, XMMRegister v, byte lpp);
|
| +
|
| // Emit the ModR/M byte, and optionally the SIB byte and
|
| // 1- or 4-byte offset for a memory operand. Also encodes
|
| // the second operand of the operation, a register or operation
|
|
|