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 #include "vm/deopt_instructions.h" | 5 #include "vm/deopt_instructions.h" |
6 | 6 |
7 #include "vm/assembler.h" | 7 #include "vm/assembler.h" |
8 #include "vm/code_patcher.h" | 8 #include "vm/code_patcher.h" |
9 #include "vm/intermediate_language.h" | 9 #include "vm/intermediate_language.h" |
10 #include "vm/locations.h" | 10 #include "vm/locations.h" |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 explicit DeoptStackSlotInstr(intptr_t from_index) | 80 explicit DeoptStackSlotInstr(intptr_t from_index) |
81 : stack_slot_index_(from_index) { | 81 : stack_slot_index_(from_index) { |
82 ASSERT(stack_slot_index_ >= 0); | 82 ASSERT(stack_slot_index_ >= 0); |
83 } | 83 } |
84 | 84 |
85 virtual intptr_t from_index() const { return stack_slot_index_; } | 85 virtual intptr_t from_index() const { return stack_slot_index_; } |
86 virtual DeoptInstr::Kind kind() const { return kStackSlot; } | 86 virtual DeoptInstr::Kind kind() const { return kStackSlot; } |
87 | 87 |
88 virtual const char* ToCString() const { | 88 virtual const char* ToCString() const { |
89 return Isolate::Current()->current_zone()->PrintToString( | 89 return Isolate::Current()->current_zone()->PrintToString( |
90 "s%"Pd"", stack_slot_index_); | 90 "s%" Pd "", stack_slot_index_); |
91 } | 91 } |
92 | 92 |
93 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { | 93 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { |
94 intptr_t from_index = | 94 intptr_t from_index = |
95 deopt_context->from_frame_size() - stack_slot_index_ - 1; | 95 deopt_context->from_frame_size() - stack_slot_index_ - 1; |
96 intptr_t* from_addr = deopt_context->GetFromFrameAddressAt(from_index); | 96 intptr_t* from_addr = deopt_context->GetFromFrameAddressAt(from_index); |
97 *to_addr = *from_addr; | 97 *to_addr = *from_addr; |
98 } | 98 } |
99 | 99 |
100 private: | 100 private: |
101 const intptr_t stack_slot_index_; // First argument is 0, always >= 0. | 101 const intptr_t stack_slot_index_; // First argument is 0, always >= 0. |
102 | 102 |
103 DISALLOW_COPY_AND_ASSIGN(DeoptStackSlotInstr); | 103 DISALLOW_COPY_AND_ASSIGN(DeoptStackSlotInstr); |
104 }; | 104 }; |
105 | 105 |
106 | 106 |
107 class DeoptDoubleStackSlotInstr : public DeoptInstr { | 107 class DeoptDoubleStackSlotInstr : public DeoptInstr { |
108 public: | 108 public: |
109 explicit DeoptDoubleStackSlotInstr(intptr_t from_index) | 109 explicit DeoptDoubleStackSlotInstr(intptr_t from_index) |
110 : stack_slot_index_(from_index) { | 110 : stack_slot_index_(from_index) { |
111 ASSERT(stack_slot_index_ >= 0); | 111 ASSERT(stack_slot_index_ >= 0); |
112 } | 112 } |
113 | 113 |
114 virtual intptr_t from_index() const { return stack_slot_index_; } | 114 virtual intptr_t from_index() const { return stack_slot_index_; } |
115 virtual DeoptInstr::Kind kind() const { return kDoubleStackSlot; } | 115 virtual DeoptInstr::Kind kind() const { return kDoubleStackSlot; } |
116 | 116 |
117 virtual const char* ToCString() const { | 117 virtual const char* ToCString() const { |
118 return Isolate::Current()->current_zone()->PrintToString( | 118 return Isolate::Current()->current_zone()->PrintToString( |
119 "ds%"Pd"", stack_slot_index_); | 119 "ds%" Pd "", stack_slot_index_); |
120 } | 120 } |
121 | 121 |
122 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { | 122 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { |
123 intptr_t from_index = | 123 intptr_t from_index = |
124 deopt_context->from_frame_size() - stack_slot_index_ - 1; | 124 deopt_context->from_frame_size() - stack_slot_index_ - 1; |
125 double* from_addr = reinterpret_cast<double*>( | 125 double* from_addr = reinterpret_cast<double*>( |
126 deopt_context->GetFromFrameAddressAt(from_index)); | 126 deopt_context->GetFromFrameAddressAt(from_index)); |
127 *reinterpret_cast<RawSmi**>(to_addr) = Smi::New(0); | 127 *reinterpret_cast<RawSmi**>(to_addr) = Smi::New(0); |
128 Isolate::Current()->DeferDoubleMaterialization( | 128 Isolate::Current()->DeferDoubleMaterialization( |
129 *from_addr, reinterpret_cast<RawDouble**>(to_addr)); | 129 *from_addr, reinterpret_cast<RawDouble**>(to_addr)); |
(...skipping 11 matching lines...) Expand all Loading... |
141 explicit DeoptInt64StackSlotInstr(intptr_t from_index) | 141 explicit DeoptInt64StackSlotInstr(intptr_t from_index) |
142 : stack_slot_index_(from_index) { | 142 : stack_slot_index_(from_index) { |
143 ASSERT(stack_slot_index_ >= 0); | 143 ASSERT(stack_slot_index_ >= 0); |
144 } | 144 } |
145 | 145 |
146 virtual intptr_t from_index() const { return stack_slot_index_; } | 146 virtual intptr_t from_index() const { return stack_slot_index_; } |
147 virtual DeoptInstr::Kind kind() const { return kInt64StackSlot; } | 147 virtual DeoptInstr::Kind kind() const { return kInt64StackSlot; } |
148 | 148 |
149 virtual const char* ToCString() const { | 149 virtual const char* ToCString() const { |
150 return Isolate::Current()->current_zone()->PrintToString( | 150 return Isolate::Current()->current_zone()->PrintToString( |
151 "ms%"Pd"", stack_slot_index_); | 151 "ms%" Pd "", stack_slot_index_); |
152 } | 152 } |
153 | 153 |
154 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { | 154 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { |
155 intptr_t from_index = | 155 intptr_t from_index = |
156 deopt_context->from_frame_size() - stack_slot_index_ - 1; | 156 deopt_context->from_frame_size() - stack_slot_index_ - 1; |
157 int64_t* from_addr = reinterpret_cast<int64_t*>( | 157 int64_t* from_addr = reinterpret_cast<int64_t*>( |
158 deopt_context->GetFromFrameAddressAt(from_index)); | 158 deopt_context->GetFromFrameAddressAt(from_index)); |
159 *reinterpret_cast<RawSmi**>(to_addr) = Smi::New(0); | 159 *reinterpret_cast<RawSmi**>(to_addr) = Smi::New(0); |
160 if (Smi::IsValid64(*from_addr)) { | 160 if (Smi::IsValid64(*from_addr)) { |
161 *to_addr = reinterpret_cast<intptr_t>( | 161 *to_addr = reinterpret_cast<intptr_t>( |
(...skipping 16 matching lines...) Expand all Loading... |
178 explicit DeoptFloat32x4StackSlotInstr(intptr_t from_index) | 178 explicit DeoptFloat32x4StackSlotInstr(intptr_t from_index) |
179 : stack_slot_index_(from_index) { | 179 : stack_slot_index_(from_index) { |
180 ASSERT(stack_slot_index_ >= 0); | 180 ASSERT(stack_slot_index_ >= 0); |
181 } | 181 } |
182 | 182 |
183 virtual intptr_t from_index() const { return stack_slot_index_; } | 183 virtual intptr_t from_index() const { return stack_slot_index_; } |
184 virtual DeoptInstr::Kind kind() const { return kFloat32x4StackSlot; } | 184 virtual DeoptInstr::Kind kind() const { return kFloat32x4StackSlot; } |
185 | 185 |
186 virtual const char* ToCString() const { | 186 virtual const char* ToCString() const { |
187 return Isolate::Current()->current_zone()->PrintToString( | 187 return Isolate::Current()->current_zone()->PrintToString( |
188 "f32x4s%"Pd"", stack_slot_index_); | 188 "f32x4s%" Pd "", stack_slot_index_); |
189 } | 189 } |
190 | 190 |
191 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { | 191 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { |
192 intptr_t from_index = | 192 intptr_t from_index = |
193 deopt_context->from_frame_size() - stack_slot_index_ - 1; | 193 deopt_context->from_frame_size() - stack_slot_index_ - 1; |
194 simd128_value_t* from_addr = reinterpret_cast<simd128_value_t*>( | 194 simd128_value_t* from_addr = reinterpret_cast<simd128_value_t*>( |
195 deopt_context->GetFromFrameAddressAt(from_index)); | 195 deopt_context->GetFromFrameAddressAt(from_index)); |
196 *reinterpret_cast<RawSmi**>(to_addr) = Smi::New(0); | 196 *reinterpret_cast<RawSmi**>(to_addr) = Smi::New(0); |
197 Isolate::Current()->DeferFloat32x4Materialization( | 197 Isolate::Current()->DeferFloat32x4Materialization( |
198 *from_addr, reinterpret_cast<RawFloat32x4**>(to_addr)); | 198 *from_addr, reinterpret_cast<RawFloat32x4**>(to_addr)); |
(...skipping 11 matching lines...) Expand all Loading... |
210 explicit DeoptUint32x4StackSlotInstr(intptr_t from_index) | 210 explicit DeoptUint32x4StackSlotInstr(intptr_t from_index) |
211 : stack_slot_index_(from_index) { | 211 : stack_slot_index_(from_index) { |
212 ASSERT(stack_slot_index_ >= 0); | 212 ASSERT(stack_slot_index_ >= 0); |
213 } | 213 } |
214 | 214 |
215 virtual intptr_t from_index() const { return stack_slot_index_; } | 215 virtual intptr_t from_index() const { return stack_slot_index_; } |
216 virtual DeoptInstr::Kind kind() const { return kUint32x4StackSlot; } | 216 virtual DeoptInstr::Kind kind() const { return kUint32x4StackSlot; } |
217 | 217 |
218 virtual const char* ToCString() const { | 218 virtual const char* ToCString() const { |
219 return Isolate::Current()->current_zone()->PrintToString( | 219 return Isolate::Current()->current_zone()->PrintToString( |
220 "ui32x4s%"Pd"", stack_slot_index_); | 220 "ui32x4s%" Pd "", stack_slot_index_); |
221 } | 221 } |
222 | 222 |
223 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { | 223 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { |
224 intptr_t from_index = | 224 intptr_t from_index = |
225 deopt_context->from_frame_size() - stack_slot_index_ - 1; | 225 deopt_context->from_frame_size() - stack_slot_index_ - 1; |
226 simd128_value_t* from_addr = reinterpret_cast<simd128_value_t*>( | 226 simd128_value_t* from_addr = reinterpret_cast<simd128_value_t*>( |
227 deopt_context->GetFromFrameAddressAt(from_index)); | 227 deopt_context->GetFromFrameAddressAt(from_index)); |
228 *reinterpret_cast<RawSmi**>(to_addr) = Smi::New(0); | 228 *reinterpret_cast<RawSmi**>(to_addr) = Smi::New(0); |
229 Isolate::Current()->DeferUint32x4Materialization( | 229 Isolate::Current()->DeferUint32x4Materialization( |
230 *from_addr, reinterpret_cast<RawUint32x4**>(to_addr)); | 230 *from_addr, reinterpret_cast<RawUint32x4**>(to_addr)); |
(...skipping 23 matching lines...) Expand all Loading... |
254 | 254 |
255 virtual intptr_t from_index() const { | 255 virtual intptr_t from_index() const { |
256 return ObjectTableIndex::encode(object_table_index_) | | 256 return ObjectTableIndex::encode(object_table_index_) | |
257 DeoptId::encode(deopt_id_); | 257 DeoptId::encode(deopt_id_); |
258 } | 258 } |
259 | 259 |
260 virtual DeoptInstr::Kind kind() const { return kRetAddress; } | 260 virtual DeoptInstr::Kind kind() const { return kRetAddress; } |
261 | 261 |
262 virtual const char* ToCString() const { | 262 virtual const char* ToCString() const { |
263 return Isolate::Current()->current_zone()->PrintToString( | 263 return Isolate::Current()->current_zone()->PrintToString( |
264 "ret oti:%"Pd"(%"Pd")", object_table_index_, deopt_id_); | 264 "ret oti:%" Pd "(%" Pd ")", object_table_index_, deopt_id_); |
265 } | 265 } |
266 | 266 |
267 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { | 267 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { |
268 Function& function = Function::Handle(deopt_context->isolate()); | 268 Function& function = Function::Handle(deopt_context->isolate()); |
269 function ^= deopt_context->ObjectAt(object_table_index_); | 269 function ^= deopt_context->ObjectAt(object_table_index_); |
270 const Code& code = | 270 const Code& code = |
271 Code::Handle(deopt_context->isolate(), function.unoptimized_code()); | 271 Code::Handle(deopt_context->isolate(), function.unoptimized_code()); |
272 ASSERT(!code.IsNull()); | 272 ASSERT(!code.IsNull()); |
273 uword continue_at_pc = code.GetPcForDeoptId(deopt_id_, | 273 uword continue_at_pc = code.GetPcForDeoptId(deopt_id_, |
274 PcDescriptors::kDeopt); | 274 PcDescriptors::kDeopt); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 explicit DeoptConstantInstr(intptr_t object_table_index) | 308 explicit DeoptConstantInstr(intptr_t object_table_index) |
309 : object_table_index_(object_table_index) { | 309 : object_table_index_(object_table_index) { |
310 ASSERT(object_table_index >= 0); | 310 ASSERT(object_table_index >= 0); |
311 } | 311 } |
312 | 312 |
313 virtual intptr_t from_index() const { return object_table_index_; } | 313 virtual intptr_t from_index() const { return object_table_index_; } |
314 virtual DeoptInstr::Kind kind() const { return kConstant; } | 314 virtual DeoptInstr::Kind kind() const { return kConstant; } |
315 | 315 |
316 virtual const char* ToCString() const { | 316 virtual const char* ToCString() const { |
317 return Isolate::Current()->current_zone()->PrintToString( | 317 return Isolate::Current()->current_zone()->PrintToString( |
318 "const oti:%"Pd"", object_table_index_); | 318 "const oti:%" Pd "", object_table_index_); |
319 } | 319 } |
320 | 320 |
321 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { | 321 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { |
322 const Object& obj = Object::Handle( | 322 const Object& obj = Object::Handle( |
323 deopt_context->isolate(), deopt_context->ObjectAt(object_table_index_)); | 323 deopt_context->isolate(), deopt_context->ObjectAt(object_table_index_)); |
324 *reinterpret_cast<RawObject**>(to_addr) = obj.raw(); | 324 *reinterpret_cast<RawObject**>(to_addr) = obj.raw(); |
325 } | 325 } |
326 | 326 |
327 private: | 327 private: |
328 const intptr_t object_table_index_; | 328 const intptr_t object_table_index_; |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 explicit DeoptPcMarkerInstr(intptr_t object_table_index) | 477 explicit DeoptPcMarkerInstr(intptr_t object_table_index) |
478 : object_table_index_(object_table_index) { | 478 : object_table_index_(object_table_index) { |
479 ASSERT(object_table_index >= 0); | 479 ASSERT(object_table_index >= 0); |
480 } | 480 } |
481 | 481 |
482 virtual intptr_t from_index() const { return object_table_index_; } | 482 virtual intptr_t from_index() const { return object_table_index_; } |
483 virtual DeoptInstr::Kind kind() const { return kPcMarker; } | 483 virtual DeoptInstr::Kind kind() const { return kPcMarker; } |
484 | 484 |
485 virtual const char* ToCString() const { | 485 virtual const char* ToCString() const { |
486 return Isolate::Current()->current_zone()->PrintToString( | 486 return Isolate::Current()->current_zone()->PrintToString( |
487 "pcmark oti:%"Pd"", object_table_index_); | 487 "pcmark oti:%" Pd "", object_table_index_); |
488 } | 488 } |
489 | 489 |
490 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { | 490 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { |
491 Function& function = Function::Handle(deopt_context->isolate()); | 491 Function& function = Function::Handle(deopt_context->isolate()); |
492 function ^= deopt_context->ObjectAt(object_table_index_); | 492 function ^= deopt_context->ObjectAt(object_table_index_); |
493 if (function.IsNull()) { | 493 if (function.IsNull()) { |
494 // Callee's PC marker is not used (pc of Deoptimize stub). Set to 0. | 494 // Callee's PC marker is not used (pc of Deoptimize stub). Set to 0. |
495 *to_addr = 0; | 495 *to_addr = 0; |
496 return; | 496 return; |
497 } | 497 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 explicit DeoptPpInstr(intptr_t object_table_index) | 529 explicit DeoptPpInstr(intptr_t object_table_index) |
530 : object_table_index_(object_table_index) { | 530 : object_table_index_(object_table_index) { |
531 ASSERT(object_table_index >= 0); | 531 ASSERT(object_table_index >= 0); |
532 } | 532 } |
533 | 533 |
534 virtual intptr_t from_index() const { return object_table_index_; } | 534 virtual intptr_t from_index() const { return object_table_index_; } |
535 virtual DeoptInstr::Kind kind() const { return kPp; } | 535 virtual DeoptInstr::Kind kind() const { return kPp; } |
536 | 536 |
537 virtual const char* ToCString() const { | 537 virtual const char* ToCString() const { |
538 return Isolate::Current()->current_zone()->PrintToString( | 538 return Isolate::Current()->current_zone()->PrintToString( |
539 "pp oti:%"Pd"", object_table_index_); | 539 "pp oti:%" Pd "", object_table_index_); |
540 } | 540 } |
541 | 541 |
542 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { | 542 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { |
543 Function& function = Function::Handle(deopt_context->isolate()); | 543 Function& function = Function::Handle(deopt_context->isolate()); |
544 function ^= deopt_context->ObjectAt(object_table_index_); | 544 function ^= deopt_context->ObjectAt(object_table_index_); |
545 const Code& code = | 545 const Code& code = |
546 Code::Handle(deopt_context->isolate(), function.unoptimized_code()); | 546 Code::Handle(deopt_context->isolate(), function.unoptimized_code()); |
547 ASSERT(!code.IsNull()); | 547 ASSERT(!code.IsNull()); |
548 const intptr_t pp = reinterpret_cast<intptr_t>(code.ObjectPool()); | 548 const intptr_t pp = reinterpret_cast<intptr_t>(code.ObjectPool()); |
549 *to_addr = pp; | 549 *to_addr = pp; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
640 } | 640 } |
641 | 641 |
642 virtual intptr_t from_index() const { | 642 virtual intptr_t from_index() const { |
643 return InfoNumber::encode(info_number_) | | 643 return InfoNumber::encode(info_number_) | |
644 SuffixLength::encode(suffix_length_); | 644 SuffixLength::encode(suffix_length_); |
645 } | 645 } |
646 virtual DeoptInstr::Kind kind() const { return kSuffix; } | 646 virtual DeoptInstr::Kind kind() const { return kSuffix; } |
647 | 647 |
648 virtual const char* ToCString() const { | 648 virtual const char* ToCString() const { |
649 return Isolate::Current()->current_zone()->PrintToString( | 649 return Isolate::Current()->current_zone()->PrintToString( |
650 "suffix %"Pd":%"Pd, info_number_, suffix_length_); | 650 "suffix %" Pd ":%" Pd, info_number_, suffix_length_); |
651 } | 651 } |
652 | 652 |
653 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { | 653 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { |
654 // The deoptimization info is uncompressed by translating away suffixes | 654 // The deoptimization info is uncompressed by translating away suffixes |
655 // before executing the instructions. | 655 // before executing the instructions. |
656 UNREACHABLE(); | 656 UNREACHABLE(); |
657 } | 657 } |
658 | 658 |
659 private: | 659 private: |
660 // Static decoder functions in DeoptInstr have access to the bitfield | 660 // Static decoder functions in DeoptInstr have access to the bitfield |
(...skipping 18 matching lines...) Expand all Loading... |
679 explicit DeoptMaterializedObjectRefInstr(intptr_t index) | 679 explicit DeoptMaterializedObjectRefInstr(intptr_t index) |
680 : index_(index) { | 680 : index_(index) { |
681 ASSERT(index >= 0); | 681 ASSERT(index >= 0); |
682 } | 682 } |
683 | 683 |
684 virtual intptr_t from_index() const { return index_; } | 684 virtual intptr_t from_index() const { return index_; } |
685 virtual DeoptInstr::Kind kind() const { return kMaterializedObjectRef; } | 685 virtual DeoptInstr::Kind kind() const { return kMaterializedObjectRef; } |
686 | 686 |
687 virtual const char* ToCString() const { | 687 virtual const char* ToCString() const { |
688 return Isolate::Current()->current_zone()->PrintToString( | 688 return Isolate::Current()->current_zone()->PrintToString( |
689 "mat ref #%"Pd"", index_); | 689 "mat ref #%" Pd "", index_); |
690 } | 690 } |
691 | 691 |
692 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { | 692 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { |
693 *reinterpret_cast<RawSmi**>(to_addr) = Smi::New(0); | 693 *reinterpret_cast<RawSmi**>(to_addr) = Smi::New(0); |
694 Isolate::Current()->DeferMaterializedObjectRef( | 694 Isolate::Current()->DeferMaterializedObjectRef( |
695 index_, to_addr); | 695 index_, to_addr); |
696 } | 696 } |
697 | 697 |
698 private: | 698 private: |
699 intptr_t index_; | 699 intptr_t index_; |
(...skipping 10 matching lines...) Expand all Loading... |
710 explicit DeoptMaterializeObjectInstr(intptr_t field_count) | 710 explicit DeoptMaterializeObjectInstr(intptr_t field_count) |
711 : field_count_(field_count) { | 711 : field_count_(field_count) { |
712 ASSERT(field_count >= 0); | 712 ASSERT(field_count >= 0); |
713 } | 713 } |
714 | 714 |
715 virtual intptr_t from_index() const { return field_count_; } | 715 virtual intptr_t from_index() const { return field_count_; } |
716 virtual DeoptInstr::Kind kind() const { return kMaterializeObject; } | 716 virtual DeoptInstr::Kind kind() const { return kMaterializeObject; } |
717 | 717 |
718 virtual const char* ToCString() const { | 718 virtual const char* ToCString() const { |
719 return Isolate::Current()->current_zone()->PrintToString( | 719 return Isolate::Current()->current_zone()->PrintToString( |
720 "mat obj len:%"Pd"", field_count_); | 720 "mat obj len:%" Pd "", field_count_); |
721 } | 721 } |
722 | 722 |
723 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { | 723 void Execute(DeoptimizationContext* deopt_context, intptr_t* to_addr) { |
724 // This instructions are executed manually by the DeoptimizeWithDeoptInfo. | 724 // This instructions are executed manually by the DeoptimizeWithDeoptInfo. |
725 UNREACHABLE(); | 725 UNREACHABLE(); |
726 } | 726 } |
727 | 727 |
728 private: | 728 private: |
729 intptr_t field_count_; | 729 intptr_t field_count_; |
730 | 730 |
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1099 Smi* offset, | 1099 Smi* offset, |
1100 DeoptInfo* info, | 1100 DeoptInfo* info, |
1101 Smi* reason) { | 1101 Smi* reason) { |
1102 intptr_t i = index * kEntrySize; | 1102 intptr_t i = index * kEntrySize; |
1103 *offset ^= table.At(i); | 1103 *offset ^= table.At(i); |
1104 *info ^= table.At(i + 1); | 1104 *info ^= table.At(i + 1); |
1105 *reason ^= table.At(i + 2); | 1105 *reason ^= table.At(i + 2); |
1106 } | 1106 } |
1107 | 1107 |
1108 } // namespace dart | 1108 } // namespace dart |
OLD | NEW |