• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16// Stmt & Notmmpl
17  // storage access opcodes
18  OPCODE(dassign, DassignNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEHASSSADEF), 8)
19  OPCODE(piassign, PiassignNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEHASSSADEF), 8)
20  OPCODE(maydassign, DassignNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEHASSSADEF), 8)
21  OPCODE(iassign, IassignNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEHASSSADEF), 12)
22  // hierarchical control flow opcodes
23  OPCODE(block, BlockNode, (OPCODEISSTMT | OPCODENOTMMPL), 0)
24  OPCODE(doloop, DoloopNode, (OPCODEISSTMT | OPCODENOTMMPL), 0)
25  OPCODE(dowhile, WhileStmtNode, (OPCODEISSTMT | OPCODENOTMMPL), 0)
26  OPCODE(if, IfStmtNode, (OPCODEISSTMT | OPCODENOTMMPL), 0)
27  OPCODE(while, WhileStmtNode, (OPCODEISSTMT | OPCODENOTMMPL), 0)
28  OPCODE(switch, SwitchNode, (OPCODEISSTMT | OPCODENOTMMPL), 8)
29  OPCODE(multiway, MultiwayNode, (OPCODEISSTMT | OPCODENOTMMPL), 8)
30  OPCODE(foreachelem, ForeachelemNode, (OPCODEISSTMT | OPCODENOTMMPL), 0)
31  // other opcodes
32  OPCODE(comment, CommentNode, (OPCODEISSTMT | OPCODENOTMMPL), 0)
33  OPCODE(eval, UnaryStmtNode, (OPCODEISSTMT | OPCODENOTMMPL), 8)
34  OPCODE(free, UnaryStmtNode, (OPCODEISSTMT | OPCODENOTMMPL), 8)
35  OPCODE(calcassertge, BinaryStmtNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEASSERTLOWERBOUNDARY), 8)
36  OPCODE(calcassertlt, BinaryStmtNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEASSERTUPPERBOUNDARY), 8)
37  OPCODE(assertge, AssertBoundaryStmtNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEASSERTLOWERBOUNDARY), 8)
38  OPCODE(assertlt, AssertBoundaryStmtNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEASSERTUPPERBOUNDARY), 8)
39  OPCODE(callassertle, CallAssertBoundaryStmtNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEASSERTUPPERBOUNDARY), 8)
40  OPCODE(returnassertle, AssertBoundaryStmtNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEASSERTUPPERBOUNDARY), 8)
41  OPCODE(assignassertle, AssertBoundaryStmtNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEASSERTUPPERBOUNDARY), 8)
42  OPCODE(abort, UnaryStmtNode, (OPCODEISSTMT | OPCODENOTMMPL), 8)
43  OPCODE(assertnonnull, UnaryStmtNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEASSERTNONNULL), 8)
44  OPCODE(assignassertnonnull, AssignAssertNonnullStmtNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEASSERTNONNULL), 8)
45  OPCODE(callassertnonnull, CallAssertNonnullStmtNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEASSERTNONNULL), 8)
46  OPCODE(returnassertnonnull, ReturnAssertNonnullStmtNode, (OPCODEISSTMT | OPCODENOTMMPL | OPCODEASSERTNONNULL), 8)
47// Expr & Notmmpl
48  // storage access opcodes
49  OPCODE(dread, AddrofNode, (OPCODENOTMMPL | OPCODEHASSSAUSE), 12)
50  OPCODE(iread, IreadNode, (OPCODENOTMMPL | OPCODEHASSSAUSE), 12)
51  // leaf opcodes
52  OPCODE(addrof, AddrofNode, OPCODENOTMMPL, 12)
53  OPCODE(iaddrof, IreadNode, OPCODENOTMMPL, 12)
54  OPCODE(sizeoftype, SizeoftypeNode, OPCODENOTMMPL, 8)
55  OPCODE(fieldsdist, FieldsDistNode, OPCODENOTMMPL, 8)
56  // N-ary expression opcodes
57  OPCODE(array, ArrayNode, (OPCODEISVARSIZE | OPCODENOTMMPL | OPCODEMAYTHROWEXCEPTION), 8)
58// Stmt
59  // storage access opcodes
60  OPCODE(iassignoff, IassignoffNode, OPCODEISSTMT, 8)
61  OPCODE(iassignfpoff, IassignFPoffNode, OPCODEISSTMT, 8)
62  OPCODE(regassign, RegassignNode, (OPCODEISSTMT | OPCODEHASSSADEF), 8)
63  // flat control flow opcodes
64  OPCODE(goto, GotoNode, OPCODEISSTMT, 8)
65  OPCODE(brfalse, CondGotoNode, OPCODEISSTMT, 8)
66  OPCODE(brtrue, CondGotoNode, OPCODEISSTMT, 8)
67  OPCODE(return, NaryStmtNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE), 0)
68  OPCODE(rangegoto, RangeGotoNode, OPCODEISSTMT, 8)
69  // call opcodes
70  OPCODE(call, CallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 8)
71  OPCODE(virtualcall, CallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 8)
72  OPCODE(superclasscall, CallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 8)
73  OPCODE(interfacecall, CallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 8)
74  OPCODE(customcall, CallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 8)
75  OPCODE(polymorphiccall, CallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 12)
76  OPCODE(icall, IcallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 8)
77  OPCODE(interfaceicall, CallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 8)
78  OPCODE(virtualicall, CallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 8)
79  OPCODE(intrinsiccall, IntrinsiccallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 8)
80  OPCODE(intrinsiccallwithtype, IntrinsiccallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 12)
81  OPCODE(xintrinsiccall, IntrinsiccallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 8)
82  OPCODE(callassigned, CallNode,  (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
83  OPCODE(virtualcallassigned, CallNode,  (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
84  OPCODE(superclasscallassigned, CallNode,  (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
85  OPCODE(interfacecallassigned, CallNode,  (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
86  OPCODE(customcallassigned, CallNode,  (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
87  OPCODE(polymorphiccallassigned, CallNode,  (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
88  OPCODE(icallassigned, IcallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
89  OPCODE(interfaceicallassigned, CallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
90  OPCODE(virtualicallassigned, CallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
91  OPCODE(intrinsiccallassigned, IntrinsiccallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
92  OPCODE(intrinsiccallwithtypeassigned, IntrinsiccallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
93  OPCODE(xintrinsiccallassigned, IntrinsiccallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
94  // call with generic instantiation opcodes
95  OPCODE(callinstant, CallinstantNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 0)
96  OPCODE(callinstantassigned, CallinstantNode,  (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
97  OPCODE(virtualcallinstant, CallinstantNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 0)
98  OPCODE(virtualcallinstantassigned, CallinstantNode,  (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
99  OPCODE(superclasscallinstant, CallinstantNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 0)
100  OPCODE(superclasscallinstantassigned, CallinstantNode,  (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
101  OPCODE(interfacecallinstant, CallinstantNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 0)
102  OPCODE(interfacecallinstantassigned, CallinstantNode,  (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 0)
103  // exception handling
104  OPCODE(jstry, JsTryNode, OPCODEISSTMT, 8)
105  OPCODE(try, TryNode, (OPCODEISSTMT | OPCODENOTMMPL), 8)
106  OPCODE(cpptry, TryNode, (OPCODEISSTMT | OPCODENOTMMPL), 8)
107
108  OPCODE(throw, UnaryStmtNode, (OPCODEISSTMT | OPCODEHASSSAUSE), 0)
109
110  OPCODE(jscatch, StmtNode, OPCODEISSTMT, 4)
111  OPCODE(catch, CatchNode, OPCODEISSTMT, 8)
112  OPCODE(cppcatch, CppCatchNode, OPCODEISSTMT, 8)
113
114  OPCODE(finally, StmtNode, OPCODEISSTMT, 6)
115  OPCODE(cleanuptry, StmtNode, OPCODEISSTMT, 6)
116  OPCODE(endtry, StmtNode, OPCODEISSTMT, 6)
117  OPCODE(safe, StmtNode, OPCODEISSTMT, 6)
118  OPCODE(endsafe, StmtNode, OPCODEISSTMT, 6)
119  OPCODE(unsafe, StmtNode, OPCODEISSTMT, 6)
120  OPCODE(endunsafe, StmtNode, OPCODEISSTMT, 6)
121  OPCODE(gosub, GotoNode, (OPCODEISSTMT | OPCODEHASSSAUSE), 8)
122  OPCODE(retsub, StmtNode, (OPCODEISSTMT | OPCODEHASSSAUSE), 6)
123  // synchronizaion
124  OPCODE(syncenter, NaryStmtNode, (OPCODEISSTMT | OPCODEHASSSADEF | OPCODEHASSSAUSE), 0)
125  OPCODE(syncexit, NaryStmtNode, (OPCODEISSTMT | OPCODEHASSSADEF | OPCODEHASSSAUSE), 0)
126  OPCODE(decref, UnaryStmtNode, (OPCODEISSTMT | OPCODEHASSSAUSE | OPCODENOTMMPL), 0)
127  OPCODE(incref, UnaryStmtNode, (OPCODEISSTMT | OPCODEHASSSAUSE | OPCODENOTMMPL), 0)
128  OPCODE(decrefreset, UnaryStmtNode, (OPCODEISSTMT | OPCODEHASSSAUSE | OPCODENOTMMPL), 0)
129  // barriers
130  OPCODE(membaracquire, StmtNode, OPCODEISSTMT, 6)
131  OPCODE(membarrelease, StmtNode, OPCODEISSTMT, 6)
132  OPCODE(membarstoreload, StmtNode, OPCODEISSTMT, 6)
133  OPCODE(membarstorestore, StmtNode, OPCODEISSTMT, 6)
134  // other opcodes
135  OPCODE(label, LabelNode, OPCODEISSTMT, 8)
136// Expr
137  // storage access opcodes
138  OPCODE(ireadoff, IreadoffNode, 0, 8)
139  OPCODE(ireadfpoff, IreadFPoffNode, 0, 8)
140  OPCODE(regread, RegreadNode, OPCODEHASSSAUSE, 8)
141  // leaf opcodes
142  OPCODE(addroffunc, AddroffuncNode, 0, 8)
143  OPCODE(addroflabel, AddroflabelNode, 0, 8)
144  OPCODE(constval, ConstvalNode, 0, 8)
145  OPCODE(conststr, ConststrNode, OPCODENOTMMPL, 8)
146  OPCODE(conststr16, Conststr16Node, OPCODENOTMMPL, 8)
147  // type conversion expression opcodes
148  OPCODE(ceil, TypeCvtNode, OPCODEISTYPECVT, 8)
149  OPCODE(cvt, TypeCvtNode, OPCODEISTYPECVT, 8)
150  OPCODE(floor, TypeCvtNode, OPCODEISTYPECVT, 8)
151  OPCODE(retype, RetypeNode, OPCODEISTYPECVT, 8)
152  OPCODE(round, TypeCvtNode, OPCODEISTYPECVT, 8)
153  OPCODE(trunc, TypeCvtNode, OPCODEISTYPECVT, 8)
154  // unary expression opcodes
155  OPCODE(abs, UnaryNode, 0, 0)
156  OPCODE(bnot, UnaryNode, 0, 0)
157  OPCODE(lnot, UnaryNode, 0, 0)
158  OPCODE(neg, UnaryNode, 0, 0)
159  OPCODE(recip, UnaryNode, 0, 0)
160  OPCODE(sqrt, UnaryNode, 0, 0)
161  OPCODE(sext, ExtractbitsNode, 0, 8)
162  OPCODE(zext, ExtractbitsNode, 0, 8)
163
164#ifdef alloca
165#undef alloca
166  OPCODE(alloca, UnaryNode, OPCODENOTPURE, 0)
167#define alloca __builtin_alloca
168#else
169  OPCODE(alloca, UnaryNode, OPCODENOTPURE, 0)
170#endif
171
172  OPCODE(malloc, UnaryNode, OPCODENOTPURE, 0)
173  OPCODE(gcmalloc, GCMallocNode, OPCODENOTPURE, 8)
174  OPCODE(gcpermalloc, GCMallocNode, OPCODENOTPURE, 8)
175  OPCODE(stackmalloc, GCMallocNode, OPCODENOTPURE, 8)
176  OPCODE(gcmallocjarray, JarrayMallocNode, OPCODENOTPURE, 12)
177  OPCODE(gcpermallocjarray, JarrayMallocNode, OPCODENOTPURE, 12)
178  OPCODE(stackmallocjarray, JarrayMallocNode, OPCODENOTPURE, 12)
179  OPCODE(resolveinterfacefunc, ResolveFuncNode, 0, 8)
180  OPCODE(resolvevirtualfunc, ResolveFuncNode, 0, 8)
181  // binary expression opcodes
182  OPCODE(add, BinaryNode, 0, 0)
183  OPCODE(sub, BinaryNode, 0, 0)
184  OPCODE(mul, BinaryNode, 0, 0)
185  OPCODE(div, BinaryNode, OPCODEMAYTHROWEXCEPTION, 0)
186  OPCODE(rem, BinaryNode, OPCODEMAYTHROWEXCEPTION, 0)
187  OPCODE(ashr, BinaryNode, 0, 0)
188  OPCODE(lshr, BinaryNode, 0, 0)
189  OPCODE(shl, BinaryNode, 0, 0)
190  OPCODE(ror, BinaryNode, 0, 0)
191  OPCODE(max, BinaryNode, 0, 0)
192  OPCODE(min, BinaryNode, 0, 0)
193  OPCODE(band, BinaryNode, 0, 0)
194  OPCODE(bior, BinaryNode, 0, 0)
195  OPCODE(bxor, BinaryNode, 0, 0)
196  OPCODE(CG_array_elem_add, BinaryNode, 0, 0)
197  OPCODE(eq, CompareNode, OPCODEISCOMPARE, 8)
198  OPCODE(ge, CompareNode, OPCODEISCOMPARE, 8)
199  OPCODE(gt, CompareNode, OPCODEISCOMPARE, 8)
200  OPCODE(le, CompareNode, OPCODEISCOMPARE, 8)
201  OPCODE(lt, CompareNode, OPCODEISCOMPARE, 8)
202  OPCODE(ne, CompareNode, OPCODEISCOMPARE, 8)
203  OPCODE(cmp, CompareNode, OPCODEISCOMPARE, 8)
204  OPCODE(cmpl, CompareNode, OPCODEISCOMPARE, 8)
205  OPCODE(cmpg, CompareNode, OPCODEISCOMPARE, 8)
206  OPCODE(land, BinaryNode, 0, 0)
207  OPCODE(lior, BinaryNode, 0, 0)
208  OPCODE(cand, BinaryNode, OPCODENOTMMPL, 0)
209  OPCODE(cior, BinaryNode, OPCODENOTMMPL, 0)
210  // ternary expression opcodes
211  OPCODE(select, TernaryNode, 0, 0)
212  // N-ary expression opcodes
213  OPCODE(intrinsicop, IntrinsicopNode, OPCODEISVARSIZE, 8)
214  OPCODE(intrinsicopwithtype, IntrinsicopNode, OPCODEISVARSIZE, 12)
215  // Other expression opcodes
216  OPCODE(extractbits, ExtractbitsNode, 0, 8)
217  OPCODE(depositbits, DepositbitsNode, 0, 8)
218  // storage access
219  OPCODE(iassignpcoff, IassignPCoffNode, OPCODEISSTMT, 0)
220  OPCODE(ireadpcoff, IreadPCoffNode, 0, 0)
221  // barrier
222  OPCODE(checkpoint, StmtNode, OPCODEISSTMT, 0)
223  // leaf node
224  OPCODE(addroffpc, AddroffPCNode, 0, 0)
225  OPCODE(igoto, UnaryStmtNode, OPCODEISSTMT, 0)
226  OPCODE(asm, AsmNode, OPCODEISSTMT | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALLASSIGNED, 0)
227  OPCODE(dreadoff, dreadoffNode, OPCODEHASSSAUSE, 12)
228  OPCODE(addrofoff, addrofoffNode, 0, 12)
229  OPCODE(dassignoff, DassignoffNode, (OPCODEISSTMT | OPCODEHASSSADEF), 8)
230  OPCODE(iassignspoff, IassignFPoffNode, OPCODEISSTMT, 8)
231  OPCODE(blkassignoff, BlkassignoffNode, OPCODEISSTMT, 8)
232  OPCODE(icallproto, IcallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL), 8)
233  OPCODE(icallprotoassigned, IcallNode, (OPCODEISSTMT | OPCODEISVARSIZE | OPCODEHASSSAUSE | OPCODEHASSSADEF | OPCODEISCALL | OPCODEISCALLASSIGNED), 8)
234