28 #ifndef V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
29 #define V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
132 class MacroAssembler:
public Assembler {
141 #define COND_TYPED_ARGS Condition cond, Register r1, const Operand& r2
142 #define COND_ARGS cond, r1, r2
145 #define DECLARE_NORELOC_PROTOTYPE(Name, target_type) \
146 void Name(target_type target, BranchDelaySlot bd = PROTECT); \
147 inline void Name(BranchDelaySlot bd, target_type target) { \
150 void Name(target_type target, \
152 BranchDelaySlot bd = PROTECT); \
153 inline void Name(BranchDelaySlot bd, \
154 target_type target, \
156 Name(target, COND_ARGS, bd); \
159 #define DECLARE_BRANCH_PROTOTYPES(Name) \
160 DECLARE_NORELOC_PROTOTYPE(Name, Label*) \
161 DECLARE_NORELOC_PROTOTYPE(Name, int16_t)
166 #undef DECLARE_BRANCH_PROTOTYPES
167 #undef COND_TYPED_ARGS
172 #define COND_ARGS Condition cond = al, Register rs = zero_reg, \
173 const Operand& rt = Operand(zero_reg), BranchDelaySlot bd = PROTECT
176 void Jump(intptr_t target, RelocInfo::Mode rmode,
COND_ARGS);
184 RelocInfo::Mode rmode = RelocInfo::CODE_TARGET,
187 void Call(Handle<Code> code,
188 RelocInfo::Mode rmode = RelocInfo::CODE_TARGET,
193 Register rs = zero_reg,
const Operand& rt = Operand(zero_reg)) {
194 Ret(cond, rs, rt, bd);
210 const Operand& op = Operand(
no_reg));
225 void Call(Label* target);
284 if (object->IsHeapObject()) {
317 Label* condition_met);
324 InNewSpace(
object, scratch,
ne, branch);
332 InNewSpace(
object, scratch,
eq, branch);
357 Label* object_is_white_and_not_data);
363 Label* not_data_object);
397 remembered_set_action,
445 return IsNop(instr, type);
457 bool sllzz = (opcode ==
SLL &&
458 rt ==
static_cast<uint32_t
>(
ToNumber(zero_reg)) &&
459 rs == static_cast<uint32_t>(
ToNumber(zero_reg)));
549 #define DEFINE_INSTRUCTION(instr) \
550 void instr(Register rd, Register rs, const Operand& rt); \
551 void instr(Register rd, Register rs, Register rt) { \
552 instr(rd, rs, Operand(rt)); \
554 void instr(Register rs, Register rt, int32_t j) { \
555 instr(rs, rt, Operand(j)); \
558 #define DEFINE_INSTRUCTION2(instr) \
559 void instr(Register rs, const Operand& rt); \
560 void instr(Register rs, Register rt) { \
561 instr(rs, Operand(rt)); \
563 void instr(Register rs, int32_t j) { \
564 instr(rs, Operand(j)); \
587 #undef DEFINE_INSTRUCTION
588 #undef DEFINE_INSTRUCTION2
599 li(rd, Operand(j), mode);
603 li(dst, Operand(value), mode);
650 Branch(3, cond, tst1, Operand(tst2));
685 void Pop(uint32_t count = 1) {
741 BranchF(target, nan, cc, cmp1, cmp2, bd);
793 int stack_space = 0);
798 bool do_return =
false);
817 Label* no_map_match);
823 bool can_have_holes);
834 ExternalReference roots_array_start =
835 ExternalReference::roots_array_start(
isolate());
849 const ParameterCount& expected,
850 const ParameterCount& actual,
856 const ParameterCount& expected,
857 const ParameterCount& actual,
858 RelocInfo::Mode rmode,
865 const ParameterCount& actual,
871 const ParameterCount& actual,
890 #ifdef ENABLE_DEBUGGER_SUPPORT
945 bool miss_on_bound_function =
false);
991 Label* early_success,
1000 Label* early_success,
1100 Branch(label,
lt, overflow_check, Operand(zero_reg), bd);
1106 Branch(label,
ge, overflow_check, Operand(zero_reg), bd);
1110 Ret(
lt, overflow_check, Operand(zero_reg), bd);
1114 Ret(
ge, overflow_check, Operand(zero_reg), bd);
1127 li(
s2, Operand(ref));
1134 const Operand&
r2 = Operand(zero_reg),
1167 int num_double_arguments);
1179 int num_double_registers,
1193 void CallCFunction(ExternalReference
function,
int num_arguments);
1196 int num_reg_arguments,
1197 int num_double_arguments);
1199 int num_reg_arguments,
1200 int num_double_arguments);
1242 return code_object_;
1269 void Abort(
const char* msg);
1289 Label* not_power_of_two_or_zero);
1295 Addu(reg, reg, reg);
1303 Addu(dst, src, src);
1330 Label* not_smi_label,
1358 Label* on_not_heap_number);
1366 Register first_object_instance_type,
1367 Register second_object_instance_type,
1405 template<
typename Field>
1407 static const int shift = Field::kShift;
1408 static const int mask = (Field::kMask >> shift) <<
kSmiTagSize;
1409 srl(reg, reg, shift);
1410 And(reg, reg, Operand(mask));
1431 void CallCFunctionHelper(
Register function,
1432 int num_reg_arguments,
1433 int num_double_arguments);
1456 void InvokePrologue(
const ParameterCount& expected,
1457 const ParameterCount& actual,
1461 bool* definitely_mismatches,
1470 void InitializeNewString(
Register string,
1485 inline void GetMarkBits(
Register addr_reg,
1491 void JumpToHandlerEntry();
1494 static int SafepointRegisterStackIndex(
int reg_code);
1498 bool generating_stub_;
1499 bool allow_stub_calls_;
1542 #ifdef GENERATED_CODE_COVERAGE
1543 #define CODE_COVERAGE_STRINGIFY(x) #x
1544 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x)
1545 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__)
1546 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm->
1548 #define ACCESS_MASM(masm) masm->
1553 #endif // V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
void CallRuntime(const Runtime::Function *f, int num_arguments)
void ClampDoubleToUint8(Register result_reg, DoubleRegister input_reg, DoubleRegister temp_double_reg)
void Push(Handle< Object > handle)
void ClampUint8(Register output_reg, Register input_reg)
const int kCArgsSlotsSize
Isolate * isolate() const
void PushSafepointRegisters()
void FlushICache(Register address, unsigned instructions)
void Assert(Condition cond, const char *msg)
void Branch(Label *L, Condition cond, Register rs, Heap::RootListIndex index, BranchDelaySlot bdslot=PROTECT)
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit 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 SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 and VFP2 instructions(ARM only)") DEFINE_bool(enable_vfp2
static int SlotOffset(int index)
void SmiUntag(Register reg)
void mtc1(Register rt, FPURegister fs)
void GetCFunctionDoubleResult(const DoubleRegister dst)
void SmiTag(Register dst, Register src)
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 Push(Register src1, Register src2, Register src3, Register src4)
void JumpIfInNewSpace(Register object, Register scratch, Label *branch)
void LeaveExitFrame(bool save_doubles, Register argument_count)
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 SetCallCDoubleArguments(DoubleRegister dreg)
void or_(Register dst, int32_t imm32)
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 DispatchMap(Register obj, Register scratch, Handle< Map > map, Handle< Code > success, SmiCheckType smi_check_type)
bool AllowThisStubCall(CodeStub *stub)
void JumpIfNotPowerOfTwoOrZero(Register reg, Register scratch, Label *not_power_of_two_or_zero)
void StoreToSafepointRegisterSlot(Register src, Register dst)
void PopSafepointRegistersAndDoubles()
void set_allow_stub_calls(bool value)
void CheckFastObjectElements(Register map, Register scratch, Label *fail)
void j(Condition cc, Label *L, Label::Distance distance=Label::kFar)
DEFINE_INSTRUCTION2(Mult)
void Swap(Register reg1, Register reg2, Register scratch=no_reg, Condition cond=al)
bool is(FPURegister creg) const
void MultiPopReversed(RegList regs)
bool AreAliased(Register r1, Register r2, Register r3, Register r4)
#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)
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 Abort(const char *msg)
void RetOnOverflow(Register overflow_check, BranchDelaySlot bd=PROTECT)
void MarkCode(NopMarkerTypes type)
MemOperand ContextOperand(Register context, int index)
void CheckMap(Register obj, Register scratch, Handle< Map > map, Label *fail, SmiCheckType smi_check_type, CompareMapMode mode=REQUIRE_EXACT_MAP)
void RetOnNoOverflow(Register overflow_check, BranchDelaySlot bd=PROTECT)
void CopyFields(Register dst, Register src, RegList temps, int field_count)
void AssertSmi(Register object)
void DecrementCounter(StatsCounter *counter, int value, Register scratch1, Register scratch2)
void StoreToSafepointRegistersAndDoublesSlot(Register src, Register dst)
void Movn(Register rd, Register rs, Register rt)
const Register kRootRegister
void Movz(Register rd, Register rs, Register rt)
void li(Register dst, Handle< Object > value, LiFlags mode=OPTIMIZE_SIZE)
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 JumpIfNotHeapNumber(Register object, Register heap_number_map, Register scratch, Label *on_not_heap_number)
void PrepareCEntryArgs(int num_args)
void MultiPop(RegList regs)
void AssertRegisterIsRoot(Register reg, Heap::RootListIndex index)
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)
void sra(Register rt, Register rd, uint16_t sa)
void EnumLength(Register dst, Register map)
static int ActivationFrameAlignment()
void lbu(Register rd, const MemOperand &rs)
void LeaveFrame(StackFrame::Type type)
void CheckFastElements(Register map, Register scratch, Label *fail)
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 ChangeBranchCondition(Condition cond)
void EmitECMATruncate(Register result, DwVfpRegister double_input, SwVfpRegister single_scratch, Register scratch, Register scratch2, Register scratch3)
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 Push(Register src1, Register src2)
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 LoadHeapObject(Register dst, Handle< HeapObject > object)
void Throw(Register value)
void Move(FPURegister dst, FPURegister src)
void ConvertToInt32(Register source, Register dest, Register scratch, Register scratch2, DwVfpRegister double_scratch, Label *not_int32)
void Move(Register dst, Handle< Object > value)
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 InvokeCode(Register code, const ParameterCount &expected, const ParameterCount &actual, InvokeFlag flag, const CallWrapper &call_wrapper, CallKind call_kind)
void SmiUntag(Register dst, Register src)
void GetLeastBitsFromInt32(Register dst, Register src, int mun_least_bits)
void Clz(Register rd, Register rs)
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 StoreNumberToDoubleElements(Register value_reg, Register key_reg, Register receiver_reg, Register elements_reg, Register scratch1, Register scratch2, Register scratch3, Register scratch4, Label *fail)
void AssertFastElements(Register elements)
void GetLeastBitsFromSmi(Register dst, Register src, int num_least_bits)
void PushSafepointRegistersAndDoubles()
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 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 Movf(Register rd, Register rs, uint16_t cc=0)
void IllegalOperation(int num_arguments)
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 CallApiFunctionAndReturn(ExternalReference function, int stack_space)
static const int kMapOffset
int ToNumber(Register reg)
bool is(Register reg) const
const uint32_t kIsNotStringMask
void LoadObject(Register result, Handle< Object > object)
void SmiTag(Register reg)
void li(Register rd, Operand j, LiFlags mode=OPTIMIZE_SIZE)
void CallRuntimeSaveDoubles(Runtime::FunctionId id)
void ThrowUncatchable(Register value)
void Trunc_uw_d(FPURegister fd, FPURegister fs, FPURegister scratch)
MemOperand CFunctionArgumentOperand(int index)
void StoreRoot(Register source, Heap::RootListIndex index, Condition cond=al)
void AllocateInNewSpace(int object_size, Register result, Register scratch1, Register scratch2, Label *gc_required, AllocationFlags flags)
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 EmitOutOfInt32RangeTruncate(Register result, Register input_high, Register input_low, Register scratch)
void LoadGlobalFunctionInitialMap(Register function, Register map, Register scratch)
void GetNumberHash(Register t0, Register scratch)
void InvokeFunction(Register function, const ParameterCount &actual, InvokeFlag flag, const CallWrapper &call_wrapper, CallKind call_kind)
void CompareMapAndBranch(Register obj, Register scratch, Handle< Map > map, Label *early_success, Condition cond, Label *branch_to, CompareMapMode mode=REQUIRE_EXACT_MAP)
void MultiPopReversedFPU(RegList regs)
Handle< Object > CodeObject()
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 UndoAllocationInNewSpace(Register object, Register scratch)
void Ret(BranchDelaySlot bd, Condition cond=al, Register rs=zero_reg, const Operand &rt=Operand(zero_reg))
void LoadFromSafepointRegisterSlot(Register dst, Register src)
void Push(Register src, Condition cond, Register tst1, Register tst2)
#define ASSERT_EQ(v1, v2)
void Call(Register target, Condition cond=al)
void Trunc_w_d(FPURegister fd, FPURegister fs)
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit 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 SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 and VFP2 enable use of VFP2 instructions if available 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 MIPS FPU instructions if expose natives in global object expose gc extension number of stack frames to capture disable builtin natives files print a stack trace if an assertion failure occurs use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations prepare for turning on always opt minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions automatically set the debug break flag when debugger commands are in the queue always cause a debug break before aborting 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 more details following each garbage collection print amount of external allocated memory after each time it is adjusted flush code that we expect not to use again before full gc do incremental marking steps track object counts and memory usage use caching Perform compaction on every full GC Never perform compaction on full GC testing only Compact code space on full incremental collections Default seed for initializing random allows verbose printing trace parsing and preparsing Check icache flushes in ARM and MIPS simulator Stack alingment in bytes in print stack trace when throwing exceptions randomize hashes to avoid predictable hash Fixed seed to use to hash property activate a timer that switches between V8 threads testing_bool_flag float flag Seed used for threading test randomness A filename with extra code to be included in the Print usage message
void AllocateAsciiSlicedString(Register result, Register length, Register scratch1, Register scratch2, Label *gc_required)
void set_generating_stub(bool value)
void Check(Condition cond, const char *msg)
void MultiPushFPU(RegList regs)
void LoadInitialArrayMap(Register function_in, Register scratch, Register map_out, bool can_have_holes)
void JumpIfNotSmi(Register value, Label *not_smi_label)
void AssertRootValue(Register src, Heap::RootListIndex root_value_index, const char *message)
void MultiPushReversedFPU(RegList regs)
void BranchF(BranchDelaySlot bd, Label *target, Label *nan, Condition cc, FPURegister cmp1, FPURegister cmp2)
void EmitFPUTruncate(FPURoundingMode rounding_mode, FPURegister result, DoubleRegister double_input, Register scratch1, Register except_flag, CheckForInexactConversion check_inexact=kDontCheckForInexactConversion)
void InvokeBuiltin(Builtins::JavaScript id, InvokeFlag flag, const CallWrapper &call_wrapper=NullCallWrapper())
CheckForInexactConversion
void TailCallStub(CodeStub *stub, Condition cond=al)
CodePatcher(byte *address, int instructions)
void UntagAndJumpIfNotSmi(Register dst, Register src, Label *non_smi_case)
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit extra verbose compilation tracing generate extra code(assertions) for debugging") DEFINE_bool(code_comments
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)
void JumpIfEitherSmi(Register reg1, Register reg2, Label *on_either_smi)
void PatchRelocatedValue(Register li_location, Register scratch, Register new_value)
void CallStub(CodeStub *stub, Condition cond=al)
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)
activate correct semantics for inheriting readonliness enable harmony semantics for typeof enable harmony enable harmony proxies enable all harmony harmony_scoping harmony_proxies harmony_scoping tracks arrays with only smi values automatically unbox arrays of doubles use crankshaft use hydrogen range analysis use hydrogen global value numbering use function inlining maximum number of AST nodes considered for a single inlining loop invariant code motion print statistics for hydrogen trace generated IR for specified phases trace register allocator trace range analysis trace representation types environment for every instruction put a break point before deoptimizing polymorphic inlining perform array bounds checks elimination use dead code elimination trace on stack replacement optimize closures cache optimized code for closures functions with arguments object loop weight for representation inference allow uint32 values on optimize frames if they are used only in safe operations track parallel recompilation enable all profiler experiments number of stack frames inspected by the profiler call recompile stub directly when self optimizing trigger profiler ticks based on counting instead of timing weight back edges by jump distance for interrupt triggering percentage of ICs that must have type info to allow optimization watch_ic_patching retry_self_opt interrupt_at_exit 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 SAHF instruction if enable use of VFP3 instructions if available this implies enabling ARMv7 and VFP2 enable use of VFP2 instructions if available 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 MIPS FPU instructions if expose natives in global object expose gc extension number of stack frames to capture disable builtin natives files print a stack trace if an assertion failure occurs use random jit cookie to mask large constants trace lazy optimization use adaptive optimizations prepare for turning on always opt minimum length for automatic enable preparsing maximum number of optimization attempts before giving up cache prototype transitions automatically set the debug break flag when debugger commands are in the queue always cause a debug break before aborting 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 more details following each garbage collection print amount of external allocated memory after each time it is adjusted flush code that we expect not to use again before full gc do incremental marking steps track object counts and memory usage use caching Perform compaction on every full GC Never perform compaction on full GC testing only Compact code space on full incremental collections Default seed for initializing random allows verbose printing trace parsing and preparsing Check icache flushes in ARM and MIPS simulator Stack alingment in bytes in print stack trace when throwing exceptions randomize hashes to avoid predictable hash Fixed seed to use to hash property activate a timer that switches between V8 threads testing_bool_flag float flag Seed used for threading test randomness A filename with extra code to be included in the Print usage including flags
void TailCallRuntime(Runtime::FunctionId fid, int num_arguments, int result_size)
void SetCallKind(Register dst, CallKind kind)
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 EnterFrame(StackFrame::Type type)
void BranchOnOverflow(Label *label, Register overflow_check, BranchDelaySlot bd=PROTECT)
void CheckEnumCache(Register null_value, Label *call_runtime)
static const int kInstanceTypeOffset
void PopSafepointRegisters()
void AllocateHeapNumberWithValue(Register result, DwVfpRegister value, Register scratch1, Register scratch2, Register heap_number_map, Label *gc_required)
kPropertyAccessorsOffset kNamedPropertyHandlerOffset kInstanceTemplateOffset kAccessCheckInfoOffset kEvalFrominstructionsOffsetOffset kInstanceClassNameOffset flag
void Move(Register dst_low, Register dst_high, FPURegister src)
void Move(Register dst, Register src)
void Push(Register src1, Register src2, Register src3)