builtins.h 22.1 KB
Newer Older
danno@chromium.org's avatar
danno@chromium.org committed
1
// Copyright 2011 the V8 project authors. All rights reserved.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
//     * Redistributions of source code must retain the above copyright
//       notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above
//       copyright notice, this list of conditions and the following
//       disclaimer in the documentation and/or other materials provided
//       with the distribution.
//     * Neither the name of Google Inc. nor the names of its
//       contributors may be used to endorse or promote products derived
//       from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#ifndef V8_BUILTINS_H_
#define V8_BUILTINS_H_

31 32
namespace v8 {
namespace internal {
33

34 35 36 37 38 39 40
// Specifies extra arguments required by a C++ builtin.
enum BuiltinExtraArguments {
  NO_EXTRA_ARGUMENTS = 0,
  NEEDS_CALLED_FUNCTION = 1
};


41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
#define CODE_AGE_LIST_WITH_ARG(V, A)     \
  V(Quadragenarian, A)                   \
  V(Quinquagenarian, A)                  \
  V(Sexagenarian, A)                     \
  V(Septuagenarian, A)                   \
  V(Octogenarian, A)

#define CODE_AGE_LIST_IGNORE_ARG(X, V) V(X)

#define CODE_AGE_LIST(V) \
  CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V)

#define DECLARE_CODE_AGE_BUILTIN(C, V)             \
  V(Make##C##CodeYoungAgainOddMarking, BUILTIN,    \
    UNINITIALIZED, Code::kNoExtraICState)          \
  V(Make##C##CodeYoungAgainEvenMarking, BUILTIN,   \
    UNINITIALIZED, Code::kNoExtraICState)


60 61 62 63 64 65
// Define list of builtins implemented in C++.
#define BUILTIN_LIST_C(V)                                           \
  V(Illegal, NO_EXTRA_ARGUMENTS)                                    \
                                                                    \
  V(EmptyFunction, NO_EXTRA_ARGUMENTS)                              \
                                                                    \
66
  V(InternalArrayCodeGeneric, NO_EXTRA_ARGUMENTS)                   \
67 68 69 70
  V(ArrayCodeGeneric, NO_EXTRA_ARGUMENTS)                           \
                                                                    \
  V(ArrayPush, NO_EXTRA_ARGUMENTS)                                  \
  V(ArrayPop, NO_EXTRA_ARGUMENTS)                                   \
71
  V(ArrayShift, NO_EXTRA_ARGUMENTS)                                 \
72
  V(ArrayUnshift, NO_EXTRA_ARGUMENTS)                               \
73
  V(ArraySlice, NO_EXTRA_ARGUMENTS)                                 \
74
  V(ArraySplice, NO_EXTRA_ARGUMENTS)                                \
75
  V(ArrayConcat, NO_EXTRA_ARGUMENTS)                                \
76 77 78 79
                                                                    \
  V(HandleApiCall, NEEDS_CALLED_FUNCTION)                           \
  V(HandleApiCallConstruct, NEEDS_CALLED_FUNCTION)                  \
  V(HandleApiCallAsFunction, NO_EXTRA_ARGUMENTS)                    \
80 81
  V(HandleApiCallAsConstructor, NO_EXTRA_ARGUMENTS)                 \
                                                                    \
82
  V(StrictModePoisonPill, NO_EXTRA_ARGUMENTS)
83 84

// Define list of builtins implemented in assembly.
danno@chromium.org's avatar
danno@chromium.org committed
85 86 87
#define BUILTIN_LIST_A(V)                                               \
  V(ArgumentsAdaptorTrampoline,     BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
88 89
  V(InRecompileQueue,               BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
90 91
  V(InstallRecompiledCode,          BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
danno@chromium.org's avatar
danno@chromium.org committed
92 93 94 95 96 97 98 99 100 101 102 103 104 105
  V(JSConstructStubCountdown,       BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(JSConstructStubGeneric,         BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(JSConstructStubApi,             BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(JSEntryTrampoline,              BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(JSConstructEntryTrampoline,     BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(LazyCompile,                    BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(LazyRecompile,                  BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
106 107
  V(ParallelRecompile,              BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
danno@chromium.org's avatar
danno@chromium.org committed
108 109
  V(NotifyDeoptimized,              BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
110 111
  V(NotifySoftDeoptimized,          BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
danno@chromium.org's avatar
danno@chromium.org committed
112 113
  V(NotifyLazyDeoptimized,          BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
114
  V(NotifyStubFailure,              BUILTIN, UNINITIALIZED,             \
115
                                    Code::kNoExtraICState)              \
danno@chromium.org's avatar
danno@chromium.org committed
116 117 118 119 120 121 122 123 124 125 126 127 128
  V(NotifyOSR,                      BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
                                                                        \
  V(LoadIC_Miss,                    BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(KeyedLoadIC_Miss,               BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(KeyedLoadIC_MissForceGeneric,   BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(KeyedLoadIC_Slow,               BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(StoreIC_Miss,                   BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
129 130
  V(StoreIC_Slow,                   BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
danno@chromium.org's avatar
danno@chromium.org committed
131 132 133 134 135 136 137 138 139 140 141
  V(KeyedStoreIC_Miss,              BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(KeyedStoreIC_MissForceGeneric,  BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(KeyedStoreIC_Slow,              BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(LoadIC_Initialize,              LOAD_IC, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(LoadIC_PreMonomorphic,          LOAD_IC, PREMONOMORPHIC,            \
                                    Code::kNoExtraICState)              \
  V(LoadIC_Normal,                  LOAD_IC, MONOMORPHIC,               \
142
                                    Code::kNoExtraICState)              \
danno@chromium.org's avatar
danno@chromium.org committed
143
  V(LoadIC_Megamorphic,             LOAD_IC, MEGAMORPHIC,               \
144 145
                                    Code::kNoExtraICState)              \
  V(LoadIC_Getter_ForDeopt,         LOAD_IC, MONOMORPHIC,               \
146 147
                                    Code::kNoExtraICState)              \
  V(LoadIC_Slow,                    LOAD_IC, GENERIC,                   \
danno@chromium.org's avatar
danno@chromium.org committed
148 149 150 151 152 153
                                    Code::kNoExtraICState)              \
                                                                        \
  V(KeyedLoadIC_Initialize,         KEYED_LOAD_IC, UNINITIALIZED,       \
                                    Code::kNoExtraICState)              \
  V(KeyedLoadIC_PreMonomorphic,     KEYED_LOAD_IC, PREMONOMORPHIC,      \
                                    Code::kNoExtraICState)              \
154
  V(KeyedLoadIC_Generic,            KEYED_LOAD_IC, GENERIC,             \
danno@chromium.org's avatar
danno@chromium.org committed
155
                                    Code::kNoExtraICState)              \
156
  V(KeyedLoadIC_String,             KEYED_LOAD_IC, MEGAMORPHIC,         \
danno@chromium.org's avatar
danno@chromium.org committed
157
                                    Code::kNoExtraICState)              \
158
  V(KeyedLoadIC_IndexedInterceptor, KEYED_LOAD_IC, MONOMORPHIC,         \
159
                                    Code::kNoExtraICState)              \
160
  V(KeyedLoadIC_NonStrictArguments, KEYED_LOAD_IC, MONOMORPHIC,         \
danno@chromium.org's avatar
danno@chromium.org committed
161 162 163 164 165 166 167 168
                                    Code::kNoExtraICState)              \
                                                                        \
  V(StoreIC_Initialize,             STORE_IC, UNINITIALIZED,            \
                                    Code::kNoExtraICState)              \
  V(StoreIC_Normal,                 STORE_IC, MONOMORPHIC,              \
                                    Code::kNoExtraICState)              \
  V(StoreIC_Megamorphic,            STORE_IC, MEGAMORPHIC,              \
                                    Code::kNoExtraICState)              \
169 170 171 172
  V(StoreIC_Generic,                STORE_IC, GENERIC,                  \
                                    Code::kNoExtraICState)              \
  V(StoreIC_Generic_Strict,         STORE_IC, GENERIC,                  \
                                    kStrictMode)                        \
173
  V(StoreIC_GlobalProxy,            STORE_IC, GENERIC,                  \
danno@chromium.org's avatar
danno@chromium.org committed
174 175 176 177 178 179 180
                                    Code::kNoExtraICState)              \
  V(StoreIC_Initialize_Strict,      STORE_IC, UNINITIALIZED,            \
                                    kStrictMode)                        \
  V(StoreIC_Normal_Strict,          STORE_IC, MONOMORPHIC,              \
                                    kStrictMode)                        \
  V(StoreIC_Megamorphic_Strict,     STORE_IC, MEGAMORPHIC,              \
                                    kStrictMode)                        \
181
  V(StoreIC_GlobalProxy_Strict,     STORE_IC, GENERIC,                  \
182 183
                                    kStrictMode)                        \
  V(StoreIC_Setter_ForDeopt,        STORE_IC, MONOMORPHIC,              \
danno@chromium.org's avatar
danno@chromium.org committed
184 185 186 187
                                    kStrictMode)                        \
                                                                        \
  V(KeyedStoreIC_Initialize,        KEYED_STORE_IC, UNINITIALIZED,      \
                                    Code::kNoExtraICState)              \
188
  V(KeyedStoreIC_Generic,           KEYED_STORE_IC, GENERIC,            \
danno@chromium.org's avatar
danno@chromium.org committed
189 190 191 192
                                    Code::kNoExtraICState)              \
                                                                        \
  V(KeyedStoreIC_Initialize_Strict, KEYED_STORE_IC, UNINITIALIZED,      \
                                    kStrictMode)                        \
193
  V(KeyedStoreIC_Generic_Strict,    KEYED_STORE_IC, GENERIC,            \
danno@chromium.org's avatar
danno@chromium.org committed
194
                                    kStrictMode)                        \
195
  V(KeyedStoreIC_NonStrictArguments, KEYED_STORE_IC, MONOMORPHIC,       \
196
                                     Code::kNoExtraICState)             \
197 198 199 200
  V(TransitionElementsSmiToDouble,  BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(TransitionElementsDoubleToObject, BUILTIN, UNINITIALIZED,           \
                                      Code::kNoExtraICState)            \
danno@chromium.org's avatar
danno@chromium.org committed
201 202 203 204 205 206 207
                                                                        \
  /* Uses KeyedLoadIC_Initialize; must be after in list. */             \
  V(FunctionCall,                   BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
  V(FunctionApply,                  BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
                                                                        \
208 209
  V(InternalArrayCode,              BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
danno@chromium.org's avatar
danno@chromium.org committed
210 211
  V(ArrayCode,                      BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
212
  V(CommonArrayConstructCode,       BUILTIN, UNINITIALIZED,             \
danno@chromium.org's avatar
danno@chromium.org committed
213 214 215 216 217 218
                                    Code::kNoExtraICState)              \
                                                                        \
  V(StringConstructCode,            BUILTIN, UNINITIALIZED,             \
                                    Code::kNoExtraICState)              \
                                                                        \
  V(OnStackReplacement,             BUILTIN, UNINITIALIZED,             \
219 220
                                    Code::kNoExtraICState)              \
  CODE_AGE_LIST_WITH_ARG(DECLARE_CODE_AGE_BUILTIN, V)
221

222
#ifdef ENABLE_DEBUGGER_SUPPORT
223
// Define list of builtins used by the debugger implemented in assembly.
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
#define BUILTIN_LIST_DEBUG_A(V)                                               \
  V(Return_DebugBreak,                         BUILTIN, DEBUG_STUB,           \
                                               DEBUG_BREAK)                   \
  V(CallFunctionStub_DebugBreak,               BUILTIN, DEBUG_STUB,           \
                                               DEBUG_BREAK)                   \
  V(CallFunctionStub_Recording_DebugBreak,     BUILTIN, DEBUG_STUB,           \
                                               DEBUG_BREAK)                   \
  V(CallConstructStub_DebugBreak,              BUILTIN, DEBUG_STUB,           \
                                               DEBUG_BREAK)                   \
  V(CallConstructStub_Recording_DebugBreak,    BUILTIN, DEBUG_STUB,           \
                                               DEBUG_BREAK)                   \
  V(LoadIC_DebugBreak,                         LOAD_IC, DEBUG_STUB,           \
                                               DEBUG_BREAK)                   \
  V(KeyedLoadIC_DebugBreak,                    KEYED_LOAD_IC, DEBUG_STUB,     \
                                               DEBUG_BREAK)                   \
  V(StoreIC_DebugBreak,                        STORE_IC, DEBUG_STUB,          \
                                               DEBUG_BREAK)                   \
  V(KeyedStoreIC_DebugBreak,                   KEYED_STORE_IC, DEBUG_STUB,    \
                                               DEBUG_BREAK)                   \
243 244
  V(CompareNilIC_DebugBreak,                   COMPARE_NIL_IC, DEBUG_STUB,    \
                                               DEBUG_BREAK)                   \
245 246 247 248 249 250
  V(Slot_DebugBreak,                           BUILTIN, DEBUG_STUB,           \
                                               DEBUG_BREAK)                   \
  V(PlainReturn_LiveEdit,                      BUILTIN, DEBUG_STUB,           \
                                               DEBUG_BREAK)                   \
  V(FrameDropper_LiveEdit,                     BUILTIN, DEBUG_STUB,           \
                                               DEBUG_BREAK)
251 252 253
#else
#define BUILTIN_LIST_DEBUG_A(V)
#endif
254

255
// Define list of builtins implemented in JavaScript.
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
#define BUILTINS_LIST_JS(V)              \
  V(EQUALS, 1)                           \
  V(STRICT_EQUALS, 1)                    \
  V(COMPARE, 2)                          \
  V(ADD, 1)                              \
  V(SUB, 1)                              \
  V(MUL, 1)                              \
  V(DIV, 1)                              \
  V(MOD, 1)                              \
  V(BIT_OR, 1)                           \
  V(BIT_AND, 1)                          \
  V(BIT_XOR, 1)                          \
  V(UNARY_MINUS, 0)                      \
  V(BIT_NOT, 0)                          \
  V(SHL, 1)                              \
  V(SAR, 1)                              \
  V(SHR, 1)                              \
273
  V(DELETE, 2)                           \
274 275 276 277 278
  V(IN, 1)                               \
  V(INSTANCE_OF, 1)                      \
  V(FILTER_KEY, 1)                       \
  V(CALL_NON_FUNCTION, 0)                \
  V(CALL_NON_FUNCTION_AS_CONSTRUCTOR, 0) \
279 280
  V(CALL_FUNCTION_PROXY, 1)                \
  V(CALL_FUNCTION_PROXY_AS_CONSTRUCTOR, 1) \
281 282 283 284 285 286
  V(TO_OBJECT, 0)                        \
  V(TO_NUMBER, 0)                        \
  V(TO_STRING, 0)                        \
  V(STRING_ADD_LEFT, 1)                  \
  V(STRING_ADD_RIGHT, 1)                 \
  V(APPLY_PREPARE, 1)                    \
287
  V(APPLY_OVERFLOW, 1)
288

289
class BuiltinFunctionTable;
290 291 292
class ObjectVisitor;


293
class Builtins {
294
 public:
295 296
  ~Builtins();

297
  // Generate all builtin code objects. Should be called once during
298
  // isolate initialization.
299
  void SetUp(bool create_heap_objects);
300
  void TearDown();
301 302

  // Garbage collection support.
303
  void IterateBuiltins(ObjectVisitor* v);
304 305

  // Disassembler support.
306
  const char* Lookup(byte* pc);
307 308

  enum Name {
309 310
#define DEF_ENUM_C(name, ignore) k##name,
#define DEF_ENUM_A(name, kind, state, extra) k##name,
311 312
    BUILTIN_LIST_C(DEF_ENUM_C)
    BUILTIN_LIST_A(DEF_ENUM_A)
313
    BUILTIN_LIST_DEBUG_A(DEF_ENUM_A)
314 315 316 317 318 319
#undef DEF_ENUM_C
#undef DEF_ENUM_A
    builtin_count
  };

  enum CFunctionId {
320
#define DEF_ENUM_C(name, ignore) c_##name,
321 322 323 324 325 326 327 328 329 330 331 332
    BUILTIN_LIST_C(DEF_ENUM_C)
#undef DEF_ENUM_C
    cfunction_count
  };

  enum JavaScript {
#define DEF_ENUM(name, ignore) name,
    BUILTINS_LIST_JS(DEF_ENUM)
#undef DEF_ENUM
    id_count
  };

333 334 335 336 337 338 339 340 341
#define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle<Code> name();
#define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \
  Handle<Code> name();
  BUILTIN_LIST_C(DECLARE_BUILTIN_ACCESSOR_C)
  BUILTIN_LIST_A(DECLARE_BUILTIN_ACCESSOR_A)
  BUILTIN_LIST_DEBUG_A(DECLARE_BUILTIN_ACCESSOR_A)
#undef DECLARE_BUILTIN_ACCESSOR_C
#undef DECLARE_BUILTIN_ACCESSOR_A

342
  Code* builtin(Name name) {
343 344 345 346 347
    // Code::cast cannot be used here since we access builtins
    // during the marking phase of mark sweep. See IC::Clear.
    return reinterpret_cast<Code*>(builtins_[name]);
  }

348
  Address builtin_address(Name name) {
349 350 351 352 353 354 355 356 357
    return reinterpret_cast<Address>(&builtins_[name]);
  }

  static Address c_function_address(CFunctionId id) {
    return c_functions_[id];
  }

  static const char* GetName(JavaScript id) { return javascript_names_[id]; }
  static int GetArgumentsCount(JavaScript id) { return javascript_argc_[id]; }
358
  Handle<Code> GetCode(JavaScript id, bool* resolved);
359 360
  static int NumberOfJavaScriptBuiltins() { return id_count; }

361 362
  bool is_initialized() const { return initialized_; }

363
 private:
364 365
  Builtins();

366
  // The external C++ functions called from the code.
367
  static Address const c_functions_[cfunction_count];
368 369 370 371

  // Note: These are always Code objects, but to conform with
  // IterateBuiltins() above which assumes Object**'s for the callback
  // function f, we use an Object* array here.
372 373 374 375
  Object* builtins_[builtin_count];
  const char* names_[builtin_count];
  static const char* const javascript_names_[id_count];
  static int const javascript_argc_[id_count];
376

377 378 379
  static void Generate_Adaptor(MacroAssembler* masm,
                               CFunctionId id,
                               BuiltinExtraArguments extra_args);
380
  static void Generate_InRecompileQueue(MacroAssembler* masm);
381
  static void Generate_InstallRecompiledCode(MacroAssembler* masm);
382
  static void Generate_ParallelRecompile(MacroAssembler* masm);
383
  static void Generate_JSConstructStubCountdown(MacroAssembler* masm);
384
  static void Generate_JSConstructStubGeneric(MacroAssembler* masm);
385
  static void Generate_JSConstructStubApi(MacroAssembler* masm);
386 387
  static void Generate_JSEntryTrampoline(MacroAssembler* masm);
  static void Generate_JSConstructEntryTrampoline(MacroAssembler* masm);
388
  static void Generate_LazyCompile(MacroAssembler* masm);
389 390
  static void Generate_LazyRecompile(MacroAssembler* masm);
  static void Generate_NotifyDeoptimized(MacroAssembler* masm);
391
  static void Generate_NotifySoftDeoptimized(MacroAssembler* masm);
392 393
  static void Generate_NotifyLazyDeoptimized(MacroAssembler* masm);
  static void Generate_NotifyOSR(MacroAssembler* masm);
394
  static void Generate_NotifyStubFailure(MacroAssembler* masm);
395
  static void Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm);
396 397

  static void Generate_FunctionCall(MacroAssembler* masm);
398
  static void Generate_FunctionApply(MacroAssembler* masm);
399

400
  static void Generate_InternalArrayCode(MacroAssembler* masm);
401
  static void Generate_ArrayCode(MacroAssembler* masm);
402
  static void Generate_CommonArrayConstructCode(MacroAssembler* masm);
403 404

  static void Generate_StringConstructCode(MacroAssembler* masm);
405
  static void Generate_OnStackReplacement(MacroAssembler* masm);
406

407 408 409 410 411 412 413 414
#define DECLARE_CODE_AGE_BUILTIN_GENERATOR(C)                \
  static void Generate_Make##C##CodeYoungAgainEvenMarking(   \
      MacroAssembler* masm);                                 \
  static void Generate_Make##C##CodeYoungAgainOddMarking(    \
      MacroAssembler* masm);
  CODE_AGE_LIST(DECLARE_CODE_AGE_BUILTIN_GENERATOR)
#undef DECLARE_CODE_AGE_BUILTIN_GENERATOR

415 416 417 418 419 420 421 422
  static void InitBuiltinFunctionTable();

  bool initialized_;

  friend class BuiltinFunctionTable;
  friend class Isolate;

  DISALLOW_COPY_AND_ASSIGN(Builtins);
423 424 425 426 427
};

} }  // namespace v8::internal

#endif  // V8_BUILTINS_H_