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

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

Issue 1696043002: [runtime] Unify and simplify how frames are marked (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix merge problems 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
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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_ARM 5 #if V8_TARGET_ARCH_ARM
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 3674 matching lines...) Expand 10 before | Expand all | Expand 10 after
3685 __ bind(&need_incremental); 3685 __ bind(&need_incremental);
3686 3686
3687 // Fall through when we need to inform the incremental marker. 3687 // Fall through when we need to inform the incremental marker.
3688 } 3688 }
3689 3689
3690 3690
3691 void StubFailureTrampolineStub::Generate(MacroAssembler* masm) { 3691 void StubFailureTrampolineStub::Generate(MacroAssembler* masm) {
3692 CEntryStub ces(isolate(), 1, kSaveFPRegs); 3692 CEntryStub ces(isolate(), 1, kSaveFPRegs);
3693 __ Call(ces.GetCode(), RelocInfo::CODE_TARGET); 3693 __ Call(ces.GetCode(), RelocInfo::CODE_TARGET);
3694 int parameter_count_offset = 3694 int parameter_count_offset =
3695 StubFailureTrampolineFrame::kCallerStackParameterCountFrameOffset; 3695 StubFailureTrampolineFrameConstants::kArgumentsLengthOffset;
3696 __ ldr(r1, MemOperand(fp, parameter_count_offset)); 3696 __ ldr(r1, MemOperand(fp, parameter_count_offset));
3697 if (function_mode() == JS_FUNCTION_STUB_MODE) { 3697 if (function_mode() == JS_FUNCTION_STUB_MODE) {
3698 __ add(r1, r1, Operand(1)); 3698 __ add(r1, r1, Operand(1));
3699 } 3699 }
3700 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE); 3700 masm->LeaveFrame(StackFrame::STUB_FAILURE_TRAMPOLINE);
3701 __ mov(r1, Operand(r1, LSL, kPointerSizeLog2)); 3701 __ mov(r1, Operand(r1, LSL, kPointerSizeLog2));
3702 __ add(sp, sp, r1); 3702 __ add(sp, sp, r1);
3703 __ Ret(); 3703 __ Ret();
3704 } 3704 }
3705 3705
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after
4678 // we reach the JavaScript frame for the function (similar to what the 4678 // we reach the JavaScript frame for the function (similar to what the
4679 // runtime fallback implementation does). So make r2 point to that 4679 // runtime fallback implementation does). So make r2 point to that
4680 // JavaScript frame. 4680 // JavaScript frame.
4681 { 4681 {
4682 Label loop, loop_entry; 4682 Label loop, loop_entry;
4683 __ mov(r2, fp); 4683 __ mov(r2, fp);
4684 __ b(&loop_entry); 4684 __ b(&loop_entry);
4685 __ bind(&loop); 4685 __ bind(&loop);
4686 __ ldr(r2, MemOperand(r2, StandardFrameConstants::kCallerFPOffset)); 4686 __ ldr(r2, MemOperand(r2, StandardFrameConstants::kCallerFPOffset));
4687 __ bind(&loop_entry); 4687 __ bind(&loop_entry);
4688 __ ldr(ip, MemOperand(r2, StandardFrameConstants::kMarkerOffset)); 4688 __ ldr(ip, MemOperand(r2, StandardFrameConstants::kFunctionOffset));
4689 __ cmp(ip, r1); 4689 __ cmp(ip, r1);
4690 __ b(ne, &loop); 4690 __ b(ne, &loop);
4691 } 4691 }
4692 4692
4693 // Check if we have rest parameters (only possible if we have an 4693 // Check if we have rest parameters (only possible if we have an
4694 // arguments adaptor frame below the function frame). 4694 // arguments adaptor frame below the function frame).
4695 Label no_rest_parameters; 4695 Label no_rest_parameters;
4696 __ ldr(r2, MemOperand(r2, StandardFrameConstants::kCallerFPOffset)); 4696 __ ldr(r2, MemOperand(r2, StandardFrameConstants::kCallerFPOffset));
4697 __ ldr(ip, MemOperand(r2, StandardFrameConstants::kContextOffset)); 4697 __ ldr(ip, MemOperand(r2, CommonFrameConstants::kContextOrFrameTypeOffset));
4698 __ cmp(ip, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); 4698 __ cmp(ip, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
4699 __ b(ne, &no_rest_parameters); 4699 __ b(ne, &no_rest_parameters);
4700 4700
4701 // Check if the arguments adaptor frame contains more arguments than 4701 // Check if the arguments adaptor frame contains more arguments than
4702 // specified by the function's internal formal parameter count. 4702 // specified by the function's internal formal parameter count.
4703 Label rest_parameters; 4703 Label rest_parameters;
4704 __ ldr(r0, MemOperand(r2, ArgumentsAdaptorFrameConstants::kLengthOffset)); 4704 __ ldr(r0, MemOperand(r2, ArgumentsAdaptorFrameConstants::kLengthOffset));
4705 __ ldr(r1, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset)); 4705 __ ldr(r1, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset));
4706 __ ldr(r1, 4706 __ ldr(r1,
4707 FieldMemOperand(r1, SharedFunctionInfo::kFormalParameterCountOffset)); 4707 FieldMemOperand(r1, SharedFunctionInfo::kFormalParameterCountOffset));
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
4826 // r1 : function 4826 // r1 : function
4827 // r2 : number of parameters (tagged) 4827 // r2 : number of parameters (tagged)
4828 // r3 : parameters pointer 4828 // r3 : parameters pointer
4829 // Registers used over whole function: 4829 // Registers used over whole function:
4830 // r5 : arguments count (tagged) 4830 // r5 : arguments count (tagged)
4831 // r6 : mapped parameter count (tagged) 4831 // r6 : mapped parameter count (tagged)
4832 4832
4833 // Check if the calling frame is an arguments adaptor frame. 4833 // Check if the calling frame is an arguments adaptor frame.
4834 Label adaptor_frame, try_allocate, runtime; 4834 Label adaptor_frame, try_allocate, runtime;
4835 __ ldr(r4, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 4835 __ ldr(r4, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
4836 __ ldr(r0, MemOperand(r4, StandardFrameConstants::kContextOffset)); 4836 __ ldr(r0, MemOperand(r4, CommonFrameConstants::kContextOrFrameTypeOffset));
4837 __ cmp(r0, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); 4837 __ cmp(r0, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
4838 __ b(eq, &adaptor_frame); 4838 __ b(eq, &adaptor_frame);
4839 4839
4840 // No adaptor, parameter count = argument count. 4840 // No adaptor, parameter count = argument count.
4841 __ mov(r5, r2); 4841 __ mov(r5, r2);
4842 __ mov(r6, r2); 4842 __ mov(r6, r2);
4843 __ b(&try_allocate); 4843 __ b(&try_allocate);
4844 4844
4845 // We have an adaptor frame. Patch the parameters pointer. 4845 // We have an adaptor frame. Patch the parameters pointer.
4846 __ bind(&adaptor_frame); 4846 __ bind(&adaptor_frame);
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
5025 // we reach the JavaScript frame for the function (similar to what the 5025 // we reach the JavaScript frame for the function (similar to what the
5026 // runtime fallback implementation does). So make r2 point to that 5026 // runtime fallback implementation does). So make r2 point to that
5027 // JavaScript frame. 5027 // JavaScript frame.
5028 { 5028 {
5029 Label loop, loop_entry; 5029 Label loop, loop_entry;
5030 __ mov(r2, fp); 5030 __ mov(r2, fp);
5031 __ b(&loop_entry); 5031 __ b(&loop_entry);
5032 __ bind(&loop); 5032 __ bind(&loop);
5033 __ ldr(r2, MemOperand(r2, StandardFrameConstants::kCallerFPOffset)); 5033 __ ldr(r2, MemOperand(r2, StandardFrameConstants::kCallerFPOffset));
5034 __ bind(&loop_entry); 5034 __ bind(&loop_entry);
5035 __ ldr(ip, MemOperand(r2, StandardFrameConstants::kMarkerOffset)); 5035 __ ldr(ip, MemOperand(r2, StandardFrameConstants::kFunctionOffset));
5036 __ cmp(ip, r1); 5036 __ cmp(ip, r1);
5037 __ b(ne, &loop); 5037 __ b(ne, &loop);
5038 } 5038 }
5039 5039
5040 // Check if we have an arguments adaptor frame below the function frame. 5040 // Check if we have an arguments adaptor frame below the function frame.
5041 Label arguments_adaptor, arguments_done; 5041 Label arguments_adaptor, arguments_done;
5042 __ ldr(r3, MemOperand(r2, StandardFrameConstants::kCallerFPOffset)); 5042 __ ldr(r3, MemOperand(r2, StandardFrameConstants::kCallerFPOffset));
5043 __ ldr(ip, MemOperand(r3, StandardFrameConstants::kContextOffset)); 5043 __ ldr(ip, MemOperand(r3, CommonFrameConstants::kContextOrFrameTypeOffset));
5044 __ cmp(ip, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); 5044 __ cmp(ip, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
5045 __ b(eq, &arguments_adaptor); 5045 __ b(eq, &arguments_adaptor);
5046 { 5046 {
5047 __ ldr(r1, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset)); 5047 __ ldr(r1, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset));
5048 __ ldr(r0, FieldMemOperand( 5048 __ ldr(r0, FieldMemOperand(
5049 r1, SharedFunctionInfo::kFormalParameterCountOffset)); 5049 r1, SharedFunctionInfo::kFormalParameterCountOffset));
5050 __ add(r2, r2, Operand(r0, LSL, kPointerSizeLog2 - 1)); 5050 __ add(r2, r2, Operand(r0, LSL, kPointerSizeLog2 - 1));
5051 __ add(r2, r2, 5051 __ add(r2, r2,
5052 Operand(StandardFrameConstants::kCallerSPOffset - 1 * kPointerSize)); 5052 Operand(StandardFrameConstants::kCallerSPOffset - 1 * kPointerSize));
5053 } 5053 }
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after
5591 kStackUnwindSpace, NULL, return_value_operand, NULL); 5591 kStackUnwindSpace, NULL, return_value_operand, NULL);
5592 } 5592 }
5593 5593
5594 5594
5595 #undef __ 5595 #undef __
5596 5596
5597 } // namespace internal 5597 } // namespace internal
5598 } // namespace v8 5598 } // namespace v8
5599 5599
5600 #endif // V8_TARGET_ARCH_ARM 5600 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/builtins-arm.cc ('k') | src/arm/codegen-arm.cc » ('j') | src/x64/macro-assembler-x64.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698