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

Side by Side Diff: src/builtins.h

Issue 1824993002: [builtins] Add support for JS builtins written in TurboFan. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Address comments Created 4 years, 9 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 | « src/bootstrapper.cc ('k') | src/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_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
11 namespace v8 { 11 namespace v8 {
12 namespace internal { 12 namespace internal {
13 13
14 namespace compiler {
15
16 // Forward declarations.
17 class CodeStubAssembler;
18
19 } // namespace compiler
20
14 // Specifies extra arguments required by a C++ builtin. 21 // Specifies extra arguments required by a C++ builtin.
15 enum class BuiltinExtraArguments : uint8_t { 22 enum class BuiltinExtraArguments : uint8_t {
16 kNone = 0u, 23 kNone = 0u,
17 kTarget = 1u << 0, 24 kTarget = 1u << 0,
18 kNewTarget = 1u << 1, 25 kNewTarget = 1u << 1,
19 kTargetAndNewTarget = kTarget | kNewTarget 26 kTargetAndNewTarget = kTarget | kNewTarget
20 }; 27 };
21 28
22 inline bool operator&(BuiltinExtraArguments lhs, BuiltinExtraArguments rhs) { 29 inline bool operator&(BuiltinExtraArguments lhs, BuiltinExtraArguments rhs) {
23 return static_cast<uint8_t>(lhs) & static_cast<uint8_t>(rhs); 30 return static_cast<uint8_t>(lhs) & static_cast<uint8_t>(rhs);
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 \ 299 \
293 V(OnStackReplacement, BUILTIN, UNINITIALIZED, kNoExtraICState) \ 300 V(OnStackReplacement, BUILTIN, UNINITIALIZED, kNoExtraICState) \
294 V(InterruptCheck, BUILTIN, UNINITIALIZED, kNoExtraICState) \ 301 V(InterruptCheck, BUILTIN, UNINITIALIZED, kNoExtraICState) \
295 V(StackCheck, BUILTIN, UNINITIALIZED, kNoExtraICState) \ 302 V(StackCheck, BUILTIN, UNINITIALIZED, kNoExtraICState) \
296 \ 303 \
297 V(MarkCodeAsToBeExecutedOnce, BUILTIN, UNINITIALIZED, kNoExtraICState) \ 304 V(MarkCodeAsToBeExecutedOnce, BUILTIN, UNINITIALIZED, kNoExtraICState) \
298 V(MarkCodeAsExecutedOnce, BUILTIN, UNINITIALIZED, kNoExtraICState) \ 305 V(MarkCodeAsExecutedOnce, BUILTIN, UNINITIALIZED, kNoExtraICState) \
299 V(MarkCodeAsExecutedTwice, BUILTIN, UNINITIALIZED, kNoExtraICState) \ 306 V(MarkCodeAsExecutedTwice, BUILTIN, UNINITIALIZED, kNoExtraICState) \
300 CODE_AGE_LIST_WITH_ARG(DECLARE_CODE_AGE_BUILTIN, V) 307 CODE_AGE_LIST_WITH_ARG(DECLARE_CODE_AGE_BUILTIN, V)
301 308
309 // Define list of builtins implemented in TurboFan (with JS linkage).
310 #define BUILTIN_LIST_T(V) V(MathSqrt, 2)
311
302 // Define list of builtin handlers implemented in assembly. 312 // Define list of builtin handlers implemented in assembly.
303 #define BUILTIN_LIST_H(V) \ 313 #define BUILTIN_LIST_H(V) \
304 V(LoadIC_Slow, LOAD_IC) \ 314 V(LoadIC_Slow, LOAD_IC) \
305 V(KeyedLoadIC_Slow, KEYED_LOAD_IC) \ 315 V(KeyedLoadIC_Slow, KEYED_LOAD_IC) \
306 V(StoreIC_Slow, STORE_IC) \ 316 V(StoreIC_Slow, STORE_IC) \
307 V(KeyedStoreIC_Slow, KEYED_STORE_IC) \ 317 V(KeyedStoreIC_Slow, KEYED_STORE_IC) \
308 V(LoadIC_Normal, LOAD_IC) \ 318 V(LoadIC_Normal, LOAD_IC) \
309 V(StoreIC_Normal, STORE_IC) 319 V(StoreIC_Normal, STORE_IC)
310 320
311 // Define list of builtins used by the debugger implemented in assembly. 321 // Define list of builtins used by the debugger implemented in assembly.
(...skipping 18 matching lines...) Expand all
330 340
331 // Garbage collection support. 341 // Garbage collection support.
332 void IterateBuiltins(ObjectVisitor* v); 342 void IterateBuiltins(ObjectVisitor* v);
333 343
334 // Disassembler support. 344 // Disassembler support.
335 const char* Lookup(byte* pc); 345 const char* Lookup(byte* pc);
336 346
337 enum Name { 347 enum Name {
338 #define DEF_ENUM_C(name, ignore) k##name, 348 #define DEF_ENUM_C(name, ignore) k##name,
339 #define DEF_ENUM_A(name, kind, state, extra) k##name, 349 #define DEF_ENUM_A(name, kind, state, extra) k##name,
350 #define DEF_ENUM_T(name, argc) k##name,
340 #define DEF_ENUM_H(name, kind) k##name, 351 #define DEF_ENUM_H(name, kind) k##name,
341 BUILTIN_LIST_C(DEF_ENUM_C) 352 BUILTIN_LIST_C(DEF_ENUM_C) BUILTIN_LIST_A(DEF_ENUM_A)
342 BUILTIN_LIST_A(DEF_ENUM_A) 353 BUILTIN_LIST_T(DEF_ENUM_T) BUILTIN_LIST_H(DEF_ENUM_H)
343 BUILTIN_LIST_H(DEF_ENUM_H) 354 BUILTIN_LIST_DEBUG_A(DEF_ENUM_A)
344 BUILTIN_LIST_DEBUG_A(DEF_ENUM_A)
345 #undef DEF_ENUM_C 355 #undef DEF_ENUM_C
346 #undef DEF_ENUM_A 356 #undef DEF_ENUM_A
347 builtin_count 357 #undef DEF_ENUM_T
358 #undef DEF_ENUM_H
359 builtin_count
348 }; 360 };
349 361
350 enum CFunctionId { 362 enum CFunctionId {
351 #define DEF_ENUM_C(name, ignore) c_##name, 363 #define DEF_ENUM_C(name, ignore) c_##name,
352 BUILTIN_LIST_C(DEF_ENUM_C) 364 BUILTIN_LIST_C(DEF_ENUM_C)
353 #undef DEF_ENUM_C 365 #undef DEF_ENUM_C
354 cfunction_count 366 cfunction_count
355 }; 367 };
356 368
357 #define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle<Code> name(); 369 #define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle<Code> name();
358 #define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \ 370 #define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \
359 Handle<Code> name(); 371 Handle<Code> name();
372 #define DECLARE_BUILTIN_ACCESSOR_T(name, argc) Handle<Code> name();
360 #define DECLARE_BUILTIN_ACCESSOR_H(name, kind) Handle<Code> name(); 373 #define DECLARE_BUILTIN_ACCESSOR_H(name, kind) Handle<Code> name();
361 BUILTIN_LIST_C(DECLARE_BUILTIN_ACCESSOR_C) 374 BUILTIN_LIST_C(DECLARE_BUILTIN_ACCESSOR_C)
362 BUILTIN_LIST_A(DECLARE_BUILTIN_ACCESSOR_A) 375 BUILTIN_LIST_A(DECLARE_BUILTIN_ACCESSOR_A)
376 BUILTIN_LIST_T(DECLARE_BUILTIN_ACCESSOR_T)
363 BUILTIN_LIST_H(DECLARE_BUILTIN_ACCESSOR_H) 377 BUILTIN_LIST_H(DECLARE_BUILTIN_ACCESSOR_H)
364 BUILTIN_LIST_DEBUG_A(DECLARE_BUILTIN_ACCESSOR_A) 378 BUILTIN_LIST_DEBUG_A(DECLARE_BUILTIN_ACCESSOR_A)
365 #undef DECLARE_BUILTIN_ACCESSOR_C 379 #undef DECLARE_BUILTIN_ACCESSOR_C
366 #undef DECLARE_BUILTIN_ACCESSOR_A 380 #undef DECLARE_BUILTIN_ACCESSOR_A
381 #undef DECLARE_BUILTIN_ACCESSOR_T
382 #undef DECLARE_BUILTIN_ACCESSOR_H
367 383
368 // Convenience wrappers. 384 // Convenience wrappers.
369 Handle<Code> CallFunction( 385 Handle<Code> CallFunction(
370 ConvertReceiverMode = ConvertReceiverMode::kAny, 386 ConvertReceiverMode = ConvertReceiverMode::kAny,
371 TailCallMode tail_call_mode = TailCallMode::kDisallow); 387 TailCallMode tail_call_mode = TailCallMode::kDisallow);
372 Handle<Code> Call(ConvertReceiverMode = ConvertReceiverMode::kAny, 388 Handle<Code> Call(ConvertReceiverMode = ConvertReceiverMode::kAny,
373 TailCallMode tail_call_mode = TailCallMode::kDisallow); 389 TailCallMode tail_call_mode = TailCallMode::kDisallow);
374 Handle<Code> CallBoundFunction(TailCallMode tail_call_mode); 390 Handle<Code> CallBoundFunction(TailCallMode tail_call_mode);
375 Handle<Code> InterpreterPushArgsAndCall(TailCallMode tail_call_mode); 391 Handle<Code> InterpreterPushArgsAndCall(TailCallMode tail_call_mode);
376 392
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 enum class MathMaxMinKind { kMax, kMin }; 583 enum class MathMaxMinKind { kMax, kMin };
568 static void Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind); 584 static void Generate_MathMaxMin(MacroAssembler* masm, MathMaxMinKind kind);
569 // ES6 section 20.2.2.24 Math.max ( value1, value2 , ...values ) 585 // ES6 section 20.2.2.24 Math.max ( value1, value2 , ...values )
570 static void Generate_MathMax(MacroAssembler* masm) { 586 static void Generate_MathMax(MacroAssembler* masm) {
571 Generate_MathMaxMin(masm, MathMaxMinKind::kMax); 587 Generate_MathMaxMin(masm, MathMaxMinKind::kMax);
572 } 588 }
573 // ES6 section 20.2.2.25 Math.min ( value1, value2 , ...values ) 589 // ES6 section 20.2.2.25 Math.min ( value1, value2 , ...values )
574 static void Generate_MathMin(MacroAssembler* masm) { 590 static void Generate_MathMin(MacroAssembler* masm) {
575 Generate_MathMaxMin(masm, MathMaxMinKind::kMin); 591 Generate_MathMaxMin(masm, MathMaxMinKind::kMin);
576 } 592 }
593 // ES6 section 20.2.2.32 Math.sqrt ( x )
594 static void Generate_MathSqrt(compiler::CodeStubAssembler* assembler);
577 595
578 // ES6 section 20.1.1.1 Number ( [ value ] ) for the [[Call]] case. 596 // ES6 section 20.1.1.1 Number ( [ value ] ) for the [[Call]] case.
579 static void Generate_NumberConstructor(MacroAssembler* masm); 597 static void Generate_NumberConstructor(MacroAssembler* masm);
580 // ES6 section 20.1.1.1 Number ( [ value ] ) for the [[Construct]] case. 598 // ES6 section 20.1.1.1 Number ( [ value ] ) for the [[Construct]] case.
581 static void Generate_NumberConstructor_ConstructStub(MacroAssembler* masm); 599 static void Generate_NumberConstructor_ConstructStub(MacroAssembler* masm);
582 600
583 static void Generate_StringConstructor(MacroAssembler* masm); 601 static void Generate_StringConstructor(MacroAssembler* masm);
584 static void Generate_StringConstructor_ConstructStub(MacroAssembler* masm); 602 static void Generate_StringConstructor_ConstructStub(MacroAssembler* masm);
585 static void Generate_OnStackReplacement(MacroAssembler* masm); 603 static void Generate_OnStackReplacement(MacroAssembler* masm);
586 static void Generate_InterruptCheck(MacroAssembler* masm); 604 static void Generate_InterruptCheck(MacroAssembler* masm);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 friend class BuiltinFunctionTable; 640 friend class BuiltinFunctionTable;
623 friend class Isolate; 641 friend class Isolate;
624 642
625 DISALLOW_COPY_AND_ASSIGN(Builtins); 643 DISALLOW_COPY_AND_ASSIGN(Builtins);
626 }; 644 };
627 645
628 } // namespace internal 646 } // namespace internal
629 } // namespace v8 647 } // namespace v8
630 648
631 #endif // V8_BUILTINS_H_ 649 #endif // V8_BUILTINS_H_
OLDNEW
« no previous file with comments | « src/bootstrapper.cc ('k') | src/builtins.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698