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
This commit is contained in:
parent
da463ab484
commit
c416ddf166
@ -1579,7 +1579,20 @@ static Condition BranchCondition(HHasInstanceType* instr) {
|
|||||||
|
|
||||||
|
|
||||||
void LCodeGen::DoHasInstanceType(LHasInstanceType* 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) {
|
LInstruction* LChunkBuilder::DoHasInstanceType(HHasInstanceType* instr) {
|
||||||
Abort("Unimplemented: %s", "DoHasInstanceType");
|
ASSERT(instr->value()->representation().IsTagged());
|
||||||
return NULL;
|
LOperand* value = UseRegisterAtStart(instr->value());
|
||||||
|
|
||||||
|
return DefineAsRegister(new LHasInstanceType(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user