| Index: src/arm/lithium-arm.cc
|
| ===================================================================
|
| --- src/arm/lithium-arm.cc (revision 7030)
|
| +++ src/arm/lithium-arm.cc (working copy)
|
| @@ -655,16 +655,16 @@
|
|
|
| LInstruction* LChunkBuilder::SetInstructionPendingDeoptimizationEnvironment(
|
| LInstruction* instr, int ast_id) {
|
| - ASSERT(instructions_pending_deoptimization_environment_ == NULL);
|
| + ASSERT(instruction_pending_deoptimization_environment_ == NULL);
|
| ASSERT(pending_deoptimization_ast_id_ == AstNode::kNoNumber);
|
| - instructions_pending_deoptimization_environment_ = instr;
|
| + instruction_pending_deoptimization_environment_ = instr;
|
| pending_deoptimization_ast_id_ = ast_id;
|
| return instr;
|
| }
|
|
|
|
|
| void LChunkBuilder::ClearInstructionPendingDeoptimizationEnvironment() {
|
| - instructions_pending_deoptimization_environment_ = NULL;
|
| + instruction_pending_deoptimization_environment_ = NULL;
|
| pending_deoptimization_ast_id_ = AstNode::kNoNumber;
|
| }
|
|
|
| @@ -1028,8 +1028,8 @@
|
| } else if (v->IsInstanceOf()) {
|
| HInstanceOf* instance_of = HInstanceOf::cast(v);
|
| LInstruction* result =
|
| - new LInstanceOfAndBranch(Use(instance_of->left()),
|
| - Use(instance_of->right()));
|
| + new LInstanceOfAndBranch(UseFixed(instance_of->left(), r0),
|
| + UseFixed(instance_of->right(), r1));
|
| return MarkAsCall(result, instr);
|
| } else if (v->IsTypeofIs()) {
|
| HTypeofIs* typeof_is = HTypeofIs::cast(v);
|
| @@ -1463,6 +1463,13 @@
|
| }
|
|
|
|
|
| +LInstruction* LChunkBuilder::DoAbnormalExit(HAbnormalExit* instr) {
|
| + // The control instruction marking the end of a block that completed
|
| + // abruptly (e.g., threw an exception). There is nothing specific to do.
|
| + return NULL;
|
| +}
|
| +
|
| +
|
| LInstruction* LChunkBuilder::DoThrow(HThrow* instr) {
|
| LOperand* value = UseFixed(instr->value(), r0);
|
| return MarkAsCall(new LThrow(value), instr);
|
| @@ -1602,7 +1609,14 @@
|
|
|
|
|
| LInstruction* LChunkBuilder::DoStoreGlobal(HStoreGlobal* instr) {
|
| - return new LStoreGlobal(UseRegisterAtStart(instr->value()));
|
| + if (instr->check_hole_value()) {
|
| + LOperand* temp = TempRegister();
|
| + LOperand* value = UseRegister(instr->value());
|
| + return AssignEnvironment(new LStoreGlobal(value, temp));
|
| + } else {
|
| + LOperand* value = UseRegisterAtStart(instr->value());
|
| + return new LStoreGlobal(value, NULL);
|
| + }
|
| }
|
|
|
|
|
| @@ -1830,7 +1844,7 @@
|
| if (pending_deoptimization_ast_id_ == instr->ast_id()) {
|
| LInstruction* result = new LLazyBailout;
|
| result = AssignEnvironment(result);
|
| - instructions_pending_deoptimization_environment_->
|
| + instruction_pending_deoptimization_environment_->
|
| set_deoptimization_environment(result->environment());
|
| ClearInstructionPendingDeoptimizationEnvironment();
|
| return result;
|
|
|