Remove ClassConstructor check from CallFunction
CallFunction is only called for targets that are checked not to be class constructors, therefore we can remove the check for class constructors from CallFunction. Change-Id: I3157b885a47f453003201be6ceb0763f7ccbcbf8 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3416243 Auto-Submit: Patrick Thier <pthier@chromium.org> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Commit-Queue: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/main@{#78799}
This commit is contained in:
parent
8121a2b095
commit
99a5bb7484
@ -2249,11 +2249,7 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
|
||||
// -----------------------------------
|
||||
__ AssertCallableFunction(r1);
|
||||
|
||||
Label class_constructor;
|
||||
__ ldr(r2, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset));
|
||||
__ ldr(r3, FieldMemOperand(r2, SharedFunctionInfo::kFlagsOffset));
|
||||
__ tst(r3, Operand(SharedFunctionInfo::IsClassConstructorBit::kMask));
|
||||
__ b(ne, &class_constructor);
|
||||
|
||||
// Enter the context of the function; ToObject has to run in the function
|
||||
// context, and we also need to take the global proxy from the function
|
||||
@ -2328,14 +2324,6 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
|
||||
__ ldrh(r2,
|
||||
FieldMemOperand(r2, SharedFunctionInfo::kFormalParameterCountOffset));
|
||||
__ InvokeFunctionCode(r1, no_reg, r2, r0, InvokeType::kJump);
|
||||
|
||||
// The function is a "classConstructor", need to raise an exception.
|
||||
__ bind(&class_constructor);
|
||||
{
|
||||
FrameScope frame(masm, StackFrame::INTERNAL);
|
||||
__ push(r1);
|
||||
__ CallRuntime(Runtime::kThrowConstructorNonCallableError);
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
@ -2591,12 +2591,8 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
|
||||
// -----------------------------------
|
||||
__ AssertCallableFunction(x1);
|
||||
|
||||
Label class_constructor;
|
||||
__ LoadTaggedPointerField(
|
||||
x2, FieldMemOperand(x1, JSFunction::kSharedFunctionInfoOffset));
|
||||
__ Ldr(w3, FieldMemOperand(x2, SharedFunctionInfo::kFlagsOffset));
|
||||
__ TestAndBranchIfAnySet(w3, SharedFunctionInfo::IsClassConstructorBit::kMask,
|
||||
&class_constructor);
|
||||
|
||||
// Enter the context of the function; ToObject has to run in the function
|
||||
// context, and we also need to take the global proxy from the function
|
||||
@ -2672,15 +2668,6 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
|
||||
__ Ldrh(x2,
|
||||
FieldMemOperand(x2, SharedFunctionInfo::kFormalParameterCountOffset));
|
||||
__ InvokeFunctionCode(x1, no_reg, x2, x0, InvokeType::kJump);
|
||||
|
||||
// The function is a "classConstructor", need to raise an exception.
|
||||
__ Bind(&class_constructor);
|
||||
{
|
||||
FrameScope frame(masm, StackFrame::INTERNAL);
|
||||
__ PushArgument(x1);
|
||||
__ CallRuntime(Runtime::kThrowConstructorNonCallableError);
|
||||
__ Unreachable();
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
@ -2403,11 +2403,7 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
|
||||
StackArgumentsAccessor args(eax);
|
||||
__ AssertCallableFunction(edi, edx);
|
||||
|
||||
Label class_constructor;
|
||||
__ mov(edx, FieldOperand(edi, JSFunction::kSharedFunctionInfoOffset));
|
||||
__ test(FieldOperand(edx, SharedFunctionInfo::kFlagsOffset),
|
||||
Immediate(SharedFunctionInfo::IsClassConstructorBit::kMask));
|
||||
__ j(not_zero, &class_constructor);
|
||||
|
||||
// Enter the context of the function; ToObject has to run in the function
|
||||
// context, and we also need to take the global proxy from the function
|
||||
@ -2488,14 +2484,6 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
|
||||
__ movzx_w(
|
||||
ecx, FieldOperand(edx, SharedFunctionInfo::kFormalParameterCountOffset));
|
||||
__ InvokeFunctionCode(edi, no_reg, ecx, eax, InvokeType::kJump);
|
||||
|
||||
// The function is a "classConstructor", need to raise an exception.
|
||||
__ bind(&class_constructor);
|
||||
{
|
||||
FrameScope frame(masm, StackFrame::INTERNAL);
|
||||
__ push(edi);
|
||||
__ CallRuntime(Runtime::kThrowConstructorNonCallableError);
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
@ -2338,12 +2338,8 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
|
||||
StackArgumentsAccessor args(rax);
|
||||
__ AssertCallableFunction(rdi);
|
||||
|
||||
Label class_constructor;
|
||||
__ LoadTaggedPointerField(
|
||||
rdx, FieldOperand(rdi, JSFunction::kSharedFunctionInfoOffset));
|
||||
__ testl(FieldOperand(rdx, SharedFunctionInfo::kFlagsOffset),
|
||||
Immediate(SharedFunctionInfo::IsClassConstructorBit::kMask));
|
||||
__ j(not_zero, &class_constructor);
|
||||
// ----------- S t a t e -------------
|
||||
// -- rax : the number of arguments
|
||||
// -- rdx : the shared function info.
|
||||
@ -2428,14 +2424,6 @@ void Builtins::Generate_CallFunction(MacroAssembler* masm,
|
||||
__ movzxwq(
|
||||
rbx, FieldOperand(rdx, SharedFunctionInfo::kFormalParameterCountOffset));
|
||||
__ InvokeFunctionCode(rdi, no_reg, rbx, rax, InvokeType::kJump);
|
||||
|
||||
// The function is a "classConstructor", need to raise an exception.
|
||||
__ bind(&class_constructor);
|
||||
{
|
||||
FrameScope frame(masm, StackFrame::INTERNAL);
|
||||
__ Push(rdi);
|
||||
__ CallRuntime(Runtime::kThrowConstructorNonCallableError);
|
||||
}
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
Loading…
Reference in New Issue
Block a user