Reviewers: Erik Corry,

Message:
Small patch to check if I understood correctly. If it is OK more will follow.


Description:
Partial and small update to the codegen to use the new regiter allocator
framework.

BUG=None
TEST=None


Please review this at http://codereview.chromium.org/1732024/show

SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/

Affected files:
  M     src/arm/codegen-arm.cc


Index: src/arm/codegen-arm.cc
===================================================================
--- src/arm/codegen-arm.cc      (revision 4551)
+++ src/arm/codegen-arm.cc      (working copy)
@@ -1563,14 +1563,18 @@


 void CodeGenerator::DeclareGlobals(Handle<FixedArray> pairs) {
-  VirtualFrame::SpilledScope spilled_scope(frame_);
   frame_->EmitPush(cp);
-  __ mov(r0, Operand(pairs));
-  frame_->EmitPush(r0);
-  __ mov(r0, Operand(Smi::FromInt(is_eval() ? 1 : 0)));
-  frame_->EmitPush(r0);
-  frame_->CallRuntime(Runtime::kDeclareGlobals, 3);
-  // The result is discarded.
+  Register reg = frame_->GetTOSRegister();
+  __ mov(reg, Operand(pairs));
+  frame_->EmitPush(reg);
+  reg = frame_->GetTOSRegister();
+  __ mov(reg, Operand(Smi::FromInt(is_eval() ? 1 : 0)));
+  frame_->EmitPush(reg);
+  {
+    VirtualFrame::SpilledScope spilled_scope(frame_);
+    frame_->CallRuntime(Runtime::kDeclareGlobals, 3);
+    // The result is discarded.
+  }
 }


@@ -1578,7 +1582,6 @@
 #ifdef DEBUG
   int original_height = frame_->height();
 #endif
-  VirtualFrame::SpilledScope spilled_scope(frame_);
   Comment cmnt(masm_, "[ Declaration");
   Variable* var = node->proxy()->var();
   ASSERT(var != NULL);  // must have been resolved
@@ -1593,28 +1596,36 @@
     ASSERT(var->is_dynamic());
     // For now, just do a runtime call.
     frame_->EmitPush(cp);
-    __ mov(r0, Operand(var->name()));
-    frame_->EmitPush(r0);
+    Register reg = frame_->GetTOSRegister();
+    __ mov(reg, Operand(var->name()));
+    frame_->EmitPush(reg);
     // Declaration nodes are always declared in only two modes.
ASSERT(node->mode() == Variable::VAR || node->mode() == Variable::CONST); PropertyAttributes attr = node->mode() == Variable::VAR ? NONE : READ_ONLY;
-    __ mov(r0, Operand(Smi::FromInt(attr)));
-    frame_->EmitPush(r0);
+    reg = frame_->GetTOSRegister();
+    __ mov(reg, Operand(Smi::FromInt(attr)));
+    frame_->EmitPush(reg);
     // Push initial value, if any.
     // Note: For variables we must not push an initial value (such as
     // 'undefined') because we may have a (legal) redeclaration and we
     // must not destroy the current value.
     if (node->mode() == Variable::CONST) {
-      __ LoadRoot(r0, Heap::kTheHoleValueRootIndex);
-      frame_->EmitPush(r0);
+      reg = frame_->GetTOSRegister();
+      __ LoadRoot(reg, Heap::kTheHoleValueRootIndex);
+      frame_->EmitPush(reg);
     } else if (node->fun() != NULL) {
+      VirtualFrame::SpilledScope spilled_scope(frame_);
       LoadAndSpill(node->fun());
     } else {
-      __ mov(r0, Operand(0));  // no initial value!
-      frame_->EmitPush(r0);
+      reg = frame_->GetTOSRegister();
+      __ mov(reg, Operand(0));  // no initial value!
+      frame_->EmitPush(reg);
     }
-    frame_->CallRuntime(Runtime::kDeclareContextSlot, 4);
-    // Ignore the return value (declarations are statements).
+    {
+      VirtualFrame::SpilledScope spilled_scope(frame_);
+      frame_->CallRuntime(Runtime::kDeclareContextSlot, 4);
+      // Ignore the return value (declarations are statements).
+    }
     ASSERT(frame_->height() == original_height);
     return;
   }
@@ -1631,6 +1642,7 @@

   if (val != NULL) {
     {
+      VirtualFrame::SpilledScope spilled_scope(frame_);
       // Set initial value.
       Reference target(this, node->proxy());
       LoadAndSpill(val);


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to