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);
234 bool support_wrappers) {
242 StubCompiler::GenerateLoadStringLength(masm,
edx,
eax,
ebx, &miss,
257 StubCompiler::GenerateLoadFunctionPrototype(masm,
edx,
eax,
ebx, &miss);
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);
758 Label slow, fast_object_with_map_check, fast_object_without_map_check;
759 Label fast_double_with_map_check, fast_double_without_map_check;
760 Label check_if_double_array, array, extra, transition_smi_elements;
761 Label finish_object_store, non_double_value, transition_double_elements;
764 __ JumpIfSmi(
edx, &slow);
773 __ JumpIfNotSmi(
ecx, &slow);
788 __ j(
below, &fast_object_with_map_check);
809 __ cmp(
edi, masm->isolate()->factory()->fixed_array_map());
814 __ jmp(&fast_object_without_map_check);
816 __ bind(&check_if_double_array);
817 __ cmp(
edi, masm->isolate()->factory()->fixed_double_array_map());
822 __ jmp(&fast_double_without_map_check);
840 __ bind(&fast_object_with_map_check);
847 __ cmp(
edi, masm->isolate()->factory()->fixed_array_map());
849 __ bind(&fast_object_without_map_check);
852 __ JumpIfNotSmi(
eax, &non_smi_value);
857 __ bind(&non_smi_value);
860 __ CheckFastObjectElements(
edi, &transition_smi_elements);
863 __ bind(&finish_object_store);
871 __ bind(&fast_double_with_map_check);
874 __ cmp(
edi, masm->isolate()->factory()->fixed_double_array_map());
876 __ bind(&fast_double_without_map_check);
880 &transition_double_elements,
false);
883 __ bind(&transition_smi_elements);
888 masm->isolate()->factory()->heap_number_map(),
901 __ jmp(&fast_double_without_map_check);
903 __ bind(&non_double_value);
912 __ jmp(&finish_object_store);
914 __ bind(&transition_double_elements);
926 __ jmp(&finish_object_store);
940 Label number, non_number, non_string, boolean, probe, miss;
948 Isolate* isolate = masm->isolate();
949 isolate->stub_cache()->GenerateProbe(masm, flags,
edx,
ecx,
ebx,
eax);
957 __ JumpIfSmi(
edx, &number);
961 StubCompiler::GenerateLoadGlobalFunctionPrototype(
966 __ bind(&non_number);
969 StubCompiler::GenerateLoadGlobalFunctionPrototype(
974 __ bind(&non_string);
975 __ cmp(
edx, isolate->factory()->true_value());
977 __ cmp(
edx, isolate->factory()->false_value());
980 StubCompiler::GenerateLoadGlobalFunctionPrototype(
985 isolate->stub_cache()->GenerateProbe(masm, flags,
edx,
ecx,
ebx,
no_reg);
990 static void GenerateFunctionTailCall(MacroAssembler* masm,
1003 __ JumpIfSmi(
edi, miss);
1010 ParameterCount actual(argc);
1028 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1030 GenerateStringDictionaryReceiverCheck(masm,
edx,
eax,
ebx, &miss);
1035 GenerateFunctionTailCall(masm, argc, &miss);
1053 Counters* counters = masm->isolate()->counters();
1054 if (
id == IC::kCallIC_Miss) {
1055 __ IncrementCounter(counters->call_miss(), 1);
1057 __ IncrementCounter(counters->keyed_call_miss(), 1);
1061 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1072 __ mov(
eax, Immediate(2));
1073 __ mov(
ebx, Immediate(ExternalReference(IC_Utility(
id), masm->isolate())));
1082 if (
id == IC::kCallIC_Miss) {
1083 Label invoke, global;
1084 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1085 __ JumpIfSmi(
edx, &invoke, Label::kNear);
1089 __ j(
equal, &global, Label::kNear);
1096 __ mov(Operand(
esp, (argc + 1) * kPointerSize),
edx);
1104 ParameterCount actual(argc);
1105 __ InvokeFunction(
edi,
1125 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1143 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1145 Label do_call, slow_call, slow_load, slow_reload_receiver;
1146 Label check_number_dictionary, check_string, lookup_monomorphic_cache;
1147 Label index_smi, index_string;
1150 __ JumpIfNotSmi(
ecx, &check_string);
1152 __ bind(&index_smi);
1156 GenerateKeyedLoadReceiverCheck(
1159 GenerateFastArrayLoad(
1160 masm,
edx,
ecx,
eax,
edi, &check_number_dictionary, &slow_load);
1161 Isolate* isolate = masm->isolate();
1162 Counters* counters = isolate->counters();
1163 __ IncrementCounter(counters->keyed_call_generic_smi_fast(), 1);
1169 GenerateFunctionTailCall(masm, argc, &slow_call);
1171 __ bind(&check_number_dictionary);
1176 isolate->factory()->hash_table_map(),
1183 __ LoadFromNumberDictionary(
1185 __ IncrementCounter(counters->keyed_call_generic_smi_dict(), 1);
1188 __ bind(&slow_reload_receiver);
1189 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1191 __ bind(&slow_load);
1194 __ IncrementCounter(counters->keyed_call_generic_slow_load(), 1);
1201 __ CallRuntime(Runtime::kKeyedGetProperty, 2);
1209 __ bind(&check_string);
1210 GenerateKeyStringCheck(masm,
ecx,
eax,
ebx, &index_string, &slow_call);
1216 GenerateKeyedLoadReceiverCheck(
1221 isolate->factory()->hash_table_map(),
1222 &lookup_monomorphic_cache,
1226 __ IncrementCounter(counters->keyed_call_generic_lookup_dict(), 1);
1229 __ bind(&lookup_monomorphic_cache);
1230 __ IncrementCounter(counters->keyed_call_generic_lookup_cache(), 1);
1235 __ bind(&slow_call);
1242 __ IncrementCounter(counters->keyed_call_generic_slow(), 1);
1245 __ bind(&index_string);
1262 Factory* factory = masm->isolate()->factory();
1263 __ mov(
edx, Operand(
esp, (argc + 1) * kPointerSize));
1264 Operand mapped_location =
1265 GenerateMappedArgumentsLookup(masm,
edx,
ecx,
ebx,
eax, ¬in, &slow);
1266 __ mov(
edi, mapped_location);
1267 GenerateFunctionTailCall(masm, argc, &slow);
1270 Operand unmapped_location =
1271 GenerateUnmappedArgumentsLookup(masm,
ecx,
ebx,
eax, &slow);
1272 __ cmp(unmapped_location, factory->the_hole_value());
1274 __ mov(
edi, unmapped_location);
1275 GenerateFunctionTailCall(masm, argc, &slow);
1292 __ JumpIfSmi(
ecx, &miss);
1310 Isolate::Current()->stub_cache()->GenerateProbe(masm, flags,
edx,
ecx,
ebx,
1326 GenerateStringDictionaryReceiverCheck(masm,
edx,
eax,
ebx, &miss);
1346 __ IncrementCounter(masm->isolate()->counters()->load_miss(), 1);
1354 ExternalReference ref =
1355 ExternalReference(IC_Utility(kLoadIC_Miss), masm->isolate());
1356 __ TailCallExternalReference(ref, 2, 1);
1367 __ IncrementCounter(masm->isolate()->counters()->keyed_load_miss(), 1);
1375 ExternalReference ref = force_generic
1376 ? ExternalReference(IC_Utility(kKeyedLoadIC_MissForceGeneric),
1378 : ExternalReference(IC_Utility(kKeyedLoadIC_Miss), masm->isolate());
1379 __ TailCallExternalReference(ref, 2, 1);
1396 __ TailCallRuntime(Runtime::kKeyedGetProperty, 2, 1);
1411 Isolate::Current()->stub_cache()->GenerateProbe(masm, flags,
edx,
ecx,
ebx,
1434 ExternalReference ref =
1435 ExternalReference(IC_Utility(kStoreIC_Miss), masm->isolate());
1436 __ TailCallExternalReference(ref, 3, 1);
1455 Register receiver =
edx;
1456 Register value =
eax;
1457 Register scratch =
ebx;
1460 __ JumpIfSmi(receiver, &miss);
1477 Heap::kHashTableMapRootIndex);
1481 __ JumpIfNotSmi(value, &miss);
1489 ExternalReference ref =
1490 ExternalReference(IC_Utility(kStoreIC_ArrayLength), masm->isolate());
1491 __ TailCallExternalReference(ref, 2, 1);
1507 Label miss, restore_miss;
1509 GenerateStringDictionaryReceiverCheck(masm,
edx,
ebx,
edi, &miss);
1515 GenerateDictionaryStore(masm, &restore_miss,
ebx,
ecx,
eax,
edx,
edi);
1517 Counters* counters = masm->isolate()->counters();
1518 __ IncrementCounter(counters->store_normal_hit(), 1);
1521 __ bind(&restore_miss);
1525 __ IncrementCounter(counters->store_normal_miss(), 1);
1547 __ TailCallRuntime(Runtime::kSetProperty, 5, 1);
1569 __ TailCallRuntime(Runtime::kSetProperty, 5, 1);
1588 ExternalReference ref = force_generic
1589 ? ExternalReference(IC_Utility(kKeyedStoreIC_MissForceGeneric),
1591 : ExternalReference(IC_Utility(kKeyedStoreIC_Miss), masm->isolate());
1592 __ TailCallExternalReference(ref, 3, 1);
1611 ExternalReference ref(IC_Utility(kKeyedStoreIC_Slow), masm->isolate());
1612 __ TailCallExternalReference(ref, 3, 1);
1623 if (!FLAG_trace_elements_transitions) {
1637 __ TailCallRuntime(Runtime::kTransitionElementsSmiToDouble, 1, 1);
1642 MacroAssembler* masm) {
1649 if (!FLAG_trace_elements_transitions) {
1663 __ TailCallRuntime(Runtime::kTransitionElementsDoubleToObject, 1, 1);
1672 case Token::EQ_STRICT:
1690 static bool HasInlinedSmiCode(
Address address) {
1692 Address test_instruction_address =
1703 Handle<Code> rewritten;
1704 State previous_state = GetState();
1706 State state = TargetState(previous_state, HasInlinedSmiCode(
address()), x, y);
1709 rewritten = stub.GetCode();
1711 ICCompareStub stub(op_, state);
1713 stub.set_known_map(Handle<Map>(Handle<JSObject>::cast(x)->map()));
1715 rewritten = stub.GetCode();
1720 if (FLAG_trace_ic) {
1721 PrintF(
"[CompareIC (%s->%s)#%s]\n",
1737 Address test_instruction_address =
1747 Address delta_address = test_instruction_address + 1;
1750 int8_t delta = *
reinterpret_cast<int8_t*
>(delta_address);
1751 if (FLAG_trace_ic) {
1752 PrintF(
"[ patching ic at %p, test=%p, delta=%d\n",
1753 address, test_instruction_address, delta);
1759 Address jmp_address = test_instruction_address - delta;
1774 #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)
value format" "after each garbage collection") DEFINE_bool(print_cumulative_gc_stat, false, "print cumulative GC statistics in name=value format on exit") DEFINE_bool(trace_gc_verbose, false, "print more details following each garbage collection") DEFINE_bool(trace_fragmentation, false, "report fragmentation for old pointer and data pages") DEFINE_bool(collect_maps, true, "garbage collect maps from which no objects can be reached") DEFINE_bool(flush_code, true, "flush code that we expect not to use again before full gc") DEFINE_bool(incremental_marking, true, "use incremental marking") DEFINE_bool(incremental_marking_steps, true, "do incremental marking steps") DEFINE_bool(trace_incremental_marking, false, "trace progress of the incremental marking") DEFINE_bool(use_idle_notification, true, "Use idle notification to reduce memory footprint.") DEFINE_bool(send_idle_notification, false, "Send idle notifcation between stress runs.") DEFINE_bool(use_ic, true, "use inline caching") DEFINE_bool(native_code_counters, false, "generate extra code for manipulating stats counters") DEFINE_bool(always_compact, false, "Perform compaction on every full GC") DEFINE_bool(lazy_sweeping, true, "Use lazy sweeping for old pointer and data spaces") DEFINE_bool(never_compact, false, "Never perform compaction on full GC-testing only") DEFINE_bool(compact_code_space, true, "Compact code space on full non-incremental collections") DEFINE_bool(cleanup_code_caches_at_gc, true, "Flush inline caches prior to mark compact collection and" "flush code caches in maps during mark compact cycle.") DEFINE_int(random_seed, 0, "Default seed for initializing random generator" "(0, the default, means to use system random).") DEFINE_bool(use_verbose_printer, true, "allows verbose printing") DEFINE_bool(allow_natives_syntax, false, "allow natives syntax") DEFINE_bool(trace_sim, false, "Trace simulator execution") DEFINE_bool(check_icache, false, "Check icache flushes in ARM and MIPS simulator") DEFINE_int(stop_sim_at, 0, "Simulator stop after x number of instructions") DEFINE_int(sim_stack_alignment, 8, "Stack alingment in bytes in simulator(4 or 8, 8 is default)") DEFINE_bool(trace_exception, false, "print stack trace when throwing exceptions") DEFINE_bool(preallocate_message_memory, false, "preallocate some memory to build stack traces.") DEFINE_bool(randomize_hashes, true, "randomize hashes to avoid predictable hash collisions" "(with snapshots this option cannot override the baked-in seed)") DEFINE_int(hash_seed, 0, "Fixed seed to use to hash property keys(0 means random)" "(with snapshots this option cannot override the baked-in seed)") DEFINE_bool(preemption, false, "activate a 100ms timer that switches between V8 threads") DEFINE_bool(regexp_optimization, true, "generate optimized regexp code") DEFINE_bool(testing_bool_flag, true, "testing_bool_flag") DEFINE_int(testing_int_flag, 13, "testing_int_flag") DEFINE_float(testing_float_flag, 2.5, "float-flag") DEFINE_string(testing_string_flag, "Hello, world!", "string-flag") DEFINE_int(testing_prng_seed, 42, "Seed used for threading test randomness") DEFINE_string(testing_serialization_file, "/tmp/serdes", "file in which to serialize heap") DEFINE_bool(help, false, "Print usage message, including flags, on console") DEFINE_bool(dump_counters, false, "Dump counters on exit") DEFINE_string(map_counters, "", "Map counters to a file") DEFINE_args(js_arguments, JSARGUMENTS_INIT, "Pass all remaining arguments to the script.Alias for\"--\".") DEFINE_bool(debug_compile_events, true,"Enable debugger compile events") DEFINE_bool(debug_script_collected_events, true,"Enable debugger script collected events") DEFINE_bool(gdbjit, false,"enable GDBJIT interface (disables compacting GC)") DEFINE_bool(gdbjit_full, false,"enable GDBJIT interface for all code objects") DEFINE_bool(gdbjit_dump, false,"dump elf objects with debug info to disk") DEFINE_string(gdbjit_dump_filter,"","dump only objects containing this substring") DEFINE_bool(force_marking_deque_overflows, false,"force overflows of marking deque by reducing it's size ""to 64 words") DEFINE_bool(stress_compaction, false,"stress the GC compactor to flush out bugs (implies ""--force_marking_deque_overflows)")#define FLAG DEFINE_bool(enable_slow_asserts, false,"enable asserts that are slow to execute") DEFINE_bool(trace_codegen, false,"print name of functions for which code is generated") DEFINE_bool(print_source, false,"pretty print source code") DEFINE_bool(print_builtin_source, false,"pretty print source code for builtins") DEFINE_bool(print_ast, false,"print source AST") DEFINE_bool(print_builtin_ast, false,"print source AST for builtins") DEFINE_string(stop_at,"","function name where to insert a breakpoint") DEFINE_bool(print_builtin_scopes, false,"print scopes for builtins") DEFINE_bool(print_scopes, false,"print scopes") DEFINE_bool(trace_contexts, false,"trace contexts operations") DEFINE_bool(gc_greedy, false,"perform GC prior to some allocations") DEFINE_bool(gc_verbose, false,"print stuff during garbage collection") DEFINE_bool(heap_stats, false,"report heap statistics before and after GC") DEFINE_bool(code_stats, false,"report code statistics after GC") DEFINE_bool(verify_heap, false,"verify heap pointers before and after GC") DEFINE_bool(print_handles, false,"report handles after GC") DEFINE_bool(print_global_handles, false,"report global handles after GC") DEFINE_bool(trace_ic, false,"trace inline cache state transitions") DEFINE_bool(print_interfaces, false,"print interfaces") DEFINE_bool(print_interface_details, false,"print interface inference details") DEFINE_int(print_interface_depth, 5,"depth for printing interfaces") DEFINE_bool(trace_normalization, false,"prints when objects are turned into dictionaries.") DEFINE_bool(trace_lazy, false,"trace lazy compilation") DEFINE_bool(collect_heap_spill_statistics, false,"report heap spill statistics along with heap_stats ""(requires heap_stats)") DEFINE_bool(trace_isolates, false,"trace isolate state changes") DEFINE_bool(log_state_changes, false,"Log state changes.") DEFINE_bool(regexp_possessive_quantifier, false,"enable possessive quantifier syntax for testing") DEFINE_bool(trace_regexp_bytecodes, false,"trace regexp bytecode execution") DEFINE_bool(trace_regexp_assembler, false,"trace regexp macro assembler calls.")#define FLAG DEFINE_bool(log, false,"Minimal logging (no API, code, GC, suspect, or handles samples).") DEFINE_bool(log_all, false,"Log all events to the log file.") DEFINE_bool(log_runtime, false,"Activate runtime system %Log call.") DEFINE_bool(log_api, false,"Log API events to the log file.") DEFINE_bool(log_code, false,"Log code events to the log file without profiling.") DEFINE_bool(log_gc, false,"Log heap samples on garbage collection for the hp2ps tool.") DEFINE_bool(log_handles, false,"Log global handle events.") DEFINE_bool(log_snapshot_positions, false,"log positions of (de)serialized objects in the snapshot.") DEFINE_bool(log_suspect, false,"Log suspect operations.") DEFINE_bool(prof, false,"Log statistical profiling information (implies --log-code).") DEFINE_bool(prof_auto, true,"Used with --prof, starts profiling automatically") DEFINE_bool(prof_lazy, false,"Used with --prof, only does sampling and logging"" when profiler is active (implies --noprof_auto).") DEFINE_bool(prof_browser_mode, true,"Used with --prof, turns on browser-compatible mode for profiling.") DEFINE_bool(log_regexp, false,"Log regular expression execution.") DEFINE_bool(sliding_state_window, false,"Update sliding state window counters.") DEFINE_string(logfile,"v8.log","Specify the name of the log file.") DEFINE_bool(ll_prof, false,"Enable low-level linux profiler.")#define FLAG DEFINE_bool(trace_elements_transitions, false,"trace elements transitions") DEFINE_bool(print_code_stubs, false,"print code stubs") DEFINE_bool(test_secondary_stub_cache, false,"test secondary stub cache by disabling the primary one") DEFINE_bool(test_primary_stub_cache, false,"test primary stub cache by disabling the secondary one") DEFINE_bool(print_code, false,"print generated code") DEFINE_bool(print_opt_code, false,"print optimized code") DEFINE_bool(print_unopt_code, false,"print unoptimized code before ""printing optimized code based on it") DEFINE_bool(print_code_verbose, false,"print more information for code") DEFINE_bool(print_builtin_code, false,"print generated code for builtins")#43"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flags.cc"2#define FLAG_MODE_DEFINE_DEFAULTS#1"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flag-definitions.h"1#define FLAG_FULL(ftype, ctype, nam, def, cmt)#define FLAG_READONLY(ftype, ctype, nam, def, cmt)#define DEFINE_implication(whenflag, thenflag)#define DEFINE_bool(nam, def, cmt)#define DEFINE_int(nam, def, cmt)#define DEFINE_float(nam, def, cmt)#define DEFINE_string(nam, def, cmt)#define DEFINE_args(nam, def, cmt)#define FLAG DEFINE_bool(use_strict, false,"enforce strict mode") DEFINE_bool(es5_readonly, false,"activate correct semantics for inheriting readonliness") DEFINE_bool(es52_globals, false,"activate new semantics for global var declarations") DEFINE_bool(harmony_typeof, false,"enable harmony semantics for typeof") DEFINE_bool(harmony_scoping, false,"enable harmony block scoping") DEFINE_bool(harmony_modules, false,"enable harmony modules (implies block scoping)") DEFINE_bool(harmony_proxies, false,"enable harmony proxies") DEFINE_bool(harmony_collections, false,"enable harmony collections (sets, maps, and weak maps)") DEFINE_bool(harmony, false,"enable all harmony features (except typeof)") DEFINE_implication(harmony, harmony_scoping) DEFINE_implication(harmony, harmony_modules) DEFINE_implication(harmony, harmony_proxies) DEFINE_implication(harmony, harmony_collections) DEFINE_implication(harmony_modules, harmony_scoping) DEFINE_bool(packed_arrays, false,"optimizes arrays that have no holes") DEFINE_bool(smi_only_arrays, true,"tracks arrays with only smi values") DEFINE_bool(clever_optimizations, true,"Optimize object size, Array shift, DOM strings and string +") DEFINE_bool(unbox_double_arrays, true,"automatically unbox arrays of doubles") DEFINE_bool(string_slices, true,"use string slices") DEFINE_bool(crankshaft, true,"use crankshaft") DEFINE_string(hydrogen_filter,"","optimization filter") DEFINE_bool(use_range, true,"use hydrogen range analysis") DEFINE_bool(eliminate_dead_phis, true,"eliminate dead phis") DEFINE_bool(use_gvn, true,"use hydrogen global value numbering") DEFINE_bool(use_canonicalizing, true,"use hydrogen instruction canonicalizing") DEFINE_bool(use_inlining, true,"use function inlining") DEFINE_int(max_inlined_source_size, 600,"maximum source size in bytes considered for a single inlining") DEFINE_int(max_inlined_nodes, 196,"maximum number of AST nodes considered for a single inlining") DEFINE_int(max_inlined_nodes_cumulative, 196,"maximum cumulative number of AST nodes considered for inlining") DEFINE_bool(loop_invariant_code_motion, true,"loop invariant code motion") DEFINE_bool(collect_megamorphic_maps_from_stub_cache, true,"crankshaft harvests type feedback from stub cache") DEFINE_bool(hydrogen_stats, false,"print statistics for hydrogen") DEFINE_bool(trace_hydrogen, false,"trace generated hydrogen to file") DEFINE_string(trace_phase,"Z","trace generated IR for specified phases") DEFINE_bool(trace_inlining, false,"trace inlining decisions") DEFINE_bool(trace_alloc, false,"trace register allocator") DEFINE_bool(trace_all_uses, false,"trace all use positions") DEFINE_bool(trace_range, false,"trace range analysis") DEFINE_bool(trace_gvn, false,"trace global value numbering") DEFINE_bool(trace_representation, false,"trace representation types") DEFINE_bool(stress_pointer_maps, false,"pointer map for every instruction") DEFINE_bool(stress_environments, false,"environment for every instruction") DEFINE_int(deopt_every_n_times, 0,"deoptimize every n times a deopt point is passed") DEFINE_bool(trap_on_deopt, false,"put a break point before deoptimizing") DEFINE_bool(deoptimize_uncommon_cases, true,"deoptimize uncommon cases") DEFINE_bool(polymorphic_inlining, true,"polymorphic inlining") DEFINE_bool(use_osr, true,"use on-stack replacement") DEFINE_bool(array_bounds_checks_elimination, false,"perform array bounds checks elimination") DEFINE_bool(array_index_dehoisting, false,"perform array index dehoisting") DEFINE_bool(trace_osr, false,"trace on-stack replacement") DEFINE_int(stress_runs, 0,"number of stress runs") DEFINE_bool(optimize_closures, true,"optimize closures") DEFINE_bool(inline_construct, true,"inline constructor calls") DEFINE_bool(inline_arguments, true,"inline functions with arguments object") DEFINE_int(loop_weight, 1,"loop weight for representation inference") DEFINE_bool(optimize_for_in, true,"optimize functions containing for-in loops") DEFINE_bool(experimental_profiler, true,"enable all profiler experiments") DEFINE_bool(watch_ic_patching, false,"profiler considers IC stability") DEFINE_int(frame_count, 1,"number of stack frames inspected by the profiler") DEFINE_bool(self_optimization, false,"primitive functions trigger their own optimization") DEFINE_bool(direct_self_opt, false,"call recompile stub directly when self-optimizing") DEFINE_bool(retry_self_opt, false,"re-try self-optimization if it failed") DEFINE_bool(count_based_interrupts, false,"trigger profiler ticks based on counting instead of timing") DEFINE_bool(interrupt_at_exit, false,"insert an interrupt check at function exit") DEFINE_bool(weighted_back_edges, false,"weight back edges by jump distance for interrupt triggering") DEFINE_int(interrupt_budget, 5900,"execution budget before interrupt is triggered") DEFINE_int(type_info_threshold, 15,"percentage of ICs that must have type info to allow optimization") DEFINE_int(self_opt_count, 130,"call count before self-optimization") DEFINE_implication(experimental_profiler, watch_ic_patching) DEFINE_implication(experimental_profiler, self_optimization) DEFINE_implication(experimental_profiler, retry_self_opt) DEFINE_implication(experimental_profiler, count_based_interrupts) DEFINE_implication(experimental_profiler, interrupt_at_exit) DEFINE_implication(experimental_profiler, weighted_back_edges) DEFINE_bool(trace_opt_verbose, false,"extra verbose compilation tracing") DEFINE_implication(trace_opt_verbose, trace_opt) DEFINE_bool(debug_code, false,"generate extra code (assertions) for debugging") DEFINE_bool(code_comments, false,"emit comments in code disassembly") DEFINE_bool(enable_sse2, true,"enable use of SSE2 instructions if available") DEFINE_bool(enable_sse3, true,"enable use of SSE3 instructions if available") DEFINE_bool(enable_sse4_1, true,"enable use of SSE4.1 instructions if available") DEFINE_bool(enable_cmov, true,"enable use of CMOV instruction if available") DEFINE_bool(enable_rdtsc, true,"enable use of RDTSC instruction if available") DEFINE_bool(enable_sahf, true,"enable use of SAHF instruction if available (X64 only)") DEFINE_bool(enable_vfp3, true,"enable use of VFP3 instructions if available - this implies ""enabling ARMv7 instructions (ARM only)") DEFINE_bool(enable_armv7, true,"enable use of ARMv7 instructions if available (ARM only)") DEFINE_bool(enable_fpu, true,"enable use of MIPS FPU instructions if available (MIPS only)") DEFINE_string(expose_natives_as, NULL,"expose natives in global object") DEFINE_string(expose_debug_as, NULL,"expose debug in global object") DEFINE_bool(expose_gc, false,"expose gc extension") DEFINE_bool(expose_externalize_string, false,"expose externalize string extension") DEFINE_int(stack_trace_limit, 10,"number of stack frames to capture") DEFINE_bool(builtins_in_stack_traces, false,"show built-in functions in stack traces") DEFINE_bool(disable_native_files, false,"disable builtin natives files") DEFINE_bool(inline_new, true,"use fast inline allocation") DEFINE_bool(stack_trace_on_abort, true,"print a stack trace if an assertion failure occurs") DEFINE_bool(trace, false,"trace function calls") DEFINE_bool(mask_constants_with_cookie, true,"use random jit cookie to mask large constants") DEFINE_bool(lazy, true,"use lazy compilation") DEFINE_bool(trace_opt, false,"trace lazy optimization") DEFINE_bool(trace_opt_stats, false,"trace lazy optimization statistics") DEFINE_bool(opt, true,"use adaptive optimizations") DEFINE_bool(always_opt, false,"always try to optimize functions") DEFINE_bool(prepare_always_opt, false,"prepare for turning on always opt") DEFINE_bool(trace_deopt, false,"trace deoptimization") DEFINE_int(min_preparse_length, 1024,"minimum length for automatic enable preparsing") DEFINE_bool(always_full_compiler, false,"try to use the dedicated run-once backend for all code") DEFINE_bool(trace_bailout, false,"print reasons for falling back to using the classic V8 backend") DEFINE_bool(compilation_cache, true,"enable compilation cache") DEFINE_bool(cache_prototype_transitions, true,"cache prototype transitions") DEFINE_bool(trace_debug_json, false,"trace debugging JSON request/response") DEFINE_bool(debugger_auto_break, true,"automatically set the debug break flag when debugger commands are ""in the queue") DEFINE_bool(enable_liveedit, true,"enable liveedit experimental feature") DEFINE_bool(break_on_abort, true,"always cause a debug break before aborting") DEFINE_int(stack_size, kPointerSize *123,"default size of stack region v8 is allowed to use (in kBytes)") DEFINE_int(max_stack_trace_source_length, 300,"maximum length of function source code printed in a stack trace.") DEFINE_bool(always_inline_smi_code, false,"always inline smi code in non-opt code") DEFINE_int(max_new_space_size, 0,"max size of the new generation (in kBytes)") DEFINE_int(max_old_space_size, 0,"max size of the old generation (in Mbytes)") DEFINE_int(max_executable_size, 0,"max size of executable memory (in Mbytes)") DEFINE_bool(gc_global, false,"always perform global GCs") DEFINE_int(gc_interval,-1,"garbage collect after <n> allocations") DEFINE_bool(trace_gc, false,"print one trace line following each garbage collection") DEFINE_bool(trace_gc_nvp, false,"print one detailed trace line in name=value format ""after each garbage collection") DEFINE_bool(print_cumulative_gc_stat, false,"print cumulative GC statistics in name=value format on exit") DEFINE_bool(trace_gc_verbose, false,"print more details following each garbage collection") DEFINE_bool(trace_fragmentation, false,"report fragmentation for old pointer and data pages") DEFINE_bool(collect_maps, true,"garbage collect maps from which no objects can be reached") DEFINE_bool(flush_code, true,"flush code that we expect not to use again before full gc") DEFINE_bool(incremental_marking, true,"use incremental marking") DEFINE_bool(incremental_marking_steps, true,"do incremental marking steps") DEFINE_bool(trace_incremental_marking, false,"trace progress of the incremental marking") DEFINE_bool(use_idle_notification, true,"Use idle notification to reduce memory footprint.") DEFINE_bool(send_idle_notification, false,"Send idle notifcation between stress runs.") DEFINE_bool(use_ic, true,"use inline caching") DEFINE_bool(native_code_counters, false,"generate extra code for manipulating stats counters") DEFINE_bool(always_compact, false,"Perform compaction on every full GC") DEFINE_bool(lazy_sweeping, true,"Use lazy sweeping for old pointer and data spaces") DEFINE_bool(never_compact, false,"Never perform compaction on full GC - testing only") DEFINE_bool(compact_code_space, true,"Compact code space on full non-incremental collections") DEFINE_bool(cleanup_code_caches_at_gc, true,"Flush inline caches prior to mark compact collection and ""flush code caches in maps during mark compact cycle.") DEFINE_int(random_seed, 0,"Default seed for initializing random generator ""(0, the default, means to use system random).") DEFINE_bool(use_verbose_printer, true,"allows verbose printing") DEFINE_bool(allow_natives_syntax, false,"allow natives syntax") DEFINE_bool(trace_sim, false,"Trace simulator execution") DEFINE_bool(check_icache, false,"Check icache flushes in ARM and MIPS simulator") DEFINE_int(stop_sim_at, 0,"Simulator stop after x number of instructions") DEFINE_int(sim_stack_alignment, 8,"Stack alingment in bytes in simulator (4 or 8, 8 is default)") DEFINE_bool(trace_exception, false,"print stack trace when throwing exceptions") DEFINE_bool(preallocate_message_memory, false,"preallocate some memory to build stack traces.") DEFINE_bool(randomize_hashes, true,"randomize hashes to avoid predictable hash collisions ""(with snapshots this option cannot override the baked-in seed)") DEFINE_int(hash_seed, 0,"Fixed seed to use to hash property keys (0 means random)""(with snapshots this option cannot override the baked-in seed)") DEFINE_bool(preemption, false,"activate a 100ms timer that switches between V8 threads") DEFINE_bool(regexp_optimization, true,"generate optimized regexp code") DEFINE_bool(testing_bool_flag, true,"testing_bool_flag") DEFINE_int(testing_int_flag, 13,"testing_int_flag") DEFINE_float(testing_float_flag, 2.5,"float-flag") DEFINE_string(testing_string_flag,"Hello, world!","string-flag") DEFINE_int(testing_prng_seed, 42,"Seed used for threading test randomness") DEFINE_string(testing_serialization_file,"/tmp/serdes","file in which to serialize heap") DEFINE_bool(help, false,"Print usage message, including flags, on console") DEFINE_bool(dump_counters, false,"Dump counters on exit") DEFINE_string(map_counters,"","Map counters to a file") DEFINE_args(js_arguments, JSARGUMENTS_INIT,"Pass all remaining arguments to the script. Alias for \"--\".") DEFINE_bool(debug_compile_events, true,"Enable debugger compile events") DEFINE_bool(debug_script_collected_events, true,"Enable debugger script collected events") DEFINE_bool(gdbjit, false,"enable GDBJIT interface (disables compacting GC)") DEFINE_bool(gdbjit_full, false,"enable GDBJIT interface for all code objects") DEFINE_bool(gdbjit_dump, false,"dump elf objects with debug info to disk") DEFINE_string(gdbjit_dump_filter,"","dump only objects containing this substring") DEFINE_bool(force_marking_deque_overflows, false,"force overflows of marking deque by reducing it's size ""to 64 words") DEFINE_bool(stress_compaction, false,"stress the GC compactor to flush out bugs (implies ""--force_marking_deque_overflows)")#define FLAG DEFINE_bool(enable_slow_asserts, false,"enable asserts that are slow to execute") DEFINE_bool(trace_codegen, false,"print name of functions for which code is generated") DEFINE_bool(print_source, false,"pretty print source code") DEFINE_bool(print_builtin_source, false,"pretty print source code for builtins") DEFINE_bool(print_ast, false,"print source AST") DEFINE_bool(print_builtin_ast, false,"print source AST for builtins") DEFINE_string(stop_at,"","function name where to insert a breakpoint") DEFINE_bool(print_builtin_scopes, false,"print scopes for builtins") DEFINE_bool(print_scopes, false,"print scopes") DEFINE_bool(trace_contexts, false,"trace contexts operations") DEFINE_bool(gc_greedy, false,"perform GC prior to some allocations") DEFINE_bool(gc_verbose, false,"print stuff during garbage collection") DEFINE_bool(heap_stats, false,"report heap statistics before and after GC") DEFINE_bool(code_stats, false,"report code statistics after GC") DEFINE_bool(verify_heap, false,"verify heap pointers before and after GC") DEFINE_bool(print_handles, false,"report handles after GC") DEFINE_bool(print_global_handles, false,"report global handles after GC") DEFINE_bool(trace_ic, false,"trace inline cache state transitions") DEFINE_bool(print_interfaces, false,"print interfaces") DEFINE_bool(print_interface_details, false,"print interface inference details") DEFINE_int(print_interface_depth, 5,"depth for printing interfaces") DEFINE_bool(trace_normalization, false,"prints when objects are turned into dictionaries.") DEFINE_bool(trace_lazy, false,"trace lazy compilation") DEFINE_bool(collect_heap_spill_statistics, false,"report heap spill statistics along with heap_stats ""(requires heap_stats)") DEFINE_bool(trace_isolates, false,"trace isolate state changes") DEFINE_bool(log_state_changes, false,"Log state changes.") DEFINE_bool(regexp_possessive_quantifier, false,"enable possessive quantifier syntax for testing") DEFINE_bool(trace_regexp_bytecodes, false,"trace regexp bytecode execution") DEFINE_bool(trace_regexp_assembler, false,"trace regexp macro assembler calls.")#define FLAG DEFINE_bool(log, false,"Minimal logging (no API, code, GC, suspect, or handles samples).") DEFINE_bool(log_all, false,"Log all events to the log file.") DEFINE_bool(log_runtime, false,"Activate runtime system %Log call.") DEFINE_bool(log_api, false,"Log API events to the log file.") DEFINE_bool(log_code, false,"Log code events to the log file without profiling.") DEFINE_bool(log_gc, false,"Log heap samples on garbage collection for the hp2ps tool.") DEFINE_bool(log_handles, false,"Log global handle events.") DEFINE_bool(log_snapshot_positions, false,"log positions of (de)serialized objects in the snapshot.") DEFINE_bool(log_suspect, false,"Log suspect operations.") DEFINE_bool(prof, false,"Log statistical profiling information (implies --log-code).") DEFINE_bool(prof_auto, true,"Used with --prof, starts profiling automatically") DEFINE_bool(prof_lazy, false,"Used with --prof, only does sampling and logging"" when profiler is active (implies --noprof_auto).") DEFINE_bool(prof_browser_mode, true,"Used with --prof, turns on browser-compatible mode for profiling.") DEFINE_bool(log_regexp, false,"Log regular expression execution.") DEFINE_bool(sliding_state_window, false,"Update sliding state window counters.") DEFINE_string(logfile,"v8.log","Specify the name of the log file.") DEFINE_bool(ll_prof, false,"Enable low-level linux profiler.")#define FLAG DEFINE_bool(trace_elements_transitions, false,"trace elements transitions") DEFINE_bool(print_code_stubs, false,"print code stubs") DEFINE_bool(test_secondary_stub_cache, false,"test secondary stub cache by disabling the primary one") DEFINE_bool(test_primary_stub_cache, false,"test primary stub cache by disabling the secondary one") DEFINE_bool(print_code, false,"print generated code") DEFINE_bool(print_opt_code, false,"print optimized code") DEFINE_bool(print_unopt_code, false,"print unoptimized code before ""printing optimized code based on it") DEFINE_bool(print_code_verbose, false,"print more information for code") DEFINE_bool(print_builtin_code, false,"print generated code for builtins")#47"/Users/thlorenz/dev/dx/v8-perf/build/v8/src/flags.cc"2 namespace{struct Flag{enum FlagType{TYPE_BOOL, TYPE_INT, TYPE_FLOAT, TYPE_STRING, TYPE_ARGS} name
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 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
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)
static Flags ComputeFlags(Kind kind, InlineCacheState ic_state=UNINITIALIZED, ExtraICState extra_ic_state=kNoExtraICState, PropertyType type=NORMAL, int argc=-1, InlineCacheHolderFlag holder=OWN_MAP)
Condition NegateCondition(Condition cond)
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 trace on stack replacement optimize closures functions with arguments object optimize functions containing for in loops profiler considers IC stability primitive functions trigger their own optimization re try self optimization if it failed insert an interrupt check at function exit execution budget before interrupt is triggered call count before self optimization self_optimization count_based_interrupts weighted_back_edges trace_opt 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 enable use of ARMv7 instructions if enable use of MIPS FPU instructions if NULL
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)
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)
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)