Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: runtime/vm/assembler_arm64.cc

Issue 1235843003: Make subtype test cache stub shared between isolates. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: added back comment Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/assembler_arm64.h ('k') | runtime/vm/assembler_ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « runtime/vm/assembler_arm64.h ('k') | runtime/vm/assembler_ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698