Index: src/arm/macro-assembler-arm.cc |
diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc |
index 624ba81340a6d8b31797d93bda3bb340aa0ef4de..013c7c0651edd76a7f2523cc02c5aef361d4b8d9 100644 |
--- a/src/arm/macro-assembler-arm.cc |
+++ b/src/arm/macro-assembler-arm.cc |
@@ -3926,10 +3926,16 @@ void MacroAssembler::CheckEnumCache(Register null_value, Label* call_runtime) { |
// Check that there are no elements. Register r2 contains the current JS |
// object we've reached through the prototype chain. |
+ Label no_elements; |
ldr(r2, FieldMemOperand(r2, JSObject::kElementsOffset)); |
cmp(r2, empty_fixed_array_value); |
+ b(eq, &no_elements); |
+ |
+ // Second chance, the object may be using the empty slow element dictionary. |
+ CompareRoot(r2, Heap::kEmptySlowElementDictionaryRootIndex); |
b(ne, call_runtime); |
+ bind(&no_elements); |
ldr(r2, FieldMemOperand(r1, Map::kPrototypeOffset)); |
cmp(r2, null_value); |
b(ne, &next); |