Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: src/builtins/builtins.h

Issue 2152923003: [builtins] remove redundant list of generator declarations. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@initbuiltins
Patch Set: rebase Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/builtins/builtins.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_BUILTINS_BUILTINS_H_ 5 #ifndef V8_BUILTINS_BUILTINS_H_
6 #define V8_BUILTINS_BUILTINS_H_ 6 #define V8_BUILTINS_BUILTINS_H_
7 7
8 #include "src/base/flags.h" 8 #include "src/base/flags.h"
9 #include "src/handles.h" 9 #include "src/handles.h"
10 10
(...skipping 29 matching lines...) Expand all
40 // TFJ: Builtin in Turbofan, with JS linkage (callable as Javascript function). 40 // TFJ: Builtin in Turbofan, with JS linkage (callable as Javascript function).
41 // Args: name, arguments count 41 // Args: name, arguments count
42 // TFS: Builtin in Turbofan, with CodeStub linkage. 42 // TFS: Builtin in Turbofan, with CodeStub linkage.
43 // Args: name, code kind, extra IC state, interface descriptor 43 // Args: name, code kind, extra IC state, interface descriptor
44 // ASM: Builtin in platform-dependent assembly. 44 // ASM: Builtin in platform-dependent assembly.
45 // Args: name 45 // Args: name
46 // ASH: Handlers implemented in platform-dependent assembly. 46 // ASH: Handlers implemented in platform-dependent assembly.
47 // Args: name, code kind, extra IC state 47 // Args: name, code kind, extra IC state
48 // DBG: Builtin in platform-dependent assembly, used by the debugger. 48 // DBG: Builtin in platform-dependent assembly, used by the debugger.
49 // Args: name 49 // Args: name
50 #define BUILTIN_LIST(CPP, API, TFJ, TFS, ASM, ASH, DBG) \ 50 #define BUILTIN_LIST(CPP, API, TFJ, TFS, ASM, ASH, DBG) \
51 /* Handlers */ \ 51 /* Handlers */ \
52 ASM(KeyedLoadIC_Miss) \ 52 ASM(KeyedLoadIC_Miss) \
53 ASM(KeyedStoreIC_Miss) \ 53 ASM(KeyedStoreIC_Miss) \
54 ASH(LoadIC_Getter_ForDeopt, LOAD_IC, kNoExtraICState) \ 54 ASH(LoadIC_Getter_ForDeopt, LOAD_IC, kNoExtraICState) \
55 ASH(KeyedLoadIC_Megamorphic, KEYED_LOAD_IC, kNoExtraICState) \ 55 ASH(KeyedLoadIC_Megamorphic, KEYED_LOAD_IC, kNoExtraICState) \
56 ASH(StoreIC_Setter_ForDeopt, STORE_IC, StoreICState::kStrictModeState) \ 56 ASH(StoreIC_Setter_ForDeopt, STORE_IC, StoreICState::kStrictModeState) \
57 ASH(KeyedStoreIC_Megamorphic, KEYED_STORE_IC, kNoExtraICState) \ 57 ASH(KeyedStoreIC_Megamorphic, KEYED_STORE_IC, kNoExtraICState) \
58 ASH(KeyedStoreIC_Megamorphic_Strict, KEYED_STORE_IC, \ 58 ASH(KeyedStoreIC_Megamorphic_Strict, KEYED_STORE_IC, \
59 StoreICState::kStrictModeState) \ 59 StoreICState::kStrictModeState) \
60 ASH(KeyedLoadIC_Slow, HANDLER, Code::KEYED_LOAD_IC) \ 60 ASH(KeyedLoadIC_Slow, HANDLER, Code::KEYED_LOAD_IC) \
61 ASH(KeyedStoreIC_Slow, HANDLER, Code::KEYED_STORE_IC) \ 61 ASH(KeyedStoreIC_Slow, HANDLER, Code::KEYED_STORE_IC) \
62 ASH(LoadIC_Normal, HANDLER, Code::LOAD_IC) \ 62 ASH(LoadIC_Normal, HANDLER, Code::LOAD_IC) \
63 ASH(StoreIC_Normal, HANDLER, Code::STORE_IC) \ 63 ASH(StoreIC_Normal, HANDLER, Code::STORE_IC) \
64 TFS(LoadGlobalIC_Miss, BUILTIN, kNoExtraICState, LoadGlobalWithVector) \ 64 TFS(LoadGlobalIC_Miss, BUILTIN, kNoExtraICState, LoadGlobalWithVector) \
65 TFS(LoadGlobalIC_SlowNotInsideTypeof, HANDLER, Code::LOAD_GLOBAL_IC, \ 65 TFS(LoadGlobalIC_SlowNotInsideTypeof, HANDLER, Code::LOAD_GLOBAL_IC, \
66 LoadGlobalWithVector) \ 66 LoadGlobalWithVector) \
67 TFS(LoadGlobalIC_SlowInsideTypeof, HANDLER, Code::LOAD_GLOBAL_IC, \ 67 TFS(LoadGlobalIC_SlowInsideTypeof, HANDLER, Code::LOAD_GLOBAL_IC, \
68 LoadGlobalWithVector) \ 68 LoadGlobalWithVector) \
69 TFS(LoadIC_Miss, BUILTIN, kNoExtraICState, LoadWithVector) \ 69 TFS(LoadIC_Miss, BUILTIN, kNoExtraICState, LoadWithVector) \
70 TFS(LoadIC_Slow, HANDLER, Code::LOAD_IC, LoadWithVector) \ 70 TFS(LoadIC_Slow, HANDLER, Code::LOAD_IC, LoadWithVector) \
71 TFS(StoreIC_Miss, BUILTIN, kNoExtraICState, StoreWithVector) \ 71 TFS(StoreIC_Miss, BUILTIN, kNoExtraICState, StoreWithVector) \
72 TFS(StoreIC_SlowSloppy, HANDLER, Code::STORE_IC, StoreWithVector) \ 72 TFS(StoreIC_SlowSloppy, HANDLER, Code::STORE_IC, StoreWithVector) \
73 TFS(StoreIC_SlowStrict, HANDLER, Code::STORE_IC, StoreWithVector) \ 73 TFS(StoreIC_SlowStrict, HANDLER, Code::STORE_IC, StoreWithVector) \
74 /* Code aging */ \ 74 \
75 CODE_AGE_LIST_WITH_ARG(DECLARE_CODE_AGE_BUILTIN, ASM) \ 75 /* Code aging */ \
76 /* Calls */ \ 76 CODE_AGE_LIST_WITH_ARG(DECLARE_CODE_AGE_BUILTIN, ASM) \
77 ASM(ArgumentsAdaptorTrampoline) \ 77 \
78 ASM(CallFunction_ReceiverIsNullOrUndefined) \ 78 /* Calls */ \
79 ASM(CallFunction_ReceiverIsNotNullOrUndefined) \ 79 ASM(ArgumentsAdaptorTrampoline) \
80 ASM(CallFunction_ReceiverIsAny) \ 80 /* ES6 section 9.2.1 [[Call]] ( thisArgument, argumentsList) */ \
81 ASM(TailCallFunction_ReceiverIsNullOrUndefined) \ 81 ASM(CallFunction_ReceiverIsNullOrUndefined) \
82 ASM(TailCallFunction_ReceiverIsNotNullOrUndefined) \ 82 ASM(CallFunction_ReceiverIsNotNullOrUndefined) \
83 ASM(TailCallFunction_ReceiverIsAny) \ 83 ASM(CallFunction_ReceiverIsAny) \
84 ASM(CallBoundFunction) \ 84 ASM(TailCallFunction_ReceiverIsNullOrUndefined) \
85 ASM(TailCallBoundFunction) \ 85 ASM(TailCallFunction_ReceiverIsNotNullOrUndefined) \
86 ASM(Call_ReceiverIsNullOrUndefined) \ 86 ASM(TailCallFunction_ReceiverIsAny) \
87 ASM(Call_ReceiverIsNotNullOrUndefined) \ 87 /* ES6 section 9.4.1.1 [[Call]] ( thisArgument, argumentsList) */ \
88 ASM(Call_ReceiverIsAny) \ 88 ASM(CallBoundFunction) \
89 ASM(TailCall_ReceiverIsNullOrUndefined) \ 89 ASM(TailCallBoundFunction) \
90 ASM(TailCall_ReceiverIsNotNullOrUndefined) \ 90 /* ES6 section 7.3.12 Call(F, V, [argumentsList]) */ \
91 ASM(TailCall_ReceiverIsAny) \ 91 ASM(Call_ReceiverIsNullOrUndefined) \
92 /* Construct */ \ 92 ASM(Call_ReceiverIsNotNullOrUndefined) \
93 ASM(ConstructFunction) \ 93 ASM(Call_ReceiverIsAny) \
94 ASM(ConstructBoundFunction) \ 94 ASM(TailCall_ReceiverIsNullOrUndefined) \
95 ASM(ConstructedNonConstructable) \ 95 ASM(TailCall_ReceiverIsNotNullOrUndefined) \
96 ASM(ConstructProxy) \ 96 ASM(TailCall_ReceiverIsAny) \
97 ASM(Construct) \ 97 \
98 ASM(JSConstructStubApi) \ 98 /* Construct */ \
99 ASM(JSConstructStubGeneric) \ 99 /* ES6 section 9.2.2 [[Construct]] ( argumentsList, newTarget) */ \
100 ASM(JSBuiltinsConstructStub) \ 100 ASM(ConstructFunction) \
101 ASM(JSBuiltinsConstructStubForDerived) \ 101 /* ES6 section 9.4.1.2 [[Construct]] (argumentsList, newTarget) */ \
102 /* Apply and entries */ \ 102 ASM(ConstructBoundFunction) \
103 ASM(Apply) \ 103 ASM(ConstructedNonConstructable) \
104 ASM(JSEntryTrampoline) \ 104 /* ES6 section 9.5.14 [[Construct]] ( argumentsList, newTarget) */ \
105 ASM(JSConstructEntryTrampoline) \ 105 ASM(ConstructProxy) \
106 ASM(ResumeGeneratorTrampoline) \ 106 /* ES6 section 7.3.13 Construct (F, [argumentsList], [newTarget]) */ \
107 /* Stack and interrupt check */ \ 107 ASM(Construct) \
108 ASM(InterruptCheck) \ 108 ASM(JSConstructStubApi) \
109 ASM(StackCheck) \ 109 ASM(JSConstructStubGeneric) \
110 /* Interpreter */ \ 110 ASM(JSBuiltinsConstructStub) \
111 ASM(InterpreterEntryTrampoline) \ 111 ASM(JSBuiltinsConstructStubForDerived) \
112 ASM(InterpreterMarkBaselineOnReturn) \ 112 \
113 ASM(InterpreterPushArgsAndCallFunction) \ 113 /* Apply and entries */ \
114 ASM(InterpreterPushArgsAndTailCallFunction) \ 114 ASM(Apply) \
115 ASM(InterpreterPushArgsAndCall) \ 115 ASM(JSEntryTrampoline) \
116 ASM(InterpreterPushArgsAndTailCall) \ 116 ASM(JSConstructEntryTrampoline) \
117 ASM(InterpreterPushArgsAndConstruct) \ 117 ASM(ResumeGeneratorTrampoline) \
118 ASM(InterpreterEnterBytecodeDispatch) \ 118 \
119 /* Code life-cycle */ \ 119 /* Stack and interrupt check */ \
120 ASM(CompileLazy) \ 120 ASM(InterruptCheck) \
121 ASM(CompileBaseline) \ 121 ASM(StackCheck) \
122 ASM(CompileOptimized) \ 122 \
123 ASM(CompileOptimizedConcurrent) \ 123 /* Interpreter */ \
124 ASM(InOptimizationQueue) \ 124 ASM(InterpreterEntryTrampoline) \
125 ASM(InstantiateAsmJs) \ 125 ASM(InterpreterMarkBaselineOnReturn) \
126 ASM(MarkCodeAsToBeExecutedOnce) \ 126 ASM(InterpreterPushArgsAndCallFunction) \
127 ASM(MarkCodeAsExecutedOnce) \ 127 ASM(InterpreterPushArgsAndTailCallFunction) \
128 ASM(MarkCodeAsExecutedTwice) \ 128 ASM(InterpreterPushArgsAndCall) \
129 ASM(NotifyDeoptimized) \ 129 ASM(InterpreterPushArgsAndTailCall) \
130 ASM(NotifySoftDeoptimized) \ 130 ASM(InterpreterPushArgsAndConstruct) \
131 ASM(NotifyLazyDeoptimized) \ 131 ASM(InterpreterEnterBytecodeDispatch) \
132 ASM(NotifyStubFailure) \ 132 \
133 ASM(NotifyStubFailureSaveDoubles) \ 133 /* Code life-cycle */ \
134 ASM(OnStackReplacement) \ 134 ASM(CompileLazy) \
135 /* API callback handling */ \ 135 ASM(CompileBaseline) \
136 API(HandleApiCall) \ 136 ASM(CompileOptimized) \
137 API(HandleApiCallAsFunction) \ 137 ASM(CompileOptimizedConcurrent) \
138 API(HandleApiCallAsConstructor) \ 138 ASM(InOptimizationQueue) \
139 ASM(HandleFastApiCall) \ 139 ASM(InstantiateAsmJs) \
140 /* Adapters for Turbofan into runtime */ \ 140 ASM(MarkCodeAsToBeExecutedOnce) \
141 ASM(AllocateInNewSpace) \ 141 ASM(MarkCodeAsExecutedOnce) \
142 ASM(AllocateInOldSpace) \ 142 ASM(MarkCodeAsExecutedTwice) \
143 /* Debugger */ \ 143 ASM(NotifyDeoptimized) \
144 DBG(Return_DebugBreak) \ 144 ASM(NotifySoftDeoptimized) \
145 DBG(Slot_DebugBreak) \ 145 ASM(NotifyLazyDeoptimized) \
146 DBG(FrameDropper_LiveEdit) \ 146 ASM(NotifyStubFailure) \
147 /* Type conversions */ \ 147 ASM(NotifyStubFailureSaveDoubles) \
148 TFS(OrdinaryToPrimitive_Number, BUILTIN, kNoExtraICState, TypeConversion) \ 148 ASM(OnStackReplacement) \
149 TFS(OrdinaryToPrimitive_String, BUILTIN, kNoExtraICState, TypeConversion) \ 149 \
150 TFS(NonPrimitiveToPrimitive_Default, BUILTIN, kNoExtraICState, \ 150 /* API callback handling */ \
151 TypeConversion) \ 151 API(HandleApiCall) \
152 TFS(NonPrimitiveToPrimitive_Number, BUILTIN, kNoExtraICState, \ 152 API(HandleApiCallAsFunction) \
153 TypeConversion) \ 153 API(HandleApiCallAsConstructor) \
154 TFS(NonPrimitiveToPrimitive_String, BUILTIN, kNoExtraICState, \ 154 ASM(HandleFastApiCall) \
155 TypeConversion) \ 155 \
156 ASM(StringToNumber) \ 156 /* Adapters for Turbofan into runtime */ \
157 TFS(NonNumberToNumber, BUILTIN, kNoExtraICState, TypeConversion) \ 157 ASM(AllocateInNewSpace) \
158 ASM(ToNumber) \ 158 ASM(AllocateInOldSpace) \
159 \ 159 \
160 /* Built-in functions for Javascript */ \ 160 /* Debugger */ \
161 /* Special internal builtins */ \ 161 DBG(Return_DebugBreak) \
162 CPP(EmptyFunction) \ 162 DBG(Slot_DebugBreak) \
163 CPP(Illegal) \ 163 DBG(FrameDropper_LiveEdit) \
164 CPP(RestrictedFunctionPropertiesThrower) \ 164 \
165 CPP(RestrictedStrictArgumentsPropertiesThrower) \ 165 /* Type conversions */ \
166 /* Array */ \ 166 TFS(OrdinaryToPrimitive_Number, BUILTIN, kNoExtraICState, TypeConversion) \
167 ASM(ArrayCode) \ 167 TFS(OrdinaryToPrimitive_String, BUILTIN, kNoExtraICState, TypeConversion) \
168 ASM(InternalArrayCode) \ 168 TFS(NonPrimitiveToPrimitive_Default, BUILTIN, kNoExtraICState, \
169 CPP(ArrayConcat) \ 169 TypeConversion) \
170 TFJ(ArrayIsArray, 2) \ 170 TFS(NonPrimitiveToPrimitive_Number, BUILTIN, kNoExtraICState, \
171 CPP(ArrayPop) \ 171 TypeConversion) \
172 CPP(ArrayPush) \ 172 TFS(NonPrimitiveToPrimitive_String, BUILTIN, kNoExtraICState, \
173 CPP(ArrayShift) \ 173 TypeConversion) \
174 CPP(ArraySlice) \ 174 ASM(StringToNumber) \
175 CPP(ArraySplice) \ 175 TFS(NonNumberToNumber, BUILTIN, kNoExtraICState, TypeConversion) \
176 CPP(ArrayUnshift) \ 176 ASM(ToNumber) \
177 /* ArrayBuffer */ \ 177 \
178 CPP(ArrayBufferConstructor) \ 178 /* Built-in functions for Javascript */ \
179 CPP(ArrayBufferConstructor_ConstructStub) \ 179 /* Special internal builtins */ \
180 CPP(ArrayBufferPrototypeGetByteLength) \ 180 CPP(EmptyFunction) \
181 CPP(ArrayBufferIsView) \ 181 CPP(Illegal) \
182 /* Boolean */ \ 182 CPP(RestrictedFunctionPropertiesThrower) \
183 CPP(BooleanConstructor) \ 183 CPP(RestrictedStrictArgumentsPropertiesThrower) \
184 CPP(BooleanConstructor_ConstructStub) \ 184 \
185 TFJ(BooleanPrototypeToString, 1) \ 185 /* Array */ \
186 TFJ(BooleanPrototypeValueOf, 1) \ 186 ASM(ArrayCode) \
187 /* DataView */ \ 187 ASM(InternalArrayCode) \
188 CPP(DataViewConstructor) \ 188 CPP(ArrayConcat) \
189 CPP(DataViewConstructor_ConstructStub) \ 189 /* ES6 section 22.1.2.2 Array.isArray */ \
190 CPP(DataViewPrototypeGetBuffer) \ 190 TFJ(ArrayIsArray, 2) \
191 CPP(DataViewPrototypeGetByteLength) \ 191 CPP(ArrayPop) \
192 CPP(DataViewPrototypeGetByteOffset) \ 192 CPP(ArrayPush) \
193 /* Date */ \ 193 CPP(ArrayShift) \
194 CPP(DateConstructor) \ 194 CPP(ArraySlice) \
195 CPP(DateConstructor_ConstructStub) \ 195 CPP(ArraySplice) \
196 CPP(DateNow) \ 196 CPP(ArrayUnshift) \
197 CPP(DateParse) \ 197 \
198 CPP(DateUTC) \ 198 /* ArrayBuffer */ \
199 CPP(DatePrototypeSetDate) \ 199 CPP(ArrayBufferConstructor) \
200 CPP(DatePrototypeSetFullYear) \ 200 CPP(ArrayBufferConstructor_ConstructStub) \
201 CPP(DatePrototypeSetHours) \ 201 CPP(ArrayBufferPrototypeGetByteLength) \
202 CPP(DatePrototypeSetMilliseconds) \ 202 CPP(ArrayBufferIsView) \
203 CPP(DatePrototypeSetMinutes) \ 203 \
204 CPP(DatePrototypeSetMonth) \ 204 /* Boolean */ \
205 CPP(DatePrototypeSetSeconds) \ 205 CPP(BooleanConstructor) \
206 CPP(DatePrototypeSetTime) \ 206 CPP(BooleanConstructor_ConstructStub) \
207 CPP(DatePrototypeSetUTCDate) \ 207 /* ES6 section 19.3.3.2 Boolean.prototype.toString ( ) */ \
208 CPP(DatePrototypeSetUTCFullYear) \ 208 TFJ(BooleanPrototypeToString, 1) \
209 CPP(DatePrototypeSetUTCHours) \ 209 /* ES6 section 19.3.3.3 Boolean.prototype.valueOf ( ) */ \
210 CPP(DatePrototypeSetUTCMilliseconds) \ 210 TFJ(BooleanPrototypeValueOf, 1) \
211 CPP(DatePrototypeSetUTCMinutes) \ 211 \
212 CPP(DatePrototypeSetUTCMonth) \ 212 /* DataView */ \
213 CPP(DatePrototypeSetUTCSeconds) \ 213 CPP(DataViewConstructor) \
214 CPP(DatePrototypeToDateString) \ 214 CPP(DataViewConstructor_ConstructStub) \
215 CPP(DatePrototypeToISOString) \ 215 CPP(DataViewPrototypeGetBuffer) \
216 CPP(DatePrototypeToPrimitive) \ 216 CPP(DataViewPrototypeGetByteLength) \
217 CPP(DatePrototypeToUTCString) \ 217 CPP(DataViewPrototypeGetByteOffset) \
218 CPP(DatePrototypeToString) \ 218 \
219 CPP(DatePrototypeToTimeString) \ 219 /* Date */ \
220 CPP(DatePrototypeValueOf) \ 220 CPP(DateConstructor) \
221 ASM(DatePrototypeGetDate) \ 221 CPP(DateConstructor_ConstructStub) \
222 ASM(DatePrototypeGetDay) \ 222 /* ES6 section 20.3.4.2 Date.prototype.getDate ( ) */ \
223 ASM(DatePrototypeGetFullYear) \ 223 ASM(DatePrototypeGetDate) \
224 ASM(DatePrototypeGetHours) \ 224 /* ES6 section 20.3.4.3 Date.prototype.getDay ( ) */ \
225 ASM(DatePrototypeGetMilliseconds) \ 225 ASM(DatePrototypeGetDay) \
226 ASM(DatePrototypeGetMinutes) \ 226 /* ES6 section 20.3.4.4 Date.prototype.getFullYear ( ) */ \
227 ASM(DatePrototypeGetMonth) \ 227 ASM(DatePrototypeGetFullYear) \
228 ASM(DatePrototypeGetSeconds) \ 228 /* ES6 section 20.3.4.5 Date.prototype.getHours ( ) */ \
229 ASM(DatePrototypeGetTime) \ 229 ASM(DatePrototypeGetHours) \
230 ASM(DatePrototypeGetTimezoneOffset) \ 230 /* ES6 section 20.3.4.6 Date.prototype.getMilliseconds ( ) */ \
231 ASM(DatePrototypeGetUTCDate) \ 231 ASM(DatePrototypeGetMilliseconds) \
232 ASM(DatePrototypeGetUTCDay) \ 232 /* ES6 section 20.3.4.7 Date.prototype.getMinutes ( ) */ \
233 ASM(DatePrototypeGetUTCFullYear) \ 233 ASM(DatePrototypeGetMinutes) \
234 ASM(DatePrototypeGetUTCHours) \ 234 /* ES6 section 20.3.4.8 Date.prototype.getMonth */ \
235 ASM(DatePrototypeGetUTCMilliseconds) \ 235 ASM(DatePrototypeGetMonth) \
236 ASM(DatePrototypeGetUTCMinutes) \ 236 /* ES6 section 20.3.4.9 Date.prototype.getSeconds ( ) */ \
237 ASM(DatePrototypeGetUTCMonth) \ 237 ASM(DatePrototypeGetSeconds) \
238 ASM(DatePrototypeGetUTCSeconds) \ 238 /* ES6 section 20.3.4.10 Date.prototype.getTime ( ) */ \
239 CPP(DatePrototypeGetYear) \ 239 ASM(DatePrototypeGetTime) \
240 CPP(DatePrototypeSetYear) \ 240 /* ES6 section 20.3.4.11 Date.prototype.getTimezoneOffset ( ) */ \
241 CPP(DatePrototypeToJson) \ 241 ASM(DatePrototypeGetTimezoneOffset) \
242 /* Function */ \ 242 /* ES6 section 20.3.4.12 Date.prototype.getUTCDate ( ) */ \
243 CPP(FunctionConstructor) \ 243 ASM(DatePrototypeGetUTCDate) \
244 ASM(FunctionPrototypeApply) \ 244 /* ES6 section 20.3.4.13 Date.prototype.getUTCDay ( ) */ \
245 CPP(FunctionPrototypeBind) \ 245 ASM(DatePrototypeGetUTCDay) \
246 ASM(FunctionPrototypeCall) \ 246 /* ES6 section 20.3.4.14 Date.prototype.getUTCFullYear ( ) */ \
247 TFJ(FunctionPrototypeHasInstance, 2) \ 247 ASM(DatePrototypeGetUTCFullYear) \
248 CPP(FunctionPrototypeToString) \ 248 /* ES6 section 20.3.4.15 Date.prototype.getUTCHours ( ) */ \
249 /* Generator and Async */ \ 249 ASM(DatePrototypeGetUTCHours) \
250 CPP(GeneratorFunctionConstructor) \ 250 /* ES6 section 20.3.4.16 Date.prototype.getUTCMilliseconds ( ) */ \
251 TFJ(GeneratorPrototypeNext, 2) \ 251 ASM(DatePrototypeGetUTCMilliseconds) \
252 TFJ(GeneratorPrototypeReturn, 2) \ 252 /* ES6 section 20.3.4.17 Date.prototype.getUTCMinutes ( ) */ \
253 TFJ(GeneratorPrototypeThrow, 2) \ 253 ASM(DatePrototypeGetUTCMinutes) \
254 CPP(AsyncFunctionConstructor) \ 254 /* ES6 section 20.3.4.18 Date.prototype.getUTCMonth ( ) */ \
255 /* Encode and decode */ \ 255 ASM(DatePrototypeGetUTCMonth) \
256 CPP(GlobalDecodeURI) \ 256 /* ES6 section 20.3.4.19 Date.prototype.getUTCSeconds ( ) */ \
257 CPP(GlobalDecodeURIComponent) \ 257 ASM(DatePrototypeGetUTCSeconds) \
258 CPP(GlobalEncodeURI) \ 258 CPP(DatePrototypeGetYear) \
259 CPP(GlobalEncodeURIComponent) \ 259 CPP(DatePrototypeSetYear) \
260 CPP(GlobalEscape) \ 260 CPP(DateNow) \
261 CPP(GlobalUnescape) \ 261 CPP(DateParse) \
262 /* Eval */ \ 262 CPP(DatePrototypeSetDate) \
263 CPP(GlobalEval) \ 263 CPP(DatePrototypeSetFullYear) \
264 /* JSON */ \ 264 CPP(DatePrototypeSetHours) \
265 CPP(JsonParse) \ 265 CPP(DatePrototypeSetMilliseconds) \
266 CPP(JsonStringify) \ 266 CPP(DatePrototypeSetMinutes) \
267 /* Math */ \ 267 CPP(DatePrototypeSetMonth) \
268 TFJ(MathAcos, 2) \ 268 CPP(DatePrototypeSetSeconds) \
269 TFJ(MathAcosh, 2) \ 269 CPP(DatePrototypeSetTime) \
270 TFJ(MathAsin, 2) \ 270 CPP(DatePrototypeSetUTCDate) \
271 TFJ(MathAsinh, 2) \ 271 CPP(DatePrototypeSetUTCFullYear) \
272 TFJ(MathAtan, 2) \ 272 CPP(DatePrototypeSetUTCHours) \
273 TFJ(MathAtanh, 2) \ 273 CPP(DatePrototypeSetUTCMilliseconds) \
274 TFJ(MathAtan2, 3) \ 274 CPP(DatePrototypeSetUTCMinutes) \
275 TFJ(MathCeil, 2) \ 275 CPP(DatePrototypeSetUTCMonth) \
276 TFJ(MathCbrt, 2) \ 276 CPP(DatePrototypeSetUTCSeconds) \
277 TFJ(MathAbs, 2) \ 277 CPP(DatePrototypeToDateString) \
278 TFJ(MathExpm1, 2) \ 278 CPP(DatePrototypeToISOString) \
279 TFJ(MathClz32, 2) \ 279 CPP(DatePrototypeToPrimitive) \
280 TFJ(MathCos, 2) \ 280 CPP(DatePrototypeToUTCString) \
281 TFJ(MathCosh, 2) \ 281 CPP(DatePrototypeToString) \
282 TFJ(MathExp, 2) \ 282 CPP(DatePrototypeToTimeString) \
283 TFJ(MathFloor, 2) \ 283 CPP(DatePrototypeValueOf) \
284 TFJ(MathFround, 2) \ 284 CPP(DatePrototypeToJson) \
285 CPP(MathHypot) \ 285 CPP(DateUTC) \
286 TFJ(MathImul, 3) \ 286 \
287 TFJ(MathLog, 2) \ 287 /* Function */ \
288 TFJ(MathLog1p, 2) \ 288 CPP(FunctionConstructor) \
289 TFJ(MathLog10, 2) \ 289 ASM(FunctionPrototypeApply) \
290 TFJ(MathLog2, 2) \ 290 CPP(FunctionPrototypeBind) \
291 ASM(MathMax) \ 291 ASM(FunctionPrototypeCall) \
292 ASM(MathMin) \ 292 /* ES6 section 19.2.3.6 Function.prototype [ @@hasInstance ] ( V ) */ \
293 TFJ(MathRound, 2) \ 293 TFJ(FunctionPrototypeHasInstance, 2) \
294 TFJ(MathPow, 3) \ 294 CPP(FunctionPrototypeToString) \
295 TFJ(MathSign, 2) \ 295 \
296 TFJ(MathSin, 2) \ 296 /* Generator and Async */ \
297 TFJ(MathSinh, 2) \ 297 CPP(GeneratorFunctionConstructor) \
298 TFJ(MathTan, 2) \ 298 /* ES6 section 25.3.1.2 Generator.prototype.next ( value ) */ \
299 TFJ(MathTanh, 2) \ 299 TFJ(GeneratorPrototypeNext, 2) \
300 TFJ(MathSqrt, 2) \ 300 /* ES6 section 25.3.1.3 Generator.prototype.return ( value ) */ \
301 TFJ(MathTrunc, 2) \ 301 TFJ(GeneratorPrototypeReturn, 2) \
302 /* Number */ \ 302 /* ES6 section 25.3.1.4 Generator.prototype.throw ( exception ) */ \
303 ASM(NumberConstructor) \ 303 TFJ(GeneratorPrototypeThrow, 2) \
304 ASM(NumberConstructor_ConstructStub) \ 304 CPP(AsyncFunctionConstructor) \
305 CPP(NumberPrototypeToExponential) \ 305 \
306 CPP(NumberPrototypeToFixed) \ 306 /* Encode and decode */ \
307 CPP(NumberPrototypeToLocaleString) \ 307 CPP(GlobalDecodeURI) \
308 CPP(NumberPrototypeToPrecision) \ 308 CPP(GlobalDecodeURIComponent) \
309 CPP(NumberPrototypeToString) \ 309 CPP(GlobalEncodeURI) \
310 TFJ(NumberPrototypeValueOf, 1) \ 310 CPP(GlobalEncodeURIComponent) \
311 /* Object */ \ 311 CPP(GlobalEscape) \
312 CPP(ObjectAssign) \ 312 CPP(GlobalUnescape) \
313 CPP(ObjectCreate) \ 313 \
314 CPP(ObjectDefineGetter) \ 314 /* Eval */ \
315 CPP(ObjectDefineProperties) \ 315 CPP(GlobalEval) \
316 CPP(ObjectDefineProperty) \ 316 \
317 CPP(ObjectDefineSetter) \ 317 /* JSON */ \
318 CPP(ObjectEntries) \ 318 CPP(JsonParse) \
319 CPP(ObjectFreeze) \ 319 CPP(JsonStringify) \
320 CPP(ObjectGetOwnPropertyDescriptor) \ 320 \
321 CPP(ObjectGetOwnPropertyDescriptors) \ 321 /* Math */ \
322 CPP(ObjectGetOwnPropertyNames) \ 322 /* ES6 section 20.2.2.1 Math.abs ( x ) */ \
323 CPP(ObjectGetOwnPropertySymbols) \ 323 TFJ(MathAbs, 2) \
324 CPP(ObjectGetPrototypeOf) \ 324 /* ES6 section 20.2.2.2 Math.acos ( x ) */ \
325 TFJ(ObjectHasOwnProperty, 2) \ 325 TFJ(MathAcos, 2) \
326 CPP(ObjectIs) \ 326 /* ES6 section 20.2.2.3 Math.acosh ( x ) */ \
327 CPP(ObjectIsExtensible) \ 327 TFJ(MathAcosh, 2) \
328 CPP(ObjectIsFrozen) \ 328 /* ES6 section 20.2.2.4 Math.asin ( x ) */ \
329 CPP(ObjectIsSealed) \ 329 TFJ(MathAsin, 2) \
330 CPP(ObjectKeys) \ 330 /* ES6 section 20.2.2.5 Math.asinh ( x ) */ \
331 CPP(ObjectLookupGetter) \ 331 TFJ(MathAsinh, 2) \
332 CPP(ObjectLookupSetter) \ 332 /* ES6 section 20.2.2.6 Math.atan ( x ) */ \
333 CPP(ObjectPreventExtensions) \ 333 TFJ(MathAtan, 2) \
334 TFJ(ObjectProtoToString, 1) \ 334 /* ES6 section 20.2.2.7 Math.atanh ( x ) */ \
335 CPP(ObjectPrototypePropertyIsEnumerable) \ 335 TFJ(MathAtanh, 2) \
336 CPP(ObjectSeal) \ 336 /* ES6 section 20.2.2.8 Math.atan2 ( y, x ) */ \
337 CPP(ObjectValues) \ 337 TFJ(MathAtan2, 3) \
338 /* Proxy */ \ 338 /* ES6 section 20.2.2.9 Math.cbrt ( x ) */ \
339 CPP(ProxyConstructor) \ 339 TFJ(MathCbrt, 2) \
340 CPP(ProxyConstructor_ConstructStub) \ 340 /* ES6 section 20.2.2.10 Math.ceil ( x ) */ \
341 /* Reflect */ \ 341 TFJ(MathCeil, 2) \
342 ASM(ReflectApply) \ 342 /* ES6 section 20.2.2.11 Math.clz32 ( x ) */ \
343 ASM(ReflectConstruct) \ 343 TFJ(MathClz32, 2) \
344 CPP(ReflectDefineProperty) \ 344 /* ES6 section 20.2.2.12 Math.cos ( x ) */ \
345 CPP(ReflectDeleteProperty) \ 345 TFJ(MathCos, 2) \
346 CPP(ReflectGet) \ 346 /* ES6 section 20.2.2.13 Math.cosh ( x ) */ \
347 CPP(ReflectGetOwnPropertyDescriptor) \ 347 TFJ(MathCosh, 2) \
348 CPP(ReflectGetPrototypeOf) \ 348 /* ES6 section 20.2.2.14 Math.exp ( x ) */ \
349 CPP(ReflectHas) \ 349 TFJ(MathExp, 2) \
350 CPP(ReflectIsExtensible) \ 350 /* ES6 section 20.2.2.15 Math.expm1 ( x ) */ \
351 CPP(ReflectOwnKeys) \ 351 TFJ(MathExpm1, 2) \
352 CPP(ReflectPreventExtensions) \ 352 /* ES6 section 20.2.2.16 Math.floor ( x ) */ \
353 CPP(ReflectSet) \ 353 TFJ(MathFloor, 2) \
354 CPP(ReflectSetPrototypeOf) \ 354 /* ES6 section 20.2.2.17 Math.fround ( x ) */ \
355 /* SharedArrayBuffer */ \ 355 TFJ(MathFround, 2) \
356 CPP(SharedArrayBufferPrototypeGetByteLength) \ 356 /* ES6 section 20.2.2.18 Math.hypot ( value1, value2, ...values ) */ \
357 TFJ(AtomicsLoad, 3) \ 357 CPP(MathHypot) \
358 TFJ(AtomicsStore, 4) \ 358 /* ES6 section 20.2.2.19 Math.imul ( x, y ) */ \
359 /* String */ \ 359 TFJ(MathImul, 3) \
360 ASM(StringConstructor) \ 360 /* ES6 section 20.2.2.20 Math.log ( x ) */ \
361 ASM(StringConstructor_ConstructStub) \ 361 TFJ(MathLog, 2) \
362 CPP(StringFromCodePoint) \ 362 /* ES6 section 20.2.2.21 Math.log1p ( x ) */ \
363 TFJ(StringFromCharCode, 2) \ 363 TFJ(MathLog1p, 2) \
364 TFJ(StringPrototypeCharAt, 2) \ 364 /* ES6 section 20.2.2.22 Math.log10 ( x ) */ \
365 TFJ(StringPrototypeCharCodeAt, 2) \ 365 TFJ(MathLog10, 2) \
366 TFJ(StringPrototypeToString, 1) \ 366 /* ES6 section 20.2.2.23 Math.log2 ( x ) */ \
367 CPP(StringPrototypeTrim) \ 367 TFJ(MathLog2, 2) \
368 CPP(StringPrototypeTrimLeft) \ 368 /* ES6 section 20.2.2.24 Math.max ( value1, value2 , ...values ) */ \
369 CPP(StringPrototypeTrimRight) \ 369 ASM(MathMax) \
370 TFJ(StringPrototypeValueOf, 1) \ 370 /* ES6 section 20.2.2.25 Math.min ( value1, value2 , ...values ) */ \
371 /* Symbol */ \ 371 ASM(MathMin) \
372 CPP(SymbolConstructor) \ 372 /* ES6 section 20.2.2.26 Math.pow ( x, y ) */ \
373 CPP(SymbolConstructor_ConstructStub) \ 373 TFJ(MathPow, 3) \
374 TFJ(SymbolPrototypeToPrimitive, 2) \ 374 /* ES6 section 20.2.2.28 Math.round ( x ) */ \
375 TFJ(SymbolPrototypeToString, 1) \ 375 TFJ(MathRound, 2) \
376 TFJ(SymbolPrototypeValueOf, 1) \ 376 /* ES6 section 20.2.2.29 Math.sign ( x ) */ \
377 /* TypedArray */ \ 377 TFJ(MathSign, 2) \
378 CPP(TypedArrayPrototypeBuffer) \ 378 /* ES6 section 20.2.2.30 Math.sin ( x ) */ \
379 TFJ(TypedArrayPrototypeByteLength, 1) \ 379 TFJ(MathSin, 2) \
380 TFJ(TypedArrayPrototypeByteOffset, 1) \ 380 /* ES6 section 20.2.2.31 Math.sinh ( x ) */ \
381 TFJ(MathSinh, 2) \
382 /* ES6 section 20.2.2.32 Math.sqrt ( x ) */ \
383 TFJ(MathTan, 2) \
384 /* ES6 section 20.2.2.33 Math.tan ( x ) */ \
385 TFJ(MathTanh, 2) \
386 /* ES6 section 20.2.2.34 Math.tanh ( x ) */ \
387 TFJ(MathSqrt, 2) \
388 /* ES6 section 20.2.2.35 Math.trunc ( x ) */ \
389 TFJ(MathTrunc, 2) \
390 \
391 /* Number */ \
392 /* ES6 section 20.1.1.1 Number ( [ value ] ) for the [[Call]] case */ \
393 ASM(NumberConstructor) \
394 /* ES6 section 20.1.1.1 Number ( [ value ] ) for the [[Construct]] case */ \
395 ASM(NumberConstructor_ConstructStub) \
396 CPP(NumberPrototypeToExponential) \
397 CPP(NumberPrototypeToFixed) \
398 CPP(NumberPrototypeToLocaleString) \
399 CPP(NumberPrototypeToPrecision) \
400 CPP(NumberPrototypeToString) \
401 /* ES6 section 20.1.3.7 Number.prototype.valueOf ( ) */ \
402 TFJ(NumberPrototypeValueOf, 1) \
403 /* Object */ \
404 CPP(ObjectAssign) \
405 CPP(ObjectCreate) \
406 CPP(ObjectDefineGetter) \
407 CPP(ObjectDefineProperties) \
408 CPP(ObjectDefineProperty) \
409 CPP(ObjectDefineSetter) \
410 CPP(ObjectEntries) \
411 CPP(ObjectFreeze) \
412 CPP(ObjectGetOwnPropertyDescriptor) \
413 CPP(ObjectGetOwnPropertyDescriptors) \
414 CPP(ObjectGetOwnPropertyNames) \
415 CPP(ObjectGetOwnPropertySymbols) \
416 CPP(ObjectGetPrototypeOf) \
417 /* ES6 section 19.1.3.2 Object.prototype.hasOwnProperty */ \
418 TFJ(ObjectHasOwnProperty, 2) \
419 CPP(ObjectIs) \
420 CPP(ObjectIsExtensible) \
421 CPP(ObjectIsFrozen) \
422 CPP(ObjectIsSealed) \
423 CPP(ObjectKeys) \
424 CPP(ObjectLookupGetter) \
425 CPP(ObjectLookupSetter) \
426 CPP(ObjectPreventExtensions) \
427 /* ES6 section 19.1.3.6 Object.prototype.toString () */ \
428 TFJ(ObjectProtoToString, 1) \
429 CPP(ObjectPrototypePropertyIsEnumerable) \
430 CPP(ObjectSeal) \
431 CPP(ObjectValues) \
432 \
433 /* Proxy */ \
434 CPP(ProxyConstructor) \
435 CPP(ProxyConstructor_ConstructStub) \
436 \
437 /* Reflect */ \
438 ASM(ReflectApply) \
439 ASM(ReflectConstruct) \
440 CPP(ReflectDefineProperty) \
441 CPP(ReflectDeleteProperty) \
442 CPP(ReflectGet) \
443 CPP(ReflectGetOwnPropertyDescriptor) \
444 CPP(ReflectGetPrototypeOf) \
445 CPP(ReflectHas) \
446 CPP(ReflectIsExtensible) \
447 CPP(ReflectOwnKeys) \
448 CPP(ReflectPreventExtensions) \
449 CPP(ReflectSet) \
450 CPP(ReflectSetPrototypeOf) \
451 \
452 /* SharedArrayBuffer */ \
453 CPP(SharedArrayBufferPrototypeGetByteLength) \
454 TFJ(AtomicsLoad, 3) \
455 TFJ(AtomicsStore, 4) \
456 \
457 /* String */ \
458 ASM(StringConstructor) \
459 ASM(StringConstructor_ConstructStub) \
460 CPP(StringFromCodePoint) \
461 /* ES6 section 21.1.2.1 String.fromCharCode ( ...codeUnits ) */ \
462 TFJ(StringFromCharCode, 2) \
463 /* ES6 section 21.1.3.1 String.prototype.charAt ( pos ) */ \
464 TFJ(StringPrototypeCharAt, 2) \
465 /* ES6 section 21.1.3.2 String.prototype.charCodeAt ( pos ) */ \
466 TFJ(StringPrototypeCharCodeAt, 2) \
467 /* ES6 section 21.1.3.25 String.prototype.toString () */ \
468 TFJ(StringPrototypeToString, 1) \
469 CPP(StringPrototypeTrim) \
470 CPP(StringPrototypeTrimLeft) \
471 CPP(StringPrototypeTrimRight) \
472 /* ES6 section 21.1.3.28 String.prototype.valueOf () */ \
473 TFJ(StringPrototypeValueOf, 1) \
474 \
475 /* Symbol */ \
476 CPP(SymbolConstructor) \
477 CPP(SymbolConstructor_ConstructStub) \
478 /* ES6 section 19.4.3.4 Symbol.prototype [ @@toPrimitive ] ( hint ) */ \
479 TFJ(SymbolPrototypeToPrimitive, 2) \
480 /* ES6 section 19.4.3.2 Symbol.prototype.toString ( ) */ \
481 TFJ(SymbolPrototypeToString, 1) \
482 /* ES6 section 19.4.3.3 Symbol.prototype.valueOf ( ) */ \
483 TFJ(SymbolPrototypeValueOf, 1) \
484 \
485 /* TypedArray */ \
486 CPP(TypedArrayPrototypeBuffer) \
487 /* ES6 section 22.2.3.2 get %TypedArray%.prototype.byteLength */ \
488 TFJ(TypedArrayPrototypeByteLength, 1) \
489 /* ES6 section 22.2.3.3 get %TypedArray%.prototype.byteOffset */ \
490 TFJ(TypedArrayPrototypeByteOffset, 1) \
491 /* ES6 section 22.2.3.18 get %TypedArray%.prototype.length */ \
381 TFJ(TypedArrayPrototypeLength, 1) 492 TFJ(TypedArrayPrototypeLength, 1)
382 493
383 #define IGNORE_BUILTIN(...) 494 #define IGNORE_BUILTIN(...)
384 495
385 #define BUILTIN_LIST_ALL(V) BUILTIN_LIST(V, V, V, V, V, V, V) 496 #define BUILTIN_LIST_ALL(V) BUILTIN_LIST(V, V, V, V, V, V, V)
386 497
387 #define BUILTIN_LIST_C(V) \ 498 #define BUILTIN_LIST_C(V) \
388 BUILTIN_LIST(V, V, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \ 499 BUILTIN_LIST(V, V, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \
389 IGNORE_BUILTIN, IGNORE_BUILTIN) 500 IGNORE_BUILTIN, IGNORE_BUILTIN)
390 501
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 int argc, Handle<Object> args[]); 570 int argc, Handle<Object> args[]);
460 571
461 enum ExitFrameType { EXIT, BUILTIN_EXIT }; 572 enum ExitFrameType { EXIT, BUILTIN_EXIT };
462 573
463 static void Generate_Adaptor(MacroAssembler* masm, Address builtin_address, 574 static void Generate_Adaptor(MacroAssembler* masm, Address builtin_address,
464 ExitFrameType exit_frame_type); 575 ExitFrameType exit_frame_type);
465 576
466 private: 577 private:
467 Builtins(); 578 Builtins();
468 579
469 static void Generate_AllocateInNewSpace(MacroAssembler* masm);
470 static void Generate_AllocateInOldSpace(MacroAssembler* masm);
471 static void Generate_ConstructedNonConstructable(MacroAssembler* masm);
472 static void Generate_InstantiateAsmJs(MacroAssembler* masm);
473 static void Generate_CompileLazy(MacroAssembler* masm);
474 static void Generate_CompileBaseline(MacroAssembler* masm);
475 static void Generate_InOptimizationQueue(MacroAssembler* masm);
476 static void Generate_CompileOptimized(MacroAssembler* masm);
477 static void Generate_CompileOptimizedConcurrent(MacroAssembler* masm);
478 static void Generate_JSConstructStubGeneric(MacroAssembler* masm);
479 static void Generate_JSBuiltinsConstructStub(MacroAssembler* masm);
480 static void Generate_JSBuiltinsConstructStubForDerived(MacroAssembler* masm);
481 static void Generate_JSConstructStubApi(MacroAssembler* masm);
482 static void Generate_JSEntryTrampoline(MacroAssembler* masm);
483 static void Generate_JSConstructEntryTrampoline(MacroAssembler* masm);
484 static void Generate_ResumeGeneratorTrampoline(MacroAssembler* masm);
485 static void Generate_NotifyDeoptimized(MacroAssembler* masm);
486 static void Generate_NotifySoftDeoptimized(MacroAssembler* masm);
487 static void Generate_NotifyLazyDeoptimized(MacroAssembler* masm);
488 static void Generate_NotifyStubFailure(MacroAssembler* masm);
489 static void Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm);
490 static void Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm);
491 static void Generate_StringToNumber(MacroAssembler* masm);
492 static void Generate_ToNumber(MacroAssembler* masm);
493
494 static void Generate_Apply(MacroAssembler* masm);
495
496 // ES6 section 9.2.1 [[Call]] ( thisArgument, argumentsList)
497 static void Generate_CallFunction(MacroAssembler* masm, 580 static void Generate_CallFunction(MacroAssembler* masm,
498 ConvertReceiverMode mode, 581 ConvertReceiverMode mode,
499 TailCallMode tail_call_mode); 582 TailCallMode tail_call_mode);
500 static void Generate_CallFunction_ReceiverIsNullOrUndefined( 583
501 MacroAssembler* masm) {
502 Generate_CallFunction(masm, ConvertReceiverMode::kNullOrUndefined,
503 TailCallMode::kDisallow);
504 }
505 static void Generate_CallFunction_ReceiverIsNotNullOrUndefined(
506 MacroAssembler* masm) {
507 Generate_CallFunction(masm, ConvertReceiverMode::kNotNullOrUndefined,
508 TailCallMode::kDisallow);
509 }
510 static void Generate_CallFunction_ReceiverIsAny(MacroAssembler* masm) {
511 Generate_CallFunction(masm, ConvertReceiverMode::kAny,
512 TailCallMode::kDisallow);
513 }
514 static void Generate_TailCallFunction_ReceiverIsNullOrUndefined(
515 MacroAssembler* masm) {
516 Generate_CallFunction(masm, ConvertReceiverMode::kNullOrUndefined,
517 TailCallMode::kAllow);
518 }
519 static void Generate_TailCallFunction_ReceiverIsNotNullOrUndefined(
520 MacroAssembler* masm) {
521 Generate_CallFunction(masm, ConvertReceiverMode::kNotNullOrUndefined,
522 TailCallMode::kAllow);
523 }
524 static void Generate_TailCallFunction_ReceiverIsAny(MacroAssembler* masm) {
525 Generate_CallFunction(masm, ConvertReceiverMode::kAny,
526 TailCallMode::kAllow);
527 }
528 // ES6 section 9.4.1.1 [[Call]] ( thisArgument, argumentsList)
529 static void Generate_CallBoundFunctionImpl(MacroAssembler* masm, 584 static void Generate_CallBoundFunctionImpl(MacroAssembler* masm,
530 TailCallMode tail_call_mode); 585 TailCallMode tail_call_mode);
531 static void Generate_CallBoundFunction(MacroAssembler* masm) { 586
532 Generate_CallBoundFunctionImpl(masm, TailCallMode::kDisallow);
533 }
534 static void Generate_TailCallBoundFunction(MacroAssembler* masm) {
535 Generate_CallBoundFunctionImpl(masm, TailCallMode::kAllow);
536 }
537 // ES6 section 7.3.12 Call(F, V, [argumentsList])
538 static void Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode, 587 static void Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode,
539 TailCallMode tail_call_mode); 588 TailCallMode tail_call_mode);
540 static void Generate_Call_ReceiverIsNullOrUndefined(MacroAssembler* masm) {
541 Generate_Call(masm, ConvertReceiverMode::kNullOrUndefined,
542 TailCallMode::kDisallow);
543 }
544 static void Generate_Call_ReceiverIsNotNullOrUndefined(MacroAssembler* masm) {
545 Generate_Call(masm, ConvertReceiverMode::kNotNullOrUndefined,
546 TailCallMode::kDisallow);
547 }
548 static void Generate_Call_ReceiverIsAny(MacroAssembler* masm) {
549 Generate_Call(masm, ConvertReceiverMode::kAny, TailCallMode::kDisallow);
550 }
551 static void Generate_TailCall_ReceiverIsNullOrUndefined(
552 MacroAssembler* masm) {
553 Generate_Call(masm, ConvertReceiverMode::kNullOrUndefined,
554 TailCallMode::kAllow);
555 }
556 static void Generate_TailCall_ReceiverIsNotNullOrUndefined(
557 MacroAssembler* masm) {
558 Generate_Call(masm, ConvertReceiverMode::kNotNullOrUndefined,
559 TailCallMode::kAllow);
560 }
561 static void Generate_TailCall_ReceiverIsAny(MacroAssembler* masm) {
562 Generate_Call(masm, ConvertReceiverMode::kAny, TailCallMode::kAllow);
563 }
564 589
565 // ES6 section 9.2.2 [[Construct]] ( argumentsList, newTarget) 590 static void Generate_InterpreterPushArgsAndCallImpl(
566 static void Generate_ConstructFunction(MacroAssembler* masm); 591 MacroAssembler* masm, TailCallMode tail_call_mode,
567 // ES6 section 9.4.1.2 [[Construct]] (argumentsList, newTarget) 592 CallableType function_type);
568 static void Generate_ConstructBoundFunction(MacroAssembler* masm);
569 // ES6 section 9.5.14 [[Construct]] ( argumentsList, newTarget)
570 static void Generate_ConstructProxy(MacroAssembler* masm);
571 // ES6 section 7.3.13 Construct (F, [argumentsList], [newTarget])
572 static void Generate_Construct(MacroAssembler* masm);
573
574 static void Generate_HandleFastApiCall(MacroAssembler* masm);
575
576 // ES6 section 19.3.3.2 Boolean.prototype.toString ( )
577 static void Generate_BooleanPrototypeToString(CodeStubAssembler* assembler);
578 // ES6 section 19.3.3.3 Boolean.prototype.valueOf ( )
579 static void Generate_BooleanPrototypeValueOf(CodeStubAssembler* assembler);
580 593
581 static void Generate_DatePrototype_GetField(MacroAssembler* masm, 594 static void Generate_DatePrototype_GetField(MacroAssembler* masm,
582 int field_index); 595 int field_index);
583 // ES6 section 20.3.4.2 Date.prototype.getDate ( )
584 static void Generate_DatePrototypeGetDate(MacroAssembler* masm);
585 // ES6 section 20.3.4.3 Date.prototype.getDay ( )
586 static void Generate_DatePrototypeGetDay(MacroAssembler* masm);
587 // ES6 section 20.3.4.4 Date.prototype.getFullYear ( )
588 static void Generate_DatePrototypeGetFullYear(MacroAssembler* masm);
589 // ES6 section 20.3.4.5 Date.prototype.getHours ( )
590 static void Generate_DatePrototypeGetHours(MacroAssembler* masm);
591 // ES6 section 20.3.4.6 Date.prototype.getMilliseconds ( )
592 static void Generate_DatePrototypeGetMilliseconds(MacroAssembler* masm);
593 // ES6 section 20.3.4.7 Date.prototype.getMinutes ( )
594 static void Generate_DatePrototypeGetMinutes(MacroAssembler* masm);
595 // ES6 section 20.3.4.8 Date.prototype.getMonth ( )
596 static void Generate_DatePrototypeGetMonth(MacroAssembler* masm);
597 // ES6 section 20.3.4.9 Date.prototype.getSeconds ( )
598 static void Generate_DatePrototypeGetSeconds(MacroAssembler* masm);
599 // ES6 section 20.3.4.10 Date.prototype.getTime ( )
600 static void Generate_DatePrototypeGetTime(MacroAssembler* masm);
601 // ES6 section 20.3.4.11 Date.prototype.getTimezoneOffset ( )
602 static void Generate_DatePrototypeGetTimezoneOffset(MacroAssembler* masm);
603 // ES6 section 20.3.4.12 Date.prototype.getUTCDate ( )
604 static void Generate_DatePrototypeGetUTCDate(MacroAssembler* masm);
605 // ES6 section 20.3.4.13 Date.prototype.getUTCDay ( )
606 static void Generate_DatePrototypeGetUTCDay(MacroAssembler* masm);
607 // ES6 section 20.3.4.14 Date.prototype.getUTCFullYear ( )
608 static void Generate_DatePrototypeGetUTCFullYear(MacroAssembler* masm);
609 // ES6 section 20.3.4.15 Date.prototype.getUTCHours ( )
610 static void Generate_DatePrototypeGetUTCHours(MacroAssembler* masm);
611 // ES6 section 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
612 static void Generate_DatePrototypeGetUTCMilliseconds(MacroAssembler* masm);
613 // ES6 section 20.3.4.17 Date.prototype.getUTCMinutes ( )
614 static void Generate_DatePrototypeGetUTCMinutes(MacroAssembler* masm);
615 // ES6 section 20.3.4.18 Date.prototype.getUTCMonth ( )
616 static void Generate_DatePrototypeGetUTCMonth(MacroAssembler* masm);
617 // ES6 section 20.3.4.19 Date.prototype.getUTCSeconds ( )
618 static void Generate_DatePrototypeGetUTCSeconds(MacroAssembler* masm);
619
620 static void Generate_FunctionPrototypeApply(MacroAssembler* masm);
621 static void Generate_FunctionPrototypeCall(MacroAssembler* masm);
622
623 static void Generate_ReflectApply(MacroAssembler* masm);
624 static void Generate_ReflectConstruct(MacroAssembler* masm);
625
626 static void Generate_InternalArrayCode(MacroAssembler* masm);
627 static void Generate_ArrayCode(MacroAssembler* masm);
628
629 // ES6 section 20.2.2.1 Math.abs ( x )
630 static void Generate_MathAbs(CodeStubAssembler* assembler);
631 // ES6 section 20.2.2.2 Math.acos ( x )
632 static void Generate_MathAcos(CodeStubAssembler* assembler);
633 // ES6 section 20.2.2.3 Math.acosh ( x )
634 static void Generate_MathAcosh(CodeStubAssembler* assembler);
635 // ES6 section 20.2.2.4 Math.asin ( x )
636 static void Generate_MathAsin(CodeStubAssembler* assembler);
637 // ES6 section 20.2.2.5 Math.asinh ( x )
638 static void Generate_MathAsinh(CodeStubAssembler* assembler);
639 // ES6 section 20.2.2.6 Math.atan ( x )
640 static void Generate_MathAtan(CodeStubAssembler* assembler);
641 // ES6 section 20.2.2.7 Math.atanh ( x )
642 static void Generate_MathAtanh(CodeStubAssembler* assembler);
643 // ES6 section 20.2.2.8 Math.atan2 ( y, x )
644 static void Generate_MathAtan2(CodeStubAssembler* assembler);
645 // ES6 section 20.2.2.10 Math.ceil ( x )
646 static void Generate_MathCeil(CodeStubAssembler* assembler);
647 // ES6 section 20.2.2.9 Math.ceil ( x )
648 static void Generate_MathCbrt(CodeStubAssembler* assembler);
649 // ES6 section 20.2.2.15 Math.expm1 ( x )
650 static void Generate_MathExpm1(CodeStubAssembler* assembler);
651 // ES6 section 20.2.2.11 Math.clz32 ( x )
652 static void Generate_MathClz32(CodeStubAssembler* assembler);
653 // ES6 section 20.2.2.12 Math.cos ( x )
654 static void Generate_MathCos(CodeStubAssembler* assembler);
655 // ES6 section 20.2.2.13 Math.cosh ( x )
656 static void Generate_MathCosh(CodeStubAssembler* assembler);
657 // ES6 section 20.2.2.14 Math.exp ( x )
658 static void Generate_MathExp(CodeStubAssembler* assembler);
659 // ES6 section 20.2.2.16 Math.floor ( x )
660 static void Generate_MathFloor(CodeStubAssembler* assembler);
661 // ES6 section 20.2.2.17 Math.fround ( x )
662 static void Generate_MathFround(CodeStubAssembler* assembler);
663 // ES6 section 20.2.2.20 Math.imul ( x, y )
664 static void Generate_MathImul(CodeStubAssembler* assembler);
665 // ES6 section 20.2.2.20 Math.log ( x )
666 static void Generate_MathLog(CodeStubAssembler* assembler);
667 // ES6 section 20.2.2.21 Math.log ( x )
668 static void Generate_MathLog1p(CodeStubAssembler* assembler);
669
670 static void Generate_MathLog2(CodeStubAssembler* assembler);
671 static void Generate_MathLog10(CodeStubAssembler* assembler);
672 596
673 enum class MathMaxMinKind { kMax, kMin }; 597 enum class MathMaxMinKind { kMax, kMin };
674 static void Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind); 598 static void Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind);
675 // ES6 section 20.2.2.24 Math.max ( value1, value2 , ...values )
676 static void Generate_MathMax(MacroAssembler* masm) {
677 Generate_MathMaxMin(masm, MathMaxMinKind::kMax);
678 }
679 // ES6 section 20.2.2.25 Math.min ( value1, value2 , ...values )
680 static void Generate_MathMin(MacroAssembler* masm) {
681 Generate_MathMaxMin(masm, MathMaxMinKind::kMin);
682 }
683 // ES6 section 20.2.2.26 Math.pow ( x, y )
684 static void Generate_MathPow(CodeStubAssembler* assembler);
685 // ES6 section 20.2.2.28 Math.round ( x )
686 static void Generate_MathRound(CodeStubAssembler* assembler);
687 // ES6 section 20.2.2.29 Math.sign ( x )
688 static void Generate_MathSign(CodeStubAssembler* assembler);
689 // ES6 section 20.2.2.30 Math.sin ( x )
690 static void Generate_MathSin(CodeStubAssembler* assembler);
691 // ES6 section 20.2.2.31 Math.sinh ( x )
692 static void Generate_MathSinh(CodeStubAssembler* assembler);
693 // ES6 section 20.2.2.32 Math.sqrt ( x )
694 static void Generate_MathSqrt(CodeStubAssembler* assembler);
695 // ES6 section 20.2.2.33 Math.tan ( x )
696 static void Generate_MathTan(CodeStubAssembler* assembler);
697 // ES6 section 20.2.2.34 Math.tanh ( x )
698 static void Generate_MathTanh(CodeStubAssembler* assembler);
699 // ES6 section 20.2.2.35 Math.trunc ( x )
700 static void Generate_MathTrunc(CodeStubAssembler* assembler);
701 599
702 // ES6 section 20.1.1.1 Number ( [ value ] ) for the [[Call]] case. 600 #define DECLARE_ASM(Name, ...) \
703 static void Generate_NumberConstructor(MacroAssembler* masm); 601 static void Generate_##Name(MacroAssembler* masm);
704 // ES6 section 20.1.1.1 Number ( [ value ] ) for the [[Construct]] case. 602 #define DECLARE_TF(Name, ...) \
705 static void Generate_NumberConstructor_ConstructStub(MacroAssembler* masm); 603 static void Generate_##Name(CodeStubAssembler* csasm);
706 // ES6 section 20.1.3.7 Number.prototype.valueOf ( )
707 static void Generate_NumberPrototypeValueOf(CodeStubAssembler* assembler);
708 604
709 // ES6 section 19.2.3.6 Function.prototype [ @@hasInstance ] ( V ) 605 BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, DECLARE_TF, DECLARE_TF,
710 static void Generate_FunctionPrototypeHasInstance( 606 DECLARE_ASM, DECLARE_ASM, DECLARE_ASM)
711 CodeStubAssembler* assembler);
712 607
713 // ES6 section 25.3.1.2 Generator.prototype.next ( value ) 608 #undef DECLARE_ASM
714 static void Generate_GeneratorPrototypeNext(CodeStubAssembler* assembler); 609 #undef DECLARE_TF
715 // ES6 section 25.3.1.3 Generator.prototype.return ( value )
716 static void Generate_GeneratorPrototypeReturn(CodeStubAssembler* assembler);
717 // ES6 section 25.3.1.4 Generator.prototype.throw ( exception )
718 static void Generate_GeneratorPrototypeThrow(CodeStubAssembler* assembler);
719
720 // ES6 section 19.1.3.2 Object.prototype.hasOwnProperty
721 static void Generate_ObjectHasOwnProperty(CodeStubAssembler* assembler);
722
723 // ES6 section 19.1.3.6 Object.prototype.toString ()
724 static void Generate_ObjectProtoToString(CodeStubAssembler* assembler);
725
726 // ES6 section 22.1.2.2 Array.isArray
727 static void Generate_ArrayIsArray(CodeStubAssembler* assembler);
728
729 // ES6 section 21.1.2.1 String.fromCharCode ( ...codeUnits )
730 static void Generate_StringFromCharCode(CodeStubAssembler* assembler);
731 // ES6 section 21.1.3.1 String.prototype.charAt ( pos )
732 static void Generate_StringPrototypeCharAt(CodeStubAssembler* assembler);
733 // ES6 section 21.1.3.2 String.prototype.charCodeAt ( pos )
734 static void Generate_StringPrototypeCharCodeAt(CodeStubAssembler* assembler);
735 // ES6 section 21.1.3.25 String.prototype.toString ()
736 static void Generate_StringPrototypeToString(CodeStubAssembler* assembler);
737 // ES6 section 21.1.3.28 String.prototype.valueOf ()
738 static void Generate_StringPrototypeValueOf(CodeStubAssembler* assembler);
739
740 static void Generate_StringConstructor(MacroAssembler* masm);
741 static void Generate_StringConstructor_ConstructStub(MacroAssembler* masm);
742
743 // ES6 section 19.4.3.4 Symbol.prototype [ @@toPrimitive ] ( hint )
744 static void Generate_SymbolPrototypeToPrimitive(CodeStubAssembler* assembler);
745 // ES6 section 19.4.3.2 Symbol.prototype.toString ( )
746 static void Generate_SymbolPrototypeToString(CodeStubAssembler* assembler);
747 // ES6 section 19.4.3.3 Symbol.prototype.valueOf ( )
748 static void Generate_SymbolPrototypeValueOf(CodeStubAssembler* assembler);
749
750 // ES6 section 22.2.3.2 get %TypedArray%.prototype.byteLength
751 static void Generate_TypedArrayPrototypeByteLength(
752 CodeStubAssembler* assembler);
753 // ES6 section 22.2.3.3 get %TypedArray%.prototype.byteOffset
754 static void Generate_TypedArrayPrototypeByteOffset(
755 CodeStubAssembler* assembler);
756 // ES6 section 22.2.3.18 get %TypedArray%.prototype.length
757 static void Generate_TypedArrayPrototypeLength(CodeStubAssembler* assembler);
758
759 static void Generate_OnStackReplacement(MacroAssembler* masm);
760 static void Generate_InterruptCheck(MacroAssembler* masm);
761 static void Generate_StackCheck(MacroAssembler* masm);
762
763 static void Generate_InterpreterEntryTrampoline(MacroAssembler* masm);
764 static void Generate_InterpreterEnterBytecodeDispatch(MacroAssembler* masm);
765 static void Generate_InterpreterMarkBaselineOnReturn(MacroAssembler* masm);
766 static void Generate_InterpreterPushArgsAndCall(MacroAssembler* masm) {
767 return Generate_InterpreterPushArgsAndCallImpl(
768 masm, TailCallMode::kDisallow, CallableType::kAny);
769 }
770 static void Generate_InterpreterPushArgsAndTailCall(MacroAssembler* masm) {
771 return Generate_InterpreterPushArgsAndCallImpl(masm, TailCallMode::kAllow,
772 CallableType::kAny);
773 }
774 static void Generate_InterpreterPushArgsAndCallFunction(
775 MacroAssembler* masm) {
776 return Generate_InterpreterPushArgsAndCallImpl(
777 masm, TailCallMode::kDisallow, CallableType::kJSFunction);
778 }
779 static void Generate_InterpreterPushArgsAndTailCallFunction(
780 MacroAssembler* masm) {
781 return Generate_InterpreterPushArgsAndCallImpl(masm, TailCallMode::kAllow,
782 CallableType::kJSFunction);
783 }
784 static void Generate_InterpreterPushArgsAndCallImpl(
785 MacroAssembler* masm, TailCallMode tail_call_mode,
786 CallableType function_type);
787 static void Generate_InterpreterPushArgsAndConstruct(MacroAssembler* masm);
788
789 #define DECLARE_CODE_AGE_BUILTIN_GENERATOR(C) \
790 static void Generate_Make##C##CodeYoungAgainEvenMarking( \
791 MacroAssembler* masm); \
792 static void Generate_Make##C##CodeYoungAgainOddMarking(MacroAssembler* masm);
793 CODE_AGE_LIST(DECLARE_CODE_AGE_BUILTIN_GENERATOR)
794 #undef DECLARE_CODE_AGE_BUILTIN_GENERATOR
795
796 static void Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm);
797 static void Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm);
798 static void Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm);
799
800 static void Generate_AtomicsLoad(CodeStubAssembler* assembler);
801 static void Generate_AtomicsStore(CodeStubAssembler* assembler);
802 610
803 // Note: These are always Code objects, but to conform with 611 // Note: These are always Code objects, but to conform with
804 // IterateBuiltins() above which assumes Object**'s for the callback 612 // IterateBuiltins() above which assumes Object**'s for the callback
805 // function f, we use an Object* array here. 613 // function f, we use an Object* array here.
806 Object* builtins_[builtin_count]; 614 Object* builtins_[builtin_count];
807 bool initialized_; 615 bool initialized_;
808 616
809 friend class Isolate; 617 friend class Isolate;
810 618
811 DISALLOW_COPY_AND_ASSIGN(Builtins); 619 DISALLOW_COPY_AND_ASSIGN(Builtins);
812 }; 620 };
813 621
814 } // namespace internal 622 } // namespace internal
815 } // namespace v8 623 } // namespace v8
816 624
817 #endif // V8_BUILTINS_BUILTINS_H_ 625 #endif // V8_BUILTINS_BUILTINS_H_
OLDNEW
« no previous file with comments | « no previous file | src/builtins/builtins.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698