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

Side by Side Diff: src/full-codegen/arm/full-codegen-arm.cc

Issue 1484893003: [debugger] simplify reloc info for debug break slots. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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/debug/x64/debug-x64.cc ('k') | src/full-codegen/arm64/full-codegen-arm64.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 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/ast/scopes.h" 7 #include "src/ast/scopes.h"
8 #include "src/code-factory.h" 8 #include "src/code-factory.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/codegen.h" 10 #include "src/codegen.h"
(...skipping 2028 matching lines...) Expand 10 before | Expand all | Expand 10 after
2039 // result = receiver[f](arg); 2039 // result = receiver[f](arg);
2040 __ bind(&l_call); 2040 __ bind(&l_call);
2041 __ ldr(load_receiver, MemOperand(sp, kPointerSize)); 2041 __ ldr(load_receiver, MemOperand(sp, kPointerSize));
2042 __ ldr(load_name, MemOperand(sp, 2 * kPointerSize)); 2042 __ ldr(load_name, MemOperand(sp, 2 * kPointerSize));
2043 __ mov(LoadDescriptor::SlotRegister(), 2043 __ mov(LoadDescriptor::SlotRegister(),
2044 Operand(SmiFromSlot(expr->KeyedLoadFeedbackSlot()))); 2044 Operand(SmiFromSlot(expr->KeyedLoadFeedbackSlot())));
2045 Handle<Code> ic = CodeFactory::KeyedLoadIC(isolate(), SLOPPY).code(); 2045 Handle<Code> ic = CodeFactory::KeyedLoadIC(isolate(), SLOPPY).code();
2046 CallIC(ic, TypeFeedbackId::None()); 2046 CallIC(ic, TypeFeedbackId::None());
2047 __ mov(r1, r0); 2047 __ mov(r1, r0);
2048 __ str(r1, MemOperand(sp, 2 * kPointerSize)); 2048 __ str(r1, MemOperand(sp, 2 * kPointerSize));
2049 SetCallPosition(expr, 1); 2049 SetCallPosition(expr);
2050 __ mov(r0, Operand(1)); 2050 __ mov(r0, Operand(1));
2051 __ Call( 2051 __ Call(
2052 isolate()->builtins()->Call(ConvertReceiverMode::kNotNullOrUndefined), 2052 isolate()->builtins()->Call(ConvertReceiverMode::kNotNullOrUndefined),
2053 RelocInfo::CODE_TARGET); 2053 RelocInfo::CODE_TARGET);
2054 2054
2055 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 2055 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
2056 __ Drop(1); // The function is still on the stack; drop it. 2056 __ Drop(1); // The function is still on the stack; drop it.
2057 2057
2058 // if (!result.done) goto l_try; 2058 // if (!result.done) goto l_try;
2059 __ bind(&l_loop); 2059 __ bind(&l_loop);
(...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after
2866 2866
2867 void FullCodeGenerator::EmitCall(Call* expr, ConvertReceiverMode mode) { 2867 void FullCodeGenerator::EmitCall(Call* expr, ConvertReceiverMode mode) {
2868 // Load the arguments. 2868 // Load the arguments.
2869 ZoneList<Expression*>* args = expr->arguments(); 2869 ZoneList<Expression*>* args = expr->arguments();
2870 int arg_count = args->length(); 2870 int arg_count = args->length();
2871 for (int i = 0; i < arg_count; i++) { 2871 for (int i = 0; i < arg_count; i++) {
2872 VisitForStackValue(args->at(i)); 2872 VisitForStackValue(args->at(i));
2873 } 2873 }
2874 2874
2875 PrepareForBailoutForId(expr->CallId(), NO_REGISTERS); 2875 PrepareForBailoutForId(expr->CallId(), NO_REGISTERS);
2876 SetCallPosition(expr, arg_count); 2876 SetCallPosition(expr);
2877 Handle<Code> ic = CodeFactory::CallIC(isolate(), arg_count, mode).code(); 2877 Handle<Code> ic = CodeFactory::CallIC(isolate(), arg_count, mode).code();
2878 __ mov(r3, Operand(SmiFromSlot(expr->CallFeedbackICSlot()))); 2878 __ mov(r3, Operand(SmiFromSlot(expr->CallFeedbackICSlot())));
2879 __ ldr(r1, MemOperand(sp, (arg_count + 1) * kPointerSize)); 2879 __ ldr(r1, MemOperand(sp, (arg_count + 1) * kPointerSize));
2880 // Don't assign a type feedback id to the IC, since type feedback is provided 2880 // Don't assign a type feedback id to the IC, since type feedback is provided
2881 // by the vector above. 2881 // by the vector above.
2882 CallIC(ic); 2882 CallIC(ic);
2883 2883
2884 RecordJSReturnSite(expr); 2884 RecordJSReturnSite(expr);
2885 // Restore context register. 2885 // Restore context register.
2886 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 2886 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
2974 __ ldr(r1, MemOperand(sp, (arg_count + 1) * kPointerSize)); 2974 __ ldr(r1, MemOperand(sp, (arg_count + 1) * kPointerSize));
2975 __ push(r1); 2975 __ push(r1);
2976 EmitResolvePossiblyDirectEval(arg_count); 2976 EmitResolvePossiblyDirectEval(arg_count);
2977 2977
2978 // Touch up the stack with the resolved function. 2978 // Touch up the stack with the resolved function.
2979 __ str(r0, MemOperand(sp, (arg_count + 1) * kPointerSize)); 2979 __ str(r0, MemOperand(sp, (arg_count + 1) * kPointerSize));
2980 2980
2981 PrepareForBailoutForId(expr->EvalId(), NO_REGISTERS); 2981 PrepareForBailoutForId(expr->EvalId(), NO_REGISTERS);
2982 2982
2983 // Record source position for debugger. 2983 // Record source position for debugger.
2984 SetCallPosition(expr, arg_count); 2984 SetCallPosition(expr);
2985 __ ldr(r1, MemOperand(sp, (arg_count + 1) * kPointerSize)); 2985 __ ldr(r1, MemOperand(sp, (arg_count + 1) * kPointerSize));
2986 __ mov(r0, Operand(arg_count)); 2986 __ mov(r0, Operand(arg_count));
2987 __ Call(isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); 2987 __ Call(isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
2988 RecordJSReturnSite(expr); 2988 RecordJSReturnSite(expr);
2989 // Restore context register. 2989 // Restore context register.
2990 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 2990 __ ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
2991 context()->DropAndPlug(1, r0); 2991 context()->DropAndPlug(1, r0);
2992 } 2992 }
2993 2993
2994 2994
(...skipping 11 matching lines...) Expand all
3006 3006
3007 // Push the arguments ("left-to-right") on the stack. 3007 // Push the arguments ("left-to-right") on the stack.
3008 ZoneList<Expression*>* args = expr->arguments(); 3008 ZoneList<Expression*>* args = expr->arguments();
3009 int arg_count = args->length(); 3009 int arg_count = args->length();
3010 for (int i = 0; i < arg_count; i++) { 3010 for (int i = 0; i < arg_count; i++) {
3011 VisitForStackValue(args->at(i)); 3011 VisitForStackValue(args->at(i));
3012 } 3012 }
3013 3013
3014 // Call the construct call builtin that handles allocation and 3014 // Call the construct call builtin that handles allocation and
3015 // constructor invocation. 3015 // constructor invocation.
3016 SetConstructCallPosition(expr, arg_count); 3016 SetConstructCallPosition(expr);
3017 3017
3018 // Load function and argument count into r1 and r0. 3018 // Load function and argument count into r1 and r0.
3019 __ mov(r0, Operand(arg_count)); 3019 __ mov(r0, Operand(arg_count));
3020 __ ldr(r1, MemOperand(sp, arg_count * kPointerSize)); 3020 __ ldr(r1, MemOperand(sp, arg_count * kPointerSize));
3021 3021
3022 // Record call targets in unoptimized code. 3022 // Record call targets in unoptimized code.
3023 __ EmitLoadTypeFeedbackVector(r2); 3023 __ EmitLoadTypeFeedbackVector(r2);
3024 __ mov(r3, Operand(SmiFromSlot(expr->CallNewFeedbackSlot()))); 3024 __ mov(r3, Operand(SmiFromSlot(expr->CallNewFeedbackSlot())));
3025 3025
3026 Handle<Code> code = CodeFactory::ConstructIC(isolate()).code(); 3026 Handle<Code> code = CodeFactory::ConstructIC(isolate()).code();
(...skipping 15 matching lines...) Expand all
3042 3042
3043 // Push the arguments ("left-to-right") on the stack. 3043 // Push the arguments ("left-to-right") on the stack.
3044 ZoneList<Expression*>* args = expr->arguments(); 3044 ZoneList<Expression*>* args = expr->arguments();
3045 int arg_count = args->length(); 3045 int arg_count = args->length();
3046 for (int i = 0; i < arg_count; i++) { 3046 for (int i = 0; i < arg_count; i++) {
3047 VisitForStackValue(args->at(i)); 3047 VisitForStackValue(args->at(i));
3048 } 3048 }
3049 3049
3050 // Call the construct call builtin that handles allocation and 3050 // Call the construct call builtin that handles allocation and
3051 // constructor invocation. 3051 // constructor invocation.
3052 SetConstructCallPosition(expr, arg_count); 3052 SetConstructCallPosition(expr);
3053 3053
3054 // Load new target into r3. 3054 // Load new target into r3.
3055 VisitForAccumulatorValue(super_call_ref->new_target_var()); 3055 VisitForAccumulatorValue(super_call_ref->new_target_var());
3056 __ mov(r3, result_register()); 3056 __ mov(r3, result_register());
3057 3057
3058 // Load function and argument count into r1 and r0. 3058 // Load function and argument count into r1 and r0.
3059 __ mov(r0, Operand(arg_count)); 3059 __ mov(r0, Operand(arg_count));
3060 __ ldr(r1, MemOperand(sp, arg_count * kPointerSize)); 3060 __ ldr(r1, MemOperand(sp, arg_count * kPointerSize));
3061 3061
3062 __ Call(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); 3062 __ Call(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET);
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after
3767 void FullCodeGenerator::EmitDefaultConstructorCallSuper(CallRuntime* expr) { 3767 void FullCodeGenerator::EmitDefaultConstructorCallSuper(CallRuntime* expr) {
3768 ZoneList<Expression*>* args = expr->arguments(); 3768 ZoneList<Expression*>* args = expr->arguments();
3769 DCHECK(args->length() == 2); 3769 DCHECK(args->length() == 2);
3770 3770
3771 // Evaluate new.target and super constructor. 3771 // Evaluate new.target and super constructor.
3772 VisitForStackValue(args->at(0)); 3772 VisitForStackValue(args->at(0));
3773 VisitForStackValue(args->at(1)); 3773 VisitForStackValue(args->at(1));
3774 3774
3775 // Call the construct call builtin that handles allocation and 3775 // Call the construct call builtin that handles allocation and
3776 // constructor invocation. 3776 // constructor invocation.
3777 SetConstructCallPosition(expr, 0); 3777 SetConstructCallPosition(expr);
3778 3778
3779 // Load new target into r3. 3779 // Load new target into r3.
3780 __ ldr(r3, MemOperand(sp, 1 * kPointerSize)); 3780 __ ldr(r3, MemOperand(sp, 1 * kPointerSize));
3781 3781
3782 // Check if the calling frame is an arguments adaptor frame. 3782 // Check if the calling frame is an arguments adaptor frame.
3783 Label adaptor_frame, args_set_up, runtime; 3783 Label adaptor_frame, args_set_up, runtime;
3784 __ ldr(r2, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 3784 __ ldr(r2, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
3785 __ ldr(r4, MemOperand(r2, StandardFrameConstants::kContextOffset)); 3785 __ ldr(r4, MemOperand(r2, StandardFrameConstants::kContextOffset));
3786 __ cmp(r4, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); 3786 __ cmp(r4, Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
3787 __ b(eq, &adaptor_frame); 3787 __ b(eq, &adaptor_frame);
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
4138 __ push(r0); 4138 __ push(r0);
4139 4139
4140 __ LoadNativeContextSlot(expr->context_index(), r0); 4140 __ LoadNativeContextSlot(expr->context_index(), r0);
4141 } 4141 }
4142 4142
4143 4143
4144 void FullCodeGenerator::EmitCallJSRuntimeFunction(CallRuntime* expr) { 4144 void FullCodeGenerator::EmitCallJSRuntimeFunction(CallRuntime* expr) {
4145 ZoneList<Expression*>* args = expr->arguments(); 4145 ZoneList<Expression*>* args = expr->arguments();
4146 int arg_count = args->length(); 4146 int arg_count = args->length();
4147 4147
4148 SetCallPosition(expr, arg_count); 4148 SetCallPosition(expr);
4149 __ ldr(r1, MemOperand(sp, (arg_count + 1) * kPointerSize)); 4149 __ ldr(r1, MemOperand(sp, (arg_count + 1) * kPointerSize));
4150 __ mov(r0, Operand(arg_count)); 4150 __ mov(r0, Operand(arg_count));
4151 __ Call(isolate()->builtins()->Call(ConvertReceiverMode::kNullOrUndefined), 4151 __ Call(isolate()->builtins()->Call(ConvertReceiverMode::kNullOrUndefined),
4152 RelocInfo::CODE_TARGET); 4152 RelocInfo::CODE_TARGET);
4153 } 4153 }
4154 4154
4155 4155
4156 void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) { 4156 void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) {
4157 ZoneList<Expression*>* args = expr->arguments(); 4157 ZoneList<Expression*>* args = expr->arguments();
4158 int arg_count = args->length(); 4158 int arg_count = args->length();
(...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after
5001 DCHECK(interrupt_address == 5001 DCHECK(interrupt_address ==
5002 isolate->builtins()->OsrAfterStackCheck()->entry()); 5002 isolate->builtins()->OsrAfterStackCheck()->entry());
5003 return OSR_AFTER_STACK_CHECK; 5003 return OSR_AFTER_STACK_CHECK;
5004 } 5004 }
5005 5005
5006 5006
5007 } // namespace internal 5007 } // namespace internal
5008 } // namespace v8 5008 } // namespace v8
5009 5009
5010 #endif // V8_TARGET_ARCH_ARM 5010 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/debug/x64/debug-x64.cc ('k') | src/full-codegen/arm64/full-codegen-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698