Index: src/ia32/lithium-codegen-ia32.cc |
=================================================================== |
--- src/ia32/lithium-codegen-ia32.cc (revision 10109) |
+++ src/ia32/lithium-codegen-ia32.cc (working copy) |
@@ -4554,43 +4554,23 @@ |
LStackCheck* instr_; |
}; |
- ASSERT(instr->HasEnvironment()); |
- LEnvironment* env = instr->environment(); |
+ DeferredStackCheck* deferred_stack_check = |
+ new DeferredStackCheck(this, instr); |
+ ExternalReference stack_limit = |
+ ExternalReference::address_of_stack_limit(isolate()); |
+ __ cmp(esp, Operand::StaticVariable(stack_limit)); |
+ __ j(below, deferred_stack_check->entry()); |
+ EnsureSpaceForLazyDeopt(); |
+ __ bind(instr->done_label()); |
+ deferred_stack_check->SetExit(instr->done_label()); |
// There is no LLazyBailout instruction for stack-checks. We have to |
// prepare for lazy deoptimization explicitly here. |
- if (instr->hydrogen()->is_function_entry()) { |
- // Perform stack overflow check. |
- Label done; |
- ExternalReference stack_limit = |
- ExternalReference::address_of_stack_limit(isolate()); |
- __ cmp(esp, Operand::StaticVariable(stack_limit)); |
- __ j(above_equal, &done, Label::kNear); |
- |
- ASSERT(instr->context()->IsRegister()); |
- ASSERT(ToRegister(instr->context()).is(esi)); |
- StackCheckStub stub; |
- CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); |
- EnsureSpaceForLazyDeopt(); |
- __ bind(&done); |
- RegisterEnvironmentForDeoptimization(env, Safepoint::kLazyDeopt); |
- safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index()); |
- } else { |
- ASSERT(instr->hydrogen()->is_backwards_branch()); |
- // Perform stack overflow check if this goto needs it before jumping. |
- DeferredStackCheck* deferred_stack_check = |
- new DeferredStackCheck(this, instr); |
- ExternalReference stack_limit = |
- ExternalReference::address_of_stack_limit(isolate()); |
- __ cmp(esp, Operand::StaticVariable(stack_limit)); |
- __ j(below, deferred_stack_check->entry()); |
- EnsureSpaceForLazyDeopt(); |
- __ bind(instr->done_label()); |
- deferred_stack_check->SetExit(instr->done_label()); |
- RegisterEnvironmentForDeoptimization(env, Safepoint::kLazyDeopt); |
- // Don't record a deoptimization index for the safepoint here. |
- // This will be done explicitly when emitting call and the safepoint in |
- // the deferred code. |
- } |
+ ASSERT(instr->HasEnvironment()); |
+ LEnvironment* env = instr->environment(); |
+ RegisterEnvironmentForDeoptimization(env, Safepoint::kLazyDeopt); |
+ // Don't record a deoptimization index for the safepoint here. |
+ // This will be done explicitly when emitting call and the safepoint in |
+ // the deferred code. |
} |