Index: src/virtual-frame.cc |
=================================================================== |
--- src/virtual-frame.cc (revision 2055) |
+++ src/virtual-frame.cc (working copy) |
@@ -38,7 +38,7 @@ |
// When cloned, a frame is a deep copy of the original. |
VirtualFrame::VirtualFrame(VirtualFrame* original) |
- : elements_(original->elements_.length()), |
+ : elements_(original->element_count()), |
stack_pointer_(original->stack_pointer_) { |
elements_.AddAll(original->elements_); |
// Copy register locations from original. |
@@ -50,7 +50,7 @@ |
FrameElement VirtualFrame::CopyElementAt(int index) { |
ASSERT(index >= 0); |
- ASSERT(index < elements_.length()); |
+ ASSERT(index < element_count()); |
FrameElement target = elements_[index]; |
FrameElement result; |
@@ -96,7 +96,7 @@ |
// pushing an exception handler). No code is emitted. |
void VirtualFrame::Adjust(int count) { |
ASSERT(count >= 0); |
- ASSERT(stack_pointer_ == elements_.length() - 1); |
+ ASSERT(stack_pointer_ == element_count() - 1); |
for (int i = 0; i < count; i++) { |
elements_.Add(FrameElement::MemoryElement()); |
@@ -107,7 +107,7 @@ |
void VirtualFrame::ForgetElements(int count) { |
ASSERT(count >= 0); |
- ASSERT(elements_.length() >= count); |
+ ASSERT(element_count() >= count); |
for (int i = 0; i < count; i++) { |
FrameElement last = elements_.RemoveLast(); |
@@ -118,7 +118,7 @@ |
if (cgen()->frame() == this) { |
Unuse(last.reg()); |
} else { |
- register_locations_[last.reg().code()] = kIllegalIndex; |
+ set_register_location(last.reg(), kIllegalIndex); |
} |
} |
} |
@@ -127,14 +127,13 @@ |
// If there are any registers referenced only by the frame, spill one. |
Register VirtualFrame::SpillAnyRegister() { |
- // Find the leftmost (ordered by register code) register whose only |
+ // Find the leftmost (ordered by register number) register whose only |
// reference is in the frame. |
- for (int i = 0; i < kNumRegisters; i++) { |
+ for (int i = 0; i < RegisterAllocator::kNumRegisters; i++) { |
if (is_used(i) && cgen()->allocator()->count(i) == 1) { |
- Register result = { i }; |
- Spill(result); |
- ASSERT(!cgen()->allocator()->is_used(result)); |
- return result; |
+ SpillElementAt(register_location(i)); |
+ ASSERT(!cgen()->allocator()->is_used(i)); |
+ return RegisterAllocator::ToRegister(i); |
} |
} |
return no_reg; |
@@ -173,7 +172,7 @@ |
// Make the type of all elements be MEMORY. |
void VirtualFrame::SpillAll() { |
- for (int i = 0; i < elements_.length(); i++) { |
+ for (int i = 0; i < element_count(); i++) { |
SpillElementAt(i); |
} |
} |
@@ -183,7 +182,7 @@ |
// Perform state changes on this frame that will make merge to the |
// expected frame simpler or else increase the likelihood that his |
// frame will match another. |
- for (int i = 0; i < elements_.length(); i++) { |
+ for (int i = 0; i < element_count(); i++) { |
FrameElement source = elements_[i]; |
FrameElement target = expected->elements_[i]; |
@@ -200,7 +199,7 @@ |
if (cgen()->frame() == this) { |
Unuse(source.reg()); |
} else { |
- register_locations_[source.reg().code()] = kIllegalIndex; |
+ set_register_location(source.reg(), kIllegalIndex); |
} |
} |
elements_[i] = target; |
@@ -224,16 +223,16 @@ |
ASSERT(height() >= spilled_args); |
ASSERT(dropped_args <= spilled_args); |
- SyncRange(0, elements_.length() - 1); |
+ SyncRange(0, element_count() - 1); |
// Spill registers. |
- for (int i = 0; i < kNumRegisters; i++) { |
+ for (int i = 0; i < RegisterAllocator::kNumRegisters; i++) { |
if (is_used(i)) { |
- SpillElementAt(register_locations_[i]); |
+ SpillElementAt(register_location(i)); |
} |
} |
// Spill the arguments. |
- for (int i = elements_.length() - spilled_args; i < elements_.length(); i++) { |
+ for (int i = element_count() - spilled_args; i < element_count(); i++) { |
if (!elements_[i].is_memory()) { |
SpillElementAt(i); |
} |
@@ -257,9 +256,9 @@ |
void VirtualFrame::SetElementAt(int index, Result* value) { |
- int frame_index = elements_.length() - index - 1; |
+ int frame_index = element_count() - index - 1; |
ASSERT(frame_index >= 0); |
- ASSERT(frame_index < elements_.length()); |
+ ASSERT(frame_index < element_count()); |
ASSERT(value->is_valid()); |
FrameElement original = elements_[frame_index]; |
@@ -283,7 +282,7 @@ |
// The register already appears on the frame. Either the existing |
// register element, or the new element at frame_index, must be made |
// a copy. |
- int i = register_index(value->reg()); |
+ int i = register_location(value->reg()); |
ASSERT(value->static_type() == elements_[i].static_type()); |
if (i < frame_index) { |
@@ -299,8 +298,8 @@ |
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++) { |
+ set_register_location(value->reg(), frame_index); |
+ for (int j = i + 1; j < element_count(); j++) { |
if (elements_[j].is_copy() && elements_[j].index() == i) { |
elements_[j].set_index(frame_index); |
} |
@@ -331,12 +330,12 @@ |
void VirtualFrame::Push(Register reg, StaticType static_type) { |
if (is_used(reg)) { |
- int index = register_index(reg); |
+ int index = register_location(reg); |
FrameElement element = CopyElementAt(index); |
ASSERT(static_type.merge(element.static_type()) == element.static_type()); |
elements_.Add(element); |
} else { |
- Use(reg, elements_.length()); |
+ Use(reg, element_count()); |
FrameElement element = |
FrameElement::RegisterElement(reg, |
FrameElement::NOT_SYNCED, |
@@ -366,15 +365,15 @@ |
bool VirtualFrame::Equals(VirtualFrame* other) { |
#ifdef DEBUG |
- for (int i = 0; i < kNumRegisters; i++) { |
- if (register_locations_[i] != other->register_locations_[i]) { |
+ for (int i = 0; i < RegisterAllocator::kNumRegisters; i++) { |
+ if (register_location(i) != other->register_location(i)) { |
return false; |
} |
} |
- if (elements_.length() != other->elements_.length()) return false; |
+ if (element_count() != other->element_count()) return false; |
#endif |
if (stack_pointer_ != other->stack_pointer_) return false; |
- for (int i = 0; i < elements_.length(); i++) { |
+ for (int i = 0; i < element_count(); i++) { |
if (!elements_[i].Equals(other->elements_[i])) return false; |
} |