diff options
Diffstat (limited to 'deps/v8/src/builtins/builtins.cc')
-rw-r--r-- | deps/v8/src/builtins/builtins.cc | 1138 |
1 files changed, 1113 insertions, 25 deletions
diff --git a/deps/v8/src/builtins/builtins.cc b/deps/v8/src/builtins/builtins.cc index dc175e50b7..ad1763a292 100644 --- a/deps/v8/src/builtins/builtins.cc +++ b/deps/v8/src/builtins/builtins.cc @@ -86,8 +86,9 @@ Builtins::Name Builtins::GetBuiltinFromBailoutId(BailoutId id) { void Builtins::TearDown() { initialized_ = false; } void Builtins::IterateBuiltins(RootVisitor* v) { - v->VisitRootPointers(Root::kBuiltins, &builtins_[0], - &builtins_[0] + builtin_count); + for (int i = 0; i < builtin_count; i++) { + v->VisitRootPointer(Root::kBuiltins, name(i), &builtins_[i]); + } } const char* Builtins::Lookup(byte* pc) { @@ -170,30 +171,11 @@ Callable Builtins::CallableFor(Isolate* isolate, Name name) { BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, CASE_OTHER, CASE_OTHER, CASE_OTHER, IGNORE_BUILTIN) #undef CASE_OTHER - case kArrayFilterLoopEagerDeoptContinuation: - case kArrayFilterLoopLazyDeoptContinuation: - case kArrayEveryLoopEagerDeoptContinuation: - case kArrayEveryLoopLazyDeoptContinuation: - case kArrayFindIndexLoopAfterCallbackLazyDeoptContinuation: - case kArrayFindIndexLoopEagerDeoptContinuation: - case kArrayFindIndexLoopLazyDeoptContinuation: - case kArrayFindLoopAfterCallbackLazyDeoptContinuation: - case kArrayFindLoopEagerDeoptContinuation: - case kArrayFindLoopLazyDeoptContinuation: - case kArrayForEach: - case kArrayForEachLoopEagerDeoptContinuation: - case kArrayForEachLoopLazyDeoptContinuation: - case kArrayMapLoopEagerDeoptContinuation: - case kArrayMapLoopLazyDeoptContinuation: - case kArrayReduceLoopEagerDeoptContinuation: - case kArrayReduceLoopLazyDeoptContinuation: - case kArrayReduceRightLoopEagerDeoptContinuation: - case kArrayReduceRightLoopLazyDeoptContinuation: - case kArraySomeLoopEagerDeoptContinuation: - case kArraySomeLoopLazyDeoptContinuation: - case kConsoleAssert: - return Callable(code, BuiltinDescriptor(isolate)); default: + Builtins::Kind kind = Builtins::KindOf(name); + if (kind == TFJ || kind == CPP) { + return Callable(code, BuiltinDescriptor(isolate)); + } UNREACHABLE(); } CallInterfaceDescriptor descriptor(isolate, key); @@ -213,6 +195,22 @@ Address Builtins::CppEntryOf(int index) { } // static +bool Builtins::IsBuiltin(Code* code) { + return Builtins::IsBuiltinId(code->builtin_index()); +} + +// static +bool Builtins::IsOffHeapBuiltin(Code* code) { +#ifdef V8_EMBEDDED_BUILTINS + return FLAG_stress_off_heap_code && + Builtins::IsBuiltinId(code->builtin_index()) && + Builtins::IsOffHeapSafe(code->builtin_index()); +#else + return false; +#endif +} + +// static bool Builtins::IsLazy(int index) { DCHECK(IsBuiltinId(index)); // There are a couple of reasons that builtins can require eager-loading, @@ -245,12 +243,16 @@ bool Builtins::IsLazy(int index) { case kArrayEveryLoopLazyDeoptContinuation: // https://crbug.com/v8/6786. case kArrayFilterLoopEagerDeoptContinuation: // https://crbug.com/v8/6786. case kArrayFilterLoopLazyDeoptContinuation: // https://crbug.com/v8/6786. + case kArrayReducePreLoopEagerDeoptContinuation: case kArrayReduceLoopEagerDeoptContinuation: // https://crbug.com/v8/6786. case kArrayReduceLoopLazyDeoptContinuation: // https://crbug.com/v8/6786. + case kArrayReduceRightPreLoopEagerDeoptContinuation: case kArrayReduceRightLoopEagerDeoptContinuation: case kArrayReduceRightLoopLazyDeoptContinuation: case kArraySomeLoopEagerDeoptContinuation: // https://crbug.com/v8/6786. case kArraySomeLoopLazyDeoptContinuation: // https://crbug.com/v8/6786. + case kAsyncGeneratorAwaitCaught: // https://crbug.com/v8/6786. + case kAsyncGeneratorAwaitUncaught: // https://crbug.com/v8/6786. case kCheckOptimizationMarker: case kCompileLazy: case kDeserializeLazy: @@ -261,9 +263,11 @@ bool Builtins::IsLazy(int index) { case kInterpreterEnterBytecodeDispatch: case kInterpreterEntryTrampoline: case kObjectConstructor_ConstructStub: // https://crbug.com/v8/6787. + case kPromiseConstructorLazyDeoptContinuation: // crbug/v8/6786. case kProxyConstructor_ConstructStub: // https://crbug.com/v8/6787. case kNumberConstructor_ConstructStub: // https://crbug.com/v8/6787. case kStringConstructor_ConstructStub: // https://crbug.com/v8/6787. + case kTypedArrayConstructor_ConstructStub: // https://crbug.com/v8/6787. case kProxyConstructor: // https://crbug.com/v8/6787. case kRecordWrite: // https://crbug.com/chromium/765301. case kThrowWasmTrapDivByZero: // Required by wasm. @@ -286,6 +290,1090 @@ bool Builtins::IsLazy(int index) { } // static +bool Builtins::IsIsolateIndependent(int index) { + DCHECK(IsBuiltinId(index)); + switch (index) { +#ifdef DEBUG + case kAbortJS: + case kAllocateHeapNumber: + case kArrayEveryLoopEagerDeoptContinuation: + case kArrayFilterLoopEagerDeoptContinuation: + case kArrayFindIndexLoopEagerDeoptContinuation: + case kArrayFindIndexLoopLazyDeoptContinuation: + case kArrayFindLoopEagerDeoptContinuation: + case kArrayFindLoopLazyDeoptContinuation: + case kArrayForEachLoopEagerDeoptContinuation: + case kArrayForEachLoopLazyDeoptContinuation: + case kArrayMapLoopEagerDeoptContinuation: + case kArrayReduceLoopEagerDeoptContinuation: + case kArrayReduceLoopLazyDeoptContinuation: + case kArrayReducePreLoopEagerDeoptContinuation: + case kArrayReduceRightLoopEagerDeoptContinuation: + case kArrayReduceRightLoopLazyDeoptContinuation: + case kArrayReduceRightPreLoopEagerDeoptContinuation: + case kArraySomeLoopEagerDeoptContinuation: + case kBitwiseNot: + case kBooleanPrototypeToString: + case kBooleanPrototypeValueOf: + case kContinueToCodeStubBuiltin: + case kContinueToCodeStubBuiltinWithResult: + case kContinueToJavaScriptBuiltin: + case kContinueToJavaScriptBuiltinWithResult: + case kDatePrototypeGetDate: + case kDatePrototypeGetDay: + case kDatePrototypeGetFullYear: + case kDatePrototypeGetHours: + case kDatePrototypeGetMilliseconds: + case kDatePrototypeGetMinutes: + case kDatePrototypeGetMonth: + case kDatePrototypeGetSeconds: + case kDatePrototypeGetTime: + case kDatePrototypeGetTimezoneOffset: + case kDatePrototypeGetUTCDate: + case kDatePrototypeGetUTCDay: + case kDatePrototypeGetUTCFullYear: + case kDatePrototypeGetUTCHours: + case kDatePrototypeGetUTCMilliseconds: + case kDatePrototypeGetUTCMinutes: + case kDatePrototypeGetUTCMonth: + case kDatePrototypeGetUTCSeconds: + case kDatePrototypeToPrimitive: + case kDatePrototypeValueOf: + case kDecrement: + case kDivide: + case kGlobalIsFinite: + case kGlobalIsNaN: + case kIncrement: + case kKeyedLoadIC_Slow: + case kKeyedLoadICTrampoline: + case kKeyedStoreIC_Slow: + case kKeyedStoreICTrampoline: + case kLoadField: + case kLoadGlobalICInsideTypeofTrampoline: + case kLoadGlobalIC_Slow: + case kLoadGlobalICTrampoline: + case kLoadIC_Slow: + case kLoadICTrampoline: + case kMapPrototypeEntries: + case kMapPrototypeGet: + case kMapPrototypeGetSize: + case kMapPrototypeHas: + case kMapPrototypeKeys: + case kMapPrototypeValues: + case kMathAcos: + case kMathAcosh: + case kMathAsin: + case kMathAsinh: + case kMathAtan: + case kMathAtan2: + case kMathAtanh: + case kMathCbrt: + case kMathCeil: + case kMathCos: + case kMathCosh: + case kMathExp: + case kMathExpm1: + case kMathFloor: + case kMathFround: + case kMathLog: + case kMathLog10: + case kMathLog1p: + case kMathLog2: + case kMathMax: + case kMathMin: + case kMathRound: + case kMathSign: + case kMathSin: + case kMathSinh: + case kMathSqrt: + case kMathTan: + case kMathTanh: + case kMathTrunc: + case kModulus: + case kMultiply: + case kNonPrimitiveToPrimitive_Default: + case kNonPrimitiveToPrimitive_Number: + case kNonPrimitiveToPrimitive_String: + case kNumberIsFinite: + case kNumberIsInteger: + case kNumberIsNaN: + case kNumberIsSafeInteger: + case kNumberPrototypeValueOf: + case kObjectPrototypeToLocaleString: + case kObjectPrototypeValueOf: + case kPromiseCapabilityDefaultReject: + case kPromiseCapabilityDefaultResolve: + case kPromiseConstructorLazyDeoptContinuation: + case kPromiseInternalReject: + case kPromiseInternalResolve: + case kPromiseResolveTrampoline: + case kPromiseThrowerFinally: + case kPromiseValueThunkFinally: + case kProxyConstructor: + case kReflectHas: + case kRegExpPrototypeDotAllGetter: + case kRegExpPrototypeGlobalGetter: + case kRegExpPrototypeIgnoreCaseGetter: + case kRegExpPrototypeMultilineGetter: + case kRegExpPrototypeSourceGetter: + case kRegExpPrototypeStickyGetter: + case kRegExpPrototypeUnicodeGetter: + case kReturnReceiver: + case kSetPrototypeEntries: + case kSetPrototypeGetSize: + case kSetPrototypeValues: + case kStoreGlobalIC_Slow: + case kStoreGlobalICTrampoline: + case kStoreICTrampoline: + case kStringPrototypeBig: + case kStringPrototypeBlink: + case kStringPrototypeBold: + case kStringPrototypeConcat: + case kStringPrototypeFixed: + case kStringPrototypeItalics: + case kStringPrototypeIterator: + case kStringPrototypeSmall: + case kStringPrototypeStrike: + case kStringPrototypeSub: + case kStringPrototypeSup: +#ifdef V8_INTL_SUPPORT + case kStringPrototypeToLowerCaseIntl: +#endif + case kSubtract: + case kSymbolPrototypeToPrimitive: + case kSymbolPrototypeToString: + case kSymbolPrototypeValueOf: + case kThrowWasmTrapDivByZero: + case kThrowWasmTrapDivUnrepresentable: + case kThrowWasmTrapFloatUnrepresentable: + case kThrowWasmTrapFuncInvalid: + case kThrowWasmTrapFuncSigMismatch: + case kThrowWasmTrapMemOutOfBounds: + case kThrowWasmTrapRemByZero: + case kThrowWasmTrapUnreachable: + case kToInteger: + case kTypedArrayConstructor: + case kWasmStackGuard: + case kWeakMapGet: + case kWeakMapHas: + case kWeakMapPrototypeDelete: + case kWeakMapPrototypeSet: + case kWeakSetHas: + case kWeakSetPrototypeAdd: + case kWeakSetPrototypeDelete: +#else + case kAbortJS: + case kAdd: + case kAllocateHeapNumber: + case kArrayEvery: + case kArrayEveryLoopContinuation: + case kArrayEveryLoopEagerDeoptContinuation: + case kArrayEveryLoopLazyDeoptContinuation: + case kArrayFilterLoopEagerDeoptContinuation: + case kArrayFilterLoopLazyDeoptContinuation: + case kArrayFindIndexLoopAfterCallbackLazyDeoptContinuation: + case kArrayFindIndexLoopContinuation: + case kArrayFindIndexLoopEagerDeoptContinuation: + case kArrayFindIndexLoopLazyDeoptContinuation: + case kArrayFindLoopAfterCallbackLazyDeoptContinuation: + case kArrayFindLoopContinuation: + case kArrayFindLoopEagerDeoptContinuation: + case kArrayFindLoopLazyDeoptContinuation: + case kArrayForEach: + case kArrayForEachLoopContinuation: + case kArrayForEachLoopEagerDeoptContinuation: + case kArrayForEachLoopLazyDeoptContinuation: + case kArrayFrom: + case kArrayIncludes: + case kArrayIndexOf: + case kArrayIsArray: + case kArrayMapLoopContinuation: + case kArrayMapLoopEagerDeoptContinuation: + case kArrayMapLoopLazyDeoptContinuation: + case kArrayOf: + case kArrayPrototypeEntries: + case kArrayPrototypeFind: + case kArrayPrototypeFindIndex: + case kArrayPrototypeKeys: + case kArrayPrototypeSlice: + case kArrayPrototypeValues: + case kArrayReduce: + case kArrayReduceLoopContinuation: + case kArrayReduceLoopEagerDeoptContinuation: + case kArrayReduceLoopLazyDeoptContinuation: + case kArrayReducePreLoopEagerDeoptContinuation: + case kArrayReduceRight: + case kArrayReduceRightLoopContinuation: + case kArrayReduceRightLoopEagerDeoptContinuation: + case kArrayReduceRightLoopLazyDeoptContinuation: + case kArrayReduceRightPreLoopEagerDeoptContinuation: + case kArraySome: + case kArraySomeLoopContinuation: + case kArraySomeLoopEagerDeoptContinuation: + case kArraySomeLoopLazyDeoptContinuation: + case kAsyncFromSyncIteratorPrototypeNext: + case kAsyncFromSyncIteratorPrototypeReturn: + case kAsyncFromSyncIteratorPrototypeThrow: + case kAsyncFunctionAwaitFulfill: + case kAsyncFunctionAwaitReject: + case kAsyncFunctionPromiseCreate: + case kAsyncFunctionPromiseRelease: + case kAsyncGeneratorAwaitFulfill: + case kAsyncGeneratorAwaitReject: + case kAsyncGeneratorResumeNext: + case kAsyncGeneratorReturnClosedFulfill: + case kAsyncGeneratorReturnClosedReject: + case kAsyncGeneratorReturnFulfill: + case kAsyncGeneratorYieldFulfill: + case kAsyncIteratorValueUnwrap: + case kBitwiseNot: + case kBooleanPrototypeToString: + case kBooleanPrototypeValueOf: + case kCallProxy: + case kConstructFunction: + case kConstructProxy: + case kContinueToCodeStubBuiltin: + case kContinueToCodeStubBuiltinWithResult: + case kContinueToJavaScriptBuiltin: + case kContinueToJavaScriptBuiltinWithResult: + case kCreateGeneratorObject: + case kCreateIterResultObject: + case kCreateRegExpLiteral: + case kDatePrototypeGetDate: + case kDatePrototypeGetDay: + case kDatePrototypeGetFullYear: + case kDatePrototypeGetHours: + case kDatePrototypeGetMilliseconds: + case kDatePrototypeGetMinutes: + case kDatePrototypeGetMonth: + case kDatePrototypeGetSeconds: + case kDatePrototypeGetTime: + case kDatePrototypeGetTimezoneOffset: + case kDatePrototypeGetUTCDate: + case kDatePrototypeGetUTCDay: + case kDatePrototypeGetUTCFullYear: + case kDatePrototypeGetUTCHours: + case kDatePrototypeGetUTCMilliseconds: + case kDatePrototypeGetUTCMinutes: + case kDatePrototypeGetUTCMonth: + case kDatePrototypeGetUTCSeconds: + case kDatePrototypeToPrimitive: + case kDatePrototypeValueOf: + case kDecrement: + case kDeleteProperty: + case kDivide: + case kEqual: + case kFastConsoleAssert: + case kFastNewClosure: + case kFastNewFunctionContextEval: + case kFastNewFunctionContextFunction: + case kFastNewObject: + case kFindOrderedHashMapEntry: + case kForInEnumerate: + case kForInFilter: + case kFunctionPrototypeHasInstance: + case kGeneratorPrototypeNext: + case kGeneratorPrototypeReturn: + case kGeneratorPrototypeThrow: + case kGetSuperConstructor: + case kGlobalIsFinite: + case kGlobalIsNaN: + case kGreaterThan: + case kGreaterThanOrEqual: + case kHasProperty: + case kIncrement: + case kInstanceOf: + case kKeyedLoadIC_Megamorphic: + case kKeyedLoadIC_PolymorphicName: + case kKeyedLoadIC_Slow: + case kKeyedLoadICTrampoline: + case kKeyedStoreIC_Slow: + case kKeyedStoreICTrampoline: + case kLessThan: + case kLessThanOrEqual: + case kLoadField: + case kLoadGlobalIC: + case kLoadGlobalICInsideTypeof: + case kLoadGlobalICInsideTypeofTrampoline: + case kLoadGlobalIC_Slow: + case kLoadGlobalICTrampoline: + case kLoadIC: + case kLoadIC_FunctionPrototype: + case kLoadIC_Noninlined: + case kLoadIC_Slow: + case kLoadIC_StringLength: + case kLoadIC_StringWrapperLength: + case kLoadICTrampoline: + case kLoadIC_Uninitialized: + case kMapPrototypeEntries: + case kMapPrototypeForEach: + case kMapPrototypeGet: + case kMapPrototypeGetSize: + case kMapPrototypeHas: + case kMapPrototypeKeys: + case kMapPrototypeValues: + case kMathAcos: + case kMathAcosh: + case kMathAsin: + case kMathAsinh: + case kMathAtan: + case kMathAtan2: + case kMathAtanh: + case kMathCbrt: + case kMathCeil: + case kMathCos: + case kMathCosh: + case kMathExp: + case kMathExpm1: + case kMathFloor: + case kMathFround: + case kMathLog: + case kMathLog10: + case kMathLog1p: + case kMathLog2: + case kMathMax: + case kMathMin: + case kMathRound: + case kMathSign: + case kMathSin: + case kMathSinh: + case kMathSqrt: + case kMathTan: + case kMathTanh: + case kMathTrunc: + case kModulus: + case kMultiply: + case kNegate: + case kNewArgumentsElements: + case kNonNumberToNumber: + case kNonNumberToNumeric: + case kNonPrimitiveToPrimitive_Default: + case kNonPrimitiveToPrimitive_Number: + case kNonPrimitiveToPrimitive_String: + case kNumberConstructor: + case kNumberIsFinite: + case kNumberIsInteger: + case kNumberIsNaN: + case kNumberIsSafeInteger: + case kNumberParseFloat: + case kNumberPrototypeValueOf: + case kNumberToString: + case kObjectConstructor: + case kObjectConstructor_ConstructStub: + case kObjectCreate: + case kObjectIs: + case kObjectKeys: + case kObjectPrototypeHasOwnProperty: + case kObjectPrototypeIsPrototypeOf: + case kObjectPrototypeToLocaleString: + case kObjectPrototypeToString: + case kObjectPrototypeValueOf: + case kOrderedHashTableHealIndex: + case kOrdinaryHasInstance: + case kOrdinaryToPrimitive_Number: + case kOrdinaryToPrimitive_String: + case kPromiseAll: + case kPromiseCapabilityDefaultReject: + case kPromiseCapabilityDefaultResolve: + case kPromiseCatchFinally: + case kPromiseConstructor: + case kPromiseConstructorLazyDeoptContinuation: + case kPromiseFulfillReactionJob: + case kPromiseInternalConstructor: + case kPromiseInternalReject: + case kPromiseInternalResolve: + case kPromisePrototypeCatch: + case kPromisePrototypeFinally: + case kPromiseRace: + case kPromiseReject: + case kPromiseRejectReactionJob: + case kPromiseResolve: + case kPromiseResolveThenableJob: + case kPromiseResolveTrampoline: + case kPromiseThenFinally: + case kPromiseThrowerFinally: + case kPromiseValueThunkFinally: + case kProxyConstructor: + case kProxyGetProperty: + case kProxyHasProperty: + case kProxySetProperty: + case kRecordWrite: + case kReflectHas: + case kRegExpConstructor: + case kRegExpPrototypeCompile: + case kRegExpPrototypeDotAllGetter: + case kRegExpPrototypeFlagsGetter: + case kRegExpPrototypeGlobalGetter: + case kRegExpPrototypeIgnoreCaseGetter: + case kRegExpPrototypeMultilineGetter: + case kRegExpPrototypeReplace: + case kRegExpPrototypeSearch: + case kRegExpPrototypeSourceGetter: + case kRegExpPrototypeSplit: + case kRegExpPrototypeStickyGetter: + case kRegExpPrototypeUnicodeGetter: + case kResolvePromise: + case kReturnReceiver: + case kRunMicrotasks: + case kSameValue: + case kSetPrototypeEntries: + case kSetPrototypeForEach: + case kSetPrototypeGetSize: + case kSetPrototypeHas: + case kSetPrototypeValues: + case kStoreGlobalIC_Slow: + case kStoreGlobalICTrampoline: + case kStoreICTrampoline: + case kStrictEqual: + case kStringCodePointAtUTF16: + case kStringCodePointAtUTF32: + case kStringConstructor: + case kStringEqual: + case kStringGreaterThan: + case kStringGreaterThanOrEqual: + case kStringIndexOf: + case kStringLessThan: + case kStringLessThanOrEqual: + case kStringPrototypeAnchor: + case kStringPrototypeBig: + case kStringPrototypeBlink: + case kStringPrototypeBold: + case kStringPrototypeCharCodeAt: + case kStringPrototypeCodePointAt: + case kStringPrototypeConcat: + case kStringPrototypeFixed: + case kStringPrototypeFontcolor: + case kStringPrototypeFontsize: + case kStringPrototypeIncludes: + case kStringPrototypeIndexOf: + case kStringPrototypeItalics: + case kStringPrototypeIterator: + case kStringPrototypeLink: + case kStringPrototypeMatch: + case kStringPrototypePadEnd: + case kStringPrototypePadStart: + case kStringPrototypeRepeat: + case kStringPrototypeReplace: + case kStringPrototypeSearch: + case kStringPrototypeSmall: + case kStringPrototypeStrike: + case kStringPrototypeSub: + case kStringPrototypeSup: +#ifdef V8_INTL_SUPPORT + case kStringPrototypeToLowerCaseIntl: + case kStringToLowerCaseIntl: +#endif + case kStringPrototypeToString: + case kStringPrototypeValueOf: + case kStringRepeat: + case kStringToNumber: + case kSubtract: + case kSymbolPrototypeToPrimitive: + case kSymbolPrototypeToString: + case kSymbolPrototypeValueOf: + case kThrowWasmTrapDivByZero: + case kThrowWasmTrapDivUnrepresentable: + case kThrowWasmTrapFloatUnrepresentable: + case kThrowWasmTrapFuncInvalid: + case kThrowWasmTrapFuncSigMismatch: + case kThrowWasmTrapMemOutOfBounds: + case kThrowWasmTrapRemByZero: + case kThrowWasmTrapUnreachable: + case kToBoolean: + case kToBooleanLazyDeoptContinuation: + case kToInteger: + case kToInteger_TruncateMinusZero: + case kToName: + case kToNumber: + case kToNumeric: + case kToString: + case kTypedArrayConstructor: + case kTypedArrayConstructor_ConstructStub: + case kTypedArrayPrototypeByteLength: + case kTypedArrayPrototypeByteOffset: + case kTypedArrayPrototypeEntries: + case kTypedArrayPrototypeEvery: + case kTypedArrayPrototypeFind: + case kTypedArrayPrototypeFindIndex: + case kTypedArrayPrototypeForEach: + case kTypedArrayPrototypeKeys: + case kTypedArrayPrototypeLength: + case kTypedArrayPrototypeReduce: + case kTypedArrayPrototypeReduceRight: + case kTypedArrayPrototypeSet: + case kTypedArrayPrototypeSlice: + case kTypedArrayPrototypeSome: + case kTypedArrayPrototypeSubArray: + case kTypedArrayPrototypeToStringTag: + case kTypedArrayPrototypeValues: + case kTypeof: + case kWasmStackGuard: + case kWeakMapGet: + case kWeakMapHas: + case kWeakMapLookupHashIndex: + case kWeakMapPrototypeDelete: + case kWeakMapPrototypeSet: + case kWeakSetHas: + case kWeakSetPrototypeAdd: + case kWeakSetPrototypeDelete: +#endif + return true; + default: + return false; + } + UNREACHABLE(); +} + +// static +bool Builtins::IsOffHeapSafe(int index) { +#ifndef V8_EMBEDDED_BUILTINS + return false; +#else + DCHECK(IsBuiltinId(index)); + if (IsTooShortForOffHeapTrampoline(index)) return false; + switch (index) { +#ifdef DEBUG + case kAbortJS: + case kAllocateHeapNumber: + case kArrayEveryLoopEagerDeoptContinuation: + case kArrayFilterLoopEagerDeoptContinuation: + case kArrayFindIndexLoopEagerDeoptContinuation: + case kArrayFindIndexLoopLazyDeoptContinuation: + case kArrayFindLoopEagerDeoptContinuation: + case kArrayFindLoopLazyDeoptContinuation: + case kArrayForEachLoopEagerDeoptContinuation: + case kArrayForEachLoopLazyDeoptContinuation: + case kArrayMapLoopEagerDeoptContinuation: + case kArrayReduceLoopEagerDeoptContinuation: + case kArrayReduceLoopLazyDeoptContinuation: + case kArrayReducePreLoopEagerDeoptContinuation: + case kArrayReduceRightLoopEagerDeoptContinuation: + case kArrayReduceRightLoopLazyDeoptContinuation: + case kArrayReduceRightPreLoopEagerDeoptContinuation: + case kArraySomeLoopEagerDeoptContinuation: + case kBitwiseNot: + case kBooleanPrototypeToString: + case kBooleanPrototypeValueOf: + case kContinueToCodeStubBuiltin: + case kContinueToCodeStubBuiltinWithResult: + case kContinueToJavaScriptBuiltin: + case kContinueToJavaScriptBuiltinWithResult: + case kDatePrototypeGetDate: + case kDatePrototypeGetDay: + case kDatePrototypeGetFullYear: + case kDatePrototypeGetHours: + case kDatePrototypeGetMilliseconds: + case kDatePrototypeGetMinutes: + case kDatePrototypeGetMonth: + case kDatePrototypeGetSeconds: + case kDatePrototypeGetTime: + case kDatePrototypeGetTimezoneOffset: + case kDatePrototypeGetUTCDate: + case kDatePrototypeGetUTCDay: + case kDatePrototypeGetUTCFullYear: + case kDatePrototypeGetUTCHours: + case kDatePrototypeGetUTCMilliseconds: + case kDatePrototypeGetUTCMinutes: + case kDatePrototypeGetUTCMonth: + case kDatePrototypeGetUTCSeconds: + case kDatePrototypeToPrimitive: + case kDatePrototypeValueOf: + case kDecrement: + case kDivide: + case kGlobalIsFinite: + case kGlobalIsNaN: + case kIncrement: + case kKeyedLoadIC_Slow: + case kKeyedLoadICTrampoline: + case kKeyedStoreIC_Slow: + case kKeyedStoreICTrampoline: + case kLoadField: + case kLoadGlobalICInsideTypeofTrampoline: + case kLoadGlobalIC_Slow: + case kLoadGlobalICTrampoline: + case kLoadIC_Slow: + case kLoadICTrampoline: + case kMapPrototypeEntries: + case kMapPrototypeGet: + case kMapPrototypeGetSize: + case kMapPrototypeHas: + case kMapPrototypeKeys: + case kMapPrototypeValues: + case kMathAcos: + case kMathAcosh: + case kMathAsin: + case kMathAsinh: + case kMathAtan: + case kMathAtan2: + case kMathAtanh: + case kMathCbrt: + case kMathCeil: + case kMathCos: + case kMathCosh: + case kMathExp: + case kMathExpm1: + case kMathFloor: + case kMathFround: + case kMathLog: + case kMathLog10: + case kMathLog1p: + case kMathLog2: + case kMathMax: + case kMathMin: + case kMathRound: + case kMathSign: + case kMathSin: + case kMathSinh: + case kMathSqrt: + case kMathTan: + case kMathTanh: + case kMathTrunc: + case kModulus: + case kMultiply: + case kNonPrimitiveToPrimitive_Default: + case kNonPrimitiveToPrimitive_Number: + case kNonPrimitiveToPrimitive_String: + case kNumberIsFinite: + case kNumberIsInteger: + case kNumberIsNaN: + case kNumberIsSafeInteger: + case kNumberPrototypeValueOf: + case kObjectPrototypeToLocaleString: + case kObjectPrototypeValueOf: + case kPromiseCapabilityDefaultReject: + case kPromiseCapabilityDefaultResolve: + case kPromiseConstructorLazyDeoptContinuation: + case kPromiseInternalReject: + case kPromiseInternalResolve: + case kPromiseResolveTrampoline: + case kPromiseThrowerFinally: + case kPromiseValueThunkFinally: + case kProxyConstructor: + case kReflectHas: + case kRegExpPrototypeDotAllGetter: + case kRegExpPrototypeGlobalGetter: + case kRegExpPrototypeIgnoreCaseGetter: + case kRegExpPrototypeMultilineGetter: + case kRegExpPrototypeSourceGetter: + case kRegExpPrototypeStickyGetter: + case kRegExpPrototypeUnicodeGetter: + case kReturnReceiver: + case kSetPrototypeEntries: + case kSetPrototypeGetSize: + case kSetPrototypeValues: + case kStoreGlobalIC_Slow: + case kStoreGlobalICTrampoline: + case kStoreICTrampoline: + case kStringPrototypeBig: + case kStringPrototypeBlink: + case kStringPrototypeBold: + case kStringPrototypeConcat: + case kStringPrototypeFixed: + case kStringPrototypeItalics: + case kStringPrototypeIterator: + case kStringPrototypeSmall: + case kStringPrototypeStrike: + case kStringPrototypeSub: + case kStringPrototypeSup: +#ifdef V8_INTL_SUPPORT + case kStringPrototypeToLowerCaseIntl: +#endif + case kSubtract: + case kSymbolPrototypeToPrimitive: + case kSymbolPrototypeToString: + case kSymbolPrototypeValueOf: + case kThrowWasmTrapDivByZero: + case kThrowWasmTrapDivUnrepresentable: + case kThrowWasmTrapFloatUnrepresentable: + case kThrowWasmTrapFuncInvalid: + case kThrowWasmTrapFuncSigMismatch: + case kThrowWasmTrapMemOutOfBounds: + case kThrowWasmTrapRemByZero: + case kThrowWasmTrapUnreachable: + case kToInteger: + case kTypedArrayConstructor: + case kWasmStackGuard: + case kWeakMapGet: + case kWeakMapHas: + case kWeakMapPrototypeDelete: + case kWeakMapPrototypeSet: + case kWeakSetHas: + case kWeakSetPrototypeAdd: + case kWeakSetPrototypeDelete: +#else + case kAbortJS: + case kAdd: + case kAllocateHeapNumber: + case kArrayEvery: + case kArrayEveryLoopContinuation: + case kArrayEveryLoopEagerDeoptContinuation: + case kArrayEveryLoopLazyDeoptContinuation: + case kArrayFilterLoopEagerDeoptContinuation: + case kArrayFilterLoopLazyDeoptContinuation: + case kArrayFindIndexLoopAfterCallbackLazyDeoptContinuation: + case kArrayFindIndexLoopContinuation: + case kArrayFindIndexLoopEagerDeoptContinuation: + case kArrayFindIndexLoopLazyDeoptContinuation: + case kArrayFindLoopAfterCallbackLazyDeoptContinuation: + case kArrayFindLoopContinuation: + case kArrayFindLoopEagerDeoptContinuation: + case kArrayFindLoopLazyDeoptContinuation: + case kArrayForEach: + case kArrayForEachLoopContinuation: + case kArrayForEachLoopEagerDeoptContinuation: + case kArrayForEachLoopLazyDeoptContinuation: + case kArrayFrom: + case kArrayIncludes: + case kArrayIndexOf: + case kArrayIsArray: + case kArrayMapLoopContinuation: + case kArrayMapLoopEagerDeoptContinuation: + case kArrayMapLoopLazyDeoptContinuation: + case kArrayOf: + case kArrayPrototypeEntries: + case kArrayPrototypeFind: + case kArrayPrototypeFindIndex: + case kArrayPrototypeKeys: + case kArrayPrototypeSlice: + case kArrayPrototypeValues: + case kArrayReduce: + case kArrayReduceLoopContinuation: + case kArrayReduceLoopEagerDeoptContinuation: + case kArrayReduceLoopLazyDeoptContinuation: + case kArrayReducePreLoopEagerDeoptContinuation: + case kArrayReduceRight: + case kArrayReduceRightLoopContinuation: + case kArrayReduceRightLoopEagerDeoptContinuation: + case kArrayReduceRightLoopLazyDeoptContinuation: + case kArrayReduceRightPreLoopEagerDeoptContinuation: + case kArraySome: + case kArraySomeLoopContinuation: + case kArraySomeLoopEagerDeoptContinuation: + case kArraySomeLoopLazyDeoptContinuation: + case kAsyncFromSyncIteratorPrototypeNext: + case kAsyncFromSyncIteratorPrototypeReturn: + case kAsyncFromSyncIteratorPrototypeThrow: + case kAsyncFunctionAwaitFulfill: + case kAsyncFunctionAwaitReject: + case kAsyncFunctionPromiseCreate: + case kAsyncFunctionPromiseRelease: + case kAsyncGeneratorAwaitFulfill: + case kAsyncGeneratorAwaitReject: + case kAsyncGeneratorResumeNext: + case kAsyncGeneratorReturnClosedFulfill: + case kAsyncGeneratorReturnClosedReject: + case kAsyncGeneratorReturnFulfill: + case kAsyncGeneratorYieldFulfill: + case kAsyncIteratorValueUnwrap: + case kBitwiseNot: + case kBooleanPrototypeToString: + case kBooleanPrototypeValueOf: + case kCallProxy: + case kConstructFunction: + case kConstructProxy: + case kContinueToCodeStubBuiltin: + case kContinueToCodeStubBuiltinWithResult: + case kContinueToJavaScriptBuiltin: + case kContinueToJavaScriptBuiltinWithResult: + case kCreateGeneratorObject: + case kCreateIterResultObject: + case kCreateRegExpLiteral: + case kDatePrototypeGetDate: + case kDatePrototypeGetDay: + case kDatePrototypeGetFullYear: + case kDatePrototypeGetHours: + case kDatePrototypeGetMilliseconds: + case kDatePrototypeGetMinutes: + case kDatePrototypeGetMonth: + case kDatePrototypeGetSeconds: + case kDatePrototypeGetTime: + case kDatePrototypeGetTimezoneOffset: + case kDatePrototypeGetUTCDate: + case kDatePrototypeGetUTCDay: + case kDatePrototypeGetUTCFullYear: + case kDatePrototypeGetUTCHours: + case kDatePrototypeGetUTCMilliseconds: + case kDatePrototypeGetUTCMinutes: + case kDatePrototypeGetUTCMonth: + case kDatePrototypeGetUTCSeconds: + case kDatePrototypeToPrimitive: + case kDatePrototypeValueOf: + case kDecrement: + case kDeleteProperty: + case kDivide: + case kEqual: + case kFastConsoleAssert: + case kFastNewClosure: + case kFastNewFunctionContextEval: + case kFastNewFunctionContextFunction: + case kFastNewObject: + case kFindOrderedHashMapEntry: + case kForInEnumerate: + case kForInFilter: + case kFunctionPrototypeHasInstance: + case kGeneratorPrototypeNext: + case kGeneratorPrototypeReturn: + case kGeneratorPrototypeThrow: + case kGetSuperConstructor: + case kGlobalIsFinite: + case kGlobalIsNaN: + case kGreaterThan: + case kGreaterThanOrEqual: + case kHasProperty: + case kIncrement: + case kInstanceOf: + case kKeyedLoadIC_Megamorphic: + case kKeyedLoadIC_PolymorphicName: + case kKeyedLoadIC_Slow: + case kKeyedLoadICTrampoline: + case kKeyedStoreIC_Slow: + case kKeyedStoreICTrampoline: + case kLessThan: + case kLessThanOrEqual: + case kLoadField: + case kLoadGlobalIC: + case kLoadGlobalICInsideTypeof: + case kLoadGlobalICInsideTypeofTrampoline: + case kLoadGlobalIC_Slow: + case kLoadGlobalICTrampoline: + case kLoadIC: + case kLoadIC_FunctionPrototype: + case kLoadIC_Noninlined: + case kLoadIC_Slow: + case kLoadICTrampoline: + case kLoadIC_Uninitialized: + case kMapPrototypeEntries: + case kMapPrototypeForEach: + case kMapPrototypeGet: + case kMapPrototypeGetSize: + case kMapPrototypeHas: + case kMapPrototypeKeys: + case kMapPrototypeValues: + case kMathAcos: + case kMathAcosh: + case kMathAsin: + case kMathAsinh: + case kMathAtan: + case kMathAtan2: + case kMathAtanh: + case kMathCbrt: + case kMathCeil: + case kMathCos: + case kMathCosh: + case kMathExp: + case kMathExpm1: + case kMathFloor: + case kMathFround: + case kMathLog: + case kMathLog10: + case kMathLog1p: + case kMathLog2: + case kMathMax: + case kMathMin: + case kMathRound: + case kMathSign: + case kMathSin: + case kMathSinh: + case kMathSqrt: + case kMathTan: + case kMathTanh: + case kMathTrunc: + case kModulus: + case kMultiply: + case kNegate: + case kNewArgumentsElements: + case kNonNumberToNumber: + case kNonNumberToNumeric: + case kNonPrimitiveToPrimitive_Default: + case kNonPrimitiveToPrimitive_Number: + case kNonPrimitiveToPrimitive_String: + case kNumberConstructor: + case kNumberIsFinite: + case kNumberIsInteger: + case kNumberIsNaN: + case kNumberIsSafeInteger: + case kNumberParseFloat: + case kNumberPrototypeValueOf: + case kNumberToString: + case kObjectConstructor: + case kObjectConstructor_ConstructStub: + case kObjectCreate: + case kObjectIs: + case kObjectKeys: + case kObjectPrototypeHasOwnProperty: + case kObjectPrototypeIsPrototypeOf: + case kObjectPrototypeToLocaleString: + case kObjectPrototypeToString: + case kObjectPrototypeValueOf: + case kOrderedHashTableHealIndex: + case kOrdinaryHasInstance: + case kOrdinaryToPrimitive_Number: + case kOrdinaryToPrimitive_String: + case kPromiseAll: + case kPromiseCapabilityDefaultReject: + case kPromiseCapabilityDefaultResolve: + case kPromiseCatchFinally: + case kPromiseConstructor: + case kPromiseConstructorLazyDeoptContinuation: + case kPromiseFulfillReactionJob: + case kPromiseInternalConstructor: + case kPromiseInternalReject: + case kPromiseInternalResolve: + case kPromisePrototypeCatch: + case kPromisePrototypeFinally: + case kPromiseRace: + case kPromiseReject: + case kPromiseRejectReactionJob: + case kPromiseResolve: + case kPromiseResolveThenableJob: + case kPromiseResolveTrampoline: + case kPromiseThenFinally: + case kPromiseThrowerFinally: + case kPromiseValueThunkFinally: + case kProxyConstructor: + case kProxyGetProperty: + case kProxyHasProperty: + case kProxySetProperty: + case kRecordWrite: + case kReflectHas: + case kRegExpConstructor: + case kRegExpPrototypeCompile: + case kRegExpPrototypeDotAllGetter: + case kRegExpPrototypeFlagsGetter: + case kRegExpPrototypeGlobalGetter: + case kRegExpPrototypeIgnoreCaseGetter: + case kRegExpPrototypeMultilineGetter: + case kRegExpPrototypeReplace: + case kRegExpPrototypeSearch: + case kRegExpPrototypeSourceGetter: + case kRegExpPrototypeSplit: + case kRegExpPrototypeStickyGetter: + case kRegExpPrototypeUnicodeGetter: + case kResolvePromise: + case kReturnReceiver: + case kRunMicrotasks: + case kSameValue: + case kSetPrototypeEntries: + case kSetPrototypeForEach: + case kSetPrototypeGetSize: + case kSetPrototypeHas: + case kSetPrototypeValues: + case kStoreGlobalIC_Slow: + case kStoreGlobalICTrampoline: + case kStoreICTrampoline: + case kStrictEqual: + case kStringCodePointAtUTF16: + case kStringCodePointAtUTF32: + case kStringConstructor: + case kStringEqual: + case kStringGreaterThan: + case kStringGreaterThanOrEqual: + case kStringIndexOf: + case kStringLessThan: + case kStringLessThanOrEqual: + case kStringPrototypeAnchor: + case kStringPrototypeBig: + case kStringPrototypeBlink: + case kStringPrototypeBold: + case kStringPrototypeCharCodeAt: + case kStringPrototypeCodePointAt: + case kStringPrototypeConcat: + case kStringPrototypeFixed: + case kStringPrototypeFontcolor: + case kStringPrototypeFontsize: + case kStringPrototypeIncludes: + case kStringPrototypeIndexOf: + case kStringPrototypeItalics: + case kStringPrototypeIterator: + case kStringPrototypeLink: + case kStringPrototypeMatch: + case kStringPrototypePadEnd: + case kStringPrototypePadStart: + case kStringPrototypeRepeat: + case kStringPrototypeReplace: + case kStringPrototypeSearch: + case kStringPrototypeSmall: + case kStringPrototypeStrike: + case kStringPrototypeSub: + case kStringPrototypeSup: +#ifdef V8_INTL_SUPPORT + case kStringPrototypeToLowerCaseIntl: + case kStringToLowerCaseIntl: +#endif + case kStringPrototypeToString: + case kStringPrototypeValueOf: + case kStringRepeat: + case kStringToNumber: + case kSubtract: + case kSymbolPrototypeToPrimitive: + case kSymbolPrototypeToString: + case kSymbolPrototypeValueOf: + case kThrowWasmTrapDivByZero: + case kThrowWasmTrapDivUnrepresentable: + case kThrowWasmTrapFloatUnrepresentable: + case kThrowWasmTrapFuncInvalid: + case kThrowWasmTrapFuncSigMismatch: + case kThrowWasmTrapMemOutOfBounds: + case kThrowWasmTrapRemByZero: + case kThrowWasmTrapUnreachable: + case kToBoolean: + case kToBooleanLazyDeoptContinuation: + case kToInteger: + case kToInteger_TruncateMinusZero: + case kToName: + case kToNumber: + case kToNumeric: + case kToString: + case kTypedArrayConstructor: + case kTypedArrayConstructor_ConstructStub: + case kTypedArrayPrototypeByteLength: + case kTypedArrayPrototypeByteOffset: + case kTypedArrayPrototypeEntries: + case kTypedArrayPrototypeEvery: + case kTypedArrayPrototypeFind: + case kTypedArrayPrototypeFindIndex: + case kTypedArrayPrototypeForEach: + case kTypedArrayPrototypeKeys: + case kTypedArrayPrototypeLength: + case kTypedArrayPrototypeReduce: + case kTypedArrayPrototypeReduceRight: + case kTypedArrayPrototypeSet: + case kTypedArrayPrototypeSlice: + case kTypedArrayPrototypeSome: + case kTypedArrayPrototypeSubArray: + case kTypedArrayPrototypeToStringTag: + case kTypedArrayPrototypeValues: + case kTypeof: + case kWasmStackGuard: + case kWeakMapGet: + case kWeakMapHas: + case kWeakMapLookupHashIndex: + case kWeakMapPrototypeDelete: + case kWeakMapPrototypeSet: + case kWeakSetHas: + case kWeakSetPrototypeAdd: + case kWeakSetPrototypeDelete: +#endif // !DEBUG + return true; + default: + return false; + } + UNREACHABLE(); +#endif // V8_EMBEDDED_BUILTINS +} + +// static +bool Builtins::IsTooShortForOffHeapTrampoline(int index) { + switch (index) { + case kLoadIC_StringLength: + case kLoadIC_StringWrapperLength: + return true; + default: + return false; + } +} + +// static Builtins::Kind Builtins::KindOf(int index) { DCHECK(IsBuiltinId(index)); return builtin_metadata[index].kind; |