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" // NOLINT | 5 #include "vm/globals.h" // NOLINT |
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 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 void Assembler::LoadExternalLabelFixed(Register dst, | 409 void Assembler::LoadExternalLabelFixed(Register dst, |
410 const ExternalLabel* label, | 410 const ExternalLabel* label, |
411 Patchability patchable, | 411 Patchability patchable, |
412 Register pp) { | 412 Register pp) { |
413 const int32_t offset = ObjectPool::element_offset( | 413 const int32_t offset = ObjectPool::element_offset( |
414 object_pool_wrapper_.FindExternalLabel(label, patchable)); | 414 object_pool_wrapper_.FindExternalLabel(label, patchable)); |
415 LoadWordFromPoolOffsetFixed(dst, pp, offset); | 415 LoadWordFromPoolOffsetFixed(dst, pp, offset); |
416 } | 416 } |
417 | 417 |
418 | 418 |
419 void Assembler::LoadIsolate(Register dst, Register pp) { | 419 void Assembler::LoadIsolate(Register dst) { |
420 ldr(dst, Address(THR, Thread::isolate_offset())); | 420 ldr(dst, Address(THR, Thread::isolate_offset())); |
421 } | 421 } |
422 | 422 |
423 | 423 |
424 void Assembler::LoadObjectHelper(Register dst, | 424 void Assembler::LoadObjectHelper(Register dst, |
425 const Object& object, | 425 const Object& object, |
426 Register pp, | 426 Register pp, |
427 bool is_unique) { | 427 bool is_unique) { |
428 if (Thread::CanLoadFromThread(object)) { | 428 if (Thread::CanLoadFromThread(object)) { |
429 ldr(dst, Address(THR, Thread::OffsetFromThread(object))); | 429 ldr(dst, Address(THR, Thread::OffsetFromThread(object))); |
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
957 ASSERT(RawObject::kClassIdTagSize == kBitsPerInt32); | 957 ASSERT(RawObject::kClassIdTagSize == kBitsPerInt32); |
958 const intptr_t class_id_offset = Object::tags_offset() + | 958 const intptr_t class_id_offset = Object::tags_offset() + |
959 RawObject::kClassIdTagPos / kBitsPerByte; | 959 RawObject::kClassIdTagPos / kBitsPerByte; |
960 LoadFromOffset(result, object, class_id_offset - kHeapObjectTag, pp, | 960 LoadFromOffset(result, object, class_id_offset - kHeapObjectTag, pp, |
961 kUnsignedWord); | 961 kUnsignedWord); |
962 } | 962 } |
963 | 963 |
964 | 964 |
965 void Assembler::LoadClassById(Register result, Register class_id, Register pp) { | 965 void Assembler::LoadClassById(Register result, Register class_id, Register pp) { |
966 ASSERT(result != class_id); | 966 ASSERT(result != class_id); |
967 LoadImmediate(result, Isolate::Current()->class_table()->TableAddress(), pp); | 967 LoadIsolate(result); |
968 LoadFromOffset(result, result, 0, pp); | 968 const intptr_t offset = |
| 969 Isolate::class_table_offset() + ClassTable::table_offset(); |
| 970 LoadFromOffset(result, result, offset, pp); |
969 ldr(result, Address(result, class_id, UXTX, Address::Scaled)); | 971 ldr(result, Address(result, class_id, UXTX, Address::Scaled)); |
970 } | 972 } |
971 | 973 |
972 | 974 |
973 void Assembler::LoadClass(Register result, Register object, Register pp) { | 975 void Assembler::LoadClass(Register result, Register object, Register pp) { |
974 ASSERT(object != TMP); | 976 ASSERT(object != TMP); |
975 LoadClassId(TMP, object, pp); | 977 LoadClassId(TMP, object, pp); |
976 LoadClassById(result, TMP, pp); | 978 LoadClassById(result, TMP, pp); |
977 } | 979 } |
978 | 980 |
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1465 add(base, array, Operand(index, LSL, shift)); | 1467 add(base, array, Operand(index, LSL, shift)); |
1466 } | 1468 } |
1467 const OperandSize size = Address::OperandSizeFor(cid); | 1469 const OperandSize size = Address::OperandSizeFor(cid); |
1468 ASSERT(Address::CanHoldOffset(offset, Address::Offset, size)); | 1470 ASSERT(Address::CanHoldOffset(offset, Address::Offset, size)); |
1469 return Address(base, offset, Address::Offset, size); | 1471 return Address(base, offset, Address::Offset, size); |
1470 } | 1472 } |
1471 | 1473 |
1472 } // namespace dart | 1474 } // namespace dart |
1473 | 1475 |
1474 #endif // defined TARGET_ARCH_ARM64 | 1476 #endif // defined TARGET_ARCH_ARM64 |
OLD | NEW |