| 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 #ifndef VM_ASSEMBLER_ARM_H_ | 5 #ifndef VM_ASSEMBLER_ARM_H_ |
| 6 #define VM_ASSEMBLER_ARM_H_ | 6 #define VM_ASSEMBLER_ARM_H_ |
| 7 | 7 |
| 8 #ifndef VM_ASSEMBLER_H_ | 8 #ifndef VM_ASSEMBLER_H_ |
| 9 #error Do not include assembler_arm.h directly; use assembler.h instead. | 9 #error Do not include assembler_arm.h directly; use assembler.h instead. |
| 10 #endif | 10 #endif |
| (...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 // Macros. | 608 // Macros. |
| 609 // Branch to an entry address. Call sequence is never patched. | 609 // Branch to an entry address. Call sequence is never patched. |
| 610 void Branch(const ExternalLabel* label, Condition cond = AL); | 610 void Branch(const ExternalLabel* label, Condition cond = AL); |
| 611 | 611 |
| 612 // Branch to an entry address. Call sequence can be patched or even replaced. | 612 // Branch to an entry address. Call sequence can be patched or even replaced. |
| 613 void BranchPatchable(const ExternalLabel* label); | 613 void BranchPatchable(const ExternalLabel* label); |
| 614 | 614 |
| 615 // Branch and link to an entry address. Call sequence is never patched. | 615 // Branch and link to an entry address. Call sequence is never patched. |
| 616 void BranchLink(const ExternalLabel* label); | 616 void BranchLink(const ExternalLabel* label); |
| 617 | 617 |
| 618 void BranchLink(const ExternalLabel* label, Patchability patchable); |
| 619 |
| 618 // Branch and link to an entry address. Call sequence can be patched. | 620 // Branch and link to an entry address. Call sequence can be patched. |
| 619 void BranchLinkPatchable(const ExternalLabel* label); | 621 void BranchLinkPatchable(const ExternalLabel* label); |
| 620 | 622 |
| 621 // Branch and link to [base + offset]. Call sequence is never patched. | 623 // Branch and link to [base + offset]. Call sequence is never patched. |
| 622 void BranchLinkOffset(Register base, int32_t offset); | 624 void BranchLinkOffset(Register base, int32_t offset); |
| 623 | 625 |
| 624 // Add signed immediate value to rd. May clobber IP. | 626 // Add signed immediate value to rd. May clobber IP. |
| 625 void AddImmediate(Register rd, int32_t value, Condition cond = AL); | 627 void AddImmediate(Register rd, int32_t value, Condition cond = AL); |
| 626 void AddImmediate(Register rd, Register rn, int32_t value, | 628 void AddImmediate(Register rd, Register rn, int32_t value, |
| 627 Condition cond = AL); | 629 Condition cond = AL); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 657 | 659 |
| 658 void MarkExceptionHandler(Label* label); | 660 void MarkExceptionHandler(Label* label); |
| 659 | 661 |
| 660 void Drop(intptr_t stack_elements); | 662 void Drop(intptr_t stack_elements); |
| 661 | 663 |
| 662 void LoadPoolPointer(); | 664 void LoadPoolPointer(); |
| 663 | 665 |
| 664 void LoadIsolate(Register rd); | 666 void LoadIsolate(Register rd); |
| 665 | 667 |
| 666 void LoadObject(Register rd, const Object& object, Condition cond = AL); | 668 void LoadObject(Register rd, const Object& object, Condition cond = AL); |
| 669 void LoadExternalLabel(Register dst, |
| 670 const ExternalLabel* label, |
| 671 Patchability patchable, |
| 672 Condition cond = AL); |
| 667 void PushObject(const Object& object); | 673 void PushObject(const Object& object); |
| 668 void CompareObject(Register rn, const Object& object); | 674 void CompareObject(Register rn, const Object& object); |
| 669 | 675 |
| 670 // When storing into a heap object field, knowledge of the previous content | 676 // When storing into a heap object field, knowledge of the previous content |
| 671 // is expressed through these constants. | 677 // is expressed through these constants. |
| 672 enum FieldContent { | 678 enum FieldContent { |
| 673 kEmptyOrSmiOrNull, // Empty = garbage/zapped in release/debug mode. | 679 kEmptyOrSmiOrNull, // Empty = garbage/zapped in release/debug mode. |
| 674 kHeapObjectOrSmi, | 680 kHeapObjectOrSmi, |
| 675 kOnlySmi, | 681 kOnlySmi, |
| 676 }; | 682 }; |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 879 void EnterDartFrame(intptr_t frame_size); | 885 void EnterDartFrame(intptr_t frame_size); |
| 880 void LeaveDartFrame(); | 886 void LeaveDartFrame(); |
| 881 | 887 |
| 882 // Set up a Dart frame for a function compiled for on-stack replacement. | 888 // Set up a Dart frame for a function compiled for on-stack replacement. |
| 883 // The frame layout is a normal Dart frame, but the frame is partially set | 889 // The frame layout is a normal Dart frame, but the frame is partially set |
| 884 // up on entry (it is the frame of the unoptimized code). | 890 // up on entry (it is the frame of the unoptimized code). |
| 885 void EnterOsrFrame(intptr_t extra_size); | 891 void EnterOsrFrame(intptr_t extra_size); |
| 886 | 892 |
| 887 // Set up a stub frame so that the stack traversal code can easily identify | 893 // Set up a stub frame so that the stack traversal code can easily identify |
| 888 // a stub frame. | 894 // a stub frame. |
| 889 void EnterStubFrame(bool load_pp = false); | 895 void EnterStubFrame(); |
| 890 void LeaveStubFrame(); | 896 void LeaveStubFrame(); |
| 891 | 897 |
| 892 // Instruction pattern from entrypoint is used in Dart frame prologs | 898 // Instruction pattern from entrypoint is used in Dart frame prologs |
| 893 // to set up the frame and save a PC which can be used to figure out the | 899 // to set up the frame and save a PC which can be used to figure out the |
| 894 // RawInstruction object corresponding to the code running in the frame. | 900 // RawInstruction object corresponding to the code running in the frame. |
| 895 static intptr_t EntryPointToPcMarkerOffset() { | 901 static intptr_t EntryPointToPcMarkerOffset() { |
| 896 return TargetCPUFeatures::store_pc_read_offset(); | 902 return TargetCPUFeatures::store_pc_read_offset(); |
| 897 } | 903 } |
| 898 | 904 |
| 899 // The register into which the allocation stats table is loaded with | 905 // The register into which the allocation stats table is loaded with |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1122 Register new_value, | 1128 Register new_value, |
| 1123 FieldContent old_content); | 1129 FieldContent old_content); |
| 1124 | 1130 |
| 1125 DISALLOW_ALLOCATION(); | 1131 DISALLOW_ALLOCATION(); |
| 1126 DISALLOW_COPY_AND_ASSIGN(Assembler); | 1132 DISALLOW_COPY_AND_ASSIGN(Assembler); |
| 1127 }; | 1133 }; |
| 1128 | 1134 |
| 1129 } // namespace dart | 1135 } // namespace dart |
| 1130 | 1136 |
| 1131 #endif // VM_ASSEMBLER_ARM_H_ | 1137 #endif // VM_ASSEMBLER_ARM_H_ |
| OLD | NEW |