37 #ifndef V8_ARM_ASSEMBLER_ARM_INL_H_
38 #define V8_ARM_ASSEMBLER_ARM_INL_H_
100 void RelocInfo::apply(intptr_t delta,
ICacheFlushMode icache_flush_mode) {
111 Address RelocInfo::target_address() {
117 Address RelocInfo::target_address_address() {
121 if (FLAG_enable_ool_constant_pool ||
128 return constant_pool_entry_address();
133 Address RelocInfo::constant_pool_entry_address() {
139 int RelocInfo::target_address_size() {
144 void RelocInfo::set_target_address(
Address target,
153 host(),
this, HeapObject::cast(target_code));
158 Object* RelocInfo::target_object() {
164 Handle<Object> RelocInfo::target_object_handle(Assembler* origin) {
166 return Handle<Object>(
reinterpret_cast<Object**
>(
171 void RelocInfo::set_target_object(
Object* target,
176 reinterpret_cast<Address>(target),
180 target->IsHeapObject()) {
187 Address RelocInfo::target_reference() {
193 Address RelocInfo::target_runtime_entry(Assembler* origin) {
195 return target_address();
199 void RelocInfo::set_target_runtime_entry(
Address target,
203 if (target_address() != target)
204 set_target_address(target, write_barrier_mode, icache_flush_mode);
208 Handle<Cell> RelocInfo::target_cell_handle() {
211 return Handle<Cell>(
reinterpret_cast<Cell**
>(address));
215 Cell* RelocInfo::target_cell() {
221 void RelocInfo::set_target_cell(Cell* cell,
245 Code* RelocInfo::code_age_stub() {
253 void RelocInfo::set_code_age_stub(Code* stub,
258 stub->instruction_start();
262 Address RelocInfo::call_address() {
271 void RelocInfo::set_call_address(
Address target) {
278 host(),
this, HeapObject::cast(target_code));
283 Object* RelocInfo::call_object() {
284 return *call_object_address();
288 void RelocInfo::set_call_object(
Object* target) {
289 *call_object_address() = target;
293 Object** RelocInfo::call_object_address() {
300 void RelocInfo::WipeOut() {
309 bool RelocInfo::IsPatchedReturnSequence() {
320 bool RelocInfo::IsPatchedDebugBreakSlotSequence() {
329 visitor->VisitEmbeddedPointer(
this);
331 visitor->VisitCodeTarget(
this);
333 visitor->VisitCell(
this);
335 visitor->VisitExternalReference(
this);
337 visitor->VisitCodeAgeSequence(
this);
339 IsPatchedReturnSequence()) ||
341 IsPatchedDebugBreakSlotSequence())) &&
343 visitor->VisitDebugTarget(
this);
345 visitor->VisitRuntimeEntry(
this);
350 template<
typename StaticVisitor>
354 StaticVisitor::VisitEmbeddedPointer(heap,
this);
356 StaticVisitor::VisitCodeTarget(heap,
this);
358 StaticVisitor::VisitCell(heap,
this);
360 StaticVisitor::VisitExternalReference(
this);
362 StaticVisitor::VisitCodeAgeSequence(heap,
this);
365 IsPatchedReturnSequence()) ||
367 IsPatchedDebugBreakSlotSequence()))) {
368 StaticVisitor::VisitDebugTarget(heap,
this);
370 StaticVisitor::VisitRuntimeEntry(
this);
384 imm32_ =
reinterpret_cast<int32_t>(f.address());
391 imm32_ =
reinterpret_cast<intptr_t
>(value);
404 bool Operand::is_reg()
const {
405 return rm_.is_valid() &&
529 if (FLAG_enable_ool_constant_pool) {
537 bool Assembler::is_constant_pool_load(
Address pc) {
540 (FLAG_enable_ool_constant_pool &&
545 (FLAG_enable_ool_constant_pool &&
552 Address Assembler::constant_pool_entry_address(
553 Address pc, ConstantPoolArray* constant_pool) {
554 if (FLAG_enable_ool_constant_pool) {
575 cp_offset = (movt_instr->ImmedMovwMovtValue() << 16) |
576 movw_instr->ImmedMovwMovtValue();
582 return reinterpret_cast<Address>(constant_pool) + cp_offset;
593 if (is_constant_pool_load(
pc)) {
602 return reinterpret_cast<Address>(
627 if (is_constant_pool_load(
pc)) {
#define kScratchDoubleReg
static const int kInstrSize
static Address target_address_at(Address pc, ConstantPoolArray *constant_pool)
static bool IsNop(Instr instr, int type=NON_MARKING_NOP)
void CheckConstPool(bool force_emit, bool require_jump)
static const int kPatchDebugBreakSlotReturnOffset
static Address break_address_from_return_address(Address pc)
static bool IsMovImmed(Instr instr)
static Instr PatchShiftImm(Instr instr, int immed)
static bool IsMovW(Instr instr)
static bool IsMovT(Instr instr)
static void set_target_address_at(Address pc, ConstantPoolArray *constant_pool, Address target, ICacheFlushMode icache_flush_mode=FLUSH_ICACHE_IF_NEEDED)
static Address target_address_from_return_address(Address pc)
static bool IsOrrImmed(Instr instr)
static Address return_address_from_call_start(Address pc)
static int DecodeShiftImm(Instr instr)
static bool IsLdrPpRegOffset(Instr instr)
static bool IsLdrPcImmediateOffset(Instr instr)
static void deserialization_set_special_target_at(Address constant_pool_entry, Code *code, Address target)
static bool IsLdrPpImmediateOffset(Instr instr)
static bool IsBlxReg(Instr instr)
static const int kPcLoadDelta
static Instr PatchMovwImmediate(Instr instruction, uint32_t immediate)
static int GetLdrRegisterImmediateOffset(Instr instr)
void ret(const Register &xn=lr)
static const int kValueOffset
static Cell * FromValueAddress(Address value)
ConstantPoolArray * constant_pool()
static Code * GetCodeFromTargetAddress(Address address)
static void FlushICache(void *start, size_t size)
static bool IsSupported(CpuFeature f)
static bool SupportsCrankshaft()
bool has_break_points() const
IncrementalMarking * incremental_marking()
int ImmedMovwMovtValue() const
static Instruction * At(byte *pc)
static Object *& Object_at(Address addr)
static Address & Address_at(Address addr)
static int32_t & int32_at(Address addr)
Operand(Register reg, Shift shift=LSL, unsigned shift_amount=0)
Immediate immediate() const
static bool IsDebugBreakSlot(Mode mode)
static bool IsJSReturn(Mode mode)
static bool IsEmbeddedObject(Mode mode)
static bool IsRuntimeEntry(Mode mode)
static bool IsCodeTarget(Mode mode)
static bool IsExternalReference(Mode mode)
static bool IsInternalReference(Mode mode)
static bool IsCodeAgeSequence(Mode mode)
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS 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_BOOL(enable_always_align_csp
enable harmony numeric enable harmony object literal extensions Optimize object Array DOM strings and string trace pretenuring decisions of HAllocate instructions Enables optimizations which favor memory size over execution speed maximum source size in bytes considered for a single inlining maximum cumulative number of AST nodes considered for inlining trace the tracking of allocation sites deoptimize every n garbage collections perform array bounds checks elimination analyze liveness of environment slots and zap dead values flushes the cache of optimized code for closures on every GC allow uint32 values on optimize frames if they are used only in safe operations track concurrent recompilation artificial compilation delay in ms do not emit check maps for constant values that have a leaf deoptimize the optimized code if the layout of the maps changes enable context specialization in TurboFan execution budget before interrupt is triggered max percentage of megamorphic generic ICs to allow optimization enable use of SAHF instruction if enable use of VFP3 instructions if available enable use of NEON instructions if enable use of SDIV and UDIV instructions if enable use of MLS 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 enable alignment of csp to bytes on platforms which prefer the register to always be NULL
#define DCHECK(condition)
kSerializedDataOffset Object
static const int kNoCodeAgeSequenceLength
Debugger support for the V8 JavaScript engine.
static const int kNumReservedRegisters
bool is(DwVfpRegister reg) const
static int NumAllocatableRegisters()
static DwVfpRegister from_code(int code)
static int NumRegisters()
static int ToAllocationIndex(DwVfpRegister reg)
static int NumReservedRegisters()
static int NumAllocatableAliasedRegisters()
static DwVfpRegister FromAllocationIndex(int index)
static const int kMaxNumLowRegisters
static int NumAllocatableRegisters()
static const int kMaxNumAllocatableRegisters