| 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 |