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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V) | 51 CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V) |
52 | 52 |
53 #define CODE_AGE_LIST_COMPLETE(V) \ | 53 #define CODE_AGE_LIST_COMPLETE(V) \ |
54 V(NotExecuted) \ | 54 V(NotExecuted) \ |
55 V(ExecutedOnce) \ | 55 V(ExecutedOnce) \ |
56 V(NoAge) \ | 56 V(NoAge) \ |
57 CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V) | 57 CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V) |
58 | 58 |
59 #define DECLARE_CODE_AGE_BUILTIN(C, V) \ | 59 #define DECLARE_CODE_AGE_BUILTIN(C, V) \ |
60 V(Make##C##CodeYoungAgainOddMarking, BUILTIN, \ | 60 V(Make##C##CodeYoungAgainOddMarking, BUILTIN, \ |
61 UNINITIALIZED, Code::kNoExtraICState) \ | 61 UNINITIALIZED, IC::kNoExtraICState) \ |
62 V(Make##C##CodeYoungAgainEvenMarking, BUILTIN, \ | 62 V(Make##C##CodeYoungAgainEvenMarking, BUILTIN, \ |
63 UNINITIALIZED, Code::kNoExtraICState) | 63 UNINITIALIZED, IC::kNoExtraICState) |
64 | 64 |
65 | 65 |
66 // Define list of builtins implemented in C++. | 66 // Define list of builtins implemented in C++. |
67 #define BUILTIN_LIST_C(V) \ | 67 #define BUILTIN_LIST_C(V) \ |
68 V(Illegal, NO_EXTRA_ARGUMENTS) \ | 68 V(Illegal, NO_EXTRA_ARGUMENTS) \ |
69 \ | 69 \ |
70 V(EmptyFunction, NO_EXTRA_ARGUMENTS) \ | 70 V(EmptyFunction, NO_EXTRA_ARGUMENTS) \ |
71 \ | 71 \ |
72 V(ArrayPush, NO_EXTRA_ARGUMENTS) \ | 72 V(ArrayPush, NO_EXTRA_ARGUMENTS) \ |
73 V(ArrayPop, NO_EXTRA_ARGUMENTS) \ | 73 V(ArrayPop, NO_EXTRA_ARGUMENTS) \ |
74 V(ArrayShift, NO_EXTRA_ARGUMENTS) \ | 74 V(ArrayShift, NO_EXTRA_ARGUMENTS) \ |
75 V(ArrayUnshift, NO_EXTRA_ARGUMENTS) \ | 75 V(ArrayUnshift, NO_EXTRA_ARGUMENTS) \ |
76 V(ArraySlice, NO_EXTRA_ARGUMENTS) \ | 76 V(ArraySlice, NO_EXTRA_ARGUMENTS) \ |
77 V(ArraySplice, NO_EXTRA_ARGUMENTS) \ | 77 V(ArraySplice, NO_EXTRA_ARGUMENTS) \ |
78 V(ArrayConcat, NO_EXTRA_ARGUMENTS) \ | 78 V(ArrayConcat, NO_EXTRA_ARGUMENTS) \ |
79 \ | 79 \ |
80 V(HandleApiCall, NEEDS_CALLED_FUNCTION) \ | 80 V(HandleApiCall, NEEDS_CALLED_FUNCTION) \ |
81 V(HandleApiCallConstruct, NEEDS_CALLED_FUNCTION) \ | 81 V(HandleApiCallConstruct, NEEDS_CALLED_FUNCTION) \ |
82 V(HandleApiCallAsFunction, NO_EXTRA_ARGUMENTS) \ | 82 V(HandleApiCallAsFunction, NO_EXTRA_ARGUMENTS) \ |
83 V(HandleApiCallAsConstructor, NO_EXTRA_ARGUMENTS) \ | 83 V(HandleApiCallAsConstructor, NO_EXTRA_ARGUMENTS) \ |
84 \ | 84 \ |
85 V(StrictModePoisonPill, NO_EXTRA_ARGUMENTS) | 85 V(StrictModePoisonPill, NO_EXTRA_ARGUMENTS) |
86 | 86 |
87 // Define list of builtins implemented in assembly. | 87 // Define list of builtins implemented in assembly. |
88 #define BUILTIN_LIST_A(V) \ | 88 #define BUILTIN_LIST_A(V) \ |
89 V(ArgumentsAdaptorTrampoline, BUILTIN, UNINITIALIZED, \ | 89 V(ArgumentsAdaptorTrampoline, BUILTIN, UNINITIALIZED, \ |
90 Code::kNoExtraICState) \ | 90 IC::kNoExtraICState) \ |
91 V(InRecompileQueue, BUILTIN, UNINITIALIZED, \ | 91 V(InRecompileQueue, BUILTIN, UNINITIALIZED, \ |
92 Code::kNoExtraICState) \ | 92 IC::kNoExtraICState) \ |
93 V(JSConstructStubCountdown, BUILTIN, UNINITIALIZED, \ | 93 V(JSConstructStubCountdown, BUILTIN, UNINITIALIZED, \ |
94 Code::kNoExtraICState) \ | 94 IC::kNoExtraICState) \ |
95 V(JSConstructStubGeneric, BUILTIN, UNINITIALIZED, \ | 95 V(JSConstructStubGeneric, BUILTIN, UNINITIALIZED, \ |
96 Code::kNoExtraICState) \ | 96 IC::kNoExtraICState) \ |
97 V(JSConstructStubApi, BUILTIN, UNINITIALIZED, \ | 97 V(JSConstructStubApi, BUILTIN, UNINITIALIZED, \ |
98 Code::kNoExtraICState) \ | 98 IC::kNoExtraICState) \ |
99 V(JSEntryTrampoline, BUILTIN, UNINITIALIZED, \ | 99 V(JSEntryTrampoline, BUILTIN, UNINITIALIZED, \ |
100 Code::kNoExtraICState) \ | 100 IC::kNoExtraICState) \ |
101 V(JSConstructEntryTrampoline, BUILTIN, UNINITIALIZED, \ | 101 V(JSConstructEntryTrampoline, BUILTIN, UNINITIALIZED, \ |
102 Code::kNoExtraICState) \ | 102 IC::kNoExtraICState) \ |
103 V(LazyCompile, BUILTIN, UNINITIALIZED, \ | 103 V(LazyCompile, BUILTIN, UNINITIALIZED, \ |
104 Code::kNoExtraICState) \ | 104 IC::kNoExtraICState) \ |
105 V(LazyRecompile, BUILTIN, UNINITIALIZED, \ | 105 V(LazyRecompile, BUILTIN, UNINITIALIZED, \ |
106 Code::kNoExtraICState) \ | 106 IC::kNoExtraICState) \ |
107 V(ConcurrentRecompile, BUILTIN, UNINITIALIZED, \ | 107 V(ConcurrentRecompile, BUILTIN, UNINITIALIZED, \ |
108 Code::kNoExtraICState) \ | 108 IC::kNoExtraICState) \ |
109 V(NotifyDeoptimized, BUILTIN, UNINITIALIZED, \ | 109 V(NotifyDeoptimized, BUILTIN, UNINITIALIZED, \ |
110 Code::kNoExtraICState) \ | 110 IC::kNoExtraICState) \ |
111 V(NotifySoftDeoptimized, BUILTIN, UNINITIALIZED, \ | 111 V(NotifySoftDeoptimized, BUILTIN, UNINITIALIZED, \ |
112 Code::kNoExtraICState) \ | 112 IC::kNoExtraICState) \ |
113 V(NotifyLazyDeoptimized, BUILTIN, UNINITIALIZED, \ | 113 V(NotifyLazyDeoptimized, BUILTIN, UNINITIALIZED, \ |
114 Code::kNoExtraICState) \ | 114 IC::kNoExtraICState) \ |
115 V(NotifyStubFailure, BUILTIN, UNINITIALIZED, \ | 115 V(NotifyStubFailure, BUILTIN, UNINITIALIZED, \ |
116 Code::kNoExtraICState) \ | 116 IC::kNoExtraICState) \ |
117 V(NotifyStubFailureSaveDoubles, BUILTIN, UNINITIALIZED, \ | 117 V(NotifyStubFailureSaveDoubles, BUILTIN, UNINITIALIZED, \ |
118 Code::kNoExtraICState) \ | 118 IC::kNoExtraICState) \ |
119 \ | 119 \ |
120 V(LoadIC_Miss, BUILTIN, UNINITIALIZED, \ | 120 V(LoadIC_Miss, BUILTIN, UNINITIALIZED, \ |
121 Code::kNoExtraICState) \ | 121 IC::kNoExtraICState) \ |
122 V(KeyedLoadIC_Miss, BUILTIN, UNINITIALIZED, \ | 122 V(KeyedLoadIC_Miss, BUILTIN, UNINITIALIZED, \ |
123 Code::kNoExtraICState) \ | 123 IC::kNoExtraICState) \ |
124 V(StoreIC_Miss, BUILTIN, UNINITIALIZED, \ | 124 V(StoreIC_Miss, BUILTIN, UNINITIALIZED, \ |
125 Code::kNoExtraICState) \ | 125 IC::kNoExtraICState) \ |
126 V(KeyedStoreIC_Miss, BUILTIN, UNINITIALIZED, \ | 126 V(KeyedStoreIC_Miss, BUILTIN, UNINITIALIZED, \ |
127 Code::kNoExtraICState) \ | 127 IC::kNoExtraICState) \ |
128 V(LoadIC_Initialize, LOAD_IC, UNINITIALIZED, \ | 128 V(LoadIC_Initialize, LOAD_IC, UNINITIALIZED, \ |
129 Code::kNoExtraICState) \ | 129 IC::kNoExtraICState) \ |
130 V(LoadIC_PreMonomorphic, LOAD_IC, PREMONOMORPHIC, \ | 130 V(LoadIC_PreMonomorphic, LOAD_IC, PREMONOMORPHIC, \ |
131 Code::kNoExtraICState) \ | 131 IC::kNoExtraICState) \ |
132 V(LoadIC_Megamorphic, LOAD_IC, MEGAMORPHIC, \ | 132 V(LoadIC_Megamorphic, LOAD_IC, MEGAMORPHIC, \ |
133 Code::kNoExtraICState) \ | 133 IC::kNoExtraICState) \ |
134 V(LoadIC_Getter_ForDeopt, LOAD_IC, MONOMORPHIC, \ | 134 V(LoadIC_Getter_ForDeopt, LOAD_IC, MONOMORPHIC, \ |
135 Code::kNoExtraICState) \ | 135 IC::kNoExtraICState) \ |
136 \ | 136 \ |
137 V(KeyedLoadIC_Initialize, KEYED_LOAD_IC, UNINITIALIZED, \ | 137 V(KeyedLoadIC_Initialize, KEYED_LOAD_IC, UNINITIALIZED, \ |
138 Code::kNoExtraICState) \ | 138 IC::kNoExtraICState) \ |
139 V(KeyedLoadIC_PreMonomorphic, KEYED_LOAD_IC, PREMONOMORPHIC, \ | 139 V(KeyedLoadIC_PreMonomorphic, KEYED_LOAD_IC, PREMONOMORPHIC, \ |
140 Code::kNoExtraICState) \ | 140 IC::kNoExtraICState) \ |
141 V(KeyedLoadIC_Generic, KEYED_LOAD_IC, GENERIC, \ | 141 V(KeyedLoadIC_Generic, KEYED_LOAD_IC, GENERIC, \ |
142 Code::kNoExtraICState) \ | 142 IC::kNoExtraICState) \ |
143 V(KeyedLoadIC_String, KEYED_LOAD_IC, MEGAMORPHIC, \ | 143 V(KeyedLoadIC_String, KEYED_LOAD_IC, MEGAMORPHIC, \ |
144 Code::kNoExtraICState) \ | 144 IC::kNoExtraICState) \ |
145 V(KeyedLoadIC_IndexedInterceptor, KEYED_LOAD_IC, MONOMORPHIC, \ | 145 V(KeyedLoadIC_IndexedInterceptor, KEYED_LOAD_IC, MONOMORPHIC, \ |
146 Code::kNoExtraICState) \ | 146 IC::kNoExtraICState) \ |
147 V(KeyedLoadIC_NonStrictArguments, KEYED_LOAD_IC, MONOMORPHIC, \ | 147 V(KeyedLoadIC_NonStrictArguments, KEYED_LOAD_IC, MONOMORPHIC, \ |
148 Code::kNoExtraICState) \ | 148 IC::kNoExtraICState) \ |
149 \ | 149 \ |
150 V(StoreIC_Initialize, STORE_IC, UNINITIALIZED, \ | 150 V(StoreIC_Initialize, STORE_IC, UNINITIALIZED, \ |
151 Code::kNoExtraICState) \ | 151 IC::kNoExtraICState) \ |
152 V(StoreIC_PreMonomorphic, STORE_IC, PREMONOMORPHIC, \ | 152 V(StoreIC_PreMonomorphic, STORE_IC, PREMONOMORPHIC, \ |
153 Code::kNoExtraICState) \ | 153 IC::kNoExtraICState) \ |
154 V(StoreIC_Megamorphic, STORE_IC, MEGAMORPHIC, \ | 154 V(StoreIC_Megamorphic, STORE_IC, MEGAMORPHIC, \ |
155 Code::kNoExtraICState) \ | 155 IC::kNoExtraICState) \ |
156 V(StoreIC_Generic, STORE_IC, GENERIC, \ | 156 V(StoreIC_Generic, STORE_IC, GENERIC, \ |
157 Code::kNoExtraICState) \ | 157 IC::kNoExtraICState) \ |
158 V(StoreIC_Generic_Strict, STORE_IC, GENERIC, \ | 158 V(StoreIC_Generic_Strict, STORE_IC, GENERIC, \ |
159 kStrictMode) \ | 159 StoreIC::kStrictModeICState) \ |
160 V(StoreIC_GlobalProxy, STORE_IC, GENERIC, \ | 160 V(StoreIC_GlobalProxy, STORE_IC, GENERIC, \ |
161 Code::kNoExtraICState) \ | 161 IC::kNoExtraICState) \ |
162 V(StoreIC_Initialize_Strict, STORE_IC, UNINITIALIZED, \ | 162 V(StoreIC_Initialize_Strict, STORE_IC, UNINITIALIZED, \ |
163 kStrictMode) \ | 163 StoreIC::kStrictModeICState) \ |
164 V(StoreIC_PreMonomorphic_Strict, STORE_IC, PREMONOMORPHIC, \ | 164 V(StoreIC_PreMonomorphic_Strict, STORE_IC, PREMONOMORPHIC, \ |
165 kStrictMode) \ | 165 StoreIC::kStrictModeICState) \ |
166 V(StoreIC_Megamorphic_Strict, STORE_IC, MEGAMORPHIC, \ | 166 V(StoreIC_Megamorphic_Strict, STORE_IC, MEGAMORPHIC, \ |
167 kStrictMode) \ | 167 StoreIC::kStrictModeICState) \ |
168 V(StoreIC_GlobalProxy_Strict, STORE_IC, GENERIC, \ | 168 V(StoreIC_GlobalProxy_Strict, STORE_IC, GENERIC, \ |
169 kStrictMode) \ | 169 StoreIC::kStrictModeICState) \ |
170 V(StoreIC_Setter_ForDeopt, STORE_IC, MONOMORPHIC, \ | 170 V(StoreIC_Setter_ForDeopt, STORE_IC, MONOMORPHIC, \ |
171 kStrictMode) \ | 171 StoreIC::kStrictModeICState) \ |
172 \ | 172 \ |
173 V(KeyedStoreIC_Initialize, KEYED_STORE_IC, UNINITIALIZED, \ | 173 V(KeyedStoreIC_Initialize, KEYED_STORE_IC, UNINITIALIZED, \ |
174 Code::kNoExtraICState) \ | 174 IC::kNoExtraICState) \ |
175 V(KeyedStoreIC_PreMonomorphic, KEYED_STORE_IC, PREMONOMORPHIC, \ | 175 V(KeyedStoreIC_PreMonomorphic, KEYED_STORE_IC, PREMONOMORPHIC, \ |
176 Code::kNoExtraICState) \ | 176 IC::kNoExtraICState) \ |
177 V(KeyedStoreIC_Generic, KEYED_STORE_IC, GENERIC, \ | 177 V(KeyedStoreIC_Generic, KEYED_STORE_IC, GENERIC, \ |
178 Code::kNoExtraICState) \ | 178 IC::kNoExtraICState) \ |
179 \ | 179 \ |
180 V(KeyedStoreIC_Initialize_Strict, KEYED_STORE_IC, UNINITIALIZED, \ | 180 V(KeyedStoreIC_Initialize_Strict, KEYED_STORE_IC, UNINITIALIZED, \ |
181 kStrictMode) \ | 181 StoreIC::kStrictModeICState) \ |
182 V(KeyedStoreIC_PreMonomorphic_Strict, KEYED_STORE_IC, PREMONOMORPHIC, \ | 182 V(KeyedStoreIC_PreMonomorphic_Strict, KEYED_STORE_IC, PREMONOMORPHIC, \ |
183 kStrictMode) \ | 183 StoreIC::kStrictModeICState) \ |
184 V(KeyedStoreIC_Generic_Strict, KEYED_STORE_IC, GENERIC, \ | 184 V(KeyedStoreIC_Generic_Strict, KEYED_STORE_IC, GENERIC, \ |
185 kStrictMode) \ | 185 StoreIC::kStrictModeICState) \ |
186 V(KeyedStoreIC_NonStrictArguments, KEYED_STORE_IC, MONOMORPHIC, \ | 186 V(KeyedStoreIC_NonStrictArguments, KEYED_STORE_IC, MONOMORPHIC, \ |
187 Code::kNoExtraICState) \ | 187 IC::kNoExtraICState) \ |
188 \ | 188 \ |
189 /* Uses KeyedLoadIC_Initialize; must be after in list. */ \ | 189 /* Uses KeyedLoadIC_Initialize; must be after in list. */ \ |
190 V(FunctionCall, BUILTIN, UNINITIALIZED, \ | 190 V(FunctionCall, BUILTIN, UNINITIALIZED, \ |
191 Code::kNoExtraICState) \ | 191 IC::kNoExtraICState) \ |
192 V(FunctionApply, BUILTIN, UNINITIALIZED, \ | 192 V(FunctionApply, BUILTIN, UNINITIALIZED, \ |
193 Code::kNoExtraICState) \ | 193 IC::kNoExtraICState) \ |
194 \ | 194 \ |
195 V(InternalArrayCode, BUILTIN, UNINITIALIZED, \ | 195 V(InternalArrayCode, BUILTIN, UNINITIALIZED, \ |
196 Code::kNoExtraICState) \ | 196 IC::kNoExtraICState) \ |
197 V(ArrayCode, BUILTIN, UNINITIALIZED, \ | 197 V(ArrayCode, BUILTIN, UNINITIALIZED, \ |
198 Code::kNoExtraICState) \ | 198 IC::kNoExtraICState) \ |
199 \ | 199 \ |
200 V(StringConstructCode, BUILTIN, UNINITIALIZED, \ | 200 V(StringConstructCode, BUILTIN, UNINITIALIZED, \ |
201 Code::kNoExtraICState) \ | 201 IC::kNoExtraICState) \ |
202 \ | 202 \ |
203 V(OnStackReplacement, BUILTIN, UNINITIALIZED, \ | 203 V(OnStackReplacement, BUILTIN, UNINITIALIZED, \ |
204 Code::kNoExtraICState) \ | 204 IC::kNoExtraICState) \ |
205 V(InterruptCheck, BUILTIN, UNINITIALIZED, \ | 205 V(InterruptCheck, BUILTIN, UNINITIALIZED, \ |
206 Code::kNoExtraICState) \ | 206 IC::kNoExtraICState) \ |
207 V(OsrAfterStackCheck, BUILTIN, UNINITIALIZED, \ | 207 V(OsrAfterStackCheck, BUILTIN, UNINITIALIZED, \ |
208 Code::kNoExtraICState) \ | 208 IC::kNoExtraICState) \ |
209 V(StackCheck, BUILTIN, UNINITIALIZED, \ | 209 V(StackCheck, BUILTIN, UNINITIALIZED, \ |
210 Code::kNoExtraICState) \ | 210 IC::kNoExtraICState) \ |
211 \ | 211 \ |
212 V(MarkCodeAsExecutedOnce, BUILTIN, UNINITIALIZED, \ | 212 V(MarkCodeAsExecutedOnce, BUILTIN, UNINITIALIZED, \ |
213 Code::kNoExtraICState) \ | 213 IC::kNoExtraICState) \ |
214 V(MarkCodeAsExecutedTwice, BUILTIN, UNINITIALIZED, \ | 214 V(MarkCodeAsExecutedTwice, BUILTIN, UNINITIALIZED, \ |
215 Code::kNoExtraICState) \ | 215 IC::kNoExtraICState) \ |
216 CODE_AGE_LIST_WITH_ARG(DECLARE_CODE_AGE_BUILTIN, V) | 216 CODE_AGE_LIST_WITH_ARG(DECLARE_CODE_AGE_BUILTIN, V) |
217 | 217 |
218 // Define list of builtin handlers implemented in assembly. | 218 // Define list of builtin handlers implemented in assembly. |
219 #define BUILTIN_LIST_H(V) \ | 219 #define BUILTIN_LIST_H(V) \ |
220 V(LoadIC_Slow, LOAD_IC) \ | 220 V(LoadIC_Slow, LOAD_IC) \ |
221 V(KeyedLoadIC_Slow, KEYED_LOAD_IC) \ | 221 V(KeyedLoadIC_Slow, KEYED_LOAD_IC) \ |
222 V(StoreIC_Slow, STORE_IC) \ | 222 V(StoreIC_Slow, STORE_IC) \ |
223 V(KeyedStoreIC_Slow, KEYED_STORE_IC) \ | 223 V(KeyedStoreIC_Slow, KEYED_STORE_IC) \ |
224 V(LoadIC_Normal, LOAD_IC) \ | 224 V(LoadIC_Normal, LOAD_IC) \ |
225 V(StoreIC_Normal, STORE_IC) | 225 V(StoreIC_Normal, STORE_IC) |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
434 | 434 |
435 friend class BuiltinFunctionTable; | 435 friend class BuiltinFunctionTable; |
436 friend class Isolate; | 436 friend class Isolate; |
437 | 437 |
438 DISALLOW_COPY_AND_ASSIGN(Builtins); | 438 DISALLOW_COPY_AND_ASSIGN(Builtins); |
439 }; | 439 }; |
440 | 440 |
441 } } // namespace v8::internal | 441 } } // namespace v8::internal |
442 | 442 |
443 #endif // V8_BUILTINS_H_ | 443 #endif // V8_BUILTINS_H_ |
OLD | NEW |