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) {
|
||||
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));
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user