| Index: src/arm/builtins-arm.cc | 
| diff --git a/src/arm/builtins-arm.cc b/src/arm/builtins-arm.cc | 
| index 6480a9162be3a47a9bee8af0e825f402b6f91788..c599c7ec65e1ebeccb871c155e4e7657a0bb1e52 100644 | 
| --- a/src/arm/builtins-arm.cc | 
| +++ b/src/arm/builtins-arm.cc | 
| @@ -1187,71 +1187,18 @@ void Builtins::Generate_FunctionCall(MacroAssembler* masm) { | 
| __ CompareObjectType(r1, r2, r2, JS_FUNCTION_TYPE); | 
| __ b(ne, &non_function); | 
|  | 
| -  // 3a. Patch the first argument if necessary when calling a function. | 
| // r0: actual number of arguments | 
| // r1: function | 
| -  Label shift_arguments; | 
| -  { Label convert_to_object, use_global_receiver, patch_receiver; | 
| -    // Change context eagerly in case we need the global receiver. | 
| -    __ ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset)); | 
| - | 
| -    __ add(r2, sp, Operand(r0, LSL, kPointerSizeLog2)); | 
| -    __ ldr(r2, MemOperand(r2, -kPointerSize)); | 
| -    // r0: actual number of arguments | 
| -    // r1: function | 
| -    // r2: first argument | 
| -    __ tst(r2, Operand(kSmiTagMask)); | 
| -    __ b(eq, &convert_to_object); | 
| - | 
| -    __ LoadRoot(r3, Heap::kNullValueRootIndex); | 
| -    __ cmp(r2, r3); | 
| -    __ b(eq, &use_global_receiver); | 
| -    __ LoadRoot(r3, Heap::kUndefinedValueRootIndex); | 
| -    __ cmp(r2, r3); | 
| -    __ b(eq, &use_global_receiver); | 
| - | 
| -    __ CompareObjectType(r2, r3, r3, FIRST_JS_OBJECT_TYPE); | 
| -    __ b(lt, &convert_to_object); | 
| -    __ cmp(r3, Operand(LAST_JS_OBJECT_TYPE)); | 
| -    __ b(le, &shift_arguments); | 
| - | 
| -    __ bind(&convert_to_object); | 
| -    __ EnterInternalFrame();  // In order to preserve argument count. | 
| -    __ mov(r0, Operand(r0, LSL, kSmiTagSize));  // Smi-tagged. | 
| -    __ push(r0); | 
| +  // Change context eagerly in case we need the global receiver. | 
| +  __ ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset)); | 
|  | 
| -    __ push(r2); | 
| -    __ InvokeBuiltin(Builtins::TO_OBJECT, CALL_JS); | 
| -    __ mov(r2, r0); | 
| - | 
| -    __ pop(r0); | 
| -    __ mov(r0, Operand(r0, ASR, kSmiTagSize)); | 
| -    __ LeaveInternalFrame(); | 
| -    // Restore the function to r1. | 
| -    __ ldr(r1, MemOperand(sp, r0, LSL, kPointerSizeLog2)); | 
| -    __ jmp(&patch_receiver); | 
| - | 
| -    // Use the global receiver object from the called function as the | 
| -    // receiver. | 
| -    __ bind(&use_global_receiver); | 
| -    const int kGlobalIndex = | 
| -        Context::kHeaderSize + Context::GLOBAL_INDEX * kPointerSize; | 
| -    __ ldr(r2, FieldMemOperand(cp, kGlobalIndex)); | 
| -    __ ldr(r2, FieldMemOperand(r2, GlobalObject::kGlobalContextOffset)); | 
| -    __ ldr(r2, FieldMemOperand(r2, kGlobalIndex)); | 
| -    __ ldr(r2, FieldMemOperand(r2, GlobalObject::kGlobalReceiverOffset)); | 
| - | 
| -    __ bind(&patch_receiver); | 
| -    __ add(r3, sp, Operand(r0, LSL, kPointerSizeLog2)); | 
| -    __ str(r2, MemOperand(r3, -kPointerSize)); | 
| - | 
| -    __ jmp(&shift_arguments); | 
| -  } | 
| +  Label shift_arguments; | 
| +  __ jmp(&shift_arguments); | 
|  | 
| -  // 3b. Patch the first argument when calling a non-function.  The | 
| -  //     CALL_NON_FUNCTION builtin expects the non-function callee as | 
| -  //     receiver, so overwrite the first argument which will ultimately | 
| -  //     become the receiver. | 
| +  // 3. Patch the first argument when calling a non-function.  The | 
| +  //    CALL_NON_FUNCTION builtin expects the non-function callee as | 
| +  //    receiver, so overwrite the first argument which will ultimately | 
| +  //    become the receiver. | 
| // r0: actual number of arguments | 
| // r1: function | 
| __ bind(&non_function); | 
| @@ -1359,44 +1306,9 @@ void Builtins::Generate_FunctionApply(MacroAssembler* masm) { | 
| __ ldr(r0, MemOperand(fp, kFunctionOffset)); | 
| __ ldr(cp, FieldMemOperand(r0, JSFunction::kContextOffset)); | 
|  | 
| -  // Compute the receiver. | 
| -  Label call_to_object, use_global_receiver, push_receiver; | 
| -  __ ldr(r0, MemOperand(fp, kRecvOffset)); | 
| -  __ tst(r0, Operand(kSmiTagMask)); | 
| -  __ b(eq, &call_to_object); | 
| -  __ LoadRoot(r1, Heap::kNullValueRootIndex); | 
| -  __ cmp(r0, r1); | 
| -  __ b(eq, &use_global_receiver); | 
| -  __ LoadRoot(r1, Heap::kUndefinedValueRootIndex); | 
| -  __ cmp(r0, r1); | 
| -  __ b(eq, &use_global_receiver); | 
| - | 
| -  // Check if the receiver is already a JavaScript object. | 
| -  // r0: receiver | 
| -  __ CompareObjectType(r0, r1, r1, FIRST_JS_OBJECT_TYPE); | 
| -  __ b(lt, &call_to_object); | 
| -  __ cmp(r1, Operand(LAST_JS_OBJECT_TYPE)); | 
| -  __ b(le, &push_receiver); | 
| - | 
| -  // Convert the receiver to a regular object. | 
| -  // r0: receiver | 
| -  __ bind(&call_to_object); | 
| -  __ push(r0); | 
| -  __ InvokeBuiltin(Builtins::TO_OBJECT, CALL_JS); | 
| -  __ b(&push_receiver); | 
| - | 
| -  // Use the current global receiver object as the receiver. | 
| -  __ bind(&use_global_receiver); | 
| -  const int kGlobalOffset = | 
| -      Context::kHeaderSize + Context::GLOBAL_INDEX * kPointerSize; | 
| -  __ ldr(r0, FieldMemOperand(cp, kGlobalOffset)); | 
| -  __ ldr(r0, FieldMemOperand(r0, GlobalObject::kGlobalContextOffset)); | 
| -  __ ldr(r0, FieldMemOperand(r0, kGlobalOffset)); | 
| -  __ ldr(r0, FieldMemOperand(r0, GlobalObject::kGlobalReceiverOffset)); | 
| - | 
| // Push the receiver. | 
| +  __ ldr(r0, MemOperand(fp, kRecvOffset)); | 
| // r0: receiver | 
| -  __ bind(&push_receiver); | 
| __ push(r0); | 
|  | 
| // Copy all arguments from the array to the stack. | 
|  |