OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 19 matching lines...) Expand all Loading... |
30 | 30 |
31 namespace v8 { | 31 namespace v8 { |
32 namespace internal { | 32 namespace internal { |
33 | 33 |
34 // Specifies extra arguments required by a C++ builtin. | 34 // Specifies extra arguments required by a C++ builtin. |
35 enum BuiltinExtraArguments { | 35 enum BuiltinExtraArguments { |
36 NO_EXTRA_ARGUMENTS = 0, | 36 NO_EXTRA_ARGUMENTS = 0, |
37 NEEDS_CALLED_FUNCTION = 1 | 37 NEEDS_CALLED_FUNCTION = 1 |
38 }; | 38 }; |
39 | 39 |
| 40 // Specifies whether or not a builtin should be part of the snapshot. |
| 41 enum InSnapshot { |
| 42 NOT_IN_SNAPSHOT = 0, |
| 43 IN_SNAPSHOT = 1 |
| 44 }; |
| 45 |
| 46 #if defined(V8_TARGET_ARCH_ARM) |
| 47 #define NOT_IN_ARM_SNAPSHOT NOT_IN_SNAPSHOT |
| 48 #else |
| 49 #define NOT_IN_ARM_SNAPSHOT IN_SNAPSHOT |
| 50 #endif |
| 51 |
40 | 52 |
41 #define CODE_AGE_LIST_WITH_ARG(V, A) \ | 53 #define CODE_AGE_LIST_WITH_ARG(V, A) \ |
42 V(Quadragenarian, A) \ | 54 V(Quadragenarian, A) \ |
43 V(Quinquagenarian, A) \ | 55 V(Quinquagenarian, A) \ |
44 V(Sexagenarian, A) \ | 56 V(Sexagenarian, A) \ |
45 V(Septuagenarian, A) \ | 57 V(Septuagenarian, A) \ |
46 V(Octogenarian, A) | 58 V(Octogenarian, A) |
47 | 59 |
48 #define CODE_AGE_LIST_IGNORE_ARG(X, V) V(X) | 60 #define CODE_AGE_LIST_IGNORE_ARG(X, V) V(X) |
49 | 61 |
50 #define CODE_AGE_LIST(V) \ | 62 #define CODE_AGE_LIST(V) \ |
51 CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V) | 63 CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V) |
52 | 64 |
53 #define DECLARE_CODE_AGE_BUILTIN(C, V) \ | 65 #define DECLARE_CODE_AGE_BUILTIN(C, V) \ |
54 V(Make##C##CodeYoungAgainOddMarking, BUILTIN, \ | 66 V(Make##C##CodeYoungAgainOddMarking, BUILTIN, \ |
55 UNINITIALIZED, Code::kNoExtraICState) \ | 67 UNINITIALIZED, Code::kNoExtraICState, IN_SNAPSHOT) \ |
56 V(Make##C##CodeYoungAgainEvenMarking, BUILTIN, \ | 68 V(Make##C##CodeYoungAgainEvenMarking, BUILTIN, \ |
57 UNINITIALIZED, Code::kNoExtraICState) | 69 UNINITIALIZED, Code::kNoExtraICState, IN_SNAPSHOT) |
58 | 70 |
59 | 71 |
60 // Define list of builtins implemented in C++. | 72 // Define list of builtins implemented in C++. |
61 #define BUILTIN_LIST_C(V) \ | 73 #define BUILTIN_LIST_C(V) \ |
62 V(Illegal, NO_EXTRA_ARGUMENTS) \ | 74 V(Illegal, NO_EXTRA_ARGUMENTS) \ |
63 \ | 75 \ |
64 V(EmptyFunction, NO_EXTRA_ARGUMENTS) \ | 76 V(EmptyFunction, NO_EXTRA_ARGUMENTS) \ |
65 \ | 77 \ |
66 V(InternalArrayCodeGeneric, NO_EXTRA_ARGUMENTS) \ | 78 V(InternalArrayCodeGeneric, NO_EXTRA_ARGUMENTS) \ |
67 V(ArrayCodeGeneric, NO_EXTRA_ARGUMENTS) \ | 79 V(ArrayCodeGeneric, NO_EXTRA_ARGUMENTS) \ |
68 \ | 80 \ |
69 V(ArrayPush, NO_EXTRA_ARGUMENTS) \ | 81 V(ArrayPush, NO_EXTRA_ARGUMENTS) \ |
70 V(ArrayPop, NO_EXTRA_ARGUMENTS) \ | 82 V(ArrayPop, NO_EXTRA_ARGUMENTS) \ |
71 V(ArrayShift, NO_EXTRA_ARGUMENTS) \ | 83 V(ArrayShift, NO_EXTRA_ARGUMENTS) \ |
72 V(ArrayUnshift, NO_EXTRA_ARGUMENTS) \ | 84 V(ArrayUnshift, NO_EXTRA_ARGUMENTS) \ |
73 V(ArraySlice, NO_EXTRA_ARGUMENTS) \ | 85 V(ArraySlice, NO_EXTRA_ARGUMENTS) \ |
74 V(ArraySplice, NO_EXTRA_ARGUMENTS) \ | 86 V(ArraySplice, NO_EXTRA_ARGUMENTS) \ |
75 V(ArrayConcat, NO_EXTRA_ARGUMENTS) \ | 87 V(ArrayConcat, NO_EXTRA_ARGUMENTS) \ |
76 \ | 88 \ |
77 V(HandleApiCall, NEEDS_CALLED_FUNCTION) \ | 89 V(HandleApiCall, NEEDS_CALLED_FUNCTION) \ |
78 V(HandleApiCallConstruct, NEEDS_CALLED_FUNCTION) \ | 90 V(HandleApiCallConstruct, NEEDS_CALLED_FUNCTION) \ |
79 V(HandleApiCallAsFunction, NO_EXTRA_ARGUMENTS) \ | 91 V(HandleApiCallAsFunction, NO_EXTRA_ARGUMENTS) \ |
80 V(HandleApiCallAsConstructor, NO_EXTRA_ARGUMENTS) \ | 92 V(HandleApiCallAsConstructor, NO_EXTRA_ARGUMENTS) \ |
81 \ | 93 \ |
82 V(StrictModePoisonPill, NO_EXTRA_ARGUMENTS) | 94 V(StrictModePoisonPill, NO_EXTRA_ARGUMENTS) |
83 | 95 |
84 // Define list of builtins implemented in assembly. | 96 // Define list of builtins implemented in assembly. |
85 #define BUILTIN_LIST_A(V) \ | 97 #define BUILTIN_LIST_A(V) \ |
86 V(ArgumentsAdaptorTrampoline, BUILTIN, UNINITIALIZED, \ | 98 V(ArgumentsAdaptorTrampoline, BUILTIN, UNINITIALIZED, \ |
87 Code::kNoExtraICState) \ | 99 Code::kNoExtraICState, \ |
| 100 IN_SNAPSHOT) \ |
88 V(InRecompileQueue, BUILTIN, UNINITIALIZED, \ | 101 V(InRecompileQueue, BUILTIN, UNINITIALIZED, \ |
89 Code::kNoExtraICState) \ | 102 Code::kNoExtraICState, \ |
| 103 IN_SNAPSHOT) \ |
90 V(JSConstructStubCountdown, BUILTIN, UNINITIALIZED, \ | 104 V(JSConstructStubCountdown, BUILTIN, UNINITIALIZED, \ |
91 Code::kNoExtraICState) \ | 105 Code::kNoExtraICState, \ |
| 106 IN_SNAPSHOT) \ |
92 V(JSConstructStubGeneric, BUILTIN, UNINITIALIZED, \ | 107 V(JSConstructStubGeneric, BUILTIN, UNINITIALIZED, \ |
93 Code::kNoExtraICState) \ | 108 Code::kNoExtraICState, \ |
| 109 IN_SNAPSHOT) \ |
94 V(JSConstructStubApi, BUILTIN, UNINITIALIZED, \ | 110 V(JSConstructStubApi, BUILTIN, UNINITIALIZED, \ |
95 Code::kNoExtraICState) \ | 111 Code::kNoExtraICState, \ |
| 112 IN_SNAPSHOT) \ |
96 V(JSEntryTrampoline, BUILTIN, UNINITIALIZED, \ | 113 V(JSEntryTrampoline, BUILTIN, UNINITIALIZED, \ |
97 Code::kNoExtraICState) \ | 114 Code::kNoExtraICState, \ |
| 115 IN_SNAPSHOT) \ |
98 V(JSConstructEntryTrampoline, BUILTIN, UNINITIALIZED, \ | 116 V(JSConstructEntryTrampoline, BUILTIN, UNINITIALIZED, \ |
99 Code::kNoExtraICState) \ | 117 Code::kNoExtraICState, \ |
| 118 IN_SNAPSHOT) \ |
100 V(LazyCompile, BUILTIN, UNINITIALIZED, \ | 119 V(LazyCompile, BUILTIN, UNINITIALIZED, \ |
101 Code::kNoExtraICState) \ | 120 Code::kNoExtraICState, \ |
| 121 IN_SNAPSHOT) \ |
102 V(LazyRecompile, BUILTIN, UNINITIALIZED, \ | 122 V(LazyRecompile, BUILTIN, UNINITIALIZED, \ |
103 Code::kNoExtraICState) \ | 123 Code::kNoExtraICState, \ |
| 124 IN_SNAPSHOT) \ |
104 V(ParallelRecompile, BUILTIN, UNINITIALIZED, \ | 125 V(ParallelRecompile, BUILTIN, UNINITIALIZED, \ |
105 Code::kNoExtraICState) \ | 126 Code::kNoExtraICState, \ |
| 127 IN_SNAPSHOT) \ |
106 V(NotifyDeoptimized, BUILTIN, UNINITIALIZED, \ | 128 V(NotifyDeoptimized, BUILTIN, UNINITIALIZED, \ |
107 Code::kNoExtraICState) \ | 129 Code::kNoExtraICState, \ |
| 130 IN_SNAPSHOT) \ |
108 V(NotifyLazyDeoptimized, BUILTIN, UNINITIALIZED, \ | 131 V(NotifyLazyDeoptimized, BUILTIN, UNINITIALIZED, \ |
109 Code::kNoExtraICState) \ | 132 Code::kNoExtraICState, \ |
| 133 IN_SNAPSHOT) \ |
110 V(NotifyOSR, BUILTIN, UNINITIALIZED, \ | 134 V(NotifyOSR, BUILTIN, UNINITIALIZED, \ |
111 Code::kNoExtraICState) \ | 135 Code::kNoExtraICState, \ |
| 136 IN_SNAPSHOT) \ |
112 \ | 137 \ |
113 V(LoadIC_Miss, BUILTIN, UNINITIALIZED, \ | 138 V(LoadIC_Miss, BUILTIN, UNINITIALIZED, \ |
114 Code::kNoExtraICState) \ | 139 Code::kNoExtraICState, \ |
| 140 IN_SNAPSHOT) \ |
115 V(KeyedLoadIC_Miss, BUILTIN, UNINITIALIZED, \ | 141 V(KeyedLoadIC_Miss, BUILTIN, UNINITIALIZED, \ |
116 Code::kNoExtraICState) \ | 142 Code::kNoExtraICState, \ |
| 143 IN_SNAPSHOT) \ |
117 V(KeyedLoadIC_MissForceGeneric, BUILTIN, UNINITIALIZED, \ | 144 V(KeyedLoadIC_MissForceGeneric, BUILTIN, UNINITIALIZED, \ |
118 Code::kNoExtraICState) \ | 145 Code::kNoExtraICState, \ |
| 146 IN_SNAPSHOT) \ |
119 V(KeyedLoadIC_Slow, BUILTIN, UNINITIALIZED, \ | 147 V(KeyedLoadIC_Slow, BUILTIN, UNINITIALIZED, \ |
120 Code::kNoExtraICState) \ | 148 Code::kNoExtraICState, \ |
| 149 IN_SNAPSHOT) \ |
121 V(StoreIC_Miss, BUILTIN, UNINITIALIZED, \ | 150 V(StoreIC_Miss, BUILTIN, UNINITIALIZED, \ |
122 Code::kNoExtraICState) \ | 151 Code::kNoExtraICState, \ |
| 152 IN_SNAPSHOT) \ |
123 V(KeyedStoreIC_Miss, BUILTIN, UNINITIALIZED, \ | 153 V(KeyedStoreIC_Miss, BUILTIN, UNINITIALIZED, \ |
124 Code::kNoExtraICState) \ | 154 Code::kNoExtraICState, \ |
| 155 IN_SNAPSHOT) \ |
125 V(KeyedStoreIC_MissForceGeneric, BUILTIN, UNINITIALIZED, \ | 156 V(KeyedStoreIC_MissForceGeneric, BUILTIN, UNINITIALIZED, \ |
126 Code::kNoExtraICState) \ | 157 Code::kNoExtraICState, \ |
| 158 IN_SNAPSHOT) \ |
127 V(KeyedStoreIC_Slow, BUILTIN, UNINITIALIZED, \ | 159 V(KeyedStoreIC_Slow, BUILTIN, UNINITIALIZED, \ |
128 Code::kNoExtraICState) \ | 160 Code::kNoExtraICState, \ |
| 161 IN_SNAPSHOT) \ |
129 V(LoadIC_Initialize, LOAD_IC, UNINITIALIZED, \ | 162 V(LoadIC_Initialize, LOAD_IC, UNINITIALIZED, \ |
130 Code::kNoExtraICState) \ | 163 Code::kNoExtraICState, \ |
| 164 IN_SNAPSHOT) \ |
131 V(LoadIC_PreMonomorphic, LOAD_IC, PREMONOMORPHIC, \ | 165 V(LoadIC_PreMonomorphic, LOAD_IC, PREMONOMORPHIC, \ |
132 Code::kNoExtraICState) \ | 166 Code::kNoExtraICState, \ |
| 167 IN_SNAPSHOT) \ |
133 V(LoadIC_Normal, LOAD_IC, MONOMORPHIC, \ | 168 V(LoadIC_Normal, LOAD_IC, MONOMORPHIC, \ |
134 Code::kNoExtraICState) \ | 169 Code::kNoExtraICState, \ |
| 170 IN_SNAPSHOT) \ |
135 V(LoadIC_ArrayLength, LOAD_IC, MONOMORPHIC, \ | 171 V(LoadIC_ArrayLength, LOAD_IC, MONOMORPHIC, \ |
136 Code::kNoExtraICState) \ | 172 Code::kNoExtraICState, \ |
| 173 IN_SNAPSHOT) \ |
137 V(LoadIC_StringLength, LOAD_IC, MONOMORPHIC, \ | 174 V(LoadIC_StringLength, LOAD_IC, MONOMORPHIC, \ |
138 Code::kNoExtraICState) \ | 175 Code::kNoExtraICState, \ |
| 176 IN_SNAPSHOT) \ |
139 V(LoadIC_StringWrapperLength, LOAD_IC, MONOMORPHIC, \ | 177 V(LoadIC_StringWrapperLength, LOAD_IC, MONOMORPHIC, \ |
140 Code::kNoExtraICState) \ | 178 Code::kNoExtraICState, \ |
| 179 IN_SNAPSHOT) \ |
141 V(LoadIC_FunctionPrototype, LOAD_IC, MONOMORPHIC, \ | 180 V(LoadIC_FunctionPrototype, LOAD_IC, MONOMORPHIC, \ |
142 Code::kNoExtraICState) \ | 181 Code::kNoExtraICState, \ |
| 182 IN_SNAPSHOT) \ |
143 V(LoadIC_Megamorphic, LOAD_IC, MEGAMORPHIC, \ | 183 V(LoadIC_Megamorphic, LOAD_IC, MEGAMORPHIC, \ |
144 Code::kNoExtraICState) \ | 184 Code::kNoExtraICState, \ |
| 185 IN_SNAPSHOT) \ |
145 V(LoadIC_Getter_ForDeopt, LOAD_IC, MONOMORPHIC, \ | 186 V(LoadIC_Getter_ForDeopt, LOAD_IC, MONOMORPHIC, \ |
146 Code::kNoExtraICState) \ | 187 Code::kNoExtraICState, \ |
| 188 IN_SNAPSHOT) \ |
147 \ | 189 \ |
148 V(KeyedLoadIC_Initialize, KEYED_LOAD_IC, UNINITIALIZED, \ | 190 V(KeyedLoadIC_Initialize, KEYED_LOAD_IC, UNINITIALIZED, \ |
149 Code::kNoExtraICState) \ | 191 Code::kNoExtraICState, \ |
| 192 IN_SNAPSHOT) \ |
150 V(KeyedLoadIC_PreMonomorphic, KEYED_LOAD_IC, PREMONOMORPHIC, \ | 193 V(KeyedLoadIC_PreMonomorphic, KEYED_LOAD_IC, PREMONOMORPHIC, \ |
151 Code::kNoExtraICState) \ | 194 Code::kNoExtraICState, \ |
| 195 IN_SNAPSHOT) \ |
152 V(KeyedLoadIC_Generic, KEYED_LOAD_IC, MEGAMORPHIC, \ | 196 V(KeyedLoadIC_Generic, KEYED_LOAD_IC, MEGAMORPHIC, \ |
153 Code::kNoExtraICState) \ | 197 Code::kNoExtraICState, \ |
| 198 IN_SNAPSHOT) \ |
154 V(KeyedLoadIC_String, KEYED_LOAD_IC, MEGAMORPHIC, \ | 199 V(KeyedLoadIC_String, KEYED_LOAD_IC, MEGAMORPHIC, \ |
155 Code::kNoExtraICState) \ | 200 Code::kNoExtraICState, \ |
| 201 IN_SNAPSHOT) \ |
156 V(KeyedLoadIC_IndexedInterceptor, KEYED_LOAD_IC, MEGAMORPHIC, \ | 202 V(KeyedLoadIC_IndexedInterceptor, KEYED_LOAD_IC, MEGAMORPHIC, \ |
157 Code::kNoExtraICState) \ | 203 Code::kNoExtraICState, \ |
| 204 IN_SNAPSHOT) \ |
158 V(KeyedLoadIC_NonStrictArguments, KEYED_LOAD_IC, MEGAMORPHIC, \ | 205 V(KeyedLoadIC_NonStrictArguments, KEYED_LOAD_IC, MEGAMORPHIC, \ |
159 Code::kNoExtraICState) \ | 206 Code::kNoExtraICState, \ |
| 207 IN_SNAPSHOT) \ |
160 \ | 208 \ |
161 V(StoreIC_Initialize, STORE_IC, UNINITIALIZED, \ | 209 V(StoreIC_Initialize, STORE_IC, UNINITIALIZED, \ |
162 Code::kNoExtraICState) \ | 210 Code::kNoExtraICState, \ |
| 211 IN_SNAPSHOT) \ |
163 V(StoreIC_ArrayLength, STORE_IC, MONOMORPHIC, \ | 212 V(StoreIC_ArrayLength, STORE_IC, MONOMORPHIC, \ |
164 Code::kNoExtraICState) \ | 213 Code::kNoExtraICState, \ |
| 214 IN_SNAPSHOT) \ |
165 V(StoreIC_Normal, STORE_IC, MONOMORPHIC, \ | 215 V(StoreIC_Normal, STORE_IC, MONOMORPHIC, \ |
166 Code::kNoExtraICState) \ | 216 Code::kNoExtraICState, \ |
| 217 IN_SNAPSHOT) \ |
167 V(StoreIC_Megamorphic, STORE_IC, MEGAMORPHIC, \ | 218 V(StoreIC_Megamorphic, STORE_IC, MEGAMORPHIC, \ |
168 Code::kNoExtraICState) \ | 219 Code::kNoExtraICState, \ |
| 220 IN_SNAPSHOT) \ |
169 V(StoreIC_GlobalProxy, STORE_IC, MEGAMORPHIC, \ | 221 V(StoreIC_GlobalProxy, STORE_IC, MEGAMORPHIC, \ |
170 Code::kNoExtraICState) \ | 222 Code::kNoExtraICState, \ |
| 223 IN_SNAPSHOT) \ |
171 V(StoreIC_Initialize_Strict, STORE_IC, UNINITIALIZED, \ | 224 V(StoreIC_Initialize_Strict, STORE_IC, UNINITIALIZED, \ |
172 kStrictMode) \ | 225 kStrictMode, \ |
| 226 IN_SNAPSHOT) \ |
173 V(StoreIC_ArrayLength_Strict, STORE_IC, MONOMORPHIC, \ | 227 V(StoreIC_ArrayLength_Strict, STORE_IC, MONOMORPHIC, \ |
174 kStrictMode) \ | 228 kStrictMode, \ |
| 229 IN_SNAPSHOT) \ |
175 V(StoreIC_Normal_Strict, STORE_IC, MONOMORPHIC, \ | 230 V(StoreIC_Normal_Strict, STORE_IC, MONOMORPHIC, \ |
176 kStrictMode) \ | 231 kStrictMode, \ |
| 232 IN_SNAPSHOT) \ |
177 V(StoreIC_Megamorphic_Strict, STORE_IC, MEGAMORPHIC, \ | 233 V(StoreIC_Megamorphic_Strict, STORE_IC, MEGAMORPHIC, \ |
178 kStrictMode) \ | 234 kStrictMode, \ |
| 235 IN_SNAPSHOT) \ |
179 V(StoreIC_GlobalProxy_Strict, STORE_IC, MEGAMORPHIC, \ | 236 V(StoreIC_GlobalProxy_Strict, STORE_IC, MEGAMORPHIC, \ |
180 kStrictMode) \ | 237 kStrictMode, \ |
| 238 IN_SNAPSHOT) \ |
181 V(StoreIC_Setter_ForDeopt, STORE_IC, MONOMORPHIC, \ | 239 V(StoreIC_Setter_ForDeopt, STORE_IC, MONOMORPHIC, \ |
182 kStrictMode) \ | 240 kStrictMode, \ |
| 241 IN_SNAPSHOT) \ |
183 \ | 242 \ |
184 V(KeyedStoreIC_Initialize, KEYED_STORE_IC, UNINITIALIZED, \ | 243 V(KeyedStoreIC_Initialize, KEYED_STORE_IC, UNINITIALIZED, \ |
185 Code::kNoExtraICState) \ | 244 Code::kNoExtraICState, \ |
| 245 IN_SNAPSHOT) \ |
186 V(KeyedStoreIC_Generic, KEYED_STORE_IC, MEGAMORPHIC, \ | 246 V(KeyedStoreIC_Generic, KEYED_STORE_IC, MEGAMORPHIC, \ |
187 Code::kNoExtraICState) \ | 247 Code::kNoExtraICState, \ |
| 248 IN_SNAPSHOT) \ |
188 \ | 249 \ |
189 V(KeyedStoreIC_Initialize_Strict, KEYED_STORE_IC, UNINITIALIZED, \ | 250 V(KeyedStoreIC_Initialize_Strict, KEYED_STORE_IC, UNINITIALIZED, \ |
190 kStrictMode) \ | 251 kStrictMode, \ |
| 252 IN_SNAPSHOT) \ |
191 V(KeyedStoreIC_Generic_Strict, KEYED_STORE_IC, MEGAMORPHIC, \ | 253 V(KeyedStoreIC_Generic_Strict, KEYED_STORE_IC, MEGAMORPHIC, \ |
192 kStrictMode) \ | 254 kStrictMode, \ |
| 255 IN_SNAPSHOT) \ |
193 V(KeyedStoreIC_NonStrictArguments, KEYED_STORE_IC, MEGAMORPHIC, \ | 256 V(KeyedStoreIC_NonStrictArguments, KEYED_STORE_IC, MEGAMORPHIC, \ |
194 Code::kNoExtraICState) \ | 257 Code::kNoExtraICState, \ |
| 258 IN_SNAPSHOT) \ |
195 V(TransitionElementsSmiToDouble, BUILTIN, UNINITIALIZED, \ | 259 V(TransitionElementsSmiToDouble, BUILTIN, UNINITIALIZED, \ |
196 Code::kNoExtraICState) \ | 260 Code::kNoExtraICState, \ |
| 261 IN_SNAPSHOT) \ |
197 V(TransitionElementsDoubleToObject, BUILTIN, UNINITIALIZED, \ | 262 V(TransitionElementsDoubleToObject, BUILTIN, UNINITIALIZED, \ |
198 Code::kNoExtraICState) \ | 263 Code::kNoExtraICState, \ |
| 264 IN_SNAPSHOT) \ |
199 \ | 265 \ |
200 /* Uses KeyedLoadIC_Initialize; must be after in list. */ \ | 266 /* Uses KeyedLoadIC_Initialize; must be after in list. */ \ |
201 V(FunctionCall, BUILTIN, UNINITIALIZED, \ | 267 V(FunctionCall, BUILTIN, UNINITIALIZED, \ |
202 Code::kNoExtraICState) \ | 268 Code::kNoExtraICState, \ |
| 269 IN_SNAPSHOT) \ |
203 V(FunctionApply, BUILTIN, UNINITIALIZED, \ | 270 V(FunctionApply, BUILTIN, UNINITIALIZED, \ |
204 Code::kNoExtraICState) \ | 271 Code::kNoExtraICState, \ |
| 272 IN_SNAPSHOT) \ |
205 \ | 273 \ |
206 V(InternalArrayCode, BUILTIN, UNINITIALIZED, \ | 274 V(InternalArrayCode, BUILTIN, UNINITIALIZED, \ |
207 Code::kNoExtraICState) \ | 275 Code::kNoExtraICState, \ |
| 276 IN_SNAPSHOT) \ |
208 V(ArrayCode, BUILTIN, UNINITIALIZED, \ | 277 V(ArrayCode, BUILTIN, UNINITIALIZED, \ |
209 Code::kNoExtraICState) \ | 278 Code::kNoExtraICState, \ |
| 279 IN_SNAPSHOT) \ |
210 V(ArrayConstructCode, BUILTIN, UNINITIALIZED, \ | 280 V(ArrayConstructCode, BUILTIN, UNINITIALIZED, \ |
211 Code::kNoExtraICState) \ | 281 Code::kNoExtraICState, \ |
| 282 IN_SNAPSHOT) \ |
212 \ | 283 \ |
213 V(StringConstructCode, BUILTIN, UNINITIALIZED, \ | 284 V(StringConstructCode, BUILTIN, UNINITIALIZED, \ |
214 Code::kNoExtraICState) \ | 285 Code::kNoExtraICState, \ |
| 286 IN_SNAPSHOT) \ |
215 \ | 287 \ |
216 V(OnStackReplacement, BUILTIN, UNINITIALIZED, \ | 288 V(OnStackReplacement, BUILTIN, UNINITIALIZED, \ |
217 Code::kNoExtraICState) \ | 289 Code::kNoExtraICState, \ |
| 290 NOT_IN_ARM_SNAPSHOT) \ |
218 CODE_AGE_LIST_WITH_ARG(DECLARE_CODE_AGE_BUILTIN, V) | 291 CODE_AGE_LIST_WITH_ARG(DECLARE_CODE_AGE_BUILTIN, V) |
219 | 292 |
220 #ifdef ENABLE_DEBUGGER_SUPPORT | 293 #ifdef ENABLE_DEBUGGER_SUPPORT |
221 // Define list of builtins used by the debugger implemented in assembly. | 294 // Define list of builtins used by the debugger implemented in assembly. |
222 #define BUILTIN_LIST_DEBUG_A(V) \ | 295 #define BUILTIN_LIST_DEBUG_A(V) \ |
223 V(Return_DebugBreak, BUILTIN, DEBUG_BREAK, \ | 296 V(Return_DebugBreak, BUILTIN, DEBUG_BREAK, \ |
224 Code::kNoExtraICState) \ | 297 Code::kNoExtraICState, \ |
| 298 IN_SNAPSHOT) \ |
225 V(CallFunctionStub_DebugBreak, BUILTIN, DEBUG_BREAK, \ | 299 V(CallFunctionStub_DebugBreak, BUILTIN, DEBUG_BREAK, \ |
226 Code::kNoExtraICState) \ | 300 Code::kNoExtraICState, \ |
| 301 IN_SNAPSHOT) \ |
227 V(CallFunctionStub_Recording_DebugBreak, BUILTIN, DEBUG_BREAK, \ | 302 V(CallFunctionStub_Recording_DebugBreak, BUILTIN, DEBUG_BREAK, \ |
228 Code::kNoExtraICState) \ | 303 Code::kNoExtraICState, \ |
| 304 IN_SNAPSHOT) \ |
229 V(CallConstructStub_DebugBreak, BUILTIN, DEBUG_BREAK, \ | 305 V(CallConstructStub_DebugBreak, BUILTIN, DEBUG_BREAK, \ |
230 Code::kNoExtraICState) \ | 306 Code::kNoExtraICState, \ |
| 307 IN_SNAPSHOT) \ |
231 V(CallConstructStub_Recording_DebugBreak, BUILTIN, DEBUG_BREAK, \ | 308 V(CallConstructStub_Recording_DebugBreak, BUILTIN, DEBUG_BREAK, \ |
232 Code::kNoExtraICState) \ | 309 Code::kNoExtraICState, \ |
| 310 IN_SNAPSHOT) \ |
233 V(LoadIC_DebugBreak, LOAD_IC, DEBUG_BREAK, \ | 311 V(LoadIC_DebugBreak, LOAD_IC, DEBUG_BREAK, \ |
234 Code::kNoExtraICState) \ | 312 Code::kNoExtraICState, \ |
| 313 IN_SNAPSHOT) \ |
235 V(KeyedLoadIC_DebugBreak, KEYED_LOAD_IC, DEBUG_BREAK, \ | 314 V(KeyedLoadIC_DebugBreak, KEYED_LOAD_IC, DEBUG_BREAK, \ |
236 Code::kNoExtraICState) \ | 315 Code::kNoExtraICState, \ |
| 316 IN_SNAPSHOT) \ |
237 V(StoreIC_DebugBreak, STORE_IC, DEBUG_BREAK, \ | 317 V(StoreIC_DebugBreak, STORE_IC, DEBUG_BREAK, \ |
238 Code::kNoExtraICState) \ | 318 Code::kNoExtraICState, \ |
| 319 IN_SNAPSHOT) \ |
239 V(KeyedStoreIC_DebugBreak, KEYED_STORE_IC, DEBUG_BREAK, \ | 320 V(KeyedStoreIC_DebugBreak, KEYED_STORE_IC, DEBUG_BREAK, \ |
240 Code::kNoExtraICState) \ | 321 Code::kNoExtraICState, \ |
| 322 IN_SNAPSHOT) \ |
241 V(Slot_DebugBreak, BUILTIN, DEBUG_BREAK, \ | 323 V(Slot_DebugBreak, BUILTIN, DEBUG_BREAK, \ |
242 Code::kNoExtraICState) \ | 324 Code::kNoExtraICState, \ |
| 325 IN_SNAPSHOT) \ |
243 V(PlainReturn_LiveEdit, BUILTIN, DEBUG_BREAK, \ | 326 V(PlainReturn_LiveEdit, BUILTIN, DEBUG_BREAK, \ |
244 Code::kNoExtraICState) \ | 327 Code::kNoExtraICState, \ |
| 328 IN_SNAPSHOT) \ |
245 V(FrameDropper_LiveEdit, BUILTIN, DEBUG_BREAK, \ | 329 V(FrameDropper_LiveEdit, BUILTIN, DEBUG_BREAK, \ |
246 Code::kNoExtraICState) | 330 Code::kNoExtraICState, \ |
| 331 IN_SNAPSHOT) |
247 #else | 332 #else |
248 #define BUILTIN_LIST_DEBUG_A(V) | 333 #define BUILTIN_LIST_DEBUG_A(V) |
249 #endif | 334 #endif |
250 | 335 |
251 // Define list of builtins implemented in JavaScript. | 336 // Define list of builtins implemented in JavaScript. |
252 #define BUILTINS_LIST_JS(V) \ | 337 #define BUILTINS_LIST_JS(V) \ |
253 V(EQUALS, 1) \ | 338 V(EQUALS, 1) \ |
254 V(STRICT_EQUALS, 1) \ | 339 V(STRICT_EQUALS, 1) \ |
255 V(COMPARE, 2) \ | 340 V(COMPARE, 2) \ |
256 V(ADD, 1) \ | 341 V(ADD, 1) \ |
(...skipping 27 matching lines...) Expand all Loading... |
284 | 369 |
285 | 370 |
286 class BuiltinFunctionTable; | 371 class BuiltinFunctionTable; |
287 class ObjectVisitor; | 372 class ObjectVisitor; |
288 | 373 |
289 | 374 |
290 class Builtins { | 375 class Builtins { |
291 public: | 376 public: |
292 ~Builtins(); | 377 ~Builtins(); |
293 | 378 |
294 // Generate all builtin code objects. Should be called once during | 379 enum SetUpKind { |
295 // isolate initialization. | 380 FOR_SNAPSHOT, |
296 void SetUp(bool create_heap_objects); | 381 ALL, |
| 382 BEFORE_DESERIALIZATION, |
| 383 AFTER_DESERIALIZATION |
| 384 }; |
| 385 |
| 386 // Generate builtin code object. Should be called during isolate |
| 387 // initialization. |
| 388 void SetUp(SetUpKind kind); |
297 void TearDown(); | 389 void TearDown(); |
298 | 390 |
299 // Garbage collection support. | 391 // Garbage collection support. |
300 void IterateBuiltins(ObjectVisitor* v); | 392 void IterateBuiltins(ObjectVisitor* v); |
301 | 393 |
302 // Disassembler support. | 394 // Disassembler support. |
303 const char* Lookup(byte* pc); | 395 const char* Lookup(byte* pc); |
304 | 396 |
305 enum Name { | 397 enum Name { |
306 #define DEF_ENUM_C(name, ignore) k##name, | 398 #define DEF_ENUM_C(name, ignore) k##name, |
307 #define DEF_ENUM_A(name, kind, state, extra) k##name, | 399 #define DEF_ENUM_A(name, kind, state, extra, extra2) k##name, |
308 BUILTIN_LIST_C(DEF_ENUM_C) | 400 BUILTIN_LIST_C(DEF_ENUM_C) |
309 BUILTIN_LIST_A(DEF_ENUM_A) | 401 BUILTIN_LIST_A(DEF_ENUM_A) |
310 BUILTIN_LIST_DEBUG_A(DEF_ENUM_A) | 402 BUILTIN_LIST_DEBUG_A(DEF_ENUM_A) |
311 #undef DEF_ENUM_C | 403 #undef DEF_ENUM_C |
312 #undef DEF_ENUM_A | 404 #undef DEF_ENUM_A |
313 builtin_count | 405 builtin_count |
314 }; | 406 }; |
315 | 407 |
316 enum CFunctionId { | 408 enum CFunctionId { |
317 #define DEF_ENUM_C(name, ignore) c_##name, | 409 #define DEF_ENUM_C(name, ignore) c_##name, |
318 BUILTIN_LIST_C(DEF_ENUM_C) | 410 BUILTIN_LIST_C(DEF_ENUM_C) |
319 #undef DEF_ENUM_C | 411 #undef DEF_ENUM_C |
320 cfunction_count | 412 cfunction_count |
321 }; | 413 }; |
322 | 414 |
323 enum JavaScript { | 415 enum JavaScript { |
324 #define DEF_ENUM(name, ignore) name, | 416 #define DEF_ENUM(name, ignore) name, |
325 BUILTINS_LIST_JS(DEF_ENUM) | 417 BUILTINS_LIST_JS(DEF_ENUM) |
326 #undef DEF_ENUM | 418 #undef DEF_ENUM |
327 id_count | 419 id_count |
328 }; | 420 }; |
329 | 421 |
330 #define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle<Code> name(); | 422 #define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle<Code> name(); |
331 #define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \ | 423 #define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra, extra2) \ |
332 Handle<Code> name(); | 424 Handle<Code> name(); |
333 BUILTIN_LIST_C(DECLARE_BUILTIN_ACCESSOR_C) | 425 BUILTIN_LIST_C(DECLARE_BUILTIN_ACCESSOR_C) |
334 BUILTIN_LIST_A(DECLARE_BUILTIN_ACCESSOR_A) | 426 BUILTIN_LIST_A(DECLARE_BUILTIN_ACCESSOR_A) |
335 BUILTIN_LIST_DEBUG_A(DECLARE_BUILTIN_ACCESSOR_A) | 427 BUILTIN_LIST_DEBUG_A(DECLARE_BUILTIN_ACCESSOR_A) |
336 #undef DECLARE_BUILTIN_ACCESSOR_C | 428 #undef DECLARE_BUILTIN_ACCESSOR_C |
337 #undef DECLARE_BUILTIN_ACCESSOR_A | 429 #undef DECLARE_BUILTIN_ACCESSOR_A |
338 | 430 |
339 Code* builtin(Name name) { | 431 Code* builtin(Name name) { |
340 // Code::cast cannot be used here since we access builtins | 432 // Code::cast cannot be used here since we access builtins |
341 // during the marking phase of mark sweep. See IC::Clear. | 433 // during the marking phase of mark sweep. See IC::Clear. |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
412 | 504 |
413 friend class BuiltinFunctionTable; | 505 friend class BuiltinFunctionTable; |
414 friend class Isolate; | 506 friend class Isolate; |
415 | 507 |
416 DISALLOW_COPY_AND_ASSIGN(Builtins); | 508 DISALLOW_COPY_AND_ASSIGN(Builtins); |
417 }; | 509 }; |
418 | 510 |
419 } } // namespace v8::internal | 511 } } // namespace v8::internal |
420 | 512 |
421 #endif // V8_BUILTINS_H_ | 513 #endif // V8_BUILTINS_H_ |
OLD | NEW |