| Index: src/arm/macro-assembler-arm.cc
 | 
| diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc
 | 
| index 456bfd56293ebf1e245130d7c8b1375cc52fb0f0..95a67910871ea469a9d5ddfa6c7b501434d0db6f 100644
 | 
| --- a/src/arm/macro-assembler-arm.cc
 | 
| +++ b/src/arm/macro-assembler-arm.cc
 | 
| @@ -1760,18 +1760,15 @@ void MacroAssembler::Allocate(int object_size,
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void MacroAssembler::Allocate(Register object_size,
 | 
| -                              Register result,
 | 
| -                              Register scratch1,
 | 
| -                              Register scratch2,
 | 
| -                              Label* gc_required,
 | 
| -                              AllocationFlags flags) {
 | 
| +void MacroAssembler::Allocate(Register object_size, Register result,
 | 
| +                              Register result_end, Register scratch,
 | 
| +                              Label* gc_required, AllocationFlags flags) {
 | 
|    if (!FLAG_inline_new) {
 | 
|      if (emit_debug_code()) {
 | 
|        // Trash the registers to simulate an allocation failure.
 | 
|        mov(result, Operand(0x7091));
 | 
| -      mov(scratch1, Operand(0x7191));
 | 
| -      mov(scratch2, Operand(0x7291));
 | 
| +      mov(scratch, Operand(0x7191));
 | 
| +      mov(result_end, Operand(0x7291));
 | 
|      }
 | 
|      jmp(gc_required);
 | 
|      return;
 | 
| @@ -1779,13 +1776,13 @@ void MacroAssembler::Allocate(Register object_size,
 | 
|  
 | 
|    // Assert that the register arguments are different and that none of
 | 
|    // them are ip. ip is used explicitly in the code generated below.
 | 
| -  DCHECK(!result.is(scratch1));
 | 
| -  DCHECK(!result.is(scratch2));
 | 
| -  DCHECK(!scratch1.is(scratch2));
 | 
| +  DCHECK(!result.is(scratch));
 | 
| +  DCHECK(!result.is(result_end));
 | 
| +  DCHECK(!scratch.is(result_end));
 | 
|    DCHECK(!object_size.is(ip));
 | 
|    DCHECK(!result.is(ip));
 | 
| -  DCHECK(!scratch1.is(ip));
 | 
| -  DCHECK(!scratch2.is(ip));
 | 
| +  DCHECK(!scratch.is(ip));
 | 
| +  DCHECK(!result_end.is(ip));
 | 
|  
 | 
|    // Check relative positions of allocation top and limit addresses.
 | 
|    // The values must be adjacent in memory to allow the use of LDM.
 | 
| @@ -1803,7 +1800,7 @@ void MacroAssembler::Allocate(Register object_size,
 | 
|    DCHECK(result.code() < ip.code());
 | 
|  
 | 
|    // Set up allocation top address.
 | 
| -  Register topaddr = scratch1;
 | 
| +  Register topaddr = scratch;
 | 
|    mov(topaddr, Operand(allocation_top));
 | 
|  
 | 
|    // This code stores a temporary value in ip. This is OK, as the code below
 | 
| @@ -1828,15 +1825,15 @@ void MacroAssembler::Allocate(Register object_size,
 | 
|      // Align the next allocation. Storing the filler map without checking top is
 | 
|      // safe in new-space because the limit of the heap is aligned there.
 | 
|      DCHECK(kPointerAlignment * 2 == kDoubleAlignment);
 | 
| -    and_(scratch2, result, Operand(kDoubleAlignmentMask), SetCC);
 | 
| +    and_(result_end, result, Operand(kDoubleAlignmentMask), SetCC);
 | 
|      Label aligned;
 | 
|      b(eq, &aligned);
 | 
|      if ((flags & PRETENURE) != 0) {
 | 
|        cmp(result, Operand(ip));
 | 
|        b(hs, gc_required);
 | 
|      }
 | 
| -    mov(scratch2, Operand(isolate()->factory()->one_pointer_filler_map()));
 | 
| -    str(scratch2, MemOperand(result, kDoubleSize / 2, PostIndex));
 | 
| +    mov(result_end, Operand(isolate()->factory()->one_pointer_filler_map()));
 | 
| +    str(result_end, MemOperand(result, kDoubleSize / 2, PostIndex));
 | 
|      bind(&aligned);
 | 
|    }
 | 
|  
 | 
| @@ -1844,20 +1841,20 @@ void MacroAssembler::Allocate(Register object_size,
 | 
|    // to calculate the new top. Object size may be in words so a shift is
 | 
|    // required to get the number of bytes.
 | 
|    if ((flags & SIZE_IN_WORDS) != 0) {
 | 
| -    add(scratch2, result, Operand(object_size, LSL, kPointerSizeLog2), SetCC);
 | 
| +    add(result_end, result, Operand(object_size, LSL, kPointerSizeLog2), SetCC);
 | 
|    } else {
 | 
| -    add(scratch2, result, Operand(object_size), SetCC);
 | 
| +    add(result_end, result, Operand(object_size), SetCC);
 | 
|    }
 | 
|    b(cs, gc_required);
 | 
| -  cmp(scratch2, Operand(ip));
 | 
| +  cmp(result_end, Operand(ip));
 | 
|    b(hi, gc_required);
 | 
|  
 | 
|    // Update allocation top. result temporarily holds the new top.
 | 
|    if (emit_debug_code()) {
 | 
| -    tst(scratch2, Operand(kObjectAlignmentMask));
 | 
| +    tst(result_end, Operand(kObjectAlignmentMask));
 | 
|      Check(eq, kUnalignedAllocationInNewSpace);
 | 
|    }
 | 
| -  str(scratch2, MemOperand(topaddr));
 | 
| +  str(result_end, MemOperand(topaddr));
 | 
|  
 | 
|    // Tag object if requested.
 | 
|    if ((flags & TAG_OBJECT) != 0) {
 | 
| @@ -3022,15 +3019,15 @@ void MacroAssembler::CopyBytes(Register src,
 | 
|  }
 | 
|  
 | 
|  
 | 
| -void MacroAssembler::InitializeFieldsWithFiller(Register start_offset,
 | 
| -                                                Register end_offset,
 | 
| +void MacroAssembler::InitializeFieldsWithFiller(Register current_address,
 | 
| +                                                Register end_address,
 | 
|                                                  Register filler) {
 | 
|    Label loop, entry;
 | 
|    b(&entry);
 | 
|    bind(&loop);
 | 
| -  str(filler, MemOperand(start_offset, kPointerSize, PostIndex));
 | 
| +  str(filler, MemOperand(current_address, kPointerSize, PostIndex));
 | 
|    bind(&entry);
 | 
| -  cmp(start_offset, end_offset);
 | 
| +  cmp(current_address, end_address);
 | 
|    b(lo, &loop);
 | 
|  }
 | 
|  
 | 
| 
 |