| Index: src/mips/stub-cache-mips.cc
|
| diff --git a/src/mips/stub-cache-mips.cc b/src/mips/stub-cache-mips.cc
|
| index da19d89d0e2cbccdf3ddfd76abaa1168c422c87b..e6d3f7d3c33a07f833daa3d8d9b81f7310828682 100644
|
| --- a/src/mips/stub-cache-mips.cc
|
| +++ b/src/mips/stub-cache-mips.cc
|
| @@ -776,8 +776,7 @@ static void GenerateFastApiCallBody(MacroAssembler* masm,
|
| Register callee = a0;
|
| Register call_data = t0;
|
| Register holder = a2;
|
| - Register api_function_address = a3;
|
| - Register thunk_arg = a1;
|
| + Register api_function_address = a1;
|
|
|
| // Put holder in place.
|
| __ mov(holder, holder_in);
|
| @@ -810,7 +809,6 @@ static void GenerateFastApiCallBody(MacroAssembler* masm,
|
| type,
|
| masm->isolate());
|
| __ li(api_function_address, Operand(ref));
|
| - __ li(thunk_arg, Operand(reinterpret_cast<int32_t>(function_address)));
|
|
|
| // Jump to stub.
|
| CallApiFunctionStub stub(restore_context, call_data_undefined, argc);
|
| @@ -818,47 +816,6 @@ static void GenerateFastApiCallBody(MacroAssembler* masm,
|
| }
|
|
|
|
|
| -// Generates call to API function.
|
| -static void GenerateFastApiCall(MacroAssembler* masm,
|
| - const CallOptimization& optimization,
|
| - int argc,
|
| - Handle<Map> map_to_holder,
|
| - CallOptimization::HolderLookup holder_lookup) {
|
| - Counters* counters = masm->isolate()->counters();
|
| - __ IncrementCounter(counters->call_const_fast_api(), 1, a0, a1);
|
| -
|
| - // Move holder to a register.
|
| - Register holder_reg = a2;
|
| - switch (holder_lookup) {
|
| - case CallOptimization::kHolderIsReceiver:
|
| - {
|
| - ASSERT(map_to_holder.is_null());
|
| - __ lw(holder_reg, MemOperand(sp, argc * kPointerSize));
|
| - }
|
| - break;
|
| - case CallOptimization::kHolderIsPrototypeOfMap:
|
| - {
|
| - Handle<JSObject> holder(JSObject::cast(map_to_holder->prototype()));
|
| - if (!masm->isolate()->heap()->InNewSpace(*holder)) {
|
| - __ li(holder_reg, holder);
|
| - } else {
|
| - __ li(holder_reg, map_to_holder);
|
| - __ lw(holder_reg,
|
| - FieldMemOperand(holder_reg, Map::kPrototypeOffset));
|
| - }
|
| - }
|
| - break;
|
| - case CallOptimization::kHolderNotFound:
|
| - UNREACHABLE();
|
| - }
|
| - GenerateFastApiCallBody(masm,
|
| - optimization,
|
| - argc,
|
| - holder_reg,
|
| - false);
|
| -}
|
| -
|
| -
|
| // Generate call to api function.
|
| static void GenerateFastApiCall(MacroAssembler* masm,
|
| const CallOptimization& optimization,
|
| @@ -964,36 +921,9 @@ class CallInterceptorCompiler BASE_EMBEDDED {
|
| name, miss_label);
|
| }
|
|
|
| - Handle<Map> lookup_map;
|
| - CallOptimization::HolderLookup holder_lookup =
|
| - CallOptimization::kHolderNotFound;
|
| - if (optimization.is_simple_api_call() &&
|
| - !lookup->holder()->IsGlobalObject()) {
|
| - lookup_map = optimization.LookupHolderOfExpectedType(
|
| - object, object, interceptor_holder, &holder_lookup);
|
| - if (holder_lookup == CallOptimization::kHolderNotFound) {
|
| - lookup_map =
|
| - optimization.LookupHolderOfExpectedType(
|
| - object,
|
| - interceptor_holder,
|
| - Handle<JSObject>(lookup->holder()),
|
| - &holder_lookup);
|
| - }
|
| - }
|
| -
|
| - // Invoke function.
|
| - if (holder_lookup != CallOptimization::kHolderNotFound) {
|
| - int argc = arguments_.immediate();
|
| - GenerateFastApiCall(masm,
|
| - optimization,
|
| - argc,
|
| - lookup_map,
|
| - holder_lookup);
|
| - } else {
|
| - Handle<JSFunction> function = optimization.constant_function();
|
| - __ Move(a0, receiver);
|
| - stub_compiler_->GenerateJumpFunction(object, function);
|
| - }
|
| + Handle<JSFunction> function = optimization.constant_function();
|
| + __ Move(a0, receiver);
|
| + stub_compiler_->GenerateJumpFunction(object, function);
|
|
|
| // Invoke a regular function.
|
| __ bind(®ular_invoke);
|
| @@ -1314,15 +1244,13 @@ void LoadStubCompiler::GenerateLoadCallback(
|
|
|
| __ mov(a2, scratch2()); // Saved in case scratch2 == a1.
|
| // Abi for CallApiGetter.
|
| - Register getter_address_reg = a3;
|
| - Register thunk_last_arg = a2;
|
| + Register getter_address_reg = a2;
|
|
|
| Address getter_address = v8::ToCData<Address>(callback->getter());
|
| ApiFunction fun(getter_address);
|
| ExternalReference::Type type = ExternalReference::DIRECT_GETTER_CALL;
|
| ExternalReference ref = ExternalReference(&fun, type, isolate());
|
| __ li(getter_address_reg, Operand(ref));
|
| - __ li(thunk_last_arg, Operand(reinterpret_cast<int32_t>(getter_address)));
|
|
|
| CallApiGetterStub stub;
|
| __ TailCallStub(&stub);
|
| @@ -1485,58 +1413,6 @@ Handle<Code> CallStubCompiler::CompileCallField(Handle<JSObject> object,
|
| }
|
|
|
|
|
| -Handle<Code> CallStubCompiler::CompileFastApiCall(
|
| - const CallOptimization& optimization,
|
| - Handle<Object> object,
|
| - Handle<JSObject> holder,
|
| - Handle<Cell> cell,
|
| - Handle<JSFunction> function,
|
| - Handle<String> name) {
|
| -
|
| - Counters* counters = isolate()->counters();
|
| -
|
| - ASSERT(optimization.is_simple_api_call());
|
| - // Bail out if object is a global object as we don't want to
|
| - // repatch it to global receiver.
|
| - if (object->IsGlobalObject()) return Handle<Code>::null();
|
| - if (!cell.is_null()) return Handle<Code>::null();
|
| - if (!object->IsJSObject()) return Handle<Code>::null();
|
| - Handle<JSObject> receiver = Handle<JSObject>::cast(object);
|
| - CallOptimization::HolderLookup holder_lookup =
|
| - CallOptimization::kHolderNotFound;
|
| - Handle<Map> lookup_map = optimization.LookupHolderOfExpectedType(
|
| - receiver, receiver, holder, &holder_lookup);
|
| - if (holder_lookup == CallOptimization::kHolderNotFound) {
|
| - return Handle<Code>::null();
|
| - }
|
| -
|
| - Label miss;
|
| - GenerateNameCheck(name, &miss);
|
| -
|
| - // Get the receiver from the stack.
|
| - const int argc = arguments().immediate();
|
| - __ lw(a1, MemOperand(sp, argc * kPointerSize));
|
| -
|
| - // Check that the receiver isn't a smi.
|
| - __ JumpIfSmi(a1, &miss);
|
| -
|
| - __ IncrementCounter(counters->call_const(), 1, a0, a3);
|
| -
|
| - // Check that the maps haven't changed and find a Holder as a side effect.
|
| - CheckPrototypes(
|
| - IC::CurrentTypeOf(object, isolate()),
|
| - a1, holder, a0, a3, t0, name, &miss);
|
| -
|
| - GenerateFastApiCall(
|
| - masm(), optimization, argc, lookup_map, holder_lookup);
|
| -
|
| - HandlerFrontendFooter(&miss);
|
| -
|
| - // Return the generated code.
|
| - return GetCode(function);
|
| -}
|
| -
|
| -
|
| void StubCompiler::GenerateBooleanCheck(Register object, Label* miss) {
|
| Label success;
|
| // Check that the object is a boolean.
|
| @@ -1697,14 +1573,6 @@ Handle<Code> CallStubCompiler::CompileCallGlobal(
|
| Handle<PropertyCell> cell,
|
| Handle<JSFunction> function,
|
| Handle<Name> name) {
|
| - if (HasCustomCallGenerator(function)) {
|
| - Handle<Code> code = CompileCustomCall(
|
| - object, holder, cell, function, Handle<String>::cast(name),
|
| - Code::NORMAL);
|
| - // A null handle means bail out to the regular compiler code below.
|
| - if (!code.is_null()) return code;
|
| - }
|
| -
|
| Label miss;
|
| HandlerFrontendHeader(object, holder, name, RECEIVER_MAP_CHECK, &miss);
|
| // Potentially loads a closure that matches the shared function info of the
|
|
|