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

Side by Side Diff: src/arm/builtins-arm.cc

Issue 2033223003: [debug] implement intuitive semantics for stepping over await call. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix arm64 Created 4 years, 6 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 | « no previous file | src/arm64/builtins-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/codegen.h" 7 #include "src/codegen.h"
8 #include "src/debug/debug.h" 8 #include "src/debug/debug.h"
9 #include "src/deoptimizer.h" 9 #include "src/deoptimizer.h"
10 #include "src/full-codegen/full-codegen.h" 10 #include "src/full-codegen/full-codegen.h"
(...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 kLRHasNotBeenSaved, kDontSaveFPRegs); 713 kLRHasNotBeenSaved, kDontSaveFPRegs);
714 714
715 // Store resume mode into generator object. 715 // Store resume mode into generator object.
716 __ str(r2, FieldMemOperand(r1, JSGeneratorObject::kResumeModeOffset)); 716 __ str(r2, FieldMemOperand(r1, JSGeneratorObject::kResumeModeOffset));
717 717
718 // Load suspended function and context. 718 // Load suspended function and context.
719 __ ldr(cp, FieldMemOperand(r1, JSGeneratorObject::kContextOffset)); 719 __ ldr(cp, FieldMemOperand(r1, JSGeneratorObject::kContextOffset));
720 __ ldr(r4, FieldMemOperand(r1, JSGeneratorObject::kFunctionOffset)); 720 __ ldr(r4, FieldMemOperand(r1, JSGeneratorObject::kFunctionOffset));
721 721
722 // Flood function if we are stepping. 722 // Flood function if we are stepping.
723 Label skip_flooding; 723 Label prepare_step_in_if_stepping, prepare_step_in_suspended_generator;
724 Label stepping_prepared;
724 ExternalReference step_in_enabled = 725 ExternalReference step_in_enabled =
725 ExternalReference::debug_step_in_enabled_address(masm->isolate()); 726 ExternalReference::debug_step_in_enabled_address(masm->isolate());
726 __ mov(ip, Operand(step_in_enabled)); 727 __ mov(ip, Operand(step_in_enabled));
727 __ ldrb(ip, MemOperand(ip)); 728 __ ldrb(ip, MemOperand(ip));
728 __ cmp(ip, Operand(0)); 729 __ cmp(ip, Operand(0));
729 __ b(eq, &skip_flooding); 730 __ b(ne, &prepare_step_in_if_stepping);
730 { 731
731 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 732 // Flood function if we need to continue stepping in the suspended generator.
732 __ Push(r1, r2, r4); 733 ExternalReference debug_suspended_generator =
733 __ CallRuntime(Runtime::kDebugPrepareStepInIfStepping); 734 ExternalReference::debug_suspended_generator_address(masm->isolate());
734 __ Pop(r1, r2); 735 __ mov(ip, Operand(debug_suspended_generator));
735 __ ldr(r4, FieldMemOperand(r1, JSGeneratorObject::kFunctionOffset)); 736 __ ldr(ip, MemOperand(ip));
736 } 737 __ cmp(ip, Operand(r1));
737 __ bind(&skip_flooding); 738 __ b(eq, &prepare_step_in_suspended_generator);
739 __ bind(&stepping_prepared);
738 740
739 // Push receiver. 741 // Push receiver.
740 __ ldr(ip, FieldMemOperand(r1, JSGeneratorObject::kReceiverOffset)); 742 __ ldr(ip, FieldMemOperand(r1, JSGeneratorObject::kReceiverOffset));
741 __ Push(ip); 743 __ Push(ip);
742 744
743 // ----------- S t a t e ------------- 745 // ----------- S t a t e -------------
744 // -- r1 : the JSGeneratorObject to resume 746 // -- r1 : the JSGeneratorObject to resume
745 // -- r2 : the resume mode (tagged) 747 // -- r2 : the resume mode (tagged)
746 // -- r4 : generator function 748 // -- r4 : generator function
747 // -- cp : generator context 749 // -- cp : generator context
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 __ ldr(r3, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); 825 __ ldr(r3, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset));
824 __ ldr(r3, FieldMemOperand(r3, SharedFunctionInfo::kCodeOffset)); 826 __ ldr(r3, FieldMemOperand(r3, SharedFunctionInfo::kCodeOffset));
825 __ add(r3, r3, Operand(Code::kHeaderSize - kHeapObjectTag)); 827 __ add(r3, r3, Operand(Code::kHeaderSize - kHeapObjectTag));
826 __ ldr(r2, FieldMemOperand(r1, JSGeneratorObject::kContinuationOffset)); 828 __ ldr(r2, FieldMemOperand(r1, JSGeneratorObject::kContinuationOffset));
827 __ add(r3, r3, Operand(r2, ASR, 1)); 829 __ add(r3, r3, Operand(r2, ASR, 1));
828 __ mov(r2, Operand(Smi::FromInt(JSGeneratorObject::kGeneratorExecuting))); 830 __ mov(r2, Operand(Smi::FromInt(JSGeneratorObject::kGeneratorExecuting)));
829 __ str(r2, FieldMemOperand(r1, JSGeneratorObject::kContinuationOffset)); 831 __ str(r2, FieldMemOperand(r1, JSGeneratorObject::kContinuationOffset));
830 __ Move(r0, r1); // Continuation expects generator object in r0. 832 __ Move(r0, r1); // Continuation expects generator object in r0.
831 __ Jump(r3); 833 __ Jump(r3);
832 } 834 }
835
836 __ bind(&prepare_step_in_if_stepping);
837 {
838 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
839 __ Push(r1, r2, r4);
840 __ CallRuntime(Runtime::kDebugPrepareStepInIfStepping);
841 __ Pop(r1, r2);
842 __ ldr(r4, FieldMemOperand(r1, JSGeneratorObject::kFunctionOffset));
843 }
844 __ b(&stepping_prepared);
845
846 __ bind(&prepare_step_in_suspended_generator);
847 {
848 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
849 __ Push(r1, r2);
850 __ CallRuntime(Runtime::kDebugPrepareStepInSuspendedGenerator);
851 __ Pop(r1, r2);
852 __ ldr(r4, FieldMemOperand(r1, JSGeneratorObject::kFunctionOffset));
853 }
854 __ b(&stepping_prepared);
833 } 855 }
834 856
835 void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) { 857 void Builtins::Generate_ConstructedNonConstructable(MacroAssembler* masm) {
836 FrameScope scope(masm, StackFrame::INTERNAL); 858 FrameScope scope(masm, StackFrame::INTERNAL);
837 __ push(r1); 859 __ push(r1);
838 __ CallRuntime(Runtime::kThrowConstructedNonConstructable); 860 __ CallRuntime(Runtime::kThrowConstructedNonConstructable);
839 } 861 }
840 862
841 863
842 enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt }; 864 enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt };
(...skipping 1932 matching lines...) Expand 10 before | Expand all | Expand 10 after
2775 } 2797 }
2776 } 2798 }
2777 2799
2778 2800
2779 #undef __ 2801 #undef __
2780 2802
2781 } // namespace internal 2803 } // namespace internal
2782 } // namespace v8 2804 } // namespace v8
2783 2805
2784 #endif // V8_TARGET_ARCH_ARM 2806 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/arm64/builtins-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698