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

Unified Diff: dart/runtime/vm/locations.cc

Issue 963483002: Version 1.8.6 (Closed) Base URL: http://dart.googlecode.com/svn/branches/1.8/
Patch Set: Created 5 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « dart/runtime/vm/locations.h ('k') | dart/tests/language/vm/optimized_check_class_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/runtime/vm/locations.cc
===================================================================
--- dart/runtime/vm/locations.cc (revision 44047)
+++ dart/runtime/vm/locations.cc (working copy)
@@ -244,6 +244,59 @@
}
+Location Location::RemapForSlowPath(Definition* def,
+ intptr_t* cpu_reg_slots,
+ intptr_t* fpu_reg_slots) const {
+ if (IsRegister()) {
+ intptr_t index = cpu_reg_slots[reg()];
+ ASSERT(index >= 0);
+ return Location::StackSlot(index);
+ } else if (IsFpuRegister()) {
+ intptr_t index = fpu_reg_slots[fpu_reg()];
+ ASSERT(index >= 0);
+ switch (def->representation()) {
+ case kUnboxedDouble:
+ return Location::DoubleStackSlot(index);
+
+ case kUnboxedFloat32x4:
+ case kUnboxedInt32x4:
+ case kUnboxedFloat64x2:
+ return Location::QuadStackSlot(index);
+
+ default:
+ UNREACHABLE();
+ }
+ } else if (IsPairLocation()) {
+ ASSERT(def->representation() == kUnboxedMint);
+ PairLocation* value_pair = AsPairLocation();
+ intptr_t index_lo;
+ intptr_t index_hi;
+
+ if (value_pair->At(0).IsRegister()) {
+ index_lo = cpu_reg_slots[value_pair->At(0).reg()];
+ } else {
+ ASSERT(value_pair->At(0).IsStackSlot());
+ index_lo = value_pair->At(0).stack_index();
+ }
+
+ if (value_pair->At(1).IsRegister()) {
+ index_hi = cpu_reg_slots[value_pair->At(1).reg()];
+ } else {
+ ASSERT(value_pair->At(1).IsStackSlot());
+ index_hi = value_pair->At(1).stack_index();
+ }
+
+ return Location::Pair(Location::StackSlot(index_lo),
+ Location::StackSlot(index_hi));
+ } else if (IsInvalid() && def->IsMaterializeObject()) {
+ def->AsMaterializeObject()->RemapRegisters(cpu_reg_slots, fpu_reg_slots);
+ return *this;
+ }
+
+ return *this;
+}
+
+
void LocationSummary::PrintTo(BufferFormatter* f) const {
if (input_count() > 0) {
f->Print(" (");
« no previous file with comments | « dart/runtime/vm/locations.h ('k') | dart/tests/language/vm/optimized_check_class_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698