| Index: src/x64/stub-cache-x64.cc
|
| diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc
|
| index 8dab38e2932212ae27cd8662df2ea6a5c9a36b9e..67e2de6bad63dfc6b9b9f4543715d7ef6b44a793 100644
|
| --- a/src/x64/stub-cache-x64.cc
|
| +++ b/src/x64/stub-cache-x64.cc
|
| @@ -435,7 +435,7 @@ class LoadInterceptorCompiler BASE_EMBEDDED {
|
| LookupResult* lookup,
|
| String* name,
|
| Label* miss_label) {
|
| - AccessorInfo* callback = 0;
|
| + AccessorInfo* callback = NULL;
|
| bool optimize = false;
|
| // So far the most popular follow ups for interceptor loads are FIELD
|
| // and CALLBACKS, so inline only them, other cases may be added
|
| @@ -559,7 +559,7 @@ class LoadInterceptorCompiler BASE_EMBEDDED {
|
| class CallInterceptorCompiler BASE_EMBEDDED {
|
| public:
|
| CallInterceptorCompiler(const ParameterCount& arguments, Register name)
|
| - : arguments_(arguments), argc_(arguments.immediate()), name_(name) {}
|
| + : arguments_(arguments), name_(name) {}
|
|
|
| void CompileCacheable(MacroAssembler* masm,
|
| StubCompiler* stub_compiler,
|
| @@ -589,6 +589,8 @@ class CallInterceptorCompiler BASE_EMBEDDED {
|
| return;
|
| }
|
|
|
| + ASSERT(!lookup->holder()->IsGlobalObject());
|
| +
|
| __ EnterInternalFrame();
|
| __ push(holder); // Save the holder.
|
| __ push(name_); // Save the name.
|
| @@ -612,22 +614,8 @@ class CallInterceptorCompiler BASE_EMBEDDED {
|
| scratch2,
|
| name,
|
| miss_label);
|
| - if (lookup->holder()->IsGlobalObject()) {
|
| - __ movq(rdx, Operand(rsp, (argc_ + 1) * kPointerSize));
|
| - __ movq(rdx, FieldOperand(rdx, GlobalObject::kGlobalReceiverOffset));
|
| - __ movq(Operand(rsp, (argc_ + 1) * kPointerSize), rdx);
|
| - }
|
|
|
| - ASSERT(function->is_compiled());
|
| - // Get the function and setup the context.
|
| - __ Move(rdi, Handle<JSFunction>(function));
|
| - __ movq(rsi, FieldOperand(rdi, JSFunction::kContextOffset));
|
| -
|
| - // Jump to the cached code (tail call).
|
| - Handle<Code> code(function->code());
|
| - ParameterCount expected(function->shared()->formal_parameter_count());
|
| - __ InvokeCode(code, expected, arguments_,
|
| - RelocInfo::CODE_TARGET, JUMP_FUNCTION);
|
| + __ InvokeFunction(function, arguments_);
|
|
|
| __ bind(&invoke);
|
| }
|
| @@ -648,13 +636,9 @@ class CallInterceptorCompiler BASE_EMBEDDED {
|
| name_,
|
| holder_obj);
|
|
|
| - ExternalReference ref = ExternalReference(
|
| - IC_Utility(IC::kLoadPropertyWithInterceptorForCall));
|
| - __ movq(rax, Immediate(5));
|
| - __ movq(rbx, ref);
|
| -
|
| - CEntryStub stub(1);
|
| - __ CallStub(&stub);
|
| + __ CallExternalReference(
|
| + ExternalReference(IC_Utility(IC::kLoadPropertyWithInterceptorForCall)),
|
| + 5);
|
|
|
| __ pop(name_);
|
| __ LeaveInternalFrame();
|
| @@ -662,7 +646,6 @@ class CallInterceptorCompiler BASE_EMBEDDED {
|
|
|
| private:
|
| const ParameterCount& arguments_;
|
| - int argc_;
|
| Register name_;
|
| };
|
|
|
| @@ -792,16 +775,7 @@ Object* CallStubCompiler::CompileCallConstant(Object* object,
|
| UNREACHABLE();
|
| }
|
|
|
| - // Get the function and setup the context.
|
| - __ Move(rdi, Handle<JSFunction>(function));
|
| - __ movq(rsi, FieldOperand(rdi, JSFunction::kContextOffset));
|
| -
|
| - // Jump to the cached code (tail call).
|
| - ASSERT(function->is_compiled());
|
| - Handle<Code> code(function->code());
|
| - ParameterCount expected(function->shared()->formal_parameter_count());
|
| - __ InvokeCode(code, expected, arguments(),
|
| - RelocInfo::CODE_TARGET, JUMP_FUNCTION);
|
| + __ InvokeFunction(function, arguments());
|
|
|
| // Handle call cache miss.
|
| __ bind(&miss);
|
|
|