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

Side by Side Diff: src/builtins/s390/builtins-s390.cc

Issue 2887153004: PPC/s390: [turbofan] Avoid allocating rest parameters for spread calls. (Closed)
Patch Set: minor fix Created 3 years, 7 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/builtins/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_S390 5 #if V8_TARGET_ARCH_S390
6 6
7 #include "src/codegen.h" 7 #include "src/codegen.h"
8 #include "src/debug/debug.h" 8 #include "src/debug/debug.h"
9 #include "src/deoptimizer.h" 9 #include "src/deoptimizer.h"
10 #include "src/full-codegen/full-codegen.h" 10 #include "src/full-codegen/full-codegen.h"
(...skipping 2179 matching lines...) Expand 10 before | Expand all | Expand 10 after
2190 2190
2191 // Dispatch to Call or Construct depending on whether new.target is undefined. 2191 // Dispatch to Call or Construct depending on whether new.target is undefined.
2192 { 2192 {
2193 __ CompareRoot(r5, Heap::kUndefinedValueRootIndex); 2193 __ CompareRoot(r5, Heap::kUndefinedValueRootIndex);
2194 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET, eq); 2194 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET, eq);
2195 __ Jump(masm->isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); 2195 __ Jump(masm->isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET);
2196 } 2196 }
2197 } 2197 }
2198 2198
2199 // static 2199 // static
2200 void Builtins::Generate_CallForwardVarargs(MacroAssembler* masm, 2200 void Builtins::Generate_ForwardVarargs(MacroAssembler* masm,
2201 Handle<Code> code) { 2201 Handle<Code> code) {
2202 // ----------- S t a t e ------------- 2202 // ----------- S t a t e -------------
2203 // -- r3 : the target to call (can be any Object) 2203 // -- r2 : the number of arguments (not including the receiver)
2204 // -- r4 : start index (to support rest parameters) 2204 // -- r5 : the new.target (for [[Construct]] calls)
2205 // -- lr : return address. 2205 // -- r3 : the target to call (can be any Object)
2206 // -- sp[0] : thisArgument 2206 // -- r4 : start index (to support rest parameters)
2207 // ----------------------------------- 2207 // -----------------------------------
2208 2208
2209 // Check if we have an arguments adaptor frame below the function frame. 2209 // Check if we have an arguments adaptor frame below the function frame.
2210 Label arguments_adaptor, arguments_done; 2210 Label arguments_adaptor, arguments_done;
2211 __ LoadP(r5, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 2211 __ LoadP(r6, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
2212 __ LoadP(ip, MemOperand(r5, CommonFrameConstants::kContextOrFrameTypeOffset)); 2212 __ LoadP(ip, MemOperand(r6, CommonFrameConstants::kContextOrFrameTypeOffset));
2213 __ CmpP(ip, Operand(StackFrame::TypeToMarker(StackFrame::ARGUMENTS_ADAPTOR))); 2213 __ CmpP(ip, Operand(StackFrame::TypeToMarker(StackFrame::ARGUMENTS_ADAPTOR)));
2214 __ beq(&arguments_adaptor); 2214 __ beq(&arguments_adaptor);
2215 { 2215 {
2216 __ LoadP(r2, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); 2216 __ LoadP(r7, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
2217 __ LoadP(r2, FieldMemOperand(r2, JSFunction::kSharedFunctionInfoOffset)); 2217 __ LoadP(r7, FieldMemOperand(r7, JSFunction::kSharedFunctionInfoOffset));
2218 __ LoadW(r2, FieldMemOperand( 2218 __ LoadW(r7, FieldMemOperand(
2219 r2, SharedFunctionInfo::kFormalParameterCountOffset)); 2219 r7, SharedFunctionInfo::kFormalParameterCountOffset));
2220 __ LoadRR(r5, fp); 2220 __ LoadRR(r6, fp);
2221 } 2221 }
2222 __ b(&arguments_done); 2222 __ b(&arguments_done);
2223 __ bind(&arguments_adaptor); 2223 __ bind(&arguments_adaptor);
2224 { 2224 {
2225 // Load the length from the ArgumentsAdaptorFrame. 2225 // Load the length from the ArgumentsAdaptorFrame.
2226 __ LoadP(r2, MemOperand(r5, ArgumentsAdaptorFrameConstants::kLengthOffset)); 2226 __ LoadP(r7, MemOperand(r6, ArgumentsAdaptorFrameConstants::kLengthOffset));
2227 #if V8_TARGET_ARCH_S390X 2227 #if V8_TARGET_ARCH_S390X
2228 __ SmiUntag(r2); 2228 __ SmiUntag(r7);
2229 #endif 2229 #endif
2230 } 2230 }
2231 __ bind(&arguments_done); 2231 __ bind(&arguments_done);
2232 2232
2233 Label stack_empty, stack_done, stack_overflow; 2233 Label stack_done, stack_overflow;
2234 #if !V8_TARGET_ARCH_S390X 2234 #if !V8_TARGET_ARCH_S390X
2235 __ SmiUntag(r2); 2235 __ SmiUntag(r7);
2236 #endif 2236 #endif
2237 __ SubP(r2, r2, r4); 2237 __ SubP(r7, r7, r4);
2238 __ CmpP(r2, Operand::Zero()); 2238 __ CmpP(r7, Operand::Zero());
2239 __ ble(&stack_empty); 2239 __ ble(&stack_done);
2240 { 2240 {
2241 // Check for stack overflow. 2241 // Check for stack overflow.
2242 Generate_StackOverflowCheck(masm, r2, r4, &stack_overflow); 2242 Generate_StackOverflowCheck(masm, r7, r4, &stack_overflow);
2243 2243
2244 // Forward the arguments from the caller frame. 2244 // Forward the arguments from the caller frame.
2245 { 2245 {
2246 Label loop; 2246 Label loop;
2247 __ AddP(r5, r5, Operand(kPointerSize)); 2247 __ AddP(r6, r6, Operand(kPointerSize));
2248 __ LoadRR(r4, r2); 2248 __ AddP(r2, r2, r7);
2249 __ bind(&loop); 2249 __ bind(&loop);
2250 { 2250 {
2251 __ ShiftLeftP(ip, r4, Operand(kPointerSizeLog2)); 2251 __ ShiftLeftP(ip, r7, Operand(kPointerSizeLog2));
2252 __ LoadP(ip, MemOperand(r5, ip)); 2252 __ LoadP(ip, MemOperand(r6, ip));
2253 __ push(ip); 2253 __ push(ip);
2254 __ SubP(r4, r4, Operand(1)); 2254 __ SubP(r7, r7, Operand(1));
2255 __ CmpP(r4, Operand::Zero()); 2255 __ CmpP(r7, Operand::Zero());
2256 __ bne(&loop); 2256 __ bne(&loop);
2257 } 2257 }
2258 } 2258 }
2259 } 2259 }
2260 __ b(&stack_done); 2260 __ b(&stack_done);
2261 __ bind(&stack_overflow); 2261 __ bind(&stack_overflow);
2262 __ TailCallRuntime(Runtime::kThrowStackOverflow); 2262 __ TailCallRuntime(Runtime::kThrowStackOverflow);
2263 __ bind(&stack_empty);
2264 {
2265 // We just pass the receiver, which is already on the stack.
2266 __ mov(r2, Operand::Zero());
2267 }
2268 __ bind(&stack_done); 2263 __ bind(&stack_done);
2269 2264
2265 // Tail-call to the {code} handler.
2270 __ Jump(code, RelocInfo::CODE_TARGET); 2266 __ Jump(code, RelocInfo::CODE_TARGET);
2271 } 2267 }
2272 2268
2273 namespace { 2269 namespace {
2274 2270
2275 // Drops top JavaScript frame and an arguments adaptor frame below it (if 2271 // Drops top JavaScript frame and an arguments adaptor frame below it (if
2276 // present) preserving all the arguments prepared for current call. 2272 // present) preserving all the arguments prepared for current call.
2277 // Does nothing if debugger is currently active. 2273 // Does nothing if debugger is currently active.
2278 // ES6 14.6.3. PrepareForTailCall 2274 // ES6 14.6.3. PrepareForTailCall
2279 // 2275 //
(...skipping 857 matching lines...) Expand 10 before | Expand all | Expand 10 after
3137 // Now jump to the instructions of the returned code object. 3133 // Now jump to the instructions of the returned code object.
3138 __ Jump(ip); 3134 __ Jump(ip);
3139 } 3135 }
3140 3136
3141 #undef __ 3137 #undef __
3142 3138
3143 } // namespace internal 3139 } // namespace internal
3144 } // namespace v8 3140 } // namespace v8
3145 3141
3146 #endif // V8_TARGET_ARCH_S390 3142 #endif // V8_TARGET_ARCH_S390
OLDNEW
« no previous file with comments | « src/builtins/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