| Index: src/x64/assembler-x64.h
|
| diff --git a/src/x64/assembler-x64.h b/src/x64/assembler-x64.h
|
| index c715bcef96531429aa0ba2c1f897da424cf303c1..1423b777e3e7644f99d782be875a3bb3645b8ed2 100644
|
| --- a/src/x64/assembler-x64.h
|
| +++ b/src/x64/assembler-x64.h
|
| @@ -91,11 +91,10 @@ struct Register {
|
| // The non-allocatable registers are:
|
| // rsp - stack pointer
|
| // rbp - frame pointer
|
| - // rsi - context register
|
| // r10 - fixed scratch register
|
| // r12 - smi constant register
|
| // r13 - root register
|
| - static const int kMaxNumAllocatableRegisters = 10;
|
| + static const int kMaxNumAllocatableRegisters = 11;
|
| static int NumAllocatableRegisters() {
|
| return kMaxNumAllocatableRegisters;
|
| }
|
| @@ -118,6 +117,7 @@ struct Register {
|
| "rbx",
|
| "rdx",
|
| "rcx",
|
| + "rsi",
|
| "rdi",
|
| "r8",
|
| "r9",
|
| @@ -694,10 +694,13 @@ class Assembler : public AssemblerBase {
|
| void movb(Register dst, const Operand& src);
|
| void movb(Register dst, Immediate imm);
|
| void movb(const Operand& dst, Register src);
|
| + void movb(const Operand& dst, Immediate imm);
|
|
|
| // Move the low 16 bits of a 64-bit register value to a 16-bit
|
| // memory location.
|
| + void movw(Register dst, const Operand& src);
|
| void movw(const Operand& dst, Register src);
|
| + void movw(const Operand& dst, Immediate imm);
|
|
|
| void movl(Register dst, Register src);
|
| void movl(Register dst, const Operand& src);
|
| @@ -719,12 +722,10 @@ class Assembler : public AssemblerBase {
|
|
|
| // Move sign extended immediate to memory location.
|
| void movq(const Operand& dst, Immediate value);
|
| - // Instructions to load a 64-bit immediate into a register.
|
| - // All 64-bit immediates must have a relocation mode.
|
| + // Loads a pointer into a register with a relocation mode.
|
| void movq(Register dst, void* ptr, RelocInfo::Mode rmode);
|
| - void movq(Register dst, int64_t value, RelocInfo::Mode rmode);
|
| - // Moves the address of the external reference into the register.
|
| - void movq(Register dst, ExternalReference ext);
|
| + // Loads a 64-bit immediate into a register.
|
| + void movq(Register dst, int64_t value);
|
| void movq(Register dst, Handle<Object> handle, RelocInfo::Mode rmode);
|
|
|
| void movsxbq(Register dst, const Operand& src);
|
| @@ -1346,13 +1347,27 @@ class Assembler : public AssemblerBase {
|
|
|
| void sahf();
|
|
|
| + // SSE instructions
|
| + void movaps(XMMRegister dst, XMMRegister src);
|
| + void movss(XMMRegister dst, const Operand& src);
|
| + void movss(const Operand& dst, XMMRegister src);
|
| +
|
| + void cvttss2si(Register dst, const Operand& src);
|
| + void cvttss2si(Register dst, XMMRegister src);
|
| + void cvtlsi2ss(XMMRegister dst, Register src);
|
| +
|
| + void andps(XMMRegister dst, XMMRegister src);
|
| + void orps(XMMRegister dst, XMMRegister src);
|
| + void xorps(XMMRegister dst, XMMRegister src);
|
| +
|
| + void movmskps(Register dst, XMMRegister src);
|
| +
|
| // SSE2 instructions
|
| void movd(XMMRegister dst, Register src);
|
| void movd(Register dst, XMMRegister src);
|
| void movq(XMMRegister dst, Register src);
|
| void movq(Register dst, XMMRegister src);
|
| void movq(XMMRegister dst, XMMRegister src);
|
| - void extractps(Register dst, XMMRegister src, byte imm8);
|
|
|
| // Don't use this unless it's important to keep the
|
| // top half of the destination register unchanged.
|
| @@ -1370,13 +1385,7 @@ class Assembler : public AssemblerBase {
|
| void movdqu(XMMRegister dst, const Operand& src);
|
|
|
| void movapd(XMMRegister dst, XMMRegister src);
|
| - void movaps(XMMRegister dst, XMMRegister src);
|
| -
|
| - void movss(XMMRegister dst, const Operand& src);
|
| - void movss(const Operand& dst, XMMRegister src);
|
|
|
| - void cvttss2si(Register dst, const Operand& src);
|
| - void cvttss2si(Register dst, XMMRegister src);
|
| void cvttsd2si(Register dst, const Operand& src);
|
| void cvttsd2si(Register dst, XMMRegister src);
|
| void cvttsd2siq(Register dst, XMMRegister src);
|
| @@ -1386,7 +1395,6 @@ class Assembler : public AssemblerBase {
|
| void cvtqsi2sd(XMMRegister dst, const Operand& src);
|
| void cvtqsi2sd(XMMRegister dst, Register src);
|
|
|
| - void cvtlsi2ss(XMMRegister dst, Register src);
|
|
|
| void cvtss2sd(XMMRegister dst, XMMRegister src);
|
| void cvtss2sd(XMMRegister dst, const Operand& src);
|
| @@ -1405,11 +1413,16 @@ class Assembler : public AssemblerBase {
|
| void andpd(XMMRegister dst, XMMRegister src);
|
| void orpd(XMMRegister dst, XMMRegister src);
|
| void xorpd(XMMRegister dst, XMMRegister src);
|
| - void xorps(XMMRegister dst, XMMRegister src);
|
| void sqrtsd(XMMRegister dst, XMMRegister src);
|
|
|
| void ucomisd(XMMRegister dst, XMMRegister src);
|
| void ucomisd(XMMRegister dst, const Operand& src);
|
| + void cmpltsd(XMMRegister dst, XMMRegister src);
|
| +
|
| + void movmskpd(Register dst, XMMRegister src);
|
| +
|
| + // SSE 4.1 instruction
|
| + void extractps(Register dst, XMMRegister src, byte imm8);
|
|
|
| enum RoundingMode {
|
| kRoundToNearest = 0x0,
|
| @@ -1420,17 +1433,6 @@ class Assembler : public AssemblerBase {
|
|
|
| void roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode);
|
|
|
| - void movmskpd(Register dst, XMMRegister src);
|
| - void movmskps(Register dst, XMMRegister src);
|
| -
|
| - void cmpltsd(XMMRegister dst, XMMRegister src);
|
| -
|
| - // The first argument is the reg field, the second argument is the r/m field.
|
| - void emit_sse_operand(XMMRegister dst, XMMRegister src);
|
| - 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);
|
| -
|
| // Debugging
|
| void Print();
|
|
|
| @@ -1611,6 +1613,12 @@ class Assembler : public AssemblerBase {
|
| // Emit the code-object-relative offset of the label's position
|
| inline void emit_code_relative_offset(Label* label);
|
|
|
| + // The first argument is the reg field, the second argument is the r/m field.
|
| + void emit_sse_operand(XMMRegister dst, XMMRegister src);
|
| + 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);
|
| +
|
| // Emit machine code for one of the operations ADD, ADC, SUB, SBC,
|
| // AND, OR, XOR, or CMP. The encodings of these operations are all
|
| // similar, differing just in the opcode or in the reg field of the
|
|
|