| Index: src/mips/lithium-codegen-mips.cc | 
| diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc | 
| index 9ae5132cf3bb8140c5b8108fb366298e2819e9cb..ca74800ff5d4a92673fd829fad82f9b26b96aaed 100644 | 
| --- a/src/mips/lithium-codegen-mips.cc | 
| +++ b/src/mips/lithium-codegen-mips.cc | 
| @@ -2873,16 +2873,24 @@ void LCodeGen::DoLoadExternalArrayPointer( | 
|  | 
| void LCodeGen::DoAccessArgumentsAt(LAccessArgumentsAt* instr) { | 
| Register arguments = ToRegister(instr->arguments()); | 
| -  Register length = ToRegister(instr->length()); | 
| -  Register index = ToRegister(instr->index()); | 
| Register result = ToRegister(instr->result()); | 
| -  // There are two words between the frame pointer and the last argument. | 
| -  // Subtracting from length accounts for one of them, add one more. | 
| -  __ subu(length, length, index); | 
| -  __ Addu(length, length, Operand(1)); | 
| -  __ sll(length, length, kPointerSizeLog2); | 
| -  __ Addu(at, arguments, Operand(length)); | 
| -  __ lw(result, MemOperand(at, 0)); | 
| +  if (instr->length()->IsConstantOperand() && | 
| +      instr->index()->IsConstantOperand()) { | 
| +    int const_index = ToInteger32(LConstantOperand::cast(instr->index())); | 
| +    int const_length = ToInteger32(LConstantOperand::cast(instr->length())); | 
| +    int index = (const_length - const_index) + 1; | 
| +    __ lw(result, MemOperand(arguments, index * kPointerSize)); | 
| +  } else { | 
| +    Register length = ToRegister(instr->length()); | 
| +    Register index = ToRegister(instr->index()); | 
| +    // There are two words between the frame pointer and the last argument. | 
| +    // Subtracting from length accounts for one of them, add one more. | 
| +    __ subu(length, length, index); | 
| +    __ Addu(length, length, Operand(1)); | 
| +    __ sll(length, length, kPointerSizeLog2); | 
| +    __ Addu(at, arguments, Operand(length)); | 
| +    __ lw(result, MemOperand(at, 0)); | 
| +  } | 
| } | 
|  | 
|  | 
|  |