| Index: src/mips/stub-cache-mips.cc
 | 
| diff --git a/src/mips/stub-cache-mips.cc b/src/mips/stub-cache-mips.cc
 | 
| index 7177c701af254151f4b20a2cb58a9c8a7e661114..cd08533ff074f1ac5dba2c39ccef320407b46dac 100644
 | 
| --- a/src/mips/stub-cache-mips.cc
 | 
| +++ b/src/mips/stub-cache-mips.cc
 | 
| @@ -840,15 +840,13 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm,
 | 
|    //  -- sp[(argc + 7) * 4] : receiver
 | 
|    // -----------------------------------
 | 
|    typedef FunctionCallbackArguments FCA;
 | 
| -  const int kArgs = kFastApiCallArguments;
 | 
|    // Save calling context.
 | 
| -  __ sw(cp,
 | 
| -        MemOperand(sp, (kArgs - 1 + FCA::kContextSaveIndex) * kPointerSize));
 | 
| +  __ sw(cp, MemOperand(sp, FCA::kContextSaveIndex * kPointerSize));
 | 
|    // Get the function and setup the context.
 | 
|    Handle<JSFunction> function = optimization.constant_function();
 | 
|    __ LoadHeapObject(t1, function);
 | 
|    __ lw(cp, FieldMemOperand(t1, JSFunction::kContextOffset));
 | 
| -  __ sw(t1, MemOperand(sp, (kArgs - 1 + FCA::kCalleeIndex) * kPointerSize));
 | 
| +  __ sw(t1, MemOperand(sp, FCA::kCalleeIndex * kPointerSize));
 | 
|  
 | 
|    // Construct the FunctionCallbackInfo.
 | 
|    Handle<CallHandlerInfo> api_call_info = optimization.api_call_info();
 | 
| @@ -860,20 +858,17 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm,
 | 
|      __ li(t2, call_data);
 | 
|    }
 | 
|    // Store call data.
 | 
| -  __ sw(t2, MemOperand(sp, (kArgs - 1 + FCA::kDataIndex) * kPointerSize));
 | 
| +  __ sw(t2, MemOperand(sp, FCA::kDataIndex * kPointerSize));
 | 
|    // Store isolate.
 | 
|    __ li(t3, Operand(ExternalReference::isolate_address(masm->isolate())));
 | 
| -  __ sw(t3, MemOperand(sp, (kArgs - 1 + FCA::kIsolateIndex) * kPointerSize));
 | 
| +  __ sw(t3, MemOperand(sp, FCA::kIsolateIndex * kPointerSize));
 | 
|    // Store ReturnValue default and ReturnValue.
 | 
|    __ LoadRoot(t1, Heap::kUndefinedValueRootIndex);
 | 
| -  __ sw(t1,
 | 
| -        MemOperand(sp, (kArgs - 1 + FCA::kReturnValueOffset) * kPointerSize));
 | 
| -  __ sw(t1,
 | 
| -        MemOperand(sp,
 | 
| -            (kArgs - 1 + FCA::kReturnValueDefaultValueIndex) * kPointerSize));
 | 
| +  __ sw(t1, MemOperand(sp, FCA::kReturnValueOffset * kPointerSize));
 | 
| +  __ sw(t1, MemOperand(sp, FCA::kReturnValueDefaultValueIndex * kPointerSize));
 | 
|  
 | 
|    // Prepare arguments.
 | 
| -  __ Addu(a2, sp, Operand((kArgs - 1) * kPointerSize));
 | 
| +  __ Move(a2, sp);
 | 
|  
 | 
|    // Allocate the v8::Arguments structure in the arguments' space since
 | 
|    // it's not controlled by GC.
 | 
| @@ -882,22 +877,21 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm,
 | 
|    FrameScope frame_scope(masm, StackFrame::MANUAL);
 | 
|    __ EnterExitFrame(false, kApiStackSpace);
 | 
|  
 | 
| -  // a0 = v8::Arguments&
 | 
| +  // a0 = FunctionCallbackInfo&
 | 
|    // Arguments is built at sp + 1 (sp is a reserved spot for ra).
 | 
|    __ Addu(a0, sp, kPointerSize);
 | 
| -
 | 
| -  // v8::Arguments::implicit_args_
 | 
| +  // FunctionCallbackInfo::implicit_args_
 | 
|    __ sw(a2, MemOperand(a0, 0 * kPointerSize));
 | 
| -  // v8::Arguments::values_
 | 
| -  __ Addu(t0, a2, Operand(argc * kPointerSize));
 | 
| +  // FunctionCallbackInfo::values_
 | 
| +  __ Addu(t0, a2, Operand((kFastApiCallArguments - 1 + argc) * kPointerSize));
 | 
|    __ sw(t0, MemOperand(a0, 1 * kPointerSize));
 | 
| -  // v8::Arguments::length_ = argc
 | 
| +  // FunctionCallbackInfo::length_ = argc
 | 
|    __ li(t0, Operand(argc));
 | 
|    __ sw(t0, MemOperand(a0, 2 * kPointerSize));
 | 
| -  // v8::Arguments::is_construct_call = 0
 | 
| +  // FunctionCallbackInfo::is_construct_call = 0
 | 
|    __ sw(zero_reg, MemOperand(a0, 3 * kPointerSize));
 | 
|  
 | 
| -  const int kStackUnwindSpace = argc + kArgs + 1;
 | 
| +  const int kStackUnwindSpace = argc + kFastApiCallArguments + 1;
 | 
|    Address function_address = v8::ToCData<Address>(api_call_info->callback());
 | 
|    ApiFunction fun(function_address);
 | 
|    ExternalReference::Type type = ExternalReference::DIRECT_API_CALL;
 | 
| @@ -913,9 +907,10 @@ static void GenerateFastApiDirectCall(MacroAssembler* masm,
 | 
|  
 | 
|    AllowExternalCallThatCantCauseGC scope(masm);
 | 
|    MemOperand context_restore_operand(
 | 
| -      fp, (kArgs + 1 + FCA::kContextSaveIndex) * kPointerSize);
 | 
| +      fp, (2 + FCA::kContextSaveIndex) * kPointerSize);
 | 
|    MemOperand return_value_operand(
 | 
| -      fp, (kArgs + 1 + FCA::kReturnValueOffset) * kPointerSize);
 | 
| +      fp, (2 + FCA::kReturnValueOffset) * kPointerSize);
 | 
| +
 | 
|    __ CallApiFunctionAndReturn(ref,
 | 
|                                function_address,
 | 
|                                thunk_ref,
 | 
| @@ -937,13 +932,12 @@ static void GenerateFastApiCall(MacroAssembler* masm,
 | 
|    ASSERT(optimization.is_simple_api_call());
 | 
|    ASSERT(!receiver.is(scratch));
 | 
|  
 | 
| +  typedef FunctionCallbackArguments FCA;
 | 
|    const int stack_space = kFastApiCallArguments + argc + 1;
 | 
| -  const int kHolderIndex = kFastApiCallArguments +
 | 
| -      FunctionCallbackArguments::kHolderIndex - 1;
 | 
|    // Assign stack space for the call arguments.
 | 
|    __ Subu(sp, sp, Operand(stack_space * kPointerSize));
 | 
|    // Write holder to stack frame.
 | 
| -  __ sw(receiver, MemOperand(sp, kHolderIndex * kPointerSize));
 | 
| +  __ sw(receiver, MemOperand(sp, FCA::kHolderIndex * kPointerSize));
 | 
|    // Write receiver to stack frame.
 | 
|    int index = stack_space - 1;
 | 
|    __ sw(receiver, MemOperand(sp, index * kPointerSize));
 | 
| @@ -1196,8 +1190,6 @@ Register StubCompiler::CheckPrototypes(Handle<JSObject> object,
 | 
|                                         int save_at_depth,
 | 
|                                         Label* miss,
 | 
|                                         PrototypeCheckType check) {
 | 
| -  const int kHolderIndex = kFastApiCallArguments +
 | 
| -      FunctionCallbackArguments::kHolderIndex - 1;
 | 
|    // Make sure that the type feedback oracle harvests the receiver map.
 | 
|    // TODO(svenpanne) Remove this hack when all ICs are reworked.
 | 
|    __ li(scratch1, Operand(Handle<Map>(object->map())));
 | 
| @@ -1212,8 +1204,9 @@ Register StubCompiler::CheckPrototypes(Handle<JSObject> object,
 | 
|    Register reg = object_reg;
 | 
|    int depth = 0;
 | 
|  
 | 
| +  typedef FunctionCallbackArguments FCA;
 | 
|    if (save_at_depth == depth) {
 | 
| -    __ sw(reg, MemOperand(sp, kHolderIndex * kPointerSize));
 | 
| +    __ sw(reg, MemOperand(sp, FCA::kHolderIndex * kPointerSize));
 | 
|    }
 | 
|  
 | 
|    // Check the maps in the prototype chain.
 | 
| @@ -1271,7 +1264,7 @@ Register StubCompiler::CheckPrototypes(Handle<JSObject> object,
 | 
|      }
 | 
|  
 | 
|      if (save_at_depth == depth) {
 | 
| -      __ sw(reg, MemOperand(sp, kHolderIndex * kPointerSize));
 | 
| +      __ sw(reg, MemOperand(sp, FCA::kHolderIndex * kPointerSize));
 | 
|      }
 | 
|  
 | 
|      // Go to the next object in the prototype chain.
 | 
| @@ -1429,17 +1422,17 @@ void BaseLoadStubCompiler::GenerateLoadCallback(
 | 
|      Handle<ExecutableAccessorInfo> callback) {
 | 
|    // Build AccessorInfo::args_ list on the stack and push property name below
 | 
|    // the exit frame to make GC aware of them and store pointers to them.
 | 
| -  STATIC_ASSERT(PropertyCallbackArguments::kThisIndex == 0);
 | 
| -  STATIC_ASSERT(PropertyCallbackArguments::kDataIndex == -1);
 | 
| -  STATIC_ASSERT(PropertyCallbackArguments::kReturnValueOffset == -2);
 | 
| -  STATIC_ASSERT(PropertyCallbackArguments::kReturnValueDefaultValueIndex == -3);
 | 
| -  STATIC_ASSERT(PropertyCallbackArguments::kIsolateIndex == -4);
 | 
| -  STATIC_ASSERT(PropertyCallbackArguments::kHolderIndex == -5);
 | 
| +  STATIC_ASSERT(PropertyCallbackArguments::kHolderIndex == 0);
 | 
| +  STATIC_ASSERT(PropertyCallbackArguments::kIsolateIndex == 1);
 | 
| +  STATIC_ASSERT(PropertyCallbackArguments::kReturnValueDefaultValueIndex == 2);
 | 
| +  STATIC_ASSERT(PropertyCallbackArguments::kReturnValueOffset == 3);
 | 
| +  STATIC_ASSERT(PropertyCallbackArguments::kDataIndex == 4);
 | 
| +  STATIC_ASSERT(PropertyCallbackArguments::kThisIndex == 5);
 | 
| +  STATIC_ASSERT(PropertyCallbackArguments::kArgsLength == 6);
 | 
|    ASSERT(!scratch2().is(reg));
 | 
|    ASSERT(!scratch3().is(reg));
 | 
|    ASSERT(!scratch4().is(reg));
 | 
|    __ push(receiver());
 | 
| -  __ mov(scratch2(), sp);  // scratch2 = AccessorInfo::args_
 | 
|    if (heap()->InNewSpace(callback->data())) {
 | 
|      __ li(scratch3(), callback);
 | 
|      __ lw(scratch3(), FieldMemOperand(scratch3(),
 | 
| @@ -1457,6 +1450,7 @@ void BaseLoadStubCompiler::GenerateLoadCallback(
 | 
|    __ sw(scratch4(), MemOperand(sp, 2 * kPointerSize));
 | 
|    __ sw(reg, MemOperand(sp, 1 * kPointerSize));
 | 
|    __ sw(name(), MemOperand(sp, 0 * kPointerSize));
 | 
| +  __ Addu(scratch2(), sp, 1 * kPointerSize);
 | 
|  
 | 
|    __ mov(a2, scratch2());  // Saved in case scratch2 == a1.
 | 
|    __ mov(a0, sp);  // (first argument - a0) = Handle<Name>
 | 
| @@ -1465,7 +1459,7 @@ void BaseLoadStubCompiler::GenerateLoadCallback(
 | 
|    FrameScope frame_scope(masm(), StackFrame::MANUAL);
 | 
|    __ EnterExitFrame(false, kApiStackSpace);
 | 
|  
 | 
| -  // Create AccessorInfo instance on the stack above the exit frame with
 | 
| +  // Create PropertyAccessorInfo instance on the stack above the exit frame with
 | 
|    // scratch2 (internal::Object** args_) as the data.
 | 
|    __ sw(a2, MemOperand(sp, kPointerSize));
 | 
|    // (second argument - a1) = AccessorInfo&
 | 
| 
 |