| Index: src/arm/codegen-arm.cc
 | 
| diff --git a/src/arm/codegen-arm.cc b/src/arm/codegen-arm.cc
 | 
| index 3371e8a6b1dddeabf991a81076f545d96c39aba0..27a823e773822252303480f6ab42196ef00ef1d5 100644
 | 
| --- a/src/arm/codegen-arm.cc
 | 
| +++ b/src/arm/codegen-arm.cc
 | 
| @@ -104,10 +104,10 @@ void ElementsTransitionGenerator::GenerateSmiOnlyToDouble(
 | 
|    __ add(lr, lr, Operand(r5, LSL, 2));
 | 
|    __ AllocateInNewSpace(lr, r6, r7, r9, &gc_required, NO_ALLOCATION_FLAGS);
 | 
|    // r6: destination FixedDoubleArray, not tagged as heap object
 | 
| +  // Set destination FixedDoubleArray's length and map.
 | 
|    __ LoadRoot(r9, Heap::kFixedDoubleArrayMapRootIndex);
 | 
| -  __ str(r9, MemOperand(r6, HeapObject::kMapOffset));
 | 
| -  // Set destination FixedDoubleArray's length.
 | 
|    __ str(r5, MemOperand(r6, FixedDoubleArray::kLengthOffset));
 | 
| +  __ str(r9, MemOperand(r6, HeapObject::kMapOffset));
 | 
|    // Update receiver's map.
 | 
|  
 | 
|    __ str(r3, FieldMemOperand(r2, HeapObject::kMapOffset));
 | 
| @@ -155,10 +155,9 @@ void ElementsTransitionGenerator::GenerateSmiOnlyToDouble(
 | 
|    __ bind(&loop);
 | 
|    __ ldr(r9, MemOperand(r3, 4, PostIndex));
 | 
|    // r9: current element
 | 
| -  __ JumpIfNotSmi(r9, &convert_hole);
 | 
| +  __ UntagAndJumpIfNotSmi(r9, r9, &convert_hole);
 | 
|  
 | 
|    // Normal smi, convert to double and store.
 | 
| -  __ SmiUntag(r9);
 | 
|    if (vfp3_supported) {
 | 
|      CpuFeatures::Scope scope(VFP3);
 | 
|      __ vmov(s0, r9);
 | 
| @@ -181,6 +180,9 @@ void ElementsTransitionGenerator::GenerateSmiOnlyToDouble(
 | 
|    // Hole found, store the-hole NaN.
 | 
|    __ bind(&convert_hole);
 | 
|    if (FLAG_debug_code) {
 | 
| +    // Restore a "smi-untagged" heap object.
 | 
| +    __ SmiTag(r9);
 | 
| +    __ orr(r9, r9, Operand(1));
 | 
|      __ CompareRoot(r9, Heap::kTheHoleValueRootIndex);
 | 
|      __ Assert(eq, "object found in smi-only array");
 | 
|    }
 | 
| @@ -208,9 +210,8 @@ void ElementsTransitionGenerator::GenerateDoubleToObject(
 | 
|    Label entry, loop, convert_hole, gc_required;
 | 
|  
 | 
|    __ push(lr);
 | 
| -  __ Push(r3, r2, r1, r0);
 | 
| -
 | 
|    __ ldr(r4, FieldMemOperand(r2, JSObject::kElementsOffset));
 | 
| +  __ Push(r3, r2, r1, r0);
 | 
|    __ ldr(r5, FieldMemOperand(r4, FixedArray::kLengthOffset));
 | 
|    // r4: source FixedDoubleArray
 | 
|    // r5: number of elements (smi-tagged)
 | 
| @@ -220,10 +221,10 @@ void ElementsTransitionGenerator::GenerateDoubleToObject(
 | 
|    __ add(r0, r0, Operand(r5, LSL, 1));
 | 
|    __ AllocateInNewSpace(r0, r6, r7, r9, &gc_required, NO_ALLOCATION_FLAGS);
 | 
|    // r6: destination FixedArray, not tagged as heap object
 | 
| +  // Set destination FixedDoubleArray's length and map.
 | 
|    __ LoadRoot(r9, Heap::kFixedArrayMapRootIndex);
 | 
| -  __ str(r9, MemOperand(r6, HeapObject::kMapOffset));
 | 
| -  // Set destination FixedDoubleArray's length.
 | 
|    __ str(r5, MemOperand(r6, FixedDoubleArray::kLengthOffset));
 | 
| +  __ str(r9, MemOperand(r6, HeapObject::kMapOffset));
 | 
|  
 | 
|    // Prepare for conversion loop.
 | 
|    __ add(r4, r4, Operand(FixedDoubleArray::kHeaderSize - kHeapObjectTag + 4));
 | 
| @@ -325,8 +326,8 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm,
 | 
|    // Handle slices.
 | 
|    Label indirect_string_loaded;
 | 
|    __ ldr(result, FieldMemOperand(string, SlicedString::kOffsetOffset));
 | 
| -  __ add(index, index, Operand(result, ASR, kSmiTagSize));
 | 
|    __ ldr(string, FieldMemOperand(string, SlicedString::kParentOffset));
 | 
| +  __ add(index, index, Operand(result, ASR, kSmiTagSize));
 | 
|    __ jmp(&indirect_string_loaded);
 | 
|  
 | 
|    // Handle cons strings.
 | 
| @@ -336,8 +337,7 @@ void StringCharLoadGenerator::Generate(MacroAssembler* masm,
 | 
|    // the string.
 | 
|    __ bind(&cons_string);
 | 
|    __ ldr(result, FieldMemOperand(string, ConsString::kSecondOffset));
 | 
| -  __ LoadRoot(ip, Heap::kEmptyStringRootIndex);
 | 
| -  __ cmp(result, ip);
 | 
| +  __ CompareRoot(result, Heap::kEmptyStringRootIndex);
 | 
|    __ b(ne, call_runtime);
 | 
|    // Get the first of the two strings and load its instance type.
 | 
|    __ ldr(string, FieldMemOperand(string, ConsString::kFirstOffset));
 | 
| 
 |