Commit c416ddf1 authored by ricow@chromium.org's avatar ricow@chromium.org

X64: Implement DoHasInstanceType

Review URL: http://codereview.chromium.org/6581036

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@6940 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent da463ab4
......@@ -1579,7 +1579,20 @@ static Condition BranchCondition(HHasInstanceType* instr) {
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);
}
......
......@@ -1502,8 +1502,10 @@ LInstruction* LChunkBuilder::DoIsSmi(HIsSmi* instr) {
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));
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment