Reviewers: Kevin Millikin, Message: A tiny review for you. Separate spilled scopes for unary operations.
Description: Make separate spilled scopes for each unary operation. Please review this at http://codereview.chromium.org/18307 SVN Base: http://v8.googlecode.com/svn/branches/experimental/toiger/ Affected files: M src/codegen-ia32.cc Index: src/codegen-ia32.cc =================================================================== --- src/codegen-ia32.cc (revision 1089) +++ src/codegen-ia32.cc (working copy) @@ -3763,7 +3763,6 @@ void CodeGenerator::VisitUnaryOperation(UnaryOperation* node) { - VirtualFrame::SpilledScope spilled_scope(this); // Note that because of NOT and an optimization in comparison of a typeof // expression to a literal string, this function can fail to leave a value // on top of the frame or in the cc register. @@ -3772,11 +3771,13 @@ Token::Value op = node->op(); if (op == Token::NOT) { + VirtualFrame::SpilledScope spilled_scope(this); LoadConditionAndSpill(node->expression(), NOT_INSIDE_TYPEOF, false_target(), true_target(), true); cc_reg_ = NegateCondition(cc_reg_); } else if (op == Token::DELETE) { + VirtualFrame::SpilledScope spilled_scope(this); Property* property = node->expression()->AsProperty(); if (property != NULL) { LoadAndSpill(property->obj()); @@ -3820,6 +3821,7 @@ } } else if (op == Token::TYPEOF) { + VirtualFrame::SpilledScope spilled_scope(this); // Special case for loading the typeof expression; see comment on // LoadTypeofExpression(). LoadTypeofExpression(node->expression()); @@ -3827,7 +3829,7 @@ frame_->EmitPush(eax); } else { - LoadAndSpill(node->expression()); + Load(node->expression()); switch (op) { case Token::NOT: case Token::DELETE: @@ -3836,6 +3838,7 @@ break; case Token::SUB: { + VirtualFrame::SpilledScope spilled_scope(this); UnarySubStub stub; // TODO(1222589): remove dependency of TOS being cached inside stub frame_->EmitPop(eax); @@ -3845,6 +3848,7 @@ } case Token::BIT_NOT: { + VirtualFrame::SpilledScope spilled_scope(this); // Smi check. JumpTarget smi_label(this); JumpTarget continue_label(this); @@ -3864,11 +3868,14 @@ break; } - case Token::VOID: + case Token::VOID: { + VirtualFrame::SpilledScope spilled_scope(this); __ mov(frame_->Top(), Factory::undefined_value()); break; + } case Token::ADD: { + VirtualFrame::SpilledScope spilled_scope(this); // Smi check. JumpTarget continue_label(this); frame_->EmitPop(eax); --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
