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

Side by Side Diff: src/full-codegen/mips/full-codegen-mips.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
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_MIPS 5 #if V8_TARGET_ARCH_MIPS
6 6
7 // Note on Mips implementation: 7 // Note on Mips implementation:
8 // 8 //
9 // The result_register() for mips is the 'v0' register, which is defined 9 // The result_register() for mips is the 'v0' register, which is defined
10 // by the ABI to contain function return values. However, the first 10 // by the ABI to contain function return values. However, the first
(...skipping 2033 matching lines...) Expand 10 before | Expand all | Expand 10 after
2044 __ bind(&l_call); 2044 __ bind(&l_call);
2045 __ lw(load_receiver, MemOperand(sp, kPointerSize)); 2045 __ lw(load_receiver, MemOperand(sp, kPointerSize));
2046 __ lw(load_name, MemOperand(sp, 2 * kPointerSize)); 2046 __ lw(load_name, MemOperand(sp, 2 * kPointerSize));
2047 __ li(LoadDescriptor::SlotRegister(), 2047 __ li(LoadDescriptor::SlotRegister(),
2048 Operand(SmiFromSlot(expr->KeyedLoadFeedbackSlot()))); 2048 Operand(SmiFromSlot(expr->KeyedLoadFeedbackSlot())));
2049 Handle<Code> ic = CodeFactory::KeyedLoadIC(isolate(), SLOPPY).code(); 2049 Handle<Code> ic = CodeFactory::KeyedLoadIC(isolate(), SLOPPY).code();
2050 CallIC(ic, TypeFeedbackId::None()); 2050 CallIC(ic, TypeFeedbackId::None());
2051 __ mov(a0, v0); 2051 __ mov(a0, v0);
2052 __ mov(a1, a0); 2052 __ mov(a1, a0);
2053 __ sw(a1, MemOperand(sp, 2 * kPointerSize)); 2053 __ sw(a1, MemOperand(sp, 2 * kPointerSize));
2054 SetCallPosition(expr, 1); 2054 SetCallPosition(expr);
2055 __ li(a0, Operand(1)); 2055 __ li(a0, Operand(1));
2056 __ Call( 2056 __ Call(
2057 isolate()->builtins()->Call(ConvertReceiverMode::kNotNullOrUndefined), 2057 isolate()->builtins()->Call(ConvertReceiverMode::kNotNullOrUndefined),
2058 RelocInfo::CODE_TARGET); 2058 RelocInfo::CODE_TARGET);
2059 2059
2060 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 2060 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
2061 __ Drop(1); // The function is still on the stack; drop it. 2061 __ Drop(1); // The function is still on the stack; drop it.
2062 2062
2063 // if (!result.done) goto l_try; 2063 // if (!result.done) goto l_try;
2064 __ Move(load_receiver, v0); 2064 __ Move(load_receiver, v0);
(...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after
2862 void FullCodeGenerator::EmitCall(Call* expr, ConvertReceiverMode mode) { 2862 void FullCodeGenerator::EmitCall(Call* expr, ConvertReceiverMode mode) {
2863 // Load the arguments. 2863 // Load the arguments.
2864 ZoneList<Expression*>* args = expr->arguments(); 2864 ZoneList<Expression*>* args = expr->arguments();
2865 int arg_count = args->length(); 2865 int arg_count = args->length();
2866 for (int i = 0; i < arg_count; i++) { 2866 for (int i = 0; i < arg_count; i++) {
2867 VisitForStackValue(args->at(i)); 2867 VisitForStackValue(args->at(i));
2868 } 2868 }
2869 2869
2870 PrepareForBailoutForId(expr->CallId(), NO_REGISTERS); 2870 PrepareForBailoutForId(expr->CallId(), NO_REGISTERS);
2871 // Record source position of the IC call. 2871 // Record source position of the IC call.
2872 SetCallPosition(expr, arg_count); 2872 SetCallPosition(expr);
2873 Handle<Code> ic = CodeFactory::CallIC(isolate(), arg_count, mode).code(); 2873 Handle<Code> ic = CodeFactory::CallIC(isolate(), arg_count, mode).code();
2874 __ li(a3, Operand(SmiFromSlot(expr->CallFeedbackICSlot()))); 2874 __ li(a3, Operand(SmiFromSlot(expr->CallFeedbackICSlot())));
2875 __ lw(a1, MemOperand(sp, (arg_count + 1) * kPointerSize)); 2875 __ lw(a1, MemOperand(sp, (arg_count + 1) * kPointerSize));
2876 // Don't assign a type feedback id to the IC, since type feedback is provided 2876 // Don't assign a type feedback id to the IC, since type feedback is provided
2877 // by the vector above. 2877 // by the vector above.
2878 CallIC(ic); 2878 CallIC(ic);
2879 2879
2880 RecordJSReturnSite(expr); 2880 RecordJSReturnSite(expr);
2881 // Restore context register. 2881 // Restore context register.
2882 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 2882 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
2969 // resolve eval. 2969 // resolve eval.
2970 __ lw(a1, MemOperand(sp, (arg_count + 1) * kPointerSize)); 2970 __ lw(a1, MemOperand(sp, (arg_count + 1) * kPointerSize));
2971 __ push(a1); 2971 __ push(a1);
2972 EmitResolvePossiblyDirectEval(arg_count); 2972 EmitResolvePossiblyDirectEval(arg_count);
2973 2973
2974 // Touch up the stack with the resolved function. 2974 // Touch up the stack with the resolved function.
2975 __ sw(v0, MemOperand(sp, (arg_count + 1) * kPointerSize)); 2975 __ sw(v0, MemOperand(sp, (arg_count + 1) * kPointerSize));
2976 2976
2977 PrepareForBailoutForId(expr->EvalId(), NO_REGISTERS); 2977 PrepareForBailoutForId(expr->EvalId(), NO_REGISTERS);
2978 // Record source position for debugger. 2978 // Record source position for debugger.
2979 SetCallPosition(expr, arg_count); 2979 SetCallPosition(expr);
2980 __ lw(a1, MemOperand(sp, (arg_count + 1) * kPointerSize)); 2980 __ lw(a1, MemOperand(sp, (arg_count + 1) * kPointerSize));
2981 __ li(a0, Operand(arg_count)); 2981 __ li(a0, Operand(arg_count));
2982 __ Call(isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); 2982 __ Call(isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
2983 RecordJSReturnSite(expr); 2983 RecordJSReturnSite(expr);
2984 // Restore context register. 2984 // Restore context register.
2985 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 2985 __ lw(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
2986 context()->DropAndPlug(1, v0); 2986 context()->DropAndPlug(1, v0);
2987 } 2987 }
2988 2988
2989 2989
(...skipping 11 matching lines...) Expand all
3001 3001
3002 // Push the arguments ("left-to-right") on the stack. 3002 // Push the arguments ("left-to-right") on the stack.
3003 ZoneList<Expression*>* args = expr->arguments(); 3003 ZoneList<Expression*>* args = expr->arguments();
3004 int arg_count = args->length(); 3004 int arg_count = args->length();
3005 for (int i = 0; i < arg_count; i++) { 3005 for (int i = 0; i < arg_count; i++) {
3006 VisitForStackValue(args->at(i)); 3006 VisitForStackValue(args->at(i));
3007 } 3007 }
3008 3008
3009 // Call the construct call builtin that handles allocation and 3009 // Call the construct call builtin that handles allocation and
3010 // constructor invocation. 3010 // constructor invocation.
3011 SetConstructCallPosition(expr, arg_count); 3011 SetConstructCallPosition(expr);
3012 3012
3013 // Load function and argument count into a1 and a0. 3013 // Load function and argument count into a1 and a0.
3014 __ li(a0, Operand(arg_count)); 3014 __ li(a0, Operand(arg_count));
3015 __ lw(a1, MemOperand(sp, arg_count * kPointerSize)); 3015 __ lw(a1, MemOperand(sp, arg_count * kPointerSize));
3016 3016
3017 // Record call targets in unoptimized code. 3017 // Record call targets in unoptimized code.
3018 __ EmitLoadTypeFeedbackVector(a2); 3018 __ EmitLoadTypeFeedbackVector(a2);
3019 __ li(a3, Operand(SmiFromSlot(expr->CallNewFeedbackSlot()))); 3019 __ li(a3, Operand(SmiFromSlot(expr->CallNewFeedbackSlot())));
3020 3020
3021 Handle<Code> code = CodeFactory::ConstructIC(isolate()).code(); 3021 Handle<Code> code = CodeFactory::ConstructIC(isolate()).code();
(...skipping 15 matching lines...) Expand all
3037 3037
3038 // Push the arguments ("left-to-right") on the stack. 3038 // Push the arguments ("left-to-right") on the stack.
3039 ZoneList<Expression*>* args = expr->arguments(); 3039 ZoneList<Expression*>* args = expr->arguments();
3040 int arg_count = args->length(); 3040 int arg_count = args->length();
3041 for (int i = 0; i < arg_count; i++) { 3041 for (int i = 0; i < arg_count; i++) {
3042 VisitForStackValue(args->at(i)); 3042 VisitForStackValue(args->at(i));
3043 } 3043 }
3044 3044
3045 // Call the construct call builtin that handles allocation and 3045 // Call the construct call builtin that handles allocation and
3046 // constructor invocation. 3046 // constructor invocation.
3047 SetConstructCallPosition(expr, arg_count); 3047 SetConstructCallPosition(expr);
3048 3048
3049 // Load new target into a3. 3049 // Load new target into a3.
3050 VisitForAccumulatorValue(super_call_ref->new_target_var()); 3050 VisitForAccumulatorValue(super_call_ref->new_target_var());
3051 __ mov(a3, result_register()); 3051 __ mov(a3, result_register());
3052 3052
3053 // Load function and argument count into a1 and a0. 3053 // Load function and argument count into a1 and a0.
3054 __ li(a0, Operand(arg_count)); 3054 __ li(a0, Operand(arg_count));
3055 __ lw(a1, MemOperand(sp, arg_count * kPointerSize)); 3055 __ lw(a1, MemOperand(sp, arg_count * kPointerSize));
3056 3056
3057 __ Call(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); 3057 __ Call(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET);
(...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after
3787 void FullCodeGenerator::EmitDefaultConstructorCallSuper(CallRuntime* expr) { 3787 void FullCodeGenerator::EmitDefaultConstructorCallSuper(CallRuntime* expr) {
3788 ZoneList<Expression*>* args = expr->arguments(); 3788 ZoneList<Expression*>* args = expr->arguments();
3789 DCHECK(args->length() == 2); 3789 DCHECK(args->length() == 2);
3790 3790
3791 // Evaluate new.target and super constructor. 3791 // Evaluate new.target and super constructor.
3792 VisitForStackValue(args->at(0)); 3792 VisitForStackValue(args->at(0));
3793 VisitForStackValue(args->at(1)); 3793 VisitForStackValue(args->at(1));
3794 3794
3795 // Call the construct call builtin that handles allocation and 3795 // Call the construct call builtin that handles allocation and
3796 // constructor invocation. 3796 // constructor invocation.
3797 SetConstructCallPosition(expr, 0); 3797 SetConstructCallPosition(expr);
3798 3798
3799 // Load new target into a3. 3799 // Load new target into a3.
3800 __ lw(a3, MemOperand(sp, 1 * kPointerSize)); 3800 __ lw(a3, MemOperand(sp, 1 * kPointerSize));
3801 3801
3802 // Check if the calling frame is an arguments adaptor frame. 3802 // Check if the calling frame is an arguments adaptor frame.
3803 Label adaptor_frame, args_set_up, runtime; 3803 Label adaptor_frame, args_set_up, runtime;
3804 __ lw(a2, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 3804 __ lw(a2, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
3805 __ lw(t0, MemOperand(a2, StandardFrameConstants::kContextOffset)); 3805 __ lw(t0, MemOperand(a2, StandardFrameConstants::kContextOffset));
3806 __ Branch(&adaptor_frame, eq, t0, 3806 __ Branch(&adaptor_frame, eq, t0,
3807 Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR))); 3807 Operand(Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)));
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
4161 __ push(v0); 4161 __ push(v0);
4162 4162
4163 __ LoadNativeContextSlot(expr->context_index(), v0); 4163 __ LoadNativeContextSlot(expr->context_index(), v0);
4164 } 4164 }
4165 4165
4166 4166
4167 void FullCodeGenerator::EmitCallJSRuntimeFunction(CallRuntime* expr) { 4167 void FullCodeGenerator::EmitCallJSRuntimeFunction(CallRuntime* expr) {
4168 ZoneList<Expression*>* args = expr->arguments(); 4168 ZoneList<Expression*>* args = expr->arguments();
4169 int arg_count = args->length(); 4169 int arg_count = args->length();
4170 4170
4171 SetCallPosition(expr, arg_count); 4171 SetCallPosition(expr);
4172 __ lw(a1, MemOperand(sp, (arg_count + 1) * kPointerSize)); 4172 __ lw(a1, MemOperand(sp, (arg_count + 1) * kPointerSize));
4173 __ li(a0, Operand(arg_count)); 4173 __ li(a0, Operand(arg_count));
4174 __ Call(isolate()->builtins()->Call(ConvertReceiverMode::kNullOrUndefined), 4174 __ Call(isolate()->builtins()->Call(ConvertReceiverMode::kNullOrUndefined),
4175 RelocInfo::CODE_TARGET); 4175 RelocInfo::CODE_TARGET);
4176 } 4176 }
4177 4177
4178 4178
4179 void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) { 4179 void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) {
4180 ZoneList<Expression*>* args = expr->arguments(); 4180 ZoneList<Expression*>* args = expr->arguments();
4181 int arg_count = args->length(); 4181 int arg_count = args->length();
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after
4969 reinterpret_cast<uint32_t>( 4969 reinterpret_cast<uint32_t>(
4970 isolate->builtins()->OsrAfterStackCheck()->entry())); 4970 isolate->builtins()->OsrAfterStackCheck()->entry()));
4971 return OSR_AFTER_STACK_CHECK; 4971 return OSR_AFTER_STACK_CHECK;
4972 } 4972 }
4973 4973
4974 4974
4975 } // namespace internal 4975 } // namespace internal
4976 } // namespace v8 4976 } // namespace v8
4977 4977
4978 #endif // V8_TARGET_ARCH_MIPS 4978 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « src/full-codegen/ia32/full-codegen-ia32.cc ('k') | src/full-codegen/mips64/full-codegen-mips64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698