| 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 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 __ LoadImmediate(T7, reinterpret_cast<int32_t>(Object::null())); | 202 __ LoadImmediate(T7, reinterpret_cast<int32_t>(Object::null())); |
| 203 __ beq(T2, T7, &checked_ok); | 203 __ beq(T2, T7, &checked_ok); |
| 204 | 204 |
| 205 __ lw(T1, Address(SP, 2 * kWordSize)); // Array. | 205 __ lw(T1, Address(SP, 2 * kWordSize)); // Array. |
| 206 __ lw(T1, FieldAddress(T1, type_args_field_offset)); | 206 __ lw(T1, FieldAddress(T1, type_args_field_offset)); |
| 207 | 207 |
| 208 // T1: Type arguments of array. | 208 // T1: Type arguments of array. |
| 209 __ beq(T1, T7, &checked_ok); | 209 __ beq(T1, T7, &checked_ok); |
| 210 | 210 |
| 211 // Check if it's dynamic. | 211 // Check if it's dynamic. |
| 212 // For now handle only TypeArguments and bail out if InstantiatedTypeArgs. | |
| 213 __ LoadClassId(CMPRES1, T1); | |
| 214 __ BranchNotEqual(CMPRES1, kTypeArgumentsCid, &fall_through); | |
| 215 | |
| 216 // Get type at index 0. | 212 // Get type at index 0. |
| 217 __ lw(T0, FieldAddress(T1, TypeArguments::type_at_offset(0))); | 213 __ lw(T0, FieldAddress(T1, TypeArguments::type_at_offset(0))); |
| 218 __ BranchEqual(T0, Type::ZoneHandle(Type::DynamicType()), &checked_ok); | 214 __ BranchEqual(T0, Type::ZoneHandle(Type::DynamicType()), &checked_ok); |
| 219 | 215 |
| 220 // Check for int and num. | 216 // Check for int and num. |
| 221 __ andi(CMPRES1, T2, Immediate(kSmiTagMask)); | 217 __ andi(CMPRES1, T2, Immediate(kSmiTagMask)); |
| 222 __ bne(CMPRES1, ZR, &fall_through); // Non-smi value. | 218 __ bne(CMPRES1, ZR, &fall_through); // Non-smi value. |
| 223 | 219 |
| 224 __ BranchEqual(T0, Type::ZoneHandle(Type::IntType()), &checked_ok); | 220 __ BranchEqual(T0, Type::ZoneHandle(Type::IntType()), &checked_ok); |
| 225 __ BranchNotEqual(T0, Type::ZoneHandle(Type::Number()), &fall_through); | 221 __ BranchNotEqual(T0, Type::ZoneHandle(Type::Number()), &fall_through); |
| (...skipping 1552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1778 } | 1774 } |
| 1779 | 1775 |
| 1780 | 1776 |
| 1781 void Intrinsifier::TwoByteString_equality(Assembler* assembler) { | 1777 void Intrinsifier::TwoByteString_equality(Assembler* assembler) { |
| 1782 StringEquality(assembler, kTwoByteStringCid); | 1778 StringEquality(assembler, kTwoByteStringCid); |
| 1783 } | 1779 } |
| 1784 | 1780 |
| 1785 } // namespace dart | 1781 } // namespace dart |
| 1786 | 1782 |
| 1787 #endif // defined TARGET_ARCH_MIPS | 1783 #endif // defined TARGET_ARCH_MIPS |
| OLD | NEW |