| Index: src/builtins/builtins-definitions.h
|
| diff --git a/src/builtins/builtins-definitions.h b/src/builtins/builtins-definitions.h
|
| index 06a720aa3713aa16c76b471992fc8dc1c99b6d28..1644aea833a8aad945bbe805b7d44c97815de79f 100644
|
| --- a/src/builtins/builtins-definitions.h
|
| +++ b/src/builtins/builtins-definitions.h
|
| @@ -35,6 +35,8 @@ namespace internal {
|
| // TFJ: Builtin in Turbofan, with JS linkage (callable as Javascript function).
|
| // Args: name, arguments count, explicit argument names...
|
| // TFS: Builtin in Turbofan, with CodeStub linkage.
|
| +// Args: name, explicit argument names...
|
| +// TFC: Builtin in Turbofan, with CodeStub linkage and custom descriptor.
|
| // Args: name, interface descriptor, return_size
|
| // TFH: Handlers in Turbofan, with CodeStub linkage.
|
| // Args: name, code kind, extra IC state, interface descriptor
|
| @@ -43,16 +45,16 @@ namespace internal {
|
| // DBG: Builtin in platform-dependent assembly, used by the debugger.
|
| // Args: name
|
|
|
| -#define BUILTIN_LIST_BASE(CPP, API, TFJ, TFS, TFH, ASM, DBG) \
|
| +#define BUILTIN_LIST_BASE(CPP, API, TFJ, TFC, TFS, TFH, ASM, DBG) \
|
| ASM(Abort) \
|
| /* Code aging */ \
|
| CODE_AGE_LIST_WITH_ARG(DECLARE_CODE_AGE_BUILTIN, ASM) \
|
| \
|
| /* Declared first for dependency reasons */ \
|
| ASM(CompileLazy) \
|
| - TFS(ToObject, TypeConversion, 1) \
|
| - TFS(FastNewObject, FastNewObject, 1) \
|
| - TFS(HasProperty, HasProperty, 1) \
|
| + TFC(ToObject, TypeConversion, 1) \
|
| + TFC(FastNewObject, FastNewObject, 1) \
|
| + TFS(HasProperty, kKey, kObject) \
|
| \
|
| /* Calls */ \
|
| ASM(ArgumentsAdaptorTrampoline) \
|
| @@ -92,22 +94,22 @@ namespace internal {
|
| ASM(JSConstructStubGeneric) \
|
| ASM(JSBuiltinsConstructStub) \
|
| ASM(JSBuiltinsConstructStubForDerived) \
|
| - TFS(FastNewClosure, FastNewClosure, 1) \
|
| - TFS(FastNewFunctionContextEval, FastNewFunctionContext, 1) \
|
| - TFS(FastNewFunctionContextFunction, FastNewFunctionContext, 1) \
|
| - TFS(FastNewStrictArguments, FastNewArguments, 1) \
|
| - TFS(FastNewSloppyArguments, FastNewArguments, 1) \
|
| - TFS(FastNewRestParameter, FastNewArguments, 1) \
|
| - TFS(FastCloneRegExp, FastCloneRegExp, 1) \
|
| - TFS(FastCloneShallowArrayTrack, FastCloneShallowArray, 1) \
|
| - TFS(FastCloneShallowArrayDontTrack, FastCloneShallowArray, 1) \
|
| - TFS(FastCloneShallowObject0, FastCloneShallowObject, 1) \
|
| - TFS(FastCloneShallowObject1, FastCloneShallowObject, 1) \
|
| - TFS(FastCloneShallowObject2, FastCloneShallowObject, 1) \
|
| - TFS(FastCloneShallowObject3, FastCloneShallowObject, 1) \
|
| - TFS(FastCloneShallowObject4, FastCloneShallowObject, 1) \
|
| - TFS(FastCloneShallowObject5, FastCloneShallowObject, 1) \
|
| - TFS(FastCloneShallowObject6, FastCloneShallowObject, 1) \
|
| + TFC(FastNewClosure, FastNewClosure, 1) \
|
| + TFC(FastNewFunctionContextEval, FastNewFunctionContext, 1) \
|
| + TFC(FastNewFunctionContextFunction, FastNewFunctionContext, 1) \
|
| + TFC(FastNewStrictArguments, FastNewArguments, 1) \
|
| + TFC(FastNewSloppyArguments, FastNewArguments, 1) \
|
| + TFC(FastNewRestParameter, FastNewArguments, 1) \
|
| + TFC(FastCloneRegExp, FastCloneRegExp, 1) \
|
| + TFC(FastCloneShallowArrayTrack, FastCloneShallowArray, 1) \
|
| + TFC(FastCloneShallowArrayDontTrack, FastCloneShallowArray, 1) \
|
| + TFC(FastCloneShallowObject0, FastCloneShallowObject, 1) \
|
| + TFC(FastCloneShallowObject1, FastCloneShallowObject, 1) \
|
| + TFC(FastCloneShallowObject2, FastCloneShallowObject, 1) \
|
| + TFC(FastCloneShallowObject3, FastCloneShallowObject, 1) \
|
| + TFC(FastCloneShallowObject4, FastCloneShallowObject, 1) \
|
| + TFC(FastCloneShallowObject5, FastCloneShallowObject, 1) \
|
| + TFC(FastCloneShallowObject6, FastCloneShallowObject, 1) \
|
| \
|
| /* Apply and entries */ \
|
| ASM(Apply) \
|
| @@ -120,14 +122,14 @@ namespace internal {
|
| ASM(StackCheck) \
|
| \
|
| /* String helpers */ \
|
| - TFS(StringCharAt, StringCharAt, 1) \
|
| - TFS(StringCharCodeAt, StringCharCodeAt, 1) \
|
| - TFS(StringEqual, Compare, 1) \
|
| - TFS(StringGreaterThan, Compare, 1) \
|
| - TFS(StringGreaterThanOrEqual, Compare, 1) \
|
| - TFS(StringIndexOf, StringIndexOf, 1) \
|
| - TFS(StringLessThan, Compare, 1) \
|
| - TFS(StringLessThanOrEqual, Compare, 1) \
|
| + TFC(StringCharAt, StringCharAt, 1) \
|
| + TFC(StringCharCodeAt, StringCharCodeAt, 1) \
|
| + TFC(StringEqual, Compare, 1) \
|
| + TFC(StringGreaterThan, Compare, 1) \
|
| + TFC(StringGreaterThanOrEqual, Compare, 1) \
|
| + TFS(StringIndexOf, kReceiver, kSearchString, kPosition) \
|
| + TFC(StringLessThan, Compare, 1) \
|
| + TFC(StringLessThanOrEqual, Compare, 1) \
|
| \
|
| /* Interpreter */ \
|
| ASM(InterpreterEntryTrampoline) \
|
| @@ -169,10 +171,10 @@ namespace internal {
|
| ASM(AllocateInOldSpace) \
|
| \
|
| /* TurboFan support builtins */ \
|
| - TFS(CopyFastSmiOrObjectElements, CopyFastSmiOrObjectElements, 1) \
|
| - TFS(GrowFastDoubleElements, GrowArrayElements, 1) \
|
| - TFS(GrowFastSmiOrObjectElements, GrowArrayElements, 1) \
|
| - TFS(NewUnmappedArgumentsElements, NewArgumentsElements, 1) \
|
| + TFS(CopyFastSmiOrObjectElements, kObject) \
|
| + TFC(GrowFastDoubleElements, GrowArrayElements, 1) \
|
| + TFC(GrowFastSmiOrObjectElements, GrowArrayElements, 1) \
|
| + TFC(NewUnmappedArgumentsElements, NewArgumentsElements, 1) \
|
| \
|
| /* Debugger */ \
|
| DBG(FrameDropperTrampoline) \
|
| @@ -181,22 +183,22 @@ namespace internal {
|
| DBG(Slot_DebugBreak) \
|
| \
|
| /* Type conversions */ \
|
| - TFS(ToBoolean, TypeConversion, 1) \
|
| - TFS(OrdinaryToPrimitive_Number, TypeConversion, 1) \
|
| - TFS(OrdinaryToPrimitive_String, TypeConversion, 1) \
|
| - TFS(NonPrimitiveToPrimitive_Default, TypeConversion, 1) \
|
| - TFS(NonPrimitiveToPrimitive_Number, TypeConversion, 1) \
|
| - TFS(NonPrimitiveToPrimitive_String, TypeConversion, 1) \
|
| - TFS(StringToNumber, TypeConversion, 1) \
|
| - TFS(ToName, TypeConversion, 1) \
|
| - TFS(NonNumberToNumber, TypeConversion, 1) \
|
| - TFS(ToNumber, TypeConversion, 1) \
|
| - TFS(ToString, TypeConversion, 1) \
|
| - TFS(ToInteger, TypeConversion, 1) \
|
| - TFS(ToLength, TypeConversion, 1) \
|
| - TFS(ClassOf, Typeof, 1) \
|
| - TFS(Typeof, Typeof, 1) \
|
| - TFS(GetSuperConstructor, Typeof, 1) \
|
| + TFC(ToBoolean, TypeConversion, 1) \
|
| + TFC(OrdinaryToPrimitive_Number, TypeConversion, 1) \
|
| + TFC(OrdinaryToPrimitive_String, TypeConversion, 1) \
|
| + TFC(NonPrimitiveToPrimitive_Default, TypeConversion, 1) \
|
| + TFC(NonPrimitiveToPrimitive_Number, TypeConversion, 1) \
|
| + TFC(NonPrimitiveToPrimitive_String, TypeConversion, 1) \
|
| + TFC(StringToNumber, TypeConversion, 1) \
|
| + TFC(ToName, TypeConversion, 1) \
|
| + TFC(NonNumberToNumber, TypeConversion, 1) \
|
| + TFC(ToNumber, TypeConversion, 1) \
|
| + TFC(ToString, TypeConversion, 1) \
|
| + TFC(ToInteger, TypeConversion, 1) \
|
| + TFC(ToLength, TypeConversion, 1) \
|
| + TFC(ClassOf, Typeof, 1) \
|
| + TFC(Typeof, Typeof, 1) \
|
| + TFC(GetSuperConstructor, Typeof, 1) \
|
| \
|
| /* Handlers */ \
|
| TFH(LoadICProtoArray, BUILTIN, kNoExtraICState, LoadICProtoArray) \
|
| @@ -224,9 +226,10 @@ namespace internal {
|
| TFH(StoreIC_Uninitialized, BUILTIN, kNoExtraICState, StoreWithVector) \
|
| TFH(StoreICStrict_Uninitialized, BUILTIN, kNoExtraICState, StoreWithVector) \
|
| \
|
| - TFS(ResolveNativePromise, ResolveNativePromise, 1) \
|
| - TFS(RejectNativePromise, RejectNativePromise, 1) \
|
| - TFS(PerformNativePromiseThen, PerformNativePromiseThen, 1) \
|
| + TFS(ResolveNativePromise, kPromise, kValue) \
|
| + TFS(RejectNativePromise, kPromise, kValue, kDebugEvent) \
|
| + TFS(PerformNativePromiseThen, kPromise, kResolveReaction, kRejectReaction, \
|
| + kResultPromise) \
|
| \
|
| /* Built-in functions for Javascript */ \
|
| /* Special internal builtins */ \
|
| @@ -457,7 +460,7 @@ namespace internal {
|
| CPP(FunctionPrototypeToString) \
|
| \
|
| /* Belongs to Objects but is a dependency of GeneratorPrototypeResume */ \
|
| - TFS(CreateIterResultObject, CreateIterResultObject, 1) \
|
| + TFS(CreateIterResultObject, kValue, kDone) \
|
| \
|
| /* Generator and Async */ \
|
| CPP(GeneratorFunctionConstructor) \
|
| @@ -603,25 +606,25 @@ namespace internal {
|
| CPP(NumberPrototypeToString) \
|
| /* ES6 #sec-number.prototype.valueof */ \
|
| TFJ(NumberPrototypeValueOf, 0) \
|
| - TFS(Add, BinaryOp, 1) \
|
| - TFS(Subtract, BinaryOp, 1) \
|
| - TFS(Multiply, BinaryOp, 1) \
|
| - TFS(Divide, BinaryOp, 1) \
|
| - TFS(Modulus, BinaryOp, 1) \
|
| - TFS(BitwiseAnd, BinaryOp, 1) \
|
| - TFS(BitwiseOr, BinaryOp, 1) \
|
| - TFS(BitwiseXor, BinaryOp, 1) \
|
| - TFS(ShiftLeft, BinaryOp, 1) \
|
| - TFS(ShiftRight, BinaryOp, 1) \
|
| - TFS(ShiftRightLogical, BinaryOp, 1) \
|
| - TFS(LessThan, Compare, 1) \
|
| - TFS(LessThanOrEqual, Compare, 1) \
|
| - TFS(GreaterThan, Compare, 1) \
|
| - TFS(GreaterThanOrEqual, Compare, 1) \
|
| - TFS(Equal, Compare, 1) \
|
| - TFS(StrictEqual, Compare, 1) \
|
| - TFS(AddWithFeedback, BinaryOpWithVector, 1) \
|
| - TFS(SubtractWithFeedback, BinaryOpWithVector, 1) \
|
| + TFC(Add, BinaryOp, 1) \
|
| + TFC(Subtract, BinaryOp, 1) \
|
| + TFC(Multiply, BinaryOp, 1) \
|
| + TFC(Divide, BinaryOp, 1) \
|
| + TFC(Modulus, BinaryOp, 1) \
|
| + TFC(BitwiseAnd, BinaryOp, 1) \
|
| + TFC(BitwiseOr, BinaryOp, 1) \
|
| + TFC(BitwiseXor, BinaryOp, 1) \
|
| + TFC(ShiftLeft, BinaryOp, 1) \
|
| + TFC(ShiftRight, BinaryOp, 1) \
|
| + TFC(ShiftRightLogical, BinaryOp, 1) \
|
| + TFC(LessThan, Compare, 1) \
|
| + TFC(LessThanOrEqual, Compare, 1) \
|
| + TFC(GreaterThan, Compare, 1) \
|
| + TFC(GreaterThanOrEqual, Compare, 1) \
|
| + TFC(Equal, Compare, 1) \
|
| + TFC(StrictEqual, Compare, 1) \
|
| + TFC(AddWithFeedback, BinaryOpWithVector, 1) \
|
| + TFC(SubtractWithFeedback, BinaryOpWithVector, 1) \
|
| \
|
| /* Object */ \
|
| CPP(ObjectAssign) \
|
| @@ -660,13 +663,13 @@ namespace internal {
|
| CPP(ObjectValues) \
|
| \
|
| /* instanceof */ \
|
| - TFS(OrdinaryHasInstance, Compare, 1) \
|
| - TFS(InstanceOf, Compare, 1) \
|
| + TFC(OrdinaryHasInstance, Compare, 1) \
|
| + TFC(InstanceOf, Compare, 1) \
|
| \
|
| /* for-in */ \
|
| - TFS(ForInFilter, ForInFilter, 1) \
|
| - TFS(ForInNext, ForInNext, 1) \
|
| - TFS(ForInPrepare, ForInPrepare, 3) \
|
| + TFS(ForInFilter, kKey, kObject) \
|
| + TFS(ForInNext, kObject, kCacheArray, kCacheType, kIndex) \
|
| + TFC(ForInPrepare, ForInPrepare, 3) \
|
| \
|
| /* Promise */ \
|
| /* ES6 #sec-getcapabilitiesexecutor-functions */ \
|
| @@ -687,7 +690,7 @@ namespace internal {
|
| TFJ(PromiseCatch, 1, kOnRejected) \
|
| /* ES #sec-fulfillpromise */ \
|
| TFJ(ResolvePromise, 2, kPromise, kValue) \
|
| - TFS(PromiseHandleReject, PromiseHandleReject, 1) \
|
| + TFS(PromiseHandleReject, kPromise, kOnReject, kException) \
|
| TFJ(PromiseHandle, 5, kValue, kHandler, kDeferredPromise, \
|
| kDeferredOnResolve, kDeferredOnReject) \
|
| /* ES #sec-promise.resolve */ \
|
| @@ -721,7 +724,7 @@ namespace internal {
|
| CPP(ReflectSetPrototypeOf) \
|
| \
|
| /* RegExp */ \
|
| - TFS(RegExpPrototypeExecSlow, RegExpPrototypeExecSlow, 1) \
|
| + TFS(RegExpPrototypeExecSlow, kReceiver, kString) \
|
| CPP(RegExpCapture1Getter) \
|
| CPP(RegExpCapture2Getter) \
|
| CPP(RegExpCapture3Getter) \
|
| @@ -768,11 +771,11 @@ namespace internal {
|
| TFJ(RegExpPrototypeUnicodeGetter, 0) \
|
| CPP(RegExpRightContextGetter) \
|
| \
|
| - TFS(RegExpReplace, RegExpReplace, 1) \
|
| + TFS(RegExpReplace, kRegExp, kString, kReplaceValue) \
|
| /* ES #sec-regexp.prototype-@@replace */ \
|
| TFJ(RegExpPrototypeReplace, 2, kString, kReplaceValue) \
|
| \
|
| - TFS(RegExpSplit, RegExpSplit, 1) \
|
| + TFS(RegExpSplit, kRegExp, kString, kLimit) \
|
| /* ES #sec-regexp.prototype-@@split */ \
|
| TFJ(RegExpPrototypeSplit, 2, kString, kLimit) \
|
| \
|
| @@ -904,21 +907,21 @@ namespace internal {
|
| \
|
| /* Wasm */ \
|
| ASM(WasmCompileLazy) \
|
| - TFS(WasmStackGuard, WasmRuntimeCall, 1) \
|
| - TFS(ThrowWasmTrapUnreachable, WasmRuntimeCall, 1) \
|
| - TFS(ThrowWasmTrapMemOutOfBounds, WasmRuntimeCall, 1) \
|
| - TFS(ThrowWasmTrapDivByZero, WasmRuntimeCall, 1) \
|
| - TFS(ThrowWasmTrapDivUnrepresentable, WasmRuntimeCall, 1) \
|
| - TFS(ThrowWasmTrapRemByZero, WasmRuntimeCall, 1) \
|
| - TFS(ThrowWasmTrapFloatUnrepresentable, WasmRuntimeCall, 1) \
|
| - TFS(ThrowWasmTrapFuncInvalid, WasmRuntimeCall, 1) \
|
| - TFS(ThrowWasmTrapFuncSigMismatch, WasmRuntimeCall, 1) \
|
| + TFC(WasmStackGuard, WasmRuntimeCall, 1) \
|
| + TFC(ThrowWasmTrapUnreachable, WasmRuntimeCall, 1) \
|
| + TFC(ThrowWasmTrapMemOutOfBounds, WasmRuntimeCall, 1) \
|
| + TFC(ThrowWasmTrapDivByZero, WasmRuntimeCall, 1) \
|
| + TFC(ThrowWasmTrapDivUnrepresentable, WasmRuntimeCall, 1) \
|
| + TFC(ThrowWasmTrapRemByZero, WasmRuntimeCall, 1) \
|
| + TFC(ThrowWasmTrapFloatUnrepresentable, WasmRuntimeCall, 1) \
|
| + TFC(ThrowWasmTrapFuncInvalid, WasmRuntimeCall, 1) \
|
| + TFC(ThrowWasmTrapFuncSigMismatch, WasmRuntimeCall, 1) \
|
| \
|
| /* AsyncGenerator */ \
|
| \
|
| - TFS(AsyncGeneratorResolve, AsyncGeneratorResolve, 1) \
|
| - TFS(AsyncGeneratorReject, AsyncGeneratorReject, 1) \
|
| - TFS(AsyncGeneratorResumeNext, AsyncGeneratorResumeNext, 1) \
|
| + TFS(AsyncGeneratorResolve, kGenerator, kValue, kDone) \
|
| + TFS(AsyncGeneratorReject, kGenerator, kValue) \
|
| + TFS(AsyncGeneratorResumeNext, kGenerator) \
|
| \
|
| /* AsyncGeneratorFunction( p1, p2, ... pn, body ) */ \
|
| /* proposal-async-iteration/#sec-asyncgeneratorfunction-constructor */ \
|
| @@ -960,20 +963,20 @@ namespace internal {
|
| TFJ(AsyncIteratorValueUnwrap, 1, kValue)
|
|
|
| #ifdef V8_I18N_SUPPORT
|
| -#define BUILTIN_LIST(CPP, API, TFJ, TFS, TFH, ASM, DBG) \
|
| - BUILTIN_LIST_BASE(CPP, API, TFJ, TFS, TFH, ASM, DBG) \
|
| - \
|
| - /* ES #sec-string.prototype.tolowercase */ \
|
| - CPP(StringPrototypeToLowerCaseI18N) \
|
| - /* ES #sec-string.prototype.touppercase */ \
|
| - CPP(StringPrototypeToUpperCaseI18N) \
|
| - /* ES #sec-string.prototype.normalize */ \
|
| +#define BUILTIN_LIST(CPP, API, TFJ, TFC, TFS, TFH, ASM, DBG) \
|
| + BUILTIN_LIST_BASE(CPP, API, TFJ, TFC, TFS, TFH, ASM, DBG) \
|
| + \
|
| + /* ES #sec-string.prototype.tolowercase */ \
|
| + CPP(StringPrototypeToLowerCaseI18N) \
|
| + /* ES #sec-string.prototype.touppercase */ \
|
| + CPP(StringPrototypeToUpperCaseI18N) \
|
| + /* ES #sec-string.prototype.normalize */ \
|
| CPP(StringPrototypeNormalizeI18N)
|
| #else
|
| -#define BUILTIN_LIST(CPP, API, TFJ, TFS, TFH, ASM, DBG) \
|
| - BUILTIN_LIST_BASE(CPP, API, TFJ, TFS, TFH, ASM, DBG) \
|
| - \
|
| - /* (obsolete) Unibrow version */ \
|
| +#define BUILTIN_LIST(CPP, API, TFJ, TFC, TFS, TFH, ASM, DBG) \
|
| + BUILTIN_LIST_BASE(CPP, API, TFJ, TFC, TFS, TFH, ASM, DBG) \
|
| + \
|
| + /* (obsolete) Unibrow version */ \
|
| CPP(StringPrototypeNormalize)
|
| #endif // V8_I18N_SUPPORT
|
|
|
| @@ -999,19 +1002,23 @@ namespace internal {
|
|
|
| #define IGNORE_BUILTIN(...)
|
|
|
| -#define BUILTIN_LIST_ALL(V) BUILTIN_LIST(V, V, V, V, V, V, V)
|
| +#define BUILTIN_LIST_ALL(V) BUILTIN_LIST(V, V, V, V, V, V, V, V)
|
|
|
| #define BUILTIN_LIST_C(V) \
|
| BUILTIN_LIST(V, V, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \
|
| - IGNORE_BUILTIN, IGNORE_BUILTIN)
|
| + IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN)
|
|
|
| #define BUILTIN_LIST_A(V) \
|
| BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \
|
| - IGNORE_BUILTIN, V, V)
|
| + IGNORE_BUILTIN, IGNORE_BUILTIN, V, V)
|
|
|
| #define BUILTIN_LIST_DBG(V) \
|
| BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \
|
| - IGNORE_BUILTIN, IGNORE_BUILTIN, V)
|
| + IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, V)
|
| +
|
| +#define BUILTIN_LIST_TFS(V) \
|
| + BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \
|
| + V, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN)
|
|
|
| #define BUILTINS_WITH_UNTAGGED_PARAMS(V) V(WasmCompileLazy)
|
|
|
|
|