v8  3.11.10(node0.8.26)
V8 is Google's open source JavaScript engine
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
builtins.h
Go to the documentation of this file.
1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are
4 // met:
5 //
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 
28 #ifndef V8_BUILTINS_H_
29 #define V8_BUILTINS_H_
30 
31 namespace v8 {
32 namespace internal {
33 
34 // Specifies extra arguments required by a C++ builtin.
38 };
39 
40 
41 // Define list of builtins implemented in C++.
42 #define BUILTIN_LIST_C(V) \
43  V(Illegal, NO_EXTRA_ARGUMENTS) \
44  \
45  V(EmptyFunction, NO_EXTRA_ARGUMENTS) \
46  \
47  V(InternalArrayCodeGeneric, NO_EXTRA_ARGUMENTS) \
48  V(ArrayCodeGeneric, NO_EXTRA_ARGUMENTS) \
49  \
50  V(ArrayPush, NO_EXTRA_ARGUMENTS) \
51  V(ArrayPop, NO_EXTRA_ARGUMENTS) \
52  V(ArrayShift, NO_EXTRA_ARGUMENTS) \
53  V(ArrayUnshift, NO_EXTRA_ARGUMENTS) \
54  V(ArraySlice, NO_EXTRA_ARGUMENTS) \
55  V(ArraySplice, NO_EXTRA_ARGUMENTS) \
56  V(ArrayConcat, NO_EXTRA_ARGUMENTS) \
57  \
58  V(HandleApiCall, NEEDS_CALLED_FUNCTION) \
59  V(HandleApiCallConstruct, NEEDS_CALLED_FUNCTION) \
60  V(HandleApiCallAsFunction, NO_EXTRA_ARGUMENTS) \
61  V(HandleApiCallAsConstructor, NO_EXTRA_ARGUMENTS) \
62  \
63  V(StrictModePoisonPill, NO_EXTRA_ARGUMENTS)
64 
65 // Define list of builtins implemented in assembly.
66 #define BUILTIN_LIST_A(V) \
67  V(ArgumentsAdaptorTrampoline, BUILTIN, UNINITIALIZED, \
68  Code::kNoExtraICState) \
69  V(JSConstructStubCountdown, BUILTIN, UNINITIALIZED, \
70  Code::kNoExtraICState) \
71  V(JSConstructStubGeneric, BUILTIN, UNINITIALIZED, \
72  Code::kNoExtraICState) \
73  V(JSConstructStubApi, BUILTIN, UNINITIALIZED, \
74  Code::kNoExtraICState) \
75  V(JSEntryTrampoline, BUILTIN, UNINITIALIZED, \
76  Code::kNoExtraICState) \
77  V(JSConstructEntryTrampoline, BUILTIN, UNINITIALIZED, \
78  Code::kNoExtraICState) \
79  V(LazyCompile, BUILTIN, UNINITIALIZED, \
80  Code::kNoExtraICState) \
81  V(LazyRecompile, BUILTIN, UNINITIALIZED, \
82  Code::kNoExtraICState) \
83  V(NotifyDeoptimized, BUILTIN, UNINITIALIZED, \
84  Code::kNoExtraICState) \
85  V(NotifyLazyDeoptimized, BUILTIN, UNINITIALIZED, \
86  Code::kNoExtraICState) \
87  V(NotifyOSR, BUILTIN, UNINITIALIZED, \
88  Code::kNoExtraICState) \
89  \
90  V(LoadIC_Miss, BUILTIN, UNINITIALIZED, \
91  Code::kNoExtraICState) \
92  V(KeyedLoadIC_Miss, BUILTIN, UNINITIALIZED, \
93  Code::kNoExtraICState) \
94  V(KeyedLoadIC_MissForceGeneric, BUILTIN, UNINITIALIZED, \
95  Code::kNoExtraICState) \
96  V(KeyedLoadIC_Slow, BUILTIN, UNINITIALIZED, \
97  Code::kNoExtraICState) \
98  V(StoreIC_Miss, BUILTIN, UNINITIALIZED, \
99  Code::kNoExtraICState) \
100  V(KeyedStoreIC_Miss, BUILTIN, UNINITIALIZED, \
101  Code::kNoExtraICState) \
102  V(KeyedStoreIC_MissForceGeneric, BUILTIN, UNINITIALIZED, \
103  Code::kNoExtraICState) \
104  V(KeyedStoreIC_Slow, BUILTIN, UNINITIALIZED, \
105  Code::kNoExtraICState) \
106  V(LoadIC_Initialize, LOAD_IC, UNINITIALIZED, \
107  Code::kNoExtraICState) \
108  V(LoadIC_PreMonomorphic, LOAD_IC, PREMONOMORPHIC, \
109  Code::kNoExtraICState) \
110  V(LoadIC_Normal, LOAD_IC, MONOMORPHIC, \
111  Code::kNoExtraICState) \
112  V(LoadIC_ArrayLength, LOAD_IC, MONOMORPHIC, \
113  Code::kNoExtraICState) \
114  V(LoadIC_StringLength, LOAD_IC, MONOMORPHIC, \
115  Code::kNoExtraICState) \
116  V(LoadIC_StringWrapperLength, LOAD_IC, MONOMORPHIC, \
117  Code::kNoExtraICState) \
118  V(LoadIC_FunctionPrototype, LOAD_IC, MONOMORPHIC, \
119  Code::kNoExtraICState) \
120  V(LoadIC_Megamorphic, LOAD_IC, MEGAMORPHIC, \
121  Code::kNoExtraICState) \
122  \
123  V(KeyedLoadIC_Initialize, KEYED_LOAD_IC, UNINITIALIZED, \
124  Code::kNoExtraICState) \
125  V(KeyedLoadIC_PreMonomorphic, KEYED_LOAD_IC, PREMONOMORPHIC, \
126  Code::kNoExtraICState) \
127  V(KeyedLoadIC_Generic, KEYED_LOAD_IC, MEGAMORPHIC, \
128  Code::kNoExtraICState) \
129  V(KeyedLoadIC_String, KEYED_LOAD_IC, MEGAMORPHIC, \
130  Code::kNoExtraICState) \
131  V(KeyedLoadIC_IndexedInterceptor, KEYED_LOAD_IC, MEGAMORPHIC, \
132  Code::kNoExtraICState) \
133  V(KeyedLoadIC_NonStrictArguments, KEYED_LOAD_IC, MEGAMORPHIC, \
134  Code::kNoExtraICState) \
135  \
136  V(StoreIC_Initialize, STORE_IC, UNINITIALIZED, \
137  Code::kNoExtraICState) \
138  V(StoreIC_ArrayLength, STORE_IC, MONOMORPHIC, \
139  Code::kNoExtraICState) \
140  V(StoreIC_Normal, STORE_IC, MONOMORPHIC, \
141  Code::kNoExtraICState) \
142  V(StoreIC_Megamorphic, STORE_IC, MEGAMORPHIC, \
143  Code::kNoExtraICState) \
144  V(StoreIC_GlobalProxy, STORE_IC, MEGAMORPHIC, \
145  Code::kNoExtraICState) \
146  V(StoreIC_Initialize_Strict, STORE_IC, UNINITIALIZED, \
147  kStrictMode) \
148  V(StoreIC_ArrayLength_Strict, STORE_IC, MONOMORPHIC, \
149  kStrictMode) \
150  V(StoreIC_Normal_Strict, STORE_IC, MONOMORPHIC, \
151  kStrictMode) \
152  V(StoreIC_Megamorphic_Strict, STORE_IC, MEGAMORPHIC, \
153  kStrictMode) \
154  V(StoreIC_GlobalProxy_Strict, STORE_IC, MEGAMORPHIC, \
155  kStrictMode) \
156  \
157  V(KeyedStoreIC_Initialize, KEYED_STORE_IC, UNINITIALIZED, \
158  Code::kNoExtraICState) \
159  V(KeyedStoreIC_Generic, KEYED_STORE_IC, MEGAMORPHIC, \
160  Code::kNoExtraICState) \
161  \
162  V(KeyedStoreIC_Initialize_Strict, KEYED_STORE_IC, UNINITIALIZED, \
163  kStrictMode) \
164  V(KeyedStoreIC_Generic_Strict, KEYED_STORE_IC, MEGAMORPHIC, \
165  kStrictMode) \
166  V(KeyedStoreIC_NonStrictArguments, KEYED_STORE_IC, MEGAMORPHIC, \
167  Code::kNoExtraICState) \
168  V(TransitionElementsSmiToDouble, BUILTIN, UNINITIALIZED, \
169  Code::kNoExtraICState) \
170  V(TransitionElementsDoubleToObject, BUILTIN, UNINITIALIZED, \
171  Code::kNoExtraICState) \
172  \
173  /* Uses KeyedLoadIC_Initialize; must be after in list. */ \
174  V(FunctionCall, BUILTIN, UNINITIALIZED, \
175  Code::kNoExtraICState) \
176  V(FunctionApply, BUILTIN, UNINITIALIZED, \
177  Code::kNoExtraICState) \
178  \
179  V(InternalArrayCode, BUILTIN, UNINITIALIZED, \
180  Code::kNoExtraICState) \
181  V(ArrayCode, BUILTIN, UNINITIALIZED, \
182  Code::kNoExtraICState) \
183  V(ArrayConstructCode, BUILTIN, UNINITIALIZED, \
184  Code::kNoExtraICState) \
185  \
186  V(StringConstructCode, BUILTIN, UNINITIALIZED, \
187  Code::kNoExtraICState) \
188  \
189  V(OnStackReplacement, BUILTIN, UNINITIALIZED, \
190  Code::kNoExtraICState)
191 
192 
193 #ifdef ENABLE_DEBUGGER_SUPPORT
194 // Define list of builtins used by the debugger implemented in assembly.
195 #define BUILTIN_LIST_DEBUG_A(V) \
196  V(Return_DebugBreak, BUILTIN, DEBUG_BREAK, \
197  Code::kNoExtraICState) \
198  V(CallFunctionStub_DebugBreak, BUILTIN, DEBUG_BREAK, \
199  Code::kNoExtraICState) \
200  V(CallFunctionStub_Recording_DebugBreak, BUILTIN, DEBUG_BREAK, \
201  Code::kNoExtraICState) \
202  V(CallConstructStub_DebugBreak, BUILTIN, DEBUG_BREAK, \
203  Code::kNoExtraICState) \
204  V(CallConstructStub_Recording_DebugBreak, BUILTIN, DEBUG_BREAK, \
205  Code::kNoExtraICState) \
206  V(LoadIC_DebugBreak, LOAD_IC, DEBUG_BREAK, \
207  Code::kNoExtraICState) \
208  V(KeyedLoadIC_DebugBreak, KEYED_LOAD_IC, DEBUG_BREAK, \
209  Code::kNoExtraICState) \
210  V(StoreIC_DebugBreak, STORE_IC, DEBUG_BREAK, \
211  Code::kNoExtraICState) \
212  V(KeyedStoreIC_DebugBreak, KEYED_STORE_IC, DEBUG_BREAK, \
213  Code::kNoExtraICState) \
214  V(Slot_DebugBreak, BUILTIN, DEBUG_BREAK, \
215  Code::kNoExtraICState) \
216  V(PlainReturn_LiveEdit, BUILTIN, DEBUG_BREAK, \
217  Code::kNoExtraICState) \
218  V(FrameDropper_LiveEdit, BUILTIN, DEBUG_BREAK, \
219  Code::kNoExtraICState)
220 #else
221 #define BUILTIN_LIST_DEBUG_A(V)
222 #endif
223 
224 // Define list of builtins implemented in JavaScript.
225 #define BUILTINS_LIST_JS(V) \
226  V(EQUALS, 1) \
227  V(STRICT_EQUALS, 1) \
228  V(COMPARE, 2) \
229  V(ADD, 1) \
230  V(SUB, 1) \
231  V(MUL, 1) \
232  V(DIV, 1) \
233  V(MOD, 1) \
234  V(BIT_OR, 1) \
235  V(BIT_AND, 1) \
236  V(BIT_XOR, 1) \
237  V(UNARY_MINUS, 0) \
238  V(BIT_NOT, 0) \
239  V(SHL, 1) \
240  V(SAR, 1) \
241  V(SHR, 1) \
242  V(DELETE, 2) \
243  V(IN, 1) \
244  V(INSTANCE_OF, 1) \
245  V(FILTER_KEY, 1) \
246  V(CALL_NON_FUNCTION, 0) \
247  V(CALL_NON_FUNCTION_AS_CONSTRUCTOR, 0) \
248  V(CALL_FUNCTION_PROXY, 1) \
249  V(CALL_FUNCTION_PROXY_AS_CONSTRUCTOR, 1) \
250  V(TO_OBJECT, 0) \
251  V(TO_NUMBER, 0) \
252  V(TO_STRING, 0) \
253  V(STRING_ADD_LEFT, 1) \
254  V(STRING_ADD_RIGHT, 1) \
255  V(APPLY_PREPARE, 1) \
256  V(APPLY_OVERFLOW, 1)
257 
258 
259 class BuiltinFunctionTable;
260 class ObjectVisitor;
261 
262 
263 class Builtins {
264  public:
265  ~Builtins();
266 
267  // Generate all builtin code objects. Should be called once during
268  // isolate initialization.
269  void SetUp(bool create_heap_objects);
270  void TearDown();
271 
272  // Garbage collection support.
273  void IterateBuiltins(ObjectVisitor* v);
274 
275  // Disassembler support.
276  const char* Lookup(byte* pc);
277 
278  enum Name {
279 #define DEF_ENUM_C(name, ignore) k##name,
280 #define DEF_ENUM_A(name, kind, state, extra) k##name,
284 #undef DEF_ENUM_C
285 #undef DEF_ENUM_A
287  };
288 
289  enum CFunctionId {
290 #define DEF_ENUM_C(name, ignore) c_##name,
292 #undef DEF_ENUM_C
294  };
295 
296  enum JavaScript {
297 #define DEF_ENUM(name, ignore) name,
299 #undef DEF_ENUM
301  };
302 
303 #define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle<Code> name();
304 #define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \
305  Handle<Code> name();
309 #undef DECLARE_BUILTIN_ACCESSOR_C
310 #undef DECLARE_BUILTIN_ACCESSOR_A
311 
313  // Code::cast cannot be used here since we access builtins
314  // during the marking phase of mark sweep. See IC::Clear.
315  return reinterpret_cast<Code*>(builtins_[name]);
316  }
317 
319  return reinterpret_cast<Address>(&builtins_[name]);
320  }
321 
323  return c_functions_[id];
324  }
325 
326  static const char* GetName(JavaScript id) { return javascript_names_[id]; }
327  static int GetArgumentsCount(JavaScript id) { return javascript_argc_[id]; }
328  Handle<Code> GetCode(JavaScript id, bool* resolved);
329  static int NumberOfJavaScriptBuiltins() { return id_count; }
330 
331  bool is_initialized() const { return initialized_; }
332 
333  private:
334  Builtins();
335 
336  // The external C++ functions called from the code.
337  static Address const c_functions_[cfunction_count];
338 
339  // Note: These are always Code objects, but to conform with
340  // IterateBuiltins() above which assumes Object**'s for the callback
341  // function f, we use an Object* array here.
342  Object* builtins_[builtin_count];
343  const char* names_[builtin_count];
344  static const char* const javascript_names_[id_count];
345  static int const javascript_argc_[id_count];
346 
347  static void Generate_Adaptor(MacroAssembler* masm,
348  CFunctionId id,
349  BuiltinExtraArguments extra_args);
350  static void Generate_JSConstructStubCountdown(MacroAssembler* masm);
351  static void Generate_JSConstructStubGeneric(MacroAssembler* masm);
352  static void Generate_JSConstructStubApi(MacroAssembler* masm);
353  static void Generate_JSEntryTrampoline(MacroAssembler* masm);
354  static void Generate_JSConstructEntryTrampoline(MacroAssembler* masm);
355  static void Generate_LazyCompile(MacroAssembler* masm);
356  static void Generate_LazyRecompile(MacroAssembler* masm);
357  static void Generate_NotifyDeoptimized(MacroAssembler* masm);
358  static void Generate_NotifyLazyDeoptimized(MacroAssembler* masm);
359  static void Generate_NotifyOSR(MacroAssembler* masm);
360  static void Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm);
361 
362  static void Generate_FunctionCall(MacroAssembler* masm);
363  static void Generate_FunctionApply(MacroAssembler* masm);
364 
365  static void Generate_InternalArrayCode(MacroAssembler* masm);
366  static void Generate_ArrayCode(MacroAssembler* masm);
367  static void Generate_ArrayConstructCode(MacroAssembler* masm);
368 
369  static void Generate_StringConstructCode(MacroAssembler* masm);
370  static void Generate_OnStackReplacement(MacroAssembler* masm);
371 
372  static void InitBuiltinFunctionTable();
373 
374  bool initialized_;
375 
376  friend class BuiltinFunctionTable;
377  friend class Isolate;
378 
380 };
381 
382 } } // namespace v8::internal
383 
384 #endif // V8_BUILTINS_H_
byte * Address
Definition: globals.h:172
Code * builtin(Name name)
Definition: builtins.h:312
#define DEF_ENUM(name, ignore)
Definition: builtins.h:297
#define BUILTINS_LIST_JS(V)
Definition: builtins.h:225
bool is_initialized() const
Definition: builtins.h:331
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
Definition: flags.cc:1349
#define DECLARE_BUILTIN_ACCESSOR_C(name, ignore)
Definition: builtins.h:303
static const char * GetName(JavaScript id)
Definition: builtins.h:326
#define DEF_ENUM_A(name, kind, state, extra)
Definition: builtins.h:280
#define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra)
Definition: builtins.h:304
static Address c_function_address(CFunctionId id)
Definition: builtins.h:322
uint8_t byte
Definition: globals.h:171
void SetUp(bool create_heap_objects)
Definition: builtins.cc:1597
static int GetArgumentsCount(JavaScript id)
Definition: builtins.h:327
BuiltinExtraArguments
Definition: builtins.h:35
#define DEF_ENUM_C(name, ignore)
Definition: builtins.h:290
#define DISALLOW_COPY_AND_ASSIGN(TypeName)
Definition: globals.h:321
const Register pc
Address builtin_address(Name name)
Definition: builtins.h:318
static int NumberOfJavaScriptBuiltins()
Definition: builtins.h:329
const char * Lookup(byte *pc)
Definition: builtins.cc:1679
#define BUILTIN_LIST_DEBUG_A(V)
Definition: builtins.h:221
Handle< Code > GetCode(JavaScript id, bool *resolved)
void IterateBuiltins(ObjectVisitor *v)
Definition: builtins.cc:1674
#define BUILTIN_LIST_C(V)
Definition: builtins.h:42
#define BUILTIN_LIST_A(V)
Definition: builtins.h:66