Index: src/arm/lithium-codegen-arm.cc |
diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc |
index e2aa254edf079402827b4a8225ce35beae2aa767..88169a4537240ca49a574a098149e10f8637b145 100644 |
--- a/src/arm/lithium-codegen-arm.cc |
+++ b/src/arm/lithium-codegen-arm.cc |
@@ -1539,6 +1539,13 @@ void LCodeGen::DoFixedArrayBaseLength(LFixedArrayBaseLength* instr) { |
} |
+void LCodeGen::DoMapEnumLength(LMapEnumLength* instr) { |
+ Register result = ToRegister(instr->result()); |
+ Register map = ToRegister(instr->InputAt(0)); |
+ __ EnumLength(result, map); |
+} |
+ |
+ |
void LCodeGen::DoElementsKind(LElementsKind* instr) { |
Register result = ToRegister(instr->result()); |
Register input = ToRegister(instr->InputAt(0)); |
@@ -5558,6 +5565,14 @@ void LCodeGen::DoForInCacheArray(LForInCacheArray* instr) { |
Register map = ToRegister(instr->map()); |
Register result = ToRegister(instr->result()); |
Register scratch = ToRegister(instr->scratch()); |
+ Label load_cache, done; |
+ __ EnumLength(result, map); |
+ __ cmp(result, Operand(Smi::FromInt(0))); |
+ __ b(ne, &load_cache); |
+ __ mov(result, Operand(isolate()->factory()->empty_fixed_array())); |
+ __ jmp(&done); |
+ |
+ __ bind(&load_cache); |
__ LoadInstanceDescriptors(map, result, scratch); |
__ ldr(result, |
FieldMemOperand(result, DescriptorArray::kEnumCacheOffset)); |
@@ -5565,6 +5580,8 @@ void LCodeGen::DoForInCacheArray(LForInCacheArray* instr) { |
FieldMemOperand(result, FixedArray::SizeFor(instr->idx()))); |
__ cmp(result, Operand(0)); |
DeoptimizeIf(eq, instr->environment()); |
+ |
+ __ bind(&done); |
} |