Chromium Code Reviews| 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..7a374d2de7cb5c73111221e7cecd3045cdfa7d59 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. |
|
Paul Lind
2013/04/22 21:49:22
nit: comma after word 'them':
...one of them, add
|
| + __ subu(length, length, index); |
| + __ Addu(length, length, Operand(1)); |
| + __ sll(length, length, kPointerSizeLog2); |
| + __ Addu(at, arguments, Operand(length)); |
| + __ lw(result, MemOperand(at, 0)); |
| + } |
| } |