Index: src/x64/code-stubs-x64.cc |
diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc |
index fef72606f6e349a9c09afde340ea52141e7167dd..d196d0e857785f3690ae550c3e301551cbef4359 100644 |
--- a/src/x64/code-stubs-x64.cc |
+++ b/src/x64/code-stubs-x64.cc |
@@ -2353,42 +2353,9 @@ void CallFunctionStub::Generate(MacroAssembler* masm) { |
// Check that the function really is a JavaScript function. |
__ JumpIfSmi(rdi, &non_function); |
- // The receiver might implicitly be the global object. This is |
- // indicated by passing the hole as the receiver to the call |
- // function stub. |
- if (ReceiverMightBeImplicit() || ReceiverIsImplicit()) { |
- Label try_call, call, patch_current_context; |
- if (ReceiverMightBeImplicit()) { |
- // Get the receiver from the stack. |
- __ movq(rax, args.GetReceiverOperand()); |
- // Call as function is indicated with the hole. |
- __ CompareRoot(rax, Heap::kTheHoleValueRootIndex); |
- __ j(not_equal, &try_call, Label::kNear); |
- } |
- // Patch the receiver on the stack with the global receiver object. |
- // Goto slow case if we do not have a function. |
- __ CmpObjectType(rdi, JS_FUNCTION_TYPE, rcx); |
- __ j(not_equal, &patch_current_context); |
- CallStubCompiler::FetchGlobalProxy(masm, rcx, rdi); |
- __ movq(args.GetReceiverOperand(), rcx); |
- __ jmp(&call, Label::kNear); |
- |
- __ bind(&patch_current_context); |
- __ LoadRoot(kScratchRegister, Heap::kUndefinedValueRootIndex); |
- __ movq(args.GetReceiverOperand(), kScratchRegister); |
- __ jmp(&slow); |
- |
- __ bind(&try_call); |
- // Goto slow case if we do not have a function. |
- __ CmpObjectType(rdi, JS_FUNCTION_TYPE, rcx); |
- __ j(not_equal, &slow); |
- |
- __ bind(&call); |
- } else { |
- // Goto slow case if we do not have a function. |
- __ CmpObjectType(rdi, JS_FUNCTION_TYPE, rcx); |
- __ j(not_equal, &slow); |
- } |
+ // Goto slow case if we do not have a function. |
+ __ CmpObjectType(rdi, JS_FUNCTION_TYPE, rcx); |
+ __ j(not_equal, &slow); |
if (RecordCallTarget()) { |
GenerateRecordCallTarget(masm); |
@@ -2397,17 +2364,6 @@ void CallFunctionStub::Generate(MacroAssembler* masm) { |
// Fast-case: Just invoke the function. |
ParameterCount actual(argc_); |
- if (ReceiverMightBeImplicit()) { |
- Label call_as_function; |
- __ CompareRoot(rax, Heap::kTheHoleValueRootIndex); |
- __ j(equal, &call_as_function); |
- __ InvokeFunction(rdi, |
- actual, |
- JUMP_FUNCTION, |
- NullCallWrapper(), |
- CALL_AS_METHOD); |
- __ bind(&call_as_function); |
- } |
__ InvokeFunction(rdi, |
actual, |
JUMP_FUNCTION, |
@@ -2445,7 +2401,7 @@ void CallFunctionStub::Generate(MacroAssembler* masm) { |
__ movq(args.GetReceiverOperand(), rdi); |
__ Set(rax, argc_); |
__ Set(rbx, 0); |
- __ SetCallKind(rcx, CALL_AS_METHOD); |
+ __ SetCallKind(rcx, CALL_AS_FUNCTION); |
__ GetBuiltinEntry(rdx, Builtins::CALL_NON_FUNCTION); |
Handle<Code> adaptor = |
isolate->builtins()->ArgumentsAdaptorTrampoline(); |