| 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 |
| 11 | 11 |
| 12 #include "platform/assert.h" | 12 #include "platform/assert.h" |
| 13 #include "platform/utils.h" | 13 #include "platform/utils.h" |
| 14 #include "vm/constants_arm64.h" | 14 #include "vm/constants_arm64.h" |
| 15 #include "vm/hash_map.h" | 15 #include "vm/hash_map.h" |
| 16 #include "vm/longjump.h" | 16 #include "vm/longjump.h" |
| 17 #include "vm/object.h" | 17 #include "vm/object.h" |
| 18 #include "vm/simulator.h" | 18 #include "vm/simulator.h" |
| 19 | 19 |
| 20 namespace dart { | 20 namespace dart { |
| 21 | 21 |
| 22 // Forward declarations. | 22 // Forward declarations. |
| 23 class RuntimeEntry; | 23 class RuntimeEntry; |
| 24 | 24 |
| 25 // TODO(zra): Label, Address, and FieldAddress are copied from ARM, | |
| 26 // they must be adapted to ARM64. | |
| 27 class Label : public ValueObject { | 25 class Label : public ValueObject { |
| 28 public: | 26 public: |
| 29 Label() : position_(0) { } | 27 Label() : position_(0) { } |
| 30 | 28 |
| 31 ~Label() { | 29 ~Label() { |
| 32 // Assert if label is being destroyed with unresolved branches pending. | 30 // Assert if label is being destroyed with unresolved branches pending. |
| 33 ASSERT(!IsLinked()); | 31 ASSERT(!IsLinked()); |
| 34 } | 32 } |
| 35 | 33 |
| 36 // Returns the position for bound and linked labels. Cannot be used | 34 // Returns the position for bound and linked labels. Cannot be used |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 uint32_t encoding_; | 236 uint32_t encoding_; |
| 239 AddressType type_; | 237 AddressType type_; |
| 240 Register base_; | 238 Register base_; |
| 241 | 239 |
| 242 friend class Assembler; | 240 friend class Assembler; |
| 243 }; | 241 }; |
| 244 | 242 |
| 245 | 243 |
| 246 class FieldAddress : public Address { | 244 class FieldAddress : public Address { |
| 247 public: | 245 public: |
| 248 FieldAddress(Register base, int32_t disp) | 246 FieldAddress(Register base, int32_t disp, OperandSize sz = kDoubleWord) |
| 249 : Address(base, disp - kHeapObjectTag) { } | 247 : Address(base, disp - kHeapObjectTag, Offset, sz) { } |
| 250 | 248 |
| 251 FieldAddress(const FieldAddress& other) : Address(other) { } | 249 FieldAddress(const FieldAddress& other) : Address(other) { } |
| 252 | 250 |
| 253 FieldAddress& operator=(const FieldAddress& other) { | 251 FieldAddress& operator=(const FieldAddress& other) { |
| 254 Address::operator=(other); | 252 Address::operator=(other); |
| 255 return *this; | 253 return *this; |
| 256 } | 254 } |
| 257 }; | 255 }; |
| 258 | 256 |
| 259 | 257 |
| (...skipping 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1064 void SubImmediateSetFlags( | 1062 void SubImmediateSetFlags( |
| 1065 Register dest, Register rn, int64_t imm, Register pp); | 1063 Register dest, Register rn, int64_t imm, Register pp); |
| 1066 void AndImmediate(Register rd, Register rn, int64_t imm, Register pp); | 1064 void AndImmediate(Register rd, Register rn, int64_t imm, Register pp); |
| 1067 void OrImmediate(Register rd, Register rn, int64_t imm, Register pp); | 1065 void OrImmediate(Register rd, Register rn, int64_t imm, Register pp); |
| 1068 void XorImmediate(Register rd, Register rn, int64_t imm, Register pp); | 1066 void XorImmediate(Register rd, Register rn, int64_t imm, Register pp); |
| 1069 void TestImmediate(Register rn, int64_t imm, Register pp); | 1067 void TestImmediate(Register rn, int64_t imm, Register pp); |
| 1070 void CompareImmediate(Register rn, int64_t imm, Register pp); | 1068 void CompareImmediate(Register rn, int64_t imm, Register pp); |
| 1071 | 1069 |
| 1072 void LoadFromOffset(Register dest, Register base, int32_t offset, | 1070 void LoadFromOffset(Register dest, Register base, int32_t offset, |
| 1073 Register pp, OperandSize sz = kDoubleWord); | 1071 Register pp, OperandSize sz = kDoubleWord); |
| 1074 void LoadFieldFromOffset( | 1072 void LoadFieldFromOffset(Register dest, Register base, int32_t offset, |
| 1075 Register dest, Register base, int32_t offset, Register pp) { | 1073 Register pp, OperandSize sz = kDoubleWord) { |
| 1076 LoadFromOffset(dest, base, offset - kHeapObjectTag, pp); | 1074 LoadFromOffset(dest, base, offset - kHeapObjectTag, pp, sz); |
| 1077 } | 1075 } |
| 1078 void LoadDFromOffset( | 1076 void LoadDFromOffset( |
| 1079 VRegister dest, Register base, int32_t offset, Register pp); | 1077 VRegister dest, Register base, int32_t offset, Register pp); |
| 1080 void LoadDFieldFromOffset( | 1078 void LoadDFieldFromOffset( |
| 1081 VRegister dest, Register base, int32_t offset, Register pp) { | 1079 VRegister dest, Register base, int32_t offset, Register pp) { |
| 1082 LoadDFromOffset(dest, base, offset - kHeapObjectTag, pp); | 1080 LoadDFromOffset(dest, base, offset - kHeapObjectTag, pp); |
| 1083 } | 1081 } |
| 1084 void LoadQFromOffset( | 1082 void LoadQFromOffset( |
| 1085 VRegister dest, Register base, int32_t offset, Register pp); | 1083 VRegister dest, Register base, int32_t offset, Register pp); |
| 1086 void LoadQFieldFromOffset( | 1084 void LoadQFieldFromOffset( |
| 1087 VRegister dest, Register base, int32_t offset, Register pp) { | 1085 VRegister dest, Register base, int32_t offset, Register pp) { |
| 1088 LoadQFromOffset(dest, base, offset - kHeapObjectTag, pp); | 1086 LoadQFromOffset(dest, base, offset - kHeapObjectTag, pp); |
| 1089 } | 1087 } |
| 1090 | 1088 |
| 1091 void StoreToOffset(Register src, Register base, int32_t offset, | 1089 void StoreToOffset(Register src, Register base, int32_t offset, |
| 1092 Register pp, OperandSize sz = kDoubleWord); | 1090 Register pp, OperandSize sz = kDoubleWord); |
| 1093 void StoreFieldToOffset( | 1091 void StoreFieldToOffset(Register src, Register base, int32_t offset, |
| 1094 Register src, Register base, int32_t offset, Register pp) { | 1092 Register pp, OperandSize sz = kDoubleWord) { |
| 1095 StoreToOffset(src, base, offset - kHeapObjectTag, pp); | 1093 StoreToOffset(src, base, offset - kHeapObjectTag, pp, sz); |
| 1096 } | 1094 } |
| 1097 void StoreDToOffset( | 1095 void StoreDToOffset( |
| 1098 VRegister src, Register base, int32_t offset, Register pp); | 1096 VRegister src, Register base, int32_t offset, Register pp); |
| 1099 void StoreDFieldToOffset( | 1097 void StoreDFieldToOffset( |
| 1100 VRegister src, Register base, int32_t offset, Register pp) { | 1098 VRegister src, Register base, int32_t offset, Register pp) { |
| 1101 StoreDToOffset(src, base, offset - kHeapObjectTag, pp); | 1099 StoreDToOffset(src, base, offset - kHeapObjectTag, pp); |
| 1102 } | 1100 } |
| 1103 void StoreQToOffset( | 1101 void StoreQToOffset( |
| 1104 VRegister src, Register base, int32_t offset, Register pp); | 1102 VRegister src, Register base, int32_t offset, Register pp); |
| 1105 void StoreQFieldToOffset( | 1103 void StoreQFieldToOffset( |
| (...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1673 Register value, | 1671 Register value, |
| 1674 Label* no_update); | 1672 Label* no_update); |
| 1675 | 1673 |
| 1676 DISALLOW_ALLOCATION(); | 1674 DISALLOW_ALLOCATION(); |
| 1677 DISALLOW_COPY_AND_ASSIGN(Assembler); | 1675 DISALLOW_COPY_AND_ASSIGN(Assembler); |
| 1678 }; | 1676 }; |
| 1679 | 1677 |
| 1680 } // namespace dart | 1678 } // namespace dart |
| 1681 | 1679 |
| 1682 #endif // VM_ASSEMBLER_ARM64_H_ | 1680 #endif // VM_ASSEMBLER_ARM64_H_ |
| OLD | NEW |