Index: src/mips/macro-assembler-mips.cc |
diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc |
index cd6d7dc108b868b11ad482ca0c4609b154b3f8ff..349937d716813fe604f15ea714fcd87c690be21b 100644 |
--- a/src/mips/macro-assembler-mips.cc |
+++ b/src/mips/macro-assembler-mips.cc |
@@ -5293,15 +5293,16 @@ void MacroAssembler::EnsureNotWhite( |
void MacroAssembler::LoadInstanceDescriptors(Register map, |
Register descriptors, |
Register scratch) { |
- lw(descriptors, |
- FieldMemOperand(map, Map::kInstanceDescriptorsOrBackPointerOffset)); |
+ Register temp = descriptors; |
+ lw(temp, FieldMemOperand(map, Map::kTransitionsOrBackPointerOffset)); |
Label ok, fail; |
- CheckMap(descriptors, |
+ CheckMap(temp, |
scratch, |
isolate()->factory()->fixed_array_map(), |
&fail, |
DONT_DO_SMI_CHECK); |
+ lw(descriptors, FieldMemOperand(temp, TransitionArray::kDescriptorsOffset)); |
jmp(&ok); |
bind(&fail); |
LoadRoot(descriptors, Heap::kEmptyDescriptorArrayRootIndex); |
@@ -5314,9 +5315,6 @@ void MacroAssembler::CheckEnumCache(Register null_value, Label* call_runtime) { |
// Preload a couple of values used in the loop. |
Register empty_fixed_array_value = t2; |
LoadRoot(empty_fixed_array_value, Heap::kEmptyFixedArrayRootIndex); |
- Register empty_descriptor_array_value = t3; |
- LoadRoot(empty_descriptor_array_value, |
- Heap::kEmptyDescriptorArrayRootIndex); |
mov(a1, a0); |
bind(&next); |
@@ -5329,7 +5327,7 @@ void MacroAssembler::CheckEnumCache(Register null_value, Label* call_runtime) { |
// check for an enum cache. Leave the map in a2 for the subsequent |
// prototype load. |
lw(a2, FieldMemOperand(a1, HeapObject::kMapOffset)); |
- lw(a3, FieldMemOperand(a2, Map::kInstanceDescriptorsOrBackPointerOffset)); |
+ lw(a3, FieldMemOperand(a2, Map::kTransitionsOrBackPointerOffset)); |
CheckMap(a3, |
t3, |
@@ -5337,6 +5335,10 @@ void MacroAssembler::CheckEnumCache(Register null_value, Label* call_runtime) { |
call_runtime, |
DONT_DO_SMI_CHECK); |
+ LoadRoot(t3, Heap::kEmptyDescriptorArrayRootIndex); |
+ lw(a3, FieldMemOperand(a3, TransitionArray::kDescriptorsOffset)); |
+ Branch(call_runtime, eq, a3, Operand(t3)); |
+ |
// Check that there is an enum cache in the non-empty instance |
// descriptors (a3). This is the case if the next enumeration |
// index field does not contain a smi. |