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

Unified Diff: src/virtual-frame.cc

Issue 53005: Add pointers to a VirtualFrame that keep track of the indexes of register... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/jump-target.cc ('k') | src/virtual-frame-arm.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/virtual-frame.cc
===================================================================
--- src/virtual-frame.cc (revision 1589)
+++ src/virtual-frame.cc (working copy)
@@ -63,6 +63,9 @@
for (int i = 0; i < original->elements_.length(); i++) {
elements_.Add(original->elements_[i]);
}
+ for (int i = 0; i < kNumRegisters; i++) {
+ register_locations_[i] = original->register_locations_[i];
+ }
}
@@ -150,19 +153,26 @@
Unuse(last.reg());
} else {
frame_registers_.Unuse(last.reg());
+ register_locations_[last.reg().code()] = kIllegalIndex;
}
}
}
}
-void VirtualFrame::Use(Register reg) {
+void VirtualFrame::Use(Register reg, int index) {
+ ASSERT(frame_registers_.count(reg) == 0);
+ ASSERT(register_locations_[reg.code()] == kIllegalIndex);
+ register_locations_[reg.code()] = index;
frame_registers_.Use(reg);
cgen_->allocator()->Use(reg);
}
void VirtualFrame::Unuse(Register reg) {
+ ASSERT(frame_registers_.count(reg) == 1);
+ ASSERT(register_locations_[reg.code()] != kIllegalIndex);
+ register_locations_[reg.code()] = kIllegalIndex;
frame_registers_.Unuse(reg);
cgen_->allocator()->Unuse(reg);
}
@@ -270,6 +280,7 @@
Unuse(source.reg());
} else {
frame_registers_.Unuse(source.reg());
+ register_locations_[source.reg().code()] = kIllegalIndex;
}
}
elements_[i] = target;
@@ -382,7 +393,7 @@
// There are two cases depending no whether the register already
// occurs in the frame or not.
if (register_count(value->reg()) == 0) {
- Use(value->reg());
+ Use(value->reg(), frame_index);
elements_[frame_index] =
FrameElement::RegisterElement(value->reg(),
FrameElement::NOT_SYNCED);
@@ -408,6 +419,7 @@
elements_[i].set_sync();
}
elements_[frame_index].clear_sync();
+ register_locations_[value->reg().code()] = frame_index;
for (int j = i + 1; j < elements_.length(); j++) {
if (elements_[j].is_copy() && elements_[j].index() == i) {
elements_[j].set_index(frame_index);
@@ -487,7 +499,7 @@
void VirtualFrame::Push(Register reg) {
FrameElement new_element;
if (register_count(reg) == 0) {
- Use(reg);
+ Use(reg, elements_.length());
new_element =
FrameElement::RegisterElement(reg, FrameElement::NOT_SYNCED);
} else {
@@ -560,6 +572,9 @@
if (frame_registers_.count(i) != other->frame_registers_.count(i)) {
return false;
}
+ if (register_locations_[i] != other->register_locations_[i]) {
+ return false;
+ }
}
if (elements_.length() != other->elements_.length()) return false;
#endif
« no previous file with comments | « src/jump-target.cc ('k') | src/virtual-frame-arm.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698