I have LGTMed this (aparently no mail from the code review tool yet). However with this in place you might want to look at http://code.google.com/p/v8/issues/detail?id=1093, as as far as I see support for %_GetCachedArrayIndex is required for %_HasCachedArrayIndex to be used.
/Søren On Mon, Feb 14, 2011 at 13:01, <[email protected]> wrote: > Reviewers: Søren Gjesse, > > Description: > ARM: Implement DoHasCachedArrayIndex and DoHasCachedArrayIndexAndBranch. > > Please review this at http://codereview.chromium.org/6519009/ > > SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge/benchmarks > > Affected files: > M src/arm/lithium-codegen-arm.cc > > > Index: src/arm/lithium-codegen-arm.cc > diff --git a/src/arm/lithium-codegen-arm.cc > b/src/arm/lithium-codegen-arm.cc > index > 057ac241c599653b53ff2ba5036fc4d032f32976..7ed258eb914876c377c0006923750264bdfb87eb > 100644 > --- a/src/arm/lithium-codegen-arm.cc > +++ b/src/arm/lithium-codegen-arm.cc > @@ -1897,13 +1897,32 @@ void > LCodeGen::DoHasInstanceTypeAndBranch(LHasInstanceTypeAndBranch* instr) { > > > void LCodeGen::DoHasCachedArrayIndex(LHasCachedArrayIndex* instr) { > - Abort("DoHasCachedArrayIndex unimplemented."); > + Register input = ToRegister(instr->InputAt(0)); > + Register result = ToRegister(instr->result()); > + Register scratch = scratch0(); > + > + ASSERT(instr->hydrogen()->value()->representation().IsTagged()); > + __ ldr(scratch, > + FieldMemOperand(input, String::kContainsCachedArrayIndexMask)); > + __ tst(scratch, Operand(String::kContainsCachedArrayIndexMask)); > + __ LoadRoot(result, Heap::kTrueValueRootIndex, ne); > + __ LoadRoot(result, Heap::kFalseValueRootIndex, eq); > } > > > void LCodeGen::DoHasCachedArrayIndexAndBranch( > LHasCachedArrayIndexAndBranch* instr) { > - Abort("DoHasCachedArrayIndexAndBranch unimplemented."); > + Register input = ToRegister(instr->InputAt(0)); > + Register scratch = scratch0(); > + > + int true_block = chunk_->LookupDestination(instr->true_block_id()); > + int false_block = chunk_->LookupDestination(instr->false_block_id()); > + > + ASSERT(instr->hydrogen()->value()->representation().IsTagged()); > + __ ldr(scratch, > + FieldMemOperand(input, String::kContainsCachedArrayIndexMask)); > + __ tst(scratch, Operand(String::kContainsCachedArrayIndexMask)); > + EmitBranch(true_block, false_block, ne); > } > > > > > -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
