| Index: src/arm/macro-assembler-arm.cc | 
| diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc | 
| index eeabc053f5026603f4fc97b92a794dc4335155db..fd515218cb075295830946327624eb0114d4101e 100644 | 
| --- a/src/arm/macro-assembler-arm.cc | 
| +++ b/src/arm/macro-assembler-arm.cc | 
| @@ -1337,7 +1337,7 @@ void MacroAssembler::PushTryHandler(StackHandler::Kind kind, | 
| STATIC_ASSERT(StackHandlerConstants::kContextOffset == 3 * kPointerSize); | 
| STATIC_ASSERT(StackHandlerConstants::kFPOffset == 4 * kPointerSize); | 
|  | 
| -  // For the JSEntry handler, we must preserve r0-r4, r5-r7 are available. | 
| +  // For the JSEntry handler, we must preserve r0-r4, r5-r6 are available. | 
| // We will build up the handler from the bottom by pushing on the stack. | 
| // Set up the code object (r5) and the state (r6) for pushing. | 
| unsigned state = | 
| @@ -1348,9 +1348,9 @@ void MacroAssembler::PushTryHandler(StackHandler::Kind kind, | 
|  | 
| // Push the frame pointer, context, state, and code object. | 
| if (kind == StackHandler::JS_ENTRY) { | 
| -    mov(r7, Operand(Smi::FromInt(0)));  // Indicates no context. | 
| +    mov(cp, Operand(Smi::FromInt(0)));  // Indicates no context. | 
| mov(ip, Operand::Zero());  // NULL frame pointer. | 
| -    stm(db_w, sp, r5.bit() | r6.bit() | r7.bit() | ip.bit()); | 
| +    stm(db_w, sp, r5.bit() | r6.bit() | cp.bit() | ip.bit()); | 
| } else { | 
| stm(db_w, sp, r5.bit() | r6.bit() | cp.bit() | fp.bit()); | 
| } | 
| @@ -2305,13 +2305,15 @@ void MacroAssembler::CallApiFunctionAndReturn( | 
| ExternalReference::handle_scope_level_address(isolate()), | 
| next_address); | 
|  | 
| +  ASSERT(!thunk_last_arg.is(r3)); | 
| + | 
| // Allocate HandleScope in callee-save registers. | 
| -  mov(r7, Operand(next_address)); | 
| -  ldr(r4, MemOperand(r7, kNextOffset)); | 
| -  ldr(r5, MemOperand(r7, kLimitOffset)); | 
| -  ldr(r6, MemOperand(r7, kLevelOffset)); | 
| +  mov(r9, Operand(next_address)); | 
| +  ldr(r4, MemOperand(r9, kNextOffset)); | 
| +  ldr(r5, MemOperand(r9, kLimitOffset)); | 
| +  ldr(r6, MemOperand(r9, kLevelOffset)); | 
| add(r6, r6, Operand(1)); | 
| -  str(r6, MemOperand(r7, kLevelOffset)); | 
| +  str(r6, MemOperand(r9, kLevelOffset)); | 
|  | 
| if (FLAG_log_timer_events) { | 
| FrameScope frame(this, StackFrame::MANUAL); | 
| @@ -2322,7 +2324,6 @@ void MacroAssembler::CallApiFunctionAndReturn( | 
| PopSafepointRegisters(); | 
| } | 
|  | 
| -  ASSERT(!thunk_last_arg.is(r3)); | 
| Label profiler_disabled; | 
| Label end_profiler_check; | 
| bool* is_profiling_flag = | 
| @@ -2368,15 +2369,15 @@ void MacroAssembler::CallApiFunctionAndReturn( | 
| bind(&return_value_loaded); | 
| // No more valid handles (the result handle was the last one). Restore | 
| // previous handle scope. | 
| -  str(r4, MemOperand(r7, kNextOffset)); | 
| +  str(r4, MemOperand(r9, kNextOffset)); | 
| if (emit_debug_code()) { | 
| -    ldr(r1, MemOperand(r7, kLevelOffset)); | 
| +    ldr(r1, MemOperand(r9, kLevelOffset)); | 
| cmp(r1, r6); | 
| Check(eq, kUnexpectedLevelAfterReturnFromApiCall); | 
| } | 
| sub(r6, r6, Operand(1)); | 
| -  str(r6, MemOperand(r7, kLevelOffset)); | 
| -  ldr(ip, MemOperand(r7, kLimitOffset)); | 
| +  str(r6, MemOperand(r9, kLevelOffset)); | 
| +  ldr(ip, MemOperand(r9, kLimitOffset)); | 
| cmp(r5, ip); | 
| b(ne, &delete_allocated_handles); | 
|  | 
| @@ -2409,7 +2410,7 @@ void MacroAssembler::CallApiFunctionAndReturn( | 
|  | 
| // HandleScope limit has changed. Delete allocated extensions. | 
| bind(&delete_allocated_handles); | 
| -  str(r5, MemOperand(r7, kLimitOffset)); | 
| +  str(r5, MemOperand(r9, kLimitOffset)); | 
| mov(r4, r0); | 
| PrepareCallCFunction(1, r5); | 
| mov(r0, Operand(ExternalReference::isolate_address(isolate()))); | 
|  |