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

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

Issue 1693513002: [runtime] Introduce FastNewStrictArgumentsStub to optimize strict arguments. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix mips and mips64. Created 4 years, 10 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/arm/builtins-arm.cc ('k') | src/arm/interface-descriptors-arm.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 #if V8_TARGET_ARCH_ARM 5 #if V8_TARGET_ARCH_ARM
6 6
7 #include "src/base/bits.h" 7 #include "src/base/bits.h"
8 #include "src/bootstrapper.h" 8 #include "src/bootstrapper.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 1605 matching lines...) Expand 10 before | Expand all | Expand 10 after
1616 __ cmp(r6, Operand(Smi::FromInt(0))); 1616 __ cmp(r6, Operand(Smi::FromInt(0)));
1617 __ mov(r9, Operand::Zero(), LeaveCC, eq); 1617 __ mov(r9, Operand::Zero(), LeaveCC, eq);
1618 __ mov(r9, Operand(r6, LSL, 1), LeaveCC, ne); 1618 __ mov(r9, Operand(r6, LSL, 1), LeaveCC, ne);
1619 __ add(r9, r9, Operand(kParameterMapHeaderSize), LeaveCC, ne); 1619 __ add(r9, r9, Operand(kParameterMapHeaderSize), LeaveCC, ne);
1620 1620
1621 // 2. Backing store. 1621 // 2. Backing store.
1622 __ add(r9, r9, Operand(r5, LSL, 1)); 1622 __ add(r9, r9, Operand(r5, LSL, 1));
1623 __ add(r9, r9, Operand(FixedArray::kHeaderSize)); 1623 __ add(r9, r9, Operand(FixedArray::kHeaderSize));
1624 1624
1625 // 3. Arguments object. 1625 // 3. Arguments object.
1626 __ add(r9, r9, Operand(Heap::kSloppyArgumentsObjectSize)); 1626 __ add(r9, r9, Operand(JSSloppyArgumentsObject::kSize));
1627 1627
1628 // Do the allocation of all three objects in one go. 1628 // Do the allocation of all three objects in one go.
1629 __ Allocate(r9, r0, r9, r4, &runtime, TAG_OBJECT); 1629 __ Allocate(r9, r0, r9, r4, &runtime, TAG_OBJECT);
1630 1630
1631 // r0 = address of new object(s) (tagged) 1631 // r0 = address of new object(s) (tagged)
1632 // r2 = argument count (smi-tagged) 1632 // r2 = argument count (smi-tagged)
1633 // Get the arguments boilerplate from the current native context into r4. 1633 // Get the arguments boilerplate from the current native context into r4.
1634 const int kNormalOffset = 1634 const int kNormalOffset =
1635 Context::SlotOffset(Context::SLOPPY_ARGUMENTS_MAP_INDEX); 1635 Context::SlotOffset(Context::SLOPPY_ARGUMENTS_MAP_INDEX);
1636 const int kAliasedOffset = 1636 const int kAliasedOffset =
1637 Context::SlotOffset(Context::FAST_ALIASED_ARGUMENTS_MAP_INDEX); 1637 Context::SlotOffset(Context::FAST_ALIASED_ARGUMENTS_MAP_INDEX);
1638 1638
1639 __ ldr(r4, NativeContextMemOperand()); 1639 __ ldr(r4, NativeContextMemOperand());
1640 __ cmp(r6, Operand::Zero()); 1640 __ cmp(r6, Operand::Zero());
1641 __ ldr(r4, MemOperand(r4, kNormalOffset), eq); 1641 __ ldr(r4, MemOperand(r4, kNormalOffset), eq);
1642 __ ldr(r4, MemOperand(r4, kAliasedOffset), ne); 1642 __ ldr(r4, MemOperand(r4, kAliasedOffset), ne);
1643 1643
1644 // r0 = address of new object (tagged) 1644 // r0 = address of new object (tagged)
1645 // r2 = argument count (smi-tagged) 1645 // r2 = argument count (smi-tagged)
1646 // r4 = address of arguments map (tagged) 1646 // r4 = address of arguments map (tagged)
1647 // r6 = mapped parameter count (tagged) 1647 // r6 = mapped parameter count (tagged)
1648 __ str(r4, FieldMemOperand(r0, JSObject::kMapOffset)); 1648 __ str(r4, FieldMemOperand(r0, JSObject::kMapOffset));
1649 __ LoadRoot(r9, Heap::kEmptyFixedArrayRootIndex); 1649 __ LoadRoot(r9, Heap::kEmptyFixedArrayRootIndex);
1650 __ str(r9, FieldMemOperand(r0, JSObject::kPropertiesOffset)); 1650 __ str(r9, FieldMemOperand(r0, JSObject::kPropertiesOffset));
1651 __ str(r9, FieldMemOperand(r0, JSObject::kElementsOffset)); 1651 __ str(r9, FieldMemOperand(r0, JSObject::kElementsOffset));
1652 1652
1653 // Set up the callee in-object property. 1653 // Set up the callee in-object property.
1654 STATIC_ASSERT(Heap::kArgumentsCalleeIndex == 1);
1655 __ AssertNotSmi(r1); 1654 __ AssertNotSmi(r1);
1656 const int kCalleeOffset = JSObject::kHeaderSize + 1655 __ str(r1, FieldMemOperand(r0, JSSloppyArgumentsObject::kCalleeOffset));
1657 Heap::kArgumentsCalleeIndex * kPointerSize;
1658 __ str(r1, FieldMemOperand(r0, kCalleeOffset));
1659 1656
1660 // Use the length (smi tagged) and set that as an in-object property too. 1657 // Use the length (smi tagged) and set that as an in-object property too.
1661 __ AssertSmi(r5); 1658 __ AssertSmi(r5);
1662 STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0); 1659 __ str(r5, FieldMemOperand(r0, JSSloppyArgumentsObject::kLengthOffset));
1663 const int kLengthOffset = JSObject::kHeaderSize +
1664 Heap::kArgumentsLengthIndex * kPointerSize;
1665 __ str(r5, FieldMemOperand(r0, kLengthOffset));
1666 1660
1667 // Set up the elements pointer in the allocated arguments object. 1661 // Set up the elements pointer in the allocated arguments object.
1668 // If we allocated a parameter map, r4 will point there, otherwise 1662 // If we allocated a parameter map, r4 will point there, otherwise
1669 // it will point to the backing store. 1663 // it will point to the backing store.
1670 __ add(r4, r0, Operand(Heap::kSloppyArgumentsObjectSize)); 1664 __ add(r4, r0, Operand(JSSloppyArgumentsObject::kSize));
1671 __ str(r4, FieldMemOperand(r0, JSObject::kElementsOffset)); 1665 __ str(r4, FieldMemOperand(r0, JSObject::kElementsOffset));
1672 1666
1673 // r0 = address of new object (tagged) 1667 // r0 = address of new object (tagged)
1674 // r2 = argument count (tagged) 1668 // r2 = argument count (tagged)
1675 // r4 = address of parameter map or backing store (tagged) 1669 // r4 = address of parameter map or backing store (tagged)
1676 // r6 = mapped parameter count (tagged) 1670 // r6 = mapped parameter count (tagged)
1677 // Initialize parameter map. If there are no mapped arguments, we're done. 1671 // Initialize parameter map. If there are no mapped arguments, we're done.
1678 Label skip_parameter_map; 1672 Label skip_parameter_map;
1679 __ cmp(r6, Operand(Smi::FromInt(0))); 1673 __ cmp(r6, Operand(Smi::FromInt(0)));
1680 // Move backing store address to r1, because it is 1674 // Move backing store address to r1, because it is
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1721 __ add(r0, r0, Operand(kParameterMapHeaderSize - kHeapObjectTag)); 1715 __ add(r0, r0, Operand(kParameterMapHeaderSize - kHeapObjectTag));
1722 __ str(r9, MemOperand(r4, r0)); 1716 __ str(r9, MemOperand(r4, r0));
1723 __ sub(r0, r0, Operand(kParameterMapHeaderSize - FixedArray::kHeaderSize)); 1717 __ sub(r0, r0, Operand(kParameterMapHeaderSize - FixedArray::kHeaderSize));
1724 __ str(ip, MemOperand(r1, r0)); 1718 __ str(ip, MemOperand(r1, r0));
1725 __ add(r9, r9, Operand(Smi::FromInt(1))); 1719 __ add(r9, r9, Operand(Smi::FromInt(1)));
1726 __ bind(&parameters_test); 1720 __ bind(&parameters_test);
1727 __ cmp(r5, Operand(Smi::FromInt(0))); 1721 __ cmp(r5, Operand(Smi::FromInt(0)));
1728 __ b(ne, &parameters_loop); 1722 __ b(ne, &parameters_loop);
1729 1723
1730 // Restore r0 = new object (tagged) and r5 = argument count (tagged). 1724 // Restore r0 = new object (tagged) and r5 = argument count (tagged).
1731 __ sub(r0, r4, Operand(Heap::kSloppyArgumentsObjectSize)); 1725 __ sub(r0, r4, Operand(JSSloppyArgumentsObject::kSize));
1732 __ ldr(r5, FieldMemOperand(r0, kLengthOffset)); 1726 __ ldr(r5, FieldMemOperand(r0, JSSloppyArgumentsObject::kLengthOffset));
1733 1727
1734 __ bind(&skip_parameter_map); 1728 __ bind(&skip_parameter_map);
1735 // r0 = address of new object (tagged) 1729 // r0 = address of new object (tagged)
1736 // r1 = address of backing store (tagged) 1730 // r1 = address of backing store (tagged)
1737 // r5 = argument count (tagged) 1731 // r5 = argument count (tagged)
1738 // r6 = mapped parameter count (tagged) 1732 // r6 = mapped parameter count (tagged)
1739 // r9 = scratch 1733 // r9 = scratch
1740 // Copy arguments header and remaining slots (if there are any). 1734 // Copy arguments header and remaining slots (if there are any).
1741 __ LoadRoot(r9, Heap::kFixedArrayMapRootIndex); 1735 __ LoadRoot(r9, Heap::kFixedArrayMapRootIndex);
1742 __ str(r9, FieldMemOperand(r1, FixedArray::kMapOffset)); 1736 __ str(r9, FieldMemOperand(r1, FixedArray::kMapOffset));
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1785 1779
1786 // Perform tail call to the entry. 1780 // Perform tail call to the entry.
1787 __ TailCallRuntime(Runtime::kLoadElementWithInterceptor); 1781 __ TailCallRuntime(Runtime::kLoadElementWithInterceptor);
1788 1782
1789 __ bind(&slow); 1783 __ bind(&slow);
1790 PropertyAccessCompiler::TailCallBuiltin( 1784 PropertyAccessCompiler::TailCallBuiltin(
1791 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); 1785 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC));
1792 } 1786 }
1793 1787
1794 1788
1795 void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) {
1796 // r1 : function
1797 // r2 : number of parameters (tagged)
1798 // r3 : parameters pointer
1799
1800 DCHECK(r1.is(ArgumentsAccessNewDescriptor::function()));
1801 DCHECK(r2.is(ArgumentsAccessNewDescriptor::parameter_count()));
1802 DCHECK(r3.is(ArgumentsAccessNewDescriptor::parameter_pointer()));
1803
1804 // Check if the calling frame is an arguments adaptor frame.
1805 Label try_allocate, runtime;
1806 __ ldr(r4, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
1807 __ ldr(r0, MemOperand(r4, StandardFrameConstants::kContextOffset));
1808 __ cmp(r0, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
1809 __ b(ne, &try_allocate);
1810
1811 // Patch the arguments.length and the parameters pointer.
1812 __ ldr(r2, MemOperand(r4, ArgumentsAdaptorFrameConstants::kLengthOffset));
1813 __ add(r4, r4, Operand::PointerOffsetFromSmiKey(r2));
1814 __ add(r3, r4, Operand(StandardFrameConstants::kCallerSPOffset));
1815
1816 // Try the new space allocation. Start out with computing the size
1817 // of the arguments object and the elements array in words.
1818 Label add_arguments_object;
1819 __ bind(&try_allocate);
1820 __ SmiUntag(r9, r2, SetCC);
1821 __ b(eq, &add_arguments_object);
1822 __ add(r9, r9, Operand(FixedArray::kHeaderSize / kPointerSize));
1823 __ bind(&add_arguments_object);
1824 __ add(r9, r9, Operand(Heap::kStrictArgumentsObjectSize / kPointerSize));
1825
1826 // Do the allocation of both objects in one go.
1827 __ Allocate(r9, r0, r4, r5, &runtime,
1828 static_cast<AllocationFlags>(TAG_OBJECT | SIZE_IN_WORDS));
1829
1830 // Get the arguments boilerplate from the current native context.
1831 __ LoadNativeContextSlot(Context::STRICT_ARGUMENTS_MAP_INDEX, r4);
1832
1833 __ str(r4, FieldMemOperand(r0, JSObject::kMapOffset));
1834 __ LoadRoot(r5, Heap::kEmptyFixedArrayRootIndex);
1835 __ str(r5, FieldMemOperand(r0, JSObject::kPropertiesOffset));
1836 __ str(r5, FieldMemOperand(r0, JSObject::kElementsOffset));
1837
1838 // Get the length (smi tagged) and set that as an in-object property too.
1839 STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0);
1840 __ AssertSmi(r2);
1841 __ str(r2,
1842 FieldMemOperand(r0, JSObject::kHeaderSize +
1843 Heap::kArgumentsLengthIndex * kPointerSize));
1844
1845 // If there are no actual arguments, we're done.
1846 Label done;
1847 __ cmp(r2, Operand::Zero());
1848 __ b(eq, &done);
1849
1850 // Set up the elements pointer in the allocated arguments object and
1851 // initialize the header in the elements fixed array.
1852 __ add(r4, r0, Operand(Heap::kStrictArgumentsObjectSize));
1853 __ str(r4, FieldMemOperand(r0, JSObject::kElementsOffset));
1854 __ LoadRoot(r5, Heap::kFixedArrayMapRootIndex);
1855 __ str(r5, FieldMemOperand(r4, FixedArray::kMapOffset));
1856 __ str(r2, FieldMemOperand(r4, FixedArray::kLengthOffset));
1857 __ SmiUntag(r2);
1858
1859 // Copy the fixed array slots.
1860 Label loop;
1861 // Set up r4 to point to the first array slot.
1862 __ add(r4, r4, Operand(FixedArray::kHeaderSize - kHeapObjectTag));
1863 __ bind(&loop);
1864 // Pre-decrement r3 with kPointerSize on each iteration.
1865 // Pre-decrement in order to skip receiver.
1866 __ ldr(r5, MemOperand(r3, kPointerSize, NegPreIndex));
1867 // Post-increment r4 with kPointerSize on each iteration.
1868 __ str(r5, MemOperand(r4, kPointerSize, PostIndex));
1869 __ sub(r2, r2, Operand(1));
1870 __ cmp(r2, Operand::Zero());
1871 __ b(ne, &loop);
1872
1873 // Return.
1874 __ bind(&done);
1875 __ Ret();
1876
1877 // Do the runtime call to allocate the arguments object.
1878 __ bind(&runtime);
1879 __ Push(r1, r3, r2);
1880 __ TailCallRuntime(Runtime::kNewStrictArguments);
1881 }
1882
1883
1884 void RegExpExecStub::Generate(MacroAssembler* masm) { 1789 void RegExpExecStub::Generate(MacroAssembler* masm) {
1885 // Just jump directly to runtime if native RegExp is not selected at compile 1790 // Just jump directly to runtime if native RegExp is not selected at compile
1886 // time or if regexp entry in generated code is turned off runtime switch or 1791 // time or if regexp entry in generated code is turned off runtime switch or
1887 // at compilation. 1792 // at compilation.
1888 #ifdef V8_INTERPRETED_REGEXP 1793 #ifdef V8_INTERPRETED_REGEXP
1889 __ TailCallRuntime(Runtime::kRegExpExec); 1794 __ TailCallRuntime(Runtime::kRegExpExec);
1890 #else // V8_INTERPRETED_REGEXP 1795 #else // V8_INTERPRETED_REGEXP
1891 1796
1892 // Stack frame on entry. 1797 // Stack frame on entry.
1893 // sp[0]: last_match_info (expected JSArray) 1798 // sp[0]: last_match_info (expected JSArray)
(...skipping 3194 matching lines...) Expand 10 before | Expand all | Expand 10 after
5088 __ Push(r0, r2, r1); 4993 __ Push(r0, r2, r1);
5089 __ CallRuntime(Runtime::kAllocateInNewSpace); 4994 __ CallRuntime(Runtime::kAllocateInNewSpace);
5090 __ mov(r3, r0); 4995 __ mov(r3, r0);
5091 __ Pop(r0, r2); 4996 __ Pop(r0, r2);
5092 } 4997 }
5093 __ jmp(&done_allocate); 4998 __ jmp(&done_allocate);
5094 } 4999 }
5095 } 5000 }
5096 5001
5097 5002
5003 void FastNewStrictArgumentsStub::Generate(MacroAssembler* masm) {
5004 // ----------- S t a t e -------------
5005 // -- r1 : function
5006 // -- cp : context
5007 // -- fp : frame pointer
5008 // -- lr : return address
5009 // -----------------------------------
5010 __ AssertFunction(r1);
5011
5012 // For Ignition we need to skip all possible handler/stub frames until
5013 // we reach the JavaScript frame for the function (similar to what the
5014 // runtime fallback implementation does). So make r2 point to that
5015 // JavaScript frame.
5016 {
5017 Label loop, loop_entry;
5018 __ mov(r2, fp);
5019 __ b(&loop_entry);
5020 __ bind(&loop);
5021 __ ldr(r2, MemOperand(r2, StandardFrameConstants::kCallerFPOffset));
5022 __ bind(&loop_entry);
5023 __ ldr(ip, MemOperand(r2, StandardFrameConstants::kMarkerOffset));
5024 __ cmp(ip, r1);
5025 __ b(ne, &loop);
5026 }
5027
5028 // Check if we have an arguments adaptor frame below the function frame.
5029 Label arguments_adaptor, arguments_done;
5030 __ ldr(r3, MemOperand(r2, StandardFrameConstants::kCallerFPOffset));
5031 __ ldr(ip, MemOperand(r3, StandardFrameConstants::kContextOffset));
5032 __ cmp(ip, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
5033 __ b(eq, &arguments_adaptor);
5034 {
5035 __ ldr(r1, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset));
5036 __ ldr(r0, FieldMemOperand(
5037 r1, SharedFunctionInfo::kFormalParameterCountOffset));
5038 __ add(r2, r2, Operand(r0, LSL, kPointerSizeLog2 - 1));
5039 __ add(r2, r2,
5040 Operand(StandardFrameConstants::kCallerSPOffset - 1 * kPointerSize));
5041 }
5042 __ b(&arguments_done);
5043 __ bind(&arguments_adaptor);
5044 {
5045 __ ldr(r0, MemOperand(r3, ArgumentsAdaptorFrameConstants::kLengthOffset));
5046 __ add(r2, r3, Operand(r0, LSL, kPointerSizeLog2 - 1));
5047 __ add(r2, r2,
5048 Operand(StandardFrameConstants::kCallerSPOffset - 1 * kPointerSize));
5049 }
5050 __ bind(&arguments_done);
5051
5052 // ----------- S t a t e -------------
5053 // -- cp : context
5054 // -- r0 : number of rest parameters (tagged)
5055 // -- r2 : pointer to first rest parameters
5056 // -- lr : return address
5057 // -----------------------------------
5058
5059 // Allocate space for the strict arguments object plus the backing store.
5060 Label allocate, done_allocate;
5061 __ mov(r1, Operand(JSStrictArgumentsObject::kSize + FixedArray::kHeaderSize));
5062 __ add(r1, r1, Operand(r0, LSL, kPointerSizeLog2 - 1));
5063 __ Allocate(r1, r3, r4, r5, &allocate, TAG_OBJECT);
5064 __ bind(&done_allocate);
5065
5066 // Setup the elements array in r3.
5067 __ LoadRoot(r1, Heap::kFixedArrayMapRootIndex);
5068 __ str(r1, FieldMemOperand(r3, FixedArray::kMapOffset));
5069 __ str(r0, FieldMemOperand(r3, FixedArray::kLengthOffset));
5070 __ add(r4, r3, Operand(FixedArray::kHeaderSize));
5071 {
5072 Label loop, done_loop;
5073 __ add(r1, r4, Operand(r0, LSL, kPointerSizeLog2 - 1));
5074 __ bind(&loop);
5075 __ cmp(r4, r1);
5076 __ b(eq, &done_loop);
5077 __ ldr(ip, MemOperand(r2, 1 * kPointerSize, NegPostIndex));
5078 __ str(ip, FieldMemOperand(r4, 0 * kPointerSize));
5079 __ add(r4, r4, Operand(1 * kPointerSize));
5080 __ b(&loop);
5081 __ bind(&done_loop);
5082 }
5083
5084 // Setup the strict arguments object in r4.
5085 __ LoadNativeContextSlot(Context::STRICT_ARGUMENTS_MAP_INDEX, r1);
5086 __ str(r1, FieldMemOperand(r4, JSStrictArgumentsObject::kMapOffset));
5087 __ LoadRoot(r1, Heap::kEmptyFixedArrayRootIndex);
5088 __ str(r1, FieldMemOperand(r4, JSStrictArgumentsObject::kPropertiesOffset));
5089 __ str(r3, FieldMemOperand(r4, JSStrictArgumentsObject::kElementsOffset));
5090 __ str(r0, FieldMemOperand(r4, JSStrictArgumentsObject::kLengthOffset));
5091 STATIC_ASSERT(JSStrictArgumentsObject::kSize == 4 * kPointerSize);
5092 __ mov(r0, r4);
5093 __ Ret();
5094
5095 // Fall back to %AllocateInNewSpace.
5096 __ bind(&allocate);
5097 {
5098 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
5099 __ SmiTag(r1);
5100 __ Push(r0, r2, r1);
5101 __ CallRuntime(Runtime::kAllocateInNewSpace);
5102 __ mov(r3, r0);
5103 __ Pop(r0, r2);
5104 }
5105 __ b(&done_allocate);
5106 }
5107
5108
5098 void LoadGlobalViaContextStub::Generate(MacroAssembler* masm) { 5109 void LoadGlobalViaContextStub::Generate(MacroAssembler* masm) {
5099 Register context = cp; 5110 Register context = cp;
5100 Register result = r0; 5111 Register result = r0;
5101 Register slot = r2; 5112 Register slot = r2;
5102 5113
5103 // Go up the context chain to the script context. 5114 // Go up the context chain to the script context.
5104 for (int i = 0; i < depth(); ++i) { 5115 for (int i = 0; i < depth(); ++i) {
5105 __ ldr(result, ContextMemOperand(context, Context::PREVIOUS_INDEX)); 5116 __ ldr(result, ContextMemOperand(context, Context::PREVIOUS_INDEX));
5106 context = result; 5117 context = result;
5107 } 5118 }
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
5568 kStackUnwindSpace, NULL, return_value_operand, NULL); 5579 kStackUnwindSpace, NULL, return_value_operand, NULL);
5569 } 5580 }
5570 5581
5571 5582
5572 #undef __ 5583 #undef __
5573 5584
5574 } // namespace internal 5585 } // namespace internal
5575 } // namespace v8 5586 } // namespace v8
5576 5587
5577 #endif // V8_TARGET_ARCH_ARM 5588 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/builtins-arm.cc ('k') | src/arm/interface-descriptors-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698