| Index: src/mips/builtins-mips.cc | 
| diff --git a/src/mips/builtins-mips.cc b/src/mips/builtins-mips.cc | 
| index c5ca8b69eb786d7035177d0b1affdb21ca843e19..9b33341f8bcc0311b53d296452458b473756b6ff 100644 | 
| --- a/src/mips/builtins-mips.cc | 
| +++ b/src/mips/builtins-mips.cc | 
| @@ -1253,6 +1253,7 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) { | 
|  | 
|  | 
| static void Generate_PushAppliedArguments(MacroAssembler* masm, | 
| +                                          const int vectorOffset, | 
| const int argumentsOffset, | 
| const int indexOffset, | 
| const int limitOffset) { | 
| @@ -1270,13 +1271,9 @@ static void Generate_PushAppliedArguments(MacroAssembler* masm, | 
| __ lw(receiver, MemOperand(fp, argumentsOffset)); | 
|  | 
| // Use inline caching to speed up access to arguments. | 
| -  Code::Kind kinds[] = {Code::KEYED_LOAD_IC}; | 
| -  FeedbackVectorSpec spec(0, 1, kinds); | 
| -  Handle<TypeFeedbackVector> feedback_vector = | 
| -      masm->isolate()->factory()->NewTypeFeedbackVector(&spec); | 
| -  int index = feedback_vector->GetIndex(FeedbackVectorICSlot(0)); | 
| -  __ li(slot, Operand(Smi::FromInt(index))); | 
| -  __ li(vector, feedback_vector); | 
| +  int slot_index = TypeFeedbackVector::PushAppliedArgumentsIndex(); | 
| +  __ li(slot, Operand(Smi::FromInt(slot_index))); | 
| +  __ lw(vector, MemOperand(fp, vectorOffset)); | 
| Handle<Code> ic = | 
| KeyedLoadICStub(masm->isolate(), LoadICState(kNoExtraICState)).GetCode(); | 
| __ Call(ic, RelocInfo::CODE_TARGET); | 
| @@ -1310,6 +1307,13 @@ static void Generate_ApplyHelper(MacroAssembler* masm, bool targetIsArgument) { | 
| const int kArgumentsOffset = kFPOnStackSize + kPCOnStackSize; | 
| const int kReceiverOffset = kArgumentsOffset + kPointerSize; | 
| const int kFunctionOffset = kReceiverOffset + kPointerSize; | 
| +    const int kVectorOffset = | 
| +        InternalFrameConstants::kCodeOffset - 1 * kPointerSize; | 
| + | 
| +    // Push the vector. | 
| +    __ lw(a1, FieldMemOperand(a1, JSFunction::kSharedFunctionInfoOffset)); | 
| +    __ lw(a1, FieldMemOperand(a1, SharedFunctionInfo::kFeedbackVectorOffset)); | 
| +    __ Push(a1); | 
|  | 
| __ lw(a0, MemOperand(fp, kFunctionOffset));  // Get the function. | 
| __ lw(a1, MemOperand(fp, kArgumentsOffset));  // Get the args array. | 
| @@ -1326,17 +1330,15 @@ static void Generate_ApplyHelper(MacroAssembler* masm, bool targetIsArgument) { | 
| Generate_CheckStackOverflow(masm, kFunctionOffset, v0, kArgcIsSmiTagged); | 
|  | 
| // Push current limit and index. | 
| -    const int kIndexOffset = | 
| -        StandardFrameConstants::kExpressionsOffset - (2 * kPointerSize); | 
| -    const int kLimitOffset = | 
| -        StandardFrameConstants::kExpressionsOffset - (1 * kPointerSize); | 
| +    const int kIndexOffset = kVectorOffset - (2 * kPointerSize); | 
| +    const int kLimitOffset = kVectorOffset - (1 * kPointerSize); | 
| __ mov(a1, zero_reg); | 
| __ lw(a2, MemOperand(fp, kReceiverOffset)); | 
| __ Push(v0, a1, a2);  // limit, initial index and receiver. | 
|  | 
| // Copy all arguments from the array to the stack. | 
| -    Generate_PushAppliedArguments(masm, kArgumentsOffset, kIndexOffset, | 
| -                                  kLimitOffset); | 
| +    Generate_PushAppliedArguments(masm, kVectorOffset, kArgumentsOffset, | 
| +                                  kIndexOffset, kLimitOffset); | 
|  | 
| // Call the callable. | 
| // TODO(bmeurer): This should be a tail call according to ES6. | 
| @@ -1360,6 +1362,13 @@ static void Generate_ConstructHelper(MacroAssembler* masm) { | 
| const int kNewTargetOffset = kFPOnStackSize + kPCOnStackSize; | 
| const int kArgumentsOffset = kNewTargetOffset + kPointerSize; | 
| const int kFunctionOffset = kArgumentsOffset + kPointerSize; | 
| +    const int kVectorOffset = | 
| +        InternalFrameConstants::kCodeOffset - 1 * kPointerSize; | 
| + | 
| +    // Push the vector. | 
| +    __ lw(a1, FieldMemOperand(a1, JSFunction::kSharedFunctionInfoOffset)); | 
| +    __ lw(a1, FieldMemOperand(a1, SharedFunctionInfo::kFeedbackVectorOffset)); | 
| +    __ Push(a1); | 
|  | 
| // If newTarget is not supplied, set it to constructor | 
| Label validate_arguments; | 
| @@ -1385,10 +1394,8 @@ static void Generate_ConstructHelper(MacroAssembler* masm) { | 
| Generate_CheckStackOverflow(masm, kFunctionOffset, v0, kArgcIsSmiTagged); | 
|  | 
| // Push current limit and index. | 
| -    const int kIndexOffset = | 
| -        StandardFrameConstants::kExpressionsOffset - (2 * kPointerSize); | 
| -    const int kLimitOffset = | 
| -        StandardFrameConstants::kExpressionsOffset - (1 * kPointerSize); | 
| +    const int kIndexOffset = kVectorOffset - (2 * kPointerSize); | 
| +    const int kLimitOffset = kVectorOffset - (1 * kPointerSize); | 
| __ push(v0);  // limit | 
| __ mov(a1, zero_reg);  // initial index | 
| __ push(a1); | 
| @@ -1397,8 +1404,8 @@ static void Generate_ConstructHelper(MacroAssembler* masm) { | 
| __ push(a0); | 
|  | 
| // Copy all arguments from the array to the stack. | 
| -    Generate_PushAppliedArguments( | 
| -        masm, kArgumentsOffset, kIndexOffset, kLimitOffset); | 
| +    Generate_PushAppliedArguments(masm, kVectorOffset, kArgumentsOffset, | 
| +                                  kIndexOffset, kLimitOffset); | 
|  | 
| // Use undefined feedback vector | 
| __ LoadRoot(a2, Heap::kUndefinedValueRootIndex); | 
|  |