| 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 #ifndef VM_ASSEMBLER_ARM64_H_ | 5 #ifndef VM_ASSEMBLER_ARM64_H_ |
| 6 #define VM_ASSEMBLER_ARM64_H_ | 6 #define VM_ASSEMBLER_ARM64_H_ |
| 7 | 7 |
| 8 #ifndef VM_ASSEMBLER_H_ | 8 #ifndef VM_ASSEMBLER_H_ |
| 9 #error Do not include assembler_arm64.h directly; use assembler.h instead. | 9 #error Do not include assembler_arm64.h directly; use assembler.h instead. |
| 10 #endif | 10 #endif |
| (...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 692 void BranchLinkPatchable(const ExternalLabel* label) { | 692 void BranchLinkPatchable(const ExternalLabel* label) { |
| 693 LoadExternalLabel(TMP, label, kPatchable, PP); | 693 LoadExternalLabel(TMP, label, kPatchable, PP); |
| 694 blr(TMP); | 694 blr(TMP); |
| 695 } | 695 } |
| 696 | 696 |
| 697 // Macros accepting a pp Register argument may attempt to load values from | 697 // Macros accepting a pp Register argument may attempt to load values from |
| 698 // the object pool when possible. Unless you are sure that the untagged object | 698 // the object pool when possible. Unless you are sure that the untagged object |
| 699 // pool pointer is in another register, or that it is not available at all, | 699 // pool pointer is in another register, or that it is not available at all, |
| 700 // PP should be passed for pp. | 700 // PP should be passed for pp. |
| 701 void AddImmediate(Register dest, Register rn, int64_t imm, Register pp); | 701 void AddImmediate(Register dest, Register rn, int64_t imm, Register pp); |
| 702 void TestImmediate(Register rn, int64_t imm, Register pp); |
| 702 void CompareImmediate(Register rn, int64_t imm, Register pp); | 703 void CompareImmediate(Register rn, int64_t imm, Register pp); |
| 703 | 704 |
| 704 void LoadFromOffset(Register dest, Register base, int32_t offset, | 705 void LoadFromOffset(Register dest, Register base, int32_t offset, |
| 705 OperandSize sz = kDoubleWord); | 706 OperandSize sz = kDoubleWord); |
| 706 void LoadFieldFromOffset(Register dest, Register base, int32_t offset) { | 707 void LoadFieldFromOffset(Register dest, Register base, int32_t offset) { |
| 707 LoadFromOffset(dest, base, offset - kHeapObjectTag); | 708 LoadFromOffset(dest, base, offset - kHeapObjectTag); |
| 708 } | 709 } |
| 709 | 710 |
| 710 void StoreToOffset(Register dest, Register base, int32_t offset, | 711 void StoreToOffset(Register dest, Register base, int32_t offset, |
| 711 OperandSize sz = kDoubleWord); | 712 OperandSize sz = kDoubleWord); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 747 Patchability patchable, Register pp); | 748 Patchability patchable, Register pp); |
| 748 void LoadObject(Register dst, const Object& obj, Register pp); | 749 void LoadObject(Register dst, const Object& obj, Register pp); |
| 749 void LoadDecodableImmediate(Register reg, int64_t imm, Register pp); | 750 void LoadDecodableImmediate(Register reg, int64_t imm, Register pp); |
| 750 void LoadImmediateFixed(Register reg, int64_t imm); | 751 void LoadImmediateFixed(Register reg, int64_t imm); |
| 751 void LoadImmediate(Register reg, int64_t imm, Register pp); | 752 void LoadImmediate(Register reg, int64_t imm, Register pp); |
| 752 | 753 |
| 753 void PushObject(const Object& object, Register pp) { | 754 void PushObject(const Object& object, Register pp) { |
| 754 LoadObject(TMP, object, pp); | 755 LoadObject(TMP, object, pp); |
| 755 Push(TMP); | 756 Push(TMP); |
| 756 } | 757 } |
| 758 void CompareObject(Register reg, const Object& object, Register pp); |
| 757 | 759 |
| 758 void LoadClassId(Register result, Register object); | 760 void LoadClassId(Register result, Register object); |
| 759 void LoadClassById(Register result, Register class_id); | 761 void LoadClassById(Register result, Register class_id); |
| 760 void LoadClass(Register result, Register object); | 762 void LoadClass(Register result, Register object); |
| 761 void CompareClassId(Register object, intptr_t class_id); | 763 void CompareClassId(Register object, intptr_t class_id); |
| 762 | 764 |
| 763 void EnterFrame(intptr_t frame_size); | 765 void EnterFrame(intptr_t frame_size); |
| 764 void LeaveFrame(); | 766 void LeaveFrame(); |
| 765 | 767 |
| 766 void EnterDartFrame(intptr_t frame_size); | 768 void EnterDartFrame(intptr_t frame_size); |
| 767 void EnterDartFrameWithInfo(intptr_t frame_size, Register new_pp); | 769 void EnterDartFrameWithInfo(intptr_t frame_size, Register new_pp); |
| 768 void EnterOsrFrame(intptr_t extra_size, Register new_pp); | 770 void EnterOsrFrame(intptr_t extra_size, Register new_pp); |
| 769 void LeaveDartFrame(); | 771 void LeaveDartFrame(); |
| 770 | 772 |
| 771 void EnterCallRuntimeFrame(intptr_t frame_size); | 773 void EnterCallRuntimeFrame(intptr_t frame_size); |
| 772 void LeaveCallRuntimeFrame(); | 774 void LeaveCallRuntimeFrame(); |
| 773 void CallRuntime(const RuntimeEntry& entry, intptr_t argument_count); | 775 void CallRuntime(const RuntimeEntry& entry, intptr_t argument_count); |
| 774 | 776 |
| 775 // Set up a stub frame so that the stack traversal code can easily identify | 777 // Set up a stub frame so that the stack traversal code can easily identify |
| 776 // a stub frame. | 778 // a stub frame. |
| 777 void EnterStubFrame(bool load_pp = false); | 779 void EnterStubFrame(bool load_pp = false); |
| 778 void LeaveStubFrame(); | 780 void LeaveStubFrame(); |
| 779 | 781 |
| 782 void UpdateAllocationStats(intptr_t cid, |
| 783 Register temp_reg, |
| 784 Heap::Space space = Heap::kNew); |
| 785 |
| 780 private: | 786 private: |
| 781 AssemblerBuffer buffer_; // Contains position independent code. | 787 AssemblerBuffer buffer_; // Contains position independent code. |
| 782 | 788 |
| 783 // Objects and patchable jump targets. | 789 // Objects and patchable jump targets. |
| 784 GrowableObjectArray& object_pool_; | 790 GrowableObjectArray& object_pool_; |
| 785 | 791 |
| 786 // Patchability of pool entries. | 792 // Patchability of pool entries. |
| 787 GrowableArray<Patchability> patchable_pool_entries_; | 793 GrowableArray<Patchability> patchable_pool_entries_; |
| 788 | 794 |
| 789 // Pair type parameter for DirectChainedHashMap. | 795 // Pair type parameter for DirectChainedHashMap. |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1108 Register value, | 1114 Register value, |
| 1109 Label* no_update); | 1115 Label* no_update); |
| 1110 | 1116 |
| 1111 DISALLOW_ALLOCATION(); | 1117 DISALLOW_ALLOCATION(); |
| 1112 DISALLOW_COPY_AND_ASSIGN(Assembler); | 1118 DISALLOW_COPY_AND_ASSIGN(Assembler); |
| 1113 }; | 1119 }; |
| 1114 | 1120 |
| 1115 } // namespace dart | 1121 } // namespace dart |
| 1116 | 1122 |
| 1117 #endif // VM_ASSEMBLER_ARM64_H_ | 1123 #endif // VM_ASSEMBLER_ARM64_H_ |
| OLD | NEW |