| Index: src/crankshaft/mips64/lithium-codegen-mips64.cc
|
| diff --git a/src/crankshaft/mips64/lithium-codegen-mips64.cc b/src/crankshaft/mips64/lithium-codegen-mips64.cc
|
| index 7b89a6a0ebc068c08386790f14467f6363f1d759..68f19df9ec9d36e719c176f6aa3851e7c82b0ad4 100644
|
| --- a/src/crankshaft/mips64/lithium-codegen-mips64.cc
|
| +++ b/src/crankshaft/mips64/lithium-codegen-mips64.cc
|
| @@ -1410,8 +1410,7 @@ void LCodeGen::DoMulS(LMulS* instr) {
|
| if (constant < 0) __ Dsubu(result, zero_reg, result);
|
| } else if (base::bits::IsPowerOfTwo32(constant_abs - 1)) {
|
| int32_t shift = WhichPowerOf2(constant_abs - 1);
|
| - __ dsll(scratch, left, shift);
|
| - __ Daddu(result, scratch, left);
|
| + __ Dlsa(result, left, left, shift);
|
| // Correct the sign of the result if the constant is negative.
|
| if (constant < 0) __ Dsubu(result, zero_reg, result);
|
| } else if (base::bits::IsPowerOfTwo32(constant_abs + 1)) {
|
| @@ -1512,8 +1511,7 @@ void LCodeGen::DoMulI(LMulI* instr) {
|
| if (constant < 0) __ Subu(result, zero_reg, result);
|
| } else if (base::bits::IsPowerOfTwo32(constant_abs - 1)) {
|
| int32_t shift = WhichPowerOf2(constant_abs - 1);
|
| - __ sll(scratch, left, shift);
|
| - __ addu(result, scratch, left);
|
| + __ Lsa(result, left, left, shift);
|
| // Correct the sign of the result if the constant is negative.
|
| if (constant < 0) __ Subu(result, zero_reg, result);
|
| } else if (base::bits::IsPowerOfTwo32(constant_abs + 1)) {
|
| @@ -2703,8 +2701,7 @@ void LCodeGen::DoReturn(LReturn* instr) {
|
| Register reg = ToRegister(instr->parameter_count());
|
| // The argument count parameter is a smi
|
| __ SmiUntag(reg);
|
| - __ dsll(at, reg, kPointerSizeLog2);
|
| - __ Daddu(sp, sp, at);
|
| + __ Dlsa(sp, sp, reg, kPointerSizeLog2);
|
| }
|
|
|
| __ Jump(ra);
|
| @@ -2921,8 +2918,7 @@ void LCodeGen::DoAccessArgumentsAt(LAccessArgumentsAt* instr) {
|
| Register index = ToRegister(instr->index());
|
| __ li(at, Operand(const_length + 1));
|
| __ Dsubu(result, at, index);
|
| - __ dsll(at, result, kPointerSizeLog2);
|
| - __ Daddu(at, arguments, at);
|
| + __ Dlsa(at, arguments, result, kPointerSizeLog2);
|
| __ ld(result, MemOperand(at));
|
| }
|
| } else if (instr->index()->IsConstantOperand()) {
|
| @@ -2931,12 +2927,10 @@ void LCodeGen::DoAccessArgumentsAt(LAccessArgumentsAt* instr) {
|
| int loc = const_index - 1;
|
| if (loc != 0) {
|
| __ Dsubu(result, length, Operand(loc));
|
| - __ dsll(at, result, kPointerSizeLog2);
|
| - __ Daddu(at, arguments, at);
|
| + __ Dlsa(at, arguments, result, kPointerSizeLog2);
|
| __ ld(result, MemOperand(at));
|
| } else {
|
| - __ dsll(at, length, kPointerSizeLog2);
|
| - __ Daddu(at, arguments, at);
|
| + __ Dlsa(at, arguments, length, kPointerSizeLog2);
|
| __ ld(result, MemOperand(at));
|
| }
|
| } else {
|
| @@ -2944,8 +2938,7 @@ void LCodeGen::DoAccessArgumentsAt(LAccessArgumentsAt* instr) {
|
| Register index = ToRegister(instr->index());
|
| __ Dsubu(result, length, index);
|
| __ Daddu(result, result, 1);
|
| - __ dsll(at, result, kPointerSizeLog2);
|
| - __ Daddu(at, arguments, at);
|
| + __ Dlsa(at, arguments, result, kPointerSizeLog2);
|
| __ ld(result, MemOperand(at));
|
| }
|
| }
|
| @@ -3107,8 +3100,7 @@ void LCodeGen::DoLoadKeyedFixedArray(LLoadKeyed* instr) {
|
| __ SmiScale(scratch, key, kPointerSizeLog2);
|
| __ daddu(scratch, elements, scratch);
|
| } else {
|
| - __ dsll(scratch, key, kPointerSizeLog2);
|
| - __ daddu(scratch, elements, scratch);
|
| + __ Dlsa(scratch, elements, key, kPointerSizeLog2);
|
| }
|
| }
|
|
|
| @@ -4282,8 +4274,7 @@ void LCodeGen::DoStoreKeyedFixedArray(LStoreKeyed* instr) {
|
| __ SmiScale(scratch, key, kPointerSizeLog2);
|
| __ daddu(store_base, elements, scratch);
|
| } else {
|
| - __ dsll(scratch, key, kPointerSizeLog2);
|
| - __ daddu(store_base, elements, scratch);
|
| + __ Dlsa(store_base, elements, key, kPointerSizeLog2);
|
| }
|
| }
|
|
|
| @@ -4588,8 +4579,7 @@ void LCodeGen::DoStringCharFromCode(LStringCharFromCode* instr) {
|
| __ Branch(deferred->entry(), hi,
|
| char_code, Operand(String::kMaxOneByteCharCode));
|
| __ LoadRoot(result, Heap::kSingleCharacterStringCacheRootIndex);
|
| - __ dsll(scratch, char_code, kPointerSizeLog2);
|
| - __ Daddu(result, result, scratch);
|
| + __ Dlsa(result, result, char_code, kPointerSizeLog2);
|
| __ ld(result, FieldMemOperand(result, FixedArray::kHeaderSize));
|
| __ LoadRoot(scratch, Heap::kUndefinedValueRootIndex);
|
| __ Branch(deferred->entry(), eq, result, Operand(scratch));
|
|
|