1257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch// Copyright 2011 the V8 project authors. All rights reserved.
2a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Redistribution and use in source and binary forms, with or without
3a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// modification, are permitted provided that the following conditions are
4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// met:
5a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//
6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//     * Redistributions of source code must retain the above copyright
7a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       notice, this list of conditions and the following disclaimer.
8a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//     * Redistributions in binary form must reproduce the above
9a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       copyright notice, this list of conditions and the following
10a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       disclaimer in the documentation and/or other materials provided
11a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       with the distribution.
12a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//     * Neither the name of Google Inc. nor the names of its
13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       contributors may be used to endorse or promote products derived
14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       from this software without specific prior written permission.
15a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//
16a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
28a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#ifndef V8_BUILTINS_H_
29a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#define V8_BUILTINS_H_
30a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
31a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace v8 {
32a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace internal {
33a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
34e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke// Specifies extra arguments required by a C++ builtin.
35e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarkeenum BuiltinExtraArguments {
36e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke  NO_EXTRA_ARGUMENTS = 0,
37e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke  NEEDS_CALLED_FUNCTION = 1
38e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke};
39e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke
40e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke
41e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke// Define list of builtins implemented in C++.
42e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke#define BUILTIN_LIST_C(V)                                           \
43e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke  V(Illegal, NO_EXTRA_ARGUMENTS)                                    \
44e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke                                                                    \
45e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke  V(EmptyFunction, NO_EXTRA_ARGUMENTS)                              \
46e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke                                                                    \
473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(InternalArrayCodeGeneric, NO_EXTRA_ARGUMENTS)                   \
48e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke  V(ArrayCodeGeneric, NO_EXTRA_ARGUMENTS)                           \
49e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke                                                                    \
50e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke  V(ArrayPush, NO_EXTRA_ARGUMENTS)                                  \
51e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke  V(ArrayPop, NO_EXTRA_ARGUMENTS)                                   \
52402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  V(ArrayShift, NO_EXTRA_ARGUMENTS)                                 \
53402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  V(ArrayUnshift, NO_EXTRA_ARGUMENTS)                               \
54402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  V(ArraySlice, NO_EXTRA_ARGUMENTS)                                 \
55402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  V(ArraySplice, NO_EXTRA_ARGUMENTS)                                \
566ded16be15dd865a9b21ea304d5273c8be299c87Steve Block  V(ArrayConcat, NO_EXTRA_ARGUMENTS)                                \
57e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke                                                                    \
58e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke  V(HandleApiCall, NEEDS_CALLED_FUNCTION)                           \
59402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  V(FastHandleApiCall, NO_EXTRA_ARGUMENTS)                          \
60e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke  V(HandleApiCallConstruct, NEEDS_CALLED_FUNCTION)                  \
61e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke  V(HandleApiCallAsFunction, NO_EXTRA_ARGUMENTS)                    \
6244f0eee88ff00398ff7f715fab053374d808c90dSteve Block  V(HandleApiCallAsConstructor, NO_EXTRA_ARGUMENTS)                 \
6344f0eee88ff00398ff7f715fab053374d808c90dSteve Block                                                                    \
64257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(StrictModePoisonPill, NO_EXTRA_ARGUMENTS)
65a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
66a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Define list of builtins implemented in assembly.
67257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch#define BUILTIN_LIST_A(V)                                               \
68257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(ArgumentsAdaptorTrampoline,     BUILTIN, UNINITIALIZED,             \
69257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
70257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(JSConstructStubCountdown,       BUILTIN, UNINITIALIZED,             \
71257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
72257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(JSConstructStubGeneric,         BUILTIN, UNINITIALIZED,             \
73257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
74257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(JSConstructStubApi,             BUILTIN, UNINITIALIZED,             \
75257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
76257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(JSEntryTrampoline,              BUILTIN, UNINITIALIZED,             \
77257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
78257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(JSConstructEntryTrampoline,     BUILTIN, UNINITIALIZED,             \
79257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
80257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(LazyCompile,                    BUILTIN, UNINITIALIZED,             \
81257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
82257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(LazyRecompile,                  BUILTIN, UNINITIALIZED,             \
83257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
84257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(NotifyDeoptimized,              BUILTIN, UNINITIALIZED,             \
85257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
86257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(NotifyLazyDeoptimized,          BUILTIN, UNINITIALIZED,             \
87257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
88257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(NotifyOSR,                      BUILTIN, UNINITIALIZED,             \
89257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
90257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                                                        \
91257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(LoadIC_Miss,                    BUILTIN, UNINITIALIZED,             \
92257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
93257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedLoadIC_Miss,               BUILTIN, UNINITIALIZED,             \
94257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
95257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedLoadIC_MissForceGeneric,   BUILTIN, UNINITIALIZED,             \
96257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
97257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedLoadIC_Slow,               BUILTIN, UNINITIALIZED,             \
98257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
99257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(StoreIC_Miss,                   BUILTIN, UNINITIALIZED,             \
100257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
101257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedStoreIC_Miss,              BUILTIN, UNINITIALIZED,             \
102257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
103257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedStoreIC_MissForceGeneric,  BUILTIN, UNINITIALIZED,             \
104257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
105257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedStoreIC_Slow,              BUILTIN, UNINITIALIZED,             \
106257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
107257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(LoadIC_Initialize,              LOAD_IC, UNINITIALIZED,             \
108257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
109257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(LoadIC_PreMonomorphic,          LOAD_IC, PREMONOMORPHIC,            \
110257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
111257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(LoadIC_Normal,                  LOAD_IC, MONOMORPHIC,               \
112257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
113257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(LoadIC_ArrayLength,             LOAD_IC, MONOMORPHIC,               \
114257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
115257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(LoadIC_StringLength,            LOAD_IC, MONOMORPHIC,               \
116257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
117257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(LoadIC_StringWrapperLength,     LOAD_IC, MONOMORPHIC,               \
118257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
119257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(LoadIC_FunctionPrototype,       LOAD_IC, MONOMORPHIC,               \
120257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
121257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(LoadIC_Megamorphic,             LOAD_IC, MEGAMORPHIC,               \
122257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
123257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                                                        \
124257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedLoadIC_Initialize,         KEYED_LOAD_IC, UNINITIALIZED,       \
125257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
126257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedLoadIC_PreMonomorphic,     KEYED_LOAD_IC, PREMONOMORPHIC,      \
127257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
128257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedLoadIC_Generic,            KEYED_LOAD_IC, MEGAMORPHIC,         \
129257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
130257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedLoadIC_String,             KEYED_LOAD_IC, MEGAMORPHIC,         \
131257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
132257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedLoadIC_IndexedInterceptor, KEYED_LOAD_IC, MEGAMORPHIC,         \
133257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
1343fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  V(KeyedLoadIC_NonStrictArguments, KEYED_LOAD_IC, MEGAMORPHIC,         \
1353fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch                                    Code::kNoExtraICState)              \
136257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                                                        \
137257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(StoreIC_Initialize,             STORE_IC, UNINITIALIZED,            \
138257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
139257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(StoreIC_ArrayLength,            STORE_IC, MONOMORPHIC,              \
140257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
141257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(StoreIC_Normal,                 STORE_IC, MONOMORPHIC,              \
142257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
143257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(StoreIC_Megamorphic,            STORE_IC, MEGAMORPHIC,              \
144257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
145257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(StoreIC_GlobalProxy,            STORE_IC, MEGAMORPHIC,              \
146257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
147257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(StoreIC_Initialize_Strict,      STORE_IC, UNINITIALIZED,            \
148257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    kStrictMode)                        \
149257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(StoreIC_ArrayLength_Strict,     STORE_IC, MONOMORPHIC,              \
150257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    kStrictMode)                        \
151257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(StoreIC_Normal_Strict,          STORE_IC, MONOMORPHIC,              \
152257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    kStrictMode)                        \
153257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(StoreIC_Megamorphic_Strict,     STORE_IC, MEGAMORPHIC,              \
154257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    kStrictMode)                        \
155257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(StoreIC_GlobalProxy_Strict,     STORE_IC, MEGAMORPHIC,              \
156257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    kStrictMode)                        \
157257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                                                        \
158257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedStoreIC_Initialize,        KEYED_STORE_IC, UNINITIALIZED,      \
159257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
160257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedStoreIC_Generic,           KEYED_STORE_IC, MEGAMORPHIC,        \
161257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
162257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                                                        \
163257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedStoreIC_Initialize_Strict, KEYED_STORE_IC, UNINITIALIZED,      \
164257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    kStrictMode)                        \
165257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(KeyedStoreIC_Generic_Strict,    KEYED_STORE_IC, MEGAMORPHIC,        \
166257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    kStrictMode)                        \
1673fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  V(KeyedStoreIC_NonStrictArguments, KEYED_STORE_IC, MEGAMORPHIC,       \
1683fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch                                     Code::kNoExtraICState)             \
1693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(TransitionElementsSmiToDouble,  BUILTIN, UNINITIALIZED,             \
1703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                    Code::kNoExtraICState)              \
1713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(TransitionElementsDoubleToObject, BUILTIN, UNINITIALIZED,           \
1723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                      Code::kNoExtraICState)            \
173257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                                                        \
174257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  /* Uses KeyedLoadIC_Initialize; must be after in list. */             \
175257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(FunctionCall,                   BUILTIN, UNINITIALIZED,             \
176257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
177257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(FunctionApply,                  BUILTIN, UNINITIALIZED,             \
178257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
179257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                                                        \
1803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(InternalArrayCode,              BUILTIN, UNINITIALIZED,             \
1813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                    Code::kNoExtraICState)              \
182257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(ArrayCode,                      BUILTIN, UNINITIALIZED,             \
183257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
184257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(ArrayConstructCode,             BUILTIN, UNINITIALIZED,             \
185257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
186257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                                                        \
187257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(StringConstructCode,            BUILTIN, UNINITIALIZED,             \
188257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                    Code::kNoExtraICState)              \
189257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch                                                                        \
190257744e915dfc84d6d07a6b2accf8402d9ffc708Ben Murdoch  V(OnStackReplacement,             BUILTIN, UNINITIALIZED,             \
191e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch                                    Code::kNoExtraICState)
19280d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen
193a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
194a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#ifdef ENABLE_DEBUGGER_SUPPORT
195a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Define list of builtins used by the debugger implemented in assembly.
1963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch#define BUILTIN_LIST_DEBUG_A(V)                                 \
1973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(Return_DebugBreak,                         BUILTIN, DEBUG_BREAK,          \
1983ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                               Code::kNoExtraICState)         \
1993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(CallFunctionStub_DebugBreak,               BUILTIN, DEBUG_BREAK,          \
2003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                               Code::kNoExtraICState)         \
2013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(CallFunctionStub_Recording_DebugBreak,     BUILTIN, DEBUG_BREAK,          \
2023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                               Code::kNoExtraICState)         \
2033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(CallConstructStub_DebugBreak,              BUILTIN, DEBUG_BREAK,          \
2043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                               Code::kNoExtraICState)         \
2053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(CallConstructStub_Recording_DebugBreak,    BUILTIN, DEBUG_BREAK,          \
2063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                               Code::kNoExtraICState)         \
2073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(LoadIC_DebugBreak,                         LOAD_IC, DEBUG_BREAK,          \
2083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                               Code::kNoExtraICState)         \
2093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(KeyedLoadIC_DebugBreak,                    KEYED_LOAD_IC, DEBUG_BREAK,    \
2103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                               Code::kNoExtraICState)         \
2113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(StoreIC_DebugBreak,                        STORE_IC, DEBUG_BREAK,         \
2123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                               Code::kNoExtraICState)         \
2133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(KeyedStoreIC_DebugBreak,                   KEYED_STORE_IC, DEBUG_BREAK,   \
2143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                               Code::kNoExtraICState)         \
2153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(Slot_DebugBreak,                           BUILTIN, DEBUG_BREAK,          \
2163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                               Code::kNoExtraICState)         \
2173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(PlainReturn_LiveEdit,                      BUILTIN, DEBUG_BREAK,          \
2183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                               Code::kNoExtraICState)         \
2193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  V(FrameDropper_LiveEdit,                     BUILTIN, DEBUG_BREAK,          \
2203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch                                               Code::kNoExtraICState)
221a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#else
222a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#define BUILTIN_LIST_DEBUG_A(V)
223a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#endif
224a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
225a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Define list of builtins implemented in JavaScript.
226a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#define BUILTINS_LIST_JS(V)              \
227a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(EQUALS, 1)                           \
228a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(STRICT_EQUALS, 1)                    \
229a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(COMPARE, 2)                          \
230a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(ADD, 1)                              \
231a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(SUB, 1)                              \
232a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(MUL, 1)                              \
233a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(DIV, 1)                              \
234a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(MOD, 1)                              \
235a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(BIT_OR, 1)                           \
236a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(BIT_AND, 1)                          \
237a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(BIT_XOR, 1)                          \
238a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(UNARY_MINUS, 0)                      \
239a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(BIT_NOT, 0)                          \
240a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(SHL, 1)                              \
241a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(SAR, 1)                              \
242a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(SHR, 1)                              \
243e0cee9b3ed82e2391fd85d118aeaa4ea361c687dBen Murdoch  V(DELETE, 2)                           \
244a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(IN, 1)                               \
245a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(INSTANCE_OF, 1)                      \
246a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(FILTER_KEY, 1)                       \
247a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(CALL_NON_FUNCTION, 0)                \
248a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(CALL_NON_FUNCTION_AS_CONSTRUCTOR, 0) \
249589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  V(CALL_FUNCTION_PROXY, 1)                \
250589d6979ff2ef66fca2d8fa51404c369ca5e9250Ben Murdoch  V(CALL_FUNCTION_PROXY_AS_CONSTRUCTOR, 1) \
251a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(TO_OBJECT, 0)                        \
252a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(TO_NUMBER, 0)                        \
253a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(TO_STRING, 0)                        \
254a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(STRING_ADD_LEFT, 1)                  \
255a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(STRING_ADD_RIGHT, 1)                 \
256a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  V(APPLY_PREPARE, 1)                    \
2576ded16be15dd865a9b21ea304d5273c8be299c87Steve Block  V(APPLY_OVERFLOW, 1)
258a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
259a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
26044f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass BuiltinFunctionTable;
261a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockclass ObjectVisitor;
262a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
263a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
26444f0eee88ff00398ff7f715fab053374d808c90dSteve Blockclass Builtins {
265a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block public:
26644f0eee88ff00398ff7f715fab053374d808c90dSteve Block  ~Builtins();
26744f0eee88ff00398ff7f715fab053374d808c90dSteve Block
268a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // Generate all builtin code objects. Should be called once during
26944f0eee88ff00398ff7f715fab053374d808c90dSteve Block  // isolate initialization.
2703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  void SetUp(bool create_heap_objects);
27144f0eee88ff00398ff7f715fab053374d808c90dSteve Block  void TearDown();
272a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
273a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // Garbage collection support.
27444f0eee88ff00398ff7f715fab053374d808c90dSteve Block  void IterateBuiltins(ObjectVisitor* v);
275a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
276a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // Disassembler support.
27744f0eee88ff00398ff7f715fab053374d808c90dSteve Block  const char* Lookup(byte* pc);
278a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
279a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  enum Name {
28044f0eee88ff00398ff7f715fab053374d808c90dSteve Block#define DEF_ENUM_C(name, ignore) k##name,
28144f0eee88ff00398ff7f715fab053374d808c90dSteve Block#define DEF_ENUM_A(name, kind, state, extra) k##name,
282a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    BUILTIN_LIST_C(DEF_ENUM_C)
283a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    BUILTIN_LIST_A(DEF_ENUM_A)
284a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    BUILTIN_LIST_DEBUG_A(DEF_ENUM_A)
285a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#undef DEF_ENUM_C
286a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#undef DEF_ENUM_A
287a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    builtin_count
288a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  };
289a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
290a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  enum CFunctionId {
291e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke#define DEF_ENUM_C(name, ignore) c_##name,
292a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    BUILTIN_LIST_C(DEF_ENUM_C)
293a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#undef DEF_ENUM_C
294a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    cfunction_count
295a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  };
296a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
297a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  enum JavaScript {
298a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#define DEF_ENUM(name, ignore) name,
299a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    BUILTINS_LIST_JS(DEF_ENUM)
300a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#undef DEF_ENUM
301a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    id_count
302a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  };
303a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
30444f0eee88ff00398ff7f715fab053374d808c90dSteve Block#define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle<Code> name();
30544f0eee88ff00398ff7f715fab053374d808c90dSteve Block#define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \
30644f0eee88ff00398ff7f715fab053374d808c90dSteve Block  Handle<Code> name();
30744f0eee88ff00398ff7f715fab053374d808c90dSteve Block  BUILTIN_LIST_C(DECLARE_BUILTIN_ACCESSOR_C)
30844f0eee88ff00398ff7f715fab053374d808c90dSteve Block  BUILTIN_LIST_A(DECLARE_BUILTIN_ACCESSOR_A)
30944f0eee88ff00398ff7f715fab053374d808c90dSteve Block  BUILTIN_LIST_DEBUG_A(DECLARE_BUILTIN_ACCESSOR_A)
31044f0eee88ff00398ff7f715fab053374d808c90dSteve Block#undef DECLARE_BUILTIN_ACCESSOR_C
31144f0eee88ff00398ff7f715fab053374d808c90dSteve Block#undef DECLARE_BUILTIN_ACCESSOR_A
31244f0eee88ff00398ff7f715fab053374d808c90dSteve Block
31344f0eee88ff00398ff7f715fab053374d808c90dSteve Block  Code* builtin(Name name) {
314a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    // Code::cast cannot be used here since we access builtins
315a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    // during the marking phase of mark sweep. See IC::Clear.
316a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    return reinterpret_cast<Code*>(builtins_[name]);
317a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  }
318a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
31944f0eee88ff00398ff7f715fab053374d808c90dSteve Block  Address builtin_address(Name name) {
320a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    return reinterpret_cast<Address>(&builtins_[name]);
321a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  }
322a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
323a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static Address c_function_address(CFunctionId id) {
324a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    return c_functions_[id];
325a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  }
326a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
327a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static const char* GetName(JavaScript id) { return javascript_names_[id]; }
328a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static int GetArgumentsCount(JavaScript id) { return javascript_argc_[id]; }
32944f0eee88ff00398ff7f715fab053374d808c90dSteve Block  Handle<Code> GetCode(JavaScript id, bool* resolved);
330a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static int NumberOfJavaScriptBuiltins() { return id_count; }
331a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
33244f0eee88ff00398ff7f715fab053374d808c90dSteve Block  bool is_initialized() const { return initialized_; }
33344f0eee88ff00398ff7f715fab053374d808c90dSteve Block
334a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block private:
33544f0eee88ff00398ff7f715fab053374d808c90dSteve Block  Builtins();
33644f0eee88ff00398ff7f715fab053374d808c90dSteve Block
337a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // The external C++ functions called from the code.
33844f0eee88ff00398ff7f715fab053374d808c90dSteve Block  static Address const c_functions_[cfunction_count];
339a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
340a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // Note: These are always Code objects, but to conform with
341a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // IterateBuiltins() above which assumes Object**'s for the callback
342a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // function f, we use an Object* array here.
34344f0eee88ff00398ff7f715fab053374d808c90dSteve Block  Object* builtins_[builtin_count];
34444f0eee88ff00398ff7f715fab053374d808c90dSteve Block  const char* names_[builtin_count];
34544f0eee88ff00398ff7f715fab053374d808c90dSteve Block  static const char* const javascript_names_[id_count];
34644f0eee88ff00398ff7f715fab053374d808c90dSteve Block  static int const javascript_argc_[id_count];
347a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
348e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke  static void Generate_Adaptor(MacroAssembler* masm,
349e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke                               CFunctionId id,
350e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke                               BuiltinExtraArguments extra_args);
3510d5e116f6aee03185f237311a943491bb079a768Kristian Monsen  static void Generate_JSConstructStubCountdown(MacroAssembler* masm);
352a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static void Generate_JSConstructStubGeneric(MacroAssembler* masm);
353e46be819fca9468a0cd4e74859ce0f778eb8ca60Leon Clarke  static void Generate_JSConstructStubApi(MacroAssembler* masm);
354a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static void Generate_JSEntryTrampoline(MacroAssembler* masm);
355a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static void Generate_JSConstructEntryTrampoline(MacroAssembler* masm);
356756813857a4c2a4d8ad2e805969d5768d3cf43a0Iain Merrick  static void Generate_LazyCompile(MacroAssembler* masm);
357b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  static void Generate_LazyRecompile(MacroAssembler* masm);
358b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  static void Generate_NotifyDeoptimized(MacroAssembler* masm);
359b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  static void Generate_NotifyLazyDeoptimized(MacroAssembler* masm);
360b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  static void Generate_NotifyOSR(MacroAssembler* masm);
361a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static void Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm);
362a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
363a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static void Generate_FunctionCall(MacroAssembler* masm);
364a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static void Generate_FunctionApply(MacroAssembler* masm);
365a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
3663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch  static void Generate_InternalArrayCode(MacroAssembler* masm);
367a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static void Generate_ArrayCode(MacroAssembler* masm);
368a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static void Generate_ArrayConstructCode(MacroAssembler* masm);
36980d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen
37080d68eab642096c1a48b6474d6ec33064b0ad1f5Kristian Monsen  static void Generate_StringConstructCode(MacroAssembler* masm);
371b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  static void Generate_OnStackReplacement(MacroAssembler* masm);
37244f0eee88ff00398ff7f715fab053374d808c90dSteve Block
37344f0eee88ff00398ff7f715fab053374d808c90dSteve Block  static void InitBuiltinFunctionTable();
37444f0eee88ff00398ff7f715fab053374d808c90dSteve Block
37544f0eee88ff00398ff7f715fab053374d808c90dSteve Block  bool initialized_;
37644f0eee88ff00398ff7f715fab053374d808c90dSteve Block
37744f0eee88ff00398ff7f715fab053374d808c90dSteve Block  friend class BuiltinFunctionTable;
37844f0eee88ff00398ff7f715fab053374d808c90dSteve Block  friend class Isolate;
37944f0eee88ff00398ff7f715fab053374d808c90dSteve Block
38044f0eee88ff00398ff7f715fab053374d808c90dSteve Block  DISALLOW_COPY_AND_ASSIGN(Builtins);
381a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block};
382a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
383a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} }  // namespace v8::internal
384a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
385a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#endif  // V8_BUILTINS_H_
386