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

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

Issue 296003013: - Reduce the number of Isolate::Current() calls. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 7 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_LOCATIONS_H_ 5 #ifndef VM_LOCATIONS_H_
6 #define VM_LOCATIONS_H_ 6 #define VM_LOCATIONS_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/bitfield.h" 10 #include "vm/bitfield.h"
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 // Specification of locations for inputs and output. 515 // Specification of locations for inputs and output.
516 class LocationSummary : public ZoneAllocated { 516 class LocationSummary : public ZoneAllocated {
517 public: 517 public:
518 enum ContainsCall { 518 enum ContainsCall {
519 kNoCall, 519 kNoCall,
520 kCall, 520 kCall,
521 kCallOnSlowPath 521 kCallOnSlowPath
522 }; 522 };
523 523
524 // Defaults to 1 output. 524 // Defaults to 1 output.
525 LocationSummary(intptr_t input_count, 525 LocationSummary(Isolate* isolate,
526 intptr_t input_count,
526 intptr_t temp_count, 527 intptr_t temp_count,
527 LocationSummary::ContainsCall contains_call); 528 LocationSummary::ContainsCall contains_call);
528 529
529 LocationSummary(intptr_t input_count, 530 LocationSummary(Isolate* isolate,
531 intptr_t input_count,
530 intptr_t temp_count, 532 intptr_t temp_count,
531 intptr_t output_count, 533 intptr_t output_count,
532 LocationSummary::ContainsCall contains_call); 534 LocationSummary::ContainsCall contains_call);
533 535
534 intptr_t input_count() const { 536 intptr_t input_count() const {
535 return input_locations_.length(); 537 return input_locations_.length();
536 } 538 }
537 539
538 Location in(intptr_t index) const { 540 Location in(intptr_t index) const {
539 return input_locations_[index]; 541 return input_locations_[index];
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 return &output_locations_[index]; 584 return &output_locations_[index];
583 } 585 }
584 586
585 void set_out(intptr_t index, Location loc) { 587 void set_out(intptr_t index, Location loc) {
586 ASSERT(!always_calls() || 588 ASSERT(!always_calls() ||
587 (loc.IsMachineRegister() || loc.IsInvalid() || 589 (loc.IsMachineRegister() || loc.IsInvalid() ||
588 loc.IsPairLocation())); 590 loc.IsPairLocation()));
589 output_locations_[index] = loc; 591 output_locations_[index] = loc;
590 } 592 }
591 593
592 BitmapBuilder* stack_bitmap() const { return stack_bitmap_; } 594 BitmapBuilder* stack_bitmap() {
595 if (stack_bitmap_ == NULL) {
596 stack_bitmap_ = new BitmapBuilder();
597 }
598 return stack_bitmap_;
599 }
600 void SetStackBit(intptr_t index) {
601 stack_bitmap()->Set(index, true);
602 }
593 603
594 bool always_calls() const { 604 bool always_calls() const {
595 return contains_call_ == kCall; 605 return contains_call_ == kCall;
596 } 606 }
597 607
598 bool can_call() { 608 bool can_call() {
599 return contains_call_ != kNoCall; 609 return contains_call_ != kNoCall;
600 } 610 }
601 611
602 bool HasCallOnSlowPath() { 612 bool HasCallOnSlowPath() {
603 return can_call() && !always_calls(); 613 return can_call() && !always_calls();
604 } 614 }
605 615
606 void PrintTo(BufferFormatter* f) const; 616 void PrintTo(BufferFormatter* f) const;
607 617
608 static LocationSummary* Make(intptr_t input_count, 618 static LocationSummary* Make(intptr_t input_count,
609 Location out, 619 Location out,
610 ContainsCall contains_call); 620 ContainsCall contains_call);
611 621
612 RegisterSet* live_registers() { 622 RegisterSet* live_registers() {
613 return &live_registers_; 623 return &live_registers_;
614 } 624 }
615 625
616 private: 626 private:
617 ZoneGrowableArray<Location> input_locations_; 627 GrowableArray<Location> input_locations_;
618 ZoneGrowableArray<Location> temp_locations_; 628 GrowableArray<Location> temp_locations_;
619 ZoneGrowableArray<Location> output_locations_; 629 GrowableArray<Location> output_locations_;
620 630
621 BitmapBuilder* stack_bitmap_; 631 BitmapBuilder* stack_bitmap_;
622 632
623 const ContainsCall contains_call_; 633 const ContainsCall contains_call_;
624 RegisterSet live_registers_; 634 RegisterSet live_registers_;
625 }; 635 };
626 636
627 637
628 } // namespace dart 638 } // namespace dart
629 639
630 #endif // VM_LOCATIONS_H_ 640 #endif // VM_LOCATIONS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698