Index: src/ia32/ic-ia32.cc |
=================================================================== |
--- src/ia32/ic-ia32.cc (revision 5174) |
+++ src/ia32/ic-ia32.cc (working copy) |
@@ -545,7 +545,7 @@ |
// -- edx : receiver |
// -- esp[0] : return address |
// ----------------------------------- |
- Label slow, check_string, index_smi, index_string; |
+ Label slow, check_string, index_smi, index_string, property_array_property; |
Label check_pixel_array, probe_dictionary, check_number_dictionary; |
// Check that the key is a smi. |
@@ -652,7 +652,7 @@ |
__ cmp(eax, Operand::StaticArray(edi, times_1, cache_keys)); |
__ j(not_equal, &slow); |
- // Get field offset and check that it is an in-object property. |
+ // Get field offset. |
// edx : receiver |
// ebx : receiver's map |
// eax : key |
@@ -663,7 +663,7 @@ |
Operand::StaticArray(ecx, times_pointer_size, cache_field_offsets)); |
__ movzx_b(ecx, FieldOperand(ebx, Map::kInObjectPropertiesOffset)); |
__ sub(edi, Operand(ecx)); |
- __ j(above_equal, &slow); |
+ __ j(above_equal, &property_array_property); |
// Load in-object property. |
__ movzx_b(ecx, FieldOperand(ebx, Map::kInstanceSizeOffset)); |
@@ -672,6 +672,14 @@ |
__ IncrementCounter(&Counters::keyed_load_generic_lookup_cache, 1); |
__ ret(0); |
+ // Load property array property. |
+ __ bind(&property_array_property); |
+ __ mov(eax, FieldOperand(edx, JSObject::kPropertiesOffset)); |
+ __ mov(eax, FieldOperand(eax, edi, times_pointer_size, |
+ FixedArray::kHeaderSize)); |
+ __ IncrementCounter(&Counters::keyed_load_generic_lookup_cache, 1); |
+ __ ret(0); |
+ |
// Do a quick inline probe of the receiver's dictionary, if it |
// exists. |
__ bind(&probe_dictionary); |