| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #include "src/code-stubs.h" | 5 #include "src/code-stubs.h" |
| 6 #include "src/compiler.h" | 6 #include "src/compiler.h" |
| 7 #include "src/compiler/linkage.h" | 7 #include "src/compiler/linkage.h" |
| 8 #include "src/compiler/node.h" | 8 #include "src/compiler/node.h" |
| 9 #include "src/compiler/pipeline.h" | 9 #include "src/compiler/pipeline.h" |
| 10 #include "src/scopes.h" | 10 #include "src/scopes.h" |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 return GetStubCallDescriptor(isolate_, zone_, descriptor, | 113 return GetStubCallDescriptor(isolate_, zone_, descriptor, |
| 114 stack_parameter_count, flags, properties); | 114 stack_parameter_count, flags, properties); |
| 115 } | 115 } |
| 116 | 116 |
| 117 | 117 |
| 118 // static | 118 // static |
| 119 bool Linkage::NeedsFrameState(Runtime::FunctionId function) { | 119 bool Linkage::NeedsFrameState(Runtime::FunctionId function) { |
| 120 if (!FLAG_turbo_deoptimization) { | 120 if (!FLAG_turbo_deoptimization) { |
| 121 return false; | 121 return false; |
| 122 } | 122 } |
| 123 // TODO(jarin) At the moment, we only add frame state for | 123 |
| 124 // few chosen runtime functions. | 124 // Most runtime functions need a FrameState. A few chosen ones that we know |
| 125 // not to call into arbitrary JavaScript, not to throw, and not to deoptimize |
| 126 // are blacklisted here and can be called without a FrameState. |
| 125 switch (function) { | 127 switch (function) { |
| 126 case Runtime::kApply: | 128 case Runtime::kBooleanize: |
| 127 case Runtime::kArrayBufferNeuter: | 129 case Runtime::kDeclareGlobals: // TODO(jarin): Is it safe? |
| 128 case Runtime::kArrayConcat: | 130 case Runtime::kDefineClassMethod: // TODO(jarin): Is it safe? |
| 129 case Runtime::kBasicJSONStringify: | 131 case Runtime::kDefineGetterPropertyUnchecked: // TODO(jarin): Is it safe? |
| 130 case Runtime::kCheckExecutionState: | 132 case Runtime::kDefineSetterPropertyUnchecked: // TODO(jarin): Is it safe? |
| 131 case Runtime::kCollectStackTrace: | 133 case Runtime::kForInCacheArrayLength: |
| 132 case Runtime::kCompileLazy: | 134 case Runtime::kForInInit: |
| 133 case Runtime::kCompileOptimized: | 135 case Runtime::kForInNext: |
| 134 case Runtime::kCompileString: | 136 case Runtime::kNewArguments: |
| 135 case Runtime::kCreateArrayLiteral: | 137 case Runtime::kNewClosure: |
| 136 case Runtime::kCreateObjectLiteral: | 138 case Runtime::kNewFunctionContext: |
| 137 case Runtime::kDebugBreak: | 139 case Runtime::kPushBlockContext: |
| 138 case Runtime::kDataViewSetInt8: | 140 case Runtime::kPushCatchContext: |
| 139 case Runtime::kDataViewSetUint8: | 141 case Runtime::kReThrow: |
| 140 case Runtime::kDataViewSetInt16: | 142 case Runtime::kSetProperty: // TODO(jarin): Is it safe? |
| 141 case Runtime::kDataViewSetUint16: | 143 case Runtime::kStringCompare: |
| 142 case Runtime::kDataViewSetInt32: | 144 case Runtime::kStringEquals: |
| 143 case Runtime::kDataViewSetUint32: | 145 case Runtime::kToFastProperties: // TODO(jarin): Is it safe? |
| 144 case Runtime::kDataViewSetFloat32: | 146 case Runtime::kTraceEnter: |
| 145 case Runtime::kDataViewSetFloat64: | 147 case Runtime::kTraceExit: |
| 146 case Runtime::kDataViewGetInt8: | 148 case Runtime::kTypeof: |
| 147 case Runtime::kDataViewGetUint8: | 149 return false; |
| 148 case Runtime::kDataViewGetInt16: | |
| 149 case Runtime::kDataViewGetUint16: | |
| 150 case Runtime::kDataViewGetInt32: | |
| 151 case Runtime::kDataViewGetUint32: | |
| 152 case Runtime::kDataViewGetFloat32: | |
| 153 case Runtime::kDataViewGetFloat64: | |
| 154 case Runtime::kDebugEvaluate: | |
| 155 case Runtime::kDebugEvaluateGlobal: | |
| 156 case Runtime::kDebugGetLoadedScripts: | |
| 157 case Runtime::kDebugGetPropertyDetails: | |
| 158 case Runtime::kDebugPromiseEvent: | |
| 159 case Runtime::kDefaultConstructorSuperCall: | |
| 160 case Runtime::kDefineAccessorPropertyUnchecked: | |
| 161 case Runtime::kDefineClass: | |
| 162 case Runtime::kDefineDataPropertyUnchecked: | |
| 163 case Runtime::kDeleteProperty: | |
| 164 case Runtime::kDeliverObservationChangeRecords: | |
| 165 case Runtime::kDeoptimizeFunction: | |
| 166 case Runtime::kFunctionBindArguments: | |
| 167 case Runtime::kGetDefaultReceiver: | |
| 168 case Runtime::kGetFrameCount: | |
| 169 case Runtime::kGetOwnProperty: | |
| 170 case Runtime::kGetOwnPropertyNames: | |
| 171 case Runtime::kGetPropertyNamesFast: | |
| 172 case Runtime::kGetPrototype: | |
| 173 case Runtime::kInlineArguments: | 150 case Runtime::kInlineArguments: |
| 174 case Runtime::kInlineCallFunction: | 151 case Runtime::kInlineCallFunction: |
| 175 case Runtime::kInlineDateField: | 152 case Runtime::kInlineDateField: |
| 176 case Runtime::kInlineOptimizedGetPrototype: | 153 case Runtime::kInlineOptimizedGetPrototype: |
| 177 case Runtime::kInlineRegExpExec: | 154 case Runtime::kInlineRegExpExec: |
| 178 case Runtime::kInternalSetPrototype: | |
| 179 case Runtime::kInterrupt: | |
| 180 case Runtime::kIsPropertyEnumerable: | |
| 181 case Runtime::kIsSloppyModeFunction: | |
| 182 case Runtime::kLiveEditGatherCompileInfo: | |
| 183 case Runtime::kLoadLookupSlot: | |
| 184 case Runtime::kLoadLookupSlotNoReferenceError: | |
| 185 case Runtime::kMaterializeRegExpLiteral: | |
| 186 case Runtime::kNewObject: | |
| 187 case Runtime::kNewObjectFromBound: | |
| 188 case Runtime::kNewObjectWithAllocationSite: | |
| 189 case Runtime::kObjectFreeze: | |
| 190 case Runtime::kObjectSeal: | |
| 191 case Runtime::kOwnKeys: | |
| 192 case Runtime::kParseJson: | |
| 193 case Runtime::kPrepareStep: | |
| 194 case Runtime::kPreventExtensions: | |
| 195 case Runtime::kPromiseRejectEvent: | |
| 196 case Runtime::kPromiseRevokeReject: | |
| 197 case Runtime::kPushWithContext: | |
| 198 case Runtime::kRegExpInitializeAndCompile: | |
| 199 case Runtime::kRegExpExecMultiple: | |
| 200 case Runtime::kResolvePossiblyDirectEval: | |
| 201 case Runtime::kRunMicrotasks: | |
| 202 case Runtime::kSetPrototype: | |
| 203 case Runtime::kSetScriptBreakPoint: | |
| 204 case Runtime::kSparseJoinWithSeparator: | |
| 205 case Runtime::kStackGuard: | |
| 206 case Runtime::kStoreKeyedToSuper_Sloppy: | |
| 207 case Runtime::kStoreKeyedToSuper_Strict: | |
| 208 case Runtime::kStoreToSuper_Sloppy: | |
| 209 case Runtime::kStoreToSuper_Strict: | |
| 210 case Runtime::kStoreLookupSlot: | |
| 211 case Runtime::kStringBuilderConcat: | |
| 212 case Runtime::kStringBuilderJoin: | |
| 213 case Runtime::kStringMatch: | |
| 214 case Runtime::kStringReplaceGlobalRegExpWithString: | |
| 215 case Runtime::kThrowConstAssignError: | |
| 216 case Runtime::kThrowConstructorNonCallableError: | |
| 217 case Runtime::kThrowNonMethodError: | |
| 218 case Runtime::kThrowNotDateError: | |
| 219 case Runtime::kThrowReferenceError: | |
| 220 case Runtime::kThrowUnsupportedSuperError: | |
| 221 case Runtime::kThrow: | |
| 222 case Runtime::kTypedArraySetFastCases: | |
| 223 case Runtime::kTypedArrayInitializeFromArrayLike: | |
| 224 #ifdef V8_I18N_SUPPORT | |
| 225 case Runtime::kGetImplFromInitializedIntlObject: | |
| 226 #endif | |
| 227 return true; | 155 return true; |
| 228 default: | 156 default: |
| 229 return false; | 157 break; |
| 230 } | 158 } |
| 159 |
| 160 // Most inlined runtime functions (except the ones listed above) can be called |
| 161 // without a FrameState or will be lowered by JSIntrinsicLowering internally. |
| 162 const Runtime::Function* const f = Runtime::FunctionForId(function); |
| 163 if (f->intrinsic_type == Runtime::IntrinsicType::INLINE) return false; |
| 164 |
| 165 return true; |
| 231 } | 166 } |
| 232 | 167 |
| 233 | 168 |
| 234 //============================================================================== | 169 //============================================================================== |
| 235 // Provide unimplemented methods on unsupported architectures, to at least link. | 170 // Provide unimplemented methods on unsupported architectures, to at least link. |
| 236 //============================================================================== | 171 //============================================================================== |
| 237 #if !V8_TURBOFAN_BACKEND | 172 #if !V8_TURBOFAN_BACKEND |
| 238 CallDescriptor* Linkage::GetJSCallDescriptor(Zone* zone, bool is_osr, | 173 CallDescriptor* Linkage::GetJSCallDescriptor(Zone* zone, bool is_osr, |
| 239 int parameter_count, | 174 int parameter_count, |
| 240 CallDescriptor::Flags flags) { | 175 CallDescriptor::Flags flags) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 268 | 203 |
| 269 CallDescriptor* Linkage::GetSimplifiedCDescriptor(Zone* zone, | 204 CallDescriptor* Linkage::GetSimplifiedCDescriptor(Zone* zone, |
| 270 MachineSignature* sig) { | 205 MachineSignature* sig) { |
| 271 UNIMPLEMENTED(); | 206 UNIMPLEMENTED(); |
| 272 return NULL; | 207 return NULL; |
| 273 } | 208 } |
| 274 #endif // !V8_TURBOFAN_BACKEND | 209 #endif // !V8_TURBOFAN_BACKEND |
| 275 } | 210 } |
| 276 } | 211 } |
| 277 } // namespace v8::internal::compiler | 212 } // namespace v8::internal::compiler |
| OLD | NEW |