| Index: src/ia32/assembler-ia32.h
|
| diff --git a/src/ia32/assembler-ia32.h b/src/ia32/assembler-ia32.h
|
| index 638a6d47f8d7c767d899f7f6bad38f2372f32a53..4dfde5f62f4b4a2b239100e54f9a3bfaf51826c5 100644
|
| --- a/src/ia32/assembler-ia32.h
|
| +++ b/src/ia32/assembler-ia32.h
|
| @@ -302,9 +302,6 @@ enum ScaleFactor {
|
|
|
| class Operand BASE_EMBEDDED {
|
| public:
|
| - // reg
|
| - INLINE(explicit Operand(Register reg));
|
| -
|
| // XMM reg
|
| INLINE(explicit Operand(XMMRegister xmm_reg));
|
|
|
| @@ -357,11 +354,8 @@ class Operand BASE_EMBEDDED {
|
| Register reg() const;
|
|
|
| private:
|
| - byte buf_[6];
|
| - // The number of bytes in buf_.
|
| - unsigned int len_;
|
| - // Only valid if len_ > 4.
|
| - RelocInfo::Mode rmode_;
|
| + // reg
|
| + INLINE(explicit Operand(Register reg));
|
|
|
| // Set the ModRM byte without an encoded 'reg' register. The
|
| // register is encoded later as part of the emit_operand operation.
|
| @@ -371,7 +365,15 @@ class Operand BASE_EMBEDDED {
|
| inline void set_disp8(int8_t disp);
|
| inline void set_dispr(int32_t disp, RelocInfo::Mode rmode);
|
|
|
| + byte buf_[6];
|
| + // The number of bytes in buf_.
|
| + unsigned int len_;
|
| + // Only valid if len_ > 4.
|
| + RelocInfo::Mode rmode_;
|
| +
|
| friend class Assembler;
|
| + friend class MacroAssembler;
|
| + friend class LCodeGen;
|
| };
|
|
|
|
|
| @@ -680,7 +682,9 @@ class Assembler : public AssemblerBase {
|
| void leave();
|
|
|
| // Moves
|
| + void mov_b(Register dst, Register src) { mov_b(dst, Operand(src)); }
|
| void mov_b(Register dst, const Operand& src);
|
| + void mov_b(Register dst, int8_t imm8) { mov_b(Operand(dst), imm8); }
|
| void mov_b(const Operand& dst, int8_t imm8);
|
| void mov_b(const Operand& dst, Register src);
|
|
|
| @@ -696,17 +700,24 @@ class Assembler : public AssemblerBase {
|
| void mov(const Operand& dst, Handle<Object> handle);
|
| void mov(const Operand& dst, Register src);
|
|
|
| + void movsx_b(Register dst, Register src) { movsx_b(dst, Operand(src)); }
|
| void movsx_b(Register dst, const Operand& src);
|
|
|
| + void movsx_w(Register dst, Register src) { movsx_w(dst, Operand(src)); }
|
| void movsx_w(Register dst, const Operand& src);
|
|
|
| + void movzx_b(Register dst, Register src) { movzx_b(dst, Operand(src)); }
|
| void movzx_b(Register dst, const Operand& src);
|
|
|
| + void movzx_w(Register dst, Register src) { movzx_w(dst, Operand(src)); }
|
| void movzx_w(Register dst, const Operand& src);
|
|
|
| // Conditional moves
|
| void cmov(Condition cc, Register dst, int32_t imm32);
|
| void cmov(Condition cc, Register dst, Handle<Object> handle);
|
| + void cmov(Condition cc, Register dst, Register src) {
|
| + cmov(cc, dst, Operand(src));
|
| + }
|
| void cmov(Condition cc, Register dst, const Operand& src);
|
|
|
| // Flag management.
|
| @@ -724,25 +735,31 @@ class Assembler : public AssemblerBase {
|
| void adc(Register dst, int32_t imm32);
|
| void adc(Register dst, const Operand& src);
|
|
|
| + void add(Register dst, Register src) { add(dst, Operand(src)); }
|
| void add(Register dst, const Operand& src);
|
| void add(const Operand& dst, Register src);
|
| + void add(Register dst, const Immediate& imm) { add(Operand(dst), imm); }
|
| void add(const Operand& dst, const Immediate& x);
|
|
|
| void and_(Register dst, int32_t imm32);
|
| void and_(Register dst, const Immediate& x);
|
| + void and_(Register dst, Register src) { and_(dst, Operand(src)); }
|
| void and_(Register dst, const Operand& src);
|
| - void and_(const Operand& src, Register dst);
|
| + void and_(const Operand& dst, Register src);
|
| void and_(const Operand& dst, const Immediate& x);
|
|
|
| + void cmpb(Register reg, int8_t imm8) { cmpb(Operand(reg), imm8); }
|
| void cmpb(const Operand& op, int8_t imm8);
|
| - void cmpb(Register src, const Operand& dst);
|
| - void cmpb(const Operand& dst, Register src);
|
| + void cmpb(Register reg, const Operand& op);
|
| + void cmpb(const Operand& op, Register reg);
|
| void cmpb_al(const Operand& op);
|
| void cmpw_ax(const Operand& op);
|
| void cmpw(const Operand& op, Immediate imm16);
|
| void cmp(Register reg, int32_t imm32);
|
| void cmp(Register reg, Handle<Object> handle);
|
| + void cmp(Register reg0, Register reg1) { cmp(reg0, Operand(reg1)); }
|
| void cmp(Register reg, const Operand& op);
|
| + void cmp(Register reg, const Immediate& imm) { cmp(Operand(reg), imm); }
|
| void cmp(const Operand& op, const Immediate& imm);
|
| void cmp(const Operand& op, Handle<Object> handle);
|
|
|
| @@ -758,6 +775,7 @@ class Assembler : public AssemblerBase {
|
|
|
| // Signed multiply instructions.
|
| void imul(Register src); // edx:eax = eax * src.
|
| + void imul(Register dst, Register src) { imul(dst, Operand(src)); }
|
| void imul(Register dst, const Operand& src); // dst = dst * src.
|
| void imul(Register dst, Register src, int32_t imm32); // dst = src * imm32.
|
|
|
| @@ -774,8 +792,10 @@ class Assembler : public AssemblerBase {
|
| void not_(Register dst);
|
|
|
| void or_(Register dst, int32_t imm32);
|
| + void or_(Register dst, Register src) { or_(dst, Operand(src)); }
|
| void or_(Register dst, const Operand& src);
|
| void or_(const Operand& dst, Register src);
|
| + void or_(Register dst, const Immediate& imm) { or_(Operand(dst), imm); }
|
| void or_(const Operand& dst, const Immediate& x);
|
|
|
| void rcl(Register dst, uint8_t imm8);
|
| @@ -786,33 +806,42 @@ class Assembler : public AssemblerBase {
|
|
|
| void sbb(Register dst, const Operand& src);
|
|
|
| + void shld(Register dst, Register src) { shld(dst, Operand(src)); }
|
| void shld(Register dst, const Operand& src);
|
|
|
| void shl(Register dst, uint8_t imm8);
|
| void shl_cl(Register dst);
|
|
|
| + void shrd(Register dst, Register src) { shrd(dst, Operand(src)); }
|
| void shrd(Register dst, const Operand& src);
|
|
|
| void shr(Register dst, uint8_t imm8);
|
| void shr_cl(Register dst);
|
|
|
| + void sub(Register dst, const Immediate& imm) { sub(Operand(dst), imm); }
|
| void sub(const Operand& dst, const Immediate& x);
|
| + void sub(Register dst, Register src) { sub(dst, Operand(src)); }
|
| void sub(Register dst, const Operand& src);
|
| void sub(const Operand& dst, Register src);
|
|
|
| void test(Register reg, const Immediate& imm);
|
| + void test(Register reg0, Register reg1) { test(reg0, Operand(reg1)); }
|
| void test(Register reg, const Operand& op);
|
| void test_b(Register reg, const Operand& op);
|
| void test(const Operand& op, const Immediate& imm);
|
| + void test_b(Register reg, uint8_t imm8) { test_b(Operand(reg), imm8); }
|
| void test_b(const Operand& op, uint8_t imm8);
|
|
|
| void xor_(Register dst, int32_t imm32);
|
| + void xor_(Register dst, Register src) { xor_(dst, Operand(src)); }
|
| void xor_(Register dst, const Operand& src);
|
| - void xor_(const Operand& src, Register dst);
|
| + void xor_(const Operand& dst, Register src);
|
| + void xor_(Register dst, const Immediate& imm) { xor_(Operand(dst), imm); }
|
| void xor_(const Operand& dst, const Immediate& x);
|
|
|
| // Bit operations.
|
| void bt(const Operand& dst, Register src);
|
| + void bts(Register dst, Register src) { bts(Operand(dst), src); }
|
| void bts(const Operand& dst, Register src);
|
|
|
| // Miscellaneous
|
| @@ -843,6 +872,7 @@ class Assembler : public AssemblerBase {
|
| void call(Label* L);
|
| void call(byte* entry, RelocInfo::Mode rmode);
|
| int CallSize(const Operand& adr);
|
| + void call(Register reg) { call(Operand(reg)); }
|
| void call(const Operand& adr);
|
| int CallSize(Handle<Code> code, RelocInfo::Mode mode);
|
| void call(Handle<Code> code,
|
| @@ -853,6 +883,7 @@ class Assembler : public AssemblerBase {
|
| // unconditional jump to L
|
| void jmp(Label* L, Label::Distance distance = Label::kFar);
|
| void jmp(byte* entry, RelocInfo::Mode rmode);
|
| + void jmp(Register reg) { jmp(Operand(reg)); }
|
| void jmp(const Operand& adr);
|
| void jmp(Handle<Code> code, RelocInfo::Mode rmode);
|
|
|
| @@ -937,6 +968,7 @@ class Assembler : public AssemblerBase {
|
| void cvttss2si(Register dst, const Operand& src);
|
| void cvttsd2si(Register dst, const Operand& src);
|
|
|
| + void cvtsi2sd(XMMRegister dst, Register src) { cvtsi2sd(dst, Operand(src)); }
|
| void cvtsi2sd(XMMRegister dst, const Operand& src);
|
| void cvtss2sd(XMMRegister dst, XMMRegister src);
|
| void cvtsd2ss(XMMRegister dst, XMMRegister src);
|
| @@ -977,12 +1009,14 @@ class Assembler : public AssemblerBase {
|
| void movdbl(XMMRegister dst, const Operand& src);
|
| void movdbl(const Operand& dst, XMMRegister src);
|
|
|
| + void movd(XMMRegister dst, Register src) { movd(dst, Operand(src)); }
|
| void movd(XMMRegister dst, const Operand& src);
|
| - void movd(const Operand& src, XMMRegister dst);
|
| + void movd(Register dst, XMMRegister src) { movd(Operand(dst), src); }
|
| + void movd(const Operand& dst, XMMRegister src);
|
| void movsd(XMMRegister dst, XMMRegister src);
|
|
|
| void movss(XMMRegister dst, const Operand& src);
|
| - void movss(const Operand& src, XMMRegister dst);
|
| + void movss(const Operand& dst, XMMRegister src);
|
| void movss(XMMRegister dst, XMMRegister src);
|
|
|
| void pand(XMMRegister dst, XMMRegister src);
|
| @@ -995,11 +1029,17 @@ class Assembler : public AssemblerBase {
|
| void psrlq(XMMRegister reg, int8_t shift);
|
| void psrlq(XMMRegister dst, XMMRegister src);
|
| void pshufd(XMMRegister dst, XMMRegister src, int8_t shuffle);
|
| + void pextrd(Register dst, XMMRegister src, int8_t offset) {
|
| + pextrd(Operand(dst), src, offset);
|
| + }
|
| void pextrd(const Operand& dst, XMMRegister src, int8_t offset);
|
| + void pinsrd(XMMRegister dst, Register src, int8_t offset) {
|
| + pinsrd(dst, Operand(src), offset);
|
| + }
|
| void pinsrd(XMMRegister dst, const Operand& src, int8_t offset);
|
|
|
| // Parallel XMM operations.
|
| - void movntdqa(XMMRegister src, const Operand& dst);
|
| + void movntdqa(XMMRegister dst, const Operand& src);
|
| void movntdq(const Operand& dst, XMMRegister src);
|
| // Prefetch src position into cache level.
|
| // Level 1, 2 or 3 specifies CPU cache level. Level 0 specifies a
|
|
|