OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_MIPS. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_MIPS. |
6 #if defined(TARGET_ARCH_MIPS) | 6 #if defined(TARGET_ARCH_MIPS) |
7 | 7 |
8 #include "vm/intrinsifier.h" | 8 #include "vm/intrinsifier.h" |
9 | 9 |
10 #include "vm/assembler.h" | 10 #include "vm/assembler.h" |
(...skipping 1257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1268 const Instance& a_value = Instance::Handle(random_A_field.value()); | 1268 const Instance& a_value = Instance::Handle(random_A_field.value()); |
1269 const int64_t a_int_value = Integer::Cast(a_value).AsInt64Value(); | 1269 const int64_t a_int_value = Integer::Cast(a_value).AsInt64Value(); |
1270 // 'a_int_value' is a mask. | 1270 // 'a_int_value' is a mask. |
1271 ASSERT(Utils::IsUint(32, a_int_value)); | 1271 ASSERT(Utils::IsUint(32, a_int_value)); |
1272 int32_t a_int32_value = static_cast<int32_t>(a_int_value); | 1272 int32_t a_int32_value = static_cast<int32_t>(a_int_value); |
1273 | 1273 |
1274 __ lw(T0, Address(SP, 0 * kWordSize)); // Receiver. | 1274 __ lw(T0, Address(SP, 0 * kWordSize)); // Receiver. |
1275 __ lw(T1, FieldAddress(T0, state_field.Offset())); // Field '_state'. | 1275 __ lw(T1, FieldAddress(T0, state_field.Offset())); // Field '_state'. |
1276 | 1276 |
1277 // Addresses of _state[0] and _state[1]. | 1277 // Addresses of _state[0] and _state[1]. |
1278 const Address& addr_0 = FieldAddress(T1, | 1278 const intptr_t scale = Instance::ElementSizeFor(kTypedDataUint32ArrayCid); |
1279 FlowGraphCompiler::DataOffsetFor(kTypedDataUint32ArrayCid)); | 1279 const intptr_t offset = Instance::DataOffsetFor(kTypedDataUint32ArrayCid); |
1280 | 1280 const Address& addr_0 = FieldAddress(T1, 0 * scale + offset); |
1281 const Address& addr_1 = FieldAddress(T1, | 1281 const Address& addr_1 = FieldAddress(T1, 1 * scale + offset); |
1282 FlowGraphCompiler::ElementSizeFor(kTypedDataUint32ArrayCid) + | |
1283 FlowGraphCompiler::DataOffsetFor(kTypedDataUint32ArrayCid)); | |
1284 | 1282 |
1285 __ LoadImmediate(T0, a_int32_value); | 1283 __ LoadImmediate(T0, a_int32_value); |
1286 __ lw(T2, addr_0); | 1284 __ lw(T2, addr_0); |
1287 __ lw(T3, addr_1); | 1285 __ lw(T3, addr_1); |
1288 __ mtlo(T3); | 1286 __ mtlo(T3); |
1289 __ mthi(ZR); // HI:LO <- ZR:T3 Zero extend T3 into HI. | 1287 __ mthi(ZR); // HI:LO <- ZR:T3 Zero extend T3 into HI. |
1290 // 64-bit multiply and accumulate into T6:T3. | 1288 // 64-bit multiply and accumulate into T6:T3. |
1291 __ maddu(T0, T2); // HI:LO <- HI:LO + T0 * T2. | 1289 __ maddu(T0, T2); // HI:LO <- HI:LO + T0 * T2. |
1292 __ mflo(T3); | 1290 __ mflo(T3); |
1293 __ mfhi(T6); | 1291 __ mfhi(T6); |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1701 Isolate* isolate = Isolate::Current(); | 1699 Isolate* isolate = Isolate::Current(); |
1702 __ LoadImmediate(V0, reinterpret_cast<uword>(isolate)); | 1700 __ LoadImmediate(V0, reinterpret_cast<uword>(isolate)); |
1703 // Set return value. | 1701 // Set return value. |
1704 __ Ret(); | 1702 __ Ret(); |
1705 __ delay_slot()->lw(V0, Address(V0, Isolate::current_tag_offset())); | 1703 __ delay_slot()->lw(V0, Address(V0, Isolate::current_tag_offset())); |
1706 } | 1704 } |
1707 | 1705 |
1708 } // namespace dart | 1706 } // namespace dart |
1709 | 1707 |
1710 #endif // defined TARGET_ARCH_MIPS | 1708 #endif // defined TARGET_ARCH_MIPS |
OLD | NEW |