| 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_DEOPT_INSTRUCTIONS_H_ | 5 #ifndef VM_DEOPT_INSTRUCTIONS_H_ |
| 6 #define VM_DEOPT_INSTRUCTIONS_H_ | 6 #define VM_DEOPT_INSTRUCTIONS_H_ |
| 7 | 7 |
| 8 #include "vm/allocation.h" | 8 #include "vm/allocation.h" |
| 9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
| 10 #include "vm/code_generator.h" | 10 #include "vm/code_generator.h" |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 | 107 |
| 108 // Materializes all deferred objects. Returns the total number of | 108 // Materializes all deferred objects. Returns the total number of |
| 109 // artificial arguments used during deoptimization. | 109 // artificial arguments used during deoptimization. |
| 110 intptr_t MaterializeDeferredObjects(); | 110 intptr_t MaterializeDeferredObjects(); |
| 111 | 111 |
| 112 RawArray* DestFrameAsArray(); | 112 RawArray* DestFrameAsArray(); |
| 113 | 113 |
| 114 void VisitObjectPointers(ObjectPointerVisitor* visitor); | 114 void VisitObjectPointers(ObjectPointerVisitor* visitor); |
| 115 | 115 |
| 116 void DeferMaterializedObjectRef(intptr_t idx, intptr_t* slot) { | 116 void DeferMaterializedObjectRef(intptr_t idx, intptr_t* slot) { |
| 117 deferred_object_refs_ = new DeferredObjectRef( | 117 deferred_slots_ = new DeferredObjectRef( |
| 118 idx, | 118 idx, |
| 119 reinterpret_cast<RawInstance**>(slot), | 119 reinterpret_cast<RawInstance**>(slot), |
| 120 deferred_object_refs_); | 120 deferred_slots_); |
| 121 } | 121 } |
| 122 | 122 |
| 123 void DeferDoubleMaterialization(double value, RawDouble** slot) { | 123 void DeferDoubleMaterialization(double value, RawDouble** slot) { |
| 124 deferred_boxes_ = new DeferredDouble( | 124 deferred_slots_ = new DeferredDouble( |
| 125 value, | 125 value, |
| 126 reinterpret_cast<RawInstance**>(slot), | 126 reinterpret_cast<RawInstance**>(slot), |
| 127 deferred_boxes_); | 127 deferred_slots_); |
| 128 } | 128 } |
| 129 | 129 |
| 130 void DeferMintMaterialization(int64_t value, RawMint** slot) { | 130 void DeferMintMaterialization(int64_t value, RawMint** slot) { |
| 131 deferred_boxes_ = new DeferredMint( | 131 deferred_slots_ = new DeferredMint( |
| 132 value, | 132 value, |
| 133 reinterpret_cast<RawInstance**>(slot), | 133 reinterpret_cast<RawInstance**>(slot), |
| 134 deferred_boxes_); | 134 deferred_slots_); |
| 135 } | 135 } |
| 136 | 136 |
| 137 void DeferFloat32x4Materialization(simd128_value_t value, | 137 void DeferFloat32x4Materialization(simd128_value_t value, |
| 138 RawFloat32x4** slot) { | 138 RawFloat32x4** slot) { |
| 139 deferred_boxes_ = new DeferredFloat32x4( | 139 deferred_slots_ = new DeferredFloat32x4( |
| 140 value, | 140 value, |
| 141 reinterpret_cast<RawInstance**>(slot), | 141 reinterpret_cast<RawInstance**>(slot), |
| 142 deferred_boxes_); | 142 deferred_slots_); |
| 143 } | 143 } |
| 144 | 144 |
| 145 void DeferFloat64x2Materialization(simd128_value_t value, | 145 void DeferFloat64x2Materialization(simd128_value_t value, |
| 146 RawFloat64x2** slot) { | 146 RawFloat64x2** slot) { |
| 147 deferred_boxes_ = new DeferredFloat64x2( | 147 deferred_slots_ = new DeferredFloat64x2( |
| 148 value, | 148 value, |
| 149 reinterpret_cast<RawInstance**>(slot), | 149 reinterpret_cast<RawInstance**>(slot), |
| 150 deferred_boxes_); | 150 deferred_slots_); |
| 151 } | 151 } |
| 152 | 152 |
| 153 void DeferInt32x4Materialization(simd128_value_t value, | 153 void DeferInt32x4Materialization(simd128_value_t value, |
| 154 RawInt32x4** slot) { | 154 RawInt32x4** slot) { |
| 155 deferred_boxes_ = new DeferredInt32x4( | 155 deferred_slots_ = new DeferredInt32x4( |
| 156 value, | 156 value, |
| 157 reinterpret_cast<RawInstance**>(slot), | 157 reinterpret_cast<RawInstance**>(slot), |
| 158 deferred_boxes_); | 158 deferred_slots_); |
| 159 } | 159 } |
| 160 | 160 |
| 161 DeferredObject* GetDeferredObject(intptr_t idx) const { | 161 DeferredObject* GetDeferredObject(intptr_t idx) const { |
| 162 return deferred_objects_[idx]; | 162 return deferred_objects_[idx]; |
| 163 } | 163 } |
| 164 | 164 |
| 165 private: | 165 private: |
| 166 intptr_t* GetDestFrameAddressAt(intptr_t index) const { | 166 intptr_t* GetDestFrameAddressAt(intptr_t index) const { |
| 167 ASSERT(dest_frame_ != NULL); | 167 ASSERT(dest_frame_ != NULL); |
| 168 ASSERT((0 <= index) && (index < dest_frame_size_)); | 168 ASSERT((0 <= index) && (index < dest_frame_size_)); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 196 bool source_frame_is_allocated_; | 196 bool source_frame_is_allocated_; |
| 197 intptr_t* source_frame_; | 197 intptr_t* source_frame_; |
| 198 intptr_t source_frame_size_; | 198 intptr_t source_frame_size_; |
| 199 intptr_t* cpu_registers_; | 199 intptr_t* cpu_registers_; |
| 200 fpu_register_t* fpu_registers_; | 200 fpu_register_t* fpu_registers_; |
| 201 intptr_t num_args_; | 201 intptr_t num_args_; |
| 202 ICData::DeoptReasonId deopt_reason_; | 202 ICData::DeoptReasonId deopt_reason_; |
| 203 intptr_t caller_fp_; | 203 intptr_t caller_fp_; |
| 204 Isolate* isolate_; | 204 Isolate* isolate_; |
| 205 | 205 |
| 206 DeferredSlot* deferred_boxes_; | 206 DeferredSlot* deferred_slots_; |
| 207 DeferredSlot* deferred_object_refs_; | |
| 208 | 207 |
| 209 intptr_t deferred_objects_count_; | 208 intptr_t deferred_objects_count_; |
| 210 DeferredObject** deferred_objects_; | 209 DeferredObject** deferred_objects_; |
| 211 | 210 |
| 212 DISALLOW_COPY_AND_ASSIGN(DeoptContext); | 211 DISALLOW_COPY_AND_ASSIGN(DeoptContext); |
| 213 }; | 212 }; |
| 214 | 213 |
| 215 | 214 |
| 216 | 215 |
| 217 // Represents one deopt instruction, e.g, setup return address, store object, | 216 // Represents one deopt instruction, e.g, setup return address, store object, |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 399 DeoptInfo* info, | 398 DeoptInfo* info, |
| 400 Smi* reason); | 399 Smi* reason); |
| 401 | 400 |
| 402 private: | 401 private: |
| 403 static const intptr_t kEntrySize = 3; | 402 static const intptr_t kEntrySize = 3; |
| 404 }; | 403 }; |
| 405 | 404 |
| 406 } // namespace dart | 405 } // namespace dart |
| 407 | 406 |
| 408 #endif // VM_DEOPT_INSTRUCTIONS_H_ | 407 #endif // VM_DEOPT_INSTRUCTIONS_H_ |
| OLD | NEW |