| Index: src/arm/codegen-arm.cc
|
| ===================================================================
|
| --- src/arm/codegen-arm.cc (revision 2401)
|
| +++ src/arm/codegen-arm.cc (working copy)
|
| @@ -2421,26 +2421,22 @@
|
| Comment cmnt(masm_, "[ Conditional");
|
| JumpTarget then;
|
| JumpTarget else_;
|
| - JumpTarget exit;
|
| LoadConditionAndSpill(node->condition(), NOT_INSIDE_TYPEOF,
|
| &then, &else_, true);
|
| - if (frame_ != NULL) {
|
| + if (has_valid_frame()) {
|
| Branch(false, &else_);
|
| }
|
| - if (frame_ != NULL || then.is_linked()) {
|
| + if (has_valid_frame() || then.is_linked()) {
|
| then.Bind();
|
| LoadAndSpill(node->then_expression(), typeof_state());
|
| }
|
| - if (frame_ != NULL) {
|
| - exit.Jump();
|
| - }
|
| if (else_.is_linked()) {
|
| + JumpTarget exit;
|
| + if (has_valid_frame()) exit.Jump();
|
| else_.Bind();
|
| LoadAndSpill(node->else_expression(), typeof_state());
|
| + if (exit.is_linked()) exit.Bind();
|
| }
|
| - if (exit.is_linked()) {
|
| - exit.Bind();
|
| - }
|
| ASSERT(frame_->height() == original_height + 1);
|
| }
|
|
|
| @@ -3615,9 +3611,8 @@
|
| false_target(),
|
| true_target(),
|
| true);
|
| - // LoadConditionAndSpill might emit only unconditional jumps to
|
| - // the targets in which case cc_reg_ is not set. When that
|
| - // happens, don't attempt to negate the condition.
|
| + // LoadCondition may (and usually does) leave a test and branch to
|
| + // be emitted by the caller. In that case, negate the condition.
|
| if (has_cc()) cc_reg_ = NegateCondition(cc_reg_);
|
|
|
| } else if (op == Token::DELETE) {
|
|
|