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

Side by Side Diff: src/full-codegen/arm64/full-codegen-arm64.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/full-codegen/arm/full-codegen-arm.cc ('k') | src/full-codegen/full-codegen.h » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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_ARM64 5 #if V8_TARGET_ARCH_ARM64
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 2566 matching lines...) Expand 10 before | Expand all | Expand 10 after
2577 2577
2578 void FullCodeGenerator::EmitCall(Call* expr, ConvertReceiverMode mode) { 2578 void FullCodeGenerator::EmitCall(Call* expr, ConvertReceiverMode mode) {
2579 // Load the arguments. 2579 // Load the arguments.
2580 ZoneList<Expression*>* args = expr->arguments(); 2580 ZoneList<Expression*>* args = expr->arguments();
2581 int arg_count = args->length(); 2581 int arg_count = args->length();
2582 for (int i = 0; i < arg_count; i++) { 2582 for (int i = 0; i < arg_count; i++) {
2583 VisitForStackValue(args->at(i)); 2583 VisitForStackValue(args->at(i));
2584 } 2584 }
2585 2585
2586 PrepareForBailoutForId(expr->CallId(), NO_REGISTERS); 2586 PrepareForBailoutForId(expr->CallId(), NO_REGISTERS);
2587 SetCallPosition(expr, arg_count); 2587 SetCallPosition(expr);
2588 2588
2589 Handle<Code> ic = CodeFactory::CallIC(isolate(), arg_count, mode).code(); 2589 Handle<Code> ic = CodeFactory::CallIC(isolate(), arg_count, mode).code();
2590 __ Mov(x3, SmiFromSlot(expr->CallFeedbackICSlot())); 2590 __ Mov(x3, SmiFromSlot(expr->CallFeedbackICSlot()));
2591 __ Peek(x1, (arg_count + 1) * kXRegSize); 2591 __ Peek(x1, (arg_count + 1) * kXRegSize);
2592 // Don't assign a type feedback id to the IC, since type feedback is provided 2592 // Don't assign a type feedback id to the IC, since type feedback is provided
2593 // by the vector above. 2593 // by the vector above.
2594 CallIC(ic); 2594 CallIC(ic);
2595 2595
2596 RecordJSReturnSite(expr); 2596 RecordJSReturnSite(expr);
2597 // Restore context register. 2597 // Restore context register.
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
2686 __ Peek(x10, (arg_count + 1) * kPointerSize); 2686 __ Peek(x10, (arg_count + 1) * kPointerSize);
2687 __ Push(x10); 2687 __ Push(x10);
2688 EmitResolvePossiblyDirectEval(arg_count); 2688 EmitResolvePossiblyDirectEval(arg_count);
2689 2689
2690 // Touch up the stack with the resolved function. 2690 // Touch up the stack with the resolved function.
2691 __ Poke(x0, (arg_count + 1) * kPointerSize); 2691 __ Poke(x0, (arg_count + 1) * kPointerSize);
2692 2692
2693 PrepareForBailoutForId(expr->EvalId(), NO_REGISTERS); 2693 PrepareForBailoutForId(expr->EvalId(), NO_REGISTERS);
2694 2694
2695 // Record source position for debugger. 2695 // Record source position for debugger.
2696 SetCallPosition(expr, arg_count); 2696 SetCallPosition(expr);
2697 2697
2698 // Call the evaluated function. 2698 // Call the evaluated function.
2699 __ Peek(x1, (arg_count + 1) * kXRegSize); 2699 __ Peek(x1, (arg_count + 1) * kXRegSize);
2700 __ Mov(x0, arg_count); 2700 __ Mov(x0, arg_count);
2701 __ Call(isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); 2701 __ Call(isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
2702 RecordJSReturnSite(expr); 2702 RecordJSReturnSite(expr);
2703 // Restore context register. 2703 // Restore context register.
2704 __ Ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 2704 __ Ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
2705 context()->DropAndPlug(1, x0); 2705 context()->DropAndPlug(1, x0);
2706 } 2706 }
(...skipping 13 matching lines...) Expand all
2720 2720
2721 // Push the arguments ("left-to-right") on the stack. 2721 // Push the arguments ("left-to-right") on the stack.
2722 ZoneList<Expression*>* args = expr->arguments(); 2722 ZoneList<Expression*>* args = expr->arguments();
2723 int arg_count = args->length(); 2723 int arg_count = args->length();
2724 for (int i = 0; i < arg_count; i++) { 2724 for (int i = 0; i < arg_count; i++) {
2725 VisitForStackValue(args->at(i)); 2725 VisitForStackValue(args->at(i));
2726 } 2726 }
2727 2727
2728 // Call the construct call builtin that handles allocation and 2728 // Call the construct call builtin that handles allocation and
2729 // constructor invocation. 2729 // constructor invocation.
2730 SetConstructCallPosition(expr, arg_count); 2730 SetConstructCallPosition(expr);
2731 2731
2732 // Load function and argument count into x1 and x0. 2732 // Load function and argument count into x1 and x0.
2733 __ Mov(x0, arg_count); 2733 __ Mov(x0, arg_count);
2734 __ Peek(x1, arg_count * kXRegSize); 2734 __ Peek(x1, arg_count * kXRegSize);
2735 2735
2736 // Record call targets in unoptimized code. 2736 // Record call targets in unoptimized code.
2737 __ EmitLoadTypeFeedbackVector(x2); 2737 __ EmitLoadTypeFeedbackVector(x2);
2738 __ Mov(x3, SmiFromSlot(expr->CallNewFeedbackSlot())); 2738 __ Mov(x3, SmiFromSlot(expr->CallNewFeedbackSlot()));
2739 2739
2740 Handle<Code> code = CodeFactory::ConstructIC(isolate()).code(); 2740 Handle<Code> code = CodeFactory::ConstructIC(isolate()).code();
(...skipping 15 matching lines...) Expand all
2756 2756
2757 // Push the arguments ("left-to-right") on the stack. 2757 // Push the arguments ("left-to-right") on the stack.
2758 ZoneList<Expression*>* args = expr->arguments(); 2758 ZoneList<Expression*>* args = expr->arguments();
2759 int arg_count = args->length(); 2759 int arg_count = args->length();
2760 for (int i = 0; i < arg_count; i++) { 2760 for (int i = 0; i < arg_count; i++) {
2761 VisitForStackValue(args->at(i)); 2761 VisitForStackValue(args->at(i));
2762 } 2762 }
2763 2763
2764 // Call the construct call builtin that handles allocation and 2764 // Call the construct call builtin that handles allocation and
2765 // constructor invocation. 2765 // constructor invocation.
2766 SetConstructCallPosition(expr, arg_count); 2766 SetConstructCallPosition(expr);
2767 2767
2768 // Load new target into x3. 2768 // Load new target into x3.
2769 VisitForAccumulatorValue(super_call_ref->new_target_var()); 2769 VisitForAccumulatorValue(super_call_ref->new_target_var());
2770 __ Mov(x3, result_register()); 2770 __ Mov(x3, result_register());
2771 2771
2772 // Load function and argument count into x1 and x0. 2772 // Load function and argument count into x1 and x0.
2773 __ Mov(x0, arg_count); 2773 __ Mov(x0, arg_count);
2774 __ Peek(x1, arg_count * kXRegSize); 2774 __ Peek(x1, arg_count * kXRegSize);
2775 2775
2776 __ Call(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET); 2776 __ Call(isolate()->builtins()->Construct(), RelocInfo::CODE_TARGET);
(...skipping 709 matching lines...) Expand 10 before | Expand all | Expand 10 after
3486 void FullCodeGenerator::EmitDefaultConstructorCallSuper(CallRuntime* expr) { 3486 void FullCodeGenerator::EmitDefaultConstructorCallSuper(CallRuntime* expr) {
3487 ZoneList<Expression*>* args = expr->arguments(); 3487 ZoneList<Expression*>* args = expr->arguments();
3488 DCHECK(args->length() == 2); 3488 DCHECK(args->length() == 2);
3489 3489
3490 // Evaluate new.target and super constructor. 3490 // Evaluate new.target and super constructor.
3491 VisitForStackValue(args->at(0)); 3491 VisitForStackValue(args->at(0));
3492 VisitForStackValue(args->at(1)); 3492 VisitForStackValue(args->at(1));
3493 3493
3494 // Call the construct call builtin that handles allocation and 3494 // Call the construct call builtin that handles allocation and
3495 // constructor invocation. 3495 // constructor invocation.
3496 SetConstructCallPosition(expr, 0); 3496 SetConstructCallPosition(expr);
3497 3497
3498 // Load new target into x3. 3498 // Load new target into x3.
3499 __ Peek(x3, 1 * kPointerSize); 3499 __ Peek(x3, 1 * kPointerSize);
3500 3500
3501 // Check if the calling frame is an arguments adaptor frame. 3501 // Check if the calling frame is an arguments adaptor frame.
3502 Label adaptor_frame, args_set_up, runtime; 3502 Label adaptor_frame, args_set_up, runtime;
3503 __ Ldr(x11, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); 3503 __ Ldr(x11, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
3504 __ Ldr(x12, MemOperand(x11, StandardFrameConstants::kContextOffset)); 3504 __ Ldr(x12, MemOperand(x11, StandardFrameConstants::kContextOffset));
3505 __ Cmp(x12, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)); 3505 __ Cmp(x12, Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
3506 __ B(eq, &adaptor_frame); 3506 __ B(eq, &adaptor_frame);
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
3851 __ Push(x0); 3851 __ Push(x0);
3852 3852
3853 __ LoadNativeContextSlot(expr->context_index(), x0); 3853 __ LoadNativeContextSlot(expr->context_index(), x0);
3854 } 3854 }
3855 3855
3856 3856
3857 void FullCodeGenerator::EmitCallJSRuntimeFunction(CallRuntime* expr) { 3857 void FullCodeGenerator::EmitCallJSRuntimeFunction(CallRuntime* expr) {
3858 ZoneList<Expression*>* args = expr->arguments(); 3858 ZoneList<Expression*>* args = expr->arguments();
3859 int arg_count = args->length(); 3859 int arg_count = args->length();
3860 3860
3861 SetCallPosition(expr, arg_count); 3861 SetCallPosition(expr);
3862 __ Peek(x1, (arg_count + 1) * kPointerSize); 3862 __ Peek(x1, (arg_count + 1) * kPointerSize);
3863 __ Mov(x0, arg_count); 3863 __ Mov(x0, arg_count);
3864 __ Call(isolate()->builtins()->Call(ConvertReceiverMode::kNullOrUndefined), 3864 __ Call(isolate()->builtins()->Call(ConvertReceiverMode::kNullOrUndefined),
3865 RelocInfo::CODE_TARGET); 3865 RelocInfo::CODE_TARGET);
3866 } 3866 }
3867 3867
3868 3868
3869 void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) { 3869 void FullCodeGenerator::VisitCallRuntime(CallRuntime* expr) {
3870 ZoneList<Expression*>* args = expr->arguments(); 3870 ZoneList<Expression*>* args = expr->arguments();
3871 int arg_count = args->length(); 3871 int arg_count = args->length();
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
4612 // result = receiver[f](arg); 4612 // result = receiver[f](arg);
4613 __ Bind(&l_call); 4613 __ Bind(&l_call);
4614 __ Peek(load_receiver, 1 * kPointerSize); 4614 __ Peek(load_receiver, 1 * kPointerSize);
4615 __ Peek(load_name, 2 * kPointerSize); 4615 __ Peek(load_name, 2 * kPointerSize);
4616 __ Mov(LoadDescriptor::SlotRegister(), 4616 __ Mov(LoadDescriptor::SlotRegister(),
4617 SmiFromSlot(expr->KeyedLoadFeedbackSlot())); 4617 SmiFromSlot(expr->KeyedLoadFeedbackSlot()));
4618 Handle<Code> ic = CodeFactory::KeyedLoadIC(isolate(), SLOPPY).code(); 4618 Handle<Code> ic = CodeFactory::KeyedLoadIC(isolate(), SLOPPY).code();
4619 CallIC(ic, TypeFeedbackId::None()); 4619 CallIC(ic, TypeFeedbackId::None());
4620 __ Mov(x1, x0); 4620 __ Mov(x1, x0);
4621 __ Poke(x1, 2 * kPointerSize); 4621 __ Poke(x1, 2 * kPointerSize);
4622 SetCallPosition(expr, 1); 4622 SetCallPosition(expr);
4623 __ Mov(x0, 1); 4623 __ Mov(x0, 1);
4624 __ Call( 4624 __ Call(
4625 isolate()->builtins()->Call(ConvertReceiverMode::kNotNullOrUndefined), 4625 isolate()->builtins()->Call(ConvertReceiverMode::kNotNullOrUndefined),
4626 RelocInfo::CODE_TARGET); 4626 RelocInfo::CODE_TARGET);
4627 4627
4628 __ Ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 4628 __ Ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
4629 __ Drop(1); // The function is still on the stack; drop it. 4629 __ Drop(1); // The function is still on the stack; drop it.
4630 4630
4631 // if (!result.done) goto l_try; 4631 // if (!result.done) goto l_try;
4632 __ Bind(&l_loop); 4632 __ Bind(&l_loop);
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
4982 } 4982 }
4983 4983
4984 return INTERRUPT; 4984 return INTERRUPT;
4985 } 4985 }
4986 4986
4987 4987
4988 } // namespace internal 4988 } // namespace internal
4989 } // namespace v8 4989 } // namespace v8
4990 4990
4991 #endif // V8_TARGET_ARCH_ARM64 4991 #endif // V8_TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « src/full-codegen/arm/full-codegen-arm.cc ('k') | src/full-codegen/full-codegen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698