From 0117f823f47539bbbd9a1f931ee76f671fd30df7 Mon Sep 17 00:00:00 2001 From: "vegorov@chromium.org" Date: Tue, 1 Mar 2011 15:41:23 +0000 Subject: [PATCH] Correctly maintain virtual frame in unary operations on ia32. Review URL: http://codereview.chromium.org/6591070 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@7000 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/ia32/codegen-ia32.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ia32/codegen-ia32.cc b/src/ia32/codegen-ia32.cc index 770ec0b..8f15860 100644 --- a/src/ia32/codegen-ia32.cc +++ b/src/ia32/codegen-ia32.cc @@ -8310,6 +8310,7 @@ void CodeGenerator::VisitUnaryOperation(UnaryOperation* node) { switch (op) { case Token::SUB: { __ neg(value.reg()); + frame_->Push(&value); if (node->no_negative_zero()) { // -MIN_INT is MIN_INT with the overflow flag set. unsafe_bailout_->Branch(overflow); @@ -8322,17 +8323,18 @@ void CodeGenerator::VisitUnaryOperation(UnaryOperation* node) { } case Token::BIT_NOT: { __ not_(value.reg()); + frame_->Push(&value); break; } case Token::ADD: { // Unary plus has no effect on int32 values. + frame_->Push(&value); break; } default: UNREACHABLE(); break; } - frame_->Push(&value); } else { Load(node->expression()); bool can_overwrite = node->expression()->ResultOverwriteAllowed(); -- 2.7.4