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" | 5 #include "vm/globals.h" |
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/longjump.h" | 9 #include "vm/longjump.h" |
10 #include "vm/runtime_entry.h" | 10 #include "vm/runtime_entry.h" |
(...skipping 2603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2614 } | 2614 } |
2615 | 2615 |
2616 | 2616 |
2617 void Assembler::LeaveDartFrame() { | 2617 void Assembler::LeaveDartFrame() { |
2618 LeaveFrame((1 << PP) | (1 << FP) | (1 << LR)); | 2618 LeaveFrame((1 << PP) | (1 << FP) | (1 << LR)); |
2619 // Adjust SP for PC pushed in EnterDartFrame. | 2619 // Adjust SP for PC pushed in EnterDartFrame. |
2620 AddImmediate(SP, kWordSize); | 2620 AddImmediate(SP, kWordSize); |
2621 } | 2621 } |
2622 | 2622 |
2623 | 2623 |
2624 void Assembler::EnterStubFrame(bool uses_pp) { | 2624 void Assembler::EnterStubFrame(bool load_pp) { |
2625 // Push 0 as saved PC for stub frames. | 2625 // Push 0 as saved PC for stub frames. |
2626 mov(IP, ShifterOperand(LR)); | 2626 mov(IP, ShifterOperand(LR)); |
2627 mov(LR, ShifterOperand(0)); | 2627 mov(LR, ShifterOperand(0)); |
2628 RegList regs = (1 << FP) | (1 << IP) | (1 << LR); | 2628 RegList regs = (1 << PP) | (1 << FP) | (1 << IP) | (1 << LR); |
2629 if (uses_pp) { | |
2630 regs |= (1 << PP); | |
2631 } | |
2632 EnterFrame(regs, 0); | 2629 EnterFrame(regs, 0); |
2633 if (uses_pp) { | 2630 if (load_pp) { |
2634 // Setup pool pointer for this stub. | 2631 // Setup pool pointer for this stub. |
2635 LoadPoolPointer(); | 2632 LoadPoolPointer(); |
2636 } | 2633 } |
2637 } | 2634 } |
2638 | 2635 |
2639 | 2636 |
2640 void Assembler::LeaveStubFrame(bool uses_pp) { | 2637 void Assembler::LeaveStubFrame() { |
2641 RegList regs = (1 << FP) | (1 << LR); | 2638 LeaveFrame((1 << PP) | (1 << FP) | (1 << LR)); |
2642 if (uses_pp) { | |
2643 regs |= (1 << PP); | |
2644 } | |
2645 LeaveFrame(regs); | |
2646 // Adjust SP for null PC pushed in EnterStubFrame. | 2639 // Adjust SP for null PC pushed in EnterStubFrame. |
2647 AddImmediate(SP, kWordSize); | 2640 AddImmediate(SP, kWordSize); |
2648 } | 2641 } |
2649 | 2642 |
2650 | 2643 |
2651 void Assembler::TryAllocate(const Class& cls, | 2644 void Assembler::TryAllocate(const Class& cls, |
2652 Label* failure, | 2645 Label* failure, |
2653 Register instance_reg) { | 2646 Register instance_reg) { |
2654 ASSERT(failure != NULL); | 2647 ASSERT(failure != NULL); |
2655 if (FLAG_inline_alloc) { | 2648 if (FLAG_inline_alloc) { |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2761 | 2754 |
2762 | 2755 |
2763 const char* Assembler::FpuRegisterName(FpuRegister reg) { | 2756 const char* Assembler::FpuRegisterName(FpuRegister reg) { |
2764 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); | 2757 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); |
2765 return fpu_reg_names[reg]; | 2758 return fpu_reg_names[reg]; |
2766 } | 2759 } |
2767 | 2760 |
2768 } // namespace dart | 2761 } // namespace dart |
2769 | 2762 |
2770 #endif // defined TARGET_ARCH_ARM | 2763 #endif // defined TARGET_ARCH_ARM |
2771 | |
OLD | NEW |