1 // Copyright 2012 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_CODEGEN_CODE_FACTORY_H_ 6 #define V8_CODEGEN_CODE_FACTORY_H_ 7 8 #include "src/codegen/callable.h" 9 #include "src/codegen/interface-descriptors.h" 10 #include "src/common/globals.h" 11 #include "src/objects/type-hints.h" 12 #include "src/utils/allocation.h" 13 14 namespace v8 { 15 namespace internal { 16 17 // For ArrayNoArgumentConstructor and ArraySingleArgumentConstructor. 18 enum AllocationSiteOverrideMode { 19 DONT_OVERRIDE, 20 DISABLE_ALLOCATION_SITES, 21 }; 22 23 class V8_EXPORT_PRIVATE CodeFactory final { 24 public: 25 // CEntry has var-args semantics (all the arguments are passed on the 26 // stack and the arguments count is passed via register) which currently 27 // can't be expressed in CallInterfaceDescriptor. Therefore only the code 28 // is exported here. 29 static Handle<Code> RuntimeCEntry(Isolate* isolate, int result_size = 1); 30 31 static Handle<Code> CEntry(Isolate* isolate, int result_size = 1, 32 SaveFPRegsMode save_doubles = kDontSaveFPRegs, 33 ArgvMode argv_mode = kArgvOnStack, 34 bool builtin_exit_frame = false); 35 36 // Initial states for ICs. 37 static Callable LoadGlobalIC(Isolate* isolate, TypeofMode typeof_mode); 38 static Callable LoadGlobalICInOptimizedCode(Isolate* isolate, 39 TypeofMode typeof_mode); 40 static Callable StoreOwnIC(Isolate* isolate); 41 static Callable StoreOwnICInOptimizedCode(Isolate* isolate); 42 43 static Callable KeyedStoreIC_SloppyArguments(Isolate* isolate, 44 KeyedAccessStoreMode mode); 45 static Callable ElementsTransitionAndStore(Isolate* isolate, 46 KeyedAccessStoreMode mode); 47 static Callable StoreFastElementIC(Isolate* isolate, 48 KeyedAccessStoreMode mode); 49 50 static Callable ResumeGenerator(Isolate* isolate); 51 52 static Callable FrameDropperTrampoline(Isolate* isolate); 53 static Callable HandleDebuggerStatement(Isolate* isolate); 54 55 static Callable BinaryOperation(Isolate* isolate, Operation op); 56 57 static Callable ApiGetter(Isolate* isolate); 58 static Callable CallApiCallback(Isolate* isolate); 59 60 static Callable NonPrimitiveToPrimitive( 61 Isolate* isolate, ToPrimitiveHint hint = ToPrimitiveHint::kDefault); 62 static Callable OrdinaryToPrimitive(Isolate* isolate, 63 OrdinaryToPrimitiveHint hint); 64 65 static Callable StringAdd(Isolate* isolate, 66 StringAddFlags flags = STRING_ADD_CHECK_NONE); 67 68 static Callable FastNewFunctionContext(Isolate* isolate, 69 ScopeType scope_type); 70 71 static Callable ArgumentAdaptor(Isolate* isolate); 72 static Callable Call(Isolate* isolate, 73 ConvertReceiverMode mode = ConvertReceiverMode::kAny); 74 static Callable Call_WithFeedback(Isolate* isolate, ConvertReceiverMode mode); 75 static Callable CallWithArrayLike(Isolate* isolate); 76 static Callable CallWithSpread(Isolate* isolate); 77 static Callable CallFunction( 78 Isolate* isolate, ConvertReceiverMode mode = ConvertReceiverMode::kAny); 79 static Callable CallVarargs(Isolate* isolate); 80 static Callable CallForwardVarargs(Isolate* isolate); 81 static Callable CallFunctionForwardVarargs(Isolate* isolate); 82 static Callable Construct(Isolate* isolate); 83 static Callable ConstructWithSpread(Isolate* isolate); 84 static Callable ConstructFunction(Isolate* isolate); 85 static Callable ConstructVarargs(Isolate* isolate); 86 static Callable ConstructForwardVarargs(Isolate* isolate); 87 static Callable ConstructFunctionForwardVarargs(Isolate* isolate); 88 89 static Callable InterpreterPushArgsThenCall(Isolate* isolate, 90 ConvertReceiverMode receiver_mode, 91 InterpreterPushArgsMode mode); 92 static Callable InterpreterPushArgsThenConstruct( 93 Isolate* isolate, InterpreterPushArgsMode mode); 94 static Callable InterpreterCEntry(Isolate* isolate, int result_size = 1); 95 static Callable InterpreterOnStackReplacement(Isolate* isolate); 96 97 static Callable ArrayNoArgumentConstructor( 98 Isolate* isolate, ElementsKind kind, 99 AllocationSiteOverrideMode override_mode); 100 static Callable ArraySingleArgumentConstructor( 101 Isolate* isolate, ElementsKind kind, 102 AllocationSiteOverrideMode override_mode); 103 }; 104 105 } // namespace internal 106 } // namespace v8 107 108 #endif // V8_CODEGEN_CODE_FACTORY_H_ 109