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 // Classes that describe assembly patterns as used by inline caches. | 4 // Classes that describe assembly patterns as used by inline caches. |
5 | 5 |
6 #ifndef VM_INSTRUCTIONS_MIPS_H_ | 6 #ifndef VM_INSTRUCTIONS_MIPS_H_ |
7 #define VM_INSTRUCTIONS_MIPS_H_ | 7 #define VM_INSTRUCTIONS_MIPS_H_ |
8 | 8 |
9 #ifndef VM_INSTRUCTIONS_H_ | 9 #ifndef VM_INSTRUCTIONS_H_ |
10 #error Do not include instructions_mips.h directly; use instructions.h instead. | 10 #error Do not include instructions_mips.h directly; use instructions.h instead. |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 const ObjectPool& object_pool_; | 90 const ObjectPool& object_pool_; |
91 | 91 |
92 uword end_; | 92 uword end_; |
93 intptr_t native_function_pool_index_; | 93 intptr_t native_function_pool_index_; |
94 intptr_t target_code_pool_index_; | 94 intptr_t target_code_pool_index_; |
95 | 95 |
96 DISALLOW_COPY_AND_ASSIGN(NativeCallPattern); | 96 DISALLOW_COPY_AND_ASSIGN(NativeCallPattern); |
97 }; | 97 }; |
98 | 98 |
99 | 99 |
| 100 // Instance call that can switch from an IC call to a megamorphic call |
| 101 // load ICData load MegamorphicCache |
| 102 // call ICLookup stub -> call MegamorphicLookup stub |
| 103 // call target call target |
| 104 class SwitchableCallPattern : public ValueObject { |
| 105 public: |
| 106 SwitchableCallPattern(uword pc, const Code& code); |
| 107 |
| 108 RawObject* cache() const; |
| 109 void SetCache(const MegamorphicCache& cache) const; |
| 110 void SetLookupStub(const Code& stub) const; |
| 111 |
| 112 private: |
| 113 const ObjectPool& object_pool_; |
| 114 intptr_t cache_pool_index_; |
| 115 intptr_t stub_pool_index_; |
| 116 |
| 117 DISALLOW_COPY_AND_ASSIGN(SwitchableCallPattern); |
| 118 }; |
| 119 |
| 120 |
100 class ReturnPattern : public ValueObject { | 121 class ReturnPattern : public ValueObject { |
101 public: | 122 public: |
102 explicit ReturnPattern(uword pc); | 123 explicit ReturnPattern(uword pc); |
103 | 124 |
104 // jr(RA) = 1 | 125 // jr(RA) = 1 |
105 static const int kLengthInBytes = 1 * Instr::kInstrSize; | 126 static const int kLengthInBytes = 1 * Instr::kInstrSize; |
106 | 127 |
107 int pattern_length_in_bytes() const { | 128 int pattern_length_in_bytes() const { |
108 return kLengthInBytes; | 129 return kLengthInBytes; |
109 } | 130 } |
110 | 131 |
111 bool IsValid() const; | 132 bool IsValid() const; |
112 | 133 |
113 private: | 134 private: |
114 const uword pc_; | 135 const uword pc_; |
115 }; | 136 }; |
116 | 137 |
117 } // namespace dart | 138 } // namespace dart |
118 | 139 |
119 #endif // VM_INSTRUCTIONS_MIPS_H_ | 140 #endif // VM_INSTRUCTIONS_MIPS_H_ |
OLD | NEW |