Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(603)

Side by Side Diff: runtime/vm/deopt_instructions.h

Issue 982873004: Thread/Isolate refactoring: new(Isolate) -> new(Zone) (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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"
11 #include "vm/deferred_objects.h" 11 #include "vm/deferred_objects.h"
12 #include "vm/growable_array.h" 12 #include "vm/growable_array.h"
13 #include "vm/locations.h" 13 #include "vm/locations.h"
14 #include "vm/object.h" 14 #include "vm/object.h"
15 #include "vm/thread.h"
15 16
16 namespace dart { 17 namespace dart {
17 18
18 class Location; 19 class Location;
19 class Value; 20 class Value;
20 class MaterializeObjectInstr; 21 class MaterializeObjectInstr;
21 class StackFrame; 22 class StackFrame;
22 23
23 // Holds all data relevant for execution of deoptimization instructions. 24 // Holds all data relevant for execution of deoptimization instructions.
24 class DeoptContext { 25 class DeoptContext {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 ASSERT(reg < kNumberOfFpuRegisters); 78 ASSERT(reg < kNumberOfFpuRegisters);
78 const float* address = reinterpret_cast<float*>(&fpu_registers_[reg]); 79 const float* address = reinterpret_cast<float*>(&fpu_registers_[reg]);
79 return simd128_value_t().readFrom(address); 80 return simd128_value_t().readFrom(address);
80 } 81 }
81 82
82 void set_dest_frame(intptr_t* dest_frame) { 83 void set_dest_frame(intptr_t* dest_frame) {
83 ASSERT(dest_frame != NULL && dest_frame_ == NULL); 84 ASSERT(dest_frame != NULL && dest_frame_ == NULL);
84 dest_frame_ = dest_frame; 85 dest_frame_ = dest_frame;
85 } 86 }
86 87
87 Isolate* isolate() const { return isolate_; } 88 Zone* zone() const { return thread_->zone(); }
88 89
89 intptr_t source_frame_size() const { return source_frame_size_; } 90 intptr_t source_frame_size() const { return source_frame_size_; }
90 intptr_t dest_frame_size() const { return dest_frame_size_; } 91 intptr_t dest_frame_size() const { return dest_frame_size_; }
91 92
92 RawCode* code() const { return code_; } 93 RawCode* code() const { return code_; }
93 94
94 ICData::DeoptReasonId deopt_reason() const { return deopt_reason_; } 95 ICData::DeoptReasonId deopt_reason() const { return deopt_reason_; }
95 bool HasDeoptFlag(ICData::DeoptFlags flag) { 96 bool HasDeoptFlag(ICData::DeoptFlags flag) {
96 return (deopt_flags_ & flag) != 0; 97 return (deopt_flags_ & flag) != 0;
97 } 98 }
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 intptr_t dest_frame_size_; 190 intptr_t dest_frame_size_;
190 bool source_frame_is_allocated_; 191 bool source_frame_is_allocated_;
191 intptr_t* source_frame_; 192 intptr_t* source_frame_;
192 intptr_t source_frame_size_; 193 intptr_t source_frame_size_;
193 intptr_t* cpu_registers_; 194 intptr_t* cpu_registers_;
194 fpu_register_t* fpu_registers_; 195 fpu_register_t* fpu_registers_;
195 intptr_t num_args_; 196 intptr_t num_args_;
196 ICData::DeoptReasonId deopt_reason_; 197 ICData::DeoptReasonId deopt_reason_;
197 uint32_t deopt_flags_; 198 uint32_t deopt_flags_;
198 intptr_t caller_fp_; 199 intptr_t caller_fp_;
199 Isolate* isolate_; 200 Thread* thread_;
200 201
201 DeferredSlot* deferred_slots_; 202 DeferredSlot* deferred_slots_;
202 203
203 intptr_t deferred_objects_count_; 204 intptr_t deferred_objects_count_;
204 DeferredObject** deferred_objects_; 205 DeferredObject** deferred_objects_;
205 206
206 DISALLOW_COPY_AND_ASSIGN(DeoptContext); 207 DISALLOW_COPY_AND_ASSIGN(DeoptContext);
207 }; 208 };
208 209
209 210
(...skipping 30 matching lines...) Expand all
240 }; 241 };
241 242
242 static DeoptInstr* Create(intptr_t kind_as_int, intptr_t source_index); 243 static DeoptInstr* Create(intptr_t kind_as_int, intptr_t source_index);
243 244
244 DeoptInstr() {} 245 DeoptInstr() {}
245 virtual ~DeoptInstr() {} 246 virtual ~DeoptInstr() {}
246 247
247 virtual const char* ToCString() const { 248 virtual const char* ToCString() const {
248 const char* args = ArgumentsToCString(); 249 const char* args = ArgumentsToCString();
249 if (args != NULL) { 250 if (args != NULL) {
250 return Isolate::Current()->current_zone()->PrintToString( 251 return Thread::Current()->zone()->PrintToString(
251 "%s(%s)", KindToCString(kind()), args); 252 "%s(%s)", KindToCString(kind()), args);
252 } else { 253 } else {
253 return KindToCString(kind()); 254 return KindToCString(kind());
254 } 255 }
255 } 256 }
256 257
257 virtual void Execute(DeoptContext* deopt_context, intptr_t* dest_addr) = 0; 258 virtual void Execute(DeoptContext* deopt_context, intptr_t* dest_addr) = 0;
258 259
259 virtual DeoptInstr::Kind kind() const = 0; 260 virtual DeoptInstr::Kind kind() const = 0;
260 261
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 context->source_frame_size() - raw_index() - 1)); 356 context->source_frame_size() - raw_index() - 1));
356 } 357 }
357 } 358 }
358 359
359 intptr_t source_index() const { return source_index_; } 360 intptr_t source_index() const { return source_index_; }
360 361
361 const char* ToCString() const { 362 const char* ToCString() const {
362 if (is_register()) { 363 if (is_register()) {
363 return Name(reg()); 364 return Name(reg());
364 } else { 365 } else {
365 return Isolate::Current()->current_zone()->PrintToString( 366 return Thread::Current()->zone()->PrintToString(
366 "s%" Pd "", raw_index()); 367 "s%" Pd "", raw_index());
367 } 368 }
368 } 369 }
369 370
370 private: 371 private:
371 class KindField : public BitField<intptr_t, 0, 1> { }; 372 class KindField : public BitField<intptr_t, 0, 1> { };
372 class RawIndexField : public BitField<intptr_t, 1, kBitsPerWord - 1> { }; 373 class RawIndexField : public BitField<intptr_t, 1, kBitsPerWord - 1> { };
373 374
374 bool is_register() const { 375 bool is_register() const {
375 return KindField::decode(source_index_) == kRegister; 376 return KindField::decode(source_index_) == kRegister;
(...skipping 18 matching lines...) Expand all
394 typedef RegisterSource<FpuRegister> FpuRegisterSource; 395 typedef RegisterSource<FpuRegister> FpuRegisterSource;
395 396
396 397
397 // Builds a deoptimization info table, one DeoptInfo at a time. Call AddXXX 398 // Builds a deoptimization info table, one DeoptInfo at a time. Call AddXXX
398 // methods in the order of their target, starting wih deoptimized code 399 // methods in the order of their target, starting wih deoptimized code
399 // continuation pc and ending with the first argument of the deoptimized 400 // continuation pc and ending with the first argument of the deoptimized
400 // code. Call CreateDeoptInfo to write the accumulated instructions into 401 // code. Call CreateDeoptInfo to write the accumulated instructions into
401 // the heap and reset the builder's internal state for the next DeoptInfo. 402 // the heap and reset the builder's internal state for the next DeoptInfo.
402 class DeoptInfoBuilder : public ValueObject { 403 class DeoptInfoBuilder : public ValueObject {
403 public: 404 public:
404 DeoptInfoBuilder(Isolate* isolate, const intptr_t num_args); 405 DeoptInfoBuilder(Zone* zone, const intptr_t num_args);
405 406
406 // 'object_table' holds all objects referred to by DeoptInstr in 407 // 'object_table' holds all objects referred to by DeoptInstr in
407 // all DeoptInfo instances for a single Code object. 408 // all DeoptInfo instances for a single Code object.
408 const GrowableObjectArray& object_table() { return object_table_; } 409 const GrowableObjectArray& object_table() { return object_table_; }
409 410
410 // Return address before instruction. 411 // Return address before instruction.
411 void AddReturnAddress(const Code& code, 412 void AddReturnAddress(const Code& code,
412 intptr_t deopt_id, 413 intptr_t deopt_id,
413 intptr_t dest_index); 414 intptr_t dest_index);
414 415
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 intptr_t FindOrAddObjectInTable(const Object& obj) const; 456 intptr_t FindOrAddObjectInTable(const Object& obj) const;
456 intptr_t FindMaterialization(MaterializeObjectInstr* mat) const; 457 intptr_t FindMaterialization(MaterializeObjectInstr* mat) const;
457 intptr_t CalculateStackIndex(const Location& source_loc) const; 458 intptr_t CalculateStackIndex(const Location& source_loc) const;
458 459
459 intptr_t FrameSize() const { 460 intptr_t FrameSize() const {
460 return instructions_.length() - frame_start_; 461 return instructions_.length() - frame_start_;
461 } 462 }
462 463
463 void AddConstant(const Object& obj, intptr_t dest_index); 464 void AddConstant(const Object& obj, intptr_t dest_index);
464 465
465 Isolate* isolate() const { return isolate_; } 466 Zone* zone() const { return zone_; }
466 467
467 Isolate* isolate_; 468 Zone* zone_;
468 469
469 GrowableArray<DeoptInstr*> instructions_; 470 GrowableArray<DeoptInstr*> instructions_;
470 const GrowableObjectArray& object_table_; 471 const GrowableObjectArray& object_table_;
471 const intptr_t num_args_; 472 const intptr_t num_args_;
472 473
473 // Used to compress entries by sharing suffixes. 474 // Used to compress entries by sharing suffixes.
474 TrieNode* trie_root_; 475 TrieNode* trie_root_;
475 intptr_t current_info_number_; 476 intptr_t current_info_number_;
476 477
477 intptr_t frame_start_; 478 intptr_t frame_start_;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 class ReasonField : public BitField<ICData::DeoptReasonId, 0, 8> { }; 518 class ReasonField : public BitField<ICData::DeoptReasonId, 0, 8> { };
518 class FlagsField : public BitField<uint32_t, 8, 8> { }; 519 class FlagsField : public BitField<uint32_t, 8, 8> { };
519 520
520 private: 521 private:
521 static const intptr_t kEntrySize = 3; 522 static const intptr_t kEntrySize = 3;
522 }; 523 };
523 524
524 } // namespace dart 525 } // namespace dart
525 526
526 #endif // VM_DEOPT_INSTRUCTIONS_H_ 527 #endif // VM_DEOPT_INSTRUCTIONS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698