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
-~----------~----~----~----~------~----~------~--~---

Reply via email to