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

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

Issue 1696743002: PPC: [runtime] Introduce FastNewStrictArgumentsStub to optimize strict arguments. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: 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/ppc/builtins-ppc.cc ('k') | src/ppc/interface-descriptors-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 #if V8_TARGET_ARCH_PPC 5 #if V8_TARGET_ARCH_PPC
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 1680 matching lines...) Expand 10 before | Expand all | Expand 10 after
1691 __ addi(r11, r11, Operand(kParameterMapHeaderSize)); 1691 __ addi(r11, r11, Operand(kParameterMapHeaderSize));
1692 __ bind(&skip3); 1692 __ bind(&skip3);
1693 } 1693 }
1694 1694
1695 // 2. Backing store. 1695 // 2. Backing store.
1696 __ SmiToPtrArrayOffset(r7, r8); 1696 __ SmiToPtrArrayOffset(r7, r8);
1697 __ add(r11, r11, r7); 1697 __ add(r11, r11, r7);
1698 __ addi(r11, r11, Operand(FixedArray::kHeaderSize)); 1698 __ addi(r11, r11, Operand(FixedArray::kHeaderSize));
1699 1699
1700 // 3. Arguments object. 1700 // 3. Arguments object.
1701 __ addi(r11, r11, Operand(Heap::kSloppyArgumentsObjectSize)); 1701 __ addi(r11, r11, Operand(JSSloppyArgumentsObject::kSize));
1702 1702
1703 // Do the allocation of all three objects in one go. 1703 // Do the allocation of all three objects in one go.
1704 __ Allocate(r11, r3, r11, r7, &runtime, TAG_OBJECT); 1704 __ Allocate(r11, r3, r11, r7, &runtime, TAG_OBJECT);
1705 1705
1706 // r3 = address of new object(s) (tagged) 1706 // r3 = address of new object(s) (tagged)
1707 // r5 = argument count (smi-tagged) 1707 // r5 = argument count (smi-tagged)
1708 // Get the arguments boilerplate from the current native context into r4. 1708 // Get the arguments boilerplate from the current native context into r4.
1709 const int kNormalOffset = 1709 const int kNormalOffset =
1710 Context::SlotOffset(Context::SLOPPY_ARGUMENTS_MAP_INDEX); 1710 Context::SlotOffset(Context::SLOPPY_ARGUMENTS_MAP_INDEX);
1711 const int kAliasedOffset = 1711 const int kAliasedOffset =
(...skipping 18 matching lines...) Expand all
1730 // r3 = address of new object (tagged) 1730 // r3 = address of new object (tagged)
1731 // r5 = argument count (smi-tagged) 1731 // r5 = argument count (smi-tagged)
1732 // r7 = address of arguments map (tagged) 1732 // r7 = address of arguments map (tagged)
1733 // r9 = mapped parameter count (tagged) 1733 // r9 = mapped parameter count (tagged)
1734 __ StoreP(r7, FieldMemOperand(r3, JSObject::kMapOffset), r0); 1734 __ StoreP(r7, FieldMemOperand(r3, JSObject::kMapOffset), r0);
1735 __ LoadRoot(r11, Heap::kEmptyFixedArrayRootIndex); 1735 __ LoadRoot(r11, Heap::kEmptyFixedArrayRootIndex);
1736 __ StoreP(r11, FieldMemOperand(r3, JSObject::kPropertiesOffset), r0); 1736 __ StoreP(r11, FieldMemOperand(r3, JSObject::kPropertiesOffset), r0);
1737 __ StoreP(r11, FieldMemOperand(r3, JSObject::kElementsOffset), r0); 1737 __ StoreP(r11, FieldMemOperand(r3, JSObject::kElementsOffset), r0);
1738 1738
1739 // Set up the callee in-object property. 1739 // Set up the callee in-object property.
1740 STATIC_ASSERT(Heap::kArgumentsCalleeIndex == 1);
1741 __ AssertNotSmi(r4); 1740 __ AssertNotSmi(r4);
1742 const int kCalleeOffset = 1741 __ StoreP(r4, FieldMemOperand(r3, JSSloppyArgumentsObject::kCalleeOffset),
1743 JSObject::kHeaderSize + Heap::kArgumentsCalleeIndex * kPointerSize; 1742 r0);
1744 __ StoreP(r4, FieldMemOperand(r3, kCalleeOffset), r0);
1745 1743
1746 // Use the length (smi tagged) and set that as an in-object property too. 1744 // Use the length (smi tagged) and set that as an in-object property too.
1747 __ AssertSmi(r8); 1745 __ AssertSmi(r8);
1748 STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0); 1746 __ StoreP(r8, FieldMemOperand(r3, JSSloppyArgumentsObject::kLengthOffset),
1749 const int kLengthOffset = 1747 r0);
1750 JSObject::kHeaderSize + Heap::kArgumentsLengthIndex * kPointerSize;
1751 __ StoreP(r8, FieldMemOperand(r3, kLengthOffset), r0);
1752 1748
1753 // Set up the elements pointer in the allocated arguments object. 1749 // Set up the elements pointer in the allocated arguments object.
1754 // If we allocated a parameter map, r7 will point there, otherwise 1750 // If we allocated a parameter map, r7 will point there, otherwise
1755 // it will point to the backing store. 1751 // it will point to the backing store.
1756 __ addi(r7, r3, Operand(Heap::kSloppyArgumentsObjectSize)); 1752 __ addi(r7, r3, Operand(JSSloppyArgumentsObject::kSize));
1757 __ StoreP(r7, FieldMemOperand(r3, JSObject::kElementsOffset), r0); 1753 __ StoreP(r7, FieldMemOperand(r3, JSObject::kElementsOffset), r0);
1758 1754
1759 // r3 = address of new object (tagged) 1755 // r3 = address of new object (tagged)
1760 // r5 = argument count (tagged) 1756 // r5 = argument count (tagged)
1761 // r7 = address of parameter map or backing store (tagged) 1757 // r7 = address of parameter map or backing store (tagged)
1762 // r9 = mapped parameter count (tagged) 1758 // r9 = mapped parameter count (tagged)
1763 // Initialize parameter map. If there are no mapped arguments, we're done. 1759 // Initialize parameter map. If there are no mapped arguments, we're done.
1764 Label skip_parameter_map; 1760 Label skip_parameter_map;
1765 __ CmpSmiLiteral(r9, Smi::FromInt(0), r0); 1761 __ CmpSmiLiteral(r9, Smi::FromInt(0), r0);
1766 if (CpuFeatures::IsSupported(ISELECT)) { 1762 if (CpuFeatures::IsSupported(ISELECT)) {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
1818 __ addi(r10, r10, Operand(FixedArray::kHeaderSize - kHeapObjectTag)); 1814 __ addi(r10, r10, Operand(FixedArray::kHeaderSize - kHeapObjectTag));
1819 __ addi(r8, r8, Operand(kParameterMapHeaderSize - kHeapObjectTag)); 1815 __ addi(r8, r8, Operand(kParameterMapHeaderSize - kHeapObjectTag));
1820 1816
1821 __ bind(&parameters_loop); 1817 __ bind(&parameters_loop);
1822 __ StorePU(r11, MemOperand(r8, -kPointerSize)); 1818 __ StorePU(r11, MemOperand(r8, -kPointerSize));
1823 __ StorePU(ip, MemOperand(r10, -kPointerSize)); 1819 __ StorePU(ip, MemOperand(r10, -kPointerSize));
1824 __ AddSmiLiteral(r11, r11, Smi::FromInt(1), r0); 1820 __ AddSmiLiteral(r11, r11, Smi::FromInt(1), r0);
1825 __ bdnz(&parameters_loop); 1821 __ bdnz(&parameters_loop);
1826 1822
1827 // Restore r8 = argument count (tagged). 1823 // Restore r8 = argument count (tagged).
1828 __ LoadP(r8, FieldMemOperand(r3, kLengthOffset)); 1824 __ LoadP(r8, FieldMemOperand(r3, JSSloppyArgumentsObject::kLengthOffset));
1829 1825
1830 __ bind(&skip_parameter_map); 1826 __ bind(&skip_parameter_map);
1831 // r3 = address of new object (tagged) 1827 // r3 = address of new object (tagged)
1832 // r4 = address of backing store (tagged) 1828 // r4 = address of backing store (tagged)
1833 // r8 = argument count (tagged) 1829 // r8 = argument count (tagged)
1834 // r9 = mapped parameter count (tagged) 1830 // r9 = mapped parameter count (tagged)
1835 // r11 = scratch 1831 // r11 = scratch
1836 // Copy arguments header and remaining slots (if there are any). 1832 // Copy arguments header and remaining slots (if there are any).
1837 __ LoadRoot(r11, Heap::kFixedArrayMapRootIndex); 1833 __ LoadRoot(r11, Heap::kFixedArrayMapRootIndex);
1838 __ StoreP(r11, FieldMemOperand(r4, FixedArray::kMapOffset), r0); 1834 __ StoreP(r11, FieldMemOperand(r4, FixedArray::kMapOffset), r0);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1882 1878
1883 // Perform tail call to the entry. 1879 // Perform tail call to the entry.
1884 __ TailCallRuntime(Runtime::kLoadElementWithInterceptor); 1880 __ TailCallRuntime(Runtime::kLoadElementWithInterceptor);
1885 1881
1886 __ bind(&slow); 1882 __ bind(&slow);
1887 PropertyAccessCompiler::TailCallBuiltin( 1883 PropertyAccessCompiler::TailCallBuiltin(
1888 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC)); 1884 masm, PropertyAccessCompiler::MissBuiltin(Code::KEYED_LOAD_IC));
1889 } 1885 }
1890 1886
1891 1887
1892 void ArgumentsAccessStub::GenerateNewStrict(MacroAssembler* masm) {
1893 // r4 : function
1894 // r5 : number of parameters (tagged)
1895 // r6 : parameters pointer
1896
1897 DCHECK(r4.is(ArgumentsAccessNewDescriptor::function()));
1898 DCHECK(r5.is(ArgumentsAccessNewDescriptor::parameter_count()));
1899 DCHECK(r6.is(ArgumentsAccessNewDescriptor::parameter_pointer()));
1900
1901 // Check if the calling frame is an arguments adaptor frame.
1902 Label try_allocate, runtime;
1903 __ LoadP(r7, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
1904 __ LoadP(r3, MemOperand(r7, StandardFrameConstants::kContextOffset));
1905 __ CmpSmiLiteral(r3, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0);
1906 __ bne(&try_allocate);
1907
1908 // Patch the arguments.length and the parameters pointer.
1909 __ LoadP(r5, MemOperand(r7, ArgumentsAdaptorFrameConstants::kLengthOffset));
1910 __ SmiToPtrArrayOffset(r6, r5);
1911 __ add(r6, r6, r7);
1912 __ addi(r6, r6, Operand(StandardFrameConstants::kCallerSPOffset));
1913
1914 // Try the new space allocation. Start out with computing the size
1915 // of the arguments object and the elements array in words.
1916 Label add_arguments_object;
1917 __ bind(&try_allocate);
1918 __ SmiUntag(r11, r5, SetRC);
1919 __ beq(&add_arguments_object, cr0);
1920 __ addi(r11, r11, Operand(FixedArray::kHeaderSize / kPointerSize));
1921 __ bind(&add_arguments_object);
1922 __ addi(r11, r11, Operand(Heap::kStrictArgumentsObjectSize / kPointerSize));
1923
1924 // Do the allocation of both objects in one go.
1925 __ Allocate(r11, r3, r7, r8, &runtime,
1926 static_cast<AllocationFlags>(TAG_OBJECT | SIZE_IN_WORDS));
1927
1928 // Get the arguments boilerplate from the current native context.
1929 __ LoadNativeContextSlot(Context::STRICT_ARGUMENTS_MAP_INDEX, r7);
1930
1931 __ StoreP(r7, FieldMemOperand(r3, JSObject::kMapOffset), r0);
1932 __ LoadRoot(r8, Heap::kEmptyFixedArrayRootIndex);
1933 __ StoreP(r8, FieldMemOperand(r3, JSObject::kPropertiesOffset), r0);
1934 __ StoreP(r8, FieldMemOperand(r3, JSObject::kElementsOffset), r0);
1935
1936 // Get the length (smi tagged) and set that as an in-object property too.
1937 STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0);
1938 __ AssertSmi(r5);
1939 __ StoreP(r5,
1940 FieldMemOperand(r3, JSObject::kHeaderSize +
1941 Heap::kArgumentsLengthIndex * kPointerSize),
1942 r0);
1943
1944 // If there are no actual arguments, we're done.
1945 __ SmiUntag(r9, r5, SetRC);
1946 __ Ret(eq, cr0);
1947
1948 // Set up the elements pointer in the allocated arguments object and
1949 // initialize the header in the elements fixed array.
1950 __ addi(r7, r3, Operand(Heap::kStrictArgumentsObjectSize));
1951 __ StoreP(r7, FieldMemOperand(r3, JSObject::kElementsOffset), r0);
1952 __ LoadRoot(r8, Heap::kFixedArrayMapRootIndex);
1953 __ StoreP(r8, FieldMemOperand(r7, FixedArray::kMapOffset), r0);
1954 __ StoreP(r5, FieldMemOperand(r7, FixedArray::kLengthOffset), r0);
1955
1956 // Copy the fixed array slots.
1957 Label loop;
1958 // Set up r7 to point just prior to the first array slot.
1959 __ addi(r7, r7,
1960 Operand(FixedArray::kHeaderSize - kHeapObjectTag - kPointerSize));
1961 __ mtctr(r9);
1962 __ bind(&loop);
1963 // Pre-decrement r6 with kPointerSize on each iteration.
1964 // Pre-decrement in order to skip receiver.
1965 __ LoadPU(r8, MemOperand(r6, -kPointerSize));
1966 // Pre-increment r7 with kPointerSize on each iteration.
1967 __ StorePU(r8, MemOperand(r7, kPointerSize));
1968 __ bdnz(&loop);
1969
1970 // Return.
1971 __ Ret();
1972
1973 // Do the runtime call to allocate the arguments object.
1974 __ bind(&runtime);
1975 __ Push(r4, r6, r5);
1976 __ TailCallRuntime(Runtime::kNewStrictArguments);
1977 }
1978
1979
1980 void RegExpExecStub::Generate(MacroAssembler* masm) { 1888 void RegExpExecStub::Generate(MacroAssembler* masm) {
1981 // Just jump directly to runtime if native RegExp is not selected at compile 1889 // Just jump directly to runtime if native RegExp is not selected at compile
1982 // time or if regexp entry in generated code is turned off runtime switch or 1890 // time or if regexp entry in generated code is turned off runtime switch or
1983 // at compilation. 1891 // at compilation.
1984 #ifdef V8_INTERPRETED_REGEXP 1892 #ifdef V8_INTERPRETED_REGEXP
1985 __ TailCallRuntime(Runtime::kRegExpExec); 1893 __ TailCallRuntime(Runtime::kRegExpExec);
1986 #else // V8_INTERPRETED_REGEXP 1894 #else // V8_INTERPRETED_REGEXP
1987 1895
1988 // Stack frame on entry. 1896 // Stack frame on entry.
1989 // sp[0]: last_match_info (expected JSArray) 1897 // sp[0]: last_match_info (expected JSArray)
(...skipping 3279 matching lines...) Expand 10 before | Expand all | Expand 10 after
5269 __ StoreP(r3, MemOperand(r7, JSArray::kLengthOffset)); 5177 __ StoreP(r3, MemOperand(r7, JSArray::kLengthOffset));
5270 STATIC_ASSERT(JSArray::kSize == 4 * kPointerSize); 5178 STATIC_ASSERT(JSArray::kSize == 4 * kPointerSize);
5271 __ addi(r3, r7, Operand(kHeapObjectTag)); 5179 __ addi(r3, r7, Operand(kHeapObjectTag));
5272 __ Ret(); 5180 __ Ret();
5273 5181
5274 // Fall back to %AllocateInNewSpace. 5182 // Fall back to %AllocateInNewSpace.
5275 __ bind(&allocate); 5183 __ bind(&allocate);
5276 { 5184 {
5277 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 5185 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
5278 __ SmiTag(r4); 5186 __ SmiTag(r4);
5279 __ Push(r3, r5, r9, r4); 5187 __ Push(r3, r5, r4);
5280 __ CallRuntime(Runtime::kAllocateInNewSpace); 5188 __ CallRuntime(Runtime::kAllocateInNewSpace);
5281 __ mr(r6, r3); 5189 __ mr(r6, r3);
5282 __ Pop(r3, r5, r9); 5190 __ Pop(r3, r5);
5283 } 5191 }
5284 __ b(&done_allocate); 5192 __ b(&done_allocate);
5285 } 5193 }
5286 } 5194 }
5287 5195
5196 void FastNewStrictArgumentsStub::Generate(MacroAssembler* masm) {
5197 // ----------- S t a t e -------------
5198 // -- r4 : function
5199 // -- cp : context
5200 // -- fp : frame pointer
5201 // -- lr : return address
5202 // -----------------------------------
5203 __ AssertFunction(r4);
5204
5205 // For Ignition we need to skip all possible handler/stub frames until
5206 // we reach the JavaScript frame for the function (similar to what the
5207 // runtime fallback implementation does). So make r5 point to that
5208 // JavaScript frame.
5209 {
5210 Label loop, loop_entry;
5211 __ mr(r5, fp);
5212 __ b(&loop_entry);
5213 __ bind(&loop);
5214 __ LoadP(r5, MemOperand(r5, StandardFrameConstants::kCallerFPOffset));
5215 __ bind(&loop_entry);
5216 __ LoadP(ip, MemOperand(r5, StandardFrameConstants::kMarkerOffset));
5217 __ cmp(ip, r4);
5218 __ bne(&loop);
5219 }
5220
5221 // Check if we have an arguments adaptor frame below the function frame.
5222 Label arguments_adaptor, arguments_done;
5223 __ LoadP(r6, MemOperand(r5, StandardFrameConstants::kCallerFPOffset));
5224 __ LoadP(ip, MemOperand(r6, StandardFrameConstants::kContextOffset));
5225 __ CmpSmiLiteral(ip, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0);
5226 __ beq(&arguments_adaptor);
5227 {
5228 __ LoadP(r4, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset));
5229 __ LoadWordArith(
5230 r3,
5231 FieldMemOperand(r4, SharedFunctionInfo::kFormalParameterCountOffset));
5232 #if V8_TARGET_ARCH_PPC64
5233 __ SmiTag(r3);
5234 #endif
5235 __ SmiToPtrArrayOffset(r9, r3);
5236 __ add(r5, r5, r9);
5237 }
5238 __ b(&arguments_done);
5239 __ bind(&arguments_adaptor);
5240 {
5241 __ LoadP(r3, MemOperand(r6, ArgumentsAdaptorFrameConstants::kLengthOffset));
5242 __ SmiToPtrArrayOffset(r9, r3);
5243 __ add(r5, r6, r9);
5244 }
5245 __ bind(&arguments_done);
5246 __ addi(r5, r5, Operand(StandardFrameConstants::kCallerSPOffset));
5247
5248 // ----------- S t a t e -------------
5249 // -- cp : context
5250 // -- r3 : number of rest parameters (tagged)
5251 // -- r5 : pointer just past first rest parameters
5252 // -- r9 : size of rest parameters
5253 // -- lr : return address
5254 // -----------------------------------
5255
5256 // Allocate space for the strict arguments object plus the backing store.
5257 Label allocate, done_allocate;
5258 __ mov(r4, Operand(JSStrictArgumentsObject::kSize + FixedArray::kHeaderSize));
5259 __ add(r4, r4, r9);
5260 __ Allocate(r4, r6, r7, r8, &allocate, TAG_OBJECT);
5261 __ bind(&done_allocate);
5262
5263 // Setup the elements array in r6.
5264 __ LoadRoot(r4, Heap::kFixedArrayMapRootIndex);
5265 __ StoreP(r4, FieldMemOperand(r6, FixedArray::kMapOffset), r0);
5266 __ StoreP(r3, FieldMemOperand(r6, FixedArray::kLengthOffset), r0);
5267 __ addi(r7, r6,
5268 Operand(FixedArray::kHeaderSize - kHeapObjectTag - kPointerSize));
5269 {
5270 Label loop, done_loop;
5271 __ SmiUntag(r0, r3, SetRC);
5272 __ beq(&done_loop, cr0);
5273 __ mtctr(r0);
5274 __ bind(&loop);
5275 __ LoadPU(ip, MemOperand(r5, -kPointerSize));
5276 __ StorePU(ip, MemOperand(r7, kPointerSize));
5277 __ bdnz(&loop);
5278 __ bind(&done_loop);
5279 __ addi(r7, r7, Operand(kPointerSize));
5280 }
5281
5282 // Setup the rest parameter array in r7.
5283 __ LoadNativeContextSlot(Context::STRICT_ARGUMENTS_MAP_INDEX, r4);
5284 __ StoreP(r4, MemOperand(r7, JSStrictArgumentsObject::kMapOffset));
5285 __ LoadRoot(r4, Heap::kEmptyFixedArrayRootIndex);
5286 __ StoreP(r4, MemOperand(r7, JSStrictArgumentsObject::kPropertiesOffset));
5287 __ StoreP(r6, MemOperand(r7, JSStrictArgumentsObject::kElementsOffset));
5288 __ StoreP(r3, MemOperand(r7, JSStrictArgumentsObject::kLengthOffset));
5289 STATIC_ASSERT(JSStrictArgumentsObject::kSize == 4 * kPointerSize);
5290 __ addi(r3, r7, Operand(kHeapObjectTag));
5291 __ Ret();
5292
5293 // Fall back to %AllocateInNewSpace.
5294 __ bind(&allocate);
5295 {
5296 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
5297 __ SmiTag(r4);
5298 __ Push(r3, r5, r4);
5299 __ CallRuntime(Runtime::kAllocateInNewSpace);
5300 __ mr(r6, r3);
5301 __ Pop(r3, r5);
5302 }
5303 __ b(&done_allocate);
5304 }
5305
5288 void LoadGlobalViaContextStub::Generate(MacroAssembler* masm) { 5306 void LoadGlobalViaContextStub::Generate(MacroAssembler* masm) {
5289 Register context = cp; 5307 Register context = cp;
5290 Register result = r3; 5308 Register result = r3;
5291 Register slot = r5; 5309 Register slot = r5;
5292 5310
5293 // Go up the context chain to the script context. 5311 // Go up the context chain to the script context.
5294 for (int i = 0; i < depth(); ++i) { 5312 for (int i = 0; i < depth(); ++i) {
5295 __ LoadP(result, ContextMemOperand(context, Context::PREVIOUS_INDEX)); 5313 __ LoadP(result, ContextMemOperand(context, Context::PREVIOUS_INDEX));
5296 context = result; 5314 context = result;
5297 } 5315 }
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
5808 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, 5826 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref,
5809 kStackUnwindSpace, NULL, return_value_operand, NULL); 5827 kStackUnwindSpace, NULL, return_value_operand, NULL);
5810 } 5828 }
5811 5829
5812 5830
5813 #undef __ 5831 #undef __
5814 } // namespace internal 5832 } // namespace internal
5815 } // namespace v8 5833 } // namespace v8
5816 5834
5817 #endif // V8_TARGET_ARCH_PPC 5835 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/ppc/builtins-ppc.cc ('k') | src/ppc/interface-descriptors-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698