X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fv8%2Fsrc%2Fx87%2Fassembler-x87.h;h=a2bedcc3cc501d00d8e0a3e74dd3c6b132fc98ba;hb=4a1a0bdd01eef90b0826a0e761d3379d3715c10f;hp=162416735b0be3150e9f6efa4a95de00d3f6fd1c;hpb=b1be5ca53587d23e7aeb77b26861fdc0a181ffd8;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/v8/src/x87/assembler-x87.h b/src/v8/src/x87/assembler-x87.h index 1624167..a2bedcc 100644 --- a/src/v8/src/x87/assembler-x87.h +++ b/src/v8/src/x87/assembler-x87.h @@ -78,8 +78,8 @@ struct Register { static inline Register FromAllocationIndex(int index); static Register from_code(int code) { - ASSERT(code >= 0); - ASSERT(code < kNumRegisters); + DCHECK(code >= 0); + DCHECK(code < kNumRegisters); Register r = { code }; return r; } @@ -88,11 +88,11 @@ struct Register { // eax, ebx, ecx and edx are byte registers, the rest are not. bool is_byte_register() const { return code_ <= 3; } int code() const { - ASSERT(is_valid()); + DCHECK(is_valid()); return code_; } int bit() const { - ASSERT(is_valid()); + DCHECK(is_valid()); return 1 << code_; } @@ -122,7 +122,7 @@ const Register no_reg = { kRegister_no_reg_Code }; inline const char* Register::AllocationIndexToString(int index) { - ASSERT(index >= 0 && index < kMaxNumAllocatableRegisters); + DCHECK(index >= 0 && index < kMaxNumAllocatableRegisters); // This is the mapping of allocation indices to registers. const char* const kNames[] = { "eax", "ecx", "edx", "ebx", "esi", "edi" }; return kNames[index]; @@ -130,13 +130,13 @@ inline const char* Register::AllocationIndexToString(int index) { inline int Register::ToAllocationIndex(Register reg) { - ASSERT(reg.is_valid() && !reg.is(esp) && !reg.is(ebp)); + DCHECK(reg.is_valid() && !reg.is(esp) && !reg.is(ebp)); return (reg.code() >= 6) ? reg.code() - 2 : reg.code(); } inline Register Register::FromAllocationIndex(int index) { - ASSERT(index >= 0 && index < kMaxNumAllocatableRegisters); + DCHECK(index >= 0 && index < kMaxNumAllocatableRegisters); return (index >= 4) ? from_code(index + 2) : from_code(index); } @@ -153,7 +153,7 @@ struct X87Register { } static const char* AllocationIndexToString(int index) { - ASSERT(index >= 0 && index < kMaxNumAllocatableRegisters); + DCHECK(index >= 0 && index < kMaxNumAllocatableRegisters); const char* const names[] = { "stX_0", "stX_1", "stX_2", "stX_3", "stX_4", "stX_5", "stX_6", "stX_7" @@ -162,7 +162,7 @@ struct X87Register { } static X87Register FromAllocationIndex(int index) { - ASSERT(index >= 0 && index < kMaxNumAllocatableRegisters); + DCHECK(index >= 0 && index < kMaxNumAllocatableRegisters); X87Register result; result.code_ = index; return result; @@ -173,7 +173,7 @@ struct X87Register { } int code() const { - ASSERT(is_valid()); + DCHECK(is_valid()); return code_; } @@ -292,6 +292,7 @@ class Immediate BASE_EMBEDDED { int x_; RelocInfo::Mode rmode_; + friend class Operand; friend class Assembler; friend class MacroAssembler; }; @@ -314,9 +315,14 @@ enum ScaleFactor { class Operand BASE_EMBEDDED { public: + // reg + INLINE(explicit Operand(Register reg)); + // [disp/r] INLINE(explicit Operand(int32_t disp, RelocInfo::Mode rmode)); - // disp only must always be relocated + + // [disp/r] + INLINE(explicit Operand(Immediate imm)); // [base + disp/r] explicit Operand(Register base, int32_t disp, @@ -353,6 +359,10 @@ class Operand BASE_EMBEDDED { RelocInfo::CELL); } + static Operand ForRegisterPlusImmediate(Register base, Immediate imm) { + return Operand(base, imm.x_, imm.rmode_); + } + // Returns true if this Operand is a wrapper for the specified register. bool is_reg(Register reg) const; @@ -364,9 +374,6 @@ class Operand BASE_EMBEDDED { Register reg() const; private: - // 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. inline void set_modrm(int mod, Register rm); @@ -383,7 +390,6 @@ class Operand BASE_EMBEDDED { friend class Assembler; friend class MacroAssembler; - friend class LCodeGen; }; @@ -502,6 +508,9 @@ class Assembler : public AssemblerBase { // of that call in the instruction stream. inline static Address target_address_from_return_address(Address pc); + // Return the code target address of the patch debug break slot + inline static Address break_address_from_return_address(Address pc); + // This sets the branch destination (which is in the instruction on x86). // This is for calls and branches within generated code. inline static void deserialization_set_special_target_at( @@ -630,8 +639,9 @@ class Assembler : public AssemblerBase { void rep_stos(); void stos(); - // Exchange two registers + // Exchange void xchg(Register dst, Register src); + void xchg(Register dst, const Operand& src); // Arithmetics void adc(Register dst, int32_t imm32); @@ -673,13 +683,17 @@ class Assembler : public AssemblerBase { void cdq(); - void idiv(Register src); + void idiv(Register src) { idiv(Operand(src)); } + void idiv(const Operand& src); + void div(Register src) { div(Operand(src)); } + void div(const Operand& src); // 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. + void imul(Register dst, const Operand& src, int32_t imm32); void inc(Register dst); void inc(const Operand& dst); @@ -690,8 +704,10 @@ class Assembler : public AssemblerBase { void mul(Register src); // edx:eax = eax * reg. void neg(Register dst); + void neg(const Operand& dst); void not_(Register dst); + void not_(const Operand& dst); void or_(Register dst, int32_t imm32); void or_(Register dst, Register src) { or_(dst, Operand(src)); } @@ -705,22 +721,28 @@ class Assembler : public AssemblerBase { void ror(Register dst, uint8_t imm8); void ror_cl(Register dst); - void sar(Register dst, uint8_t imm8); - void sar_cl(Register dst); + void sar(Register dst, uint8_t imm8) { sar(Operand(dst), imm8); } + void sar(const Operand& dst, uint8_t imm8); + void sar_cl(Register dst) { sar_cl(Operand(dst)); } + void sar_cl(const Operand& dst); 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 shl(Register dst, uint8_t imm8) { shl(Operand(dst), imm8); } + void shl(const Operand& dst, uint8_t imm8); + void shl_cl(Register dst) { shl_cl(Operand(dst)); } + void shl_cl(const Operand& 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 shr(Register dst, uint8_t imm8) { shr(Operand(dst), imm8); } + void shr(const Operand& dst, uint8_t imm8); + void shr_cl(Register dst) { shr_cl(Operand(dst)); } + void shr_cl(const Operand& dst); void sub(Register dst, const Immediate& imm) { sub(Operand(dst), imm); } void sub(const Operand& dst, const Immediate& x); @@ -1015,7 +1037,7 @@ class EnsureSpace BASE_EMBEDDED { #ifdef DEBUG ~EnsureSpace() { int bytes_generated = space_before_ - assembler_->available_space(); - ASSERT(bytes_generated < assembler_->kGap); + DCHECK(bytes_generated < assembler_->kGap); } #endif