40 #ifndef V8_ARM_ASSEMBLER_ARM_H_
41 #define V8_ARM_ASSEMBLER_ARM_H_
70 return Check(f, supported_);
75 return Check(f, found_by_runtime_probing_only_);
79 return Check(f, cross_compile_) ||
87 return cross_compile_ == 0;
91 unsigned mask = flag2set(f);
92 return cross_compile_ == 0 ||
93 (cross_compile_ & mask) == mask;
97 static bool Check(
CpuFeature f,
unsigned set) {
98 return (set & flag2set(f)) != 0;
106 static bool initialized_;
108 static unsigned supported_;
109 static unsigned found_by_runtime_probing_only_;
110 static unsigned cache_line_size_;
112 static unsigned cross_compile_;
164 FLAG_enable_ool_constant_pool ? 8 : 9;
181 const char*
const names[] = {
192 if (FLAG_enable_ool_constant_pool && (index >= 7)) {
193 return names[index + 1];
311 *m = (
code_ & 0x10) >> 4;
382 int encoded_code =
code_ << 1;
383 *m = (encoded_code & 0x10) >> 4;
384 *vm = encoded_code & 0x0F;
484 #define kFirstCalleeSavedDoubleReg d8
485 #define kLastCalleeSavedDoubleReg d15
486 #define kDoubleRegZero d14
487 #define kScratchDoubleReg d15
557 RelocInfo::Mode
rmode = RelocInfo::NONE32));
559 return Operand(static_cast<int32_t>(0));
586 INLINE(
bool is_reg()
const);
593 bool is_single_instruction(
const Assembler* assembler,
Instr instr = 0)
const;
594 bool must_output_reloc_info(
const Assembler* assembler)
const;
611 RelocInfo::Mode rmode_;
659 return offset_ >= 0 ? is_uint12(offset_) : is_uint12(-offset_);
680 explicit NeonMemOperand(Register rn,
AddrMode am =
Offset,
int align = 0);
683 explicit NeonMemOperand(Register rn, Register rm,
int align = 0);
687 int align()
const {
return align_; }
690 void SetAlignment(
int align);
701 explicit NeonListOperand(
DoubleRegister base,
int registers_count = 1);
713 explicit ConstantPoolBuilder();
714 void AddEntry(Assembler* assm,
const RelocInfo& rinfo);
715 void Relocate(
int pc_delta);
717 MaybeObject* Allocate(Heap* heap);
718 void Populate(Assembler* assm, ConstantPoolArray* constant_pool);
726 bool Is64BitEntry(RelocInfo::Mode rmode);
727 bool Is32BitEntry(RelocInfo::Mode rmode);
728 bool IsCodePtrEntry(RelocInfo::Mode rmode);
729 bool IsHeapPtrEntry(RelocInfo::Mode rmode);
731 std::vector<RelocInfo> entries_;
732 std::vector<int> merged_indexes_;
734 int count_of_code_ptr_;
735 int count_of_heap_ptr_;
901 void blx(
int branch_offset);
1097 void stop(
const char* msg,
1101 void bkpt(uint32_t imm16);
1310 const NeonListOperand& dst,
1311 const NeonMemOperand& src);
1313 const NeonListOperand& src,
1314 const NeonMemOperand& dst);
1333 void nop(
int type = 0);
1431 void db(uint8_t data);
1432 void dd(uint32_t data);
1446 *
reinterpret_cast<Instr*
>(
pc) = instr;
1511 constant_pool_full_ =
true;
1532 if (const_pool_blocked_nesting_++ == 0) {
1542 if (--const_pool_blocked_nesting_ == 0) {
1547 ASSERT((num_pending_32_bit_reloc_info_ == 0) ||
1548 (start + num_pending_64_bit_reloc_info_ *
kDoubleSize <
1550 ASSERT((num_pending_64_bit_reloc_info_ == 0) ||
1558 next_buffer_check_ = no_const_pool_before_;
1563 return (const_pool_blocked_nesting_ > 0) ||
1568 return constant_pool_available_;
1576 int next_buffer_check_;
1583 static const int kGap = 32;
1599 static const int kCheckPoolIntervalInst = 32;
1600 static const int kCheckPoolInterval = kCheckPoolIntervalInst *
kInstrSize;
1604 int const_pool_blocked_nesting_;
1605 int no_const_pool_before_;
1609 int first_const_pool_32_use_;
1610 int first_const_pool_64_use_;
1614 static const int kMaxRelocSize = RelocInfoWriter::kMaxSize;
1615 RelocInfoWriter reloc_info_writer;
1628 int num_pending_32_bit_reloc_info_;
1630 int num_pending_64_bit_reloc_info_;
1632 ConstantPoolBuilder constant_pool_builder_;
1635 int last_bound_pos_;
1639 bool constant_pool_available_;
1642 bool constant_pool_full_;
1645 inline void CheckBuffer();
1647 inline void emit(
Instr x);
1650 void move_32_bit_immediate(
Register rd,
1662 void print(Label* L);
1663 void bind_to(Label* L,
int pos);
1664 void next(Label* L);
1666 enum UseConstantPoolMode {
1668 DONT_USE_CONSTANT_POOL
1672 void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0);
1673 void RecordRelocInfo(
const RelocInfo& rinfo);
1674 void ConstantPoolAddEntry(
const RelocInfo& rinfo);
1691 assembler->CheckBuffer();
1698 #endif // V8_ARM_ASSEMBLER_ARM_H_
INLINE(static Operand PointerOffsetFromSmiKey(Register key))
void cmp(Register src1, const Operand &src2, Condition cond=al)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter NULL
INLINE(static MemOperand PointerAddressFromSmiKey(Register array, Register key, AddrMode am=Offset))
static bool IsBranch(Instr instr)
static const int kMaxDistToFPPool
static DwVfpRegister FromAllocationIndex(int index)
void ldrsb(Register dst, const MemOperand &src, Condition cond=al)
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of VFP3 instructions if available enable use of NEON instructions if available(ARM only)") DEFINE_bool(enable_sudiv
bool ImmediateFitsAddrMode1Instruction(int32_t imm32)
void sdiv(Register dst, Register src1, Register src2, Condition cond=al)
Isolate * isolate() const
static bool IsVldrDPcImmediateOffset(Instr instr)
void vcvt_f64_u32(const DwVfpRegister dst, const SwVfpRegister src, VFPConversionMode mode=kDefaultRoundToZero, const Condition cond=al)
void mrc(Coprocessor coproc, int opcode_1, Register rd, CRegister crn, CRegister crm, int opcode_2=0, Condition cond=al)
int InstructionsGeneratedSince(Label *label)
static int GetBranchOffset(Instr instr)
void ClearRecordedAstId()
static const int kDebugBreakSlotInstructions
INLINE(static Address target_pointer_address_at(Address pc))
void vcvt_f32_f64(const SwVfpRegister dst, const DwVfpRegister src, VFPConversionMode mode=kDefaultRoundToZero, const Condition cond=al)
static bool IsCmpRegister(Instr instr)
void PopulateConstantPool(ConstantPoolArray *constant_pool)
static void PrintFeatures()
const Instr kMovwLeaveCCFlip
void strh(Register src, const MemOperand &dst, Condition cond=al)
const int kDoubleSizeLog2
void bic(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
void mov_label_offset(Register dst, Label *label)
void mrs(Register dst, SRegister s, Condition cond=al)
const Instr kLdrPCPattern
const Instr kMovMvnPattern
const LowDwVfpRegister d11
int count_of_64bit() const
static bool IsStrRegFpNegOffset(Instr instr)
void instr_at_put(int pos, Instr instr)
const LowDwVfpRegister d0
void vabs(const DwVfpRegister dst, const DwVfpRegister src, const Condition cond=al)
const int kRegister_r7_Code
void sbc(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
static const int kMaxNumAllocatableRegisters
static bool IsStrRegisterImmediate(Instr instr)
void cmp_raw_immediate(Register src1, int raw_immediate, Condition cond=al)
static TypeFeedbackId None()
static bool IsMovW(Instr instr)
void pop(Register dst, Condition cond=al)
void mla(Register dst, Register src1, Register src2, Register srcA, SBit s=LeaveCC, Condition cond=al)
static bool IsVldrDPpImmediateOffset(Instr instr)
const int kRegister_pc_Code
static const int kPatchDebugBreakSlotReturnOffset
int SizeOfCodeGeneratedSince(Label *label)
void bfi(Register dst, Register src, int lsb, int width, Condition cond=al)
static int GetCmpImmediateRawImmediate(Instr instr)
int32_t immediate() const
bool is(QwNeonRegister reg) const
static int NumAllocatableRegisters()
bool is(LowDwVfpRegister reg) const
void push(Register src, Condition cond=al)
void tst(Register src1, Register src2, Condition cond=al)
void b(int branch_offset, Condition cond=al)
INLINE(static Operand DoubleOffsetFromSmiKey(Register key))
void vld1(NeonSize size, const NeonListOperand &dst, const NeonMemOperand &src)
void cmn(Register src1, const Operand &src2, Condition cond=al)
void ldrb(Register dst, const MemOperand &src, Condition cond=al)
void smull(Register dstL, Register dstH, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
static bool IsSupported(CpuFeature f)
static bool IsLdrPpImmediateOffset(Instr instr)
void clz(Register dst, Register src, Condition cond=al)
void vmul(const DwVfpRegister dst, const DwVfpRegister src1, const DwVfpRegister src2, const Condition cond=al)
static Address target_address_at(Address pc, ConstantPoolArray *constant_pool)
static int NumReservedRegisters()
static bool IsStrRegFpOffset(Instr instr)
int count_of_code_ptr() const
void vsqrt(const DwVfpRegister dst, const DwVfpRegister src, const Condition cond=al)
void RecordConstPool(int size)
static Register GetRm(Instr instr)
void bl(Label *L, Condition cond=al)
const LowDwVfpRegister d15
static Instr SetVldrDRegisterImmediateOffset(Instr instr, int offset)
TypeFeedbackId RecordedAstId()
#define ASSERT(condition)
static const int kPatchReturnSequenceAddressOffset
void bl(Condition cond, Label *L)
void svc(uint32_t imm24, Condition cond=al)
static bool IsCmpImmediate(Instr instr)
const int kPointerSizeLog2
void SetRecordedAstId(TypeFeedbackId ast_id)
static bool IsSafeForSnapshot(CpuFeature f)
void stm(BlockAddrMode am, Register base, RegList src, Condition cond=al)
static Instr instr_at(byte *pc)
static const int kMaxNumRegisters
const LowDwVfpRegister d3
void ldrd(Register dst1, Register dst2, const MemOperand &src, Condition cond=al)
void ldc2(Coprocessor coproc, CRegister crd, const MemOperand &src, LFlag l=Short)
static int NumAllocatableRegisters()
static void instr_at_put(byte *pc, Instr instr)
static DwVfpRegister from_code(int code)
const Instr kCmpCmnPattern
void blx(int branch_offset)
void target_at_put(int pos, int target_pos)
void vdiv(const DwVfpRegister dst, const DwVfpRegister src1, const DwVfpRegister src2, const Condition cond=al)
void vst1(NeonSize size, const NeonListOperand &src, const NeonMemOperand &dst)
const int kRegister_r3_Code
void vcvt_s32_f64(const SwVfpRegister dst, const DwVfpRegister src, VFPConversionMode mode=kDefaultRoundToZero, const Condition cond=al)
bool is(SwVfpRegister reg) const
static Instr SetLdrRegisterImmediateOffset(Instr instr, int offset)
const LowDwVfpRegister d10
void strb(Register src, const MemOperand &dst, Condition cond=al)
MemOperand(Register base, ptrdiff_t offset=0, AddrMode addrmode=Offset)
void ldrh(Register dst, const MemOperand &src, Condition cond=al)
void BlockConstPoolFor(int instructions)
ConstantPoolArray * constant_pool()
const VmovIndex VmovIndexHi
int count_of_32bit() const
static const char * AllocationIndexToString(int index)
bool is(CRegister creg) const
static const int kMaxNumPending32RelocInfo
static const int kNumRegisters
EnsureSpace(Assembler *assembler)
void mvn(Register dst, const Operand &src, SBit s=LeaveCC, Condition cond=al)
static Condition GetCondition(Instr instr)
void vneg(const DwVfpRegister dst, const DwVfpRegister src, const Condition cond=al)
static void deserialization_set_special_target_at(Address constant_pool_entry, Code *code, Address target)
void vcvt_f64_s32(const DwVfpRegister dst, const SwVfpRegister src, VFPConversionMode mode=kDefaultRoundToZero, const Condition cond=al)
const int kRegister_r2_Code
static bool IsPush(Instr instr)
void vldm(BlockAddrMode am, Register base, DwVfpRegister first, DwVfpRegister last, Condition cond=al)
bool is(DwVfpRegister reg) const
static const int kMaxNumAllocatableRegisters
bool OffsetIsUint12Encodable() const
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra emit comments in code disassembly enable use of SSE3 instructions if available enable use of CMOV instruction if available enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable loading bit constant by means of movw movt instruction enable unaligned accesses for enable use of d16 d31 registers on ARM this requires VFP3 force all emitted branches to be in long mode(MIPS only)") DEFINE_string(expose_natives_as
DwVfpRegister DoubleRegister
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object size
void vmls(const DwVfpRegister dst, const DwVfpRegister src1, const DwVfpRegister src2, const Condition cond=al)
const LowDwVfpRegister d14
const int32_t kDefaultStopCode
STATIC_ASSERT(sizeof(CPURegister)==sizeof(Register))
const LowDwVfpRegister d7
const LowDwVfpRegister d4
int count_of_heap_ptr() const
void pkhtb(Register dst, Register src1, const Operand &src2, Condition cond=al)
void vsub(const DwVfpRegister dst, const DwVfpRegister src1, const DwVfpRegister src2, const Condition cond=al)
const LowDwVfpRegister d13
static const int kSpecialTargetSize
friend class ExternalReference
const int kRegister_r5_Code
void GetCode(CodeDesc *desc)
const LowDwVfpRegister d6
void strd(Register src1, Register src2, const MemOperand &dst, Condition cond=al)
void orr(Register dst, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
static const int kPcLoadDelta
void teq(Register src1, const Operand &src2, Condition cond=al)
int branch_offset(Label *L, bool jump_elimination_allowed)
static int NumRegisters()
const int kRegister_r4_Code
void umlal(Register dstL, Register dstH, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
static bool IsPop(Instr instr)
const Instr kMovLeaveCCMask
void movt(Register reg, uint32_t immediate, Condition cond=al)
void cdp2(Coprocessor coproc, int opcode_1, CRegister crd, CRegister crn, CRegister crm, int opcode_2)
const LowDwVfpRegister d5
INLINE(static Operand SmiUntag(Register rm))
enable upcoming ES6 features enable harmony block scoping enable harmony enable harmony proxies enable harmony generators enable harmony numeric enable harmony string enable harmony math functions harmony_scoping harmony_symbols harmony_collections harmony_iteration harmony_strings harmony_scoping harmony_maths tracks arrays with only smi values Optimize object Array DOM strings and string pretenure call new trace pretenuring decisions of HAllocate instructions track fields with only smi values track fields with heap values track_fields track_fields Enables optimizations which favor memory size over execution speed use string slices optimization filter maximum number of GVN fix point iterations use function inlining use allocation folding eliminate write barriers targeting allocations in optimized code maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining crankshaft harvests type feedback from stub cache trace check elimination phase hydrogen tracing filter trace hydrogen to given file name trace inlining decisions trace store elimination trace all use positions trace global value numbering trace hydrogen escape analysis trace the tracking of allocation sites trace map generalization environment for every instruction deoptimize every n garbage collections put a break point before deoptimizing deoptimize uncommon cases use on stack replacement trace array bounds check elimination perform array index dehoisting use load elimination use store elimination use constant folding eliminate unreachable code number of stress runs when picking a function to watch for shared function not JSFunction itself flushes the cache of optimized code for closures on every GC functions with arguments object maximum number of escape analysis fix point iterations allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms concurrent on stack replacement do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes number of stack frames inspected by the profiler percentage of ICs that must have type info to allow optimization extra verbose compilation tracing generate extra code(assertions) for debugging") DEFINE_bool(code_comments
static Register FromAllocationIndex(int index)
void StartBlockConstPool()
static const int kMaxNumRegisters
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
static bool IsMovT(Instr instr)
void vadd(const DwVfpRegister dst, const DwVfpRegister src1, const DwVfpRegister src2, const Condition cond=al)
NeonListType type() const
INLINE(static Address target_address_at(Address pc, Code *code))
static Register from_code(int code)
const int kRegister_r8_Code
void vmrs(const Register dst, const Condition cond=al)
static int ToAllocationIndex(Register reg)
MaybeObject * AllocateConstantPool(Heap *heap)
void vmla(const DwVfpRegister dst, const DwVfpRegister src1, const DwVfpRegister src2, const Condition cond=al)
static bool IsFoundByRuntimeProbingOnly(CpuFeature f)
void str(Register src, const MemOperand &dst, Condition cond=al)
static const int kMaxDistToIntPool
void ldm(BlockAddrMode am, Register base, RegList dst, Condition cond=al)
const int kRegister_fp_Code
void split_code(int *vm, int *m) const
void vmov(const DwVfpRegister dst, double imm, const Register scratch=no_reg)
void CheckConstPool(bool force_emit, bool require_jump)
void mrc2(Coprocessor coproc, int opcode_1, Register rd, CRegister crn, CRegister crm, int opcode_2=0)
const int kRegister_lr_Code
const DwVfpRegister no_dreg
static Register GetRn(Instr instr)
static Address target_pointer_address_at(Address pc)
void uxtb16(Register dst, const Operand &src, Condition cond=al)
void mov(Register dst, Register src, SBit s=LeaveCC, Condition cond=al)
void pld(const MemOperand &address)
void eor(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
bool is_constant_pool_available() const
void add(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
static Instr SetStrRegisterImmediateOffset(Instr instr, int offset)
void set_offset(int32_t offset)
static const int kDebugBreakSlotLength
static bool IsTstImmediate(Instr instr)
const LowDwVfpRegister d9
void vcvt_f64_f32(const DwVfpRegister dst, const SwVfpRegister src, VFPConversionMode mode=kDefaultRoundToZero, const Condition cond=al)
static Register GetRd(Instr instr)
SwVfpRegister low() const
DoubleRegister base() const
void uxtb(Register dst, const Operand &src, Condition cond=al)
static bool IsNop(Instr instr, int type=NON_MARKING_NOP)
void RecordDebugBreakSlot()
const int kRegister_r10_Code
void vcvt_u32_f64(const SwVfpRegister dst, const DwVfpRegister src, VFPConversionMode mode=kDefaultRoundToZero, const Condition cond=al)
void ldr(Register dst, const MemOperand &src, Condition cond=al)
void stop(const char *msg, Condition cond=al, int32_t code=kDefaultStopCode)
void b(Condition cond, Label *L)
void movw(Register reg, uint32_t immediate, Condition cond=al)
void sub(Register dst, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
bool is(Register reg) const
const LowDwVfpRegister d2
static Instr SetAddRegisterImmediateOffset(Instr instr, int offset)
const Instr kMovLeaveCCPattern
friend class PlatformFeatureScope
void smlal(Register dstL, Register dstH, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
SwVfpRegister high() const
const int kRegister_r6_Code
Operand(Register reg, Shift shift=LSL, unsigned shift_amount=0)
void vldr(const DwVfpRegister dst, const Register base, int offset, const Condition cond=al)
Handle< T > handle(T *t, Isolate *isolate)
const Instr kLdrPpPattern
void RecordComment(const char *msg)
void bl(int branch_offset, Condition cond=al)
INLINE(static HeapObject *EnsureDoubleAligned(Heap *heap, HeapObject *object, int size))
static const int kMaxNumPending64RelocInfo
static int ToAllocationIndex(DwVfpRegister reg)
void emit_code_stub_address(Code *stub)
static bool IsVldrDRegisterImmediate(Instr instr)
void rsb(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
const VmovIndex VmovIndexLo
static Register GetCmpImmediateRegister(Instr instr)
void sbfx(Register dst, Register src, int lsb, int width, Condition cond=al)
const Instr kBlxRegPattern
void set_constant_pool_full()
static Address target_address_from_return_address(Address pc)
bool is_const_pool_blocked() const
static void PrintTarget()
friend class PositionsRecorder
INLINE(static Operand Zero())
static bool IsAddRegisterImmediate(Instr instr)
void vcmp(const DwVfpRegister src1, const DwVfpRegister src2, const Condition cond=al)
void mov(Register dst, const Operand &src, SBit s=LeaveCC, Condition cond=al)
static const int kSizeInBytes
QwNeonRegister QuadRegister
static bool VerifyCrossCompiling()
void vmsr(const Register dst, const Condition cond=al)
void vstr(const DwVfpRegister src, const Register base, int offset, const Condition cond=al)
static LowDwVfpRegister from_code(int code)
Assembler(Isolate *isolate, void *buffer, int buffer_size)
void usat(Register dst, int satpos, const Operand &src, Condition cond=al)
BlockConstPoolScope(Assembler *assem)
void ubfx(Register dst, Register src, int lsb, int width, Condition cond=al)
void bx(Register target, Condition cond=al)
void ldrsh(Register dst, const MemOperand &src, Condition cond=al)
static const int kJSReturnSequenceInstructions
uint32_t SRegisterFieldMask
INLINE(static void set_target_address_at(Address pc, Code *code, Address target))
static int GetVldrDRegisterImmediateOffset(Instr instr)
void orr(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
static Address return_address_from_call_start(Address pc)
static const int kSizeInBytes
bool is(DwVfpRegister reg) const
bool ImmediateFitsAddrMode2Instruction(int32_t imm32)
PositionsRecorder * positions_recorder()
const int kRegister_r0_Code
static const int kInstrSize
void cdp(Coprocessor coproc, int opcode_1, CRegister crd, CRegister crn, CRegister crm, int opcode_2, Condition cond=al)
static const char * AllocationIndexToString(int index)
static const int kSizeInBytes
const int kRegister_r1_Code
static void set_target_address_at(Address pc, ConstantPoolArray *constant_pool, Address target)
const LowDwVfpRegister d12
void cmp(Register src1, Register src2, Condition cond=al)
void bfc(Register dst, int lsb, int width, Condition cond=al)
static unsigned cache_line_size()
void mls(Register dst, Register src1, Register src2, Register srcA, Condition cond=al)
const LowDwVfpRegister d1
void and_(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
bool can_use_constant_pool() const
const int kRegister_r9_Code
const int kRegister_ip_Code
const int kRegister_sp_Code
void umull(Register dstL, Register dstH, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
static bool IsLdrRegisterImmediate(Instr instr)
void msr(SRegisterFieldMask fields, const Operand &src, Condition cond=al)
const LowDwVfpRegister d8
int64_t immediate() const
void set_constant_pool_available(bool available)
void split_code(int *vm, int *m) const
static QwNeonRegister from_code(int code)
void vmovl(NeonDataType dt, QwNeonRegister dst, DwVfpRegister src)
void ldc(Coprocessor coproc, CRegister crd, const MemOperand &src, LFlag l=Short, Condition cond=al)
static bool VerifyCrossCompiling(CpuFeature f)
static bool IsLdrRegFpNegOffset(Instr instr)
void bkpt(uint32_t imm16)
static const int kPatchDebugBreakSlotAddressOffset
void vstm(BlockAddrMode am, Register base, DwVfpRegister first, DwVfpRegister last, Condition cond=al)
void uxtab(Register dst, Register src1, const Operand &src2, Condition cond=al)
static int GetLdrRegisterImmediateOffset(Instr instr)
void b(Label *L, Condition cond=al)
TypeFeedbackId recorded_ast_id_
void sub(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
void vcvt_f32_s32(const SwVfpRegister dst, const SwVfpRegister src, VFPConversionMode mode=kDefaultRoundToZero, const Condition cond=al)
void rsc(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
void tst(Register src1, const Operand &src2, Condition cond=al)
static const int kMaxNumLowRegisters
RelocInfo::Mode rmode() const
static bool IsLdrRegFpOffset(Instr instr)
void add(Register dst, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
const int kRegister_no_reg_Code
static const int kNumReservedRegisters
void mcr2(Coprocessor coproc, int opcode_1, Register rd, CRegister crn, CRegister crm, int opcode_2=0)
void mul(Register dst, Register src1, Register src2, SBit s=LeaveCC, Condition cond=al)
static bool IsLdrPcImmediateOffset(Instr instr)
void mcr(Coprocessor coproc, int opcode_1, Register rd, CRegister crn, CRegister crm, int opcode_2=0, Condition cond=al)
void split_code(int *vm, int *m) const
void pkhbt(Register dst, Register src1, const Operand &src2, Condition cond=al)
void adc(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)