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

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

Issue 262793006: Uses double load/store on arm64, enables tests. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | runtime/vm/assembler_arm64.cc » ('j') | runtime/vm/assembler_arm64.cc » ('J')
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 #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 642 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 madd(rd, rn, rm, ZR); 653 madd(rd, rn, rm, ZR);
654 } 654 }
655 void Push(Register reg) { 655 void Push(Register reg) {
656 ASSERT(reg != PP); // Only push PP with TagAndPushPP(). 656 ASSERT(reg != PP); // Only push PP with TagAndPushPP().
657 str(reg, Address(SP, -1 * kWordSize, Address::PreIndex)); 657 str(reg, Address(SP, -1 * kWordSize, Address::PreIndex));
658 } 658 }
659 void Pop(Register reg) { 659 void Pop(Register reg) {
660 ASSERT(reg != PP); // Only pop PP with PopAndUntagPP(). 660 ASSERT(reg != PP); // Only pop PP with PopAndUntagPP().
661 ldr(reg, Address(SP, 1 * kWordSize, Address::PostIndex)); 661 ldr(reg, Address(SP, 1 * kWordSize, Address::PostIndex));
662 } 662 }
663 void PushDouble(VRegister reg) {
664 fstrd(reg, Address(SP, -1 * kWordSize, Address::PreIndex));
665 }
666 void PopDouble(VRegister reg) {
667 fldrd(reg, Address(SP, 1 * kWordSize, Address::PostIndex));
668 }
663 void TagAndPushPP() { 669 void TagAndPushPP() {
664 // Add the heap object tag back to PP before putting it on the stack. 670 // Add the heap object tag back to PP before putting it on the stack.
665 add(TMP, PP, Operand(kHeapObjectTag)); 671 add(TMP, PP, Operand(kHeapObjectTag));
666 str(TMP, Address(SP, -1 * kWordSize, Address::PreIndex)); 672 str(TMP, Address(SP, -1 * kWordSize, Address::PreIndex));
667 } 673 }
668 void PopAndUntagPP() { 674 void PopAndUntagPP() {
669 ldr(PP, Address(SP, 1 * kWordSize, Address::PostIndex)); 675 ldr(PP, Address(SP, 1 * kWordSize, Address::PostIndex));
670 sub(PP, PP, Operand(kHeapObjectTag)); 676 sub(PP, PP, Operand(kHeapObjectTag));
671 } 677 }
672 void tst(Register rn, Operand o) { 678 void tst(Register rn, Operand o) {
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 // PP should be passed for pp. 737 // PP should be passed for pp.
732 void AddImmediate(Register dest, Register rn, int64_t imm, Register pp); 738 void AddImmediate(Register dest, Register rn, int64_t imm, Register pp);
733 void TestImmediate(Register rn, int64_t imm, Register pp); 739 void TestImmediate(Register rn, int64_t imm, Register pp);
734 void CompareImmediate(Register rn, int64_t imm, Register pp); 740 void CompareImmediate(Register rn, int64_t imm, Register pp);
735 741
736 void LoadFromOffset(Register dest, Register base, int32_t offset, 742 void LoadFromOffset(Register dest, Register base, int32_t offset,
737 OperandSize sz = kDoubleWord); 743 OperandSize sz = kDoubleWord);
738 void LoadFieldFromOffset(Register dest, Register base, int32_t offset) { 744 void LoadFieldFromOffset(Register dest, Register base, int32_t offset) {
739 LoadFromOffset(dest, base, offset - kHeapObjectTag); 745 LoadFromOffset(dest, base, offset - kHeapObjectTag);
740 } 746 }
747 void LoadDFromOffset(VRegister dest, Register base, int32_t offset);
748 void LoadDFieldFromOffset(VRegister dest, Register base, int32_t offset) {
749 LoadDFromOffset(dest, base, offset - kHeapObjectTag);
750 }
741 751
742 void StoreToOffset(Register dest, Register base, int32_t offset, 752 void StoreToOffset(Register src, Register base, int32_t offset,
743 OperandSize sz = kDoubleWord); 753 OperandSize sz = kDoubleWord);
744 void StoreFieldToOffset(Register dest, Register base, int32_t offset) { 754 void StoreFieldToOffset(Register src, Register base, int32_t offset) {
745 StoreToOffset(dest, base, offset - kHeapObjectTag); 755 StoreToOffset(src, base, offset - kHeapObjectTag);
756 }
757 void StoreDToOffset(VRegister src, Register base, int32_t offset);
758 void StoreDFieldToOffset(VRegister src, Register base, int32_t offset) {
759 StoreDToOffset(src, base, offset - kHeapObjectTag);
746 } 760 }
747 761
748 // Storing into an object. 762 // Storing into an object.
749 void StoreIntoObject(Register object, 763 void StoreIntoObject(Register object,
750 const Address& dest, 764 const Address& dest,
751 Register value, 765 Register value,
752 bool can_value_be_smi = true); 766 bool can_value_be_smi = true);
753 void StoreIntoObjectNoBarrier(Register object, 767 void StoreIntoObjectNoBarrier(Register object,
754 const Address& dest, 768 const Address& dest,
755 Register value); 769 Register value);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 Register temp_reg, 829 Register temp_reg,
816 Register pp, 830 Register pp,
817 Heap::Space space = Heap::kNew); 831 Heap::Space space = Heap::kNew);
818 832
819 void UpdateAllocationStatsWithSize(intptr_t cid, 833 void UpdateAllocationStatsWithSize(intptr_t cid,
820 Register size_reg, 834 Register size_reg,
821 Register temp_reg, 835 Register temp_reg,
822 Register pp, 836 Register pp,
823 Heap::Space space = Heap::kNew); 837 Heap::Space space = Heap::kNew);
824 838
839 // Inlined allocation of an instance of class 'cls', code has no runtime
840 // calls. Jump to 'failure' if the instance cannot be allocated here.
841 // Allocated instance is returned in 'instance_reg'.
842 // Only the tags field of the object is initialized.
843 void TryAllocate(const Class& cls,
844 Label* failure,
845 Register instance_reg,
846 Register temp_reg,
847 Register pp);
848
825 private: 849 private:
826 AssemblerBuffer buffer_; // Contains position independent code. 850 AssemblerBuffer buffer_; // Contains position independent code.
827 851
828 // Objects and patchable jump targets. 852 // Objects and patchable jump targets.
829 GrowableObjectArray& object_pool_; 853 GrowableObjectArray& object_pool_;
830 854
831 // Patchability of pool entries. 855 // Patchability of pool entries.
832 GrowableArray<Patchability> patchable_pool_entries_; 856 GrowableArray<Patchability> patchable_pool_entries_;
833 857
834 // Pair type parameter for DirectChainedHashMap. 858 // Pair type parameter for DirectChainedHashMap.
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
1169 Register value, 1193 Register value,
1170 Label* no_update); 1194 Label* no_update);
1171 1195
1172 DISALLOW_ALLOCATION(); 1196 DISALLOW_ALLOCATION();
1173 DISALLOW_COPY_AND_ASSIGN(Assembler); 1197 DISALLOW_COPY_AND_ASSIGN(Assembler);
1174 }; 1198 };
1175 1199
1176 } // namespace dart 1200 } // namespace dart
1177 1201
1178 #endif // VM_ASSEMBLER_ARM64_H_ 1202 #endif // VM_ASSEMBLER_ARM64_H_
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/assembler_arm64.cc » ('j') | runtime/vm/assembler_arm64.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698