summaryrefslogtreecommitdiff
path: root/chromium/v8/src/builtins/builtins-call-gen.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/v8/src/builtins/builtins-call-gen.cc
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-85-based.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/v8/src/builtins/builtins-call-gen.cc')
-rw-r--r--chromium/v8/src/builtins/builtins-call-gen.cc73
1 files changed, 72 insertions, 1 deletions
diff --git a/chromium/v8/src/builtins/builtins-call-gen.cc b/chromium/v8/src/builtins/builtins-call-gen.cc
index d457e033149..f7919b78f47 100644
--- a/chromium/v8/src/builtins/builtins-call-gen.cc
+++ b/chromium/v8/src/builtins/builtins-call-gen.cc
@@ -64,6 +64,49 @@ void Builtins::Generate_CallFunctionForwardVarargs(MacroAssembler* masm) {
masm->isolate()->builtins()->CallFunction());
}
+TF_BUILTIN(Call_ReceiverIsNullOrUndefined_WithFeedback,
+ CallOrConstructBuiltinsAssembler) {
+ TNode<Object> target = CAST(Parameter(Descriptor::kFunction));
+ TNode<Int32T> argc =
+ UncheckedCast<Int32T>(Parameter(Descriptor::kActualArgumentsCount));
+ TNode<Context> context = CAST(Parameter(Descriptor::kContext));
+ TNode<HeapObject> maybe_feedback_vector =
+ CAST(Parameter(Descriptor::kMaybeFeedbackVector));
+ TNode<Int32T> slot = UncheckedCast<Int32T>(Parameter(Descriptor::kSlot));
+ CollectCallFeedback(target, context, maybe_feedback_vector,
+ Unsigned(ChangeInt32ToIntPtr(slot)));
+ TailCallBuiltin(Builtins::kCall_ReceiverIsNullOrUndefined, context, target,
+ argc);
+}
+
+TF_BUILTIN(Call_ReceiverIsNotNullOrUndefined_WithFeedback,
+ CallOrConstructBuiltinsAssembler) {
+ TNode<Object> target = CAST(Parameter(Descriptor::kFunction));
+ TNode<Int32T> argc =
+ UncheckedCast<Int32T>(Parameter(Descriptor::kActualArgumentsCount));
+ TNode<Context> context = CAST(Parameter(Descriptor::kContext));
+ TNode<HeapObject> maybe_feedback_vector =
+ CAST(Parameter(Descriptor::kMaybeFeedbackVector));
+ TNode<Int32T> slot = UncheckedCast<Int32T>(Parameter(Descriptor::kSlot));
+ CollectCallFeedback(target, context, maybe_feedback_vector,
+ Unsigned(ChangeInt32ToIntPtr(slot)));
+ TailCallBuiltin(Builtins::kCall_ReceiverIsNotNullOrUndefined, context, target,
+ argc);
+}
+
+TF_BUILTIN(Call_ReceiverIsAny_WithFeedback, CallOrConstructBuiltinsAssembler) {
+ TNode<Object> target = CAST(Parameter(Descriptor::kFunction));
+ TNode<Int32T> argc =
+ UncheckedCast<Int32T>(Parameter(Descriptor::kActualArgumentsCount));
+ TNode<Context> context = CAST(Parameter(Descriptor::kContext));
+ TNode<HeapObject> maybe_feedback_vector =
+ CAST(Parameter(Descriptor::kMaybeFeedbackVector));
+ TNode<Int32T> slot = UncheckedCast<Int32T>(Parameter(Descriptor::kSlot));
+ CollectCallFeedback(target, context, maybe_feedback_vector,
+ Unsigned(ChangeInt32ToIntPtr(slot)));
+ TailCallBuiltin(Builtins::kCall_ReceiverIsAny, context, target, argc);
+}
+
void CallOrConstructBuiltinsAssembler::CallOrConstructWithArrayLike(
TNode<Object> target, base::Optional<TNode<Object>> new_target,
TNode<Object> arguments_list, TNode<Context> context) {
@@ -387,6 +430,19 @@ TF_BUILTIN(CallWithArrayLike, CallOrConstructBuiltinsAssembler) {
CallOrConstructWithArrayLike(target, new_target, arguments_list, context);
}
+TF_BUILTIN(CallWithArrayLike_WithFeedback, CallOrConstructBuiltinsAssembler) {
+ TNode<Object> target = CAST(Parameter(Descriptor::kTarget));
+ base::Optional<TNode<Object>> new_target = base::nullopt;
+ TNode<Object> arguments_list = CAST(Parameter(Descriptor::kArgumentsList));
+ TNode<Context> context = CAST(Parameter(Descriptor::kContext));
+ TNode<HeapObject> maybe_feedback_vector =
+ CAST(Parameter(Descriptor::kMaybeFeedbackVector));
+ TNode<Int32T> slot = UncheckedCast<Int32T>(Parameter(Descriptor::kSlot));
+ CollectCallFeedback(target, context, maybe_feedback_vector,
+ Unsigned(ChangeInt32ToIntPtr(slot)));
+ CallOrConstructWithArrayLike(target, new_target, arguments_list, context);
+}
+
TF_BUILTIN(CallWithSpread, CallOrConstructBuiltinsAssembler) {
TNode<Object> target = CAST(Parameter(Descriptor::kTarget));
base::Optional<TNode<Object>> new_target = base::nullopt;
@@ -397,6 +453,21 @@ TF_BUILTIN(CallWithSpread, CallOrConstructBuiltinsAssembler) {
CallOrConstructWithSpread(target, new_target, spread, args_count, context);
}
+TF_BUILTIN(CallWithSpread_WithFeedback, CallOrConstructBuiltinsAssembler) {
+ TNode<Object> target = CAST(Parameter(Descriptor::kTarget));
+ base::Optional<TNode<Object>> new_target = base::nullopt;
+ TNode<Object> spread = CAST(Parameter(Descriptor::kSpread));
+ TNode<Int32T> args_count =
+ UncheckedCast<Int32T>(Parameter(Descriptor::kArgumentsCount));
+ TNode<Context> context = CAST(Parameter(Descriptor::kContext));
+ TNode<HeapObject> maybe_feedback_vector =
+ CAST(Parameter(Descriptor::kMaybeFeedbackVector));
+ TNode<Int32T> slot = UncheckedCast<Int32T>(Parameter(Descriptor::kSlot));
+ CollectCallFeedback(target, context, maybe_feedback_vector,
+ Unsigned(ChangeInt32ToIntPtr(slot)));
+ CallOrConstructWithSpread(target, new_target, spread, args_count, context);
+}
+
TNode<JSReceiver> CallOrConstructBuiltinsAssembler::GetCompatibleReceiver(
TNode<JSReceiver> receiver, TNode<HeapObject> signature,
TNode<Context> context) {
@@ -535,7 +606,7 @@ void CallOrConstructBuiltinsAssembler::CallFunctionTemplate(
TNode<IntPtrT> function_template_info_flags = LoadAndUntagObjectField(
function_template_info, FunctionTemplateInfo::kFlagOffset);
Branch(IsSetWord(function_template_info_flags,
- 1 << FunctionTemplateInfo::kAcceptAnyReceiver),
+ 1 << FunctionTemplateInfo::AcceptAnyReceiverBit::kShift),
&receiver_done, &receiver_needs_access_check);
BIND(&receiver_needs_access_check);