OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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_ARM) | 6 #if defined(TARGET_ARCH_ARM) |
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 3346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3357 str(IP, Address(FP, kPcMarkerSlotFromFp * kWordSize)); | 3357 str(IP, Address(FP, kPcMarkerSlotFromFp * kWordSize)); |
3358 | 3358 |
3359 // Setup pool pointer for this dart function. | 3359 // Setup pool pointer for this dart function. |
3360 LoadPoolPointer(); | 3360 LoadPoolPointer(); |
3361 | 3361 |
3362 AddImmediate(SP, -extra_size); | 3362 AddImmediate(SP, -extra_size); |
3363 } | 3363 } |
3364 | 3364 |
3365 | 3365 |
3366 void Assembler::LeaveDartFrame() { | 3366 void Assembler::LeaveDartFrame() { |
3367 // LeaveDartFrame is called from stubs (pp disallowed) and from Dart code (pp | |
3368 // allowed), so there is no point in checking the current value of | |
3369 // constant_pool_allowed(). | |
3370 set_constant_pool_allowed(false); | 3367 set_constant_pool_allowed(false); |
3371 LeaveFrame((1 << PP) | (1 << FP) | (1 << LR)); | 3368 LeaveFrame((1 << PP) | (1 << FP) | (1 << LR)); |
3372 // Adjust SP for PC pushed in EnterDartFrame. | 3369 // Adjust SP for PC pushed in EnterDartFrame. |
3373 AddImmediate(SP, kWordSize); | 3370 AddImmediate(SP, kWordSize); |
3374 } | 3371 } |
3375 | 3372 |
3376 | 3373 |
3377 void Assembler::EnterStubFrame() { | 3374 void Assembler::EnterStubFrame() { |
3378 set_constant_pool_allowed(false); | 3375 set_constant_pool_allowed(false); |
3379 // Push 0 as saved PC for stub frames. | 3376 // Push 0 as saved PC for stub frames. |
3380 mov(IP, Operand(LR)); | 3377 mov(IP, Operand(LR)); |
3381 mov(LR, Operand(0)); | 3378 mov(LR, Operand(0)); |
3382 RegList regs = (1 << PP) | (1 << FP) | (1 << IP) | (1 << LR); | 3379 RegList regs = (1 << PP) | (1 << FP) | (1 << IP) | (1 << LR); |
3383 EnterFrame(regs, 0); | 3380 EnterFrame(regs, 0); |
3384 // Setup pool pointer for this stub. | 3381 // Setup pool pointer for this stub. |
3385 LoadPoolPointer(); | 3382 LoadPoolPointer(); |
3386 } | 3383 } |
3387 | 3384 |
3388 | 3385 |
3389 void Assembler::LeaveStubFrame() { | 3386 void Assembler::LeaveStubFrame() { |
3390 LeaveFrame((1 << PP) | (1 << FP) | (1 << LR)); | 3387 LeaveDartFrame(); |
3391 set_constant_pool_allowed(false); | |
3392 // Adjust SP for null PC pushed in EnterStubFrame. | |
3393 AddImmediate(SP, kWordSize); | |
3394 } | 3388 } |
3395 | 3389 |
3396 | 3390 |
3397 void Assembler::LoadAllocationStatsAddress(Register dest, | 3391 void Assembler::LoadAllocationStatsAddress(Register dest, |
3398 intptr_t cid, | 3392 intptr_t cid, |
3399 bool inline_isolate) { | 3393 bool inline_isolate) { |
3400 ASSERT(dest != kNoRegister); | 3394 ASSERT(dest != kNoRegister); |
3401 ASSERT(dest != TMP); | 3395 ASSERT(dest != TMP); |
3402 ASSERT(cid > 0); | 3396 ASSERT(cid > 0); |
3403 const intptr_t class_offset = ClassTable::ClassOffsetFor(cid); | 3397 const intptr_t class_offset = ClassTable::ClassOffsetFor(cid); |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3678 | 3672 |
3679 | 3673 |
3680 const char* Assembler::FpuRegisterName(FpuRegister reg) { | 3674 const char* Assembler::FpuRegisterName(FpuRegister reg) { |
3681 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); | 3675 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); |
3682 return fpu_reg_names[reg]; | 3676 return fpu_reg_names[reg]; |
3683 } | 3677 } |
3684 | 3678 |
3685 } // namespace dart | 3679 } // namespace dart |
3686 | 3680 |
3687 #endif // defined TARGET_ARCH_ARM | 3681 #endif // defined TARGET_ARCH_ARM |
OLD | NEW |