Index: src/arm/macro-assembler-arm.cc |
diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc |
index 7089a6213de8b2e0494dc085f5fe8ff4411b5312..a974cc3413ac5bcfc4de514df3d36414fec1ff5b 100644 |
--- a/src/arm/macro-assembler-arm.cc |
+++ b/src/arm/macro-assembler-arm.cc |
@@ -3679,15 +3679,16 @@ void MacroAssembler::ClampDoubleToUint8(Register result_reg, |
void MacroAssembler::LoadInstanceDescriptors(Register map, |
Register descriptors, |
Register scratch) { |
- ldr(descriptors, |
- FieldMemOperand(map, Map::kInstanceDescriptorsOrBackPointerOffset)); |
+ Register temp = descriptors; |
+ ldr(temp, FieldMemOperand(map, Map::kTransitionsOrBackPointerOffset)); |
Label ok, fail; |
- CheckMap(descriptors, |
+ CheckMap(temp, |
scratch, |
isolate()->factory()->fixed_array_map(), |
&fail, |
DONT_DO_SMI_CHECK); |
+ ldr(descriptors, FieldMemOperand(temp, TransitionArray::kDescriptorsOffset)); |
jmp(&ok); |
bind(&fail); |
mov(descriptors, Operand(FACTORY->empty_descriptor_array())); |
@@ -3701,8 +3702,6 @@ void MacroAssembler::CheckEnumCache(Register null_value, Label* call_runtime) { |
Register empty_fixed_array_value = r6; |
LoadRoot(empty_fixed_array_value, Heap::kEmptyFixedArrayRootIndex); |
Register empty_descriptor_array_value = r7; |
Michael Starzinger
2012/08/06 14:15:52
Drop the "empty_descriptor_array_value".
Toon Verwaest
2012/08/07 08:33:04
Done.
|
- LoadRoot(empty_descriptor_array_value, |
- Heap::kEmptyDescriptorArrayRootIndex); |
mov(r1, r0); |
bind(&next); |
@@ -3716,7 +3715,7 @@ void MacroAssembler::CheckEnumCache(Register null_value, Label* call_runtime) { |
// check for an enum cache. Leave the map in r2 for the subsequent |
// prototype load. |
ldr(r2, FieldMemOperand(r1, HeapObject::kMapOffset)); |
- ldr(r3, FieldMemOperand(r2, Map::kInstanceDescriptorsOrBackPointerOffset)); |
+ ldr(r3, FieldMemOperand(r2, Map::kTransitionsOrBackPointerOffset)); |
CheckMap(r3, |
r7, |
@@ -3724,6 +3723,12 @@ void MacroAssembler::CheckEnumCache(Register null_value, Label* call_runtime) { |
call_runtime, |
DONT_DO_SMI_CHECK); |
+ LoadRoot(empty_descriptor_array_value, |
Michael Starzinger
2012/08/06 14:15:52
Better use r7 directly here, so that it's clear th
Toon Verwaest
2012/08/07 08:33:04
Done.
|
+ Heap::kEmptyDescriptorArrayRootIndex); |
+ ldr(r3, FieldMemOperand(r3, TransitionArray::kDescriptorsOffset)); |
+ cmp(r3, empty_descriptor_array_value); |
+ b(eq, call_runtime); |
+ |
// Check that there is an enum cache in the non-empty instance |
// descriptors (r3). This is the case if the next enumeration |
// index field does not contain a smi. |