Author: [EMAIL PROTECTED]
Date: Tue Nov 18 00:07:06 2008
New Revision: 780
Modified:
branches/experimental/toiger/src/virtual-frame-arm.cc
branches/experimental/toiger/src/virtual-frame-arm.h
branches/experimental/toiger/src/virtual-frame-ia32.cc
branches/experimental/toiger/src/virtual-frame-ia32.h
Log:
Simplify virtual frame by removing the virtual stack pointer, which
can be derived from the backing store's length.
Review URL: http://codereview.chromium.org/11406
Modified: branches/experimental/toiger/src/virtual-frame-arm.cc
==============================================================================
--- branches/experimental/toiger/src/virtual-frame-arm.cc (original)
+++ branches/experimental/toiger/src/virtual-frame-arm.cc Tue Nov 18
00:07:06 2008
@@ -41,10 +41,9 @@
VirtualFrame::VirtualFrame(CodeGenerator* cgen)
: masm_(cgen->masm()),
elements_(0),
- virtual_stack_pointer_(-1),
- virtual_frame_pointer_(-1),
parameter_count_(cgen->scope()->num_parameters()),
- local_count_(0) {
+ local_count_(0),
+ frame_pointer_(-1) {
// The virtual frame contains a receiver and the parameters (all in
// memory) when it is created.
Adjust(parameter_count_ + 1);
@@ -54,12 +53,11 @@
VirtualFrame::VirtualFrame(VirtualFrame* original)
: masm_(original->masm_),
elements_(original->elements_.length()),
- virtual_stack_pointer_(original->virtual_stack_pointer_),
- virtual_frame_pointer_(original->virtual_frame_pointer_),
parameter_count_(original->parameter_count_),
- local_count_(original->local_count_) {
+ local_count_(original->local_count_),
+ frame_pointer_(original->frame_pointer_) {
// Copy all the elements.
- for (int i = 0; i <= virtual_stack_pointer_; i++) {
+ for (int i = 0; i < original->elements_.length(); i++) {
elements_.Add(original->elements_[i]);
}
}
@@ -68,16 +66,16 @@
void VirtualFrame::Adjust(int count) {
ASSERT(count >= 0);
for (int i = 0; i < count; i++) {
- AddElement(Element());
+ elements_.Add(Element());
}
}
void VirtualFrame::Forget(int count) {
ASSERT(count >= 0);
- ASSERT(virtual_stack_pointer_ >= count);
+ ASSERT(elements_.length() >= count);
for (int i = 0; i < count; i++) {
- RemoveElement();
+ elements_.RemoveLast();
}
}
@@ -85,11 +83,10 @@
void VirtualFrame::MergeTo(VirtualFrame* expected) {
ASSERT(masm_ == expected->masm_);
ASSERT(elements_.length() == expected->elements_.length());
- ASSERT(virtual_frame_pointer_ == expected->virtual_frame_pointer_);
- ASSERT(virtual_stack_pointer_ == expected->virtual_stack_pointer_);
ASSERT(parameter_count_ == expected->parameter_count_);
ASSERT(local_count_ == expected->local_count_);
- for (int i = 0; i <= virtual_stack_pointer_; i++) {
+ ASSERT(frame_pointer_ == expected->frame_pointer_);
+ for (int i = 0; i < elements_.length(); i++) {
ASSERT(elements_[i].matches(expected->elements_[i]));
}
}
@@ -111,10 +108,11 @@
}
#endif // DEBUG
+ // We are about to push four values to the frame.
Adjust(4);
__ stm(db_w, sp, r1.bit() | cp.bit() | fp.bit() | lr.bit());
// Adjust FP to point to saved FP.
- virtual_frame_pointer_ = virtual_stack_pointer_ - 1;
+ frame_pointer_ = elements_.length() - 2;
__ add(fp, sp, Operand(2 * kPointerSize));
}
Modified: branches/experimental/toiger/src/virtual-frame-arm.h
==============================================================================
--- branches/experimental/toiger/src/virtual-frame-arm.h (original)
+++ branches/experimental/toiger/src/virtual-frame-arm.h Tue Nov 18
00:07:06 2008
@@ -67,7 +67,7 @@
explicit VirtualFrame(VirtualFrame* original);
int height() const {
- return virtual_stack_pointer_ - expression_base_index() + 1;
+ return elements_.length() - expression_base_index();
}
// Add extra in-memory elements to the top of the frame without
generating
@@ -172,15 +172,12 @@
List<Element> elements_;
- // The virtual stack pointer is the index of the top element of the
stack.
- int virtual_stack_pointer_;
-
- int virtual_frame_pointer_;
-
// The number of frame-allocated locals and parameters respectively.
int parameter_count_;
int local_count_;
+ int frame_pointer_;
+
// The index of the first parameter. The receiver lies below the first
// parameter.
int param0_index() const { return 1; }
@@ -192,16 +189,6 @@
// The index of the base of the expression stack.
int expression_base_index() const { return local0_index() +
local_count_; }
-
- void AddElement(const Element& element) {
- virtual_stack_pointer_++;
- elements_.Add(element);
- }
-
- Element RemoveElement() {
- virtual_stack_pointer_--;
- return elements_.RemoveLast();
- }
};
Modified: branches/experimental/toiger/src/virtual-frame-ia32.cc
==============================================================================
--- branches/experimental/toiger/src/virtual-frame-ia32.cc (original)
+++ branches/experimental/toiger/src/virtual-frame-ia32.cc Tue Nov 18
00:07:06 2008
@@ -41,10 +41,9 @@
VirtualFrame::VirtualFrame(CodeGenerator* cgen)
: masm_(cgen->masm()),
elements_(0),
- virtual_stack_pointer_(-1),
- virtual_frame_pointer_(-1),
parameter_count_(cgen->scope()->num_parameters()),
- local_count_(0) {
+ local_count_(0),
+ frame_pointer_(-1) {
// The virtual frame contains a receiver, the parameters, and a return
// address (all in memory) when it is created.
Adjust(parameter_count_ + 2);
@@ -54,12 +53,11 @@
VirtualFrame::VirtualFrame(VirtualFrame* original)
: masm_(original->masm_),
elements_(original->elements_.length()),
- virtual_stack_pointer_(original->virtual_stack_pointer_),
- virtual_frame_pointer_(original->virtual_frame_pointer_),
parameter_count_(original->parameter_count_),
- local_count_(original->local_count_) {
+ local_count_(original->local_count_),
+ frame_pointer_(original->frame_pointer_) {
// Copy all the elements.
- for (int i = 0; i <= virtual_stack_pointer_; i++) {
+ for (int i = 0; i < original->elements_.length(); i++) {
elements_.Add(original->elements_[i]);
}
}
@@ -68,16 +66,16 @@
void VirtualFrame::Adjust(int count) {
ASSERT(count >= 0);
for (int i = 0; i < count; i++) {
- AddElement(Element());
+ elements_.Add(Element());
}
}
void VirtualFrame::Forget(int count) {
ASSERT(count >= 0);
- ASSERT(virtual_stack_pointer_ >= count);
+ ASSERT(elements_.length() >= count);
for (int i = 0; i < count; i++) {
- RemoveElement();
+ elements_.RemoveLast();
}
}
@@ -85,11 +83,10 @@
void VirtualFrame::MergeTo(VirtualFrame* expected) {
ASSERT(masm_ == expected->masm_);
ASSERT(elements_.length() == expected->elements_.length());
- ASSERT(virtual_frame_pointer_ == expected->virtual_frame_pointer_);
- ASSERT(virtual_stack_pointer_ == expected->virtual_stack_pointer_);
ASSERT(parameter_count_ == expected->parameter_count_);
ASSERT(local_count_ == expected->local_count_);
- for (int i = 0; i <= virtual_stack_pointer_; i++) {
+ ASSERT(frame_pointer_ == expected->frame_pointer_);
+ for (int i = 0; i < elements_.length(); i++) {
ASSERT(elements_[i].matches(expected->elements_[i]));
}
}
@@ -100,7 +97,7 @@
Adjust(1);
__ push(ebp);
- virtual_frame_pointer_ = virtual_stack_pointer_;
+ frame_pointer_ = elements_.length() - 1;
__ mov(ebp, Operand(esp));
// Store the context and the function in the frame.
Modified: branches/experimental/toiger/src/virtual-frame-ia32.h
==============================================================================
--- branches/experimental/toiger/src/virtual-frame-ia32.h (original)
+++ branches/experimental/toiger/src/virtual-frame-ia32.h Tue Nov 18
00:07:06 2008
@@ -68,7 +68,7 @@
// The height of the virtual expression stack.
int height() const {
- return virtual_stack_pointer_ - expression_base_index() + 1;
+ return elements_.length() - expression_base_index();
}
// Add extra in-memory elements to the top of the frame without
generating
@@ -179,14 +179,11 @@
List<Element> elements_;
- // The virtual stack pointer is the index of the top element of the
stack.
- int virtual_stack_pointer_;
-
- int virtual_frame_pointer_;
-
int parameter_count_;
int local_count_;
+ int frame_pointer_;
+
// The index of the first parameter. The receiver lies below the first
// parameter.
int param0_index() const { return 1; }
@@ -198,16 +195,6 @@
// The index of the base of the expression stack.
int expression_base_index() const { return local0_index() +
local_count_; }
-
- void AddElement(const Element& element) {
- virtual_stack_pointer_++;
- elements_.Add(element);
- }
-
- Element RemoveElement() {
- virtual_stack_pointer_--;
- return elements_.RemoveLast();
- }
};
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---