| 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 RUNTIME_VM_ASSEMBLER_ARM64_H_ | 5 #ifndef RUNTIME_VM_ASSEMBLER_ARM64_H_ |
| 6 #define RUNTIME_VM_ASSEMBLER_ARM64_H_ | 6 #define RUNTIME_VM_ASSEMBLER_ARM64_H_ |
| 7 | 7 |
| 8 #ifndef RUNTIME_VM_ASSEMBLER_H_ | 8 #ifndef RUNTIME_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 23 matching lines...) Expand all Loading... |
| 34 } | 34 } |
| 35 | 35 |
| 36 private: | 36 private: |
| 37 int64_t value_; | 37 int64_t value_; |
| 38 | 38 |
| 39 int64_t value() const { return value_; } | 39 int64_t value() const { return value_; } |
| 40 | 40 |
| 41 friend class Assembler; | 41 friend class Assembler; |
| 42 }; | 42 }; |
| 43 | 43 |
| 44 | |
| 45 class Label : public ValueObject { | 44 class Label : public ValueObject { |
| 46 public: | 45 public: |
| 47 Label() : position_(0) {} | 46 Label() : position_(0) {} |
| 48 | 47 |
| 49 ~Label() { | 48 ~Label() { |
| 50 // Assert if label is being destroyed with unresolved branches pending. | 49 // Assert if label is being destroyed with unresolved branches pending. |
| 51 ASSERT(!IsLinked()); | 50 ASSERT(!IsLinked()); |
| 52 } | 51 } |
| 53 | 52 |
| 54 // Returns the position for bound and linked labels. Cannot be used | 53 // Returns the position for bound and linked labels. Cannot be used |
| (...skipping 21 matching lines...) Expand all Loading... |
| 76 void LinkTo(intptr_t position) { | 75 void LinkTo(intptr_t position) { |
| 77 ASSERT(!IsBound()); | 76 ASSERT(!IsBound()); |
| 78 position_ = position + kWordSize; | 77 position_ = position + kWordSize; |
| 79 ASSERT(IsLinked()); | 78 ASSERT(IsLinked()); |
| 80 } | 79 } |
| 81 | 80 |
| 82 friend class Assembler; | 81 friend class Assembler; |
| 83 DISALLOW_COPY_AND_ASSIGN(Label); | 82 DISALLOW_COPY_AND_ASSIGN(Label); |
| 84 }; | 83 }; |
| 85 | 84 |
| 86 | |
| 87 class Address : public ValueObject { | 85 class Address : public ValueObject { |
| 88 public: | 86 public: |
| 89 Address(const Address& other) | 87 Address(const Address& other) |
| 90 : ValueObject(), | 88 : ValueObject(), |
| 91 encoding_(other.encoding_), | 89 encoding_(other.encoding_), |
| 92 type_(other.type_), | 90 type_(other.type_), |
| 93 base_(other.base_) {} | 91 base_(other.base_) {} |
| 94 | 92 |
| 95 Address& operator=(const Address& other) { | 93 Address& operator=(const Address& other) { |
| 96 encoding_ = other.encoding_; | 94 encoding_ = other.encoding_; |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 | 290 |
| 293 Address() : encoding_(0), type_(Unknown), base_(kNoRegister) {} | 291 Address() : encoding_(0), type_(Unknown), base_(kNoRegister) {} |
| 294 | 292 |
| 295 uint32_t encoding_; | 293 uint32_t encoding_; |
| 296 AddressType type_; | 294 AddressType type_; |
| 297 Register base_; | 295 Register base_; |
| 298 | 296 |
| 299 friend class Assembler; | 297 friend class Assembler; |
| 300 }; | 298 }; |
| 301 | 299 |
| 302 | |
| 303 class FieldAddress : public Address { | 300 class FieldAddress : public Address { |
| 304 public: | 301 public: |
| 305 FieldAddress(Register base, int32_t disp, OperandSize sz = kDoubleWord) | 302 FieldAddress(Register base, int32_t disp, OperandSize sz = kDoubleWord) |
| 306 : Address(base, disp - kHeapObjectTag, Offset, sz) {} | 303 : Address(base, disp - kHeapObjectTag, Offset, sz) {} |
| 307 | 304 |
| 308 // This addressing mode does not exist. | 305 // This addressing mode does not exist. |
| 309 FieldAddress(Register base, Register disp, OperandSize sz = kDoubleWord); | 306 FieldAddress(Register base, Register disp, OperandSize sz = kDoubleWord); |
| 310 | 307 |
| 311 FieldAddress(const FieldAddress& other) : Address(other) {} | 308 FieldAddress(const FieldAddress& other) : Address(other) {} |
| 312 | 309 |
| 313 FieldAddress& operator=(const FieldAddress& other) { | 310 FieldAddress& operator=(const FieldAddress& other) { |
| 314 Address::operator=(other); | 311 Address::operator=(other); |
| 315 return *this; | 312 return *this; |
| 316 } | 313 } |
| 317 }; | 314 }; |
| 318 | 315 |
| 319 | |
| 320 class Operand : public ValueObject { | 316 class Operand : public ValueObject { |
| 321 public: | 317 public: |
| 322 enum OperandType { | 318 enum OperandType { |
| 323 Shifted, | 319 Shifted, |
| 324 Extended, | 320 Extended, |
| 325 Immediate, | 321 Immediate, |
| 326 BitfieldImm, | 322 BitfieldImm, |
| 327 Unknown, | 323 Unknown, |
| 328 }; | 324 }; |
| 329 | 325 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 431 private: | 427 private: |
| 432 uint32_t encoding() const { return encoding_; } | 428 uint32_t encoding() const { return encoding_; } |
| 433 OperandType type() const { return type_; } | 429 OperandType type() const { return type_; } |
| 434 | 430 |
| 435 uint32_t encoding_; | 431 uint32_t encoding_; |
| 436 OperandType type_; | 432 OperandType type_; |
| 437 | 433 |
| 438 friend class Assembler; | 434 friend class Assembler; |
| 439 }; | 435 }; |
| 440 | 436 |
| 441 | |
| 442 class Assembler : public ValueObject { | 437 class Assembler : public ValueObject { |
| 443 public: | 438 public: |
| 444 explicit Assembler(bool use_far_branches = false); | 439 explicit Assembler(bool use_far_branches = false); |
| 445 ~Assembler() {} | 440 ~Assembler() {} |
| 446 | 441 |
| 447 void PopRegister(Register r) { Pop(r); } | 442 void PopRegister(Register r) { Pop(r); } |
| 448 | 443 |
| 449 void Drop(intptr_t stack_elements) { | 444 void Drop(intptr_t stack_elements) { |
| 450 add(SP, SP, Operand(stack_elements * kWordSize)); | 445 add(SP, SP, Operand(stack_elements * kWordSize)); |
| 451 } | 446 } |
| (...skipping 1485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1937 Register value, | 1932 Register value, |
| 1938 Label* no_update); | 1933 Label* no_update); |
| 1939 | 1934 |
| 1940 DISALLOW_ALLOCATION(); | 1935 DISALLOW_ALLOCATION(); |
| 1941 DISALLOW_COPY_AND_ASSIGN(Assembler); | 1936 DISALLOW_COPY_AND_ASSIGN(Assembler); |
| 1942 }; | 1937 }; |
| 1943 | 1938 |
| 1944 } // namespace dart | 1939 } // namespace dart |
| 1945 | 1940 |
| 1946 #endif // RUNTIME_VM_ASSEMBLER_ARM64_H_ | 1941 #endif // RUNTIME_VM_ASSEMBLER_ARM64_H_ |
| OLD | NEW |