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

Reply via email to