Chromium Code Reviews| Index: src/arm/full-codegen-arm.cc |
| diff --git a/src/arm/full-codegen-arm.cc b/src/arm/full-codegen-arm.cc |
| index f2b195ec9843420a0e6c2011fa2ab043a3caa006..968fcb6251ff08b709f69b8c04dd47a3a6080cc3 100644 |
| --- a/src/arm/full-codegen-arm.cc |
| +++ b/src/arm/full-codegen-arm.cc |
| @@ -1132,19 +1132,29 @@ void FullCodeGenerator::VisitForInStatement(ForInStatement* stmt) { |
| __ b(ne, &fixed_array); |
| // We got a map in register r0. Get the enumeration cache from it. |
| + Label no_descriptors; |
| __ bind(&use_cache); |
| - __ LoadInstanceDescriptors(r0, r1, r2); |
| + |
| + __ EnumLength(r2, r0); |
| + __ cmp(r2, Operand(Smi::FromInt(0))); |
| + __ b(eq, &no_descriptors); |
| + |
| + __ LoadInstanceDescriptors(r0, r1, r4); |
| __ ldr(r1, FieldMemOperand(r1, DescriptorArray::kEnumCacheOffset)); |
| - __ ldr(r2, FieldMemOperand(r1, DescriptorArray::kEnumCacheBridgeCacheOffset)); |
| + __ ldr(r1, FieldMemOperand(r1, DescriptorArray::kEnumCacheBridgeCacheOffset)); |
| // Set up the four remaining stack slots. |
| __ push(r0); // Map. |
| - __ ldr(r1, FieldMemOperand(r2, FixedArray::kLengthOffset)); |
| __ mov(r0, Operand(Smi::FromInt(0))); |
| // Push enumeration cache, enumeration cache length (as smi) and zero. |
| - __ Push(r2, r1, r0); |
| + __ ldr(r2, FieldMemOperand(r1, FixedArray::kLengthOffset)); |
| + __ Push(r1, r2, r0); |
|
Jakob Kummerow
2012/08/28 12:24:44
Please try to keep the registers that are being pu
Toon Verwaest
2012/08/28 12:30:23
Done.
|
| __ jmp(&loop); |
| + __ bind(&no_descriptors); |
| + __ Drop(1); |
| + __ jmp(&exit); |
| + |
| // We got a fixed array in register r0. Iterate through that. |
| Label non_proxy; |
| __ bind(&fixed_array); |