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
