Thanks for the patch! I'm waiting with this change since my original change
causes some problems on x64 and I may have to revert it until I fixed it.


Den 1. dec. 2011 14.44 skrev <[email protected]>:

> Reviewers: danno, Paul Lind, kisg, fschneider,
>
> Message:
> Fully building and testing v8 on MIPS requires the following patches to be
> landed:
>
> http://codereview.chromium.**org/8747011/<http://codereview.chromium.org/8747011/>
> http://codereview.chromium.**org/8745012/<http://codereview.chromium.org/8745012/>
> http://codereview.chromium.**org/8743010/<http://codereview.chromium.org/8743010/>
>
>
>
> Description:
> MIPS: Simplify stack check instruction in Crankshaft.
>
> Port r10118 (de832112).
>
> Original commit message:
>
> So far we had two types of stack checks: one used for function entries
> and one used at loop back edges which uses a deferred code object to
> avoid spilling of registers in the loop.
>
> After refactoring lazy deoptimization the first stack check can also
> use deferred code. This change removes the first type of stack check
> instruction in Crankshaft and uses a deferred stack check in all
> places.
>
> BUG=
> TEST=
>
>
> Please review this at 
> http://codereview.chromium.**org/8771005/<http://codereview.chromium.org/8771005/>
>
> Affected files:
>  M src/mips/lithium-codegen-mips.**cc
>  M src/mips/lithium-mips.cc
>
>
> Index: src/mips/lithium-codegen-mips.**cc
> diff --git a/src/mips/lithium-codegen-**mips.cc
> b/src/mips/lithium-codegen-**mips.cc
> index 32e7dc710da2417c900ec556aba486**766a9d0e0c..**
> e0fa7519cb40099c38f50da7fa6794**33f36d5589 100644
> --- a/src/mips/lithium-codegen-**mips.cc
> +++ b/src/mips/lithium-codegen-**mips.cc
> @@ -4520,36 +4520,22 @@ void LCodeGen::DoStackCheck(**LStackCheck* instr)
> {
>     LStackCheck* instr_;
>   };
>
> -  ASSERT(instr->HasEnvironment()**);
> -  LEnvironment* env = instr->environment();
> +  Register scratch = scratch0();
> +  DeferredStackCheck* deferred_stack_check =
> +      new DeferredStackCheck(this, instr);
> +  __ LoadRoot(scratch, Heap::kStackLimitRootIndex);
> +  __ Branch(deferred_stack_check->**entry(), lo, sp, Operand(scratch));
> +  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;
> -    __ LoadRoot(at, Heap::kStackLimitRootIndex);
> -    __ Branch(&done, hs, sp, Operand(at));
> -    StackCheckStub stub;
> -    CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr);
> -    EnsureSpaceForLazyDeopt();
> -    __ bind(&done);
> -    RegisterEnvironmentForDeoptimi**zation(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);
> -    __ LoadRoot(at, Heap::kStackLimitRootIndex);
> -    __ Branch(deferred_stack_check->**entry(), lo, sp, Operand(at));
> -    EnsureSpaceForLazyDeopt();
> -    __ bind(instr->done_label());
> -    deferred_stack_check->SetExit(**instr->done_label());
> -    RegisterEnvironmentForDeoptimi**zation(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();
> +  RegisterEnvironmentForDeoptimi**zation(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.
>  }
>
>
> Index: src/mips/lithium-mips.cc
> diff --git a/src/mips/lithium-mips.cc b/src/mips/lithium-mips.cc
> index 81a193a62f66fb36f3ec6b7d633481**627f02ff49..**
> da7a8e6a9c685b2bf9d42e646df424**6f44b41ae1 100644
> --- a/src/mips/lithium-mips.cc
> +++ b/src/mips/lithium-mips.cc
> @@ -2197,12 +2197,7 @@ LInstruction* LChunkBuilder::DoSimulate(**HSimulate*
> instr) {
>
>
>  LInstruction* LChunkBuilder::DoStackCheck(**HStackCheck* instr) {
> -  if (instr->is_function_entry()) {
> -    return MarkAsCall(new LStackCheck, instr);
> -  } else {
> -    ASSERT(instr->is_backwards_**branch());
> -    return AssignEnvironment(**AssignPointerMap(new LStackCheck));
> -  }
> +  return AssignEnvironment(**AssignPointerMap(new LStackCheck));
>  }
>
>
>
>
>

-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to