Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(287)

Side by Side Diff: src/ppc/code-stubs-ppc.cc

Issue 1208443002: PPC: Do not add extra argument for new.target (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/ppc/builtins-ppc.cc ('k') | src/ppc/full-codegen-ppc.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/bootstrapper.h" 10 #include "src/bootstrapper.h"
(...skipping 1610 matching lines...) Expand 10 before | Expand all | Expand 10 after
1621 StubRuntimeCallHelper call_helper; 1621 StubRuntimeCallHelper call_helper;
1622 char_at_generator.GenerateSlow(masm, PART_OF_IC_HANDLER, call_helper); 1622 char_at_generator.GenerateSlow(masm, PART_OF_IC_HANDLER, call_helper);
1623 1623
1624 __ bind(&miss); 1624 __ bind(&miss);
1625 PropertyAccessCompiler::TailCallBuiltin( 1625 PropertyAccessCompiler::TailCallBuiltin(
1626 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); 1626 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC));
1627 } 1627 }
1628 1628
1629 1629
1630 void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) { 1630 void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) {
1631 CHECK(!has_new_target());
1632 // The displacement is the offset of the last parameter (if any) 1631 // The displacement is the offset of the last parameter (if any)
1633 // relative to the frame pointer. 1632 // relative to the frame pointer.
1634 const int kDisplacement = 1633 const int kDisplacement =
1635 StandardFrameConstants::kCallerSPOffset - kPointerSize; 1634 StandardFrameConstants::kCallerSPOffset - kPointerSize;
1636 DCHECK(r4.is(ArgumentsAccessReadDescriptor::index())); 1635 DCHECK(r4.is(ArgumentsAccessReadDescriptor::index()));
1637 DCHECK(r3.is(ArgumentsAccessReadDescriptor::parameter_count())); 1636 DCHECK(r3.is(ArgumentsAccessReadDescriptor::parameter_count()));
1638 1637
1639 // Check that the key is a smi. 1638 // Check that the key is a smi.
1640 Label slow; 1639 Label slow;
1641 __ JumpIfNotSmi(r4, &slow); 1640 __ JumpIfNotSmi(r4, &slow);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1682 __ push(r4); 1681 __ push(r4);
1683 __ TailCallRuntime(Runtime::kGetArgumentsProperty, 1, 1); 1682 __ TailCallRuntime(Runtime::kGetArgumentsProperty, 1, 1);
1684 } 1683 }
1685 1684
1686 1685
1687 void ArgumentsAccessStub::GenerateNewSloppySlow(MacroAssembler* masm) { 1686 void ArgumentsAccessStub::GenerateNewSloppySlow(MacroAssembler* masm) {
1688 // sp[0] : number of parameters 1687 // sp[0] : number of parameters
1689 // sp[1] : receiver displacement 1688 // sp[1] : receiver displacement
1690 // sp[2] : function 1689 // sp[2] : function
1691 1690
1692 CHECK(!has_new_target());
1693
1694 // Check if the calling frame is an arguments adaptor frame. 1691 // Check if the calling frame is an arguments adaptor frame.
1695 Label runtime; 1692 Label runtime;
1696 __ LoadP(r6, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 1693 __ LoadP(r6, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
1697 __ LoadP(r5, MemOperand(r6, StandardFrameConstants::kContextOffset)); 1694 __ LoadP(r5, MemOperand(r6, StandardFrameConstants::kContextOffset));
1698 STATIC_ASSERT(StackFrame::ARGUMENTS_ADAPTOR < 0x3fffu); 1695 STATIC_ASSERT(StackFrame::ARGUMENTS_ADAPTOR < 0x3fffu);
1699 __ CmpSmiLiteral(r5, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); 1696 __ CmpSmiLiteral(r5, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0);
1700 __ bne(&runtime); 1697 __ bne(&runtime);
1701 1698
1702 // Patch the arguments.length and the parameters pointer in the current frame. 1699 // Patch the arguments.length and the parameters pointer in the current frame.
1703 __ LoadP(r5, MemOperand(r6, ArgumentsAdaptorFrameConstants::kLengthOffset)); 1700 __ LoadP(r5, MemOperand(r6, ArgumentsAdaptorFrameConstants::kLengthOffset));
(...skipping 10 matching lines...) Expand all
1714 1711
1715 void ArgumentsAccessStub::GenerateNewSloppyFast(MacroAssembler* masm) { 1712 void ArgumentsAccessStub::GenerateNewSloppyFast(MacroAssembler* masm) {
1716 // Stack layout: 1713 // Stack layout:
1717 // sp[0] : number of parameters (tagged) 1714 // sp[0] : number of parameters (tagged)
1718 // sp[1] : address of receiver argument 1715 // sp[1] : address of receiver argument
1719 // sp[2] : function 1716 // sp[2] : function
1720 // Registers used over whole function: 1717 // Registers used over whole function:
1721 // r9 : allocated object (tagged) 1718 // r9 : allocated object (tagged)
1722 // r11 : mapped parameter count (tagged) 1719 // r11 : mapped parameter count (tagged)
1723 1720
1724 CHECK(!has_new_target());
1725
1726 __ LoadP(r4, MemOperand(sp, 0 * kPointerSize)); 1721 __ LoadP(r4, MemOperand(sp, 0 * kPointerSize));
1727 // r4 = parameter count (tagged) 1722 // r4 = parameter count (tagged)
1728 1723
1729 // Check if the calling frame is an arguments adaptor frame. 1724 // Check if the calling frame is an arguments adaptor frame.
1730 Label runtime; 1725 Label runtime;
1731 Label adaptor_frame, try_allocate; 1726 Label adaptor_frame, try_allocate;
1732 __ LoadP(r6, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 1727 __ LoadP(r6, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
1733 __ LoadP(r5, MemOperand(r6, StandardFrameConstants::kContextOffset)); 1728 __ LoadP(r5, MemOperand(r6, StandardFrameConstants::kContextOffset));
1734 STATIC_ASSERT(StackFrame::ARGUMENTS_ADAPTOR < 0x3fffu); 1729 STATIC_ASSERT(StackFrame::ARGUMENTS_ADAPTOR < 0x3fffu);
1735 __ CmpSmiLiteral(r5, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); 1730 __ CmpSmiLiteral(r5, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0);
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
1998 __ CmpSmiLiteral(r6, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); 1993 __ CmpSmiLiteral(r6, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0);
1999 __ beq(&adaptor_frame); 1994 __ beq(&adaptor_frame);
2000 1995
2001 // Get the length from the frame. 1996 // Get the length from the frame.
2002 __ LoadP(r4, MemOperand(sp, 0)); 1997 __ LoadP(r4, MemOperand(sp, 0));
2003 __ b(&try_allocate); 1998 __ b(&try_allocate);
2004 1999
2005 // Patch the arguments.length and the parameters pointer. 2000 // Patch the arguments.length and the parameters pointer.
2006 __ bind(&adaptor_frame); 2001 __ bind(&adaptor_frame);
2007 __ LoadP(r4, MemOperand(r5, ArgumentsAdaptorFrameConstants::kLengthOffset)); 2002 __ LoadP(r4, MemOperand(r5, ArgumentsAdaptorFrameConstants::kLengthOffset));
2008 if (has_new_target()) {
2009 __ CmpSmiLiteral(r4, Smi::FromInt(0), r0);
2010 Label skip_decrement;
2011 __ beq(&skip_decrement);
2012 // Subtract 1 from smi-tagged arguments count.
2013 __ SubSmiLiteral(r4, r4, Smi::FromInt(1), r0);
2014 __ bind(&skip_decrement);
2015 }
2016 __ StoreP(r4, MemOperand(sp, 0)); 2003 __ StoreP(r4, MemOperand(sp, 0));
2017 __ SmiToPtrArrayOffset(r6, r4); 2004 __ SmiToPtrArrayOffset(r6, r4);
2018 __ add(r6, r5, r6); 2005 __ add(r6, r5, r6);
2019 __ addi(r6, r6, Operand(StandardFrameConstants::kCallerSPOffset)); 2006 __ addi(r6, r6, Operand(StandardFrameConstants::kCallerSPOffset));
2020 __ StoreP(r6, MemOperand(sp, 1 * kPointerSize)); 2007 __ StoreP(r6, MemOperand(sp, 1 * kPointerSize));
2021 2008
2022 // Try the new space allocation. Start out with computing the size 2009 // Try the new space allocation. Start out with computing the size
2023 // of the arguments object and the elements array in words. 2010 // of the arguments object and the elements array in words.
2024 Label add_arguments_object; 2011 Label add_arguments_object;
2025 __ bind(&try_allocate); 2012 __ bind(&try_allocate);
(...skipping 3639 matching lines...) Expand 10 before | Expand all | Expand 10 after
5665 kStackUnwindSpace, NULL, 5652 kStackUnwindSpace, NULL,
5666 MemOperand(fp, 6 * kPointerSize), NULL); 5653 MemOperand(fp, 6 * kPointerSize), NULL);
5667 } 5654 }
5668 5655
5669 5656
5670 #undef __ 5657 #undef __
5671 } // namespace internal 5658 } // namespace internal
5672 } // namespace v8 5659 } // namespace v8
5673 5660
5674 #endif // V8_TARGET_ARCH_PPC 5661 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/ppc/builtins-ppc.cc ('k') | src/ppc/full-codegen-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698