28 #ifndef V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
29 #define V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
139 class MacroAssembler:
public Assembler {
148 #define COND_TYPED_ARGS Condition cond, Register r1, const Operand& r2
149 #define COND_ARGS cond, r1, r2
152 #define DECLARE_NORELOC_PROTOTYPE(Name, target_type) \
153 void Name(target_type target, BranchDelaySlot bd = PROTECT); \
154 inline void Name(BranchDelaySlot bd, target_type target) { \
157 void Name(target_type target, \
159 BranchDelaySlot bd = PROTECT); \
160 inline void Name(BranchDelaySlot bd, \
161 target_type target, \
163 Name(target, COND_ARGS, bd); \
166 #define DECLARE_BRANCH_PROTOTYPES(Name) \
167 DECLARE_NORELOC_PROTOTYPE(Name, Label*) \
168 DECLARE_NORELOC_PROTOTYPE(Name, int16_t)
174 #undef DECLARE_BRANCH_PROTOTYPES
175 #undef COND_TYPED_ARGS
180 #define COND_ARGS Condition cond = al, Register rs = zero_reg, \
181 const Operand& rt = Operand(zero_reg), BranchDelaySlot bd = PROTECT
184 void Jump(intptr_t target, RelocInfo::Mode rmode,
COND_ARGS);
192 RelocInfo::Mode rmode = RelocInfo::CODE_TARGET,
195 void Call(Handle<Code> code,
196 RelocInfo::Mode rmode = RelocInfo::CODE_TARGET,
202 Ret(cond, rs, rt, bd);
233 void Call(Label* target);
326 Label* condition_met);
330 Label* if_deprecated);
337 InNewSpace(
object, scratch,
ne, branch);
345 InNewSpace(
object, scratch,
eq, branch);
370 Label* object_is_white_and_not_data);
376 Label* not_data_object);
410 remembered_set_action,
458 return IsNop(instr, type);
470 bool sllzz = (opcode ==
SLL &&
471 rt ==
static_cast<uint32_t
>(
ToNumber(zero_reg)) &&
472 rs == static_cast<uint32_t>(
ToNumber(zero_reg)));
564 #define DEFINE_INSTRUCTION(instr) \
565 void instr(Register rd, Register rs, const Operand& rt); \
566 void instr(Register rd, Register rs, Register rt) { \
567 instr(rd, rs, Operand(rt)); \
569 void instr(Register rs, Register rt, int32_t j) { \
570 instr(rs, rt, Operand(j)); \
573 #define DEFINE_INSTRUCTION2(instr) \
574 void instr(Register rs, const Operand& rt); \
575 void instr(Register rs, Register rt) { \
576 instr(rs, Operand(rt)); \
578 void instr(Register rs, int32_t j) { \
579 instr(rs, Operand(j)); \
602 #undef DEFINE_INSTRUCTION
603 #undef DEFINE_INSTRUCTION2
703 void Pop(uint32_t count = 1) {
759 BranchF(target, nan, cc, cmp1, cmp2, bd);
847 int stack_space = 0);
852 bool restore_context,
872 Label* no_map_match);
883 ExternalReference roots_array_start =
884 ExternalReference::roots_array_start(
isolate());
893 const ParameterCount& expected,
894 const ParameterCount& actual,
901 const ParameterCount& actual,
906 const ParameterCount& expected,
907 const ParameterCount& actual,
912 const ParameterCount& expected,
913 const ParameterCount& actual,
935 #ifdef ENABLE_DEBUGGER_SUPPORT
996 bool miss_on_bound_function =
false);
1030 int elements_offset = 0);
1039 Label* early_success,
1047 Label* early_success,
1175 #define COND_ARGS Condition cond = al, Register rs = zero_reg, \
1176 const Operand& rt = Operand(zero_reg), BranchDelaySlot bd = PROTECT
1224 int num_double_arguments);
1236 int num_double_registers,
1250 void CallCFunction(ExternalReference
function,
int num_arguments);
1253 int num_reg_arguments,
1254 int num_double_arguments);
1256 int num_reg_arguments,
1257 int num_double_arguments);
1274 ExternalReference thunk_ref,
1303 ASSERT(!code_object_.is_null());
1304 return code_object_;
1352 Label* not_power_of_two_or_zero);
1358 Addu(reg, reg, reg);
1366 Addu(dst, src, src);
1373 TrySmiTag(reg, reg, scratch, not_a_smi);
1416 Label* not_smi_label,
1449 Label* on_not_heap_number);
1469 Register first_object_instance_type,
1470 Register second_object_instance_type,
1487 uint32_t encoding_mask);
1516 template<
typename Field>
1518 static const int shift = Field::kShift;
1519 static const int mask = (Field::kMask >> shift) <<
kSmiTagSize;
1520 srl(reg, reg, shift);
1553 Label* no_memento_found,
1555 Label* allocation_memento_present =
NULL);
1559 Label* memento_found) {
1560 Label no_memento_found;
1562 &no_memento_found,
eq, memento_found);
1563 bind(&no_memento_found);
1571 void CallCFunctionHelper(
Register function,
1572 int num_reg_arguments,
1573 int num_double_arguments);
1588 void InvokePrologue(
const ParameterCount& expected,
1589 const ParameterCount& actual,
1593 bool* definitely_mismatches,
1601 void InitializeNewString(
Register string,
1616 inline void GetMarkBits(
Register addr_reg,
1622 void JumpToHandlerEntry();
1625 static int SafepointRegisterStackIndex(
int reg_code);
1629 bool generating_stub_;
1671 #ifdef GENERATED_CODE_COVERAGE
1672 #define CODE_COVERAGE_STRINGIFY(x) #x
1673 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x)
1674 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__)
1675 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm->
1677 #define ACCESS_MASM(masm) masm->
1682 #endif // V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
void TrySmiTag(Register reg, Label *not_a_smi)
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
void Neg(const Register &rd, const Operand &operand)
void ClampUint8(Register output_reg, Register input_reg)
const int kCArgsSlotsSize
Isolate * isolate() const
void LoadNumber(Register object, LowDwVfpRegister dst, Register heap_number_map, Register scratch, Label *not_number)
void EmitFPUTruncate(FPURoundingMode rounding_mode, Register result, DoubleRegister double_input, Register scratch, DoubleRegister double_scratch, Register except_flag, CheckForInexactConversion check_inexact=kDontCheckForInexactConversion)
const intptr_t kSmiTagMask
const intptr_t kSmiSignMask
void PushSafepointRegisters()
void FlushICache(Register address, unsigned instructions)
void Branch(Label *L, Condition cond, Register rs, Heap::RootListIndex index, BranchDelaySlot bdslot=PROTECT)
static int SlotOffset(int index)
void InvokeFunction(Register function, const ParameterCount &actual, InvokeFlag flag, const CallWrapper &call_wrapper)
void SmiUntag(Register reg)
void mtc1(Register rt, FPURegister fs)
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 map
void SmiTag(Register dst, Register src)
CodePatcher(byte *address, int instructions, FlushICache flush_cache=FLUSH)
void AllocateTwoByteSlicedString(Register result, Register length, Register scratch1, Register scratch2, Label *gc_required)
void mov(Register rd, Register rt)
void IncrementalMarkingRecordWriteHelper(Register object, Register value, Register address)
void LoadNumberAsInt32Double(Register object, DwVfpRegister double_dst, Register heap_number_map, Register scratch, LowDwVfpRegister double_scratch, Label *not_int32)
void Push(Register src1, Register src2, Register src3, Register src4)
void JumpIfInNewSpace(Register object, Register scratch, Label *branch)
void AssertString(Register object)
void sw(Register rd, const MemOperand &rs)
void AdduAndCheckForOverflow(Register dst, Register left, Register right, Register overflow_dst, Register scratch=at)
void IsObjectJSStringType(Register object, Register scratch, Label *fail)
void mov_d(FPURegister fd, FPURegister fs)
static TypeFeedbackId None()
void JumpToExternalReference(const ExternalReference &builtin)
void Pop(Register src1, Register src2, Register src3)
void Cvt_d_uw(FPURegister fd, FPURegister fs, FPURegister scratch)
void UntagAndJumpIfSmi(Register dst, Register src, Label *smi_case)
void LoadInstanceDescriptors(Register map, Register descriptors)
void AllocateAsciiString(Register result, Register length, Register scratch1, Register scratch2, Register scratch3, Label *gc_required)
void JumpIfNotBothSequentialAsciiStrings(Register first, Register second, Register scratch1, Register scratch2, Label *not_flat_ascii_strings)
void LoadFromNumberDictionary(Label *miss, Register elements, Register key, Register result, Register t0, Register t1, Register t2)
void JumpIfDictionaryInPrototypeChain(Register object, Register scratch0, Register scratch1, Label *found)
void or_(Register dst, int32_t imm32)
void CheckMap(Register obj, Register scratch, Handle< Map > map, Label *fail, SmiCheckType smi_check_type)
void Store(Register src, const MemOperand &dst, Representation r)
void SubuAndCheckForOverflow(Register dst, Register left, Register right, Register overflow_dst, Register scratch=at)
void GetBuiltinEntry(Register target, Builtins::JavaScript id)
void JumpIfSmi(Register value, Label *smi_label)
void MovFromFloatParameter(DwVfpRegister dst)
void DispatchMap(Register obj, Register scratch, Handle< Map > map, Handle< Code > success, SmiCheckType smi_check_type)
TypeImpl< ZoneTypeConfig > Type
bool AllowThisStubCall(CodeStub *stub)
void JumpIfNotPowerOfTwoOrZero(Register reg, Register scratch, Label *not_power_of_two_or_zero)
void EnterFrame(StackFrame::Type type, bool load_constant_pool=false)
void StoreToSafepointRegisterSlot(Register src, Register dst)
void PopSafepointRegistersAndDoubles()
void LeaveExitFrame(bool save_doubles, Register argument_count, bool restore_context)
void FmoveHigh(Register dst_high, FPURegister src)
void CheckFastObjectElements(Register map, Register scratch, Label *fail)
void j(Condition cc, Label *L, Label::Distance distance=Label::kFar)
static const Function * FunctionForId(FunctionId id)
DEFINE_INSTRUCTION2(Mult)
void Swap(Register reg1, Register reg2, Register scratch=no_reg, Condition cond=al)
void InvokeCode(Register code, const ParameterCount &expected, const ParameterCount &actual, InvokeFlag flag, const CallWrapper &call_wrapper)
bool is(FPURegister creg) const
void MultiPopReversed(RegList regs)
void ThrowIf(Condition cc, BailoutReason reason)
#define ASSERT(condition)
#define DECLARE_BRANCH_PROTOTYPES(Name)
void AssertNotSmi(Register object)
void Pop(uint32_t count=1)
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)
void SmiTagCheckOverflow(Register reg, Register overflow)
void PushTryHandler(StackHandler::Kind kind, int handler_index)
void LoadTransitionedArrayMapConditional(ElementsKind expected_kind, ElementsKind transitioned_kind, Register map_in_out, Register scratch, Label *no_map_match)
void And(Register dst, Register src1, const Operand &src2, Condition cond=al)
void Usw(Register rd, const MemOperand &rs)
static bool IsMarkedCode(Instr instr, int type)
void NumberOfOwnDescriptors(Register dst, Register map)
void Ext(Register rt, Register rs, uint16_t pos, uint16_t size)
MemOperand GlobalObjectOperand()
void IncrementCounter(StatsCounter *counter, int value, Register scratch1, Register scratch2)
void Move(FPURegister dst, Register src_low, Register src_high)
void RetOnOverflow(Register overflow_check, BranchDelaySlot bd=PROTECT)
void Mul(const Register &rd, const Register &rn, const Register &rm)
void MarkCode(NopMarkerTypes type)
void Load(Register dst, const MemOperand &src, Representation r)
MemOperand ContextOperand(Register context, int index)
void RetOnNoOverflow(Register overflow_check, BranchDelaySlot bd=PROTECT)
void AssertSmi(Register object)
void JumpIfNotUniqueName(Register reg, Label *not_unique_name)
void DecrementCounter(StatsCounter *counter, int value, Register scratch1, Register scratch2)
void StoreToSafepointRegistersAndDoublesSlot(Register src, Register dst)
void TruncatingDiv(Register result, Register dividend, int32_t divisor)
void EmitSeqStringSetCharCheck(Register string, Register index, Register value, uint32_t encoding_mask)
kInstanceClassNameOffset flag
void Ulw(Register rd, const MemOperand &rs)
void Movn(Register rd, Register rs, Register rt)
void Abort(BailoutReason msg)
const Register kRootRegister
void IsObjectNameType(Register object, Register scratch, Label *fail)
void Movz(Register rd, Register rs, Register rt)
void PrepareCEntryFunction(const ExternalReference &ref)
void MultiPush(RegList regs)
void JumpIfInstanceTypeIsNotSequentialAscii(Register type, Register scratch, Label *failure)
void SmiToDoubleFPURegister(Register smi, FPURegister value, Register scratch1)
void MovFromFloatResult(DwVfpRegister dst)
void JumpIfNotHeapNumber(Register object, Register heap_number_map, Register scratch, Label *on_not_heap_number)
void Pref(int32_t hint, const MemOperand &rs)
void PrepareCEntryArgs(int num_args)
void MultiPop(RegList regs)
void JumpIfNotInNewSpace(Register object, Register scratch, Label *branch)
void IsObjectJSObjectType(Register heap_object, Register map, Register scratch, Label *fail)
void BranchOnNoOverflow(Label *label, Register overflow_check, BranchDelaySlot bd=PROTECT)
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
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 sra(Register rt, Register rd, uint16_t sa)
void TestJSArrayForAllocationMemento(Register receiver_reg, Register scratch_reg, Label *no_memento_found)
void EnumLength(Register dst, Register map)
static int ActivationFrameAlignment()
void TruncateNumberToI(Register object, Register result, Register heap_number_map, Register scratch1, Label *not_int32)
void lbu(Register rd, const MemOperand &rs)
void MovToFloatResult(DwVfpRegister src)
void CheckFastElements(Register map, Register scratch, Label *fail)
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 expose natives in global object expose freeBuffer extension expose gc extension under the specified name expose externalize string extension number of stack frames to capture disable builtin natives files print name of functions for which code is generated use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations always try to OSR functions trace optimize function deoptimization minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions trace debugging JSON request response trace out of bounds accesses to external arrays trace_js_array_abuse automatically set the debug break flag when debugger commands are in the queue abort by crashing maximum length of function source code printed in a stack trace max size of the new max size of the old max size of executable always perform global GCs print one trace line following each garbage collection do not print trace line after scavenger collection print statistics of the maximum memory committed for the heap in only print modified registers Don t break for ASM_UNIMPLEMENTED_BREAK macros print stack trace when an illegal exception is thrown randomize hashes to avoid predictable hash Fixed seed to use to hash property Print the time it takes to deserialize the snapshot testing_bool_flag testing_int_flag string flag tmp file in which to serialize heap Print the time it takes to lazily compile hydrogen code stubs concurrent_recompilation concurrent_sweeping Print usage including flags
void LoadGlobalFunction(int index, Register function)
void CheckPageFlag(Register object, Register scratch, int mask, Condition cc, Label *condition_met)
void TryGetFunctionPrototype(Register function, Register result, Register scratch, Label *miss, bool miss_on_bound_function=false)
void TrySmiTag(Register reg, Register scratch, Label *not_a_smi)
void ChangeBranchCondition(Condition cond)
void SmiTst(Register value, Register scratch)
void CallStub(CodeStub *stub, TypeFeedbackId ast_id=TypeFeedbackId::None(), Condition cond=al)
void CallCFunction(ExternalReference function, int num_arguments)
void DecodeField(Register reg)
void AllocateAsciiConsString(Register result, Register length, Register scratch1, Register scratch2, Label *gc_required)
void IsInstanceJSObjectType(Register map, Register scratch, Label *fail)
void CheckFastSmiElements(Register map, Register scratch, Label *fail)
void Jump(Register target, Condition cond=al)
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)
void JumpIfDataObject(Register value, Register scratch, Label *not_data_object)
void TruncateHeapNumberToI(Register result, Register object)
void Push(Register src1, Register src2)
void Allocate(int object_size, Register result, Register scratch1, Register scratch2, Label *gc_required, AllocationFlags flags)
void AllocateHeapNumber(Register result, Register scratch1, Register scratch2, Register heap_number_map, Label *gc_required, TaggingMode tagging_mode=TAG_RESULT)
void CopyBytes(Register src, Register dst, Register length, Register scratch)
void Throw(Register value)
void Move(FPURegister dst, FPURegister src)
void Move(Register dst, Handle< Object > value)
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
void DropAndRet(int drop)
void Ins(Register rt, Register rs, uint16_t pos, uint16_t size)
void Movt(Register rd, Register rs, uint16_t cc=0)
void srl(Register rd, Register rt, uint16_t sa)
void set_has_frame(bool value)
void SetCounter(StatsCounter *counter, int value, Register scratch1, Register scratch2)
void AssertStackIsAligned()
void GetRelocatedValue(Register li_location, Register value, Register scratch)
void Floor_w_d(FPURegister fd, FPURegister fs)
void SmiUntag(Register dst, Register src)
void GetLeastBitsFromInt32(Register dst, Register src, int mun_least_bits)
MacroAssembler(Isolate *isolate, void *buffer, int size)
const uint32_t kStringTag
void LoadContext(Register dst, int context_chain_length)
Condition IsObjectStringType(Register obj, Register type, Register result)
void CallExternalReference(const ExternalReference &ext, int num_arguments)
static int CallSize(Register target, Condition cond=al)
void CallApiFunctionAndReturn(Register function_address, ExternalReference thunk_ref, int stack_space, MemOperand return_value_operand, MemOperand *context_restore_operand)
void AssertFastElements(Register elements)
void GetLeastBitsFromSmi(Register dst, Register src, int num_least_bits)
void CheckMapDeprecated(Handle< Map > map, Register scratch, Label *if_deprecated)
void PushSafepointRegistersAndDoubles()
void CompareMapAndBranch(Register obj, Register scratch, Handle< Map > map, Label *early_success, Condition cond, Label *branch_to)
void JumpIfNotBothSmi(Register reg1, Register reg2, Label *on_not_both_smi)
void JumpIfBlack(Register object, Register scratch0, Register scratch1, Label *on_black)
void lw(Register rd, const MemOperand &rs)
void ClampDoubleToUint8(Register result_reg, DwVfpRegister input_reg, LowDwVfpRegister double_scratch)
void AllocateTwoByteConsString(Register result, Register length, Register scratch1, Register scratch2, Label *gc_required)
void Pop(Register src1, Register src2)
static bool IsNop(Instr instr, int type=NON_MARKING_NOP)
void Drop(int count, Condition cond=al)
void GetBuiltinFunction(Register target, Builtins::JavaScript id)
void NonNegativeSmiTst(Register value, Register scratch)
void Movf(Register rd, Register rs, uint16_t cc=0)
void IllegalOperation(int num_arguments)
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 shift
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 CheckAccessGlobalProxy(Register holder_reg, Register scratch, Label *miss)
void CopyFields(Register dst, Register src, LowDwVfpRegister double_scratch, int field_count)
static const int kMapOffset
int ToNumber(Register reg)
bool is(Register reg) const
void LookupNumberStringCache(Register object, Register result, Register scratch1, Register scratch2, Register scratch3, Label *not_found)
void TruncateDoubleToI(Register result, DwVfpRegister double_input)
const uint32_t kIsNotStringMask
Register GetRegisterThatIsNotOneOf(Register reg1, Register reg2=no_reg, Register reg3=no_reg, Register reg4=no_reg, Register reg5=no_reg, Register reg6=no_reg)
void SmiTag(Register reg)
void Clz(const Register &rd, const Register &rn)
void li(Register rd, Operand j, LiFlags mode=OPTIMIZE_SIZE)
void CallRuntimeSaveDoubles(Runtime::FunctionId id)
Handle< T > handle(T *t, Isolate *isolate)
void ThrowUncatchable(Register value)
void Trunc_uw_d(FPURegister fd, FPURegister fs, FPURegister scratch)
void TrySmiTag(Register dst, Register src, Register scratch, Label *not_a_smi)
MemOperand CFunctionArgumentOperand(int index)
void StoreRoot(Register source, Heap::RootListIndex index, Condition cond=al)
MemOperand FieldMemOperand(Register object, int offset)
void PrepareCallCFunction(int num_reg_arguments, int num_double_registers, Register scratch)
void GetObjectType(Register function, Register map, Register type_reg)
void MovToFloatParameters(DwVfpRegister src1, DwVfpRegister src2)
void LoadNumberAsInt32(Register object, Register dst, Register heap_number_map, Register scratch, DwVfpRegister double_scratch0, LowDwVfpRegister double_scratch1, Label *not_int32)
void LoadGlobalFunctionInitialMap(Register function, Register map, Register scratch)
void GetNumberHash(Register t0, Register scratch)
void hint(SystemHint code)
void CallRuntime(const Runtime::Function *f, int num_arguments, SaveFPRegsMode save_doubles=kDontSaveFPRegs)
void MultiPopReversedFPU(RegList regs)
Handle< Object > CodeObject()
void Ror(const Register &rd, const Register &rs, unsigned shift)
static int GetCodeMarker(Instr instr)
void li(Register rd, int32_t j, LiFlags mode=OPTIMIZE_SIZE)
void JumpIfNonSmisNotBothSequentialAsciiStrings(Register object1, Register object2, Register scratch1, Register scratch2, Label *failure)
void mfc1(Register rt, FPURegister fs)
void JumpIfBothInstanceTypesAreNotSequentialAscii(Register first_object_instance_type, Register second_object_instance_type, Register scratch1, Register scratch2, Label *failure)
void MovToFloatParameter(DwVfpRegister src)
void UndoAllocationInNewSpace(Register object, Register scratch)
void Ret(BranchDelaySlot bd, Condition cond=al, Register rs=zero_reg, const Operand &rt=Operand(zero_reg))
void Prologue(PrologueFrameMode frame_mode)
void LoadFromSafepointRegisterSlot(Register dst, Register src)
void Push(Register src, Condition cond, Register tst1, Register tst2)
#define ASSERT_EQ(v1, v2)
void JumpIfJSArrayHasAllocationMemento(Register receiver_reg, Register scratch_reg, Label *memento_found)
void Call(Register target, Condition cond=al)
void Trunc_w_d(FPURegister fd, FPURegister fs)
void FmoveLow(Register dst_low, FPURegister src)
void AllocateAsciiSlicedString(Register result, Register length, Register scratch1, Register scratch2, Label *gc_required)
void set_generating_stub(bool value)
void Check(Condition cond, BailoutReason reason)
void CallRuntime(Runtime::FunctionId id, int num_arguments, SaveFPRegsMode save_doubles=kDontSaveFPRegs)
void MultiPushFPU(RegList regs)
void JumpIfNotSmi(Register value, Label *not_smi_label)
void TryInlineTruncateDoubleToI(Register result, DwVfpRegister input, Label *done)
void MultiPushReversedFPU(RegList regs)
void BranchF(BranchDelaySlot bd, Label *target, Label *nan, Condition cc, FPURegister cmp1, FPURegister cmp2)
void Assert(Condition cond, BailoutReason reason)
void InvokeBuiltin(Builtins::JavaScript id, InvokeFlag flag, const CallWrapper &call_wrapper=NullCallWrapper())
CheckForInexactConversion
void StoreNumberToDoubleElements(Register value_reg, Register key_reg, Register elements_reg, Register scratch1, LowDwVfpRegister double_scratch, Label *fail, int elements_offset=0)
void TailCallStub(CodeStub *stub, Condition cond=al)
void UntagAndJumpIfNotSmi(Register dst, Register src, Label *non_smi_case)
void AssertIsRoot(Register reg, Heap::RootListIndex index)
void AssertName(Register object)
void EnsureNotWhite(Register object, Register scratch1, Register scratch2, Register scratch3, Label *object_is_white_and_not_data)
void InitializeRootRegister()
int CalculateStackPassedWords(int num_reg_arguments, int num_double_arguments)
void CallJSExitStub(CodeStub *stub)
int LeaveFrame(StackFrame::Type type)
void JumpIfEitherSmi(Register reg1, Register reg2, Label *on_either_smi)
void PatchRelocatedValue(Register li_location, Register scratch, Register new_value)
static FPURegister from_code(int code)
void IndexFromHash(Register hash, Register index)
void Round_w_d(FPURegister fd, FPURegister fs)
void TailCallExternalReference(const ExternalReference &ext, int num_arguments, int result_size)
void EnterExitFrame(bool save_doubles, int stack_space=0)
void MultiPushReversed(RegList regs)
void InitializeFieldsWithFiller(Register start_offset, Register end_offset, Register filler)
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)
void TailCallRuntime(Runtime::FunctionId fid, int num_arguments, int result_size)
void AllocateTwoByteString(Register result, Register length, Register scratch1, Register scratch2, Register scratch3, Label *gc_required)
void LoadRoot(Register destination, Heap::RootListIndex index, Condition cond=al)
void MultiPopFPU(RegList regs)
void RememberedSetHelper(Register object, Register addr, Register scratch, SaveFPRegsMode save_fp, RememberedSetFinalAction and_then)
void Ceil_w_d(FPURegister fd, FPURegister fs)
void BranchF(Label *target, Label *nan, Condition cc, FPURegister cmp1, FPURegister cmp2, BranchDelaySlot bd=PROTECT)
void HasColor(Register object, Register scratch0, Register scratch1, Label *has_color, int first_bit, int second_bit)
void BranchOnOverflow(Label *label, Register overflow_check, BranchDelaySlot bd=PROTECT)
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)
void CheckEnumCache(Register null_value, Label *call_runtime)
static const int kInstanceTypeOffset
void PopSafepointRegisters()
void AssertUndefinedOrAllocationSite(Register object, Register scratch)
void AllocateHeapNumberWithValue(Register result, DwVfpRegister value, Register scratch1, Register scratch2, Register heap_number_map, Label *gc_required)
void Move(Register dst_low, Register dst_high, FPURegister src)
void Move(Register dst, Register src)
void Push(Register src1, Register src2, Register src3)