1fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org// Copyright 2012 the V8 project authors. All rights reserved.
2b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// Redistribution and use in source and binary forms, with or without
3b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// modification, are permitted provided that the following conditions are
4b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// met:
5b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//
6b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//     * Redistributions of source code must retain the above copyright
7b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//       notice, this list of conditions and the following disclaimer.
8b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//     * Redistributions in binary form must reproduce the above
9b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//       copyright notice, this list of conditions and the following
10b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//       disclaimer in the documentation and/or other materials provided
11b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//       with the distribution.
12b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//     * Neither the name of Google Inc. nor the names of its
13b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//       contributors may be used to endorse or promote products derived
14b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//       from this software without specific prior written permission.
15b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//
16b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
28b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// This file defines all of the flags.  It is separated into different section,
29b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// for Debug, Release, Logging and Profiling, etc.  To add a new flag, find the
30b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// correct section, and use one of the DEFINE_ macros, without a trailing ';'.
31b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//
32b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// This include does not have a guard, because it is a template-style include,
33b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// which can be included multiple times in different modes.  It expects to have
34b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// a mode defined before it's included.  The modes are FLAG_MODE_... below:
35b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
36b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// We want to declare the names of the variables for the header file.  Normally
37b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// this will just be an extern declaration, but for a readonly flag we let the
38b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// compiler make better optimizations by giving it the value.
39b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#if defined(FLAG_MODE_DECLARE)
40b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG_FULL(ftype, ctype, nam, def, cmt) \
41b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org  extern ctype FLAG_##nam;
42b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG_READONLY(ftype, ctype, nam, def, cmt) \
43b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org  static ctype const FLAG_##nam = def;
447ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org#define DEFINE_implication(whenflag, thenflag)
45b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
46b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// We want to supply the actual storage and value for the flag variable in the
47b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// .cc file.  We only do this for writable flags.
48b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#elif defined(FLAG_MODE_DEFINE)
49b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG_FULL(ftype, ctype, nam, def, cmt) \
50b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org  ctype FLAG_##nam = def;
51b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG_READONLY(ftype, ctype, nam, def, cmt)
527ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org#define DEFINE_implication(whenflag, thenflag)
53b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
54b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// We need to define all of our default values so that the Flag structure can
55b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// access them by pointer.  These are just used internally inside of one .cc,
56b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// for MODE_META, so there is no impact on the flags interface.
57b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#elif defined(FLAG_MODE_DEFINE_DEFAULTS)
58b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG_FULL(ftype, ctype, nam, def, cmt) \
59b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org  static ctype const FLAGDEFAULT_##nam = def;
60b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG_READONLY(ftype, ctype, nam, def, cmt)
617ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org#define DEFINE_implication(whenflag, thenflag)
62b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
63b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// We want to write entries into our meta data table, for internal parsing and
64b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// printing / etc in the flag parser code.  We only do this for writable flags.
65b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#elif defined(FLAG_MODE_META)
66b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG_FULL(ftype, ctype, nam, def, cmt) \
6741826e77311db718135ef6517b846933dfd275f3ager@chromium.org  { Flag::TYPE_##ftype, #nam, &FLAG_##nam, &FLAGDEFAULT_##nam, cmt, false },
68b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG_READONLY(ftype, ctype, nam, def, cmt)
697ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org#define DEFINE_implication(whenflag, thenflag)
707ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org
717ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org// We produce the code to set flags when it is implied by another flag.
727ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org#elif defined(FLAG_MODE_DEFINE_IMPLICATIONS)
737ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org#define FLAG_FULL(ftype, ctype, nam, def, cmt)
747ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org#define FLAG_READONLY(ftype, ctype, nam, def, cmt)
757ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org#define DEFINE_implication(whenflag, thenflag) \
767ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org  if (FLAG_##whenflag) FLAG_##thenflag = true;
77b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
78b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#else
79b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#error No mode supplied when including flags.defs
80b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#endif
81b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
823bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.org#ifdef FLAG_MODE_DECLARE
833bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.org// Structure used to hold a collection of arguments to the JavaScript code.
841456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org#define JSARGUMENTS_INIT {{}}
853bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.orgstruct JSArguments {
863bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.orgpublic:
871456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  inline int argc() const {
881456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    return static_cast<int>(storage_[0]);
891456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  }
901456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  inline const char** argv() const {
911456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    return reinterpret_cast<const char**>(storage_[1]);
921456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  }
931456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  inline const char*& operator[] (int idx) const {
941456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    return argv()[idx];
951456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  }
961456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  inline JSArguments& operator=(JSArguments args) {
971456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    set_argc(args.argc());
981456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    set_argv(args.argv());
991456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    return *this;
1001456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  }
1011456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  static JSArguments Create(int argc, const char** argv) {
1021456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    JSArguments args;
1031456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    args.set_argc(argc);
1041456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    args.set_argv(argv);
1051456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    return args;
1061456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  }
1073bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.orgprivate:
1081456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  void set_argc(int argc) {
1091456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    storage_[0] = argc;
1101456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  }
1111456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  void set_argv(const char** argv) {
1121456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org    storage_[1] = reinterpret_cast<AtomicWord>(argv);
1131456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  }
1141456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgpublic:
1151456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  // Contains argc and argv. Unfortunately we have to store these two fields
1161456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  // into a single one to avoid making the initialization macro (which would be
1171456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  // "{ 0, NULL }") contain a coma.
1181456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org  AtomicWord storage_[2];
1193bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.org};
1203bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.org#endif
1213bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.org
122e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#if (defined CAN_USE_VFP3_INSTRUCTIONS) || !(defined ARM_TEST)
123e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# define ENABLE_VFP3_DEFAULT true
124e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#else
125e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# define ENABLE_VFP3_DEFAULT false
126e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif
127e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#if (defined CAN_USE_ARMV7_INSTRUCTIONS) || !(defined ARM_TEST)
128e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# define ENABLE_ARMV7_DEFAULT true
129e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#else
130e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# define ENABLE_ARMV7_DEFAULT false
131e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif
132e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#if (defined CAN_USE_VFP32DREGS) || !(defined ARM_TEST)
133e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# define ENABLE_32DREGS_DEFAULT true
134e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#else
135e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org# define ENABLE_32DREGS_DEFAULT false
136e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org#endif
137e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org
138b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define DEFINE_bool(nam, def, cmt) FLAG(BOOL, bool, nam, def, cmt)
139b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define DEFINE_int(nam, def, cmt) FLAG(INT, int, nam, def, cmt)
140b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define DEFINE_float(nam, def, cmt) FLAG(FLOAT, double, nam, def, cmt)
141b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define DEFINE_string(nam, def, cmt) FLAG(STRING, const char*, nam, def, cmt)
1423bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.org#define DEFINE_args(nam, def, cmt) FLAG(ARGS, JSArguments, nam, def, cmt)
143b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
144b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//
145b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// Flags in all modes.
146b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//
147b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG FLAG_FULL
148b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
149f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org// Flags for language modes and experimental language features.
150f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgDEFINE_bool(use_strict, false, "enforce strict mode")
15178502a9310f9ff7ecb5377453c4e16d091c93676jkummerow@chromium.orgDEFINE_bool(es5_readonly, true,
1527028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org            "activate correct semantics for inheriting readonliness")
153657d53b99cb4d261f8245bcb4248c39eb0a2b10frossberg@chromium.orgDEFINE_bool(es52_globals, true,
15488d326b0935b802e71e3a75e02f31fae8c2af96cmstarzinger@chromium.org            "activate new semantics for global var declarations")
155f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org
1564acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.orgDEFINE_bool(harmony_typeof, false, "enable harmony semantics for typeof")
157b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.orgDEFINE_bool(harmony_scoping, false, "enable harmony block scoping")
158f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgDEFINE_bool(harmony_modules, false,
159f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org            "enable harmony modules (implies block scoping)")
1604a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgDEFINE_bool(harmony_symbols, false,
1614a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org            "enable harmony symbols (a.k.a. private names)")
162160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.orgDEFINE_bool(harmony_proxies, false, "enable harmony proxies")
163394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comDEFINE_bool(harmony_collections, false,
164394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com            "enable harmony collections (sets, maps, and weak maps)")
165e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.orgDEFINE_bool(harmony_observation, false,
16672204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org            "enable harmony object observation (implies harmony collections")
167f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgDEFINE_bool(harmony_typed_arrays, false,
168f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org            "enable harmony typed arrays")
16957ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgDEFINE_bool(harmony_array_buffer, false,
17057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org            "enable harmony array buffer")
17157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgDEFINE_implication(harmony_typed_arrays, harmony_array_buffer)
172f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgDEFINE_bool(harmony_generators, false, "enable harmony generators")
1731fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgDEFINE_bool(harmony_iteration, false, "enable harmony iteration (for-of)")
174ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgDEFINE_bool(harmony_numeric_literals, false,
175ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org            "enable harmony numeric literals (0o77, 0b11)")
176d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgDEFINE_bool(harmony_strings, false, "enable harmony string")
177594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgDEFINE_bool(harmony_arrays, false, "enable harmony arrays")
178fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.orgDEFINE_bool(harmony, false, "enable all harmony features (except typeof)")
1797ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.orgDEFINE_implication(harmony, harmony_scoping)
18078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgDEFINE_implication(harmony, harmony_modules)
1814a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgDEFINE_implication(harmony, harmony_symbols)
1827ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.orgDEFINE_implication(harmony, harmony_proxies)
1837ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.orgDEFINE_implication(harmony, harmony_collections)
184e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.orgDEFINE_implication(harmony, harmony_observation)
18541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgDEFINE_implication(harmony, harmony_generators)
1861fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgDEFINE_implication(harmony, harmony_iteration)
187ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgDEFINE_implication(harmony, harmony_numeric_literals)
188d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgDEFINE_implication(harmony, harmony_strings)
189594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgDEFINE_implication(harmony, harmony_arrays)
190f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgDEFINE_implication(harmony_modules, harmony_scoping)
191e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.orgDEFINE_implication(harmony_observation, harmony_collections)
192f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org// TODO[dslomov] add harmony => harmony_typed_arrays
193160a7b0747492f3f735353d9582521f3314bf4dfdanno@chromium.org
1946d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org// Flags for experimental implementation features.
195304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.orgDEFINE_bool(packed_arrays, true, "optimizes arrays that have no holes")
196f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgDEFINE_bool(smi_only_arrays, true, "tracks arrays with only smi values")
197e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgDEFINE_bool(compiled_keyed_stores, true, "use optimizing compiler to "
1987bd87f0fe09b5d7c12de8f1db0bdb759dc4130acjkummerow@chromium.org            "generate keyed store stubs")
199b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.orgDEFINE_bool(clever_optimizations,
200b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org            true,
201b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org            "Optimize object size, Array shift, DOM strings and string +")
202a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgDEFINE_bool(pretenuring, true, "allocate objects in old space")
20310480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org// TODO(hpayer): We will remove this flag as soon as we have pretenuring
20410480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.org// support for specific allocation sites.
20510480471c0db59c51c15e57d2a3489551d61b273jkummerow@chromium.orgDEFINE_bool(pretenuring_call_new, false, "pretenure call new")
206906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.orgDEFINE_bool(track_fields, true, "track fields with only smi values")
207bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.orgDEFINE_bool(track_double_fields, true, "track fields with double values")
208906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.orgDEFINE_bool(track_heap_object_fields, true, "track fields with heap values")
2091fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgDEFINE_bool(track_computed_fields, true, "track computed boilerplate fields")
210f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgDEFINE_implication(track_double_fields, track_fields)
211906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.orgDEFINE_implication(track_heap_object_fields, track_fields)
2121fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgDEFINE_implication(track_computed_fields, track_fields)
213fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgDEFINE_bool(smi_binop, true, "support smi representation in binary operations")
2146d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org
215fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org// Flags for data representation optimizations
216fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.orgDEFINE_bool(unbox_double_arrays, true, "automatically unbox arrays of doubles")
217fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.orgDEFINE_bool(string_slices, true, "use string slices")
218fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org
219a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// Flags for Crankshaft.
220c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgDEFINE_bool(crankshaft, true, "use crankshaft")
221ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgDEFINE_string(hydrogen_filter, "*", "optimization filter")
222a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(use_range, true, "use hydrogen range analysis")
223a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(use_gvn, true, "use hydrogen global value numbering")
224a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(use_canonicalizing, true, "use hydrogen instruction canonicalizing")
225a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(use_inlining, true, "use function inlining")
22693a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.orgDEFINE_bool(use_escape_analysis, false, "use hydrogen escape analysis")
227169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.orgDEFINE_bool(use_allocation_folding, true, "use allocation folding")
228ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgDEFINE_int(max_inlining_levels, 5, "maximum number of inlining levels")
22988d326b0935b802e71e3a75e02f31fae8c2af96cmstarzinger@chromium.orgDEFINE_int(max_inlined_source_size, 600,
23088d326b0935b802e71e3a75e02f31fae8c2af96cmstarzinger@chromium.org           "maximum source size in bytes considered for a single inlining")
23188d326b0935b802e71e3a75e02f31fae8c2af96cmstarzinger@chromium.orgDEFINE_int(max_inlined_nodes, 196,
23288d326b0935b802e71e3a75e02f31fae8c2af96cmstarzinger@chromium.org           "maximum number of AST nodes considered for a single inlining")
233ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgDEFINE_int(max_inlined_nodes_cumulative, 400,
23488d326b0935b802e71e3a75e02f31fae8c2af96cmstarzinger@chromium.org           "maximum cumulative number of AST nodes considered for inlining")
235a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(loop_invariant_code_motion, true, "loop invariant code motion")
2361f34ad3eadf9b0e6b8ed415817d276f54dd6d06bdanno@chromium.orgDEFINE_bool(fast_math, true, "faster (but maybe less accurate) math functions")
2370ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryDEFINE_bool(collect_megamorphic_maps_from_stub_cache,
2380ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry            true,
2390ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry            "crankshaft harvests type feedback from stub cache")
240b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.orgDEFINE_bool(hydrogen_stats, false, "print statistics for hydrogen")
241a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(trace_hydrogen, false, "trace generated hydrogen to file")
242fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgDEFINE_bool(trace_hydrogen_stubs, false, "trace generated hydrogen for stubs")
243fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgDEFINE_string(trace_hydrogen_file, NULL, "trace hydrogen to given file name")
244fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgDEFINE_string(trace_phase, "HLZ", "trace generated IR for specified phases")
245a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(trace_inlining, false, "trace inlining decisions")
246a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(trace_alloc, false, "trace register allocator")
2473a5fd78f0ca6c2827bb05f69a373d152a9ce6ff3fschneider@chromium.orgDEFINE_bool(trace_all_uses, false, "trace all use positions")
248a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(trace_range, false, "trace range analysis")
249a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(trace_gvn, false, "trace global value numbering")
250a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(trace_representation, false, "trace representation types")
25193a47f4837f2137c8d8349250fd8e91da3108126jkummerow@chromium.orgDEFINE_bool(trace_escape_analysis, false, "trace hydrogen escape analysis")
252169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.orgDEFINE_bool(trace_allocation_folding, false, "trace allocation folding")
25346a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.orgDEFINE_bool(trace_track_allocation_sites, false,
25446a2a51ad190697e0f62c3060ce02a9de5820a07yangguo@chromium.org            "trace the tracking of allocation sites")
25557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgDEFINE_bool(trace_migration, false, "trace object migration")
25657ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgDEFINE_bool(trace_generalization, false, "trace map generalization")
257a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(stress_pointer_maps, false, "pointer map for every instruction")
258a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(stress_environments, false, "environment for every instruction")
259a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_int(deopt_every_n_times,
260a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org           0,
261a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org           "deoptimize every n times a deopt point is passed")
26232d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.orgDEFINE_int(deopt_every_n_garbage_collections,
26332d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org           0,
26432d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org           "deoptimize every n garbage collections")
265ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgDEFINE_bool(print_deopt_stress, false, "print number of possible deopt points")
266a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(trap_on_deopt, false, "put a break point before deoptimizing")
267594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgDEFINE_bool(trap_on_stub_deopt, false,
268594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org            "put a break point before deoptimizing a stub")
269a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(deoptimize_uncommon_cases, true, "deoptimize uncommon cases")
270a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(polymorphic_inlining, true, "polymorphic inlining")
271a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(use_osr, true, "use on-stack replacement")
27256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.orgDEFINE_bool(array_bounds_checks_elimination, true,
273efdb9d70bddd496ceb6a281dadcc065efbce37a1yangguo@chromium.org            "perform array bounds checks elimination")
274fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgDEFINE_bool(array_bounds_checks_hoisting, false,
275fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org            "perform array bounds checks hoisting")
27656c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.orgDEFINE_bool(array_index_dehoisting, true,
2770e3f88bd850f46930aa95684377fab02a394ae41ulan@chromium.org            "perform array index dehoisting")
278d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.orgDEFINE_bool(analyze_environment_liveness, true,
279d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.org            "analyze liveness of environment slots and zap dead values")
280c1956679bbba3170352a8cc735e8218f9dbe6867jkummerow@chromium.orgDEFINE_bool(dead_code_elimination, true, "use dead code elimination")
2812e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgDEFINE_bool(fold_constants, true, "use constant folding")
282c1956679bbba3170352a8cc735e8218f9dbe6867jkummerow@chromium.orgDEFINE_bool(trace_dead_code_elimination, false, "trace dead code elimination")
28328381b491d5ea9f256a3937000de7953639ef93fyangguo@chromium.orgDEFINE_bool(unreachable_code_elimination, false,
28428381b491d5ea9f256a3937000de7953639ef93fyangguo@chromium.org            "eliminate unreachable code (hidden behind soft deopts)")
28559297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgDEFINE_bool(track_allocation_sites, true,
28659297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org            "Use allocation site info to reduce transitions")
287a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(trace_osr, false, "trace on-stack replacement")
2885f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.orgDEFINE_int(stress_runs, 0, "number of stress runs")
289c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.orgDEFINE_bool(optimize_closures, true, "optimize closures")
2905a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.orgDEFINE_bool(lookup_sample_by_shared, true,
2915a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org            "when picking a function to optimize, watch for shared function "
2925a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org            "info, not JSFunction itself")
293d9e468a431d0d87cf3e9898459410eedb1ea9e9aulan@chromium.orgDEFINE_bool(cache_optimized_code, true,
2945a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org            "cache optimized code for closures")
2954e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.orgDEFINE_bool(flush_optimized_code_cache, true,
2964e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.org            "flushes the cache of optimized code for closures on every GC")
2972c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.orgDEFINE_bool(inline_construct, true, "inline constructor calls")
298154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.orgDEFINE_bool(inline_arguments, true, "inline functions with arguments object")
299de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.orgDEFINE_bool(inline_accessors, true, "inline JavaScript accessors")
300fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.orgDEFINE_int(loop_weight, 1, "loop weight for representation inference")
301a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
302967e270a034432457500dbf950d2c4951a929e52ulan@chromium.orgDEFINE_bool(optimize_for_in, true,
303a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org            "optimize functions containing for-in loops")
30446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgDEFINE_bool(opt_safe_uint32_operations, true,
305fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org            "allow uint32 values on optimize frames if they are used only in "
30646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org            "safe operations")
307a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org
3081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgDEFINE_bool(parallel_recompilation, true,
309304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org            "optimizing hot functions asynchronously on a separate thread")
310304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.orgDEFINE_bool(trace_parallel_recompilation, false, "track parallel recompilation")
3111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgDEFINE_int(parallel_recompilation_queue_length, 8,
312304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org           "the length of the parallel compilation queue")
313750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgDEFINE_int(parallel_recompilation_delay, 0,
314750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org           "artificial compilation delay in ms")
315c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.orgDEFINE_bool(omit_map_checks_for_leaf_maps, true,
316c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            "do not emit check maps for constant values that have a leaf map, "
317c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org            "deoptimize the optimized code if the layout of the maps changes.")
318304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org
31978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org// Experimental profiler changes.
320531dfe85209e15c3e292569c285a5be54910da7cjkummerow@chromium.orgDEFINE_bool(experimental_profiler, true, "enable all profiler experiments")
32178d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgDEFINE_bool(watch_ic_patching, false, "profiler considers IC stability")
3224efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgDEFINE_int(frame_count, 1, "number of stack frames inspected by the profiler")
32378d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgDEFINE_bool(self_optimization, false,
32478d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org            "primitive functions trigger their own optimization")
3254efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgDEFINE_bool(direct_self_opt, false,
3264efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org            "call recompile stub directly when self-optimizing")
3274efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgDEFINE_bool(retry_self_opt, false, "re-try self-optimization if it failed")
328be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.orgDEFINE_bool(interrupt_at_exit, false,
329be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.org            "insert an interrupt check at function exit")
33056454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.orgDEFINE_bool(weighted_back_edges, false,
33156454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.org            "weight back edges by jump distance for interrupt triggering")
332471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org           // 0x1700 fits in the immediate field of an ARM instruction.
333471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.orgDEFINE_int(interrupt_budget, 0x1700,
33456454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.org           "execution budget before interrupt is triggered")
335fee992bb82f8bc64bb35d7133567a2f6d2671b64jkummerow@chromium.orgDEFINE_int(type_info_threshold, 25,
336f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org           "percentage of ICs that must have type info to allow optimization")
3374efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgDEFINE_int(self_opt_count, 130, "call count before self-optimization")
33878d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org
33978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgDEFINE_implication(experimental_profiler, watch_ic_patching)
34078d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgDEFINE_implication(experimental_profiler, self_optimization)
3414efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org// Not implying direct_self_opt here because it seems to be a bad idea.
3424efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgDEFINE_implication(experimental_profiler, retry_self_opt)
343be6bd10d8264b7a05e0a04407eb98b253bc0f152kmillikin@chromium.orgDEFINE_implication(experimental_profiler, interrupt_at_exit)
34456454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.orgDEFINE_implication(experimental_profiler, weighted_back_edges)
34578d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org
346f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgDEFINE_bool(trace_opt_verbose, false, "extra verbose compilation tracing")
347f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.orgDEFINE_implication(trace_opt_verbose, trace_opt)
348f7a588466d1e61e14fec951e5f10c7cec501b3b4jkummerow@chromium.org
3499d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com// assembler-ia32.cc / assembler-arm.cc / assembler-x64.cc
350b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(debug_code, false,
351a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org            "generate extra code (assertions) for debugging")
352a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(code_comments, false, "emit comments in code disassembly")
3539d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comDEFINE_bool(enable_sse2, true,
3549d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com            "enable use of SSE2 instructions if available")
3559d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comDEFINE_bool(enable_sse3, true,
3569d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com            "enable use of SSE3 instructions if available")
357f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.orgDEFINE_bool(enable_sse4_1, true,
358f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.org            "enable use of SSE4.1 instructions if available")
3599d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comDEFINE_bool(enable_cmov, true,
3609d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com            "enable use of CMOV instruction if available")
3619d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comDEFINE_bool(enable_rdtsc, true,
3629d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com            "enable use of RDTSC instruction if available")
3639d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comDEFINE_bool(enable_sahf, true,
3649d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com            "enable use of SAHF instruction if available (X64 only)")
365e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgDEFINE_bool(enable_vfp3, ENABLE_VFP3_DEFAULT,
366e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            "enable use of VFP3 instructions if available")
367e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgDEFINE_bool(enable_armv7, ENABLE_ARMV7_DEFAULT,
3685c838251403b0be9a882540f1922577abba4c872ager@chromium.org            "enable use of ARMv7 instructions if available (ARM only)")
369169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.orgDEFINE_bool(enable_neon, true,
370169691d93a961c8b511f8ac8fd8ee33d081ca10fdanno@chromium.org            "enable use of NEON instructions if available (ARM only)")
37133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgDEFINE_bool(enable_sudiv, true,
37233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org            "enable use of SDIV and UDIV instructions if available (ARM only)")
37389e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.orgDEFINE_bool(enable_movw_movt, false,
37489e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org            "enable loading 32-bit constant by means of movw/movt "
37589e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org            "instruction pairs (ARM only)")
37689e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.orgDEFINE_bool(enable_unaligned_accesses, true,
37789e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org            "enable unaligned accesses for ARMv7 (ARM only)")
378e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgDEFINE_bool(enable_32dregs, ENABLE_32DREGS_DEFAULT,
379003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org            "enable use of d16-d31 registers on ARM - this requires VFP3")
3804cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.orgDEFINE_bool(enable_vldr_imm, false,
3814cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.org            "enable use of constant pools for double immediate (ARM only)")
382b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
383b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// bootstrapper.cc
384c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgDEFINE_bool(enable_i18n, true, "enable i18n extension")
385b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_string(expose_natives_as, NULL, "expose natives in global object")
386b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_string(expose_debug_as, NULL, "expose debug in global object")
387b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(expose_gc, false, "expose gc extension")
38832d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.orgDEFINE_string(expose_gc_as,
38932d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org              NULL,
39032d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.org              "expose gc extension under the specified name")
39132d7dbafe29be06cec1edd36c31fbe2865c799f4ulan@chromium.orgDEFINE_implication(expose_gc_as, expose_gc)
3925ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.orgDEFINE_bool(expose_externalize_string, false,
3935ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.org            "expose externalize string extension")
39486f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.orgDEFINE_int(stack_trace_limit, 10, "number of stack frames to capture")
395394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comDEFINE_bool(builtins_in_stack_traces, false,
396394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com            "show built-in functions in stack traces")
3975d8f0e6e7b477f422e3064bdf0dd5f2a23f75544kmillikin@chromium.orgDEFINE_bool(disable_native_files, false, "disable builtin natives files")
398b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
399b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// builtins-ia32.cc
400b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(inline_new, true, "use fast inline allocation")
401b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
402b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// checks.cc
403b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(stack_trace_on_abort, true,
404b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "print a stack trace if an assertion failure occurs")
405b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
406b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// codegen-ia32.cc / codegen-arm.cc
407a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgDEFINE_bool(trace_codegen, false,
408a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org            "print name of functions for which code is generated")
409b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(trace, false, "trace function calls")
410e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.orgDEFINE_bool(mask_constants_with_cookie,
411e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org            true,
412e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org            "use random jit cookie to mask large constants")
413b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
414b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// codegen.cc
415b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(lazy, true, "use lazy compilation")
416a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(trace_opt, false, "trace lazy optimization")
4175f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.orgDEFINE_bool(trace_opt_stats, false, "trace lazy optimization statistics")
418a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(opt, true, "use adaptive optimizations")
419a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(always_opt, false, "always try to optimize functions")
4201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgDEFINE_bool(always_osr, false, "always try to OSR functions")
421a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(prepare_always_opt, false, "prepare for turning on always opt")
4222f0efdebb142c00de6950453b4c2df20ceb8df6emmassi@chromium.orgDEFINE_bool(trace_deopt, false, "trace optimize function deoptimization")
4232f0efdebb142c00de6950453b4c2df20ceb8df6emmassi@chromium.orgDEFINE_bool(trace_stub_failures, false,
4242f0efdebb142c00de6950453b4c2df20ceb8df6emmassi@chromium.org            "trace deoptimization of generated code stubs")
425b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
426b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// compiler.cc
427b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_int(min_preparse_length, 1024,
4289d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com           "minimum length for automatic enable preparsing")
429b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgDEFINE_bool(always_full_compiler, false,
430b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org            "try to use the dedicated run-once backend for all code")
431de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.orgDEFINE_int(max_opt_count, 10,
432de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org           "maximum number of optimization attempts before giving up.")
433b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
43471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org// compilation-cache.cc
43571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgDEFINE_bool(compilation_cache, true, "enable compilation cache")
43671affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org
4373847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.comDEFINE_bool(cache_prototype_transitions, true, "cache prototype transitions")
4383847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com
439b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// debug.cc
440b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(trace_debug_json, false, "trace debugging JSON request/response")
4417c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgDEFINE_bool(trace_js_array_abuse, false,
4427c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org            "trace out-of-bounds accesses to JS arrays")
4437c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgDEFINE_bool(trace_external_array_abuse, false,
4447c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org            "trace out-of-bounds-accesses to external arrays")
4457c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgDEFINE_bool(trace_array_abuse, false,
4467c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org            "trace out-of-bounds accesses to all arrays")
4477c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgDEFINE_implication(trace_array_abuse, trace_js_array_abuse)
4487c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgDEFINE_implication(trace_array_abuse, trace_external_array_abuse)
449ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.orgDEFINE_bool(debugger_auto_break, true,
450bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org            "automatically set the debug break flag when debugger commands are "
451ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org            "in the queue")
452ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orgDEFINE_bool(enable_liveedit, true, "enable liveedit experimental feature")
4532c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.orgDEFINE_bool(break_on_abort, true, "always cause a debug break before aborting")
454b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
455496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org// execution.cc
4567d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org// Slightly less than 1MB on 64-bit, since Windows' default stack size for
4577d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org// the main execution thread is 1MB for both 32 and 64-bit.
4587d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.orgDEFINE_int(stack_size, kPointerSize * 123,
459fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org           "default size of stack region v8 is allowed to use (in kBytes)")
460496c03a64f12710e837204e261ef155601247895sgjesse@chromium.org
461b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// frames.cc
462b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_int(max_stack_trace_source_length, 300,
463b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org           "maximum length of function source code printed in a stack trace.")
464b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
465d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com// full-codegen.cc
466d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.comDEFINE_bool(always_inline_smi_code, false,
467d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com            "always inline smi code in non-opt code")
468d88afa260e45de10e729b05a20146184a488aff7erik.corry@gmail.com
469b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// heap.cc
470f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.orgDEFINE_int(max_new_space_size, 0, "max size of the new generation (in kBytes)")
471f05f2913e034b9332e55c02c9395e701725c02c1kmillikin@chromium.orgDEFINE_int(max_old_space_size, 0, "max size of the old generation (in Mbytes)")
47201fe7df37ce9858e3d0069ec6a2d7c667256b95aager@chromium.orgDEFINE_int(max_executable_size, 0, "max size of executable memory (in Mbytes)")
473b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(gc_global, false, "always perform global GCs")
474b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_int(gc_interval, -1, "garbage collect after <n> allocations")
475b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(trace_gc, false,
476b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "print one trace line following each garbage collection")
4779dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.comDEFINE_bool(trace_gc_nvp, false,
4789dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com            "print one detailed trace line in name=value format "
4799dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com            "after each garbage collection")
480471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.orgDEFINE_bool(trace_gc_ignore_scavenger, false,
481471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org            "do not print trace line after scavenger collection")
4829dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.comDEFINE_bool(print_cumulative_gc_stat, false,
4839dfbea4c7d423c7bc1db94425cb78e7f7cf41f78erik.corry@gmail.com            "print cumulative GC statistics in name=value format on exit")
484e959c18cf7193e2f021245584a3c8f1f32f82c92kasperl@chromium.orgDEFINE_bool(trace_gc_verbose, false,
485e959c18cf7193e2f021245584a3c8f1f32f82c92kasperl@chromium.org            "print more details following each garbage collection")
486c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comDEFINE_bool(trace_fragmentation, false,
487c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com            "report fragmentation for old pointer and data pages")
488471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.orgDEFINE_bool(trace_external_memory, false,
489471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org            "print amount of external allocated memory after each time "
490471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org            "it is adjusted.")
4917be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDEFINE_bool(collect_maps, true,
4929bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.org            "garbage collect maps from which no objects can be reached")
493c1789eecd43bf9c5497636592bf14fa754d04c89machenbach@chromium.orgDEFINE_bool(weak_embedded_maps_in_optimized_code, true,
494068ea0a6ea115c058d1d9798029bd7fa1eaaa955mstarzinger@chromium.org            "make maps embedded in optimized code weak")
4955ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.orgDEFINE_bool(flush_code, true,
496e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org            "flush code that we expect not to use again (during full gc)")
49749a44674c6935d62c3e776dfbf896b7f6f34228ammassi@chromium.orgDEFINE_bool(flush_code_incrementally, true,
498e4ee6de0de64744d55b63da83156827c989c7099verwaest@chromium.org            "flush code that we expect not to use again (incrementally)")
4994e308cf00936c6e7bead43e5141a04e37b49b9b5jkummerow@chromium.orgDEFINE_bool(trace_code_flushing, false, "trace code flushing progress")
50083130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.orgDEFINE_bool(age_code, true,
501e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org            "track un-executed functions to age code and flush only "
5021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            "old code (required for code flushing)")
503c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comDEFINE_bool(incremental_marking, true, "use incremental marking")
504c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comDEFINE_bool(incremental_marking_steps, true, "do incremental marking steps")
505c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comDEFINE_bool(trace_incremental_marking, false,
506c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com            "trace progress of the incremental marking")
50728583c92ca8f528df625800519088ac88996d504jkummerow@chromium.orgDEFINE_bool(track_gc_object_stats, false,
50828583c92ca8f528df625800519088ac88996d504jkummerow@chromium.org            "track object counts and memory usage")
5097c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgDEFINE_bool(parallel_sweeping, true, "enable parallel sweeping")
510e3b8d0fe80e858c990832db1233c069f8b8cd5c9mstarzinger@chromium.orgDEFINE_bool(concurrent_sweeping, false, "enable concurrent sweeping")
5118432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.orgDEFINE_int(sweeper_threads, 0,
512e3b8d0fe80e858c990832db1233c069f8b8cd5c9mstarzinger@chromium.org           "number of parallel and concurrent sweeping threads")
513e3b8d0fe80e858c990832db1233c069f8b8cd5c9mstarzinger@chromium.orgDEFINE_bool(parallel_marking, false, "enable parallel marking")
5148432c9102e4b2125d8eec741d35237cf23167471hpayer@chromium.orgDEFINE_int(marking_threads, 0, "number of parallel marking threads")
515c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org#ifdef VERIFY_HEAP
516c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.orgDEFINE_bool(verify_heap, false, "verify heap pointers before and after GC")
517c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org#endif
518b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
519add848f7b25aaacf2ebb523696c074d8be15e215ager@chromium.org// v8.cc
520add848f7b25aaacf2ebb523696c074d8be15e215ager@chromium.orgDEFINE_bool(use_idle_notification, true,
521add848f7b25aaacf2ebb523696c074d8be15e215ager@chromium.org            "Use idle notification to reduce memory footprint.")
522b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// ic.cc
523b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(use_ic, true, "use inline caching")
524b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
525b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// macro-assembler-ia32.cc
526b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(native_code_counters, false,
527b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "generate extra code for manipulating stats counters")
528b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
529b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// mark-compact.cc
530b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(always_compact, false, "Perform compaction on every full GC")
531c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comDEFINE_bool(lazy_sweeping, true,
532c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com            "Use lazy sweeping for old pointer and data spaces")
533b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(never_compact, false,
534b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "Never perform compaction on full GC - testing only")
53578d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.orgDEFINE_bool(compact_code_space, true,
536ab7dad4f999df008b590c74c2fe3d2e2c67ef7ffjkummerow@chromium.org            "Compact code space on full non-incremental collections")
53756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.orgDEFINE_bool(incremental_code_compaction, true,
53856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org            "Compact code space on full incremental collections")
539ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.orgDEFINE_bool(cleanup_code_caches_at_gc, true,
540ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org            "Flush inline caches prior to mark compact collection and "
541ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org            "flush code caches in maps during mark compact cycle.")
5428e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.orgDEFINE_bool(use_marking_progress_bar, true,
543fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org            "Use a progress bar to scan large objects in increments when "
544fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org            "incremental marking is active.")
545df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.orgDEFINE_int(random_seed, 0,
546df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org           "Default seed for initializing random generator "
547df7a284a293865a5fa9390be2e8f82ba3ac8598asgjesse@chromium.org           "(0, the default, means to use system random).")
548b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
549023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org// objects.cc
550023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.orgDEFINE_bool(use_verbose_printer, true, "allows verbose printing")
551023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org
552b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// parser.cc
553b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(allow_natives_syntax, false, "allow natives syntax")
554304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.orgDEFINE_bool(trace_parse, false, "trace parsing and preparsing")
555b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
5565c838251403b0be9a882540f1922577abba4c872ager@chromium.org// simulator-arm.cc and simulator-mips.cc
557c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.orgDEFINE_bool(trace_sim, false, "Trace simulator execution")
558c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgDEFINE_bool(check_icache, false,
559c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org            "Check icache flushes in ARM and MIPS simulator")
560b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_int(stop_sim_at, 0, "Simulator stop after x number of instructions")
561c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.orgDEFINE_int(sim_stack_alignment, 8,
562c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org           "Stack alingment in bytes in simulator (4 or 8, 8 is default)")
563b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
5647304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org// isolate.cc
565e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgDEFINE_bool(abort_on_uncaught_exception, false,
566e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org            "abort program (dump core) when an uncaught exception is thrown")
567b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(trace_exception, false,
568b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "print stack trace when throwing exceptions")
569b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(preallocate_message_memory, false,
570b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "preallocate some memory to build stack traces.")
571f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.comDEFINE_bool(randomize_hashes,
572fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org            true,
573f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com            "randomize hashes to avoid predictable hash collisions "
574fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org            "(with snapshots this option cannot override the baked-in seed)")
575f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.comDEFINE_int(hash_seed,
576fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org           0,
577f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com           "Fixed seed to use to hash property keys (0 means random)"
578fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org           "(with snapshots this option cannot override the baked-in seed)")
579b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
580b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// v8.cc
581b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(preemption, false,
582b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "activate a 100ms timer that switches between V8 threads")
583b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
584381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org// Regexp
585381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.orgDEFINE_bool(regexp_optimization, true, "generate optimized regexp code")
586a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
587b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// Testing flags test/cctest/test-{flags,api,serialization}.cc
588b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(testing_bool_flag, true, "testing_bool_flag")
589b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_int(testing_int_flag, 13, "testing_int_flag")
590b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_float(testing_float_flag, 2.5, "float-flag")
591b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_string(testing_string_flag, "Hello, world!", "string-flag")
592b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_int(testing_prng_seed, 42, "Seed used for threading test randomness")
593b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#ifdef WIN32
594b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_string(testing_serialization_file, "C:\\Windows\\Temp\\serdes",
595b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org              "file in which to testing_serialize heap")
596b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#else
597b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_string(testing_serialization_file, "/tmp/serdes",
598b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org              "file in which to serialize heap")
599b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#endif
600b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
6015a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org// mksnapshot.cc
6025a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.orgDEFINE_string(extra_code, NULL, "A filename with extra code to be included in"
6035a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org                  " the snapshot (mksnapshot only)")
6045a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org
6055a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org//
6065a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org// Dev shell flags
6075a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org//
608b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
6093bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.orgDEFINE_bool(help, false, "Print usage message, including flags, on console")
6105a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgDEFINE_bool(dump_counters, false, "Dump counters on exit")
611c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
612c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com#ifdef ENABLE_DEBUGGER_SUPPORT
6132356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.orgDEFINE_bool(debugger, false, "Enable JavaScript debugger")
6147be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDEFINE_bool(remote_debugger, false, "Connect JavaScript debugger to the "
6157be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org                                    "debugger agent in another process")
6167be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDEFINE_bool(debugger_agent, false, "Enable debugger agent")
6177be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDEFINE_int(debugger_port, 5858, "Port to use for remote debugging")
618c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com#endif  // ENABLE_DEBUGGER_SUPPORT
619c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com
6209ee27ae43ab88e9bb6417ff9e27af64e0cf13729ager@chromium.orgDEFINE_string(map_counters, "", "Map counters to a file")
6211456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgDEFINE_args(js_arguments, JSARGUMENTS_INIT,
6223bf7b91c90e9bff46f53eec55055d2d1a1949215ager@chromium.org            "Pass all remaining arguments to the script. Alias for \"--\".")
623b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
624d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org#if defined(WEBOS__)
625d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDEFINE_bool(debug_compile_events, false, "Enable debugger compile events")
626d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDEFINE_bool(debug_script_collected_events, false,
627d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org            "Enable debugger script collected events")
628d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org#else
629d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDEFINE_bool(debug_compile_events, true, "Enable debugger compile events")
630d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgDEFINE_bool(debug_script_collected_events, true,
631d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org            "Enable debugger script collected events")
632d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org#endif
633d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org
6340511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
6350511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com//
6360511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com// GDB JIT integration flags.
6370511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com//
6380511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
6390511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.comDEFINE_bool(gdbjit, false, "enable GDBJIT interface (disables compacting GC)")
6400511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.comDEFINE_bool(gdbjit_full, false, "enable GDBJIT interface for all code objects")
64149edbdf52640c88918f8e6638ab4965819eb1dfekmillikin@chromium.orgDEFINE_bool(gdbjit_dump, false, "dump elf objects with debug info to disk")
6424f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.orgDEFINE_string(gdbjit_dump_filter, "",
6434f693d6b99ffdbc05e5e211e08ed5039e13279d2ricow@chromium.org              "dump only objects containing this substring")
6440511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com
645b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org// mark-compact.cc
646b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.orgDEFINE_bool(force_marking_deque_overflows, false,
647b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org            "force overflows of marking deque by reducing it's size "
648b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org            "to 64 words")
649b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org
650b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.orgDEFINE_bool(stress_compaction, false,
651b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org            "stress the GC compactor to flush out bugs (implies "
652b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org            "--force_marking_deque_overflows)")
653b4b2aa69a9f12525fca190287f47a66d7bdcb3aerossberg@chromium.org
654b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//
655b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// Debug only flags
656b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//
657b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#undef FLAG
658b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#ifdef DEBUG
659b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG FLAG_FULL
660b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#else
661b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG FLAG_READONLY
662b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#endif
663b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
664b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// checks.cc
665b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(enable_slow_asserts, false,
666b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "enable asserts that are slow to execute")
667b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
668b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// codegen-ia32.cc / codegen-arm.cc
669b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(print_source, false, "pretty print source code")
670b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(print_builtin_source, false,
671b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "pretty print source code for builtins")
672b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(print_ast, false, "print source AST")
673b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(print_builtin_ast, false, "print source AST for builtins")
674b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_string(stop_at, "", "function name where to insert a breakpoint")
675b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
676b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// compiler.cc
677b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(print_builtin_scopes, false, "print scopes for builtins")
678b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(print_scopes, false, "print scopes")
679b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
680b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// contexts.cc
681b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(trace_contexts, false, "trace contexts operations")
682b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
683b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// heap.cc
684b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(gc_greedy, false, "perform GC prior to some allocations")
685b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(gc_verbose, false, "print stuff during garbage collection")
686b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(heap_stats, false, "report heap statistics before and after GC")
687b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(code_stats, false, "report code statistics after GC")
68846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgDEFINE_bool(verify_native_context_separation, false,
68946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org            "verify that code holds on to at most one native context after GC")
690b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(print_handles, false, "report handles after GC")
691b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(print_global_handles, false, "report global handles after GC")
692b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
693b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// ic.cc
694b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(trace_ic, false, "trace inline cache state transitions")
695b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
696bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com// interface.cc
697bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.comDEFINE_bool(print_interfaces, false, "print interfaces")
698bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.comDEFINE_bool(print_interface_details, false, "print interface inference details")
699bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.comDEFINE_int(print_interface_depth, 5, "depth for printing interfaces")
700bbceb57d27ec53f6d6212e690ead3174192ea3f9erik.corry@gmail.com
701b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// objects.cc
702b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(trace_normalization,
703b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            false,
704b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "prints when objects are turned into dictionaries.")
705b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
706b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// runtime.cc
707b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(trace_lazy, false, "trace lazy compilation")
708b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
709b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// spaces.cc
710b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(collect_heap_spill_statistics, false,
711b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "report heap spill statistics along with heap_stats "
712b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "(requires heap_stats)")
713b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
714ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgDEFINE_bool(trace_isolates, false, "trace isolate state changes")
715ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org
716381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org// Regexp
7170c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.orgDEFINE_bool(regexp_possessive_quantifier,
7180c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org            false,
7190c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org            "enable possessive quantifier syntax for testing")
720381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.orgDEFINE_bool(trace_regexp_bytecodes, false, "trace regexp bytecode execution")
721381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.orgDEFINE_bool(trace_regexp_assembler,
722381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org            false,
723381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.org            "trace regexp macro assembler calls.")
724a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org
725b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//
726030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org// Logging and profiling flags
727b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//
728b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#undef FLAG
729b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG FLAG_FULL
730b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
731b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// log.cc
732b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(log, false,
733b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "Minimal logging (no API, code, GC, suspect, or handles samples).")
734b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(log_all, false, "Log all events to the log file.")
735381abbb58260f2fc7d346d0e2f83d0f132a4c14bager@chromium.orgDEFINE_bool(log_runtime, false, "Activate runtime system %Log call.")
736b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(log_api, false, "Log API events to the log file.")
737b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(log_code, false,
738b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "Log code events to the log file without profiling.")
739b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(log_gc, false,
740b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "Log heap samples on garbage collection for the hp2ps tool.")
741b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(log_handles, false, "Log global handle events.")
742b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgDEFINE_bool(log_snapshot_positions, false,
743b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org            "log positions of (de)serialized objects in the snapshot.")
744b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(log_suspect, false, "Log suspect operations.")
745b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(prof, false,
746b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org            "Log statistical profiling information (implies --log-code).")
74771affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgDEFINE_bool(prof_lazy, false,
74871affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org            "Used with --prof, only does sampling and logging"
749d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org            " when profiler is active.")
750357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.orgDEFINE_bool(prof_browser_mode, true,
751357bf65ed5309ac3a2c4bf20b6ce7770488787c2ager@chromium.org            "Used with --prof, turns on browser-compatible mode for profiling.")
752b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(log_regexp, false, "Log regular expression execution.")
753b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_string(logfile, "v8.log", "Specify the name of the log file.")
7544a5224e84636d192e82f288bfab0d308bdae5c37whesse@chromium.orgDEFINE_bool(ll_prof, false, "Enable low-level linux profiler.")
755de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.orgDEFINE_string(gc_fake_mmap, "/tmp/__v8_gc__",
756de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org              "Specify the name of the file for fake gc mmap used in ll_prof")
75732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgDEFINE_bool(log_internal_timer_events, false, "Time internal events.")
75832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgDEFINE_bool(log_timer_events, false,
75932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org            "Time events including external callbacks.")
76032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgDEFINE_implication(log_timer_events, log_internal_timer_events)
761ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.orgDEFINE_implication(log_internal_timer_events, prof)
7625a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org
763f5aa83707f1db5aecb22f6c3bfd5042f629d5fcfkasperl@chromium.org//
764b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// Disassembler only flags
765b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org//
766b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#undef FLAG
767b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#ifdef ENABLE_DISASSEMBLER
768b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG FLAG_FULL
769b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#else
770b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#define FLAG FLAG_READONLY
771b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#endif
772b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
773394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com// elements.cc
774394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comDEFINE_bool(trace_elements_transitions, false, "trace elements transitions")
775394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com
7767be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org// code-stubs.cc
7777be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgDEFINE_bool(print_code_stubs, false, "print code stubs")
778812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgDEFINE_bool(test_secondary_stub_cache,
779812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org            false,
780812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org            "test secondary stub cache by disabling the primary one")
781812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org
782812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.orgDEFINE_bool(test_primary_stub_cache,
783812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org            false,
784812308e1488cd8261e4dbbda1d8022642d522b9bulan@chromium.org            "test primary stub cache by disabling the secondary one")
7857be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org
786b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// codegen-ia32.cc / codegen-arm.cc
787b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgDEFINE_bool(print_code, false, "print generated code")
788a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(print_opt_code, false, "print optimized code")
789023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.orgDEFINE_bool(print_unopt_code, false, "print unoptimized code before "
790023421e6892b2ba6dcd2bbee117e0bfb24545cf7whesse@chromium.org            "printing optimized code based on it")
791a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgDEFINE_bool(print_code_verbose, false, "print more information for code")
7928bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgDEFINE_bool(print_builtin_code, false, "print generated code for builtins")
793b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
7947ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org#ifdef ENABLE_DISASSEMBLER
7957ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.orgDEFINE_bool(print_all_code, false, "enable all flags related to printing code")
7967ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.orgDEFINE_implication(print_all_code, print_code)
7977ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.orgDEFINE_implication(print_all_code, print_opt_code)
7987ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.orgDEFINE_implication(print_all_code, print_unopt_code)
7997ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.orgDEFINE_implication(print_all_code, print_code_verbose)
8007ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.orgDEFINE_implication(print_all_code, print_builtin_code)
8017ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.orgDEFINE_implication(print_all_code, print_code_stubs)
8027ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.orgDEFINE_implication(print_all_code, code_comments)
803bf0c820d028452571c8c744ddd212c32c6d6a996danno@chromium.org#ifdef DEBUG
804bf0c820d028452571c8c744ddd212c32c6d6a996danno@chromium.orgDEFINE_implication(print_all_code, trace_codegen)
805bf0c820d028452571c8c744ddd212c32c6d6a996danno@chromium.org#endif
8067ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org#endif
8077ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org
808b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org// Cleanup...
809b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#undef FLAG_FULL
810b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#undef FLAG_READONLY
811b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#undef FLAG
812b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
813b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#undef DEFINE_bool
814b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#undef DEFINE_int
815b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#undef DEFINE_string
8167ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org#undef DEFINE_implication
817b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org
818b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#undef FLAG_MODE_DECLARE
819b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#undef FLAG_MODE_DEFINE
820b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#undef FLAG_MODE_DEFINE_DEFAULTS
821b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org#undef FLAG_MODE_META
8227ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org#undef FLAG_MODE_DEFINE_IMPLICATIONS
823