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

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

Issue 1358773002: Load the native call wrapper via Thread. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 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_mips.h » ('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 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 // If the raw smi does not fit into a 32-bit signed int, then we'll keep 377 // If the raw smi does not fit into a 32-bit signed int, then we'll keep
378 // the raw value in the object pool. 378 // the raw value in the object pool.
379 return !Utils::IsInt(32, reinterpret_cast<int64_t>(object.raw())); 379 return !Utils::IsInt(32, reinterpret_cast<int64_t>(object.raw()));
380 } 380 }
381 ASSERT(object.IsNotTemporaryScopedHandle()); 381 ASSERT(object.IsNotTemporaryScopedHandle());
382 ASSERT(object.IsOld()); 382 ASSERT(object.IsOld());
383 return true; 383 return true;
384 } 384 }
385 385
386 386
387 void Assembler::LoadExternalLabel(Register dst, const ExternalLabel* label) {
388 if (constant_pool_allowed()) {
389 const int32_t offset = ObjectPool::element_offset(
390 object_pool_wrapper_.FindExternalLabel(label, kNotPatchable));
391 LoadWordFromPoolOffset(dst, offset);
392 } else {
393 const int64_t target = static_cast<int64_t>(label->address());
394 LoadImmediate(dst, target);
395 }
396 }
397
398
399 void Assembler::LoadNativeEntry(Register dst, 387 void Assembler::LoadNativeEntry(Register dst,
400 const ExternalLabel* label) { 388 const ExternalLabel* label) {
401 const int32_t offset = ObjectPool::element_offset( 389 const int32_t offset = ObjectPool::element_offset(
402 object_pool_wrapper_.FindNativeEntry(label, kNotPatchable)); 390 object_pool_wrapper_.FindNativeEntry(label, kNotPatchable));
403 LoadWordFromPoolOffset(dst, offset); 391 LoadWordFromPoolOffset(dst, offset);
404 } 392 }
405 393
406 394
407 void Assembler::LoadExternalLabelFixed(Register dst,
408 const ExternalLabel* label,
409 Patchability patchable) {
410 const int32_t offset = ObjectPool::element_offset(
411 object_pool_wrapper_.FindExternalLabel(label, patchable));
412 LoadWordFromPoolOffsetFixed(dst, offset);
413 }
414
415
416 void Assembler::LoadIsolate(Register dst) { 395 void Assembler::LoadIsolate(Register dst) {
417 ldr(dst, Address(THR, Thread::isolate_offset())); 396 ldr(dst, Address(THR, Thread::isolate_offset()));
418 } 397 }
419 398
420 399
421 void Assembler::LoadObjectHelper(Register dst, 400 void Assembler::LoadObjectHelper(Register dst,
422 const Object& object, 401 const Object& object,
423 bool is_unique) { 402 bool is_unique) {
424 if (Thread::CanLoadFromThread(object)) { 403 if (Thread::CanLoadFromThread(object)) {
425 ldr(dst, Address(THR, Thread::OffsetFromThread(object))); 404 ldr(dst, Address(THR, Thread::OffsetFromThread(object)));
(...skipping 1055 matching lines...) Expand 10 before | Expand all | Expand 10 after
1481 add(base, array, Operand(index, LSL, shift)); 1460 add(base, array, Operand(index, LSL, shift));
1482 } 1461 }
1483 const OperandSize size = Address::OperandSizeFor(cid); 1462 const OperandSize size = Address::OperandSizeFor(cid);
1484 ASSERT(Address::CanHoldOffset(offset, Address::Offset, size)); 1463 ASSERT(Address::CanHoldOffset(offset, Address::Offset, size));
1485 return Address(base, offset, Address::Offset, size); 1464 return Address(base, offset, Address::Offset, size);
1486 } 1465 }
1487 1466
1488 } // namespace dart 1467 } // namespace dart
1489 1468
1490 #endif // defined TARGET_ARCH_ARM64 1469 #endif // defined TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « runtime/vm/assembler_arm64.h ('k') | runtime/vm/assembler_mips.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698