| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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" | 5 #include "vm/globals.h" |
| 6 #if defined(TARGET_ARCH_ARM64) | 6 #if defined(TARGET_ARCH_ARM64) |
| 7 | 7 |
| 8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
| 9 #include "vm/cpu.h" | 9 #include "vm/cpu.h" |
| 10 #include "vm/longjump.h" | 10 #include "vm/longjump.h" |
| (...skipping 1075 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1086 ASSERT(RawObject::kClassIdTagSize == 16); | 1086 ASSERT(RawObject::kClassIdTagSize == 16); |
| 1087 const intptr_t class_id_offset = Object::tags_offset() + | 1087 const intptr_t class_id_offset = Object::tags_offset() + |
| 1088 RawObject::kClassIdTagPos / kBitsPerByte; | 1088 RawObject::kClassIdTagPos / kBitsPerByte; |
| 1089 LoadFromOffset(result, object, class_id_offset - kHeapObjectTag, pp, | 1089 LoadFromOffset(result, object, class_id_offset - kHeapObjectTag, pp, |
| 1090 kUnsignedHalfword); | 1090 kUnsignedHalfword); |
| 1091 } | 1091 } |
| 1092 | 1092 |
| 1093 | 1093 |
| 1094 void Assembler::LoadClassById(Register result, Register class_id, Register pp) { | 1094 void Assembler::LoadClassById(Register result, Register class_id, Register pp) { |
| 1095 ASSERT(result != class_id); | 1095 ASSERT(result != class_id); |
| 1096 LoadFieldFromOffset(result, CTX, Context::isolate_offset(), pp); | 1096 LoadImmediate(result, Isolate::Current()->class_table()->TableAddress(), pp); |
| 1097 const intptr_t table_offset_in_isolate = | 1097 LoadFromOffset(result, result, 0, pp); |
| 1098 Isolate::class_table_offset() + ClassTable::table_offset(); | |
| 1099 LoadFromOffset(result, result, table_offset_in_isolate, pp); | |
| 1100 ldr(result, Address(result, class_id, UXTX, Address::Scaled)); | 1098 ldr(result, Address(result, class_id, UXTX, Address::Scaled)); |
| 1101 } | 1099 } |
| 1102 | 1100 |
| 1103 | 1101 |
| 1104 void Assembler::LoadClass(Register result, Register object, Register pp) { | 1102 void Assembler::LoadClass(Register result, Register object, Register pp) { |
| 1105 ASSERT(object != TMP); | 1103 ASSERT(object != TMP); |
| 1106 LoadClassId(TMP, object, pp); | 1104 LoadClassId(TMP, object, pp); |
| 1107 LoadClassById(result, TMP, pp); | 1105 LoadClassById(result, TMP, pp); |
| 1108 } | 1106 } |
| 1109 | 1107 |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1519 add(base, array, Operand(index, LSL, shift)); | 1517 add(base, array, Operand(index, LSL, shift)); |
| 1520 } | 1518 } |
| 1521 const OperandSize size = Address::OperandSizeFor(cid); | 1519 const OperandSize size = Address::OperandSizeFor(cid); |
| 1522 ASSERT(Address::CanHoldOffset(offset, Address::Offset, size)); | 1520 ASSERT(Address::CanHoldOffset(offset, Address::Offset, size)); |
| 1523 return Address(base, offset, Address::Offset, size); | 1521 return Address(base, offset, Address::Offset, size); |
| 1524 } | 1522 } |
| 1525 | 1523 |
| 1526 } // namespace dart | 1524 } // namespace dart |
| 1527 | 1525 |
| 1528 #endif // defined TARGET_ARCH_ARM64 | 1526 #endif // defined TARGET_ARCH_ARM64 |
| OLD | NEW |