Reviewers: Lasse Reichstein, Description: X64: implement DoHasCachedArrayIndex in lithium compiler.
Please review this at http://codereview.chromium.org/6596104/ SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/x64/lithium-codegen-x64.cc M src/x64/lithium-x64.cc Index: src/x64/lithium-codegen-x64.cc =================================================================== --- src/x64/lithium-codegen-x64.cc (revision 7013) +++ src/x64/lithium-codegen-x64.cc (working copy) @@ -1632,7 +1632,17 @@ void LCodeGen::DoHasCachedArrayIndex(LHasCachedArrayIndex* instr) { - Abort("Unimplemented: %s", "DoHasCachedArrayIndex"); + Register input = ToRegister(instr->InputAt(0)); + Register result = ToRegister(instr->result()); + + ASSERT(instr->hydrogen()->value()->representation().IsTagged()); + __ LoadRoot(result, Heap::kTrueValueRootIndex); + __ testl(FieldOperand(input, String::kHashFieldOffset), + Immediate(String::kContainsCachedArrayIndexMask)); + NearLabel done; + __ j(not_zero, &done); + __ LoadRoot(result, Heap::kFalseValueRootIndex); + __ bind(&done); } Index: src/x64/lithium-x64.cc =================================================================== --- src/x64/lithium-x64.cc (revision 7010) +++ src/x64/lithium-x64.cc (working copy) @@ -1531,8 +1531,9 @@ LInstruction* LChunkBuilder::DoHasCachedArrayIndex( HHasCachedArrayIndex* instr) { - Abort("Unimplemented: %s", "DoHasCachedArrayIndex"); - return NULL; + ASSERT(instr->value()->representation().IsTagged()); + LOperand* value = UseRegister(instr->value()); + return DefineAsRegister(new LHasCachedArrayIndex(value)); } -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
