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

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

Issue 2709483007: PPC/s390: [everywhere] Custom representation for frame type (Closed)
Patch Set: Created 3 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/builtins/ppc/builtins-ppc.cc ('k') | src/compiler/ppc/code-generator-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 2143 matching lines...) Expand 10 before | Expand all | Expand 10 after
2154 // 4c. The new.target is not a constructor, throw an appropriate TypeError. 2154 // 4c. The new.target is not a constructor, throw an appropriate TypeError.
2155 __ bind(&new_target_not_constructor); 2155 __ bind(&new_target_not_constructor);
2156 { 2156 {
2157 __ StoreP(r5, MemOperand(sp, 0)); 2157 __ StoreP(r5, MemOperand(sp, 0));
2158 __ TailCallRuntime(Runtime::kThrowNotConstructor); 2158 __ TailCallRuntime(Runtime::kThrowNotConstructor);
2159 } 2159 }
2160 } 2160 }
2161 2161
2162 static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) { 2162 static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
2163 __ SmiTag(r2); 2163 __ SmiTag(r2);
2164 __ LoadSmiLiteral(r6, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)); 2164 __ Load(r6, Operand(StackFrame::TypeToMarker(StackFrame::ARGUMENTS_ADAPTOR)));
2165 // Stack updated as such: 2165 // Stack updated as such:
2166 // old SP ---> 2166 // old SP --->
2167 // R14 Return Addr 2167 // R14 Return Addr
2168 // Old FP <--- New FP 2168 // Old FP <--- New FP
2169 // Argument Adapter SMI 2169 // Argument Adapter SMI
2170 // Function 2170 // Function
2171 // ArgC as SMI <--- New SP 2171 // ArgC as SMI <--- New SP
2172 __ lay(sp, MemOperand(sp, -5 * kPointerSize)); 2172 __ lay(sp, MemOperand(sp, -5 * kPointerSize));
2173 2173
2174 // Cleanse the top nibble of 31-bit pointers. 2174 // Cleanse the top nibble of 31-bit pointers.
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
2352 // -- r3 : the target to call (can be any Object) 2352 // -- r3 : the target to call (can be any Object)
2353 // -- r4 : start index (to support rest parameters) 2353 // -- r4 : start index (to support rest parameters)
2354 // -- lr : return address. 2354 // -- lr : return address.
2355 // -- sp[0] : thisArgument 2355 // -- sp[0] : thisArgument
2356 // ----------------------------------- 2356 // -----------------------------------
2357 2357
2358 // Check if we have an arguments adaptor frame below the function frame. 2358 // Check if we have an arguments adaptor frame below the function frame.
2359 Label arguments_adaptor, arguments_done; 2359 Label arguments_adaptor, arguments_done;
2360 __ LoadP(r5, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 2360 __ LoadP(r5, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
2361 __ LoadP(ip, MemOperand(r5, CommonFrameConstants::kContextOrFrameTypeOffset)); 2361 __ LoadP(ip, MemOperand(r5, CommonFrameConstants::kContextOrFrameTypeOffset));
2362 __ CmpSmiLiteral(ip, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); 2362 __ CmpP(ip, Operand(StackFrame::TypeToMarker(StackFrame::ARGUMENTS_ADAPTOR)));
2363 __ beq(&arguments_adaptor); 2363 __ beq(&arguments_adaptor);
2364 { 2364 {
2365 __ LoadP(r2, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); 2365 __ LoadP(r2, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
2366 __ LoadP(r2, FieldMemOperand(r2, JSFunction::kSharedFunctionInfoOffset)); 2366 __ LoadP(r2, FieldMemOperand(r2, JSFunction::kSharedFunctionInfoOffset));
2367 __ LoadW(r2, FieldMemOperand( 2367 __ LoadW(r2, FieldMemOperand(
2368 r2, SharedFunctionInfo::kFormalParameterCountOffset)); 2368 r2, SharedFunctionInfo::kFormalParameterCountOffset));
2369 __ LoadRR(r5, fp); 2369 __ LoadRR(r5, fp);
2370 } 2370 }
2371 __ b(&arguments_done); 2371 __ b(&arguments_done);
2372 __ bind(&arguments_adaptor); 2372 __ bind(&arguments_adaptor);
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
2457 __ mov(scratch1, Operand(is_tail_call_elimination_enabled)); 2457 __ mov(scratch1, Operand(is_tail_call_elimination_enabled));
2458 __ LoadlB(scratch1, MemOperand(scratch1)); 2458 __ LoadlB(scratch1, MemOperand(scratch1));
2459 __ CmpP(scratch1, Operand::Zero()); 2459 __ CmpP(scratch1, Operand::Zero());
2460 __ beq(&done); 2460 __ beq(&done);
2461 2461
2462 // Drop possible interpreter handler/stub frame. 2462 // Drop possible interpreter handler/stub frame.
2463 { 2463 {
2464 Label no_interpreter_frame; 2464 Label no_interpreter_frame;
2465 __ LoadP(scratch3, 2465 __ LoadP(scratch3,
2466 MemOperand(fp, CommonFrameConstants::kContextOrFrameTypeOffset)); 2466 MemOperand(fp, CommonFrameConstants::kContextOrFrameTypeOffset));
2467 __ CmpSmiLiteral(scratch3, Smi::FromInt(StackFrame::STUB), r0); 2467 __ CmpP(scratch3, Operand(StackFrame::TypeToMarker(StackFrame::STUB)));
2468 __ bne(&no_interpreter_frame); 2468 __ bne(&no_interpreter_frame);
2469 __ LoadP(fp, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 2469 __ LoadP(fp, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
2470 __ bind(&no_interpreter_frame); 2470 __ bind(&no_interpreter_frame);
2471 } 2471 }
2472 2472
2473 // Check if next frame is an arguments adaptor frame. 2473 // Check if next frame is an arguments adaptor frame.
2474 Register caller_args_count_reg = scratch1; 2474 Register caller_args_count_reg = scratch1;
2475 Label no_arguments_adaptor, formal_parameter_count_loaded; 2475 Label no_arguments_adaptor, formal_parameter_count_loaded;
2476 __ LoadP(scratch2, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 2476 __ LoadP(scratch2, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
2477 __ LoadP( 2477 __ LoadP(
2478 scratch3, 2478 scratch3,
2479 MemOperand(scratch2, CommonFrameConstants::kContextOrFrameTypeOffset)); 2479 MemOperand(scratch2, CommonFrameConstants::kContextOrFrameTypeOffset));
2480 __ CmpSmiLiteral(scratch3, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); 2480 __ CmpP(scratch3,
2481 Operand(StackFrame::TypeToMarker(StackFrame::ARGUMENTS_ADAPTOR)));
2481 __ bne(&no_arguments_adaptor); 2482 __ bne(&no_arguments_adaptor);
2482 2483
2483 // Drop current frame and load arguments count from arguments adaptor frame. 2484 // Drop current frame and load arguments count from arguments adaptor frame.
2484 __ LoadRR(fp, scratch2); 2485 __ LoadRR(fp, scratch2);
2485 __ LoadP(caller_args_count_reg, 2486 __ LoadP(caller_args_count_reg,
2486 MemOperand(fp, ArgumentsAdaptorFrameConstants::kLengthOffset)); 2487 MemOperand(fp, ArgumentsAdaptorFrameConstants::kLengthOffset));
2487 __ SmiUntag(caller_args_count_reg); 2488 __ SmiUntag(caller_args_count_reg);
2488 __ b(&formal_parameter_count_loaded); 2489 __ b(&formal_parameter_count_loaded);
2489 2490
2490 __ bind(&no_arguments_adaptor); 2491 __ bind(&no_arguments_adaptor);
(...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after
3248 __ bkpt(0); 3249 __ bkpt(0);
3249 } 3250 }
3250 } 3251 }
3251 3252
3252 #undef __ 3253 #undef __
3253 3254
3254 } // namespace internal 3255 } // namespace internal
3255 } // namespace v8 3256 } // namespace v8
3256 3257
3257 #endif // V8_TARGET_ARCH_S390 3258 #endif // V8_TARGET_ARCH_S390
OLDNEW
« no previous file with comments | « src/builtins/ppc/builtins-ppc.cc ('k') | src/compiler/ppc/code-generator-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698