Index: src/x64/assembler-x64.h |
diff --git a/src/x64/assembler-x64.h b/src/x64/assembler-x64.h |
index 709b61b52ea9e3dabe48738f4b51027a6ccdea77..1f1316fa82909f67d96d77e2cd1e1de653f608d9 100644 |
--- a/src/x64/assembler-x64.h |
+++ b/src/x64/assembler-x64.h |
@@ -530,6 +530,10 @@ class CpuFeatures : public AllStatic { |
}; |
+#define ASSEMBLER_INSTRUCTION_LIST(V) \ |
+ V(mov) |
+ |
+ |
class Assembler : public AssemblerBase { |
private: |
// We check before assembling an instruction that there is sufficient |
@@ -658,6 +662,24 @@ class Assembler : public AssemblerBase { |
// Some mnemonics, such as "and", are the same as C++ keywords. |
// Naming conflicts with C++ keywords are resolved by adding a trailing '_'. |
+#define DECLARE_INSTRUCTION(instruction) \ |
+ template<class P1, class P2> \ |
+ void instruction##p(P1 p1, P2 p2) { \ |
+ emit_##instruction(p1, p2, kPointerSize); \ |
+ } \ |
+ \ |
+ template<class P1, class P2> \ |
+ void instruction##l(P1 p1, P2 p2) { \ |
+ emit_##instruction(p1, p2, kInt32Size); \ |
+ } \ |
+ \ |
+ template<class P1, class P2> \ |
+ void instruction##q(P1 p1, P2 p2) { \ |
+ emit_##instruction(p1, p2, kInt64Size); \ |
+ } |
+ ASSEMBLER_INSTRUCTION_LIST(DECLARE_INSTRUCTION) |
+#undef DECLARE_INSTRUCTION |
+ |
// Insert the smallest number of nop instructions |
// possible to align the pc offset to a multiple |
// of m, where m must be a power of 2. |
@@ -695,30 +717,15 @@ class Assembler : public AssemblerBase { |
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); |
- void movl(const Operand& dst, Register src); |
- void movl(const Operand& dst, Immediate imm); |
- // Load a 32-bit immediate value, zero-extended to 64 bits. |
- void movl(Register dst, Immediate imm32); |
- |
- // Move 64 bit register value to 64-bit memory location. |
- void movq(const Operand& dst, Register src); |
- // Move 64 bit memory location to 64-bit register value. |
- void movq(Register dst, const Operand& src); |
- void movq(Register dst, Register src); |
- // Sign extends immediate 32-bit value to 64 bits. |
- void movq(Register dst, Immediate x); |
// Move the offset of the label location relative to the current |
// position (after the move) to the destination. |
void movl(const Operand& dst, Label* src); |
- // Move sign extended immediate to memory location. |
- void movq(const Operand& dst, Immediate value); |
// Loads a pointer into a register with a relocation mode. |
void movq(Register dst, void* ptr, RelocInfo::Mode rmode); |
// Loads a 64-bit immediate into a register. |
void movq(Register dst, int64_t value); |
+ void movq(Register dst, uint64_t value); |
void movq(Register dst, Handle<Object> handle, RelocInfo::Mode rmode); |
void movsxbq(Register dst, const Operand& src); |
@@ -1590,6 +1597,25 @@ class Assembler : public AssemblerBase { |
// numbers have a high bit set. |
inline void emit_optional_rex_32(const Operand& op); |
+ template<class P1> |
+ void emit_rex(P1 p1, int size) { |
+ if (size == kInt64Size) { |
+ emit_rex_64(p1); |
+ } else { |
+ ASSERT(size == kInt32Size); |
+ emit_optional_rex_32(p1); |
+ } |
+ } |
+ |
+ template<class P1, class P2> |
+ void emit_rex(P1 p1, P2 p2, int size) { |
+ if (size == kInt64Size) { |
+ emit_rex_64(p1, p2); |
+ } else { |
+ ASSERT(size == kInt32Size); |
+ emit_optional_rex_32(p1, p2); |
+ } |
+ } |
// Emit the ModR/M byte, and optionally the SIB byte and |
// 1- or 4-byte offset for a memory operand. Also encodes |
@@ -1675,6 +1701,12 @@ class Assembler : public AssemblerBase { |
// record reloc info for current pc_ |
void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0); |
+ void emit_mov(Register dst, const Operand& src, int size); |
+ void emit_mov(Register dst, Register src, int size); |
+ void emit_mov(const Operand& dst, Register src, int size); |
+ void emit_mov(Register dst, Immediate value, int size); |
+ void emit_mov(const Operand& dst, Immediate value, int size); |
+ |
friend class CodePatcher; |
friend class EnsureSpace; |
friend class RegExpMacroAssemblerX64; |