Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(127)

Unified Diff: runtime/vm/intermediate_language_mips.cc

Issue 59613005: Merge (x & y) == 0 pattern to emit a single test instruction. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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.
}

Powered by Google App Engine
This is Rietveld 408576698