summaryrefslogtreecommitdiff
path: root/deps/v8/src/deoptimizer/deoptimizer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/deoptimizer/deoptimizer.cc')
-rw-r--r--deps/v8/src/deoptimizer/deoptimizer.cc47
1 files changed, 21 insertions, 26 deletions
diff --git a/deps/v8/src/deoptimizer/deoptimizer.cc b/deps/v8/src/deoptimizer/deoptimizer.cc
index ea460aa36f..6bf26d5bf3 100644
--- a/deps/v8/src/deoptimizer/deoptimizer.cc
+++ b/deps/v8/src/deoptimizer/deoptimizer.cc
@@ -477,15 +477,6 @@ const char* Deoptimizer::MessageFor(DeoptimizeKind kind, bool reuse_code) {
}
}
-namespace {
-
-uint16_t InternalFormalParameterCountWithReceiver(SharedFunctionInfo sfi) {
- static constexpr int kTheReceiver = 1;
- return sfi.internal_formal_parameter_count() + kTheReceiver;
-}
-
-} // namespace
-
Deoptimizer::Deoptimizer(Isolate* isolate, JSFunction function,
DeoptimizeKind kind, unsigned deopt_exit_index,
Address from, int fp_to_sp_delta)
@@ -541,7 +532,7 @@ Deoptimizer::Deoptimizer(Isolate* isolate, JSFunction function,
}
unsigned size = ComputeInputFrameSize();
const int parameter_count =
- InternalFormalParameterCountWithReceiver(function.shared());
+ function.shared().internal_formal_parameter_count_with_receiver();
input_ = new (size) FrameDescription(size, parameter_count);
if (kSupportsFixedDeoptExitSizes) {
@@ -903,9 +894,10 @@ void Deoptimizer::DoComputeOutputFrames() {
isolate_, input_->GetFramePointerAddress(), stack_fp_, &state_iterator,
input_data.LiteralArray(), input_->GetRegisterValues(), trace_file,
function_.IsHeapObject()
- ? function_.shared().internal_formal_parameter_count()
+ ? function_.shared()
+ .internal_formal_parameter_count_without_receiver()
: 0,
- actual_argument_count_);
+ actual_argument_count_ - kJSArgcReceiverSlots);
// Do the input frame to output frame(s) translation.
size_t count = translated_state_.frames().size();
@@ -1026,7 +1018,8 @@ void Deoptimizer::DoComputeUnoptimizedFrame(TranslatedFrame* translated_frame,
const int bytecode_offset =
goto_catch_handler ? catch_handler_pc_offset_ : real_bytecode_offset;
- const int parameters_count = InternalFormalParameterCountWithReceiver(shared);
+ const int parameters_count =
+ shared.internal_formal_parameter_count_with_receiver();
// If this is the bottom most frame or the previous frame was the arguments
// adaptor fake frame, then we already have extra arguments in the stack
@@ -1068,7 +1061,7 @@ void Deoptimizer::DoComputeUnoptimizedFrame(TranslatedFrame* translated_frame,
const bool advance_bc =
(!is_topmost || (deopt_kind_ == DeoptimizeKind::kLazy)) &&
!goto_catch_handler;
- const bool is_baseline = shared.HasBaselineData();
+ const bool is_baseline = shared.HasBaselineCode();
Code dispatch_builtin =
builtins->code(DispatchBuiltinFor(is_baseline, advance_bc));
@@ -1100,11 +1093,13 @@ void Deoptimizer::DoComputeUnoptimizedFrame(TranslatedFrame* translated_frame,
}
// Note: parameters_count includes the receiver.
+ // TODO(v8:11112): Simplify once the receiver is always included in argc.
if (verbose_tracing_enabled() && is_bottommost &&
- actual_argument_count_ > parameters_count - 1) {
- PrintF(trace_scope_->file(),
- " -- %d extra argument(s) already in the stack --\n",
- actual_argument_count_ - parameters_count + 1);
+ actual_argument_count_ - kJSArgcReceiverSlots > parameters_count - 1) {
+ PrintF(
+ trace_scope_->file(),
+ " -- %d extra argument(s) already in the stack --\n",
+ actual_argument_count_ - kJSArgcReceiverSlots - parameters_count + 1);
}
frame_writer.PushStackJSArguments(value_iterator, parameters_count);
@@ -1185,7 +1180,7 @@ void Deoptimizer::DoComputeUnoptimizedFrame(TranslatedFrame* translated_frame,
(translated_state_.frames()[frame_index - 1]).kind();
argc = previous_frame_kind == TranslatedFrame::kArgumentsAdaptor
? output_[frame_index - 1]->parameter_count()
- : parameters_count - 1;
+ : parameters_count - (kJSArgcIncludesReceiver ? 0 : 1);
}
frame_writer.PushRawValue(argc, "actual argument count\n");
@@ -1334,7 +1329,8 @@ void Deoptimizer::DoComputeArgumentsAdaptorFrame(
TranslatedFrame::iterator value_iterator = translated_frame->begin();
const int argument_count_without_receiver = translated_frame->height() - 1;
const int formal_parameter_count =
- translated_frame->raw_shared_info().internal_formal_parameter_count();
+ translated_frame->raw_shared_info()
+ .internal_formal_parameter_count_without_receiver();
const int extra_argument_count =
argument_count_without_receiver - formal_parameter_count;
// The number of pushed arguments is the maximum of the actual argument count
@@ -1350,8 +1346,8 @@ void Deoptimizer::DoComputeArgumentsAdaptorFrame(
}
// Allocate and store the output frame description.
- FrameDescription* output_frame = new (output_frame_size)
- FrameDescription(output_frame_size, argument_count_without_receiver);
+ FrameDescription* output_frame = new (output_frame_size) FrameDescription(
+ output_frame_size, JSParameterCount(argument_count_without_receiver));
// The top address of the frame is computed from the previous frame's top and
// this frame's size.
const intptr_t top_address =
@@ -1470,9 +1466,8 @@ void Deoptimizer::DoComputeConstructStubFrame(TranslatedFrame* translated_frame,
frame_writer.PushTranslatedValue(value_iterator++, "context");
// Number of incoming arguments.
- const uint32_t parameters_count_without_receiver = parameters_count - 1;
- frame_writer.PushRawObject(Smi::FromInt(parameters_count_without_receiver),
- "argc\n");
+ const uint32_t argc = parameters_count - (kJSArgcIncludesReceiver ? 0 : 1);
+ frame_writer.PushRawObject(Smi::FromInt(argc), "argc\n");
// The constructor function was mentioned explicitly in the
// CONSTRUCT_STUB_FRAME.
@@ -2067,7 +2062,7 @@ unsigned Deoptimizer::ComputeInputFrameSize() const {
// static
unsigned Deoptimizer::ComputeIncomingArgumentSize(SharedFunctionInfo shared) {
- int parameter_slots = InternalFormalParameterCountWithReceiver(shared);
+ int parameter_slots = shared.internal_formal_parameter_count_with_receiver();
return parameter_slots * kSystemPointerSize;
}