Index: src/x64/lithium-codegen-x64.cc |
=================================================================== |
--- src/x64/lithium-codegen-x64.cc (revision 10109) |
+++ src/x64/lithium-codegen-x64.cc (working copy) |
@@ -4261,36 +4261,21 @@ |
LStackCheck* instr_; |
}; |
- ASSERT(instr->HasEnvironment()); |
- LEnvironment* env = instr->environment(); |
+ DeferredStackCheck* deferred_stack_check = |
+ new DeferredStackCheck(this, instr); |
+ __ CompareRoot(rsp, Heap::kStackLimitRootIndex); |
+ __ 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; |
- __ CompareRoot(rsp, Heap::kStackLimitRootIndex); |
- __ j(above_equal, &done, Label::kNear); |
- 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); |
- __ CompareRoot(rsp, Heap::kStackLimitRootIndex); |
- __ 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. |
} |