30 #if defined(V8_TARGET_ARCH_IA32)
44 #define __ ACCESS_MASM(masm)
47 static void GenerateGlobalInstanceTypeCheck(MacroAssembler* masm,
49 Label* global_object) {
63 static void GenerateStringDictionaryReceiverCheck(MacroAssembler* masm,
75 __ JumpIfSmi(receiver, miss);
86 GenerateGlobalInstanceTypeCheck(masm, r0, miss);
106 static void GenerateDictionaryLoad(MacroAssembler* masm,
142 const int kElementsStartOffset =
145 const int kDetailsOffset = kElementsStartOffset + 2 *
kPointerSize;
147 Immediate(PropertyDetails::TypeField::kMask <<
kSmiTagSize));
151 const int kValueOffset = kElementsStartOffset +
kPointerSize;
163 static void GenerateDictionaryStore(MacroAssembler* masm,
197 const int kElementsStartOffset =
200 const int kDetailsOffset = kElementsStartOffset + 2 *
kPointerSize;
201 const int kTypeAndReadOnlyMask =
202 (PropertyDetails::TypeField::kMask |
205 Immediate(kTypeAndReadOnlyMask));
209 const int kValueOffset = kElementsStartOffset +
kPointerSize;
211 __ mov(Operand(r0, 0), value);
227 StubCompiler::GenerateLoadArrayLength(masm,
edx,
eax, &miss);
229 StubCompiler::GenerateLoadMiss(masm, Code::LOAD_IC);
234 bool support_wrappers) {
242 StubCompiler::GenerateLoadStringLength(masm,
edx,
eax,
ebx, &miss,
245 StubCompiler::GenerateLoadMiss(masm, Code::LOAD_IC);
257 StubCompiler::GenerateLoadFunctionPrototype(masm,
edx,
eax,
ebx, &miss);
259 StubCompiler::GenerateLoadMiss(masm, Code::LOAD_IC);
265 static void GenerateKeyedLoadReceiverCheck(MacroAssembler* masm,
276 __ JumpIfSmi(receiver, slow);
298 static void GenerateFastArrayLoad(MacroAssembler* masm,
303 Label* not_fast_array,
304 Label* out_of_range) {
314 if (not_fast_array !=
NULL) {
321 __ AssertFastElements(scratch);
329 __ cmp(scratch, Immediate(
FACTORY->the_hole_value()));
333 if (!result.is(scratch)) {
334 __ mov(result, scratch);
341 static void GenerateKeyStringCheck(MacroAssembler* masm,
367 static Operand GenerateMappedArgumentsLookup(MacroAssembler* masm,
372 Label* unmapped_case,
374 Heap* heap = masm->isolate()->heap();
375 Factory* factory = masm->isolate()->factory();
380 __ JumpIfSmi(
object, slow_case);
386 __ test(key, Immediate(0x80000001));
390 Handle<Map> arguments_map(heap->non_strict_arguments_elements_map());
398 __ cmp(key, scratch2);
407 __ cmp(scratch2, factory->the_hole_value());
422 static Operand GenerateUnmappedArgumentsLookup(MacroAssembler* masm,
424 Register parameter_map,
430 Register backing_store = parameter_map;
431 __ mov(backing_store,
FieldOperand(parameter_map, kBackingStoreOffset));
432 Handle<Map> fixed_array_map(masm->isolate()->heap()->fixed_array_map());
435 __ cmp(key, scratch);
450 Label slow, check_string, index_smi, index_string, property_array_property;
451 Label probe_dictionary, check_number_dictionary;
454 __ JumpIfNotSmi(
ecx, &check_string);
459 GenerateKeyedLoadReceiverCheck(
463 __ CheckFastElements(
eax, &check_number_dictionary);
466 Isolate*
isolate = masm->isolate();
467 Counters* counters = isolate->
counters();
468 __ IncrementCounter(counters->keyed_load_generic_smi(), 1);
471 __ bind(&check_number_dictionary);
482 isolate->factory()->hash_table_map(),
485 Label slow_pop_receiver;
494 __ bind(&slow_pop_receiver);
502 __ IncrementCounter(counters->keyed_load_generic_slow(), 1);
505 __ bind(&check_string);
506 GenerateKeyStringCheck(masm,
ecx,
eax,
ebx, &index_string, &slow);
508 GenerateKeyedLoadReceiverCheck(
515 Immediate(isolate->factory()->hash_table_map()));
516 __ j(
equal, &probe_dictionary);
520 if (FLAG_debug_code) {
522 __ Check(
equal,
"Map is no longer in eax.");
533 Label load_in_object_property;
535 Label hit_on_nth_entry[kEntriesPerBucket];
536 ExternalReference cache_keys =
537 ExternalReference::keyed_lookup_cache_keys(masm->isolate());
539 for (
int i = 0; i < kEntriesPerBucket - 1; i++) {
540 Label try_next_entry;
544 __ add(
edi, Immediate(kPointerSize * i * 2));
548 __ add(
edi, Immediate(kPointerSize));
550 __ j(
equal, &hit_on_nth_entry[i]);
551 __ bind(&try_next_entry);
556 __ add(
edi, Immediate(kPointerSize * (kEntriesPerBucket - 1) * 2));
559 __ add(
edi, Immediate(kPointerSize));
568 ExternalReference cache_field_offsets =
569 ExternalReference::keyed_lookup_cache_field_offsets(masm->isolate());
572 for (
int i = kEntriesPerBucket - 1; i >= 0; i--) {
573 __ bind(&hit_on_nth_entry[i]);
575 __ add(
eax, Immediate(i));
583 __ jmp(&load_in_object_property);
588 __ bind(&load_in_object_property);
592 __ IncrementCounter(counters->keyed_load_generic_lookup_cache(), 1);
596 __ bind(&property_array_property);
600 __ IncrementCounter(counters->keyed_load_generic_lookup_cache(), 1);
605 __ bind(&probe_dictionary);
609 GenerateGlobalInstanceTypeCheck(masm,
eax, &slow);
612 __ IncrementCounter(counters->keyed_load_generic_symbol(), 1);
615 __ bind(&index_string);
630 Register receiver =
edx;
631 Register index =
ecx;
632 Register scratch =
ebx;
633 Register result =
eax;
635 StringCharAtGenerator char_at_generator(receiver,
643 char_at_generator.GenerateFast(masm);
646 StubRuntimeCallHelper call_helper;
647 char_at_generator.GenerateSlow(masm, call_helper);
663 __ JumpIfSmi(
edx, &slow);
686 ExternalReference ref =
687 ExternalReference(IC_Utility(kKeyedLoadPropertyWithInterceptor),
689 __ TailCallExternalReference(ref, 2, 1);
703 Factory* factory = masm->isolate()->factory();
704 Operand mapped_location =
705 GenerateMappedArgumentsLookup(masm,
edx,
ecx,
ebx,
eax, ¬in, &slow);
706 __ mov(
eax, mapped_location);
710 Operand unmapped_location =
711 GenerateUnmappedArgumentsLookup(masm,
ecx,
ebx,
eax, &slow);
712 __ cmp(unmapped_location, factory->the_hole_value());
714 __ mov(
eax, unmapped_location);
729 Operand mapped_location =
730 GenerateMappedArgumentsLookup(masm,
edx,
ecx,
ebx,
edi, ¬in, &slow);
731 __ mov(mapped_location,
eax);
732 __ lea(
ecx, mapped_location);
738 Operand unmapped_location =
739 GenerateUnmappedArgumentsLookup(masm,
ecx,
ebx,
edi, &slow);
740 __ mov(unmapped_location,
eax);
741 __ lea(
edi, unmapped_location);
750 static void KeyedStoreGenerateGenericHelper(
751 MacroAssembler* masm,
757 Label transition_smi_elements;
758 Label finish_object_store, non_double_value, transition_double_elements;
759 Label fast_double_without_map_check;
766 __ bind(fast_object);
769 __ cmp(
edi, masm->isolate()->factory()->fixed_array_map());
774 __ JumpIfNotSmi(
eax, &non_smi_value);
784 __ bind(&non_smi_value);
787 __ CheckFastObjectElements(
edi, &transition_smi_elements);
790 __ bind(&finish_object_store);
803 __ bind(fast_double);
807 __ cmp(
edi, masm->isolate()->factory()->fixed_double_array_map());
812 __ bind(&fast_double_without_map_check);
814 &transition_double_elements,
false);
822 __ bind(&transition_smi_elements);
827 masm->isolate()->factory()->heap_number_map(),
840 __ jmp(&fast_double_without_map_check);
842 __ bind(&non_double_value);
851 __ jmp(&finish_object_store);
853 __ bind(&transition_double_elements);
865 __ jmp(&finish_object_store);
877 Label slow, fast_object, fast_object_grow;
878 Label fast_double, fast_double_grow;
879 Label array, extra, check_if_double_array;
882 __ JumpIfSmi(
edx, &slow);
891 __ JumpIfNotSmi(
ecx, &slow);
927 __ cmp(
edi, masm->isolate()->factory()->fixed_array_map());
929 __ jmp(&fast_object_grow);
931 __ bind(&check_if_double_array);
932 __ cmp(
edi, masm->isolate()->factory()->fixed_double_array_map());
934 __ jmp(&fast_double_grow);
951 KeyedStoreGenerateGenericHelper(masm, &fast_object, &fast_double,
953 KeyedStoreGenerateGenericHelper(masm, &fast_object_grow, &fast_double_grow,
968 Label number, non_number, non_string, boolean, probe, miss;
976 Isolate* isolate = masm->isolate();
977 isolate->stub_cache()->GenerateProbe(masm, flags,
edx,
ecx,
ebx,
eax);
985 __ JumpIfSmi(
edx, &number);
989 StubCompiler::GenerateLoadGlobalFunctionPrototype(
994 __ bind(&non_number);
997 StubCompiler::GenerateLoadGlobalFunctionPrototype(
1002 __ bind(&non_string);
1003 __ cmp(
edx, isolate->factory()->true_value());
1005 __ cmp(
edx, isolate->factory()->false_value());
1008 StubCompiler::GenerateLoadGlobalFunctionPrototype(
1013 isolate->stub_cache()->GenerateProbe(masm, flags,
edx,
ecx,
ebx,
no_reg);
1018 static void GenerateFunctionTailCall(MacroAssembler* masm,
1031 __ JumpIfSmi(
edi, miss);
1038 ParameterCount actual(argc);
1056 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1058 GenerateStringDictionaryReceiverCheck(masm,
edx,
eax,
ebx, &miss);
1063 GenerateFunctionTailCall(masm, argc, &miss);
1081 Counters* counters = masm->isolate()->counters();
1082 if (
id == IC::kCallIC_Miss) {
1083 __ IncrementCounter(counters->call_miss(), 1);
1085 __ IncrementCounter(counters->keyed_call_miss(), 1);
1089 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1100 __ mov(
eax, Immediate(2));
1101 __ mov(
ebx, Immediate(ExternalReference(IC_Utility(
id), masm->isolate())));
1110 if (
id == IC::kCallIC_Miss) {
1111 Label invoke, global;
1112 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1113 __ JumpIfSmi(
edx, &invoke, Label::kNear);
1117 __ j(
equal, &global, Label::kNear);
1124 __ mov(Operand(
esp, (argc + 1) * kPointerSize),
edx);
1132 ParameterCount actual(argc);
1133 __ InvokeFunction(
edi,
1153 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1171 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1173 Label do_call, slow_call, slow_load, slow_reload_receiver;
1174 Label check_number_dictionary, check_string, lookup_monomorphic_cache;
1175 Label index_smi, index_string;
1178 __ JumpIfNotSmi(
ecx, &check_string);
1180 __ bind(&index_smi);
1184 GenerateKeyedLoadReceiverCheck(
1187 GenerateFastArrayLoad(
1188 masm,
edx,
ecx,
eax,
edi, &check_number_dictionary, &slow_load);
1189 Isolate* isolate = masm->isolate();
1190 Counters* counters = isolate->counters();
1191 __ IncrementCounter(counters->keyed_call_generic_smi_fast(), 1);
1197 GenerateFunctionTailCall(masm, argc, &slow_call);
1199 __ bind(&check_number_dictionary);
1204 isolate->factory()->hash_table_map(),
1211 __ LoadFromNumberDictionary(
1213 __ IncrementCounter(counters->keyed_call_generic_smi_dict(), 1);
1216 __ bind(&slow_reload_receiver);
1217 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1219 __ bind(&slow_load);
1222 __ IncrementCounter(counters->keyed_call_generic_slow_load(), 1);
1229 __ CallRuntime(Runtime::kKeyedGetProperty, 2);
1237 __ bind(&check_string);
1238 GenerateKeyStringCheck(masm,
ecx,
eax,
ebx, &index_string, &slow_call);
1244 GenerateKeyedLoadReceiverCheck(
1249 isolate->factory()->hash_table_map(),
1250 &lookup_monomorphic_cache,
1254 __ IncrementCounter(counters->keyed_call_generic_lookup_dict(), 1);
1257 __ bind(&lookup_monomorphic_cache);
1258 __ IncrementCounter(counters->keyed_call_generic_lookup_cache(), 1);
1263 __ bind(&slow_call);
1270 __ IncrementCounter(counters->keyed_call_generic_slow(), 1);
1273 __ bind(&index_string);
1290 Factory* factory = masm->isolate()->factory();
1291 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1292 Operand mapped_location =
1293 GenerateMappedArgumentsLookup(masm,
edx,
ecx,
ebx,
eax, ¬in, &slow);
1294 __ mov(
edi, mapped_location);
1295 GenerateFunctionTailCall(masm, argc, &slow);
1298 Operand unmapped_location =
1299 GenerateUnmappedArgumentsLookup(masm,
ecx,
ebx,
eax, &slow);
1300 __ cmp(unmapped_location, factory->the_hole_value());
1302 __ mov(
edi, unmapped_location);
1303 GenerateFunctionTailCall(masm, argc, &slow);
1320 __ JumpIfSmi(
ecx, &miss);
1338 Isolate::Current()->stub_cache()->GenerateProbe(masm, flags,
edx,
ecx,
ebx,
1354 GenerateStringDictionaryReceiverCheck(masm,
edx,
eax,
ebx, &miss);
1374 __ IncrementCounter(masm->isolate()->counters()->load_miss(), 1);
1382 ExternalReference ref =
1383 ExternalReference(IC_Utility(kLoadIC_Miss), masm->isolate());
1384 __ TailCallExternalReference(ref, 2, 1);
1395 __ IncrementCounter(masm->isolate()->counters()->keyed_load_miss(), 1);
1403 ExternalReference ref = force_generic
1404 ? ExternalReference(IC_Utility(kKeyedLoadIC_MissForceGeneric),
1406 : ExternalReference(IC_Utility(kKeyedLoadIC_Miss), masm->isolate());
1407 __ TailCallExternalReference(ref, 2, 1);
1424 __ TailCallRuntime(Runtime::kKeyedGetProperty, 2, 1);
1439 Isolate::Current()->stub_cache()->GenerateProbe(masm, flags,
edx,
ecx,
ebx,
1462 ExternalReference ref =
1463 ExternalReference(IC_Utility(kStoreIC_Miss), masm->isolate());
1464 __ TailCallExternalReference(ref, 3, 1);
1483 Register receiver =
edx;
1484 Register value =
eax;
1485 Register scratch =
ebx;
1488 __ JumpIfSmi(receiver, &miss);
1505 Heap::kHashTableMapRootIndex);
1509 __ JumpIfNotSmi(value, &miss);
1517 ExternalReference ref =
1518 ExternalReference(IC_Utility(kStoreIC_ArrayLength), masm->isolate());
1519 __ TailCallExternalReference(ref, 2, 1);
1535 Label miss, restore_miss;
1537 GenerateStringDictionaryReceiverCheck(masm,
edx,
ebx,
edi, &miss);
1543 GenerateDictionaryStore(masm, &restore_miss,
ebx,
ecx,
eax,
edx,
edi);
1545 Counters* counters = masm->isolate()->counters();
1546 __ IncrementCounter(counters->store_normal_hit(), 1);
1549 __ bind(&restore_miss);
1553 __ IncrementCounter(counters->store_normal_miss(), 1);
1575 __ TailCallRuntime(Runtime::kSetProperty, 5, 1);
1597 __ TailCallRuntime(Runtime::kSetProperty, 5, 1);
1616 ExternalReference ref = force_generic
1617 ? ExternalReference(IC_Utility(kKeyedStoreIC_MissForceGeneric),
1619 : ExternalReference(IC_Utility(kKeyedStoreIC_Miss), masm->isolate());
1620 __ TailCallExternalReference(ref, 3, 1);
1639 ExternalReference ref(IC_Utility(kKeyedStoreIC_Slow), masm->isolate());
1640 __ TailCallExternalReference(ref, 3, 1);
1651 if (!FLAG_trace_elements_transitions) {
1665 __ TailCallRuntime(Runtime::kTransitionElementsSmiToDouble, 1, 1);
1670 MacroAssembler* masm) {
1677 if (!FLAG_trace_elements_transitions) {
1691 __ TailCallRuntime(Runtime::kTransitionElementsDoubleToObject, 1, 1);
1700 case Token::EQ_STRICT:
1718 static bool HasInlinedSmiCode(
Address address) {
1720 Address test_instruction_address =
1731 Handle<Code> rewritten;
1732 State previous_state = GetState();
1734 State state = TargetState(previous_state, HasInlinedSmiCode(
address()), x, y);
1737 rewritten = stub.GetCode();
1739 ICCompareStub stub(op_, state);
1741 stub.set_known_map(Handle<Map>(Handle<JSObject>::cast(x)->map()));
1743 rewritten = stub.GetCode();
1748 if (FLAG_trace_ic) {
1749 PrintF(
"[CompareIC (%s->%s)#%s]\n",
1765 Address test_instruction_address =
1775 Address delta_address = test_instruction_address + 1;
1778 int8_t delta = *
reinterpret_cast<int8_t*
>(delta_address);
1779 if (FLAG_trace_ic) {
1780 PrintF(
"[ patching ic at %p, test=%p, delta=%d\n",
1781 address, test_instruction_address, delta);
1787 Address jmp_address = test_instruction_address - delta;
1802 #endif // V8_TARGET_ARCH_IA32
static void GenerateTransitionElementsDoubleToObject(MacroAssembler *masm)
static const int kBitFieldOffset
static void GenerateRuntimeGetProperty(MacroAssembler *masm)
const intptr_t kSmiTagMask
const intptr_t kSmiSignMask
static const byte kJccShortPrefix
static const int kElementsStartIndex
static void GenerateNormal(MacroAssembler *masm, int argc)
static const int kMapHashShift
void PrintF(const char *format,...)
static void GenerateGeneric(MacroAssembler *masm, StrictModeFlag strict_mode)
static const char * Name(Value tok)
static Smi * FromInt(int value)
static void GenerateMiss(MacroAssembler *masm, int argc, IC::UtilityId id, Code::ExtraICState extra_state)
static const int kGlobalReceiverOffset
static void GenerateGlobalProxy(MacroAssembler *masm, StrictModeFlag strict_mode)
static void GenerateMegamorphic(MacroAssembler *masm, StrictModeFlag strict_mode)
static void GenerateStringLength(MacroAssembler *masm, bool support_wrappers)
static const int kHasNamedInterceptor
static const int kIsAccessCheckNeeded
static void GenerateMegamorphic(MacroAssembler *masm)
#define ASSERT(condition)
const int kPointerSizeLog2
static const int kInstanceSizeOffset
Isolate * isolate() const
static const ExtraICState kNoExtraICState
static const byte kTestAlByte
void PatchInlinedSmiCode(Address address, InlinedSmiCheck check)
static void GenerateArrayLength(MacroAssembler *masm)
static const int kHashFieldOffset
static const int kHasIndexedInterceptor
static const byte kJcShortOpcode
void UpdateCaches(Handle< Object > x, Handle< Object > y)
static Condition ComputeCondition(Token::Value op)
STATIC_ASSERT((FixedDoubleArray::kHeaderSize &kDoubleAlignmentMask)==0)
const uint32_t kIsSymbolMask
static void GenerateGeneric(MacroAssembler *masm)
static const byte kNopByte
Operand FieldOperand(Register object, int offset)
static const byte kJzShortOpcode
static void GenerateMiss(MacroAssembler *masm)
static bool decode(uint32_t value)
static const int kPropertiesOffset
static Flags ComputeFlags(Kind kind, InlineCacheState ic_state=UNINITIALIZED, ExtraICState extra_ic_state=kNoExtraICState, StubType type=NORMAL, int argc=-1, InlineCacheHolderFlag holder=OWN_MAP)
static const int kInObjectPropertiesOffset
static void GenerateSmiToDouble(MacroAssembler *masm, Label *fail)
static void GenerateMapChangeElementsTransition(MacroAssembler *masm)
static const int kElementsOffset
static const int kContainsCachedArrayIndexMask
static const int kCallTargetAddressOffset
static void GenerateMegamorphic(MacroAssembler *masm, int argc)
static const int kLengthOffset
static const int kHeaderSize
static void GenerateSlow(MacroAssembler *masm)
static void GenerateMiss(MacroAssembler *masm, int argc, Code::ExtraICState extra_state)
static const int kMapOffset
static void GenerateRuntimeSetProperty(MacroAssembler *masm, StrictModeFlag strict_mode)
static void GenerateDoubleToObject(MacroAssembler *masm, Label *fail)
static const byte kJncShortOpcode
static const int kLengthOffset
static const int kSlowCaseBitFieldMask
KeyedStoreIncrementLength
static void GenerateNormal(MacroAssembler *masm, int argc)
static void GeneratePositiveLookup(MacroAssembler *masm, Label *miss, Label *done, Register elements, Register name, Register r0, Register r1)
static const int kContextOffset
static void GenerateMonomorphicCacheProbe(MacroAssembler *masm, int argc, Code::Kind kind, Code::ExtraICState extra_state)
static void GenerateString(MacroAssembler *masm)
Condition NegateCondition(Condition cond)
static void GenerateNonStrictArguments(MacroAssembler *masm)
static void GenerateMegamorphic(MacroAssembler *masm, int argc, Code::ExtraICState extra_ic_state)
static Operand FixedArrayElementOperand(Register array, Register index_as_smi, int additional_offset=0)
static void GenerateNormal(MacroAssembler *masm)
static void GenerateFunctionPrototype(MacroAssembler *masm)
static void GenerateIndexedInterceptor(MacroAssembler *masm)
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 NULL
void set_target(Code *code)
static const byte kJnzShortOpcode
const uint32_t kSymbolTag
static const int kCapacityMask
static void GenerateNonStrictArguments(MacroAssembler *masm)
static void GenerateMiss(MacroAssembler *masm, bool force_generic)
static void GenerateMiss(MacroAssembler *masm)
static void GenerateTransitionElementsSmiToDouble(MacroAssembler *masm)
static const int kHashShift
static void GenerateNonStrictArguments(MacroAssembler *masm, int argc)
static void GenerateArrayLength(MacroAssembler *masm)
static const char * GetStateName(State state)
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 check(i::Vector< const char > string)
static const int kHashMask
static void GenerateMiss(MacroAssembler *masm, int argc)
static const int kInstanceTypeOffset
static const int kEntriesPerBucket
static void GenerateNormal(MacroAssembler *masm)
static void GenerateMiss(MacroAssembler *masm, bool force_generic)