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

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

Issue 1778713002: PPC: [runtime] Unify and simplify how frames are marked (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 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/codegen-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 3795 matching lines...) Expand 10 before | Expand all | Expand 10 after
3806 __ bind(&need_incremental); 3806 __ bind(&need_incremental);
3807 3807
3808 // Fall through when we need to inform the incremental marker. 3808 // Fall through when we need to inform the incremental marker.
3809 } 3809 }
3810 3810
3811 3811
3812 void StubFailureTrampolineStub::Generate(MacroAssembler* masm) { 3812 void StubFailureTrampolineStub::Generate(MacroAssembler* masm) {
3813 CEntryStub ces(isolate(), 1, kSaveFPRegs); 3813 CEntryStub ces(isolate(), 1, kSaveFPRegs);
3814 __ Call(ces.GetCode(), RelocInfo::CODE_TARGET); 3814 __ Call(ces.GetCode(), RelocInfo::CODE_TARGET);
3815 int parameter_count_offset = 3815 int parameter_count_offset =
3816 StubFailureTrampolineFrame::kCallerStackParameterCountFrameOffset; 3816 StubFailureTrampolineFrameConstants::kArgumentsLengthOffset;
3817 __ LoadP(r4, MemOperand(fp, parameter_count_offset)); 3817 __ LoadP(r4, MemOperand(fp, parameter_count_offset));
3818 if (function_mode() == JS_FUNCTION_STUB_MODE) { 3818 if (function_mode() == JS_FUNCTION_STUB_MODE) {
3819 __ addi(r4, r4, Operand(1)); 3819 __ addi(r4, r4, Operand(1));
3820 } 3820 }
3821 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE); 3821 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE);
3822 __ slwi(r4, r4, Operand(kPointerSizeLog2)); 3822 __ slwi(r4, r4, Operand(kPointerSizeLog2));
3823 __ add(sp, sp, r4); 3823 __ add(sp, sp, r4);
3824 __ Ret(); 3824 __ Ret();
3825 } 3825 }
3826 3826
(...skipping 991 matching lines...) Expand 10 before | Expand all | Expand 10 after
4818 // we reach the JavaScript frame for the function (similar to what the 4818 // we reach the JavaScript frame for the function (similar to what the
4819 // runtime fallback implementation does). So make r5 point to that 4819 // runtime fallback implementation does). So make r5 point to that
4820 // JavaScript frame. 4820 // JavaScript frame.
4821 { 4821 {
4822 Label loop, loop_entry; 4822 Label loop, loop_entry;
4823 __ mr(r5, fp); 4823 __ mr(r5, fp);
4824 __ b(&loop_entry); 4824 __ b(&loop_entry);
4825 __ bind(&loop); 4825 __ bind(&loop);
4826 __ LoadP(r5, MemOperand(r5, StandardFrameConstants::kCallerFPOffset)); 4826 __ LoadP(r5, MemOperand(r5, StandardFrameConstants::kCallerFPOffset));
4827 __ bind(&loop_entry); 4827 __ bind(&loop_entry);
4828 __ LoadP(ip, MemOperand(r5, StandardFrameConstants::kMarkerOffset)); 4828 __ LoadP(ip, MemOperand(r5, StandardFrameConstants::kFunctionOffset));
4829 __ cmp(ip, r4); 4829 __ cmp(ip, r4);
4830 __ bne(&loop); 4830 __ bne(&loop);
4831 } 4831 }
4832 4832
4833 // Check if we have rest parameters (only possible if we have an 4833 // Check if we have rest parameters (only possible if we have an
4834 // arguments adaptor frame below the function frame). 4834 // arguments adaptor frame below the function frame).
4835 Label no_rest_parameters; 4835 Label no_rest_parameters;
4836 __ LoadP(r5, MemOperand(r5, StandardFrameConstants::kCallerFPOffset)); 4836 __ LoadP(r5, MemOperand(r5, StandardFrameConstants::kCallerFPOffset));
4837 __ LoadP(ip, MemOperand(r5, StandardFrameConstants::kContextOffset)); 4837 __ LoadP(ip, MemOperand(r5, CommonFrameConstants::kContextOrFrameTypeOffset));
4838 __ CmpSmiLiteral(ip, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); 4838 __ CmpSmiLiteral(ip, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0);
4839 __ bne(&no_rest_parameters); 4839 __ bne(&no_rest_parameters);
4840 4840
4841 // Check if the arguments adaptor frame contains more arguments than 4841 // Check if the arguments adaptor frame contains more arguments than
4842 // specified by the function's internal formal parameter count. 4842 // specified by the function's internal formal parameter count.
4843 Label rest_parameters; 4843 Label rest_parameters;
4844 __ LoadP(r3, MemOperand(r5, ArgumentsAdaptorFrameConstants::kLengthOffset)); 4844 __ LoadP(r3, MemOperand(r5, ArgumentsAdaptorFrameConstants::kLengthOffset));
4845 __ LoadP(r4, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); 4845 __ LoadP(r4, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset));
4846 __ LoadWordArith( 4846 __ LoadWordArith(
4847 r4, FieldMemOperand(r4, SharedFunctionInfo::kFormalParameterCountOffset)); 4847 r4, FieldMemOperand(r4, SharedFunctionInfo::kFormalParameterCountOffset));
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
4972 // r4 : function 4972 // r4 : function
4973 // r5 : number of parameters (tagged) 4973 // r5 : number of parameters (tagged)
4974 // r6 : parameters pointer 4974 // r6 : parameters pointer
4975 // Registers used over whole function: 4975 // Registers used over whole function:
4976 // r8 : arguments count (tagged) 4976 // r8 : arguments count (tagged)
4977 // r9 : mapped parameter count (tagged) 4977 // r9 : mapped parameter count (tagged)
4978 4978
4979 // Check if the calling frame is an arguments adaptor frame. 4979 // Check if the calling frame is an arguments adaptor frame.
4980 Label adaptor_frame, try_allocate, runtime; 4980 Label adaptor_frame, try_allocate, runtime;
4981 __ LoadP(r7, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 4981 __ LoadP(r7, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
4982 __ LoadP(r3, MemOperand(r7, StandardFrameConstants::kContextOffset)); 4982 __ LoadP(r3, MemOperand(r7, CommonFrameConstants::kContextOrFrameTypeOffset));
4983 __ CmpSmiLiteral(r3, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); 4983 __ CmpSmiLiteral(r3, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0);
4984 __ beq(&adaptor_frame); 4984 __ beq(&adaptor_frame);
4985 4985
4986 // No adaptor, parameter count = argument count. 4986 // No adaptor, parameter count = argument count.
4987 __ mr(r8, r5); 4987 __ mr(r8, r5);
4988 __ mr(r9, r5); 4988 __ mr(r9, r5);
4989 __ b(&try_allocate); 4989 __ b(&try_allocate);
4990 4990
4991 // We have an adaptor frame. Patch the parameters pointer. 4991 // We have an adaptor frame. Patch the parameters pointer.
4992 __ bind(&adaptor_frame); 4992 __ bind(&adaptor_frame);
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
5214 // we reach the JavaScript frame for the function (similar to what the 5214 // we reach the JavaScript frame for the function (similar to what the
5215 // runtime fallback implementation does). So make r5 point to that 5215 // runtime fallback implementation does). So make r5 point to that
5216 // JavaScript frame. 5216 // JavaScript frame.
5217 { 5217 {
5218 Label loop, loop_entry; 5218 Label loop, loop_entry;
5219 __ mr(r5, fp); 5219 __ mr(r5, fp);
5220 __ b(&loop_entry); 5220 __ b(&loop_entry);
5221 __ bind(&loop); 5221 __ bind(&loop);
5222 __ LoadP(r5, MemOperand(r5, StandardFrameConstants::kCallerFPOffset)); 5222 __ LoadP(r5, MemOperand(r5, StandardFrameConstants::kCallerFPOffset));
5223 __ bind(&loop_entry); 5223 __ bind(&loop_entry);
5224 __ LoadP(ip, MemOperand(r5, StandardFrameConstants::kMarkerOffset)); 5224 __ LoadP(ip, MemOperand(r5, StandardFrameConstants::kFunctionOffset));
5225 __ cmp(ip, r4); 5225 __ cmp(ip, r4);
5226 __ bne(&loop); 5226 __ bne(&loop);
5227 } 5227 }
5228 5228
5229 // Check if we have an arguments adaptor frame below the function frame. 5229 // Check if we have an arguments adaptor frame below the function frame.
5230 Label arguments_adaptor, arguments_done; 5230 Label arguments_adaptor, arguments_done;
5231 __ LoadP(r6, MemOperand(r5, StandardFrameConstants::kCallerFPOffset)); 5231 __ LoadP(r6, MemOperand(r5, StandardFrameConstants::kCallerFPOffset));
5232 __ LoadP(ip, MemOperand(r6, StandardFrameConstants::kContextOffset)); 5232 __ LoadP(ip, MemOperand(r6, CommonFrameConstants::kContextOrFrameTypeOffset));
5233 __ CmpSmiLiteral(ip, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0); 5233 __ CmpSmiLiteral(ip, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR), r0);
5234 __ beq(&arguments_adaptor); 5234 __ beq(&arguments_adaptor);
5235 { 5235 {
5236 __ LoadP(r4, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); 5236 __ LoadP(r4, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset));
5237 __ LoadWordArith( 5237 __ LoadWordArith(
5238 r3, 5238 r3,
5239 FieldMemOperand(r4, SharedFunctionInfo::kFormalParameterCountOffset)); 5239 FieldMemOperand(r4, SharedFunctionInfo::kFormalParameterCountOffset));
5240 #if V8_TARGET_ARCH_PPC64 5240 #if V8_TARGET_ARCH_PPC64
5241 __ SmiTag(r3); 5241 __ SmiTag(r3);
5242 #endif 5242 #endif
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
5834 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref, 5834 CallApiFunctionAndReturn(masm, api_function_address, thunk_ref,
5835 kStackUnwindSpace, NULL, return_value_operand, NULL); 5835 kStackUnwindSpace, NULL, return_value_operand, NULL);
5836 } 5836 }
5837 5837
5838 5838
5839 #undef __ 5839 #undef __
5840 } // namespace internal 5840 } // namespace internal
5841 } // namespace v8 5841 } // namespace v8
5842 5842
5843 #endif // V8_TARGET_ARCH_PPC 5843 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/ppc/builtins-ppc.cc ('k') | src/ppc/codegen-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698