5 #ifndef V8_ARM_MACRO_ASSEMBLER_ARM_H_
6 #define V8_ARM_MACRO_ASSEMBLER_ARM_H_
158 if (!src.is_reg() || !src.rm().is(dst) || sbit !=
LeaveCC) {
159 mov(dst, src, sbit, cond);
201 Label* condition_met);
205 Label* if_deprecated);
245 Label* object_is_white_and_not_data);
251 Label* not_data_object);
289 remembered_set_action,
291 pointers_to_here_check_for_value);
344 Push(src2, src3, cond);
373 Push(src3, src4, cond);
377 Push(src2, src3, src4, cond);
405 Pop(src2, src3, cond);
434 Pop(src3, src4, cond);
438 Pop(src2, src3, src4, cond);
564 bool restore_context);
580 Label* no_map_match);
591 ExternalReference roots_array_start =
592 ExternalReference::roots_array_start(
isolate());
601 const ParameterCount& expected,
602 const ParameterCount& actual,
609 const ParameterCount& actual,
614 const ParameterCount& expected,
615 const ParameterCount& actual,
620 const ParameterCount& expected,
621 const ParameterCount& actual,
695 return IsNop(instr, type);
700 int dst_reg_offset = 12;
701 int dst_mask = 0xf << dst_reg_offset;
703 int dst_reg = (instr & dst_mask) >> dst_reg_offset;
704 int src_reg = instr & src_mask;
705 uint32_t non_register_mask = ~(dst_mask | src_mask);
709 int type = ((instr & non_register_mask) == mov_mask) &&
710 (dst_reg == src_reg) &&
759 Register scratch3, Label* gc_required);
827 bool miss_on_bound_function =
false);
886 int elements_offset = 0);
895 Label* early_success);
901 Label* early_success);
1074 int num_double_arguments);
1087 int num_double_registers,
1108 int num_reg_arguments,
1109 int num_double_arguments);
1111 int num_reg_arguments,
1112 int num_double_arguments);
1122 ExternalReference thunk_ref,
1189 #elif USE_EABI_HARDFLOAT
1205 Label* not_power_of_two_or_zero);
1214 Label* zero_and_neg,
1215 Label* not_power_of_two);
1241 mov(reg, Operand::SmiUntag(reg), s);
1244 mov(dst, Operand::SmiUntag(src), s);
1270 b(
ne, not_smi_label);
1301 Label* on_not_heap_number);
1331 Label* not_flat_one_byte_strings);
1371 template<
typename Field>
1373 Ubfx(dst, src, Field::kShift, Field::kSize);
1376 template<
typename Field>
1378 DecodeField<Field>(reg, reg);
1381 template<
typename Field>
1383 static const int shift = Field::kShift;
1398 template<
typename Field>
1400 DecodeField<Field>(reg, reg);
1420 Label* no_memento_found);
1424 Label* memento_found) {
1425 Label no_memento_found;
1428 b(
eq, memento_found);
1429 bind(&no_memento_found);
1438 int num_reg_arguments,
1439 int num_double_arguments);
1445 const ParameterCount& actual,
1449 bool* definitely_mismatches,
1580 if (FLAG_enable_ool_constant_pool) {
1585 if (FLAG_enable_ool_constant_pool) {
1611 #ifdef GENERATED_CODE_COVERAGE
1612 #define CODE_COVERAGE_STRINGIFY(x) #x
1613 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x)
1614 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__)
1615 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm->
1617 #define ACCESS_MASM(masm) masm->
static bool ArmUsingHardFloat()
Isolate * isolate() const
void and_(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
void stm(BlockAddrMode am, Register base, RegList src, Condition cond=al)
static bool IsNop(Instr instr, int type=NON_MARKING_NOP)
void add(Register dst, Register src1, const Operand &src2, SBit s=LeaveCC, Condition cond=al)
void set_constant_pool_available(bool available)
void shift(Register dst, Immediate shift_amount, int subcode, int size)
void str(Register src, const MemOperand &dst, Condition cond=al)
void ldrb(Register dst, const MemOperand &src, Condition cond=al)
void b(int branch_offset, Condition cond=al)
void ldm(BlockAddrMode am, Register base, RegList dst, Condition cond=al)
void tst(Register src1, const Operand &src2, Condition cond=al)
void ldr(Register dst, const MemOperand &src, Condition cond=al)
void EmitCondition(Condition cond)
CodePatcher(byte *address, int instructions, FlushICache flush_cache=FLUSH)
int old_constant_pool_available_
DISALLOW_IMPLICIT_CONSTRUCTORS(ConstantPoolUnavailableScope)
~ConstantPoolUnavailableScope()
ConstantPoolUnavailableScope(MacroAssembler *masm)
static int SlotOffset(int index)
~FrameAndConstantPoolScope()
bool old_constant_pool_available_
void GenerateLeaveFrame()
DISALLOW_IMPLICIT_CONSTRUCTORS(FrameAndConstantPoolScope)
FrameAndConstantPoolScope(MacroAssembler *masm, StackFrame::Type type)
static const int kMapOffset
void CheckObjectTypeRange(Register heap_object, Register map, InstanceType min_type, InstanceType max_type, Label *false_label)
void SmiUntag(Register dst, Register src, SBit s=LeaveCC)
void CopyBytes(Register src, Register dst, Register length, Register scratch)
void InitializeRootRegister()
void JumpIfDataObject(Register value, Register scratch, Label *not_data_object)
void Call(Register target, Condition cond=al)
void Store(Register src, const MemOperand &dst, Representation r)
void JumpIfBothInstanceTypesAreNotSequentialOneByte(Register first_object_instance_type, Register second_object_instance_type, Register scratch1, Register scratch2, Label *failure)
void VmovHigh(DwVfpRegister dst, Register src)
void GetLeastBitsFromInt32(Register dst, Register src, int mun_least_bits)
void PushTryHandler(StackHandler::Kind kind, int handler_index)
void VFPCanonicalizeNaN(const DwVfpRegister value, const Condition cond=al)
void DecodeFieldToSmi(Register reg)
void DecodeField(Register reg)
void InitializeNewString(Register string, Register length, Heap::RootListIndex map_index, Register scratch1, Register scratch2)
void GetLeastBitsFromSmi(Register dst, Register src, int num_least_bits)
void JumpToHandlerEntry()
void Drop(int count, Condition cond=al)
void CompareInstanceType(Register map, Register type_reg, InstanceType type)
void CallCFunction(ExternalReference function, int num_arguments)
void AssertName(Register object)
int CalculateStackPassedWords(int num_reg_arguments, int num_double_arguments)
void InvokeFunction(Handle< JSFunction > function, const ParameterCount &expected, const ParameterCount &actual, InvokeFlag flag, const CallWrapper &call_wrapper)
void TryInt32Floor(Register result, DwVfpRegister double_input, Register input_high, LowDwVfpRegister double_scratch, Label *done, Label *exact)
void AllocateOneByteString(Register result, Register length, Register scratch1, Register scratch2, Register scratch3, Label *gc_required)
void MovFromFloatResult(DwVfpRegister dst)
void Pop(Register src1, Register src2, Register src3, Condition cond=al)
void IsObjectNameType(Register object, Register scratch, Label *fail)
void CheckFastSmiElements(Register map, Register scratch, Label *fail)
void LoadConstantPoolPointerRegister()
void Push(Register src1, Register src2, Register src3, Condition cond=al)
void LoadContext(Register dst, int context_chain_length)
void Push(Register src1, Register src2, Condition cond=al)
void LoadTransitionedArrayMapConditional(ElementsKind expected_kind, ElementsKind transitioned_kind, Register map_in_out, Register scratch, Label *no_map_match)
void Move(Register dst, Register src, Condition cond=al)
void Pop(Register src1, Register src2, Condition cond=al)
void SmiUntag(Register reg, SBit s=LeaveCC)
void IsObjectJSStringType(Register object, Register scratch, Label *fail)
void DecodeField(Register dst, Register src)
void LoadNumberAsInt32(Register object, Register dst, Register heap_number_map, Register scratch, DwVfpRegister double_scratch0, LowDwVfpRegister double_scratch1, Label *not_int32)
void LeaveExitFrame(bool save_doubles, Register argument_count, bool restore_context)
void LoadNumber(Register object, LowDwVfpRegister dst, Register heap_number_map, Register scratch, Label *not_number)
void RecordWriteForMap(Register object, Register map, Register dst, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp)
void CopyFields(Register dst, Register src, LowDwVfpRegister double_scratch, int field_count)
Handle< Object > code_object_
void InitializeFieldsWithFiller(Register start_offset, Register end_offset, Register filler)
void Check(Condition cond, BailoutReason reason)
void CallRuntime(Runtime::FunctionId id, int num_arguments, SaveFPRegsMode save_doubles=kDontSaveFPRegs)
void TailCallStub(CodeStub *stub, Condition cond=al)
void ClampUint8(Register output_reg, Register input_reg)
void Vmov(const DwVfpRegister dst, const double imm, const Register scratch=no_reg)
void RecordWrite(Register object, Register address, Register value, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp, RememberedSetAction remembered_set_action=EMIT_REMEMBERED_SET, SmiCheck smi_check=INLINE_SMI_CHECK, PointersToHereCheck pointers_to_here_check_for_value=kPointersToHereMaybeInteresting)
void JumpToExternalReference(const ExternalReference &builtin)
void JumpIfNotUniqueNameInstanceType(Register reg, Label *not_unique_name)
void UndoAllocationInNewSpace(Register object, Register scratch)
void Swap(Register reg1, Register reg2, Register scratch=no_reg, Condition cond=al)
void CallRuntime(const Runtime::Function *f, int num_arguments, SaveFPRegsMode save_doubles=kDontSaveFPRegs)
void VFPCompareAndSetFlags(const DwVfpRegister src1, const DwVfpRegister src2, const Condition cond=al)
void ClampDoubleToUint8(Register result_reg, DwVfpRegister input_reg, LowDwVfpRegister double_scratch)
void MovFromFloatParameter(DwVfpRegister dst)
void RecordWriteContextSlot(Register context, int offset, Register value, Register scratch, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp, RememberedSetAction remembered_set_action=EMIT_REMEMBERED_SET, SmiCheck smi_check=INLINE_SMI_CHECK, PointersToHereCheck pointers_to_here_check_for_value=kPointersToHereMaybeInteresting)
void Call(Handle< Code > code, RelocInfo::Mode rmode=RelocInfo::CODE_TARGET, TypeFeedbackId ast_id=TypeFeedbackId::None(), Condition cond=al, TargetAddressStorageMode mode=CAN_INLINE_TARGET_ADDRESS)
void EnsureNotWhite(Register object, Register scratch1, Register scratch2, Register scratch3, Label *object_is_white_and_not_data)
void InvokeFunction(Register function, const ParameterCount &expected, const ParameterCount &actual, InvokeFlag flag, const CallWrapper &call_wrapper)
void CompareObjectType(Register heap_object, Register map, Register type_reg, InstanceType type)
void JumpIfInNewSpace(Register object, Register scratch, Label *branch)
void RecordWriteField(Register object, int offset, Register value, Register scratch, LinkRegisterStatus lr_status, SaveFPRegsMode save_fp, RememberedSetAction remembered_set_action=EMIT_REMEMBERED_SET, SmiCheck smi_check=INLINE_SMI_CHECK, PointersToHereCheck pointers_to_here_check_for_value=kPointersToHereMaybeInteresting)
void SmiTst(Register value)
Condition IsObjectStringType(Register obj, Register type, Condition cond=al)
void Push(Register src1, Register src2, Register src3, Register src4, Condition cond=al)
void InNewSpace(Register object, Register scratch, Condition cond, Label *branch)
static bool IsMarkedCode(Instr instr, int type)
void mov(Register rd, Register rt)
void CheckMapDeprecated(Handle< Map > map, Register scratch, Label *if_deprecated)
void Ldrd(Register dst1, Register dst2, const MemOperand &src, Condition cond=al)
void JumpIfSmi(Register value, Label *smi_label)
void SmiTag(Register dst, Register src, SBit s=LeaveCC)
void TryGetFunctionPrototype(Register function, Register result, Register scratch, Label *miss, bool miss_on_bound_function=false)
int LeaveFrame(StackFrame::Type type)
void UntagAndJumpIfNotSmi(Register dst, Register src, Label *non_smi_case)
void CompareRoot(Register obj, Heap::RootListIndex index)
static int ActivationFrameAlignment()
void AllocateTwoByteString(Register result, Register length, Register scratch1, Register scratch2, Register scratch3, Label *gc_required)
void PrepareCallCFunction(int num_reg_arguments, Register scratch)
void LoadFromNumberDictionary(Label *miss, Register elements, Register key, Register result, Register t0, Register t1, Register t2)
void InvokeBuiltin(Builtins::JavaScript id, InvokeFlag flag, const CallWrapper &call_wrapper=NullCallWrapper())
void RestoreFPRegs(Register location, Register scratch)
void JumpIfNotInNewSpace(Register object, Register scratch, Label *branch)
void JumpIfNotPowerOfTwoOrZeroAndNeg(Register reg, Register scratch, Label *zero_and_neg, Label *not_power_of_two)
void EnumLength(Register dst, Register map)
bool use_eabi_hardfloat()
void VFPCompareAndLoadFlags(const DwVfpRegister src1, const DwVfpRegister src2, const Register fpscr_flags, const Condition cond=al)
void AllocateOneByteSlicedString(Register result, Register length, Register scratch1, Register scratch2, Label *gc_required)
static int SafepointRegisterStackIndex(int reg_code)
void Bfi(Register dst, Register src, Register scratch, int lsb, int width, Condition cond=al)
void Strd(Register src1, Register src2, const MemOperand &dst, Condition cond=al)
STATIC_ASSERT((reg_zero==(reg_not_zero ^ 1)) &&(reg_bit_clear==(reg_bit_set ^ 1)) &&(always==(never ^ 1)))
void LoadGlobalFunctionInitialMap(Register function, Register map, Register scratch)
void CheckEnumCache(Register null_value, Label *call_runtime)
static int GetCodeMarker(Instr instr)
void Throw(Register value)
void Allocate(int object_size, Register result, Register scratch1, Register scratch2, Label *gc_required, AllocationFlags flags)
void Ret(int drop, Condition cond=al)
void SmiTag(Register reg, SBit s=LeaveCC)
void VmovLow(Register dst, DwVfpRegister src)
void Call(Address target, RelocInfo::Mode rmode, Condition cond=al, TargetAddressStorageMode mode=CAN_INLINE_TARGET_ADDRESS)
void StoreNumberToDoubleElements(Register value_reg, Register key_reg, Register elements_reg, Register scratch1, LowDwVfpRegister double_scratch, Label *fail, int elements_offset=0)
void Move(Register dst, Handle< Object > value)
void IsInstanceJSObjectType(Register map, Register scratch, Label *fail)
void TrySmiTag(Register reg, Register src, Label *not_a_smi)
void MovToFloatResult(DwVfpRegister src)
void Allocate(Register object_size, Register result, Register scratch1, Register scratch2, Label *gc_required, AllocationFlags flags)
void Bfc(Register dst, Register src, int lsb, int width, Condition cond=al)
void AssertString(Register object)
void CheckFastObjectElements(Register map, Register scratch, Label *fail)
void StoreToSafepointRegisterSlot(Register src, Register dst)
int CallSize(Handle< Code > code, RelocInfo::Mode rmode=RelocInfo::CODE_TARGET, TypeFeedbackId ast_id=TypeFeedbackId::None(), Condition cond=al)
void VFPCompareAndSetFlags(const DwVfpRegister src1, const double src2, const Condition cond=al)
void AssertFastElements(Register elements)
void AllocateTwoByteConsString(Register result, Register length, Register scratch1, Register scratch2, Label *gc_required)
bool AllowThisStubCall(CodeStub *stub)
void JumpIfEitherSmi(Register reg1, Register reg2, Label *on_either_smi)
void GetNumberHash(Register t0, Register scratch)
void Abort(BailoutReason msg)
void CallApiFunctionAndReturn(Register function_address, ExternalReference thunk_ref, int stack_space, MemOperand return_value_operand, MemOperand *context_restore_operand)
void IncrementCounter(StatsCounter *counter, int value, Register scratch1, Register scratch2)
void MovToFloatParameter(DwVfpRegister src)
void Ret(Condition cond=al)
void IndexFromHash(Register hash, Register index)
void GetBuiltinFunction(Register target, Builtins::JavaScript id)
void And(Register dst, Register src1, const Operand &src2, Condition cond=al)
void TailCallExternalReference(const ExternalReference &ext, int num_arguments, int result_size)
void InvokeFunction(Register function, const ParameterCount &actual, InvokeFlag flag, const CallWrapper &call_wrapper)
void CheckAccessGlobalProxy(Register holder_reg, Register scratch, Label *miss)
void DispatchMap(Register obj, Register scratch, Handle< Map > map, Handle< Code > success, SmiCheckType smi_check_type)
void EmitSeqStringSetCharCheck(Register string, Register index, Register value, uint32_t encoding_mask)
void set_generating_stub(bool value)
void GetRelocatedValueLocation(Register ldr_location, Register result, Register scratch)
void JumpIfNotBothSmi(Register reg1, Register reg2, Label *on_not_both_smi)
void InvokeCode(Register code, const ParameterCount &expected, const ParameterCount &actual, InvokeFlag flag, const CallWrapper &call_wrapper)
void Jump(Register target, Condition cond=al)
void VFPCompareAndLoadFlags(const DwVfpRegister src1, const double src2, const Register fpscr_flags, const Condition cond=al)
void Pop(Register src1, Register src2, Register src3, Register src4, Condition cond=al)
void StoreRoot(Register source, Heap::RootListIndex index, Condition cond=al)
void CallCFunctionHelper(Register function, int num_reg_arguments, int num_double_arguments)
void LoadInstanceDescriptors(Register map, Register descriptors)
void LoadNumberAsInt32Double(Register object, DwVfpRegister double_dst, Register heap_number_map, Register scratch, LowDwVfpRegister double_scratch, Label *not_int32)
void set_has_frame(bool value)
void CallCFunction(ExternalReference function, int num_reg_arguments, int num_double_arguments)
void Load(Register dst, const MemOperand &src, Representation r)
void CompareMap(Register obj, Register scratch, Handle< Map > map, Label *early_success)
void DecrementCounter(StatsCounter *counter, int value, Register scratch1, Register scratch2)
void VFPEnsureFPSCRState(Register scratch)
void CheckMap(Register obj, Register scratch, Heap::RootListIndex index, Label *fail, SmiCheckType smi_check_type)
void UntagAndJumpIfSmi(Register dst, Register src, Label *smi_case)
void CallCFunction(Register function, int num_arguments)
void CompareMap(Register obj_map, Handle< Map > map, Label *early_success)
void TailCallRuntime(Runtime::FunctionId fid, int num_arguments, int result_size)
void AllocateTwoByteSlicedString(Register result, Register length, Register scratch1, Register scratch2, Label *gc_required)
void Sbfx(Register dst, Register src, int lsb, int width, Condition cond=al)
void TruncateNumberToI(Register object, Register result, Register heap_number_map, Register scratch1, Label *not_int32)
void JumpIfInstanceTypeIsNotSequentialOneByte(Register type, Register scratch, Label *failure)
void CheckFor32DRegs(Register scratch)
void JumpIfNotSmi(Register value, Label *not_smi_label)
void DecodeFieldToSmi(Register dst, Register src)
void Assert(Condition cond, BailoutReason reason)
void VFPCanonicalizeNaN(const DwVfpRegister dst, const DwVfpRegister src, const Condition cond=al)
void LookupNumberStringCache(Register object, Register result, Register scratch1, Register scratch2, Register scratch3, Label *not_found)
void VmovHigh(Register dst, DwVfpRegister src)
void Jump(intptr_t target, RelocInfo::Mode rmode, Condition cond=al)
void EnterFrame(StackFrame::Type type, bool load_constant_pool=false)
void TryDoubleToInt32Exact(Register result, DwVfpRegister double_input, LowDwVfpRegister double_scratch)
void Prologue(bool code_pre_aging)
void CheckFastElements(Register map, Register scratch, Label *fail)
void SetCounter(StatsCounter *counter, int value, Register scratch1, Register scratch2)
void GetMarkBits(Register addr_reg, Register bitmap_reg, Register mask_reg)
void NonNegativeSmiTst(Register value)
void Ubfx(Register dst, Register src, int lsb, int width, Condition cond=al)
void TruncatingDiv(Register result, Register dividend, int32_t divisor)
void CallStub(CodeStub *stub, TypeFeedbackId ast_id=TypeFeedbackId::None(), Condition cond=al)
void EnterExitFrame(bool save_doubles, int stack_space=0)
MacroAssembler(Isolate *isolate, void *buffer, int size)
void PushFixedFrame(Register marker_reg=no_reg)
MemOperand SafepointRegisterSlot(Register reg)
void Move(Register dst, const Operand &src, SBit sbit=LeaveCC, Condition cond=al)
void LoadFromSafepointRegisterSlot(Register dst, Register src)
void IncrementalMarkingRecordWriteHelper(Register object, Register value, Register address)
void JumpIfNotHeapNumber(Register object, Register heap_number_map, Register scratch, Label *on_not_heap_number)
void CallExternalReference(const ExternalReference &ext, int num_arguments)
void TruncateDoubleToI(Register result, DwVfpRegister double_input)
void IsObjectJSObjectType(Register heap_object, Register map, Register scratch, Label *fail)
void InvokePrologue(const ParameterCount &expected, const ParameterCount &actual, Handle< Code > code_constant, Register code_reg, Label *done, bool *definitely_mismatches, InvokeFlag flag, const CallWrapper &call_wrapper)
void AssertIsRoot(Register reg, Heap::RootListIndex index)
void AssertUndefinedOrAllocationSite(Register object, Register scratch)
void CallCFunction(Register function, int num_reg_arguments, int num_double_arguments)
void VmovLow(DwVfpRegister dst, Register src)
void JumpIfNonSmisNotBothSequentialOneByteStrings(Register object1, Register object2, Register scratch1, Register scratch2, Label *failure)
void LoadGlobalFunction(int index, Register function)
void AllocateOneByteConsString(Register result, Register length, Register scratch1, Register scratch2, Label *gc_required)
void PushSafepointRegisters()
void AssertSmi(Register object)
void SaveFPRegs(Register location, Register scratch)
void PopSafepointRegisters()
MemOperand SafepointRegistersAndDoublesSlot(Register reg)
static int CallSize(Register target, Condition cond=al)
void TruncateHeapNumberToI(Register result, Register object)
void Mls(Register dst, Register src1, Register src2, Register srcA, Condition cond=al)
void MarkCode(NopMarkerTypes type)
void TryInlineTruncateDoubleToI(Register result, DwVfpRegister input, Label *done)
void ThrowUncatchable(Register value)
void RememberedSetHelper(Register object, Register addr, Register scratch, SaveFPRegsMode save_fp, RememberedSetFinalAction and_then)
void PrepareCallCFunction(int num_reg_arguments, int num_double_registers, Register scratch)
void Jump(Address target, RelocInfo::Mode rmode, Condition cond=al)
void GetBuiltinEntry(Register target, Builtins::JavaScript id)
void Usat(Register dst, int satpos, const Operand &src, Condition cond=al)
void LoadRoot(Register destination, Heap::RootListIndex index, Condition cond=al)
void TestJSArrayForAllocationMemento(Register receiver_reg, Register scratch_reg, Label *no_memento_found)
void JumpIfJSArrayHasAllocationMemento(Register receiver_reg, Register scratch_reg, Label *memento_found)
void Jump(Handle< Code > code, RelocInfo::Mode rmode, Condition cond=al)
int CallSize(Address target, RelocInfo::Mode rmode, Condition cond=al)
void JumpIfNotPowerOfTwoOrZero(Register reg, Register scratch, Label *not_power_of_two_or_zero)
void SmiToDouble(LowDwVfpRegister value, Register smi)
void JumpIfNotBothSequentialOneByteStrings(Register first, Register second, Register scratch1, Register scratch2, Label *not_flat_one_byte_strings)
void MovToFloatParameters(DwVfpRegister src1, DwVfpRegister src2)
void TrySmiTag(Register reg, Label *not_a_smi)
int CallStubSize(CodeStub *stub, TypeFeedbackId ast_id=TypeFeedbackId::None(), Condition cond=al)
void PopFixedFrame(Register marker_reg=no_reg)
void NumberOfOwnDescriptors(Register dst, Register map)
void AllocateHeapNumber(Register result, Register scratch1, Register scratch2, Register heap_number_map, Label *gc_required, TaggingMode tagging_mode=TAG_RESULT, MutableMode mode=IMMUTABLE)
void HasColor(Register object, Register scratch0, Register scratch1, Label *has_color, int first_bit, int second_bit)
void Move(DwVfpRegister dst, DwVfpRegister src)
void JumpIfDictionaryInPrototypeChain(Register object, Register scratch0, Register scratch1, Label *found)
void AssertNotSmi(Register object)
void JumpIfBlack(Register object, Register scratch0, Register scratch1, Label *on_black)
void CheckPageFlag(Register object, Register scratch, int mask, Condition cc, Label *condition_met)
static int CallSizeNotPredictableCodeSize(Isolate *isolate, Address target, RelocInfo::Mode rmode, Condition cond=al)
Handle< Object > CodeObject()
void CheckMap(Register obj, Register scratch, Handle< Map > map, Label *fail, SmiCheckType smi_check_type)
void CallRuntimeSaveDoubles(Runtime::FunctionId id)
void TestDoubleIsInt32(DwVfpRegister double_input, LowDwVfpRegister double_scratch)
void AllocateHeapNumberWithValue(Register result, DwVfpRegister value, Register scratch1, Register scratch2, Register heap_number_map, Label *gc_required)
static const int kInstanceTypeOffset
static const Function * FunctionForId(FunctionId id)
static TypeFeedbackId None()
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 map
enable harmony numeric enable harmony object literal extensions Optimize object size
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
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
const Register kRootRegister
MemOperand ContextOperand(Register context, int index)
bool AreAliased(const CPURegister ®1, const CPURegister ®2, const CPURegister ®3=NoReg, const CPURegister ®4=NoReg, const CPURegister ®5=NoReg, const CPURegister ®6=NoReg, const CPURegister ®7=NoReg, const CPURegister ®8=NoReg)
TypeImpl< ZoneTypeConfig > Type
const intptr_t kSmiSignMask
const uint32_t kStringTag
const int kRegister_r7_Code
Handle< T > handle(T *t, Isolate *isolate)
MemOperand FieldMemOperand(Register object, int offset)
const int kRegister_r8_Code
@ CAN_INLINE_TARGET_ADDRESS
@ NEVER_INLINE_TARGET_ADDRESS
kFeedbackVectorOffset flag
const int kRegister_r10_Code
MemOperand GlobalObjectOperand()
const intptr_t kSmiTagMask
Register GetRegisterThatIsNotOneOf(Register reg1, Register reg2=no_reg, Register reg3=no_reg, Register reg4=no_reg, Register reg5=no_reg, Register reg6=no_reg)
const uint32_t kIsNotStringMask
@ kPointersToHereMaybeInteresting
@ kPointersToHereAreAlwaysInteresting
Debugger support for the V8 JavaScript engine.
bool is(Register reg) const