Index: runtime/vm/intrinsifier_mips.cc |
=================================================================== |
--- runtime/vm/intrinsifier_mips.cc (revision 24294) |
+++ runtime/vm/intrinsifier_mips.cc (working copy) |
@@ -204,8 +204,8 @@ |
// Null value is valid for any type. |
__ LoadImmediate(T7, reinterpret_cast<int32_t>(Object::null())); |
__ beq(T2, T7, &checked_ok); |
- __ delay_slot()->lw(T1, Address(SP, 2 * kWordSize)); // Array. |
+ __ lw(T1, Address(SP, 2 * kWordSize)); // Array. |
__ lw(T1, FieldAddress(T1, type_args_field_offset)); |
// T1: Type arguments of array. |
@@ -232,8 +232,8 @@ |
__ andi(CMPRES, T1, Immediate(kSmiTagMask)); |
// Index not Smi. |
__ bne(CMPRES, ZR, &fall_through); |
- __ delay_slot()->lw(T0, Address(SP, 2 * kWordSize)); // Array. |
+ __ lw(T0, Address(SP, 2 * kWordSize)); // Array. |
// Range check. |
__ lw(T3, FieldAddress(T0, Array::length_offset())); // Array length. |
// Runtime throws exception. |
@@ -248,7 +248,7 @@ |
__ StoreIntoObject(T0, |
FieldAddress(T1, Array::data_offset()), |
T2); |
- // Caller is responsible of preserving the value if necessary. |
+ // Caller is responsible for preserving the value if necessary. |
__ Ret(); |
__ Bind(&fall_through); |
return false; |
@@ -1338,16 +1338,15 @@ |
bool Intrinsifier::Double_getIsNegative(Assembler* assembler) { |
Label is_false, is_true, is_zero; |
__ lw(T0, Address(SP, 0 * kWordSize)); |
- __ lwc1(F0, FieldAddress(T0, Double::value_offset())); |
- __ lwc1(F1, FieldAddress(T0, Double::value_offset() + kWordSize)); |
+ __ LoadDFromOffset(D0, T0, Double::value_offset() - kHeapObjectTag); |
__ cund(D0, D0); |
__ bc1t(&is_false); // NaN -> false. |
+ __ LoadImmediate(D1, 0.0); |
__ ceqd(D0, D1); |
__ bc1t(&is_zero); // Check for negative zero. |
- __ LoadImmediate(D1, 0.0); |
__ coled(D1, D0); |
__ bc1t(&is_false); // >= 0 -> false. |
@@ -1448,24 +1447,25 @@ |
__ lw(T1, FieldAddress(T0, state_field.Offset())); // Field '_state'. |
// Addresses of _state[0] and _state[1]. |
- const int64_t disp_0 = |
- FlowGraphCompiler::DataOffsetFor(kTypedDataUint32ArrayCid); |
+ const Address& addr_0 = FieldAddress(T1, |
+ FlowGraphCompiler::DataOffsetFor(kTypedDataUint32ArrayCid)); |
- const int64_t disp_1 = |
+ const Address& addr_1 = FieldAddress(T1, |
FlowGraphCompiler::ElementSizeFor(kTypedDataUint32ArrayCid) + |
- FlowGraphCompiler::DataOffsetFor(kTypedDataUint32ArrayCid); |
+ FlowGraphCompiler::DataOffsetFor(kTypedDataUint32ArrayCid)); |
+ |
__ LoadImmediate(T0, a_int32_value); |
- __ lw(T2, FieldAddress(T1, disp_0)); |
- __ lw(T3, FieldAddress(T1, disp_1)); |
+ __ lw(T2, addr_0); |
+ __ lw(T3, addr_1); |
__ sra(T6, T3, 31); // Sign extend T3 into T6. |
__ mtlo(T3); |
__ mthi(T6); // HI:LO <- T6:T3 |
// 64-bit multiply and accumulate into T6:T3. |
- __ madd(T0, T2); // HI:LO <- HI:LO + T0 * T3. |
+ __ madd(T0, T2); // HI:LO <- HI:LO + T0 * T2. |
__ mflo(T3); |
__ mfhi(T6); |
- __ sw(T3, FieldAddress(T1, disp_0)); |
- __ sw(T6, FieldAddress(T1, disp_1)); |
+ __ sw(T3, addr_0); |
+ __ sw(T6, addr_1); |
__ Ret(); |
return true; |
} |