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