5 #ifndef V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
6 #define V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
148 class MacroAssembler:
public Assembler {
157 #define COND_TYPED_ARGS Condition cond, Register r1, const Operand& r2
158 #define COND_ARGS cond, r1, r2
161 #define DECLARE_NORELOC_PROTOTYPE(Name, target_type) \
162 void Name(target_type target, BranchDelaySlot bd = PROTECT); \
163 inline void Name(BranchDelaySlot bd, target_type target) { \
166 void Name(target_type target, \
168 BranchDelaySlot bd = PROTECT); \
169 inline void Name(BranchDelaySlot bd, \
170 target_type target, \
172 Name(target, COND_ARGS, bd); \
175 #define DECLARE_BRANCH_PROTOTYPES(Name) \
176 DECLARE_NORELOC_PROTOTYPE(Name, Label*) \
177 DECLARE_NORELOC_PROTOTYPE(Name, int16_t)
183 #undef DECLARE_BRANCH_PROTOTYPES
184 #undef COND_TYPED_ARGS
189 #define COND_ARGS Condition cond = al, Register rs = zero_reg, \
190 const Operand& rt = Operand(zero_reg), BranchDelaySlot bd = PROTECT
211 Ret(cond, rs, rt, bd);
258 mfhc1(dst_high, src);
262 mfhc1(dst_high, src);
271 mthc1(src_high, dst);
335 Label* condition_met);
339 Label* if_deprecated);
379 Label* object_is_white_and_not_data);
385 Label* not_data_object);
423 remembered_set_action,
425 pointers_to_here_check_for_value);
481 return IsNop(instr, type);
493 bool sllzz = (opcode ==
SLL &&
544 Register scratch3, Label* gc_required);
582 #define DEFINE_INSTRUCTION(instr) \
583 void instr(Register rd, Register rs, const Operand& rt); \
584 void instr(Register rd, Register rs, Register rt) { \
585 instr(rd, rs, Operand(rt)); \
587 void instr(Register rs, Register rt, int32_t j) { \
588 instr(rs, rt, Operand(j)); \
591 #define DEFINE_INSTRUCTION2(instr) \
592 void instr(Register rs, const Operand& rt); \
593 void instr(Register rs, Register rt) { \
594 instr(rs, Operand(rt)); \
596 void instr(Register rs, int32_t j) { \
597 instr(rs, Operand(j)); \
632 #undef DEFINE_INSTRUCTION
633 #undef DEFINE_INSTRUCTION2
807 BranchF(target, nan,
cc, cmp1, cmp2, bd);
895 int stack_space = 0);
900 bool restore_context,
920 Label* no_map_match);
931 ExternalReference roots_array_start =
932 ExternalReference::roots_array_start(
isolate());
941 const ParameterCount& expected,
942 const ParameterCount& actual,
949 const ParameterCount& actual,
954 const ParameterCount& expected,
955 const ParameterCount& actual,
960 const ParameterCount& expected,
961 const ParameterCount& actual,
1035 bool miss_on_bound_function =
false);
1069 int elements_offset = 0);
1078 Label* early_success,
1086 Label* early_success,
1210 #define COND_ARGS Condition cond = al, Register rs = zero_reg, \
1211 const Operand& rt = Operand(zero_reg), BranchDelaySlot bd = PROTECT
1259 int num_double_arguments);
1271 int num_double_registers,
1288 int num_reg_arguments,
1289 int num_double_arguments);
1291 int num_reg_arguments,
1292 int num_double_arguments);
1309 ExternalReference thunk_ref,
1387 Label* not_power_of_two_or_zero);
1402 Addu(dst, src, src);
1414 TrySmiTag(reg, reg, scratch, not_a_smi);
1496 Label* not_smi_label,
1529 Label* on_not_heap_number);
1578 Label* not_flat_one_byte_strings);
1591 template<
typename Field>
1593 Ext(dst, src, Field::kShift, Field::kSize);
1596 template<
typename Field>
1598 DecodeField<Field>(reg, reg);
1601 template<
typename Field>
1603 static const int shift = Field::kShift;
1604 static const int mask = Field::kMask >>
shift;
1610 template<
typename Field>
1612 DecodeField<Field>(reg, reg);
1644 Label* no_memento_found,
1646 Label* allocation_memento_present =
NULL);
1650 Label* memento_found) {
1651 Label no_memento_found;
1653 &no_memento_found,
eq, memento_found);
1654 bind(&no_memento_found);
1663 int num_reg_arguments,
1664 int num_double_arguments);
1680 const ParameterCount& actual,
1684 bool* definitely_mismatches,
1770 #ifdef GENERATED_CODE_COVERAGE
1771 #define CODE_COVERAGE_STRINGIFY(x) #x
1772 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x)
1773 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__)
1774 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm->
1776 #define ACCESS_MASM(masm) masm->
Isolate * isolate() const
void ld(Register rd, const MemOperand &rs)
void sd(Register rd, const MemOperand &rs)
void lbu(Register rd, const MemOperand &rs)
void mfhc1(Register rt, FPURegister fs)
void dsra(Register rt, Register rd, uint16_t sa)
void hint(SystemHint code)
void mov_d(FPURegister fd, FPURegister fs)
void j(Condition cc, Label *L, Label::Distance distance=Label::kFar)
static bool IsNop(Instr instr, int type=NON_MARKING_NOP)
void dsrl(Register rd, Register rt, uint16_t sa)
void mtc1(Register rt, FPURegister fs)
void shift(Register dst, Immediate shift_amount, int subcode, int size)
void dsra32(Register rt, Register rd, uint16_t sa)
void or_(Register dst, int32_t imm32)
void sll(Register rd, Register rt, uint16_t sa, bool coming_from_nop=false)
void mfc1(Register rt, FPURegister fs)
void mthc1(Register rt, FPURegister fs)
void dsll32(Register rt, Register rd, uint16_t sa)
void sra(Register rt, Register rd, uint16_t sa)
void ChangeBranchCondition(Condition cond)
CodePatcher(byte *address, int instructions, FlushICache flush_cache=FLUSH)
static int SlotOffset(int index)
static const int kMapOffset
void Clz(Register rd, Register rs)
void Mul(const Register &rd, const Register &rn, const Register &rm)
void Trunc_uw_d(FPURegister fd, Register rs, FPURegister scratch)
void MovToFloatParameters(DoubleRegister src1, DoubleRegister src2)
DEFINE_INSTRUCTION2(Dmultu)
void Ret(BranchDelaySlot bd, Condition cond=al, Register rs=zero_reg, const Operand &rt=Operand(zero_reg))
void CopyBytes(Register src, Register dst, Register length, Register scratch)
void Pop(Register src1, Register src2, Register src3)
void InitializeRootRegister()
void GetObjectType(Register function, Register map, Register type_reg)
void JumpIfDataObject(Register value, Register scratch, Label *not_data_object)
void CompareMapAndBranch(Register obj_map, Handle< Map > map, Label *early_success, Condition cond, Label *branch_to)
void Store(Register src, const MemOperand &dst, Representation r)
void Check(Condition cc, BailoutReason reason, Register rs, Operand rt)
void BranchAndLinkShort(int16_t offset, Condition cond, Register rs, const Operand &rt, BranchDelaySlot bdslot=PROTECT)
void RetOnNoOverflow(Register overflow_check, BranchDelaySlot bd=PROTECT)
void BranchAndLinkShort(Label *L, BranchDelaySlot bdslot=PROTECT)
void JumpIfBothInstanceTypesAreNotSequentialOneByte(Register first_object_instance_type, Register second_object_instance_type, Register scratch1, Register scratch2, Label *failure)
void GetLeastBitsFromInt32(Register dst, Register src, int mun_least_bits)
void PushTryHandler(StackHandler::Kind kind, int handler_index)
void DecodeFieldToSmi(Register reg)
void TrySmiTag(Register dst, Register src, Register scratch, Label *not_a_smi)
void DecodeField(Register reg)
void Jalr(Label *L, BranchDelaySlot bdslot)
void LoadRoot(Register destination, Heap::RootListIndex index, Condition cond, Register src1, const Operand &src2)
void InitializeNewString(Register string, Register length, Heap::RootListIndex map_index, Register scratch1, Register scratch2)
void Move(FPURegister dst, FPURegister src)
void GetLeastBitsFromSmi(Register dst, Register src, int num_least_bits)
void JumpToHandlerEntry()
void Swap(Register reg1, Register reg2, Register scratch=no_reg)
void CallCFunction(ExternalReference function, int num_arguments)
void AssertName(Register object)
int CalculateStackPassedWords(int num_reg_arguments, int num_double_arguments)
void GetRelocatedValue(Register li_location, Register value, Register scratch)
void InvokeFunction(Handle< JSFunction > function, const ParameterCount &expected, const ParameterCount &actual, InvokeFlag flag, const CallWrapper &call_wrapper)
void Neg(const Register &rd, const Operand &operand)
void AllocateOneByteString(Register result, Register length, Register scratch1, Register scratch2, Register scratch3, Label *gc_required)
void Uld(Register rd, const MemOperand &rs, Register scratch=at)
void TruncateDoubleToI(Register result, DoubleRegister double_input)
void Trunc_l_d(FPURegister fd, FPURegister fs)
void RecordWriteForMap(Register object, Register map, Register dst, RAStatus ra_status, SaveFPRegsMode save_fp)
void EnterFrame(StackFrame::Type type)
void IsObjectNameType(Register object, Register scratch, Label *fail)
void CheckFastSmiElements(Register map, Register scratch, Label *fail)
void LoadContext(Register dst, int context_chain_length)
void LoadTransitionedArrayMapConditional(ElementsKind expected_kind, ElementsKind transitioned_kind, Register map_in_out, Register scratch, Label *no_map_match)
void MultiPushReversedFPU(RegList regs)
void LoadNumberAsInt32(Register object, Register dst, Register heap_number_map, Register scratch1, Register scratch2, FPURegister double_scratch0, FPURegister double_scratch1, Label *not_int32)
void SmiUntag(Register reg, SBit s=LeaveCC)
void Move(FPURegister dst, double imm)
void IsObjectJSStringType(Register object, Register scratch, Label *fail)
void DecodeField(Register dst, Register src)
void LeaveExitFrame(bool save_doubles, Register arg_count, bool restore_context, bool do_return=NO_EMIT_RETURN)
void AllocateHeapNumberWithValue(Register result, FPURegister value, Register scratch1, Register scratch2, Label *gc_required)
Handle< Object > CodeObject()
DEFINE_INSTRUCTION2(Ddivu)
void Call(Register target, COND_ARGS)
int CallSize(Handle< Code > code, RelocInfo::Mode rmode=RelocInfo::CODE_TARGET, TypeFeedbackId ast_id=TypeFeedbackId::None(), COND_ARGS)
void Ceil_l_d(FPURegister fd, FPURegister fs)
void LoadRoot(Register destination, Heap::RootListIndex index)
Handle< Object > code_object_
void InitializeFieldsWithFiller(Register start_offset, Register end_offset, Register filler)
void CallRuntime(Runtime::FunctionId id, int num_arguments, SaveFPRegsMode save_doubles=kDontSaveFPRegs)
DEFINE_INSTRUCTION2(Ddiv)
void Movz(Register rd, Register rs, Register rt)
void PatchRelocatedValue(Register li_location, Register scratch, Register new_value)
void ClampUint8(Register output_reg, Register input_reg)
void Floor_l_d(FPURegister fd, FPURegister fs)
static const int kSmiShift
void JumpIfNotUniqueNameInstanceType(Register reg, Label *not_unique_name)
void MultiPushFPU(RegList regs)
void UndoAllocationInNewSpace(Register object, Register scratch)
void CallRuntime(const Runtime::Function *f, int num_arguments, SaveFPRegsMode save_doubles=kDontSaveFPRegs)
void Call(Handle< Code > code, RelocInfo::Mode rmode=RelocInfo::CODE_TARGET, TypeFeedbackId ast_id=TypeFeedbackId::None(), COND_ARGS)
void Move(Register dst, Register src)
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 Jr(Label *L, BranchDelaySlot bdslot)
void Jump(intptr_t target, RelocInfo::Mode rmode, COND_ARGS)
void StoreRoot(Register source, Heap::RootListIndex index, Condition cond, Register src1, const Operand &src2)
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)
Condition IsObjectStringType(Register obj, Register type, Register result)
void PushRegisterAsTwoSmis(Register src, Register scratch=at)
void InNewSpace(Register object, Register scratch, Condition cond, Label *branch)
static bool IsMarkedCode(Instr instr, int type)
void mov(Register rd, Register rt)
void Trunc_l_ud(FPURegister fd, FPURegister fs, FPURegister scratch)
void CheckMapDeprecated(Handle< Map > map, Register scratch, Label *if_deprecated)
void TryGetFunctionPrototype(Register function, Register result, Register scratch, Label *miss, bool miss_on_bound_function=false)
DEFINE_INSTRUCTION(Dsubu)
void SmiTagCheckOverflow(Register dst, Register src, Register overflow)
void UntagAndJumpIfNotSmi(Register dst, Register src, Label *non_smi_case)
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 MultiPush(RegList regs)
void InvokeBuiltin(Builtins::JavaScript id, InvokeFlag flag, const CallWrapper &call_wrapper=NullCallWrapper())
void BranchAndLinkShort(int16_t offset, BranchDelaySlot bdslot=PROTECT)
void JumpIfNotInNewSpace(Register object, Register scratch, Label *branch)
void Jump(Register target, COND_ARGS)
void FmoveHigh(Register dst_high, FPURegister src)
void EnumLength(Register dst, Register map)
void Ror(const Register &rd, const Register &rs, unsigned shift)
void BranchF(BranchDelaySlot bd, Label *target, Label *nan, Condition cc, FPURegister cmp1, FPURegister cmp2)
void SmiUntag(Register dst, Register src)
void Move(FPURegister dst, Register src_low, Register src_high)
void CallJSExitStub(CodeStub *stub)
void MultiPopReversed(RegList regs)
void AllocateOneByteSlicedString(Register result, Register length, Register scratch1, Register scratch2, Label *gc_required)
void SmiLoadScale(Register dst, MemOperand src, int scale)
void RecordWriteContextSlot(Register context, int offset, Register value, Register scratch, RAStatus ra_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)
static int SafepointRegisterStackIndex(int reg_code)
void Trunc_w_d(FPURegister fd, FPURegister fs)
void AssertStackIsAligned()
Handle< Code > ResolveBuiltin(Builtins::JavaScript id, bool *resolved)
void NonNegativeSmiTst(Register value, Register scratch)
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)
void TailCallStub(CodeStub *stub, COND_ARGS)
void JumpToExternalReference(const ExternalReference &builtin, BranchDelaySlot bd=PROTECT)
void JumpIfNotSmi(Register value, Label *not_smi_label, Register scratch=at, BranchDelaySlot bd=PROTECT)
void SmiLoadUntagWithScale(Register d_int, Register d_scaled, MemOperand src, int scale)
static int GetCodeMarker(Instr instr)
void Assert(Condition cc, BailoutReason reason, Register rs, Operand rt)
void Throw(Register value)
void Allocate(int object_size, Register result, Register scratch1, Register scratch2, Label *gc_required, AllocationFlags flags)
void StoreRoot(Register source, Heap::RootListIndex index)
void Branch(Label *L, Condition cond, Register rs, Heap::RootListIndex index, BranchDelaySlot bdslot=PROTECT)
void DropAndRet(int drop)
void SmiTag(Register reg, SBit s=LeaveCC)
void Push(Register src1, Register src2, Register src3)
void Call(Address target, RelocInfo::Mode rmode, COND_ARGS)
void MultiPopFPU(RegList regs)
void IsInstanceJSObjectType(Register map, Register scratch, Label *fail)
void Drop(int count, Condition cond=cc_always, Register reg=no_reg, const Operand &op=Operand(no_reg))
void Allocate(Register object_size, Register result, Register scratch1, Register scratch2, Label *gc_required, AllocationFlags flags)
void AssertString(Register object)
void SmiTag(Register dst, Register src)
void CheckFastObjectElements(Register map, Register scratch, Label *fail)
void SmiLoadWithScale(Register d_smi, Register d_scaled, MemOperand src, int scale)
void StoreToSafepointRegisterSlot(Register src, Register dst)
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 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 DropAndRet(int drop, Condition cond, Register reg, const Operand &op)
void Pop(uint32_t count=1)
void TruncateNumberToI(Register object, Register result, Register heap_number_map, Register scratch, Label *not_int32)
void MovFromFloatParameter(DoubleRegister dst)
void IndexFromHash(Register hash, Register index)
void GetNumberHash(Register reg0, Register scratch)
void GetBuiltinFunction(Register target, Builtins::JavaScript id)
void LeaveFrame(StackFrame::Type type)
void li(Register rd, Operand j, LiFlags mode=OPTIMIZE_SIZE)
void CallExternalReference(const ExternalReference &ext, int num_arguments, BranchDelaySlot bd=PROTECT)
void Movt(Register rd, Register rs, uint16_t cc=0)
void And(Register dst, Register src1, const Operand &src2, Condition cond=al)
void BranchAndLinkShort(Label *L, Condition cond, Register rs, const Operand &rt, BranchDelaySlot bdslot=PROTECT)
void TailCallExternalReference(const ExternalReference &ext, int num_arguments, int result_size)
void Cvt_d_uw(FPURegister fd, Register rs, FPURegister scratch)
void InvokeFunction(Register function, const ParameterCount &actual, InvokeFlag flag, const CallWrapper &call_wrapper)
void RetOnOverflow(Register overflow_check, BranchDelaySlot bd=PROTECT)
void StoreNumberToDoubleElements(Register value_reg, Register key_reg, Register elements_reg, Register scratch1, Register scratch2, Register scratch3, Label *fail, int elements_offset=0)
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)
static int CallSize(Register target, COND_ARGS)
void MultiPop(RegList regs)
void set_generating_stub(bool value)
void BranchOnOverflow(Label *label, Register overflow_check, BranchDelaySlot bd=PROTECT)
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 li(Register rd, int64_t j, LiFlags mode=OPTIMIZE_SIZE)
void FmoveLow(Register dst_low, FPURegister src)
void MovToFloatParameter(DoubleRegister src)
void Push(Register src, Condition cond, Register tst1, Register tst2)
void SmiTagCheckOverflow(Register reg, Register overflow)
void Usw(Register rd, const MemOperand &rs)
void MovToFloatResult(DoubleRegister src)
void SubuAndCheckForOverflow(Register dst, Register left, Register right, Register overflow_dst, Register scratch=at)
void TrySmiTag(Register reg, Register scratch, Label *not_a_smi)
void Pop(Register src1, Register src2)
void PrepareCEntryArgs(int num_args)
void CallCFunctionHelper(Register function, int num_reg_arguments, int num_double_arguments)
void LoadInstanceDescriptors(Register map, Register descriptors)
void Trunc_uw_d(FPURegister fd, FPURegister fs, FPURegister scratch)
void Usd(Register rd, const MemOperand &rs, Register scratch=at)
void set_has_frame(bool value)
void Ceil_w_d(FPURegister fd, FPURegister fs)
void CallCFunction(ExternalReference function, int num_reg_arguments, int num_double_arguments)
void Load(Register dst, const MemOperand &src, Representation r)
void DecrementCounter(StatsCounter *counter, int value, Register scratch1, Register scratch2)
void Ext(Register rt, Register rs, uint16_t pos, uint16_t size)
void CheckMap(Register obj, Register scratch, Heap::RootListIndex index, Label *fail, SmiCheckType smi_check_type)
void SmiLoadUntag(Register dst, MemOperand src)
void UntagAndJumpIfSmi(Register dst, Register src, Label *smi_case)
void SmiUntag(Register reg)
void CallCFunction(Register function, int num_arguments)
void LoadFromNumberDictionary(Label *miss, Register elements, Register key, Register result, Register reg0, Register reg1, Register reg2)
DEFINE_INSTRUCTION(Dmulh)
void TailCallRuntime(Runtime::FunctionId fid, int num_arguments, int result_size)
void PrepareCEntryFunction(const ExternalReference &ref)
void AllocateTwoByteSlicedString(Register result, Register length, Register scratch1, Register scratch2, Label *gc_required)
void Ins(Register rt, Register rs, uint16_t pos, uint16_t size)
void JumpIfInstanceTypeIsNotSequentialOneByte(Register type, Register scratch, Label *failure)
void Jump(Handle< Code > code, RelocInfo::Mode rmode, COND_ARGS)
void DecodeFieldToSmi(Register dst, Register src)
DEFINE_INSTRUCTION2(Mult)
void SmiTst(Register value, Register scratch)
void LookupNumberStringCache(Register object, Register result, Register scratch1, Register scratch2, Register scratch3, Label *not_found)
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 BranchOnNoOverflow(Label *label, Register overflow_check, BranchDelaySlot bd=PROTECT)
void TestJSArrayForAllocationMemento(Register receiver_reg, Register scratch_reg, Label *no_memento_found, Condition cond=al, Label *allocation_memento_present=NULL)
void Madd_d(FPURegister fd, FPURegister fr, FPURegister fs, FPURegister ft, FPURegister scratch)
void TruncatingDiv(Register result, Register dividend, int32_t divisor)
void CallStub(CodeStub *stub, TypeFeedbackId ast_id=TypeFeedbackId::None(), COND_ARGS)
void EnterExitFrame(bool save_doubles, int stack_space=0)
MacroAssembler(Isolate *isolate, void *buffer, int size)
MemOperand SafepointRegisterSlot(Register reg)
void J(Label *L, BranchDelaySlot bdslot)
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 RecordWrite(Register object, Register address, Register value, RAStatus ra_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 Cvt_d_uw(FPURegister fd, FPURegister fs, FPURegister scratch)
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)
DEFINE_INSTRUCTION2(Dmult)
void LoadGlobalFunction(int index, Register function)
static int CallSize(Address target, RelocInfo::Mode rmode, COND_ARGS)
void AllocateOneByteConsString(Register result, Register length, Register scratch1, Register scratch2, Label *gc_required)
void PushSafepointRegisters()
void Round_l_d(FPURegister fd, FPURegister fs)
void AssertSmi(Register object)
void Push(Register src1, Register src2, Register src3, Register src4)
void Jump(Address target, RelocInfo::Mode rmode, COND_ARGS)
void PopSafepointRegisters()
void LoadNumber(Register object, FPURegister dst, Register heap_number_map, Register scratch, Label *not_number)
void EmitSeqStringSetCharCheck(Register string, Register index, Register value, Register scratch, uint32_t encoding_mask)
void FlushICache(Register address, unsigned instructions)
void LoadNumberAsInt32Double(Register object, DoubleRegister double_dst, Register heap_number_map, Register scratch1, Register scratch2, FPURegister double_scratch, Label *not_int32)
void SmiTag(Register reg)
void RecordWriteField(Register object, int offset, Register value, Register scratch, RAStatus ra_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)
MemOperand SafepointRegistersAndDoublesSlot(Register reg)
void JumpIfSmi(Register value, Label *smi_label, Register scratch=at, BranchDelaySlot bd=PROTECT)
void TruncateHeapNumberToI(Register result, Register object)
void Movn(Register rd, Register rs, Register rt)
void Ulw(Register rd, const MemOperand &rs)
void li(Register dst, Handle< Object > value, LiFlags mode=OPTIMIZE_SIZE)
void Movf(Register rd, Register rs, uint16_t cc=0)
void ClampDoubleToUint8(Register result_reg, DoubleRegister input_reg, DoubleRegister temp_double_reg)
DEFINE_INSTRUCTION2(Multu)
DEFINE_INSTRUCTION(Daddu)
void MarkCode(NopMarkerTypes type)
void ThrowUncatchable(Register value)
void RememberedSetHelper(Register object, Register addr, Register scratch, SaveFPRegsMode save_fp, RememberedSetFinalAction and_then)
void PopRegisterAsTwoSmis(Register dst, Register scratch=at)
void PrepareCallCFunction(int num_reg_arguments, int num_double_registers, Register scratch)
void GetBuiltinEntry(Register target, Builtins::JavaScript id)
void TestJSArrayForAllocationMemento(Register receiver_reg, Register scratch_reg, Label *no_memento_found)
void JumpIfJSArrayHasAllocationMemento(Register receiver_reg, Register scratch_reg, Label *memento_found)
void BranchF(Label *target, Label *nan, Condition cc, FPURegister cmp1, FPURegister cmp2, BranchDelaySlot bd=PROTECT)
void Pref(int32_t hint, const MemOperand &rs)
void Round_w_d(FPURegister fd, FPURegister fs)
void JumpIfNotPowerOfTwoOrZero(Register reg, Register scratch, Label *not_power_of_two_or_zero)
void JumpIfNonSmisNotBothSequentialOneByteStrings(Register first, Register second, Register scratch1, Register scratch2, Label *failure)
void JumpIfNotBothSequentialOneByteStrings(Register first, Register second, Register scratch1, Register scratch2, Label *not_flat_one_byte_strings)
void TrySmiTag(Register reg, Label *not_a_smi)
void Push(Register src1, Register src2)
void NumberOfOwnDescriptors(Register dst, Register map)
void MovFromFloatResult(DoubleRegister dst)
void AllocateHeapNumber(Register result, Register scratch1, Register scratch2, Register heap_number_map, Label *gc_required, TaggingMode tagging_mode=TAG_RESULT, MutableMode mode=IMMUTABLE)
void SmiToDoubleFPURegister(Register smi, FPURegister value, Register scratch1)
void HasColor(Register object, Register scratch0, Register scratch1, Label *has_color, int first_bit, int second_bit)
void TryInlineTruncateDoubleToI(Register result, DoubleRegister input, Label *done)
void CompareMapAndBranch(Register obj, Register scratch, Handle< Map > map, Label *early_success, Condition cond, Label *branch_to)
void ObjectToDoubleFPURegister(Register object, FPURegister value, Register scratch1, Register scratch2, Register heap_number_map, Label *not_number, ObjectToDoubleFlags flags=NO_OBJECT_TO_DOUBLE_FLAGS)
void JumpIfDictionaryInPrototypeChain(Register object, Register scratch0, Register scratch1, Label *found)
void AssertNotSmi(Register object)
void Floor_w_d(FPURegister fd, FPURegister fs)
void AdduAndCheckForOverflow(Register dst, Register left, Register right, Register overflow_dst, Register scratch=at)
void Move(Register dst_low, Register dst_high, FPURegister src)
void EmitFPUTruncate(FPURoundingMode rounding_mode, Register result, DoubleRegister double_input, Register scratch, DoubleRegister double_scratch, Register except_flag, CheckForInexactConversion check_inexact=kDontCheckForInexactConversion)
DEFINE_INSTRUCTION2(Divu)
void JumpIfBlack(Register object, Register scratch0, Register scratch1, Label *on_black)
void CheckPageFlag(Register object, Register scratch, int mask, Condition cc, Label *condition_met)
void CheckMap(Register obj, Register scratch, Handle< Map > map, Label *fail, SmiCheckType smi_check_type)
void MultiPopReversedFPU(RegList regs)
void MultiPushReversed(RegList regs)
void CallRuntimeSaveDoubles(Runtime::FunctionId id)
void Push(Handle< Object > handle)
void CopyFields(Register dst, Register src, RegList temps, int field_count)
void SmiScale(Register dst, Register src, int scale)
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
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)
#define DCHECK_EQ(v1, v2)
#define DECLARE_BRANCH_PROTOTYPES(Name)
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
CheckForInexactConversion
@ kDontCheckForInexactConversion
const intptr_t kSmiSignMask
@ NO_OBJECT_TO_DOUBLE_FLAGS
@ AVOID_NANS_AND_INFINITIES
int ToNumber(Register reg)
const uint32_t kStringTag
Handle< T > handle(T *t, Isolate *isolate)
MemOperand FieldMemOperand(Register object, int offset)
MemOperand CFunctionArgumentOperand(int index)
static bool SmiValuesAre32Bits()
const int kCArgsSlotsSize
MemOperand UntagSmiFieldMemOperand(Register object, int offset)
kFeedbackVectorOffset flag
MemOperand GlobalObjectOperand()
STATIC_ASSERT(sizeof(CPURegister)==sizeof(Register))
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
MemOperand UntagSmiMemOperand(Register object, int offset)
Debugger support for the V8 JavaScript engine.
bool is(FPURegister creg) const
bool is(Register reg) const