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

Side by Side Diff: src/builtins/ppc/builtins-ppc.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 | « no previous file | src/builtins/s390/builtins-s390.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/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 2141 matching lines...) Expand 10 before | Expand all | Expand 10 after
2152 // 4c. The new.target is not a constructor, throw an appropriate TypeError. 2152 // 4c. The new.target is not a constructor, throw an appropriate TypeError.
2153 __ bind(&new_target_not_constructor); 2153 __ bind(&new_target_not_constructor);
2154 { 2154 {
2155 __ StoreP(r6, MemOperand(sp, 0)); 2155 __ StoreP(r6, MemOperand(sp, 0));
2156 __ TailCallRuntime(Runtime::kThrowNotConstructor); 2156 __ TailCallRuntime(Runtime::kThrowNotConstructor);
2157 } 2157 }
2158 } 2158 }
2159 2159
2160 static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) { 2160 static void EnterArgumentsAdaptorFrame(MacroAssembler* masm) {
2161 __ SmiTag(r3); 2161 __ SmiTag(r3);
2162 __ LoadSmiLiteral(r7, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)); 2162 __ mov(r7, Operand(StackFrame::TypeToMarker(StackFrame::ARGUMENTS_ADAPTOR)));
2163 __ mflr(r0); 2163 __ mflr(r0);
2164 __ push(r0); 2164 __ push(r0);
2165 if (FLAG_enable_embedded_constant_pool) { 2165 if (FLAG_enable_embedded_constant_pool) {
2166 __ Push(fp, kConstantPoolRegister, r7, r4, r3); 2166 __ Push(fp, kConstantPoolRegister, r7, r4, r3);
2167 } else { 2167 } else {
2168 __ Push(fp, r7, r4, r3); 2168 __ Push(fp, r7, r4, r3);
2169 } 2169 }
2170 __ addi(fp, sp, Operand(StandardFrameConstants::kFixedFrameSizeFromFp + 2170 __ addi(fp, sp, Operand(StandardFrameConstants::kFixedFrameSizeFromFp +
2171 kPointerSize)); 2171 kPointerSize));
2172 } 2172 }
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
2340 // -- r4 : the target to call (can be any Object) 2340 // -- r4 : the target to call (can be any Object)
2341 // -- r5 : start index (to support rest parameters) 2341 // -- r5 : start index (to support rest parameters)
2342 // -- lr : return address. 2342 // -- lr : return address.
2343 // -- sp[0] : thisArgument 2343 // -- sp[0] : thisArgument
2344 // ----------------------------------- 2344 // -----------------------------------
2345 2345
2346 // Check if we have an arguments adaptor frame below the function frame. 2346 // Check if we have an arguments adaptor frame below the function frame.
2347 Label arguments_adaptor, arguments_done; 2347 Label arguments_adaptor, arguments_done;
2348 __ LoadP(r6, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 2348 __ LoadP(r6, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
2349 __ LoadP(ip, MemOperand(r6, CommonFrameConstants::kContextOrFrameTypeOffset)); 2349 __ LoadP(ip, MemOperand(r6, CommonFrameConstants::kContextOrFrameTypeOffset));
2350 __ CmpSmiLiteral(ip, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); 2350 __ cmpi(ip, Operand(StackFrame::TypeToMarker(StackFrame::ARGUMENTS_ADAPTOR)));
2351 __ beq(&arguments_adaptor); 2351 __ beq(&arguments_adaptor);
2352 { 2352 {
2353 __ LoadP(r3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); 2353 __ LoadP(r3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
2354 __ LoadP(r3, FieldMemOperand(r3, JSFunction::kSharedFunctionInfoOffset)); 2354 __ LoadP(r3, FieldMemOperand(r3, JSFunction::kSharedFunctionInfoOffset));
2355 __ LoadWordArith( 2355 __ LoadWordArith(
2356 r3, 2356 r3,
2357 FieldMemOperand(r3, SharedFunctionInfo::kFormalParameterCountOffset)); 2357 FieldMemOperand(r3, SharedFunctionInfo::kFormalParameterCountOffset));
2358 __ mr(r6, fp); 2358 __ mr(r6, fp);
2359 } 2359 }
2360 __ b(&arguments_done); 2360 __ b(&arguments_done);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
2446 __ mov(scratch1, Operand(is_tail_call_elimination_enabled)); 2446 __ mov(scratch1, Operand(is_tail_call_elimination_enabled));
2447 __ lbz(scratch1, MemOperand(scratch1)); 2447 __ lbz(scratch1, MemOperand(scratch1));
2448 __ cmpi(scratch1, Operand::Zero()); 2448 __ cmpi(scratch1, Operand::Zero());
2449 __ beq(&done); 2449 __ beq(&done);
2450 2450
2451 // Drop possible interpreter handler/stub frame. 2451 // Drop possible interpreter handler/stub frame.
2452 { 2452 {
2453 Label no_interpreter_frame; 2453 Label no_interpreter_frame;
2454 __ LoadP(scratch3, 2454 __ LoadP(scratch3,
2455 MemOperand(fp, CommonFrameConstants::kContextOrFrameTypeOffset)); 2455 MemOperand(fp, CommonFrameConstants::kContextOrFrameTypeOffset));
2456 __ CmpSmiLiteral(scratch3, Smi::FromInt(StackFrame::STUB), r0); 2456 __ cmpi(scratch3, Operand(StackFrame::TypeToMarker(StackFrame::STUB)));
2457 __ bne(&no_interpreter_frame); 2457 __ bne(&no_interpreter_frame);
2458 __ LoadP(fp, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 2458 __ LoadP(fp, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
2459 __ bind(&no_interpreter_frame); 2459 __ bind(&no_interpreter_frame);
2460 } 2460 }
2461 2461
2462 // Check if next frame is an arguments adaptor frame. 2462 // Check if next frame is an arguments adaptor frame.
2463 Register caller_args_count_reg = scratch1; 2463 Register caller_args_count_reg = scratch1;
2464 Label no_arguments_adaptor, formal_parameter_count_loaded; 2464 Label no_arguments_adaptor, formal_parameter_count_loaded;
2465 __ LoadP(scratch2, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 2465 __ LoadP(scratch2, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
2466 __ LoadP( 2466 __ LoadP(
2467 scratch3, 2467 scratch3,
2468 MemOperand(scratch2, CommonFrameConstants::kContextOrFrameTypeOffset)); 2468 MemOperand(scratch2, CommonFrameConstants::kContextOrFrameTypeOffset));
2469 __ CmpSmiLiteral(scratch3, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); 2469 __ cmpi(scratch3,
2470 Operand(StackFrame::TypeToMarker(StackFrame::ARGUMENTS_ADAPTOR)));
2470 __ bne(&no_arguments_adaptor); 2471 __ bne(&no_arguments_adaptor);
2471 2472
2472 // Drop current frame and load arguments count from arguments adaptor frame. 2473 // Drop current frame and load arguments count from arguments adaptor frame.
2473 __ mr(fp, scratch2); 2474 __ mr(fp, scratch2);
2474 __ LoadP(caller_args_count_reg, 2475 __ LoadP(caller_args_count_reg,
2475 MemOperand(fp, ArgumentsAdaptorFrameConstants::kLengthOffset)); 2476 MemOperand(fp, ArgumentsAdaptorFrameConstants::kLengthOffset));
2476 __ SmiUntag(caller_args_count_reg); 2477 __ SmiUntag(caller_args_count_reg);
2477 __ b(&formal_parameter_count_loaded); 2478 __ b(&formal_parameter_count_loaded);
2478 2479
2479 __ bind(&no_arguments_adaptor); 2480 __ bind(&no_arguments_adaptor);
(...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after
3236 __ CallRuntime(Runtime::kThrowStackOverflow); 3237 __ CallRuntime(Runtime::kThrowStackOverflow);
3237 __ bkpt(0); 3238 __ bkpt(0);
3238 } 3239 }
3239 } 3240 }
3240 3241
3241 #undef __ 3242 #undef __
3242 } // namespace internal 3243 } // namespace internal
3243 } // namespace v8 3244 } // namespace v8
3244 3245
3245 #endif // V8_TARGET_ARCH_PPC 3246 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « no previous file | src/builtins/s390/builtins-s390.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698