Chromium Code Reviews| 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()); |
|
William Hesse
2011/02/24 17:05:30
Use LoadRoot(result, Heap::kTrueValueRootIndex);
|
| + __ jmp(&done); |
| + __ bind(&is_false); |
| + __ Move(result, Factory::false_value()); |
| + __ bind(&done); |
| } |