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

Side by Side Diff: runtime/vm/constants_dbc.h

Issue 2987323003: [VM DBC compiler and simulator] Support reified generic functions. (Closed)
Patch Set: address review comments and sync Created 3 years, 4 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 | runtime/vm/dart_entry.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 (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef RUNTIME_VM_CONSTANTS_DBC_H_ 5 #ifndef RUNTIME_VM_CONSTANTS_DBC_H_
6 #define RUNTIME_VM_CONSTANTS_DBC_H_ 6 #define RUNTIME_VM_CONSTANTS_DBC_H_
7 7
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "platform/globals.h" 9 #include "platform/globals.h"
10 #include "platform/utils.h" 10 #include "platform/utils.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 // Load value at index D from constant pool into FP[rA] or push it onto the 139 // Load value at index D from constant pool into FP[rA] or push it onto the
140 // stack. 140 // stack.
141 // 141 //
142 // - StoreLocal rX; PopLocal rX 142 // - StoreLocal rX; PopLocal rX
143 // 143 //
144 // Store top of the stack into FP[rX] and pop it if needed. 144 // Store top of the stack into FP[rX] and pop it if needed.
145 // 145 //
146 // - StaticCall ArgC, D 146 // - StaticCall ArgC, D
147 // 147 //
148 // Invoke function in SP[0] with arguments SP[-(1+ArgC)], ..., SP[-1] and 148 // Invoke function in SP[0] with arguments SP[-(1+ArgC)], ..., SP[-1] and
149 // argument descriptor PP[D]. 149 // argument descriptor PP[D], which indicates whether the first argument
150 // is a type argument vector.
150 // 151 //
151 // - IndirectStaticCall ArgC, D 152 // - IndirectStaticCall ArgC, D
152 // 153 //
153 // Invoke the function given by the ICData in SP[0] with arguments 154 // Invoke the function given by the ICData in SP[0] with arguments
154 // SP[-(1+ArgC)], ..., SP[-1] and argument descriptor PP[D]. 155 // SP[-(1+ArgC)], ..., SP[-1] and argument descriptor PP[D], which
156 // indicates whether the first argument is a type argument vector.
155 // 157 //
156 // - InstanceCall<N> ArgC, D; InstanceCall<N>Opt ArgC, D 158 // - InstanceCall<N> ArgC, D; InstanceCall<N>Opt ArgC, D
157 // 159 //
158 // Lookup and invoke method with N checked arguments using ICData in PP[D] 160 // Lookup and invoke method with N checked arguments using ICData in PP[D]
159 // with arguments SP[-(1+ArgC)], ..., SP[-1]. 161 // with arguments SP[-(1+ArgC)], ..., SP[-1].
162 // The ICData indicates whether the first argument is a type argument vector.
160 // 163 //
161 // - NativeBootstrapCall, NativeNoScopeCall, NativeAutoScopeCall 164 // - NativeBootstrapCall, NativeNoScopeCall, NativeAutoScopeCall
162 // 165 //
163 // Invoke native function SP[-1] with argc_tag SP[0]. 166 // Invoke native function SP[-1] with argc_tag SP[0].
164 // 167 //
165 // - PushPolymorphicInstanceCall ArgC, D 168 // - PushPolymorphicInstanceCall ArgC, D
166 // 169 //
167 // Skips 2*D + 1 instructions and pushes a function object onto the stack 170 // Skips 2*D + 1 instructions and pushes a function object onto the stack
168 // if one can be found as follows. Otherwise skips only 2*D instructions. 171 // if one can be found as follows. Otherwise skips only 2*D instructions.
169 // The function is looked up in the IC data encoded in the following 2*D 172 // The function is looked up in the IC data encoded in the following 2*D
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 // prologues are implemented on other architectures. 488 // prologues are implemented on other architectures.
486 // 489 //
487 // Note: Unlike Entry bytecode EntryOptional does not setup the frame for 490 // Note: Unlike Entry bytecode EntryOptional does not setup the frame for
488 // local variables this is done by a separate bytecode Frame. 491 // local variables this is done by a separate bytecode Frame.
489 // 492 //
490 // - EntryOptimized A, D 493 // - EntryOptimized A, D
491 // 494 //
492 // Function prologue for optimized functions with no optional or named 495 // Function prologue for optimized functions with no optional or named
493 // arguments. 496 // arguments.
494 // A - expected number of positional arguments; 497 // A - expected number of positional arguments;
495 // B - number of local slots to reserve for registers; 498 // D - number of local slots to reserve for registers;
496 // 499 //
497 // Note: reserved slots are not initialized because optimized code 500 // Note: reserved slots are not initialized because optimized code
498 // has stack maps attached to call sites. 501 // has stack maps attached to call sites.
499 // 502 //
500 // - HotCheck A, D 503 // - HotCheck A, D
501 // 504 //
502 // Increment current function's usage counter by A and check if it 505 // Increment current function's usage counter by A and check if it
503 // exceeds D. If it does trigger (re)optimization of the current 506 // exceeds D. If it does trigger (re)optimization of the current
504 // function. 507 // function.
505 // 508 //
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 // 1, or if FP[rA]'s cid is found in the array of cid ranges encoded by the 617 // 1, or if FP[rA]'s cid is found in the array of cid ranges encoded by the
615 // following rC Nop instructions. The cid ranges from a inclusive to b 618 // following rC Nop instructions. The cid ranges from a inclusive to b
616 // exclusive are coded in pairs of (a, b - a). Otherwise skips only 2 619 // exclusive are coded in pairs of (a, b - a). Otherwise skips only 2
617 // instructions. 620 // instructions.
618 // 621 //
619 // - CheckStack 622 // - CheckStack
620 // 623 //
621 // Compare SP against isolate stack limit and call StackOverflow handler if 624 // Compare SP against isolate stack limit and call StackOverflow handler if
622 // necessary. 625 // necessary.
623 // 626 //
627 // - CheckStackAlwaysExit
628 //
629 // Unconditionally call StackOverflow handler.
630 //
631 // - CheckFunctionTypeArgs A, D
632 //
633 // Check for a passed-in type argument vector of length A and
634 // store it at FP[D].
635 //
624 // - DebugStep, DebugBreak A 636 // - DebugStep, DebugBreak A
625 // 637 //
626 // Debugger support. DebugBreak is bytecode that can be patched into the 638 // Debugger support. DebugBreak is bytecode that can be patched into the
627 // instruction stream to trigger in place breakpoint. 639 // instruction stream to trigger in place breakpoint.
628 // 640 //
629 // When patching instance or static call with DebugBreak we set A to 641 // When patching instance or static call with DebugBreak we set A to
630 // match patched call's argument count so that Return instructions continue 642 // match patched call's argument count so that Return instructions continue
631 // to work. 643 // to work.
632 // 644 //
633 // TODO(vegorov) the way we replace calls with DebugBreak does not work 645 // TODO(vegorov) the way we replace calls with DebugBreak does not work
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 V(TestCids, A_D, reg, num, ___) \ 857 V(TestCids, A_D, reg, num, ___) \
846 V(CheckSmi, A, reg, ___, ___) \ 858 V(CheckSmi, A, reg, ___, ___) \
847 V(CheckEitherNonSmi, A_D, reg, reg, ___) \ 859 V(CheckEitherNonSmi, A_D, reg, reg, ___) \
848 V(CheckClassId, A_D, reg, num, ___) \ 860 V(CheckClassId, A_D, reg, num, ___) \
849 V(CheckClassIdRange, A_D, reg, num, ___) \ 861 V(CheckClassIdRange, A_D, reg, num, ___) \
850 V(CheckBitTest, A_D, reg, num, ___) \ 862 V(CheckBitTest, A_D, reg, num, ___) \
851 V(CheckCids, A_B_C, reg, num, num) \ 863 V(CheckCids, A_B_C, reg, num, num) \
852 V(CheckCidsByRange, A_B_C, reg, num, num) \ 864 V(CheckCidsByRange, A_B_C, reg, num, num) \
853 V(CheckStack, 0, ___, ___, ___) \ 865 V(CheckStack, 0, ___, ___, ___) \
854 V(CheckStackAlwaysExit, 0, ___, ___, ___) \ 866 V(CheckStackAlwaysExit, 0, ___, ___, ___) \
867 V(CheckFunctionTypeArgs, A_D, num, num, ___) \
855 V(DebugStep, 0, ___, ___, ___) \ 868 V(DebugStep, 0, ___, ___, ___) \
856 V(DebugBreak, A, num, ___, ___) \ 869 V(DebugBreak, A, num, ___, ___) \
857 V(Deopt, A_D, num, num, ___) \ 870 V(Deopt, A_D, num, num, ___) \
858 V(DeoptRewind, 0, ___, ___, ___) 871 V(DeoptRewind, 0, ___, ___, ___)
859 872
860 // clang-format on 873 // clang-format on
861 874
862 typedef uint32_t Instr; 875 typedef uint32_t Instr;
863 876
864 class Bytecode { 877 class Bytecode {
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 1006
994 // After a comparison, the condition NEXT_IS_TRUE means the following 1007 // After a comparison, the condition NEXT_IS_TRUE means the following
995 // instruction is executed if the comparison is true and skipped over overwise. 1008 // instruction is executed if the comparison is true and skipped over overwise.
996 // Condition NEXT_IS_FALSE means the following instruction is executed if the 1009 // Condition NEXT_IS_FALSE means the following instruction is executed if the
997 // comparison is false and skipped over otherwise. 1010 // comparison is false and skipped over otherwise.
998 enum Condition { NEXT_IS_TRUE, NEXT_IS_FALSE, INVALID_CONDITION }; 1011 enum Condition { NEXT_IS_TRUE, NEXT_IS_FALSE, INVALID_CONDITION };
999 1012
1000 } // namespace dart 1013 } // namespace dart
1001 1014
1002 #endif // RUNTIME_VM_CONSTANTS_DBC_H_ 1015 #endif // RUNTIME_VM_CONSTANTS_DBC_H_
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/dart_entry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698