Chromium Code Reviews| Index: runtime/vm/intermediate_language_mips.cc |
| =================================================================== |
| --- runtime/vm/intermediate_language_mips.cc (revision 29901) |
| +++ runtime/vm/intermediate_language_mips.cc (working copy) |
| @@ -344,7 +344,7 @@ |
| } |
| -// Branches on condition c assuming comparison results in CMPRES and CMPRES2. |
| +// Branches on condition c assuming comparison results in CMPRES1 and CMPRES2. |
| static void EmitBranchAfterCompare( |
| FlowGraphCompiler* compiler, Condition c, Label* is_true) { |
| switch (c) { |
| @@ -506,6 +506,48 @@ |
| } |
| +LocationSummary* TestSmiInstr::MakeLocationSummary() const { |
| + const intptr_t kNumInputs = 2; |
| + const intptr_t kNumTemps = 0; |
| + LocationSummary* locs = |
| + new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| + locs->set_in(0, Location::RequiresRegister()); |
| + // Only one input can be a constant operand. The case of two constant |
| + // operands should be handled by constant propagation. |
| + locs->set_in(1, Location::RegisterOrConstant(right())); |
| + return locs; |
| +} |
| + |
| + |
| +void TestSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| + // Never emitted outside of the BranchInstr. |
| + UNREACHABLE(); |
| +} |
| + |
| + |
| +void TestSmiInstr::EmitBranchCode(FlowGraphCompiler* compiler, |
| + BranchInstr* branch) { |
| + Condition branch_condition = (kind() == Token::kNE) ? NE : EQ; |
| + Register left = locs()->in(0).reg(); |
| + Location right = locs()->in(1); |
| + if (right.IsConstant()) { |
| + ASSERT(right.constant().IsSmi()); |
| + const int32_t imm = |
| + reinterpret_cast<int32_t>(right.constant().raw()); |
| + if (Utils::IsUint(kImmBits, imm)) { |
|
zra
2013/11/05 18:38:03
I'm adding AndImmediate in https://codereview.chro
Florian Schneider
2013/11/06 12:13:42
Thanks. Done.
|
| + __ andi(CMPRES1, left, Immediate(imm)); |
| + } else { |
| + __ LoadImmediate(TMP, imm); |
| + __ and_(CMPRES1, left, TMP); |
| + } |
| + } else { |
| + __ and_(CMPRES1, left, right.reg()); |
| + } |
| + __ mov(CMPRES2, ZR); |
| + branch->EmitBranchOnCondition(compiler, branch_condition); |
| +} |
| + |
| + |
| LocationSummary* RelationalOpInstr::MakeLocationSummary() const { |
| const intptr_t kNumInputs = 2; |
| const intptr_t kNumTemps = 0; |
| @@ -648,9 +690,9 @@ |
| __ LoadImmediate(result, |
| reinterpret_cast<uword>(Symbols::PredefinedAddress())); |
| __ AddImmediate(result, Symbols::kNullCharCodeSymbolOffset * kWordSize); |
| - __ sll(TMP1, char_code, 1); // Char code is a smi. |
| - __ addu(TMP1, TMP1, result); |
| - __ lw(result, Address(TMP1)); |
| + __ sll(TMP, char_code, 1); // Char code is a smi. |
| + __ addu(TMP, TMP, result); |
| + __ lw(result, Address(TMP)); |
| } |
| @@ -707,8 +749,8 @@ |
| Register object = locs()->in(0).reg(); |
| Register result = locs()->out().reg(); |
| Label load, done; |
| - __ andi(CMPRES, object, Immediate(kSmiTagMask)); |
| - __ bne(CMPRES, ZR, &load); |
| + __ andi(CMPRES1, object, Immediate(kSmiTagMask)); |
| + __ bne(CMPRES1, ZR, &load); |
| __ LoadImmediate(result, Smi::RawValue(kSmiCid)); |
| __ b(&done); |
| __ Bind(&load); |
| @@ -926,9 +968,9 @@ |
| Label* deopt = compiler->AddDeoptStub(deopt_id(), kDeoptUint32Load); |
| __ lw(result, element_address); |
| // Verify that the unsigned value in 'result' can fit inside a Smi. |
| - __ LoadImmediate(TMP1, 0xC0000000); |
| - __ and_(CMPRES, result, TMP1); |
| - __ bne(CMPRES, ZR, deopt); |
| + __ LoadImmediate(TMP, 0xC0000000); |
| + __ and_(CMPRES1, result, TMP); |
| + __ bne(CMPRES1, ZR, deopt); |
| __ SmiTag(result); |
| } |
| break; |
| @@ -1111,8 +1153,8 @@ |
| __ SmiUntag(value); |
| __ BranchUnsignedLess(value, 0xFF + 1, &store_value); |
| __ LoadImmediate(TMP, 0xFF); |
| - __ slti(CMPRES, value, Immediate(1)); |
| - __ movn(TMP, ZR, CMPRES); |
| + __ slti(CMPRES1, value, Immediate(1)); |
| + __ movn(TMP, ZR, CMPRES1); |
| __ mov(value, TMP); |
| __ Bind(&store_value); |
| __ sb(value, element_address); |
| @@ -1300,31 +1342,29 @@ |
| __ bne(CMPRES1, ZR, fail); |
| } |
| __ Bind(&skip_length_check); |
| - __ lw(TMP1, field_nullability_operand); |
| - __ subu(CMPRES, value_cid_reg, TMP1); |
| + __ lw(TMP, field_nullability_operand); |
| + __ subu(CMPRES1, value_cid_reg, TMP); |
| } else if (value_cid == kNullCid) { |
| - // TODO(regis): TMP1 may conflict. Revisit. |
| - __ lw(TMP1, field_nullability_operand); |
| - __ LoadImmediate(CMPRES, value_cid); |
| - __ subu(CMPRES, TMP1, CMPRES); |
| + __ lw(TMP, field_nullability_operand); |
| + __ LoadImmediate(CMPRES1, value_cid); |
| + __ subu(CMPRES1, TMP, CMPRES1); |
| } else { |
| Label skip_length_check; |
| - // TODO(regis): TMP1 may conflict. Revisit. |
| - __ lw(TMP1, field_cid_operand); |
| - __ LoadImmediate(CMPRES, value_cid); |
| - __ subu(CMPRES, TMP1, CMPRES); |
| - __ bne(CMPRES, ZR, &skip_length_check); |
| + __ lw(TMP, field_cid_operand); |
| + __ LoadImmediate(CMPRES1, value_cid); |
| + __ subu(CMPRES1, TMP, CMPRES1); |
| + __ bne(CMPRES1, ZR, &skip_length_check); |
| // Insert length check. |
| if (field_has_length) { |
| ASSERT(value_cid_reg != kNoRegister); |
| if ((value_cid == kArrayCid) || (value_cid == kImmutableArrayCid)) { |
| __ lw(TMP, FieldAddress(value_reg, Array::length_offset())); |
| - __ LoadImmediate(CMPRES, Smi::RawValue(field_length)); |
| - __ subu(CMPRES, TMP, CMPRES); |
| + __ LoadImmediate(CMPRES1, Smi::RawValue(field_length)); |
| + __ subu(CMPRES1, TMP, CMPRES1); |
| } else if (RawObject::IsTypedDataClassId(value_cid)) { |
| __ lw(TMP, FieldAddress(value_reg, TypedData::length_offset())); |
| - __ LoadImmediate(CMPRES, Smi::RawValue(field_length)); |
| - __ subu(CMPRES, TMP, CMPRES); |
| + __ LoadImmediate(CMPRES1, Smi::RawValue(field_length)); |
| + __ subu(CMPRES1, TMP, CMPRES1); |
| } else if (field_cid != kIllegalCid) { |
| ASSERT(field_cid != value_cid); |
| ASSERT(field_length >= 0); |
| @@ -1336,11 +1376,11 @@ |
| ASSERT(field_length == Field::kUnknownFixedLength); |
| // Following jump cannot not occur, fall through. |
| } |
| - __ bne(CMPRES, ZR, fail); |
| + __ bne(CMPRES1, ZR, fail); |
| } |
| __ Bind(&skip_length_check); |
| } |
| - __ beq(CMPRES, ZR, &ok); |
| + __ beq(CMPRES1, ZR, &ok); |
| __ lw(CMPRES1, field_cid_operand); |
| __ BranchNotEqual(CMPRES1, kIllegalCid, fail); |
| @@ -1374,16 +1414,15 @@ |
| // Updated field length from regular array. |
| __ b(&length_set); |
| __ Bind(&no_fixed_length); |
| - // TODO(regis): TMP1 may conflict. Revisit. |
| - __ LoadImmediate(TMP1, Smi::RawValue(Field::kNoFixedLength)); |
| - __ sw(TMP1, field_length_operand); |
| + __ LoadImmediate(TMP, Smi::RawValue(Field::kNoFixedLength)); |
| + __ sw(TMP, field_length_operand); |
| __ Bind(&length_set); |
| } |
| } else { |
| ASSERT(field_reg != kNoRegister); |
| - __ LoadImmediate(TMP1, value_cid); |
| - __ sw(TMP1, field_cid_operand); |
| - __ sw(TMP1, field_nullability_operand); |
| + __ LoadImmediate(TMP, value_cid); |
| + __ sw(TMP, field_cid_operand); |
| + __ sw(TMP, field_nullability_operand); |
| if (field_has_length) { |
| ASSERT(value_cid_reg != kNoRegister); |
| if ((value_cid == kArrayCid) || (value_cid == kImmutableArrayCid)) { |
| @@ -1412,18 +1451,18 @@ |
| } |
| if (value_cid == kDynamicCid) { |
| // Field's guarded class id is fixed by value's class id is not known. |
| - __ andi(CMPRES, value_reg, Immediate(kSmiTagMask)); |
| + __ andi(CMPRES1, value_reg, Immediate(kSmiTagMask)); |
| if (field_cid != kSmiCid) { |
| - __ beq(CMPRES, ZR, fail); |
| + __ beq(CMPRES1, ZR, fail); |
| __ LoadClassId(value_cid_reg, value_reg); |
| - __ LoadImmediate(TMP1, field_cid); |
| - __ subu(CMPRES, value_cid_reg, TMP1); |
| + __ LoadImmediate(TMP, field_cid); |
| + __ subu(CMPRES1, value_cid_reg, TMP); |
| } |
| if (field_has_length) { |
| // Jump when Value CID != Field guard CID |
| - __ bne(CMPRES, ZR, fail); |
| + __ bne(CMPRES1, ZR, fail); |
| // Classes are same, perform guarded list length check. |
| ASSERT(field_reg != kNoRegister); |
| ASSERT(value_cid_reg != kNoRegister); |
| @@ -1438,20 +1477,20 @@ |
| __ lw(value_cid_reg, |
| FieldAddress(value_reg, TypedData::length_offset())); |
| } |
| - __ lw(TMP1, field_length_operand); |
| - __ subu(CMPRES, value_cid_reg, TMP1); |
| + __ lw(TMP, field_length_operand); |
| + __ subu(CMPRES1, value_cid_reg, TMP); |
| } |
| if (field().is_nullable() && (field_cid != kNullCid)) { |
| - __ beq(CMPRES, ZR, &ok); |
| + __ beq(CMPRES1, ZR, &ok); |
| __ LoadImmediate(TMP, reinterpret_cast<int32_t>(Object::null())); |
| - __ subu(CMPRES, value_reg, TMP); |
| + __ subu(CMPRES1, value_reg, TMP); |
| } |
| if (ok_is_fall_through) { |
| - __ bne(CMPRES, ZR, fail); |
| + __ bne(CMPRES1, ZR, fail); |
| } else { |
| - __ beq(CMPRES, ZR, &ok); |
| + __ beq(CMPRES1, ZR, &ok); |
| } |
| } else { |
| // Both value's and field's class id is known. |
| @@ -1470,10 +1509,10 @@ |
| __ lw(value_cid_reg, |
| FieldAddress(value_reg, TypedData::length_offset())); |
| } |
| - __ LoadImmediate(TMP1, Smi::RawValue(field_length)); |
| - __ subu(CMPRES, value_cid_reg, TMP1); |
| + __ LoadImmediate(TMP, Smi::RawValue(field_length)); |
| + __ subu(CMPRES1, value_cid_reg, TMP); |
| if (ok_is_fall_through) { |
| - __ bne(CMPRES, ZR, fail); |
| + __ bne(CMPRES1, ZR, fail); |
| } |
| } else { |
| // Nothing to emit. |
| @@ -1692,10 +1731,10 @@ |
| // (or null). |
| // A runtime call to instantiate the type is required. |
| __ addiu(SP, SP, Immediate(-3 * kWordSize)); |
| - __ LoadObject(TMP1, Object::ZoneHandle()); |
| - __ sw(TMP1, Address(SP, 2 * kWordSize)); // Make room for the result. |
| - __ LoadObject(TMP1, type()); |
| - __ sw(TMP1, Address(SP, 1 * kWordSize)); |
| + __ LoadObject(TMP, Object::ZoneHandle()); |
| + __ sw(TMP, Address(SP, 2 * kWordSize)); // Make room for the result. |
| + __ LoadObject(TMP, type()); |
| + __ sw(TMP, Address(SP, 1 * kWordSize)); |
| // Push instantiator type arguments. |
| __ sw(instantiator_reg, Address(SP, 0 * kWordSize)); |
| @@ -1746,10 +1785,10 @@ |
| // Instantiate non-null type arguments. |
| // A runtime call to instantiate the type arguments is required. |
| __ addiu(SP, SP, Immediate(-3 * kWordSize)); |
| - __ LoadObject(TMP1, Object::ZoneHandle()); |
| - __ sw(TMP1, Address(SP, 2 * kWordSize)); // Make room for the result. |
| - __ LoadObject(TMP1, type_arguments()); |
| - __ sw(TMP1, Address(SP, 1 * kWordSize)); |
| + __ LoadObject(TMP, Object::ZoneHandle()); |
| + __ sw(TMP, Address(SP, 2 * kWordSize)); // Make room for the result. |
| + __ LoadObject(TMP, type_arguments()); |
| + __ sw(TMP, Address(SP, 1 * kWordSize)); |
| // Push instantiator type arguments. |
| __ sw(instantiator_reg, Address(SP, 0 * kWordSize)); |
| @@ -1892,8 +1931,8 @@ |
| __ TraceSimMsg("CloneContextInstr"); |
| __ addiu(SP, SP, Immediate(-2 * kWordSize)); |
| - __ LoadObject(TMP1, Object::ZoneHandle()); // Make room for the result. |
| - __ sw(TMP1, Address(SP, 1 * kWordSize)); |
| + __ LoadObject(TMP, Object::ZoneHandle()); // Make room for the result. |
| + __ sw(TMP, Address(SP, 1 * kWordSize)); |
| __ sw(context_value, Address(SP, 0 * kWordSize)); |
| compiler->GenerateRuntimeCall(token_pos(), |
| @@ -1920,11 +1959,11 @@ |
| catch_handler_types_, |
| needs_stacktrace()); |
| // Restore pool pointer. |
| - __ GetNextPC(CMPRES, TMP); |
| + __ GetNextPC(CMPRES1, TMP); |
| const intptr_t object_pool_pc_dist = |
| Instructions::HeaderSize() - Instructions::object_pool_offset() + |
| compiler->assembler()->CodeSize() - 1 * Instr::kInstrSize; |
| - __ LoadFromOffset(PP, CMPRES, -object_pool_pc_dist); |
| + __ LoadFromOffset(PP, CMPRES1, -object_pool_pc_dist); |
| if (HasParallelMove()) { |
| compiler->parallel_move_resolver()->EmitNativeCode(parallel_move()); |
| @@ -2000,9 +2039,9 @@ |
| CheckStackOverflowSlowPath* slow_path = new CheckStackOverflowSlowPath(this); |
| compiler->AddSlowPathCode(slow_path); |
| - __ LoadImmediate(TMP1, Isolate::Current()->stack_limit_address()); |
| + __ LoadImmediate(TMP, Isolate::Current()->stack_limit_address()); |
| - __ lw(CMPRES1, Address(TMP1)); |
| + __ lw(CMPRES1, Address(TMP)); |
| __ BranchUnsignedLessEqual(SP, CMPRES1, slow_path->entry_label()); |
| if (compiler->CanOSRFunction() && in_loop()) { |
| Register temp = locs()->temp(0).reg(); |
| @@ -2052,8 +2091,8 @@ |
| } else { |
| if (!is_truncating) { |
| // Check for overflow (preserve left). |
| - __ sll(TMP1, left, value); |
| - __ sra(CMPRES1, TMP1, value); |
| + __ sll(TMP, left, value); |
| + __ sra(CMPRES1, TMP, value); |
| __ bne(CMPRES1, left, deopt); // Overflow. |
| } |
| // Shift for result now we know there is no overflow. |
| @@ -2103,13 +2142,13 @@ |
| } |
| Label done, is_not_zero; |
| - __ sltiu(CMPRES, |
| + __ sltiu(CMPRES1, |
| right, Immediate(reinterpret_cast<int32_t>(Smi::New(Smi::kBits)))); |
| - __ movz(result, ZR, CMPRES); // result = right >= kBits ? 0 : result. |
| - __ sra(TMP1, right, kSmiTagSize); |
| - __ sllv(TMP1, left, TMP1); |
| + __ movz(result, ZR, CMPRES1); // result = right >= kBits ? 0 : result. |
| + __ sra(TMP, right, kSmiTagSize); |
| + __ sllv(TMP, left, TMP); |
| // result = right < kBits ? left << right : result. |
| - __ movn(result, TMP1, CMPRES); |
| + __ movn(result, TMP, CMPRES1); |
| } else { |
| __ sra(TMP, right, kSmiTagSize); |
| __ sllv(result, left, TMP); |
| @@ -2192,8 +2231,8 @@ |
| if (deopt == NULL) { |
| __ AddImmediate(result, left, -imm); |
| } else { |
| - __ SubImmediateDetectOverflow(result, left, imm, CMPRES); |
| - __ bltz(CMPRES, deopt); |
| + __ SubImmediateDetectOverflow(result, left, imm, CMPRES1); |
| + __ bltz(CMPRES1, deopt); |
| } |
| break; |
| } |
| @@ -2202,8 +2241,8 @@ |
| __ AddImmediate(result, left, imm); |
| } else { |
| Register temp = locs()->temp(0).reg(); |
| - __ AddImmediateDetectOverflow(result, left, imm, CMPRES, temp); |
| - __ bltz(CMPRES, deopt); |
| + __ AddImmediateDetectOverflow(result, left, imm, CMPRES1, temp); |
| + __ bltz(CMPRES1, deopt); |
| } |
| break; |
| } |
| @@ -2214,8 +2253,8 @@ |
| if (value == 2) { |
| __ sll(result, left, 1); |
| } else { |
| - __ LoadImmediate(TMP1, value); |
| - __ mult(left, TMP1); |
| + __ LoadImmediate(TMP, value); |
| + __ mult(left, TMP); |
| __ mflo(result); |
| } |
| } else { |
| @@ -2223,12 +2262,12 @@ |
| __ sra(CMPRES2, left, 31); // CMPRES2 = sign of left. |
| __ sll(result, left, 1); |
| } else { |
| - __ LoadImmediate(TMP1, value); |
| - __ mult(left, TMP1); |
| + __ LoadImmediate(TMP, value); |
| + __ mult(left, TMP); |
| __ mflo(result); |
| __ mfhi(CMPRES2); |
| } |
| - __ sra(CMPRES, result, 31); |
| + __ sra(CMPRES1, result, 31); |
| __ bne(CMPRES1, CMPRES2, deopt); |
| } |
| break; |
| @@ -2269,8 +2308,8 @@ |
| if (Utils::IsUint(kImmBits, imm)) { |
| __ andi(result, left, Immediate(imm)); |
| } else { |
| - __ LoadImmediate(TMP1, imm); |
| - __ and_(result, left, TMP1); |
| + __ LoadImmediate(TMP, imm); |
| + __ and_(result, left, TMP); |
| } |
| break; |
| } |
| @@ -2279,8 +2318,8 @@ |
| if (Utils::IsUint(kImmBits, imm)) { |
| __ ori(result, left, Immediate(imm)); |
| } else { |
| - __ LoadImmediate(TMP1, imm); |
| - __ or_(result, left, TMP1); |
| + __ LoadImmediate(TMP, imm); |
| + __ or_(result, left, TMP); |
| } |
| break; |
| } |
| @@ -2289,8 +2328,8 @@ |
| if (Utils::IsUint(kImmBits, imm)) { |
| __ xori(result, left, Immediate(imm)); |
| } else { |
| - __ LoadImmediate(TMP1, imm); |
| - __ xor_(result, left, TMP1); |
| + __ LoadImmediate(TMP, imm); |
| + __ xor_(result, left, TMP); |
| } |
| break; |
| } |
| @@ -2335,8 +2374,8 @@ |
| __ addu(result, left, right); |
| } else { |
| Register temp = locs()->temp(0).reg(); |
| - __ AdduDetectOverflow(result, left, right, CMPRES, temp); |
| - __ bltz(CMPRES, deopt); |
| + __ AdduDetectOverflow(result, left, right, CMPRES1, temp); |
| + __ bltz(CMPRES1, deopt); |
| } |
| break; |
| } |
| @@ -2345,8 +2384,8 @@ |
| if (deopt == NULL) { |
| __ subu(result, left, right); |
| } else { |
| - __ SubuDetectOverflow(result, left, right, CMPRES); |
| - __ bltz(CMPRES, deopt); |
| + __ SubuDetectOverflow(result, left, right, CMPRES1); |
| + __ bltz(CMPRES1, deopt); |
| } |
| break; |
| } |
| @@ -2459,14 +2498,14 @@ |
| Register left = locs()->in(0).reg(); |
| Register right = locs()->in(1).reg(); |
| if (left_cid == kSmiCid) { |
| - __ andi(CMPRES, right, Immediate(kSmiTagMask)); |
| + __ andi(CMPRES1, right, Immediate(kSmiTagMask)); |
| } else if (right_cid == kSmiCid) { |
| - __ andi(CMPRES, left, Immediate(kSmiTagMask)); |
| + __ andi(CMPRES1, left, Immediate(kSmiTagMask)); |
| } else { |
| __ or_(TMP, left, right); |
| - __ andi(CMPRES, TMP, Immediate(kSmiTagMask)); |
| + __ andi(CMPRES1, TMP, Immediate(kSmiTagMask)); |
| } |
| - __ beq(CMPRES, ZR, deopt); |
| + __ beq(CMPRES1, ZR, deopt); |
| } |
| @@ -2562,8 +2601,8 @@ |
| Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptBinaryDoubleOp); |
| Label is_smi, done; |
| - __ andi(CMPRES, value, Immediate(kSmiTagMask)); |
| - __ beq(CMPRES, ZR, &is_smi); |
| + __ andi(CMPRES1, value, Immediate(kSmiTagMask)); |
| + __ beq(CMPRES1, ZR, &is_smi); |
| __ LoadClassId(CMPRES1, value); |
| __ BranchNotEqual(CMPRES1, kDoubleCid, deopt); |
| __ LoadDFromOffset(result, value, Double::value_offset() - kHeapObjectTag); |
| @@ -3021,8 +3060,8 @@ |
| case Token::kNEGATE: { |
| Label* deopt = compiler->AddDeoptStub(deopt_id(), |
| kDeoptUnaryOp); |
| - __ SubuDetectOverflow(result, ZR, value, CMPRES); |
| - __ bltz(CMPRES, deopt); |
| + __ SubuDetectOverflow(result, ZR, value, CMPRES1); |
| + __ bltz(CMPRES1, deopt); |
| break; |
| } |
| case Token::kBIT_NOT: |
| @@ -3104,8 +3143,8 @@ |
| Label do_call, done; |
| // Check for overflow and that it fits into Smi. |
| __ LoadImmediate(TMP, 0xC0000000); |
| - __ subu(CMPRES, result, TMP); |
| - __ bltz(CMPRES, &do_call); |
| + __ subu(CMPRES1, result, TMP); |
| + __ bltz(CMPRES1, &do_call); |
| __ SmiTag(result); |
| __ b(&done); |
| __ Bind(&do_call); |
| @@ -3146,8 +3185,8 @@ |
| // Check for overflow and that it fits into Smi. |
| __ LoadImmediate(TMP, 0xC0000000); |
| - __ subu(CMPRES, result, TMP); |
| - __ bltz(CMPRES, deopt); |
| + __ subu(CMPRES1, result, TMP); |
| + __ bltz(CMPRES1, deopt); |
| __ SmiTag(result); |
| } |
| @@ -3311,23 +3350,23 @@ |
| Label is_ok; |
| intptr_t cix = 0; |
| if (unary_checks().GetReceiverClassIdAt(cix) == kSmiCid) { |
| - __ andi(CMPRES, value, Immediate(kSmiTagMask)); |
| - __ beq(CMPRES, ZR, &is_ok); |
| + __ andi(CMPRES1, value, Immediate(kSmiTagMask)); |
| + __ beq(CMPRES1, ZR, &is_ok); |
| cix++; // Skip first check. |
| } else { |
| - __ andi(CMPRES, value, Immediate(kSmiTagMask)); |
| - __ beq(CMPRES, ZR, deopt); |
| + __ andi(CMPRES1, value, Immediate(kSmiTagMask)); |
| + __ beq(CMPRES1, ZR, deopt); |
| } |
| __ LoadClassId(temp, value); |
| const intptr_t num_checks = unary_checks().NumberOfChecks(); |
| for (intptr_t i = cix; i < num_checks; i++) { |
| ASSERT(unary_checks().GetReceiverClassIdAt(i) != kSmiCid); |
| - __ LoadImmediate(TMP1, unary_checks().GetReceiverClassIdAt(i)); |
| - __ subu(CMPRES, temp, TMP1); |
| + __ LoadImmediate(TMP, unary_checks().GetReceiverClassIdAt(i)); |
| + __ subu(CMPRES1, temp, TMP); |
| if (i == (num_checks - 1)) { |
| - __ bne(CMPRES, ZR, deopt); |
| + __ bne(CMPRES1, ZR, deopt); |
| } else { |
| - __ beq(CMPRES, ZR, &is_ok); |
| + __ beq(CMPRES1, ZR, &is_ok); |
| } |
| } |
| __ Bind(&is_ok); |
| @@ -3574,7 +3613,7 @@ |
| } |
| -// The comparison result is in CMPRES. |
| +// The comparison result is in CMPRES1. |
| void ControlInstruction::EmitBranchOnCondition(FlowGraphCompiler* compiler, |
| Condition true_condition) { |
| __ TraceSimMsg("ControlInstruction::EmitBranchOnCondition"); |
| @@ -3715,9 +3754,9 @@ |
| Register result = locs()->out().reg(); |
| __ LoadObject(result, Bool::True()); |
| - __ LoadObject(TMP1, Bool::False()); |
| - __ subu(CMPRES, value, result); |
| - __ movz(result, TMP1, CMPRES); // If value is True, move False into result. |
| + __ LoadObject(TMP, Bool::False()); |
| + __ subu(CMPRES1, value, result); |
| + __ movz(result, TMP, CMPRES1); // If value is True, move False into result. |
| } |