Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index ea88cb3f84a92652ec2d98dd7f44ede82bd72c5a..539ead454250345908ad0ba70c842ce457d2a656 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -2004,7 +2004,16 @@ void LCodeGen::DoInstanceOf(LInstanceOf* instr) { |
void LCodeGen::DoInstanceOfAndBranch(LInstanceOfAndBranch* instr) { |
- Abort("DoInstanceOfAndBranch unimplemented."); |
+ ASSERT(ToRegister(instr->InputAt(0)).is(r0)); // Object is in r0. |
+ ASSERT(ToRegister(instr->InputAt(1)).is(r1)); // Function is in r1. |
+ |
+ int true_block = chunk_->LookupDestination(instr->true_block_id()); |
+ int false_block = chunk_->LookupDestination(instr->false_block_id()); |
+ |
+ InstanceofStub stub(InstanceofStub::kArgsInRegisters); |
+ CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); |
+ __ tst(r0, Operand(r0)); |
+ EmitBranch(true_block, false_block, eq); |
} |