Chromium Code Reviews| Index: src/virtual-frame-ia32.cc |
| =================================================================== |
| --- src/virtual-frame-ia32.cc (revision 1075) |
| +++ src/virtual-frame-ia32.cc (working copy) |
| @@ -309,16 +309,6 @@ |
| void VirtualFrame::MakeMergable() { |
| Comment cmnt(masm_, "[ Make frame mergable"); |
| - // We can call MakeMergable on a frame that is not the code generator's |
| - // current frame, which will leave the global register counts out of sync |
| - // with the frame. We simply save the current frame and restore it at the |
| - // end of this function. We should find a better way to deal with this. |
| - VirtualFrame* original_frame = cgen_->frame(); |
| - RegisterFile non_frame_registers; |
| - non_frame_registers.Use(esi); |
| - non_frame_registers.Use(ebp); |
| - non_frame_registers.Use(esp); |
| - cgen_->SetFrame(this, &non_frame_registers); |
|
William Hesse
2009/01/15 12:21:54
Can you put an assert in, that the frame is its cg
Kevin Millikin (Chromium)
2009/01/15 13:08:18
Done.
|
| ASSERT(cgen_->HasValidEntryRegisters()); |
| // Remove constants from the frame and ensure that no registers are |
| @@ -392,7 +382,6 @@ |
| delete[] new_elements; |
| ASSERT(cgen_->HasValidEntryRegisters()); |
| - cgen_->SetFrame(original_frame, &non_frame_registers); |
| } |
| @@ -426,6 +415,7 @@ |
| ASSERT(!elements_[i].is_synced()); |
| } |
| #endif |
| + ASSERT(!cgen_->has_cc()); |
| __ add(Operand(esp), Immediate(height_difference * kPointerSize)); |
| stack_pointer_ = expected->stack_pointer_; |
| } else if (stack_pointer_ < expected->stack_pointer_) { |
| @@ -563,10 +553,11 @@ |
| ASSERT(!elements_[j].is_memory()); |
| } |
| #endif |
| - __ add(Operand(esp), |
| - Immediate((stack_pointer_ - i) * kPointerSize)); |
| + int difference = stack_pointer_ - i; |
| + ASSERT(!cgen_->has_cc()); |
| + __ add(Operand(esp), Immediate(difference * kPointerSize)); |
| stack_pointer_ = i; |
| - } |
| + } |
| stack_pointer_--; |
| __ pop(target.reg()); |
| } |
| @@ -938,6 +929,7 @@ |
| if (num_virtual_elements < count) { |
| int num_dropped = count - num_virtual_elements; |
| stack_pointer_ -= num_dropped; |
| + ASSERT(!cgen_->has_cc()); |
| __ add(Operand(esp), Immediate(num_dropped * kPointerSize)); |
| } |
| @@ -958,6 +950,7 @@ |
| if (popped.is_constant()) { |
| if (pop_needed) { |
| stack_pointer_--; |
| + ASSERT(!cgen_->has_cc()); |
| __ add(Operand(esp), Immediate(kPointerSize)); |
| } |
| return Result(popped.handle(), cgen_); |
| @@ -965,6 +958,7 @@ |
| Unuse(popped.reg()); |
| if (pop_needed) { |
| stack_pointer_--; |
| + ASSERT(!cgen_->has_cc()); |
| __ add(Operand(esp), Immediate(kPointerSize)); |
| } |
| return Result(popped.reg(), cgen_); |