| 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 1073 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1084 void Assembler::LoadClassId(Register result, Register object, Register pp) { | 1084 void Assembler::LoadClassId(Register result, Register object, Register pp) { |
| 1085 ASSERT(RawObject::kClassIdTagPos == 16); | 1085 ASSERT(RawObject::kClassIdTagPos == 16); |
| 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, |
| 1095 Register class_id, |
| 1096 Isolate* isolate, |
| 1097 Register pp) { |
| 1095 ASSERT(result != class_id); | 1098 ASSERT(result != class_id); |
| 1096 LoadFieldFromOffset(result, CTX, Context::isolate_offset(), pp); | 1099 LoadImmediate(result, isolate->ClassTableAddress(), pp); |
| 1097 const intptr_t table_offset_in_isolate = | 1100 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)); | 1101 ldr(result, Address(result, class_id, UXTX, Address::Scaled)); |
| 1101 } | 1102 } |
| 1102 | 1103 |
| 1103 | 1104 |
| 1104 void Assembler::LoadClass(Register result, Register object, Register pp) { | 1105 void Assembler::LoadClass(Register result, |
| 1106 Register object, |
| 1107 Isolate* isolate, |
| 1108 Register pp) { |
| 1105 ASSERT(object != TMP); | 1109 ASSERT(object != TMP); |
| 1106 LoadClassId(TMP, object, pp); | 1110 LoadClassId(TMP, object, pp); |
| 1107 LoadClassById(result, TMP, pp); | 1111 LoadClassById(result, TMP, isolate, pp); |
| 1108 } | 1112 } |
| 1109 | 1113 |
| 1110 | 1114 |
| 1111 void Assembler::CompareClassId( | 1115 void Assembler::CompareClassId( |
| 1112 Register object, intptr_t class_id, Register pp) { | 1116 Register object, intptr_t class_id, Register pp) { |
| 1113 LoadClassId(TMP, object, pp); | 1117 LoadClassId(TMP, object, pp); |
| 1114 CompareImmediate(TMP, class_id, pp); | 1118 CompareImmediate(TMP, class_id, pp); |
| 1115 } | 1119 } |
| 1116 | 1120 |
| 1117 | 1121 |
| (...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1519 add(base, array, Operand(index, LSL, shift)); | 1523 add(base, array, Operand(index, LSL, shift)); |
| 1520 } | 1524 } |
| 1521 const OperandSize size = Address::OperandSizeFor(cid); | 1525 const OperandSize size = Address::OperandSizeFor(cid); |
| 1522 ASSERT(Address::CanHoldOffset(offset, Address::Offset, size)); | 1526 ASSERT(Address::CanHoldOffset(offset, Address::Offset, size)); |
| 1523 return Address(base, offset, Address::Offset, size); | 1527 return Address(base, offset, Address::Offset, size); |
| 1524 } | 1528 } |
| 1525 | 1529 |
| 1526 } // namespace dart | 1530 } // namespace dart |
| 1527 | 1531 |
| 1528 #endif // defined TARGET_ARCH_ARM64 | 1532 #endif // defined TARGET_ARCH_ARM64 |
| OLD | NEW |