OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_PPC | 7 #if V8_TARGET_ARCH_PPC |
8 | 8 |
9 #include "src/codegen.h" | 9 #include "src/codegen.h" |
10 #include "src/debug.h" | 10 #include "src/debug.h" |
(...skipping 1521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1532 | 1532 |
1533 Generate_CheckStackOverflow(masm, kFunctionOffset, r3, kArgcIsSmiTagged); | 1533 Generate_CheckStackOverflow(masm, kFunctionOffset, r3, kArgcIsSmiTagged); |
1534 | 1534 |
1535 // Push current limit and index. | 1535 // Push current limit and index. |
1536 const int kIndexOffset = | 1536 const int kIndexOffset = |
1537 StandardFrameConstants::kExpressionsOffset - (2 * kPointerSize); | 1537 StandardFrameConstants::kExpressionsOffset - (2 * kPointerSize); |
1538 const int kLimitOffset = | 1538 const int kLimitOffset = |
1539 StandardFrameConstants::kExpressionsOffset - (1 * kPointerSize); | 1539 StandardFrameConstants::kExpressionsOffset - (1 * kPointerSize); |
1540 __ li(r4, Operand::Zero()); | 1540 __ li(r4, Operand::Zero()); |
1541 __ Push(r3, r4); // limit and initial index. | 1541 __ Push(r3, r4); // limit and initial index. |
1542 // Push newTarget and callee functions | 1542 // Push the constructor function as callee |
1543 __ LoadP(r3, MemOperand(fp, kNewTargetOffset)); | |
1544 __ push(r3); | |
1545 __ LoadP(r3, MemOperand(fp, kFunctionOffset)); | 1543 __ LoadP(r3, MemOperand(fp, kFunctionOffset)); |
1546 __ push(r3); | 1544 __ push(r3); |
1547 | 1545 |
1548 // Copy all arguments from the array to the stack. | 1546 // Copy all arguments from the array to the stack. |
1549 Generate_PushAppliedArguments(masm, kArgumentsOffset, kIndexOffset, | 1547 Generate_PushAppliedArguments(masm, kArgumentsOffset, kIndexOffset, |
1550 kLimitOffset); | 1548 kLimitOffset); |
1551 | 1549 |
1552 // Use undefined feedback vector | 1550 // Use undefined feedback vector |
1553 __ LoadRoot(r5, Heap::kUndefinedValueRootIndex); | 1551 __ LoadRoot(r5, Heap::kUndefinedValueRootIndex); |
1554 __ LoadP(r4, MemOperand(fp, kFunctionOffset)); | 1552 __ LoadP(r4, MemOperand(fp, kFunctionOffset)); |
| 1553 __ LoadP(r7, MemOperand(fp, kNewTargetOffset)); |
1555 | 1554 |
1556 // Call the function. | 1555 // Call the function. |
1557 CallConstructStub stub(masm->isolate(), SUPER_CONSTRUCTOR_CALL); | 1556 CallConstructStub stub(masm->isolate(), SUPER_CONSTRUCTOR_CALL); |
1558 __ Call(stub.GetCode(), RelocInfo::CONSTRUCT_CALL); | 1557 __ Call(stub.GetCode(), RelocInfo::CONSTRUCT_CALL); |
1559 | 1558 |
1560 __ Drop(1); | |
1561 | |
1562 // Leave internal frame. | 1559 // Leave internal frame. |
1563 } | 1560 } |
1564 __ addi(sp, sp, Operand(kStackSize * kPointerSize)); | 1561 __ addi(sp, sp, Operand(kStackSize * kPointerSize)); |
1565 __ blr(); | 1562 __ blr(); |
1566 } | 1563 } |
1567 | 1564 |
1568 | 1565 |
1569 void Builtins::Generate_FunctionApply(MacroAssembler* masm) { | 1566 void Builtins::Generate_FunctionApply(MacroAssembler* masm) { |
1570 Generate_ApplyHelper(masm, false); | 1567 Generate_ApplyHelper(masm, false); |
1571 } | 1568 } |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1785 __ bkpt(0); | 1782 __ bkpt(0); |
1786 } | 1783 } |
1787 } | 1784 } |
1788 | 1785 |
1789 | 1786 |
1790 #undef __ | 1787 #undef __ |
1791 } // namespace internal | 1788 } // namespace internal |
1792 } // namespace v8 | 1789 } // namespace v8 |
1793 | 1790 |
1794 #endif // V8_TARGET_ARCH_PPC | 1791 #endif // V8_TARGET_ARCH_PPC |
OLD | NEW |