| Index: src/ppc/builtins-ppc.cc
 | 
| diff --git a/src/ppc/builtins-ppc.cc b/src/ppc/builtins-ppc.cc
 | 
| index 5817e8cb2ed296651f5ba12d6a65ad5c0cc4be6d..b1a8a83c69f8af2e13d4f56e28b5eae9ee395b03 100644
 | 
| --- a/src/ppc/builtins-ppc.cc
 | 
| +++ b/src/ppc/builtins-ppc.cc
 | 
| @@ -1384,52 +1384,7 @@ void Builtins::Generate_OsrAfterStackCheck(MacroAssembler* masm) {
 | 
|  
 | 
|  
 | 
|  // static
 | 
| -void Builtins::Generate_FunctionCall(MacroAssembler* masm) {
 | 
| -  // 1. Make sure we have at least one argument.
 | 
| -  // r3: actual number of arguments
 | 
| -  {
 | 
| -    Label done;
 | 
| -    __ cmpi(r3, Operand::Zero());
 | 
| -    __ bne(&done);
 | 
| -    __ PushRoot(Heap::kUndefinedValueRootIndex);
 | 
| -    __ addi(r3, r3, Operand(1));
 | 
| -    __ bind(&done);
 | 
| -  }
 | 
| -
 | 
| -  // 2. Get the callable to call (passed as receiver) from the stack.
 | 
| -  // r3: actual number of arguments
 | 
| -  __ ShiftLeftImm(r5, r3, Operand(kPointerSizeLog2));
 | 
| -  __ LoadPX(r4, MemOperand(sp, r5));
 | 
| -
 | 
| -  // 3. Shift arguments and return address one slot down on the stack
 | 
| -  //    (overwriting the original receiver).  Adjust argument count to make
 | 
| -  //    the original first argument the new receiver.
 | 
| -  // r3: actual number of arguments
 | 
| -  // r4: callable
 | 
| -  {
 | 
| -    Label loop;
 | 
| -    // Calculate the copy start address (destination). Copy end address is sp.
 | 
| -    __ add(r5, sp, r5);
 | 
| -
 | 
| -
 | 
| -    __ mtctr(r3);
 | 
| -    __ bind(&loop);
 | 
| -    __ LoadP(ip, MemOperand(r5, -kPointerSize));
 | 
| -    __ StoreP(ip, MemOperand(r5));
 | 
| -    __ subi(r5, r5, Operand(kPointerSize));
 | 
| -    __ bdnz(&loop);
 | 
| -    // Adjust the actual number of arguments and remove the top element
 | 
| -    // (which is a copy of the last argument).
 | 
| -    __ subi(r3, r3, Operand(1));
 | 
| -    __ pop();
 | 
| -  }
 | 
| -
 | 
| -  // 4. Call the callable.
 | 
| -  __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
 | 
| -}
 | 
| -
 | 
| -
 | 
| -void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
 | 
| +void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) {
 | 
|    // ----------- S t a t e -------------
 | 
|    //  -- r3    : argc
 | 
|    //  -- sp[0] : argArray
 | 
| @@ -1501,6 +1456,52 @@ void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| +// static
 | 
| +void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
 | 
| +  // 1. Make sure we have at least one argument.
 | 
| +  // r3: actual number of arguments
 | 
| +  {
 | 
| +    Label done;
 | 
| +    __ cmpi(r3, Operand::Zero());
 | 
| +    __ bne(&done);
 | 
| +    __ PushRoot(Heap::kUndefinedValueRootIndex);
 | 
| +    __ addi(r3, r3, Operand(1));
 | 
| +    __ bind(&done);
 | 
| +  }
 | 
| +
 | 
| +  // 2. Get the callable to call (passed as receiver) from the stack.
 | 
| +  // r3: actual number of arguments
 | 
| +  __ ShiftLeftImm(r5, r3, Operand(kPointerSizeLog2));
 | 
| +  __ LoadPX(r4, MemOperand(sp, r5));
 | 
| +
 | 
| +  // 3. Shift arguments and return address one slot down on the stack
 | 
| +  //    (overwriting the original receiver).  Adjust argument count to make
 | 
| +  //    the original first argument the new receiver.
 | 
| +  // r3: actual number of arguments
 | 
| +  // r4: callable
 | 
| +  {
 | 
| +    Label loop;
 | 
| +    // Calculate the copy start address (destination). Copy end address is sp.
 | 
| +    __ add(r5, sp, r5);
 | 
| +
 | 
| +
 | 
| +    __ mtctr(r3);
 | 
| +    __ bind(&loop);
 | 
| +    __ LoadP(ip, MemOperand(r5, -kPointerSize));
 | 
| +    __ StoreP(ip, MemOperand(r5));
 | 
| +    __ subi(r5, r5, Operand(kPointerSize));
 | 
| +    __ bdnz(&loop);
 | 
| +    // Adjust the actual number of arguments and remove the top element
 | 
| +    // (which is a copy of the last argument).
 | 
| +    __ subi(r3, r3, Operand(1));
 | 
| +    __ pop();
 | 
| +  }
 | 
| +
 | 
| +  // 4. Call the callable.
 | 
| +  __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
 | 
| +}
 | 
| +
 | 
| +
 | 
|  void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
 | 
|    // ----------- S t a t e -------------
 | 
|    //  -- r3     : argc
 | 
| 
 |