OLD | NEW |
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_H_ | 5 #ifndef V8_BUILTINS_H_ |
6 #define V8_BUILTINS_H_ | 6 #define V8_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 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 #define BUILTIN_LIST_A(V) \ | 150 #define BUILTIN_LIST_A(V) \ |
151 V(ArgumentsAdaptorTrampoline, BUILTIN, UNINITIALIZED, kNoExtraICState) \ | 151 V(ArgumentsAdaptorTrampoline, BUILTIN, UNINITIALIZED, kNoExtraICState) \ |
152 \ | 152 \ |
153 V(ConstructedNonConstructable, BUILTIN, UNINITIALIZED, kNoExtraICState) \ | 153 V(ConstructedNonConstructable, BUILTIN, UNINITIALIZED, kNoExtraICState) \ |
154 \ | 154 \ |
155 V(CallFunction_ReceiverIsNullOrUndefined, BUILTIN, UNINITIALIZED, \ | 155 V(CallFunction_ReceiverIsNullOrUndefined, BUILTIN, UNINITIALIZED, \ |
156 kNoExtraICState) \ | 156 kNoExtraICState) \ |
157 V(CallFunction_ReceiverIsNotNullOrUndefined, BUILTIN, UNINITIALIZED, \ | 157 V(CallFunction_ReceiverIsNotNullOrUndefined, BUILTIN, UNINITIALIZED, \ |
158 kNoExtraICState) \ | 158 kNoExtraICState) \ |
159 V(CallFunction_ReceiverIsAny, BUILTIN, UNINITIALIZED, kNoExtraICState) \ | 159 V(CallFunction_ReceiverIsAny, BUILTIN, UNINITIALIZED, kNoExtraICState) \ |
| 160 V(TailCallFunction_ReceiverIsNullOrUndefined, BUILTIN, UNINITIALIZED, \ |
| 161 kNoExtraICState) \ |
| 162 V(TailCallFunction_ReceiverIsNotNullOrUndefined, BUILTIN, UNINITIALIZED, \ |
| 163 kNoExtraICState) \ |
| 164 V(TailCallFunction_ReceiverIsAny, BUILTIN, UNINITIALIZED, kNoExtraICState) \ |
160 V(CallBoundFunction, BUILTIN, UNINITIALIZED, kNoExtraICState) \ | 165 V(CallBoundFunction, BUILTIN, UNINITIALIZED, kNoExtraICState) \ |
161 V(Call_ReceiverIsNullOrUndefined, BUILTIN, UNINITIALIZED, kNoExtraICState) \ | 166 V(Call_ReceiverIsNullOrUndefined, BUILTIN, UNINITIALIZED, kNoExtraICState) \ |
162 V(Call_ReceiverIsNotNullOrUndefined, BUILTIN, UNINITIALIZED, \ | 167 V(Call_ReceiverIsNotNullOrUndefined, BUILTIN, UNINITIALIZED, \ |
163 kNoExtraICState) \ | 168 kNoExtraICState) \ |
164 V(Call_ReceiverIsAny, BUILTIN, UNINITIALIZED, kNoExtraICState) \ | 169 V(Call_ReceiverIsAny, BUILTIN, UNINITIALIZED, kNoExtraICState) \ |
165 \ | 170 \ |
166 V(ConstructFunction, BUILTIN, UNINITIALIZED, kNoExtraICState) \ | 171 V(ConstructFunction, BUILTIN, UNINITIALIZED, kNoExtraICState) \ |
167 V(ConstructBoundFunction, BUILTIN, UNINITIALIZED, kNoExtraICState) \ | 172 V(ConstructBoundFunction, BUILTIN, UNINITIALIZED, kNoExtraICState) \ |
168 V(ConstructProxy, BUILTIN, UNINITIALIZED, kNoExtraICState) \ | 173 V(ConstructProxy, BUILTIN, UNINITIALIZED, kNoExtraICState) \ |
169 V(Construct, BUILTIN, UNINITIALIZED, kNoExtraICState) \ | 174 V(Construct, BUILTIN, UNINITIALIZED, kNoExtraICState) \ |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 BUILTIN_LIST_C(DECLARE_BUILTIN_ACCESSOR_C) | 337 BUILTIN_LIST_C(DECLARE_BUILTIN_ACCESSOR_C) |
333 BUILTIN_LIST_A(DECLARE_BUILTIN_ACCESSOR_A) | 338 BUILTIN_LIST_A(DECLARE_BUILTIN_ACCESSOR_A) |
334 BUILTIN_LIST_H(DECLARE_BUILTIN_ACCESSOR_H) | 339 BUILTIN_LIST_H(DECLARE_BUILTIN_ACCESSOR_H) |
335 BUILTIN_LIST_DEBUG_A(DECLARE_BUILTIN_ACCESSOR_A) | 340 BUILTIN_LIST_DEBUG_A(DECLARE_BUILTIN_ACCESSOR_A) |
336 #undef DECLARE_BUILTIN_ACCESSOR_C | 341 #undef DECLARE_BUILTIN_ACCESSOR_C |
337 #undef DECLARE_BUILTIN_ACCESSOR_A | 342 #undef DECLARE_BUILTIN_ACCESSOR_A |
338 | 343 |
339 // Convenience wrappers. | 344 // Convenience wrappers. |
340 Handle<Code> CallFunction(ConvertReceiverMode = ConvertReceiverMode::kAny); | 345 Handle<Code> CallFunction(ConvertReceiverMode = ConvertReceiverMode::kAny); |
341 Handle<Code> Call(ConvertReceiverMode = ConvertReceiverMode::kAny); | 346 Handle<Code> Call(ConvertReceiverMode = ConvertReceiverMode::kAny); |
| 347 Handle<Code> TailCallFunction( |
| 348 ConvertReceiverMode = ConvertReceiverMode::kAny); |
| 349 Handle<Code> TailCall(ConvertReceiverMode = ConvertReceiverMode::kAny); |
342 | 350 |
343 Code* builtin(Name name) { | 351 Code* builtin(Name name) { |
344 // Code::cast cannot be used here since we access builtins | 352 // Code::cast cannot be used here since we access builtins |
345 // during the marking phase of mark sweep. See IC::Clear. | 353 // during the marking phase of mark sweep. See IC::Clear. |
346 return reinterpret_cast<Code*>(builtins_[name]); | 354 return reinterpret_cast<Code*>(builtins_[name]); |
347 } | 355 } |
348 | 356 |
349 Address builtin_address(Name name) { | 357 Address builtin_address(Name name) { |
350 return reinterpret_cast<Address>(&builtins_[name]); | 358 return reinterpret_cast<Address>(&builtins_[name]); |
351 } | 359 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
396 static void Generate_NotifySoftDeoptimized(MacroAssembler* masm); | 404 static void Generate_NotifySoftDeoptimized(MacroAssembler* masm); |
397 static void Generate_NotifyLazyDeoptimized(MacroAssembler* masm); | 405 static void Generate_NotifyLazyDeoptimized(MacroAssembler* masm); |
398 static void Generate_NotifyStubFailure(MacroAssembler* masm); | 406 static void Generate_NotifyStubFailure(MacroAssembler* masm); |
399 static void Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm); | 407 static void Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm); |
400 static void Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm); | 408 static void Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm); |
401 | 409 |
402 static void Generate_Apply(MacroAssembler* masm); | 410 static void Generate_Apply(MacroAssembler* masm); |
403 | 411 |
404 // ES6 section 9.2.1 [[Call]] ( thisArgument, argumentsList) | 412 // ES6 section 9.2.1 [[Call]] ( thisArgument, argumentsList) |
405 static void Generate_CallFunction(MacroAssembler* masm, | 413 static void Generate_CallFunction(MacroAssembler* masm, |
406 ConvertReceiverMode mode); | 414 ConvertReceiverMode mode, |
| 415 TailCallMode tail_call_mode); |
407 static void Generate_CallFunction_ReceiverIsNullOrUndefined( | 416 static void Generate_CallFunction_ReceiverIsNullOrUndefined( |
408 MacroAssembler* masm) { | 417 MacroAssembler* masm) { |
409 Generate_CallFunction(masm, ConvertReceiverMode::kNullOrUndefined); | 418 Generate_CallFunction(masm, ConvertReceiverMode::kNullOrUndefined, |
| 419 TailCallMode::kDisallow); |
410 } | 420 } |
411 static void Generate_CallFunction_ReceiverIsNotNullOrUndefined( | 421 static void Generate_CallFunction_ReceiverIsNotNullOrUndefined( |
412 MacroAssembler* masm) { | 422 MacroAssembler* masm) { |
413 Generate_CallFunction(masm, ConvertReceiverMode::kNotNullOrUndefined); | 423 Generate_CallFunction(masm, ConvertReceiverMode::kNotNullOrUndefined, |
| 424 TailCallMode::kDisallow); |
414 } | 425 } |
415 static void Generate_CallFunction_ReceiverIsAny(MacroAssembler* masm) { | 426 static void Generate_CallFunction_ReceiverIsAny(MacroAssembler* masm) { |
416 Generate_CallFunction(masm, ConvertReceiverMode::kAny); | 427 Generate_CallFunction(masm, ConvertReceiverMode::kAny, |
| 428 TailCallMode::kDisallow); |
| 429 } |
| 430 static void Generate_TailCallFunction_ReceiverIsNullOrUndefined( |
| 431 MacroAssembler* masm) { |
| 432 Generate_CallFunction(masm, ConvertReceiverMode::kNullOrUndefined, |
| 433 TailCallMode::kAllow); |
| 434 } |
| 435 static void Generate_TailCallFunction_ReceiverIsNotNullOrUndefined( |
| 436 MacroAssembler* masm) { |
| 437 Generate_CallFunction(masm, ConvertReceiverMode::kNotNullOrUndefined, |
| 438 TailCallMode::kAllow); |
| 439 } |
| 440 static void Generate_TailCallFunction_ReceiverIsAny(MacroAssembler* masm) { |
| 441 Generate_CallFunction(masm, ConvertReceiverMode::kAny, |
| 442 TailCallMode::kAllow); |
417 } | 443 } |
418 // ES6 section 9.4.1.1 [[Call]] ( thisArgument, argumentsList) | 444 // ES6 section 9.4.1.1 [[Call]] ( thisArgument, argumentsList) |
419 static void Generate_CallBoundFunction(MacroAssembler* masm); | 445 static void Generate_CallBoundFunction(MacroAssembler* masm); |
420 // ES6 section 7.3.12 Call(F, V, [argumentsList]) | 446 // ES6 section 7.3.12 Call(F, V, [argumentsList]) |
421 static void Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode); | 447 static void Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode); |
422 static void Generate_Call_ReceiverIsNullOrUndefined(MacroAssembler* masm) { | 448 static void Generate_Call_ReceiverIsNullOrUndefined(MacroAssembler* masm) { |
423 Generate_Call(masm, ConvertReceiverMode::kNullOrUndefined); | 449 Generate_Call(masm, ConvertReceiverMode::kNullOrUndefined); |
424 } | 450 } |
425 static void Generate_Call_ReceiverIsNotNullOrUndefined(MacroAssembler* masm) { | 451 static void Generate_Call_ReceiverIsNotNullOrUndefined(MacroAssembler* masm) { |
426 Generate_Call(masm, ConvertReceiverMode::kNotNullOrUndefined); | 452 Generate_Call(masm, ConvertReceiverMode::kNotNullOrUndefined); |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
528 friend class BuiltinFunctionTable; | 554 friend class BuiltinFunctionTable; |
529 friend class Isolate; | 555 friend class Isolate; |
530 | 556 |
531 DISALLOW_COPY_AND_ASSIGN(Builtins); | 557 DISALLOW_COPY_AND_ASSIGN(Builtins); |
532 }; | 558 }; |
533 | 559 |
534 } // namespace internal | 560 } // namespace internal |
535 } // namespace v8 | 561 } // namespace v8 |
536 | 562 |
537 #endif // V8_BUILTINS_H_ | 563 #endif // V8_BUILTINS_H_ |
OLD | NEW |