Revision: 6940
Author: [email protected]
Date: Thu Feb 24 11:25:22 2011
Log: X64: Implement DoHasInstanceType
Review URL: http://codereview.chromium.org/6581036
http://code.google.com/p/v8/source/detail?r=6940
Modified:
/branches/bleeding_edge/src/x64/lithium-codegen-x64.cc
/branches/bleeding_edge/src/x64/lithium-x64.cc
=======================================
--- /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Thu Feb 24
07:21:30 2011
+++ /branches/bleeding_edge/src/x64/lithium-codegen-x64.cc Thu Feb 24
11:25:22 2011
@@ -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);
+ __ LoadRoot(result, Heap::kTrueValueRootIndex);
+ __ jmp(&done);
+ __ bind(&is_false);
+ __ LoadRoot(result, Heap::kFalseValueRootIndex);
+ __ bind(&done);
}
=======================================
--- /branches/bleeding_edge/src/x64/lithium-x64.cc Wed Feb 23 05:52:11 2011
+++ /branches/bleeding_edge/src/x64/lithium-x64.cc Thu Feb 24 11:25:22 2011
@@ -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