| Index: src/mips/lithium-codegen-mips.cc
|
| diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc
|
| index 6659b6c73dacf1b1861dd60cdab12a55e73301b0..b37c7e04191385a36f45a56157a5e16f3ae09667 100644
|
| --- a/src/mips/lithium-codegen-mips.cc
|
| +++ b/src/mips/lithium-codegen-mips.cc
|
| @@ -1789,43 +1789,33 @@ void LCodeGen::DoDateField(LDateField* instr) {
|
|
|
| void LCodeGen::DoSeqStringSetChar(LSeqStringSetChar* instr) {
|
| Register string = ToRegister(instr->string());
|
| - LOperand* index_op = instr->index();
|
| + Register index = ToRegister(instr->index());
|
| Register value = ToRegister(instr->value());
|
| Register scratch = scratch0();
|
| String::Encoding encoding = instr->encoding();
|
|
|
| if (FLAG_debug_code) {
|
| - __ lw(scratch, FieldMemOperand(string, HeapObject::kMapOffset));
|
| - __ lbu(scratch, FieldMemOperand(scratch, Map::kInstanceTypeOffset));
|
| + __ lw(at, FieldMemOperand(string, HeapObject::kMapOffset));
|
| + __ lbu(at, FieldMemOperand(at, Map::kInstanceTypeOffset));
|
|
|
| - __ And(scratch, scratch,
|
| - Operand(kStringRepresentationMask | kStringEncodingMask));
|
| + __ And(at, at, Operand(kStringRepresentationMask | kStringEncodingMask));
|
| static const uint32_t one_byte_seq_type = kSeqStringTag | kOneByteStringTag;
|
| static const uint32_t two_byte_seq_type = kSeqStringTag | kTwoByteStringTag;
|
| - __ Subu(at, scratch, Operand(encoding == String::ONE_BYTE_ENCODING
|
| + __ Subu(at, at, Operand(encoding == String::ONE_BYTE_ENCODING
|
| ? one_byte_seq_type : two_byte_seq_type));
|
| __ Check(eq, kUnexpectedStringType, at, Operand(zero_reg));
|
| }
|
|
|
| - if (index_op->IsConstantOperand()) {
|
| - int constant_index = ToInteger32(LConstantOperand::cast(index_op));
|
| - if (encoding == String::ONE_BYTE_ENCODING) {
|
| - __ sb(value,
|
| - FieldMemOperand(string, SeqString::kHeaderSize + constant_index));
|
| - } else {
|
| - __ sh(value,
|
| - FieldMemOperand(string, SeqString::kHeaderSize + constant_index * 2));
|
| - }
|
| + __ Addu(scratch,
|
| + string,
|
| + Operand(SeqString::kHeaderSize - kHeapObjectTag));
|
| + if (encoding == String::ONE_BYTE_ENCODING) {
|
| + __ Addu(at, scratch, index);
|
| + __ sb(value, MemOperand(at));
|
| } else {
|
| - Register index = ToRegister(index_op);
|
| - if (encoding == String::ONE_BYTE_ENCODING) {
|
| - __ Addu(scratch, string, Operand(index));
|
| - __ sb(value, FieldMemOperand(scratch, SeqString::kHeaderSize));
|
| - } else {
|
| - __ sll(scratch, index, 1);
|
| - __ Addu(scratch, string, scratch);
|
| - __ sh(value, FieldMemOperand(scratch, SeqString::kHeaderSize));
|
| - }
|
| + __ sll(at, index, 1);
|
| + __ Addu(at, scratch, at);
|
| + __ sh(value, MemOperand(at));
|
| }
|
| }
|
|
|
|
|