Reviewers: William Hesse, Description: X64: Implement DoHasInstanceType
Please review this at http://codereview.chromium.org/6581036/ 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 6934) +++ src/x64/lithium-codegen-x64.cc (working copy) @@ -1579,7 +1579,20 @@ void LCodeGen::DoHasInstanceType(LHasInstanceType* instr) { - Abort("Unimplemented: %s", "DoHasInstanceType"); + Register input = ToRegister(instr->InputAt(0)); + Register result = ToRegister(instr->result()); + + ASSERT(instr->hydrogen()->value()->representation().IsTagged()); + __ testl(input, Immediate(kSmiTagMask)); + NearLabel done, is_false; + __ j(zero, &is_false); + __ CmpObjectType(input, TestType(instr->hydrogen()), result); + __ j(NegateCondition(BranchCondition(instr->hydrogen())), &is_false); + __ Move(result, Factory::true_value()); + __ jmp(&done); + __ bind(&is_false); + __ Move(result, Factory::false_value()); + __ bind(&done); } Index: src/x64/lithium-x64.cc =================================================================== --- src/x64/lithium-x64.cc (revision 6934) +++ src/x64/lithium-x64.cc (working copy) @@ -1502,8 +1502,10 @@ LInstruction* LChunkBuilder::DoHasInstanceType(HHasInstanceType* instr) { - Abort("Unimplemented: %s", "DoHasInstanceType"); - return NULL; + ASSERT(instr->value()->representation().IsTagged()); + LOperand* value = UseRegisterAtStart(instr->value()); + + return DefineAsRegister(new LHasInstanceType(value)); } -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
