Index: src/crankshaft/mips64/lithium-codegen-mips64.cc |
diff --git a/src/crankshaft/mips64/lithium-codegen-mips64.cc b/src/crankshaft/mips64/lithium-codegen-mips64.cc |
index 6363c3f20a2db6494f7b5935f2526be43f19031c..37e2e2986f3a5273d290469b11d2856cd6b8610d 100644 |
--- a/src/crankshaft/mips64/lithium-codegen-mips64.cc |
+++ b/src/crankshaft/mips64/lithium-codegen-mips64.cc |
@@ -2715,6 +2715,7 @@ void LCodeGen::DoHasInPrototypeChainAndBranch( |
LHasInPrototypeChainAndBranch* instr) { |
Register const object = ToRegister(instr->object()); |
Register const object_map = scratch0(); |
+ Register const object_instance_type = scratch1(); |
Register const object_prototype = object_map; |
Register const prototype = ToRegister(instr->prototype()); |
@@ -2730,6 +2731,10 @@ void LCodeGen::DoHasInPrototypeChainAndBranch( |
__ ld(object_map, FieldMemOperand(object, HeapObject::kMapOffset)); |
Label loop; |
__ bind(&loop); |
+ __ lbu(object_instance_type, |
+ FieldMemOperand(object_map, Map::kInstanceTypeOffset)); |
+ DeoptimizeIf(eq, instr, Deoptimizer::kProxy, object_instance_type, |
+ Operand(JS_PROXY_TYPE)); |
__ ld(object_prototype, FieldMemOperand(object_map, Map::kPrototypeOffset)); |
EmitTrueBranch(instr, eq, object_prototype, Operand(prototype)); |
__ LoadRoot(at, Heap::kNullValueRootIndex); |