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); |
} |