• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2024 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 #include "ir_static.h"
17 
18 #include "datatype.h"
19 #include "libabckit/include/c/ir_core.h"
20 #include "libabckit/include/c/statuses.h"
21 #include "libabckit/src/adapter_static/helpers_static.h"
22 
23 #include "libabckit/include/c/metadata_core.h"
24 #include "libabckit/src/statuses_impl.h"
25 #include "libabckit/src/macros.h"
26 #include "libabckit/src/metadata_inspect_impl.h"
27 #include "libabckit/src/helpers_common.h"
28 #include "libabckit/src/ir_impl.h"
29 #include "libabckit/src/wrappers/pandasm_wrapper.h"
30 
31 #include "static_core/assembler/mangling.h"
32 
33 #include "static_core/compiler/optimizer/ir/graph.h"
34 #include "static_core/compiler/optimizer/ir/basicblock.h"
35 #include "static_core/compiler/optimizer/ir/inst.h"
36 #include "static_core/compiler/optimizer/analysis/loop_analyzer.h"
37 
38 #include <cstdarg>
39 #include <cstdint>
40 #include <limits>
41 
42 namespace {
43 constexpr uint32_t IC_SLOT_VALUE = 0xF;
44 }  // namespace
45 
46 namespace libabckit {
47 
48 // NOLINTNEXTLINE(google-build-using-namespace)
49 using namespace ark;
50 
IcreateDynCallthis0Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)51 AbckitInst *IcreateDynCallthis0Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
52 {
53     LIBABCKIT_LOG_FUNC;
54     // CC-OFFNXT(WordsTool.190) sensitive word conflict
55     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_CALLTHIS0_IMM8_V8);
56 }
57 
IcreateDynCallthis1Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,AbckitInst * input1)58 AbckitInst *IcreateDynCallthis1Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1)
59 {
60     LIBABCKIT_LOG_FUNC;
61     // CC-OFFNXT(WordsTool.190) sensitive word conflict
62     return CreateDynInst(graph, acc, input0, input1, compiler::IntrinsicInst::IntrinsicId::DYN_CALLTHIS1_IMM8_V8_V8);
63 }
64 
IcreateDynCallarg0Static(AbckitGraph * graph,AbckitInst * acc)65 AbckitInst *IcreateDynCallarg0Static(AbckitGraph *graph, AbckitInst *acc)
66 {
67     LIBABCKIT_LOG_FUNC;
68     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_CALLARG0_IMM8);
69 }
70 
IcreateDynCallarg1Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)71 AbckitInst *IcreateDynCallarg1Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
72 {
73     LIBABCKIT_LOG_FUNC;
74     // CC-OFFNXT(WordsTool.190) sensitive word conflict
75     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_CALLARG1_IMM8_V8);
76 }
77 
IcreateDynTryldglobalbynameStatic(AbckitGraph * graph,AbckitString * string)78 AbckitInst *IcreateDynTryldglobalbynameStatic(AbckitGraph *graph, AbckitString *string)
79 {
80     LIBABCKIT_LOG_FUNC;
81     return CreateDynInst(graph, GetStringOffset(graph, string),
82                          compiler::IntrinsicInst::IntrinsicId::DYN_TRYLDGLOBALBYNAME_IMM16_ID16);
83 }
84 
IcreateDynLdobjbynameStatic(AbckitGraph * graph,AbckitInst * acc,AbckitString * string)85 AbckitInst *IcreateDynLdobjbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string)
86 {
87     LIBABCKIT_LOG_FUNC;
88     return CreateDynInst(graph, acc, GetStringOffset(graph, string),
89                          compiler::IntrinsicInst::IntrinsicId::DYN_LDOBJBYNAME_IMM8_ID16);
90 }
91 
IcreateDynNewobjrangeStatic(AbckitGraph * graph,size_t argCount,std::va_list args)92 AbckitInst *IcreateDynNewobjrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args)
93 {
94     LIBABCKIT_LOG_FUNC;
95     auto argCountBitSize = GetBitLengthUnsigned(argCount);
96     if (argCountBitSize > AbckitBitImmSize::BITSIZE_8) {
97         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
98         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
99         return nullptr;
100     }
101     // CC-OFFNXT(WordsTool.190) sensitive word conflict
102     return CreateDynInst(graph, argCount, args, compiler::IntrinsicInst::IntrinsicId::DYN_NEWOBJRANGE_IMM16_IMM8_V8);
103 }
104 
IcreateDynDefinefuncStatic(AbckitGraph * graph,AbckitCoreFunction * function,uint64_t imm0)105 AbckitInst *IcreateDynDefinefuncStatic(AbckitGraph *graph, AbckitCoreFunction *function, uint64_t imm0)
106 {
107     LIBABCKIT_LOG_FUNC;
108     auto imm0BitSize = GetBitLengthUnsigned(imm0);
109     if (imm0BitSize > AbckitBitImmSize::BITSIZE_8) {
110         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
111         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
112         return nullptr;
113     }
114     return CreateDynInst(graph, GetMethodOffset(graph, function), imm0,
115                          compiler::IntrinsicInst::IntrinsicId::DYN_DEFINEFUNC_IMM16_ID16_IMM8);
116 }
117 
IcreateDynNegStatic(AbckitGraph * graph,AbckitInst * acc)118 AbckitInst *IcreateDynNegStatic(AbckitGraph *graph, AbckitInst *acc)
119 {
120     LIBABCKIT_LOG_FUNC;
121     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_NEG_IMM8);
122 }
123 
IcreateDynAdd2Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)124 AbckitInst *IcreateDynAdd2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
125 {
126     LIBABCKIT_LOG_FUNC;
127     // CC-OFFNXT(WordsTool.190) sensitive word conflict
128     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_ADD2_IMM8_V8);
129 }
130 
IcreateDynSub2Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)131 AbckitInst *IcreateDynSub2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
132 {
133     LIBABCKIT_LOG_FUNC;
134     // CC-OFFNXT(WordsTool.190) sensitive word conflict
135     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_SUB2_IMM8_V8);
136 }
137 
IcreateDynMul2Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)138 AbckitInst *IcreateDynMul2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
139 {
140     LIBABCKIT_LOG_FUNC;
141     // CC-OFFNXT(WordsTool.190) sensitive word conflict
142     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_MUL2_IMM8_V8);
143 }
144 
IcreateDynDiv2Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)145 AbckitInst *IcreateDynDiv2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
146 {
147     LIBABCKIT_LOG_FUNC;
148     // CC-OFFNXT(WordsTool.190) sensitive word conflict
149     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_DIV2_IMM8_V8);
150 }
151 
IcreateDynMod2Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)152 AbckitInst *IcreateDynMod2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
153 {
154     LIBABCKIT_LOG_FUNC;
155     // CC-OFFNXT(WordsTool.190) sensitive word conflict
156     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_MOD2_IMM8_V8);
157 }
158 
IcreateDynExpStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)159 AbckitInst *IcreateDynExpStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
160 {
161     LIBABCKIT_LOG_FUNC;
162     // CC-OFFNXT(WordsTool.190) sensitive word conflict
163     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_EXP_IMM8_V8);
164 }
165 
IcreateDynShl2Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)166 AbckitInst *IcreateDynShl2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
167 {
168     LIBABCKIT_LOG_FUNC;
169     // CC-OFFNXT(WordsTool.190) sensitive word conflict
170     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_SHL2_IMM8_V8);
171 }
172 
IcreateDynShr2Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)173 AbckitInst *IcreateDynShr2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
174 {
175     LIBABCKIT_LOG_FUNC;
176     // CC-OFFNXT(WordsTool.190) sensitive word conflict
177     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_SHR2_IMM8_V8);
178 }
179 
IcreateDynAshr2Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)180 AbckitInst *IcreateDynAshr2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
181 {
182     LIBABCKIT_LOG_FUNC;
183     // CC-OFFNXT(WordsTool.190) sensitive word conflict
184     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_ASHR2_IMM8_V8);
185 }
186 
IcreateDynNotStatic(AbckitGraph * graph,AbckitInst * acc)187 AbckitInst *IcreateDynNotStatic(AbckitGraph *graph, AbckitInst *acc)
188 {
189     LIBABCKIT_LOG_FUNC;
190     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_NOT_IMM8);
191 }
192 
IcreateDynOr2Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)193 AbckitInst *IcreateDynOr2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
194 {
195     LIBABCKIT_LOG_FUNC;
196     // CC-OFFNXT(WordsTool.190) sensitive word conflict
197     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_OR2_IMM8_V8);
198 }
199 
IcreateDynXor2Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)200 AbckitInst *IcreateDynXor2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
201 {
202     LIBABCKIT_LOG_FUNC;
203     // CC-OFFNXT(WordsTool.190) sensitive word conflict
204     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_XOR2_IMM8_V8);
205 }
206 
IcreateDynAnd2Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)207 AbckitInst *IcreateDynAnd2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
208 {
209     LIBABCKIT_LOG_FUNC;
210     // CC-OFFNXT(WordsTool.190) sensitive word conflict
211     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_AND2_IMM8_V8);
212 }
213 
IcreateDynIncStatic(AbckitGraph * graph,AbckitInst * acc)214 AbckitInst *IcreateDynIncStatic(AbckitGraph *graph, AbckitInst *acc)
215 {
216     LIBABCKIT_LOG_FUNC;
217     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_INC_IMM8);
218 }
219 
IcreateDynDecStatic(AbckitGraph * graph,AbckitInst * acc)220 AbckitInst *IcreateDynDecStatic(AbckitGraph *graph, AbckitInst *acc)
221 {
222     LIBABCKIT_LOG_FUNC;
223     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_DEC_IMM8);
224 }
225 
IcreateDynEqStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)226 AbckitInst *IcreateDynEqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
227 {
228     LIBABCKIT_LOG_FUNC;
229     // CC-OFFNXT(WordsTool.190) sensitive word conflict
230     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_EQ_IMM8_V8);
231 }
232 
IcreateDynNoteqStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)233 AbckitInst *IcreateDynNoteqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
234 {
235     LIBABCKIT_LOG_FUNC;
236     // CC-OFFNXT(WordsTool.190) sensitive word conflict
237     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_NOTEQ_IMM8_V8);
238 }
239 
IcreateDynLessStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)240 AbckitInst *IcreateDynLessStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
241 {
242     LIBABCKIT_LOG_FUNC;
243     // CC-OFFNXT(WordsTool.190) sensitive word conflict
244     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_LESS_IMM8_V8);
245 }
246 
IcreateDynLesseqStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)247 AbckitInst *IcreateDynLesseqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
248 {
249     LIBABCKIT_LOG_FUNC;
250     // CC-OFFNXT(WordsTool.190) sensitive word conflict
251     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_LESSEQ_IMM8_V8);
252 }
253 
IcreateDynGreaterStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)254 AbckitInst *IcreateDynGreaterStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
255 {
256     LIBABCKIT_LOG_FUNC;
257     // CC-OFFNXT(WordsTool.190) sensitive word conflict
258     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_GREATER_IMM8_V8);
259 }
260 
IcreateDynGreatereqStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)261 AbckitInst *IcreateDynGreatereqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
262 {
263     LIBABCKIT_LOG_FUNC;
264     // CC-OFFNXT(WordsTool.190) sensitive word conflict
265     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_GREATEREQ_IMM8_V8);
266 }
267 
IcreateDynStrictnoteqStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)268 AbckitInst *IcreateDynStrictnoteqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
269 {
270     LIBABCKIT_LOG_FUNC;
271     // CC-OFFNXT(WordsTool.190) sensitive word conflict
272     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_STRICTNOTEQ_IMM8_V8);
273 }
274 
IcreateDynStricteqStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)275 AbckitInst *IcreateDynStricteqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
276 {
277     LIBABCKIT_LOG_FUNC;
278     // CC-OFFNXT(WordsTool.190) sensitive word conflict
279     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_STRICTEQ_IMM8_V8);
280 }
281 
IcreateDynIstrueStatic(AbckitGraph * graph,AbckitInst * acc)282 AbckitInst *IcreateDynIstrueStatic(AbckitGraph *graph, AbckitInst *acc)
283 {
284     LIBABCKIT_LOG_FUNC;
285     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_ISTRUE);
286 }
287 
IcreateDynIsfalseStatic(AbckitGraph * graph,AbckitInst * acc)288 AbckitInst *IcreateDynIsfalseStatic(AbckitGraph *graph, AbckitInst *acc)
289 {
290     LIBABCKIT_LOG_FUNC;
291     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_ISFALSE);
292 }
293 
IcreateDynTonumberStatic(AbckitGraph * graph,AbckitInst * acc)294 AbckitInst *IcreateDynTonumberStatic(AbckitGraph *graph, AbckitInst *acc)
295 {
296     LIBABCKIT_LOG_FUNC;
297     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_TONUMBER_IMM8);
298 }
299 
IcreateDynTonumericStatic(AbckitGraph * graph,AbckitInst * acc)300 AbckitInst *IcreateDynTonumericStatic(AbckitGraph *graph, AbckitInst *acc)
301 {
302     LIBABCKIT_LOG_FUNC;
303     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_TONUMERIC_IMM8);
304 }
305 
IcreateDynThrowStatic(AbckitGraph * graph,AbckitInst * acc)306 AbckitInst *IcreateDynThrowStatic(AbckitGraph *graph, AbckitInst *acc)
307 {
308     LIBABCKIT_LOG_FUNC;
309     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_THROW_PREF_NONE);
310 }
311 
IcreateDynThrowNotexistsStatic(AbckitGraph * graph)312 AbckitInst *IcreateDynThrowNotexistsStatic(AbckitGraph *graph)
313 {
314     LIBABCKIT_LOG_FUNC;
315     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_THROW_NOTEXISTS_PREF_NONE);
316 }
317 
IcreateDynThrowPatternnoncoercibleStatic(AbckitGraph * graph)318 AbckitInst *IcreateDynThrowPatternnoncoercibleStatic(AbckitGraph *graph)
319 {
320     LIBABCKIT_LOG_FUNC;
321     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_THROW_PATTERNNONCOERCIBLE_PREF_NONE);
322 }
323 
IcreateDynThrowDeletesuperpropertyStatic(AbckitGraph * graph)324 AbckitInst *IcreateDynThrowDeletesuperpropertyStatic(AbckitGraph *graph)
325 {
326     LIBABCKIT_LOG_FUNC;
327     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_THROW_DELETESUPERPROPERTY_PREF_NONE);
328 }
329 
IcreateDynThrowConstassignmentStatic(AbckitGraph * graph,AbckitInst * input0)330 AbckitInst *IcreateDynThrowConstassignmentStatic(AbckitGraph *graph, AbckitInst *input0)
331 {
332     LIBABCKIT_LOG_FUNC;
333     // CC-OFFNXT(WordsTool.190) sensitive word conflict
334     return CreateDynInst(graph, input0, compiler::IntrinsicInst::IntrinsicId::DYN_THROW_CONSTASSIGNMENT_PREF_V8);
335 }
336 
IcreateDynThrowIfnotobjectStatic(AbckitGraph * graph,AbckitInst * input0)337 AbckitInst *IcreateDynThrowIfnotobjectStatic(AbckitGraph *graph, AbckitInst *input0)
338 {
339     LIBABCKIT_LOG_FUNC;
340     // CC-OFFNXT(WordsTool.190) sensitive word conflict
341     return CreateDynInst(graph, input0, compiler::IntrinsicInst::IntrinsicId::DYN_THROW_IFNOTOBJECT_PREF_V8);
342 }
343 
IcreateDynThrowUndefinedifholeStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)344 AbckitInst *IcreateDynThrowUndefinedifholeStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
345 {
346     LIBABCKIT_LOG_FUNC;
347     // CC-OFFNXT(WordsTool.190) sensitive word conflict
348     return CreateDynInst(graph, input0, input1,
349                          compiler::IntrinsicInst::IntrinsicId::DYN_THROW_UNDEFINEDIFHOLE_PREF_V8_V8);
350 }
351 
IcreateDynThrowIfsupernotcorrectcallStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0)352 AbckitInst *IcreateDynThrowIfsupernotcorrectcallStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0)
353 {
354     LIBABCKIT_LOG_FUNC;
355     AbckitInst *inst {nullptr};
356     auto imm0BitSize = GetBitLengthUnsigned(imm0);
357     if (imm0BitSize <= AbckitBitImmSize::BITSIZE_8) {
358         inst = CreateDynInst(graph, acc, imm0,
359                              compiler::IntrinsicInst::IntrinsicId::DYN_THROW_IFSUPERNOTCORRECTCALL_PREF_IMM8, false);
360     } else if (imm0BitSize <= AbckitBitImmSize::BITSIZE_16) {
361         inst = CreateDynInst(graph, acc, imm0,
362                              compiler::IntrinsicInst::IntrinsicId::DYN_THROW_IFSUPERNOTCORRECTCALL_PREF_IMM16, false);
363     } else {
364         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
365         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
366     }
367     return inst;
368 }
369 
IcreateDynThrowUndefinedifholewithnameStatic(AbckitGraph * graph,AbckitInst * acc,AbckitString * string)370 AbckitInst *IcreateDynThrowUndefinedifholewithnameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string)
371 {
372     LIBABCKIT_LOG_FUNC;
373     return CreateDynInst(graph, acc, GetStringOffset(graph, string),
374                          compiler::IntrinsicInst::IntrinsicId::DYN_THROW_UNDEFINEDIFHOLEWITHNAME_PREF_ID16, false);
375 }
376 
IcreateDynCallruntimeCreateprivatepropertyStatic(AbckitGraph * graph,uint64_t imm0,AbckitLiteralArray * literalArray)377 AbckitInst *IcreateDynCallruntimeCreateprivatepropertyStatic(AbckitGraph *graph, uint64_t imm0,
378                                                              AbckitLiteralArray *literalArray)
379 {
380     LIBABCKIT_LOG_FUNC;
381     auto imm0BitSize = GetBitLengthUnsigned(imm0);
382     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
383         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
384         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
385         return nullptr;
386     }
387     return CreateDynInst(graph, imm0, GetLiteralArrayOffset(graph, literalArray),
388                          compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_CREATEPRIVATEPROPERTY_PREF_IMM16_ID16,
389                          false);
390 }
391 
IcreateDynDefineclasswithbufferStatic(AbckitGraph * graph,AbckitCoreFunction * function,AbckitLiteralArray * literalArray,uint64_t imm0,AbckitInst * input0)392 AbckitInst *IcreateDynDefineclasswithbufferStatic(AbckitGraph *graph, AbckitCoreFunction *function,
393                                                   AbckitLiteralArray *literalArray, uint64_t imm0, AbckitInst *input0)
394 {
395     LIBABCKIT_LOG_FUNC;
396     auto imm0BitSize = GetBitLengthUnsigned(imm0);
397     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
398         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
399         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
400         return nullptr;
401     }
402     // CC-OFFNXT(WordsTool.190) sensitive word conflict
403     return CreateDynInst(graph, GetMethodOffset(graph, function), GetLiteralArrayOffset(graph, literalArray), imm0,
404                          input0,
405                          compiler::IntrinsicInst::IntrinsicId::DYN_DEFINECLASSWITHBUFFER_IMM16_ID16_ID16_IMM16_V8);
406     ;
407 }
408 
IcreateDynCallruntimeDefinesendableclassStatic(AbckitGraph * graph,AbckitCoreFunction * function,AbckitLiteralArray * literalArray,uint64_t imm0,AbckitInst * input0)409 AbckitInst *IcreateDynCallruntimeDefinesendableclassStatic(AbckitGraph *graph, AbckitCoreFunction *function,
410                                                            AbckitLiteralArray *literalArray, uint64_t imm0,
411                                                            AbckitInst *input0)
412 {
413     LIBABCKIT_LOG_FUNC;
414     auto imm0BitSize = GetBitLengthUnsigned(imm0);
415     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
416         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
417         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
418         return nullptr;
419     }
420     // CC-OFFNXT(WordsTool.190) sensitive word conflict
421     return CreateDynInst(
422         graph, GetMethodOffset(graph, function), GetLiteralArrayOffset(graph, literalArray), imm0, input0,
423         compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_DEFINESENDABLECLASS_PREF_IMM16_ID16_ID16_IMM16_V8);
424 }
425 
IcreateDynLdnanStatic(AbckitGraph * graph)426 AbckitInst *IcreateDynLdnanStatic(AbckitGraph *graph)
427 {
428     LIBABCKIT_LOG_FUNC;
429     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_LDNAN);
430 }
431 
IcreateDynLdinfinityStatic(AbckitGraph * graph)432 AbckitInst *IcreateDynLdinfinityStatic(AbckitGraph *graph)
433 {
434     LIBABCKIT_LOG_FUNC;
435     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_LDINFINITY);
436 }
437 
IcreateDynLdundefinedStatic(AbckitGraph * graph)438 AbckitInst *IcreateDynLdundefinedStatic(AbckitGraph *graph)
439 {
440     LIBABCKIT_LOG_FUNC;
441     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_LDUNDEFINED);
442 }
443 
IcreateDynLdnullStatic(AbckitGraph * graph)444 AbckitInst *IcreateDynLdnullStatic(AbckitGraph *graph)
445 {
446     LIBABCKIT_LOG_FUNC;
447     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_LDNULL);
448 }
449 
IcreateDynLdsymbolStatic(AbckitGraph * graph)450 AbckitInst *IcreateDynLdsymbolStatic(AbckitGraph *graph)
451 {
452     LIBABCKIT_LOG_FUNC;
453     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_LDSYMBOL);
454 }
455 
IcreateDynLdglobalStatic(AbckitGraph * graph)456 AbckitInst *IcreateDynLdglobalStatic(AbckitGraph *graph)
457 {
458     LIBABCKIT_LOG_FUNC;
459     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_LDGLOBAL);
460 }
461 
IcreateDynLdtrueStatic(AbckitGraph * graph)462 AbckitInst *IcreateDynLdtrueStatic(AbckitGraph *graph)
463 {
464     LIBABCKIT_LOG_FUNC;
465     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_LDTRUE);
466 }
467 
IcreateDynLdfalseStatic(AbckitGraph * graph)468 AbckitInst *IcreateDynLdfalseStatic(AbckitGraph *graph)
469 {
470     LIBABCKIT_LOG_FUNC;
471     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_LDFALSE);
472 }
473 
IcreateDynLdholeStatic(AbckitGraph * graph)474 AbckitInst *IcreateDynLdholeStatic(AbckitGraph *graph)
475 {
476     LIBABCKIT_LOG_FUNC;
477     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_LDHOLE);
478 }
479 
IcreateDynLdfunctionStatic(AbckitGraph * graph)480 AbckitInst *IcreateDynLdfunctionStatic(AbckitGraph *graph)
481 {
482     LIBABCKIT_LOG_FUNC;
483     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_LDFUNCTION);
484 }
485 
IcreateDynLdnewtargetStatic(AbckitGraph * graph)486 AbckitInst *IcreateDynLdnewtargetStatic(AbckitGraph *graph)
487 {
488     LIBABCKIT_LOG_FUNC;
489     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_LDNEWTARGET);
490 }
491 
IcreateDynLdthisStatic(AbckitGraph * graph)492 AbckitInst *IcreateDynLdthisStatic(AbckitGraph *graph)
493 {
494     LIBABCKIT_LOG_FUNC;
495     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_LDTHIS);
496 }
497 
IcreateDynTypeofStatic(AbckitGraph * graph,AbckitInst * acc)498 AbckitInst *IcreateDynTypeofStatic(AbckitGraph *graph, AbckitInst *acc)
499 {
500     LIBABCKIT_LOG_FUNC;
501     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_TYPEOF_IMM16);
502 }
503 
IcreateDynIsinStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)504 AbckitInst *IcreateDynIsinStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
505 {
506     LIBABCKIT_LOG_FUNC;
507     // CC-OFFNXT(WordsTool.190) sensitive word conflict
508     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_ISIN_IMM8_V8);
509 }
510 
IcreateDynInstanceofStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)511 AbckitInst *IcreateDynInstanceofStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
512 {
513     LIBABCKIT_LOG_FUNC;
514     // CC-OFFNXT(WordsTool.190) sensitive word conflict
515     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_INSTANCEOF_IMM8_V8);
516 }
517 
IcreateDynReturnStatic(AbckitGraph * graph,AbckitInst * acc)518 AbckitInst *IcreateDynReturnStatic(AbckitGraph *graph, AbckitInst *acc)
519 {
520     LIBABCKIT_LOG_FUNC;
521     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_RETURN);
522 }
523 
IcreateDynReturnundefinedStatic(AbckitGraph * graph)524 AbckitInst *IcreateDynReturnundefinedStatic(AbckitGraph *graph)
525 {
526     LIBABCKIT_LOG_FUNC;
527     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_RETURNUNDEFINED);
528 }
529 
IcreateDynStownbynameStatic(AbckitGraph * graph,AbckitInst * acc,AbckitString * string,AbckitInst * input0)530 AbckitInst *IcreateDynStownbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string, AbckitInst *input0)
531 {
532     LIBABCKIT_LOG_FUNC;
533     // CC-OFFNXT(WordsTool.190) sensitive word conflict
534     return CreateDynInst(graph, acc, input0, GetStringOffset(graph, string),
535                          compiler::IntrinsicInst::IntrinsicId::DYN_STOWNBYNAME_IMM16_ID16_V8);
536 }
537 
IcreateDynStownbyvalueStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,AbckitInst * input1)538 AbckitInst *IcreateDynStownbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1)
539 {
540     LIBABCKIT_LOG_FUNC;
541     // CC-OFFNXT(WordsTool.190) sensitive word conflict
542     return CreateDynInst(graph, acc, input0, input1,
543                          compiler::IntrinsicInst::IntrinsicId::DYN_STOWNBYVALUE_IMM16_V8_V8);
544 }
545 
IcreateDynStownbyindexStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,uint64_t imm0)546 AbckitInst *IcreateDynStownbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0)
547 {
548     LIBABCKIT_LOG_FUNC;
549     auto imm0BitSize = GetBitLengthUnsigned(imm0);
550     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
551         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
552         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
553         return nullptr;
554     }
555     // CC-OFFNXT(WordsTool.190) sensitive word conflict
556     return CreateDynInst(graph, acc, input0, imm0,
557                          compiler::IntrinsicInst::IntrinsicId::DYN_STOWNBYINDEX_IMM16_V8_IMM16);
558 }
559 
IcreateDynWideStownbyindexStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,uint64_t imm0)560 AbckitInst *IcreateDynWideStownbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0)
561 {
562     LIBABCKIT_LOG_FUNC;
563     auto imm0BitSize = GetBitLengthUnsigned(imm0);
564     if (imm0BitSize > AbckitBitImmSize::BITSIZE_32) {
565         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
566         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
567         return nullptr;
568     }
569     // CC-OFFNXT(WordsTool.190) sensitive word conflict
570     return CreateDynInst(graph, acc, input0, imm0,
571                          compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_STOWNBYINDEX_PREF_V8_IMM32, false);
572 }
573 
IcreateDynStownbyvaluewithnamesetStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,AbckitInst * input1)574 AbckitInst *IcreateDynStownbyvaluewithnamesetStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0,
575                                                     AbckitInst *input1)
576 {
577     LIBABCKIT_LOG_FUNC;
578     // CC-OFFNXT(WordsTool.190) sensitive word conflict
579     return CreateDynInst(graph, acc, input0, input1,
580                          compiler::IntrinsicInst::IntrinsicId::DYN_STOWNBYVALUEWITHNAMESET_IMM16_V8_V8);
581 }
582 
IcreateDynStownbynamewithnamesetStatic(AbckitGraph * graph,AbckitInst * acc,AbckitString * string,AbckitInst * input0)583 AbckitInst *IcreateDynStownbynamewithnamesetStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string,
584                                                    AbckitInst *input0)
585 {
586     LIBABCKIT_LOG_FUNC;
587     // CC-OFFNXT(WordsTool.190) sensitive word conflict
588     return CreateDynInst(graph, acc, input0, GetStringOffset(graph, string),
589                          compiler::IntrinsicInst::IntrinsicId::DYN_STOWNBYNAMEWITHNAMESET_IMM16_ID16_V8);
590 }
591 
IcreateDynCreateemptyobjectStatic(AbckitGraph * graph)592 AbckitInst *IcreateDynCreateemptyobjectStatic(AbckitGraph *graph)
593 {
594     LIBABCKIT_LOG_FUNC;
595     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_CREATEEMPTYOBJECT);
596 }
597 
IcreateDynStobjbyvalueStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,AbckitInst * input1)598 AbckitInst *IcreateDynStobjbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1)
599 {
600     LIBABCKIT_LOG_FUNC;
601     // CC-OFFNXT(WordsTool.190) sensitive word conflict
602     return CreateDynInst(graph, acc, input0, input1,
603                          compiler::IntrinsicInst::IntrinsicId::DYN_STOBJBYVALUE_IMM16_V8_V8);
604 }
605 
IcreateDynStobjbyindexStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,uint64_t imm0)606 AbckitInst *IcreateDynStobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0)
607 {
608     LIBABCKIT_LOG_FUNC;
609     auto imm0BitSize = GetBitLengthUnsigned(imm0);
610     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
611         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
612         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
613         return nullptr;
614     }
615     return CreateDynInst(graph, acc, input0, imm0,
616                          compiler::IntrinsicInst::IntrinsicId::DYN_STOBJBYINDEX_IMM16_V8_IMM16);
617 }
618 
IcreateDynWideStobjbyindexStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,uint64_t imm0)619 AbckitInst *IcreateDynWideStobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0)
620 {
621     LIBABCKIT_LOG_FUNC;
622     auto imm0BitSize = GetBitLengthUnsigned(imm0);
623     if (imm0BitSize > AbckitBitImmSize::BITSIZE_32) {
624         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
625         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
626         return nullptr;
627     }
628     // CC-OFFNXT(WordsTool.190) sensitive word conflict
629     return CreateDynInst(graph, acc, input0, imm0,
630                          compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_STOBJBYINDEX_PREF_V8_IMM32, false);
631 }
632 
IcreateDynStobjbynameStatic(AbckitGraph * graph,AbckitInst * acc,AbckitString * string,AbckitInst * input0)633 AbckitInst *IcreateDynStobjbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string, AbckitInst *input0)
634 {
635     LIBABCKIT_LOG_FUNC;
636     // CC-OFFNXT(WordsTool.190) sensitive word conflict
637     return CreateDynInst(graph, acc, input0, GetStringOffset(graph, string),
638                          compiler::IntrinsicInst::IntrinsicId::DYN_STOBJBYNAME_IMM16_ID16_V8);
639 }
640 
IcreateDynPoplexenvStatic(AbckitGraph * graph)641 AbckitInst *IcreateDynPoplexenvStatic(AbckitGraph *graph)
642 {
643     LIBABCKIT_LOG_FUNC;
644     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_POPLEXENV, false);
645 }
646 
IcreateDynGetunmappedargsStatic(AbckitGraph * graph)647 AbckitInst *IcreateDynGetunmappedargsStatic(AbckitGraph *graph)
648 {
649     LIBABCKIT_LOG_FUNC;
650     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_GETUNMAPPEDARGS, false);
651 }
652 
IcreateDynAsyncfunctionenterStatic(AbckitGraph * graph)653 AbckitInst *IcreateDynAsyncfunctionenterStatic(AbckitGraph *graph)
654 {
655     LIBABCKIT_LOG_FUNC;
656     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_ASYNCFUNCTIONENTER, false);
657 }
658 
IcreateDynDebuggerStatic(AbckitGraph * graph)659 AbckitInst *IcreateDynDebuggerStatic(AbckitGraph *graph)
660 {
661     LIBABCKIT_LOG_FUNC;
662     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_DEBUGGER, false);
663 }
664 
IcreateDynCreateemptyarrayStatic(AbckitGraph * graph)665 AbckitInst *IcreateDynCreateemptyarrayStatic(AbckitGraph *graph)
666 {
667     LIBABCKIT_LOG_FUNC;
668     return CreateDynInst(graph, compiler::IntrinsicInst::IntrinsicId::DYN_CREATEEMPTYARRAY_IMM16);
669 }
670 
IcreateDynGetpropiteratorStatic(AbckitGraph * graph,AbckitInst * acc)671 AbckitInst *IcreateDynGetpropiteratorStatic(AbckitGraph *graph, AbckitInst *acc)
672 {
673     LIBABCKIT_LOG_FUNC;
674     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_GETPROPITERATOR);
675 }
676 
IcreateDynGetiteratorStatic(AbckitGraph * graph,AbckitInst * acc)677 AbckitInst *IcreateDynGetiteratorStatic(AbckitGraph *graph, AbckitInst *acc)
678 {
679     LIBABCKIT_LOG_FUNC;
680     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_GETITERATOR_IMM16);
681 }
682 
IcreateDynGetasynciteratorStatic(AbckitGraph * graph,AbckitInst * acc)683 AbckitInst *IcreateDynGetasynciteratorStatic(AbckitGraph *graph, AbckitInst *acc)
684 {
685     LIBABCKIT_LOG_FUNC;
686     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_GETASYNCITERATOR_IMM8);
687 }
688 
IcreateDynCreategeneratorobjStatic(AbckitGraph * graph,AbckitInst * input0)689 AbckitInst *IcreateDynCreategeneratorobjStatic(AbckitGraph *graph, AbckitInst *input0)
690 {
691     LIBABCKIT_LOG_FUNC;
692     // CC-OFFNXT(WordsTool.190) sensitive word conflict
693     return CreateDynInst(graph, input0, compiler::IntrinsicInst::IntrinsicId::DYN_CREATEGENERATOROBJ_V8);
694 }
695 
IcreateDynCreateasyncgeneratorobjStatic(AbckitGraph * graph,AbckitInst * input0)696 AbckitInst *IcreateDynCreateasyncgeneratorobjStatic(AbckitGraph *graph, AbckitInst *input0)
697 {
698     LIBABCKIT_LOG_FUNC;
699     // CC-OFFNXT(WordsTool.190) sensitive word conflict
700     return CreateDynInst(graph, input0, compiler::IntrinsicInst::IntrinsicId::DYN_CREATEASYNCGENERATOROBJ_V8);
701 }
702 
IcreateDynCallruntimeNotifyconcurrentresultStatic(AbckitGraph * graph,AbckitInst * acc)703 AbckitInst *IcreateDynCallruntimeNotifyconcurrentresultStatic(AbckitGraph *graph, AbckitInst *acc)
704 {
705     LIBABCKIT_LOG_FUNC;
706     return CreateDynInst(graph, acc,
707                          compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_NOTIFYCONCURRENTRESULT_PREF_NONE);
708 }
709 
IcreateDynCallruntimeTopropertykeyStatic(AbckitGraph * graph,AbckitInst * acc)710 AbckitInst *IcreateDynCallruntimeTopropertykeyStatic(AbckitGraph *graph, AbckitInst *acc)
711 {
712     LIBABCKIT_LOG_FUNC;
713     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_TOPROPERTYKEY_PREF_NONE);
714 }
715 
IcreateDynResumegeneratorStatic(AbckitGraph * graph,AbckitInst * acc)716 AbckitInst *IcreateDynResumegeneratorStatic(AbckitGraph *graph, AbckitInst *acc)
717 {
718     LIBABCKIT_LOG_FUNC;
719     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_RESUMEGENERATOR);
720 }
721 
IcreateDynGetresumemodeStatic(AbckitGraph * graph,AbckitInst * acc)722 AbckitInst *IcreateDynGetresumemodeStatic(AbckitGraph *graph, AbckitInst *acc)
723 {
724     LIBABCKIT_LOG_FUNC;
725     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_GETRESUMEMODE);
726 }
727 
IcreateDynGettemplateobjectStatic(AbckitGraph * graph,AbckitInst * acc)728 AbckitInst *IcreateDynGettemplateobjectStatic(AbckitGraph *graph, AbckitInst *acc)
729 {
730     LIBABCKIT_LOG_FUNC;
731     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_GETTEMPLATEOBJECT_IMM16);
732 }
733 
IcreateDynGetnextpropnameStatic(AbckitGraph * graph,AbckitInst * input0)734 AbckitInst *IcreateDynGetnextpropnameStatic(AbckitGraph *graph, AbckitInst *input0)
735 {
736     LIBABCKIT_LOG_FUNC;
737     // CC-OFFNXT(WordsTool.190) sensitive word conflict
738     return CreateDynInst(graph, input0, compiler::IntrinsicInst::IntrinsicId::DYN_GETNEXTPROPNAME_V8, false);
739 }
740 
IcreateDynLdthisbyvalueStatic(AbckitGraph * graph,AbckitInst * acc)741 AbckitInst *IcreateDynLdthisbyvalueStatic(AbckitGraph *graph, AbckitInst *acc)
742 {
743     LIBABCKIT_LOG_FUNC;
744     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_LDTHISBYVALUE_IMM16);
745 }
746 
IcreateDynDynamicimportStatic(AbckitGraph * graph,AbckitInst * acc)747 AbckitInst *IcreateDynDynamicimportStatic(AbckitGraph *graph, AbckitInst *acc)
748 {
749     LIBABCKIT_LOG_FUNC;
750     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_DYNAMICIMPORT);
751 }
752 
753 //* Binary instructions *//
754 
IcreateDynCreateiterresultobjStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)755 AbckitInst *IcreateDynCreateiterresultobjStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
756 {
757     LIBABCKIT_LOG_FUNC;
758     // CC-OFFNXT(WordsTool.190) sensitive word conflict
759     return CreateDynInst(graph, input0, input1, compiler::IntrinsicInst::IntrinsicId::DYN_CREATEITERRESULTOBJ_V8_V8);
760 }
761 
IcreateDynNewobjapplyStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)762 AbckitInst *IcreateDynNewobjapplyStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
763 {
764     LIBABCKIT_LOG_FUNC;
765     // CC-OFFNXT(WordsTool.190) sensitive word conflict
766     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_NEWOBJAPPLY_IMM16_V8);
767 }
768 
IcreateDynCallruntimeCallinitStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)769 AbckitInst *IcreateDynCallruntimeCallinitStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
770 {
771     LIBABCKIT_LOG_FUNC;
772     // CC-OFFNXT(WordsTool.190) sensitive word conflict
773     return CreateDynInst(graph, acc, input0,
774                          compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_CALLINIT_PREF_IMM8_V8);
775 }
776 
IcreateDynSupercallspreadStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)777 AbckitInst *IcreateDynSupercallspreadStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
778 {
779     LIBABCKIT_LOG_FUNC;
780     // CC-OFFNXT(WordsTool.190) sensitive word conflict
781     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_SUPERCALLSPREAD_IMM8_V8);
782 }
783 
IcreateDynDelobjpropStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)784 AbckitInst *IcreateDynDelobjpropStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
785 {
786     LIBABCKIT_LOG_FUNC;
787     // CC-OFFNXT(WordsTool.190) sensitive word conflict
788     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_DELOBJPROP_V8);
789 }
790 
IcreateDynSuspendgeneratorStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)791 AbckitInst *IcreateDynSuspendgeneratorStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
792 {
793     LIBABCKIT_LOG_FUNC;
794     // CC-OFFNXT(WordsTool.190) sensitive word conflict
795     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_SUSPENDGENERATOR_V8);
796 }
797 
IcreateDynAsyncfunctionawaituncaughtStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)798 AbckitInst *IcreateDynAsyncfunctionawaituncaughtStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
799 {
800     LIBABCKIT_LOG_FUNC;
801     // CC-OFFNXT(WordsTool.190) sensitive word conflict
802     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_ASYNCFUNCTIONAWAITUNCAUGHT_V8);
803 }
804 
IcreateDynCopydatapropertiesStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)805 AbckitInst *IcreateDynCopydatapropertiesStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
806 {
807     LIBABCKIT_LOG_FUNC;
808     // CC-OFFNXT(WordsTool.190) sensitive word conflict
809     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_COPYDATAPROPERTIES_V8);
810 }
811 
IcreateDynSetobjectwithprotoStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)812 AbckitInst *IcreateDynSetobjectwithprotoStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
813 {
814     LIBABCKIT_LOG_FUNC;
815     // CC-OFFNXT(WordsTool.190) sensitive word conflict
816     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_SETOBJECTWITHPROTO_IMM16_V8);
817 }
818 
IcreateDynLdobjbyvalueStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)819 AbckitInst *IcreateDynLdobjbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
820 {
821     LIBABCKIT_LOG_FUNC;
822     // CC-OFFNXT(WordsTool.190) sensitive word conflict
823     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_LDOBJBYVALUE_IMM16_V8);
824 }
825 
IcreateDynLdsuperbyvalueStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)826 AbckitInst *IcreateDynLdsuperbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
827 {
828     LIBABCKIT_LOG_FUNC;
829     // CC-OFFNXT(WordsTool.190) sensitive word conflict
830     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_LDSUPERBYVALUE_IMM16_V8);
831 }
832 
IcreateDynAsyncfunctionresolveStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)833 AbckitInst *IcreateDynAsyncfunctionresolveStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
834 {
835     LIBABCKIT_LOG_FUNC;
836     // CC-OFFNXT(WordsTool.190) sensitive word conflict
837     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_ASYNCFUNCTIONRESOLVE_V8);
838 }
839 
IcreateDynAsyncfunctionrejectStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)840 AbckitInst *IcreateDynAsyncfunctionrejectStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
841 {
842     LIBABCKIT_LOG_FUNC;
843     // CC-OFFNXT(WordsTool.190) sensitive word conflict
844     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_ASYNCFUNCTIONREJECT_V8);
845 }
846 
IcreateDynStthisbyvalueStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)847 AbckitInst *IcreateDynStthisbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
848 {
849     LIBABCKIT_LOG_FUNC;
850     // CC-OFFNXT(WordsTool.190) sensitive word conflict
851     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_STTHISBYVALUE_IMM16_V8);
852 }
853 
IcreateDynAsyncgeneratorrejectStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0)854 AbckitInst *IcreateDynAsyncgeneratorrejectStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0)
855 {
856     LIBABCKIT_LOG_FUNC;
857     // CC-OFFNXT(WordsTool.190) sensitive word conflict
858     return CreateDynInst(graph, acc, input0, compiler::IntrinsicInst::IntrinsicId::DYN_ASYNCGENERATORREJECT_V8);
859 }
860 
861 //* Ternary instructions *//
862 
IcreateDynCallargs2Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,AbckitInst * input1)863 AbckitInst *IcreateDynCallargs2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1)
864 {
865     LIBABCKIT_LOG_FUNC;
866     // CC-OFFNXT(WordsTool.190) sensitive word conflict
867     return CreateDynInst(graph, acc, input0, input1, compiler::IntrinsicInst::IntrinsicId::DYN_CALLARGS2_IMM8_V8_V8);
868 }
869 
IcreateDynApplyStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,AbckitInst * input1)870 AbckitInst *IcreateDynApplyStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1)
871 {
872     LIBABCKIT_LOG_FUNC;
873     // CC-OFFNXT(WordsTool.190) sensitive word conflict
874     return CreateDynInst(graph, acc, input0, input1, compiler::IntrinsicInst::IntrinsicId::DYN_APPLY_IMM8_V8_V8);
875 }
876 
IcreateDynStarrayspreadStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,AbckitInst * input1)877 AbckitInst *IcreateDynStarrayspreadStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1)
878 {
879     LIBABCKIT_LOG_FUNC;
880     // CC-OFFNXT(WordsTool.190) sensitive word conflict
881     return CreateDynInst(graph, acc, input0, input1, compiler::IntrinsicInst::IntrinsicId::DYN_STARRAYSPREAD_V8_V8);
882 }
883 
IcreateDynStsuperbyvalueStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,AbckitInst * input1)884 AbckitInst *IcreateDynStsuperbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1)
885 {
886     LIBABCKIT_LOG_FUNC;
887     // CC-OFFNXT(WordsTool.190) sensitive word conflict
888     return CreateDynInst(graph, acc, input0, input1,
889                          compiler::IntrinsicInst::IntrinsicId::DYN_STSUPERBYVALUE_IMM16_V8_V8);
890 }
891 
IcreateDynAsyncgeneratorresolveStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,AbckitInst * input2)892 AbckitInst *IcreateDynAsyncgeneratorresolveStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
893                                                   AbckitInst *input2)
894 {
895     LIBABCKIT_LOG_FUNC;
896     // CC-OFFNXT(WordsTool.190) sensitive word conflict
897     return CreateDynInst(graph, input0, input1, input2,
898                          compiler::IntrinsicInst::IntrinsicId::DYN_ASYNCGENERATORRESOLVE_V8_V8_V8);
899 }
900 
IcreateDynCallruntimeDefinefieldbyvalueStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,AbckitInst * input1)901 AbckitInst *IcreateDynCallruntimeDefinefieldbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0,
902                                                           AbckitInst *input1)
903 {
904     LIBABCKIT_LOG_FUNC;
905     // CC-OFFNXT(WordsTool.190) sensitive word conflict
906     return CreateDynInst(graph, acc, input0, input1,
907                          compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_DEFINEFIELDBYVALUE_PREF_IMM8_V8_V8);
908 }
909 
IcreateDynDefinefieldbynameStatic(AbckitGraph * graph,AbckitInst * acc,AbckitString * string,AbckitInst * input0)910 AbckitInst *IcreateDynDefinefieldbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string,
911                                               AbckitInst *input0)
912 {
913     LIBABCKIT_LOG_FUNC;
914     // CC-OFFNXT(WordsTool.190) sensitive word conflict
915     return CreateDynInst(graph, acc, input0, GetStringOffset(graph, string),
916                          compiler::IntrinsicInst::IntrinsicId::DYN_DEFINEFIELDBYNAME_IMM8_ID16_V8);
917 }
918 
IcreateDynDefinepropertybynameStatic(AbckitGraph * graph,AbckitInst * acc,AbckitString * string,AbckitInst * input0)919 AbckitInst *IcreateDynDefinepropertybynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string,
920                                                  AbckitInst *input0)
921 {
922     LIBABCKIT_LOG_FUNC;
923     // CC-OFFNXT(WordsTool.190) sensitive word conflict
924     return CreateDynInst(graph, acc, input0, GetStringOffset(graph, string),
925                          compiler::IntrinsicInst::IntrinsicId::DYN_DEFINEPROPERTYBYNAME_IMM8_ID16_V8);
926 }
927 
IcreateDynStsuperbynameStatic(AbckitGraph * graph,AbckitInst * acc,AbckitString * string,AbckitInst * input0)928 AbckitInst *IcreateDynStsuperbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string, AbckitInst *input0)
929 {
930     LIBABCKIT_LOG_FUNC;
931     // CC-OFFNXT(WordsTool.190) sensitive word conflict
932     return CreateDynInst(graph, acc, input0, GetStringOffset(graph, string),
933                          compiler::IntrinsicInst::IntrinsicId::DYN_STSUPERBYNAME_IMM16_ID16_V8);
934 }
935 
IcreateDynCreateobjectwithexcludedkeysStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,uint64_t imm0,std::va_list args)936 AbckitInst *IcreateDynCreateobjectwithexcludedkeysStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
937                                                          uint64_t imm0, std::va_list args)
938 {
939     LIBABCKIT_LOG_FUNC;
940     auto imm0BitSize = GetBitLengthUnsigned(imm0);
941     if (imm0BitSize > AbckitBitImmSize::BITSIZE_8) {
942         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
943         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
944         return nullptr;
945     }
946     // CC-OFFNXT(WordsTool.190) sensitive word conflict
947     return CreateDynInst(graph, input0, input1, imm0, args,
948                          compiler::IntrinsicInst::IntrinsicId::DYN_CREATEOBJECTWITHEXCLUDEDKEYS_IMM8_V8_V8, false);
949 }
950 
IcreateDynWideCreateobjectwithexcludedkeysStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,uint64_t imm0,std::va_list args)951 AbckitInst *IcreateDynWideCreateobjectwithexcludedkeysStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
952                                                              uint64_t imm0, std::va_list args)
953 {
954     LIBABCKIT_LOG_FUNC;
955     auto imm0BitSize = GetBitLengthUnsigned(imm0);
956     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
957         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
958         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
959         return nullptr;
960     }
961     // CC-OFFNXT(WordsTool.190) sensitive word conflict
962     return CreateDynInst(graph, input0, input1, imm0, args,
963                          compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_CREATEOBJECTWITHEXCLUDEDKEYS_PREF_IMM16_V8_V8,
964                          false);
965 }
966 
IcreateDynCallruntimeDefinefieldbyindexStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0,AbckitInst * input0)967 AbckitInst *IcreateDynCallruntimeDefinefieldbyindexStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0,
968                                                           AbckitInst *input0)
969 {
970     LIBABCKIT_LOG_FUNC;
971     auto imm0BitSize = GetBitLengthUnsigned(imm0);
972     if (imm0BitSize > AbckitBitImmSize::BITSIZE_32) {
973         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
974         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
975         return nullptr;
976     }
977     // CC-OFFNXT(WordsTool.190) sensitive word conflict
978     return CreateDynInst(graph, acc, input0, imm0,
979                          compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_DEFINEFIELDBYINDEX_PREF_IMM8_IMM32_V8);
980 }
981 
IcreateDynCallthisrangeStatic(AbckitGraph * graph,AbckitInst * acc,size_t argCount,std::va_list args)982 AbckitInst *IcreateDynCallthisrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args)
983 {
984     LIBABCKIT_LOG_FUNC;
985     auto argCountBitSize = GetBitLengthUnsigned(argCount);
986     if (argCountBitSize > AbckitBitImmSize::BITSIZE_8) {
987         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
988         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
989         return nullptr;
990     }
991     // CC-OFFNXT(WordsTool.190) sensitive word conflict
992     auto intrImpl = graph->impl->CreateInstIntrinsic(
993         compiler::DataType::ANY, 0, compiler::IntrinsicInst::IntrinsicId::DYN_CALLTHISRANGE_IMM8_IMM8_V8);
994     size_t argsCount {argCount + 2};
995     intrImpl->ReserveInputs(argsCount);
996     intrImpl->AllocateInputTypes(graph->impl->GetAllocator(), argsCount);
997     intrImpl->AppendInput(acc->impl, compiler::DataType::ANY);
998     for (size_t index = 0; index < argCount + 1; ++index) {
999         // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
1000         AbckitInst *input = va_arg(args, AbckitInst *);
1001         intrImpl->AppendInput(input->impl, compiler::DataType::ANY);
1002     }
1003     intrImpl->AddImm(graph->impl->GetAllocator(), IC_SLOT_VALUE);
1004     intrImpl->AddImm(graph->impl->GetAllocator(), argCount);
1005     return CreateInstFromImpl(graph, intrImpl);
1006 }
1007 
IcreateDynWideCallthisrangeStatic(AbckitGraph * graph,AbckitInst * acc,size_t argCount,std::va_list args)1008 AbckitInst *IcreateDynWideCallthisrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args)
1009 {
1010     LIBABCKIT_LOG_FUNC;
1011     auto argCountBitSize = GetBitLengthUnsigned(argCount);
1012     if (argCountBitSize > AbckitBitImmSize::BITSIZE_16) {
1013         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1014         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1015         return nullptr;
1016     }
1017     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1018     auto intrImpl = graph->impl->CreateInstIntrinsic(
1019         compiler::DataType::ANY, 0, compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_CALLTHISRANGE_PREF_IMM16_V8);
1020     size_t argsCount {argCount + 2};
1021     intrImpl->ReserveInputs(argsCount);
1022     intrImpl->AllocateInputTypes(graph->impl->GetAllocator(), argsCount);
1023     intrImpl->AppendInput(acc->impl, compiler::DataType::ANY);
1024     for (size_t index = 0; index < argCount + 1; ++index) {
1025         // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
1026         AbckitInst *input = va_arg(args, AbckitInst *);
1027         intrImpl->AppendInput(input->impl, compiler::DataType::ANY);
1028     }
1029     intrImpl->AddImm(graph->impl->GetAllocator(), argCount);
1030     return CreateInstFromImpl(graph, intrImpl);
1031 }
1032 
IcreateDynSupercallarrowrangeStatic(AbckitGraph * graph,AbckitInst * acc,size_t argCount,std::va_list args)1033 AbckitInst *IcreateDynSupercallarrowrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args)
1034 {
1035     LIBABCKIT_LOG_FUNC;
1036     auto argCountBitSize = GetBitLengthUnsigned(argCount);
1037     if (argCountBitSize > AbckitBitImmSize::BITSIZE_8) {
1038         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1039         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1040         return nullptr;
1041     }
1042     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1043     return CreateDynInst(graph, acc, argCount, args,
1044                          compiler::IntrinsicInst::IntrinsicId::DYN_SUPERCALLARROWRANGE_IMM8_IMM8_V8);
1045 }
1046 
IcreateDynCallrangeStatic(AbckitGraph * graph,AbckitInst * acc,size_t argCount,std::va_list args)1047 AbckitInst *IcreateDynCallrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args)
1048 {
1049     LIBABCKIT_LOG_FUNC;
1050     auto argCountBitSize = GetBitLengthUnsigned(argCount);
1051     if (argCountBitSize > AbckitBitImmSize::BITSIZE_8) {
1052         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1053         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1054         return nullptr;
1055     }
1056     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1057     return CreateDynInst(graph, acc, argCount, args, compiler::IntrinsicInst::IntrinsicId::DYN_CALLRANGE_IMM8_IMM8_V8);
1058 }
1059 
IcreateDynWideCallrangeStatic(AbckitGraph * graph,AbckitInst * acc,size_t argCount,std::va_list args)1060 AbckitInst *IcreateDynWideCallrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args)
1061 {
1062     LIBABCKIT_LOG_FUNC;
1063     auto argCountBitSize = GetBitLengthUnsigned(argCount);
1064     if (argCountBitSize > AbckitBitImmSize::BITSIZE_16) {
1065         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1066         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1067         return nullptr;
1068     }
1069     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1070     return CreateDynInst(graph, acc, argCount, args,
1071                          compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_CALLRANGE_PREF_IMM16_V8, false);
1072 }
1073 
IcreateDynWideSupercallarrowrangeStatic(AbckitGraph * graph,AbckitInst * acc,size_t argCount,std::va_list args)1074 AbckitInst *IcreateDynWideSupercallarrowrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount,
1075                                                     std::va_list args)
1076 {
1077     LIBABCKIT_LOG_FUNC;
1078     auto argCountBitSize = GetBitLengthUnsigned(argCount);
1079     if (argCountBitSize > AbckitBitImmSize::BITSIZE_16) {
1080         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1081         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1082         return nullptr;
1083     }
1084     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1085     return CreateDynInst(graph, acc, argCount, args,
1086                          compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_SUPERCALLARROWRANGE_PREF_IMM16_V8, false);
1087 }
1088 
IcreateDynStprivatepropertyStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0,uint64_t imm1,AbckitInst * input0)1089 AbckitInst *IcreateDynStprivatepropertyStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1,
1090                                               AbckitInst *input0)
1091 {
1092     LIBABCKIT_LOG_FUNC;
1093     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1094     auto imm1BitSize = GetBitLengthUnsigned(imm1);
1095     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16 || imm1BitSize > AbckitBitImmSize::BITSIZE_16) {
1096         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1097         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1098         return nullptr;
1099     }
1100     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1101     return CreateDynInst(graph, acc, input0, imm0, imm1,
1102                          compiler::IntrinsicInst::IntrinsicId::DYN_STPRIVATEPROPERTY_IMM8_IMM16_IMM16_V8);
1103 }
IcreateDynCallruntimeDefineprivatepropertyStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0,uint64_t imm1,AbckitInst * input0)1104 AbckitInst *IcreateDynCallruntimeDefineprivatepropertyStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0,
1105                                                              uint64_t imm1, AbckitInst *input0)
1106 {
1107     LIBABCKIT_LOG_FUNC;
1108     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1109     auto imm1BitSize = GetBitLengthUnsigned(imm1);
1110     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16 || imm1BitSize > AbckitBitImmSize::BITSIZE_16) {
1111         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1112         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1113         return nullptr;
1114     }
1115     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1116     return CreateDynInst(
1117         graph, acc, input0, imm0, imm1,
1118         compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_DEFINEPRIVATEPROPERTY_PREF_IMM8_IMM16_IMM16_V8);
1119 }
1120 
IcreateDynCreatearraywithbufferStatic(AbckitGraph * graph,AbckitLiteralArray * literalArray)1121 AbckitInst *IcreateDynCreatearraywithbufferStatic(AbckitGraph *graph, AbckitLiteralArray *literalArray)
1122 {
1123     LIBABCKIT_LOG_FUNC;
1124     return CreateDynInst(graph, GetLiteralArrayOffset(graph, literalArray),
1125                          compiler::IntrinsicInst::IntrinsicId::DYN_CREATEARRAYWITHBUFFER_IMM16_ID16);
1126 }
1127 
IcreateDynCreateobjectwithbufferStatic(AbckitGraph * graph,AbckitLiteralArray * literalArray)1128 AbckitInst *IcreateDynCreateobjectwithbufferStatic(AbckitGraph *graph, AbckitLiteralArray *literalArray)
1129 {
1130     LIBABCKIT_LOG_FUNC;
1131     return CreateDynInst(graph, GetLiteralArrayOffset(graph, literalArray),
1132                          compiler::IntrinsicInst::IntrinsicId::DYN_CREATEOBJECTWITHBUFFER_IMM16_ID16);
1133 }
1134 
IcreateDynCallargs3Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,AbckitInst * input1,AbckitInst * input2)1135 AbckitInst *IcreateDynCallargs3Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1,
1136                                       AbckitInst *input2)
1137 {
1138     LIBABCKIT_LOG_FUNC;
1139     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1140     return CreateDynInst(graph, acc, input0, input1, input2,
1141                          compiler::IntrinsicInst::IntrinsicId::DYN_CALLARGS3_IMM8_V8_V8_V8);
1142 }
1143 
IcreateDynCallthis2Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,AbckitInst * input1,AbckitInst * input2)1144 AbckitInst *IcreateDynCallthis2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1,
1145                                       AbckitInst *input2)
1146 {
1147     LIBABCKIT_LOG_FUNC;
1148     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1149     return CreateDynInst(graph, acc, input0, input1, input2,
1150                          compiler::IntrinsicInst::IntrinsicId::DYN_CALLTHIS2_IMM8_V8_V8_V8);
1151 }
1152 
1153 // CC-OFFNXT(G.FUN.01) function args are necessary
IcreateDynCallthis3Static(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,AbckitInst * input1,AbckitInst * input2,AbckitInst * input3)1154 AbckitInst *IcreateDynCallthis3Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1,
1155                                       AbckitInst *input2, AbckitInst *input3)
1156 {
1157     LIBABCKIT_LOG_FUNC;
1158     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1159     return CreateDynInst(graph, acc, input0, input1, input2, input3,
1160                          compiler::IntrinsicInst::IntrinsicId::DYN_CALLTHIS3_IMM8_V8_V8_V8_V8);
1161 }
1162 
1163 // CC-OFFNXT(G.FUN.01) function args are necessary
IcreateDynDefinegettersetterbyvalueStatic(AbckitGraph * graph,AbckitInst * acc,AbckitInst * input0,AbckitInst * input1,AbckitInst * input2,AbckitInst * input3)1164 AbckitInst *IcreateDynDefinegettersetterbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0,
1165                                                       AbckitInst *input1, AbckitInst *input2, AbckitInst *input3)
1166 {
1167     LIBABCKIT_LOG_FUNC;
1168     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1169     return CreateDynInst(graph, acc, input0, input1, input2, input3,
1170                          compiler::IntrinsicInst::IntrinsicId::DYN_DEFINEGETTERSETTERBYVALUE_V8_V8_V8_V8);
1171 }
1172 
IcreateDynStlexvarStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0,uint64_t imm1)1173 AbckitInst *IcreateDynStlexvarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1)
1174 {
1175     LIBABCKIT_LOG_FUNC;
1176     AbckitInst *inst {nullptr};
1177     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1178     auto imm1BitSize = GetBitLengthUnsigned(imm1);
1179     if (imm0BitSize <= AbckitBitImmSize::BITSIZE_4 && imm1BitSize <= AbckitBitImmSize::BITSIZE_4) {
1180         inst =
1181             CreateDynInst(graph, acc, imm0, imm1, compiler::IntrinsicInst::IntrinsicId::DYN_STLEXVAR_IMM4_IMM4, false);
1182     } else if (imm0BitSize <= AbckitBitImmSize::BITSIZE_8 && imm1BitSize <= AbckitBitImmSize::BITSIZE_8) {
1183         inst =
1184             CreateDynInst(graph, acc, imm0, imm1, compiler::IntrinsicInst::IntrinsicId::DYN_STLEXVAR_IMM8_IMM8, false);
1185     } else {
1186         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1187         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1188     }
1189     return inst;
1190 }
1191 
IcreateDynWideStlexvarStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0,uint64_t imm1)1192 AbckitInst *IcreateDynWideStlexvarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1)
1193 {
1194     LIBABCKIT_LOG_FUNC;
1195     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1196     auto imm1BitSize = GetBitLengthUnsigned(imm1);
1197     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16 || imm1BitSize > AbckitBitImmSize::BITSIZE_16) {
1198         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1199         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1200         return nullptr;
1201     }
1202     return CreateDynInst(graph, acc, imm0, imm1,
1203                          compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_STLEXVAR_PREF_IMM16_IMM16, false);
1204 }
1205 
IcreateDynTestinStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0,uint64_t imm1)1206 AbckitInst *IcreateDynTestinStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1)
1207 {
1208     LIBABCKIT_LOG_FUNC;
1209     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1210     auto imm1BitSize = GetBitLengthUnsigned(imm1);
1211     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16 || imm1BitSize > AbckitBitImmSize::BITSIZE_16) {
1212         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1213         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1214         return nullptr;
1215     }
1216     return CreateDynInst(graph, acc, imm0, imm1, compiler::IntrinsicInst::IntrinsicId::DYN_TESTIN_IMM8_IMM16_IMM16);
1217 }
1218 
IcreateDynLdprivatepropertyStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0,uint64_t imm1)1219 AbckitInst *IcreateDynLdprivatepropertyStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1)
1220 {
1221     LIBABCKIT_LOG_FUNC;
1222     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1223     auto imm1BitSize = GetBitLengthUnsigned(imm1);
1224     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16 || imm1BitSize > AbckitBitImmSize::BITSIZE_16) {
1225         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1226         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1227         return nullptr;
1228     }
1229     return CreateDynInst(graph, acc, imm0, imm1,
1230                          compiler::IntrinsicInst::IntrinsicId::DYN_LDPRIVATEPROPERTY_IMM8_IMM16_IMM16);
1231 }
1232 
IcreateDynLdlexvarStatic(AbckitGraph * graph,uint64_t imm0,uint64_t imm1)1233 AbckitInst *IcreateDynLdlexvarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1)
1234 {
1235     LIBABCKIT_LOG_FUNC;
1236     AbckitInst *inst {nullptr};
1237     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1238     auto imm1BitSize = GetBitLengthUnsigned(imm1);
1239     if (imm0BitSize <= AbckitBitImmSize::BITSIZE_4 && imm1BitSize <= AbckitBitImmSize::BITSIZE_4) {
1240         inst = CreateDynInst(graph, imm0, imm1, compiler::IntrinsicInst::IntrinsicId::DYN_LDLEXVAR_IMM4_IMM4, false);
1241     } else if (imm0BitSize <= AbckitBitImmSize::BITSIZE_8 && imm1BitSize <= AbckitBitImmSize::BITSIZE_8) {
1242         inst = CreateDynInst(graph, imm0, imm1, compiler::IntrinsicInst::IntrinsicId::DYN_LDLEXVAR_IMM8_IMM8, false);
1243     } else {
1244         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1245         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1246     }
1247     return inst;
1248 }
IcreateDynWideLdlexvarStatic(AbckitGraph * graph,uint64_t imm0,uint64_t imm1)1249 AbckitInst *IcreateDynWideLdlexvarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1)
1250 {
1251     LIBABCKIT_LOG_FUNC;
1252     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1253     auto imm1BitSize = GetBitLengthUnsigned(imm1);
1254     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16 || imm1BitSize > AbckitBitImmSize::BITSIZE_16) {
1255         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1256         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1257         return nullptr;
1258     }
1259     return CreateDynInst(graph, imm0, imm1, compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_LDLEXVAR_PREF_IMM16_IMM16,
1260                          false);
1261 }
1262 
IcreateDynStthisbynameStatic(AbckitGraph * graph,AbckitInst * acc,AbckitString * string)1263 AbckitInst *IcreateDynStthisbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string)
1264 {
1265     LIBABCKIT_LOG_FUNC;
1266     return CreateDynInst(graph, acc, GetStringOffset(graph, string),
1267                          compiler::IntrinsicInst::IntrinsicId::DYN_STTHISBYNAME_IMM16_ID16);
1268 }
1269 
IcreateDynTrystglobalbynameStatic(AbckitGraph * graph,AbckitInst * acc,AbckitString * string)1270 AbckitInst *IcreateDynTrystglobalbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string)
1271 {
1272     LIBABCKIT_LOG_FUNC;
1273     return CreateDynInst(graph, acc, GetStringOffset(graph, string),
1274                          compiler::IntrinsicInst::IntrinsicId::DYN_TRYSTGLOBALBYNAME_IMM16_ID16);
1275 }
1276 
IcreateDynStglobalvarStatic(AbckitGraph * graph,AbckitInst * acc,AbckitString * string)1277 AbckitInst *IcreateDynStglobalvarStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string)
1278 {
1279     LIBABCKIT_LOG_FUNC;
1280     return CreateDynInst(graph, acc, GetStringOffset(graph, string),
1281                          compiler::IntrinsicInst::IntrinsicId::DYN_STGLOBALVAR_IMM16_ID16);
1282 }
1283 
IcreateDynLdsuperbynameStatic(AbckitGraph * graph,AbckitInst * acc,AbckitString * string)1284 AbckitInst *IcreateDynLdsuperbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string)
1285 {
1286     LIBABCKIT_LOG_FUNC;
1287     return CreateDynInst(graph, acc, GetStringOffset(graph, string),
1288                          compiler::IntrinsicInst::IntrinsicId::DYN_LDSUPERBYNAME_IMM16_ID16);
1289 }
1290 
IcreateDynWideStpatchvarStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0)1291 AbckitInst *IcreateDynWideStpatchvarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0)
1292 {
1293     LIBABCKIT_LOG_FUNC;
1294     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1295     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
1296         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1297         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1298         return nullptr;
1299     }
1300     return CreateDynInst(graph, acc, imm0, compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_STPATCHVAR_PREF_IMM16, false);
1301 }
1302 
IcreateDynSetgeneratorstateStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0)1303 AbckitInst *IcreateDynSetgeneratorstateStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0)
1304 {
1305     LIBABCKIT_LOG_FUNC;
1306     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1307     if (imm0BitSize > AbckitBitImmSize::BITSIZE_8) {
1308         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1309         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1310         return nullptr;
1311     }
1312     return CreateDynInst(graph, acc, imm0, compiler::IntrinsicInst::IntrinsicId::DYN_SETGENERATORSTATE_IMM8, false);
1313 }
1314 
IcreateDynLdobjbyindexStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0)1315 AbckitInst *IcreateDynLdobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0)
1316 {
1317     LIBABCKIT_LOG_FUNC;
1318     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1319     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
1320         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1321         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1322         return nullptr;
1323     }
1324     return CreateDynInst(graph, acc, imm0, compiler::IntrinsicInst::IntrinsicId::DYN_LDOBJBYINDEX_IMM16_IMM16);
1325     ;
1326 }
1327 
IcreateDynWideLdobjbyindexStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0)1328 AbckitInst *IcreateDynWideLdobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0)
1329 {
1330     LIBABCKIT_LOG_FUNC;
1331     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1332     if (imm0BitSize > AbckitBitImmSize::BITSIZE_32) {
1333         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1334         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1335         return nullptr;
1336     }
1337     return CreateDynInst(graph, acc, imm0, compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_LDOBJBYINDEX_PREF_IMM32,
1338                          false);
1339 }
1340 
IcreateDynSupercallthisrangeStatic(AbckitGraph * graph,size_t argCount,std::va_list args)1341 AbckitInst *IcreateDynSupercallthisrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args)
1342 {
1343     LIBABCKIT_LOG_FUNC;
1344     auto argCountBitSize = GetBitLengthUnsigned(argCount);
1345     if (argCountBitSize > AbckitBitImmSize::BITSIZE_8) {
1346         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1347         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1348         return nullptr;
1349     }
1350     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1351     return CreateDynInst(graph, argCount, args,
1352                          compiler::IntrinsicInst::IntrinsicId::DYN_SUPERCALLTHISRANGE_IMM8_IMM8_V8);
1353 }
1354 
IcreateDynWideSupercallthisrangeStatic(AbckitGraph * graph,size_t argCount,std::va_list args)1355 AbckitInst *IcreateDynWideSupercallthisrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args)
1356 {
1357     LIBABCKIT_LOG_FUNC;
1358     auto argCountBitSize = GetBitLengthUnsigned(argCount);
1359     if (argCountBitSize > AbckitBitImmSize::BITSIZE_16) {
1360         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1361         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1362         return nullptr;
1363     }
1364     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1365     return CreateDynInst(graph, argCount, args,
1366                          compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_SUPERCALLTHISRANGE_PREF_IMM16_V8, false);
1367 }
1368 
IcreateDynWideNewobjrangeStatic(AbckitGraph * graph,size_t argCount,std::va_list args)1369 AbckitInst *IcreateDynWideNewobjrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args)
1370 {
1371     LIBABCKIT_LOG_FUNC;
1372     auto argCountBitSize = GetBitLengthUnsigned(argCount);
1373     if (argCountBitSize > AbckitBitImmSize::BITSIZE_16) {
1374         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1375         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1376         return nullptr;
1377     }
1378     // CC-OFFNXT(WordsTool.190) sensitive word conflict
1379     return CreateDynInst(graph, argCount, args,
1380                          compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_NEWOBJRANGE_PREF_IMM16_V8, false);
1381 }
1382 
IcreateDynWideLdpatchvarStatic(AbckitGraph * graph,uint64_t imm0)1383 AbckitInst *IcreateDynWideLdpatchvarStatic(AbckitGraph *graph, uint64_t imm0)
1384 {
1385     LIBABCKIT_LOG_FUNC;
1386     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1387     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
1388         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1389         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1390         return nullptr;
1391     }
1392     return CreateDynInst(graph, imm0, compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_LDPATCHVAR_PREF_IMM16, false);
1393 }
1394 
IcreateDynNewlexenvStatic(AbckitGraph * graph,uint64_t imm0)1395 AbckitInst *IcreateDynNewlexenvStatic(AbckitGraph *graph, uint64_t imm0)
1396 {
1397     LIBABCKIT_LOG_FUNC;
1398     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1399     if (imm0BitSize > AbckitBitImmSize::BITSIZE_8) {
1400         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1401         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1402         return nullptr;
1403     }
1404     return CreateDynInst(graph, imm0, compiler::IntrinsicInst::IntrinsicId::DYN_NEWLEXENV_IMM8, false);
1405 }
1406 
IcreateDynWideNewlexenvStatic(AbckitGraph * graph,uint64_t imm0)1407 AbckitInst *IcreateDynWideNewlexenvStatic(AbckitGraph *graph, uint64_t imm0)
1408 {
1409     LIBABCKIT_LOG_FUNC;
1410     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1411     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
1412         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1413         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1414         return nullptr;
1415     }
1416     return CreateDynInst(graph, imm0, compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_NEWLEXENV_PREF_IMM16, false);
1417 }
1418 
IcreateDynNewlexenvwithnameStatic(AbckitGraph * graph,uint64_t imm0,AbckitLiteralArray * literalArray)1419 AbckitInst *IcreateDynNewlexenvwithnameStatic(AbckitGraph *graph, uint64_t imm0, AbckitLiteralArray *literalArray)
1420 {
1421     LIBABCKIT_LOG_FUNC;
1422     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1423     if (imm0BitSize > AbckitBitImmSize::BITSIZE_8) {
1424         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1425         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1426         return nullptr;
1427     }
1428     return CreateDynInst(graph, imm0, GetLiteralArrayOffset(graph, literalArray),
1429                          compiler::IntrinsicInst::IntrinsicId::DYN_NEWLEXENVWITHNAME_IMM8_ID16, false);
1430 }
1431 
IcreateDynWideNewlexenvwithnameStatic(AbckitGraph * graph,uint64_t imm0,AbckitLiteralArray * literalArray)1432 AbckitInst *IcreateDynWideNewlexenvwithnameStatic(AbckitGraph *graph, uint64_t imm0, AbckitLiteralArray *literalArray)
1433 {
1434     LIBABCKIT_LOG_FUNC;
1435     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1436     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
1437         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1438         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1439         return nullptr;
1440     }
1441     return CreateDynInst(graph, imm0, GetLiteralArrayOffset(graph, literalArray),
1442                          compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_NEWLEXENVWITHNAME_PREF_IMM16_ID16, false);
1443 }
1444 
IcreateDynCopyrestargsStatic(AbckitGraph * graph,uint64_t imm0)1445 AbckitInst *IcreateDynCopyrestargsStatic(AbckitGraph *graph, uint64_t imm0)
1446 {
1447     LIBABCKIT_LOG_FUNC;
1448     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1449     if (imm0BitSize > AbckitBitImmSize::BITSIZE_8) {
1450         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1451         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1452         return nullptr;
1453     }
1454     return CreateDynInst(graph, imm0, compiler::IntrinsicInst::IntrinsicId::DYN_COPYRESTARGS_IMM8, false);
1455 }
1456 
IcreateDynWideCopyrestargsStatic(AbckitGraph * graph,uint64_t imm0)1457 AbckitInst *IcreateDynWideCopyrestargsStatic(AbckitGraph *graph, uint64_t imm0)
1458 {
1459     LIBABCKIT_LOG_FUNC;
1460     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1461     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
1462         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1463         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1464         return nullptr;
1465     }
1466     return CreateDynInst(graph, imm0, compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_COPYRESTARGS_PREF_IMM16, false);
1467 }
1468 
IcreateDynCallruntimeLdsendableclassStatic(AbckitGraph * graph,uint64_t imm0)1469 AbckitInst *IcreateDynCallruntimeLdsendableclassStatic(AbckitGraph *graph, uint64_t imm0)
1470 {
1471     LIBABCKIT_LOG_FUNC;
1472     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1473     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
1474         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1475         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1476         return nullptr;
1477     }
1478     return CreateDynInst(graph, imm0, compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_LDSENDABLECLASS_PREF_IMM16,
1479                          false);
1480 }
1481 
IcreateDynCallruntimeLdsendableexternalmodulevarStatic(AbckitGraph * graph,uint64_t imm0)1482 AbckitInst *IcreateDynCallruntimeLdsendableexternalmodulevarStatic(AbckitGraph *graph, uint64_t imm0)
1483 {
1484     LIBABCKIT_LOG_FUNC;
1485     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1486     if (imm0BitSize > AbckitBitImmSize::BITSIZE_8) {
1487         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1488         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1489         return nullptr;
1490     }
1491     return CreateDynInst(graph, imm0,
1492                          compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_LDSENDABLEEXTERNALMODULEVAR_PREF_IMM8,
1493                          false);
1494 }
1495 
IcreateDynCallruntimeWideldsendableexternalmodulevarStatic(AbckitGraph * graph,uint64_t imm0)1496 AbckitInst *IcreateDynCallruntimeWideldsendableexternalmodulevarStatic(AbckitGraph *graph, uint64_t imm0)
1497 {
1498     LIBABCKIT_LOG_FUNC;
1499     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1500     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
1501         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1502         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1503         return nullptr;
1504     }
1505     return CreateDynInst(
1506         graph, imm0, compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_WIDELDSENDABLEEXTERNALMODULEVAR_PREF_IMM16,
1507         false);
1508 }
1509 
IcreateDynCallruntimeNewsendableenvStatic(AbckitGraph * graph,uint64_t imm0)1510 AbckitInst *IcreateDynCallruntimeNewsendableenvStatic(AbckitGraph *graph, uint64_t imm0)
1511 {
1512     LIBABCKIT_LOG_FUNC;
1513     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1514     if (imm0BitSize > AbckitBitImmSize::BITSIZE_8) {
1515         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1516         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1517         return nullptr;
1518     }
1519     return CreateDynInst(graph, imm0, compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_NEWSENDABLEENV_PREF_IMM8,
1520                          false);
1521 }
1522 
IcreateDynCallruntimeWidenewsendableenvStatic(AbckitGraph * graph,uint64_t imm0)1523 AbckitInst *IcreateDynCallruntimeWidenewsendableenvStatic(AbckitGraph *graph, uint64_t imm0)
1524 {
1525     LIBABCKIT_LOG_FUNC;
1526     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1527     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16) {
1528         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1529         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1530         return nullptr;
1531     }
1532     return CreateDynInst(graph, imm0,
1533                          compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_WIDENEWSENDABLEENV_PREF_IMM16, false);
1534 }
1535 
IcreateDynCallruntimeStsendablevarStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0,uint64_t imm1)1536 AbckitInst *IcreateDynCallruntimeStsendablevarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1)
1537 {
1538     LIBABCKIT_LOG_FUNC;
1539     AbckitInst *inst {nullptr};
1540     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1541     auto imm1BitSize = GetBitLengthUnsigned(imm1);
1542     if (imm0BitSize <= AbckitBitImmSize::BITSIZE_4 && imm1BitSize <= AbckitBitImmSize::BITSIZE_4) {
1543         inst = CreateDynInst(graph, acc, imm0, imm1,
1544                              compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_STSENDABLEVAR_PREF_IMM4_IMM4, false);
1545     } else if (imm0BitSize <= AbckitBitImmSize::BITSIZE_8 && imm1BitSize <= AbckitBitImmSize::BITSIZE_8) {
1546         inst = CreateDynInst(graph, acc, imm0, imm1,
1547                              compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_STSENDABLEVAR_PREF_IMM8_IMM8, false);
1548     } else {
1549         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1550         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1551     }
1552     return inst;
1553 }
1554 
IcreateDynCallruntimeWidestsendablevarStatic(AbckitGraph * graph,AbckitInst * acc,uint64_t imm0,uint64_t imm1)1555 AbckitInst *IcreateDynCallruntimeWidestsendablevarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0,
1556                                                          uint64_t imm1)
1557 {
1558     LIBABCKIT_LOG_FUNC;
1559     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1560     auto imm1BitSize = GetBitLengthUnsigned(imm1);
1561     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16 || imm1BitSize > AbckitBitImmSize::BITSIZE_16) {
1562         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1563         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1564         return nullptr;
1565     }
1566     return CreateDynInst(graph, acc, imm0, imm1,
1567                          compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_WIDESTSENDABLEVAR_PREF_IMM16_IMM16,
1568                          false);
1569 }
1570 
IcreateDynCallruntimeLdsendablevarStatic(AbckitGraph * graph,uint64_t imm0,uint64_t imm1)1571 AbckitInst *IcreateDynCallruntimeLdsendablevarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1)
1572 {
1573     LIBABCKIT_LOG_FUNC;
1574     AbckitInst *inst {nullptr};
1575     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1576     auto imm1BitSize = GetBitLengthUnsigned(imm1);
1577     if (imm0BitSize <= AbckitBitImmSize::BITSIZE_4 && imm1BitSize <= AbckitBitImmSize::BITSIZE_4) {
1578         inst = CreateDynInst(graph, imm0, imm1,
1579                              compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_LDSENDABLEVAR_PREF_IMM4_IMM4, false);
1580     } else if (imm0BitSize <= AbckitBitImmSize::BITSIZE_8 && imm1BitSize <= AbckitBitImmSize::BITSIZE_8) {
1581         inst = CreateDynInst(graph, imm0, imm1,
1582                              compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_LDSENDABLEVAR_PREF_IMM8_IMM8, false);
1583     } else {
1584         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1585         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1586     }
1587     return inst;
1588 }
1589 
IcreateDynCallruntimeWideldsendablevarStatic(AbckitGraph * graph,uint64_t imm0,uint64_t imm1)1590 AbckitInst *IcreateDynCallruntimeWideldsendablevarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1)
1591 {
1592     LIBABCKIT_LOG_FUNC;
1593     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1594     auto imm1BitSize = GetBitLengthUnsigned(imm1);
1595     if (imm0BitSize > AbckitBitImmSize::BITSIZE_16 || imm1BitSize > AbckitBitImmSize::BITSIZE_16) {
1596         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1597         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1598         return nullptr;
1599     }
1600     return CreateDynInst(graph, imm0, imm1,
1601                          compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_WIDELDSENDABLEVAR_PREF_IMM16_IMM16,
1602                          false);
1603 }
1604 
IcreateDynCallruntimeIstrueStatic(AbckitGraph * graph,AbckitInst * acc)1605 AbckitInst *IcreateDynCallruntimeIstrueStatic(AbckitGraph *graph, AbckitInst *acc)
1606 {
1607     LIBABCKIT_LOG_FUNC;
1608     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_ISTRUE_PREF_IMM8);
1609 }
1610 
IcreateDynCallruntimeIsfalseStatic(AbckitGraph * graph,AbckitInst * acc)1611 AbckitInst *IcreateDynCallruntimeIsfalseStatic(AbckitGraph *graph, AbckitInst *acc)
1612 {
1613     LIBABCKIT_LOG_FUNC;
1614     return CreateDynInst(graph, acc, compiler::IntrinsicInst::IntrinsicId::DYN_CALLRUNTIME_ISFALSE_PREF_IMM8);
1615 }
1616 
IcreateDynLdglobalvarStatic(AbckitGraph * graph,AbckitString * string)1617 AbckitInst *IcreateDynLdglobalvarStatic(AbckitGraph *graph, AbckitString *string)
1618 {
1619     LIBABCKIT_LOG_FUNC;
1620     return CreateDynInst(graph, GetStringOffset(graph, string),
1621                          compiler::IntrinsicInst::IntrinsicId::DYN_LDGLOBALVAR_IMM16_ID16);
1622 }
1623 
IcreateDynLdbigintStatic(AbckitGraph * graph,AbckitString * string)1624 AbckitInst *IcreateDynLdbigintStatic(AbckitGraph *graph, AbckitString *string)
1625 {
1626     LIBABCKIT_LOG_FUNC;
1627     return CreateDynInst(graph, GetStringOffset(graph, string), compiler::IntrinsicInst::IntrinsicId::DYN_LDBIGINT_ID16,
1628                          false);
1629 }
1630 
IcreateDynLdthisbynameStatic(AbckitGraph * graph,AbckitString * string)1631 AbckitInst *IcreateDynLdthisbynameStatic(AbckitGraph *graph, AbckitString *string)
1632 {
1633     LIBABCKIT_LOG_FUNC;
1634     return CreateDynInst(graph, GetStringOffset(graph, string),
1635                          compiler::IntrinsicInst::IntrinsicId::DYN_LDTHISBYNAME_IMM16_ID16);
1636 }
1637 
IcreateDynIfStatic(AbckitGraph * graph,AbckitInst * input,AbckitIsaApiDynamicConditionCode cc)1638 AbckitInst *IcreateDynIfStatic(AbckitGraph *graph, AbckitInst *input, AbckitIsaApiDynamicConditionCode cc)
1639 {
1640     LIBABCKIT_LOG_FUNC;
1641 
1642     if (!((cc == ABCKIT_ISA_API_DYNAMIC_CONDITION_CODE_CC_NE) || (cc == ABCKIT_ISA_API_DYNAMIC_CONDITION_CODE_CC_EQ))) {
1643         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1644         LIBABCKIT_LOG(DEBUG) << "IcreateDynIf works only with CC_NE and CC_EQ condidion codes\n";
1645         return nullptr;
1646     }
1647 
1648     auto constZeroImpl = graph->impl->FindOrCreateConstant(0L);
1649     auto *constZeroI = CreateInstFromImpl(graph, constZeroImpl);
1650     return IcreateIfDynamicStatic(graph, input, constZeroI, cc);
1651 }
1652 
IcreateDynGetmodulenamespaceStatic(AbckitGraph * graph,AbckitCoreModule * md)1653 AbckitInst *IcreateDynGetmodulenamespaceStatic(AbckitGraph *graph, AbckitCoreModule *md)
1654 {
1655     LIBABCKIT_LOG_FUNC;
1656 
1657     uint64_t imm = GetModuleIndex(graph, md);
1658     if (statuses::GetLastError() != ABCKIT_STATUS_NO_ERROR) {
1659         return nullptr;
1660     }
1661     return CreateDynInst(graph, imm, compiler::IntrinsicInst::IntrinsicId::DYN_GETMODULENAMESPACE_IMM8, false);
1662 }
1663 
IcreateDynWideGetmodulenamespaceStatic(AbckitGraph * graph,AbckitCoreModule * md)1664 AbckitInst *IcreateDynWideGetmodulenamespaceStatic(AbckitGraph *graph, AbckitCoreModule *md)
1665 {
1666     LIBABCKIT_LOG_FUNC;
1667 
1668     uint64_t imm = GetModuleIndex(graph, md);
1669     if (statuses::GetLastError() != ABCKIT_STATUS_NO_ERROR) {
1670         return nullptr;
1671     }
1672     return CreateDynInst(graph, imm, compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_GETMODULENAMESPACE_PREF_IMM16,
1673                          false);
1674 }
1675 
IcreateDynLdexternalmodulevarStatic(AbckitGraph * graph,AbckitCoreImportDescriptor * id)1676 AbckitInst *IcreateDynLdexternalmodulevarStatic(AbckitGraph *graph, AbckitCoreImportDescriptor *id)
1677 {
1678     LIBABCKIT_LOG_FUNC;
1679 
1680     uint32_t imm = GetImportDescriptorIdxDynamic(graph, id);
1681     if (statuses::GetLastError() != ABCKIT_STATUS_NO_ERROR) {
1682         return nullptr;
1683     }
1684     return CreateDynInst(graph, imm, compiler::IntrinsicInst::IntrinsicId::DYN_LDEXTERNALMODULEVAR_IMM8, false);
1685 }
1686 
IcreateDynWideLdexternalmodulevarStatic(AbckitGraph * graph,AbckitCoreImportDescriptor * id)1687 AbckitInst *IcreateDynWideLdexternalmodulevarStatic(AbckitGraph *graph, AbckitCoreImportDescriptor *id)
1688 {
1689     LIBABCKIT_LOG_FUNC;
1690 
1691     uint32_t imm = GetImportDescriptorIdxDynamic(graph, id);
1692     if (statuses::GetLastError() != ABCKIT_STATUS_NO_ERROR) {
1693         return nullptr;
1694     }
1695     return CreateDynInst(graph, imm, compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_LDEXTERNALMODULEVAR_PREF_IMM16,
1696                          false);
1697 }
1698 
IcreateDynLdlocalmodulevarStatic(AbckitGraph * graph,AbckitCoreExportDescriptor * ed)1699 AbckitInst *IcreateDynLdlocalmodulevarStatic(AbckitGraph *graph, AbckitCoreExportDescriptor *ed)
1700 {
1701     LIBABCKIT_LOG_FUNC;
1702 
1703     uint32_t imm = GetExportDescriptorIdxDynamic(graph, ed);
1704     if (statuses::GetLastError() != ABCKIT_STATUS_NO_ERROR) {
1705         return nullptr;
1706     }
1707     return CreateDynInst(graph, imm, compiler::IntrinsicInst::IntrinsicId::DYN_LDLOCALMODULEVAR_IMM8, false);
1708 }
1709 
IcreateDynWideLdlocalmodulevarStatic(AbckitGraph * graph,AbckitCoreExportDescriptor * ed)1710 AbckitInst *IcreateDynWideLdlocalmodulevarStatic(AbckitGraph *graph, AbckitCoreExportDescriptor *ed)
1711 {
1712     LIBABCKIT_LOG_FUNC;
1713 
1714     uint32_t imm = GetExportDescriptorIdxDynamic(graph, ed);
1715     if (statuses::GetLastError() != ABCKIT_STATUS_NO_ERROR) {
1716         return nullptr;
1717     }
1718     return CreateDynInst(graph, imm, compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_LDLOCALMODULEVAR_PREF_IMM16, false);
1719 }
1720 
IcreateDynStmodulevarStatic(AbckitGraph * graph,AbckitInst * acc,AbckitCoreExportDescriptor * ed)1721 AbckitInst *IcreateDynStmodulevarStatic(AbckitGraph *graph, AbckitInst *acc, AbckitCoreExportDescriptor *ed)
1722 {
1723     LIBABCKIT_LOG_FUNC;
1724 
1725     uint32_t imm = GetExportDescriptorIdxDynamic(graph, ed);
1726     if (statuses::GetLastError() != ABCKIT_STATUS_NO_ERROR) {
1727         return nullptr;
1728     }
1729     return CreateDynInst(graph, acc, imm, compiler::IntrinsicInst::IntrinsicId::DYN_STMODULEVAR_IMM8, false);
1730 }
1731 
IcreateDynWideStmodulevarStatic(AbckitGraph * graph,AbckitInst * acc,AbckitCoreExportDescriptor * ed)1732 AbckitInst *IcreateDynWideStmodulevarStatic(AbckitGraph *graph, AbckitInst *acc, AbckitCoreExportDescriptor *ed)
1733 {
1734     LIBABCKIT_LOG_FUNC;
1735 
1736     uint32_t imm = GetExportDescriptorIdxDynamic(graph, ed);
1737     if (statuses::GetLastError() != ABCKIT_STATUS_NO_ERROR) {
1738         return nullptr;
1739     }
1740     return CreateDynInst(graph, acc, imm, compiler::IntrinsicInst::IntrinsicId::DYN_WIDE_STMODULEVAR_PREF_IMM16, false);
1741 }
1742 
IcreateDynDefinemethodStatic(AbckitGraph * graph,AbckitInst * acc,AbckitCoreFunction * function,uint64_t imm0)1743 AbckitInst *IcreateDynDefinemethodStatic(AbckitGraph *graph, AbckitInst *acc, AbckitCoreFunction *function,
1744                                          uint64_t imm0)
1745 {
1746     LIBABCKIT_LOG_FUNC;
1747     auto imm0BitSize = GetBitLengthUnsigned(imm0);
1748     if (imm0BitSize > AbckitBitImmSize::BITSIZE_8) {
1749         LIBABCKIT_LOG(DEBUG) << "Immediate type overflow\n";
1750         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1751         return nullptr;
1752     }
1753     auto methodOffset = GetMethodOffset(graph, function);
1754     return CreateDynInst(graph, acc, methodOffset, imm0,
1755                          compiler::IntrinsicInst::IntrinsicId::DYN_DEFINEMETHOD_IMM16_ID16_IMM8, true);
1756 }
1757 
IcreateNewArrayStatic(AbckitGraph * graph,AbckitCoreClass * inputClass,AbckitInst *)1758 AbckitInst *IcreateNewArrayStatic(AbckitGraph *graph, AbckitCoreClass *inputClass, AbckitInst * /*inputSize*/)
1759 {
1760     LIBABCKIT_LOG_FUNC;
1761 
1762     return CreateDynInst(graph, GetClassOffset(graph, inputClass), compiler::DataType::REFERENCE,
1763                          compiler::IntrinsicInst::IntrinsicId::INTRINSIC_ABCKIT_NEW_ARRAY, false);
1764 }
1765 
IcreateNewObjectStatic(AbckitGraph * graph,AbckitCoreClass * inputClass)1766 AbckitInst *IcreateNewObjectStatic(AbckitGraph *graph, AbckitCoreClass *inputClass)
1767 {
1768     LIBABCKIT_LOG_FUNC;
1769 
1770     auto typeId = GetClassOffset(graph, inputClass);
1771     if (statuses::GetLastError() != ABCKIT_STATUS_NO_ERROR) {
1772         return nullptr;
1773     }
1774     return CreateDynInst(graph, typeId, compiler::DataType::REFERENCE,
1775                          compiler::IntrinsicInst::IntrinsicId::INTRINSIC_ABCKIT_NEW_OBJECT, false);
1776 }
1777 
1778 constexpr size_t MAX_NUM_SHORT_CALL_ARGS = 2;
1779 constexpr size_t MAX_NUM_NON_RANGE_ARGS = 4;
1780 
IcreateInitObjectStatic(AbckitGraph * graph,AbckitCoreFunction * inputFunction,size_t argCount,va_list argp)1781 AbckitInst *IcreateInitObjectStatic(AbckitGraph *graph, AbckitCoreFunction *inputFunction, size_t argCount,
1782                                     va_list argp)
1783 {
1784     LIBABCKIT_LOG_FUNC;
1785 
1786     auto func = inputFunction->GetArkTSImpl()->GetStaticImpl();
1787     auto constrName = pandasm::MangleFunctionName(func->name, func->params, func->returnType);
1788     uint64_t methodId;
1789     bool found = false;
1790     for (const auto &[offset, name] : graph->irInterface->methods) {
1791         if (name == constrName) {
1792             methodId = offset;
1793             found = true;
1794             break;
1795         }
1796     }
1797 
1798     if (!found) {
1799         LIBABCKIT_LOG(DEBUG) << "Can not find method id for '" << constrName << "'\n";
1800         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1801         return nullptr;
1802     }
1803 
1804     AbckitInst *inst {nullptr};
1805     if (argCount > MAX_NUM_NON_RANGE_ARGS) {
1806         inst = CreateDynInst(graph, methodId, ark::compiler::DataType::REFERENCE,
1807                              compiler::IntrinsicInst::IntrinsicId::INTRINSIC_ABCKIT_INIT_OBJECT_RANGE, false);
1808     } else if (argCount > MAX_NUM_SHORT_CALL_ARGS) {
1809         inst = CreateDynInst(graph, methodId, ark::compiler::DataType::REFERENCE,
1810                              compiler::IntrinsicInst::IntrinsicId::INTRINSIC_ABCKIT_INIT_OBJECT, false);
1811     } else {
1812         inst = CreateDynInst(graph, methodId, ark::compiler::DataType::REFERENCE,
1813                              compiler::IntrinsicInst::IntrinsicId::INTRINSIC_ABCKIT_INIT_OBJECT_SHORT, false);
1814     }
1815 
1816     inst->impl->CastToIntrinsic()->AllocateInputTypes(graph->impl->GetAllocator(), argCount);
1817     for (size_t i = 0; i < argCount; i++) {
1818         // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
1819         auto *arg = va_arg(argp, AbckitInst *);
1820         inst->impl->CastToIntrinsic()->AppendInput(arg->impl, arg->impl->GetType());
1821     }
1822     va_end(argp);
1823 
1824     return inst;
1825 }
1826 
IcreateIfStaticStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,AbckitIsaApiStaticConditionCode cc)1827 AbckitInst *IcreateIfStaticStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
1828                                   AbckitIsaApiStaticConditionCode cc)
1829 {
1830     LIBABCKIT_LOG_FUNC;
1831     auto instImpl = graph->impl->CreateInstIf(compiler::DataType::NO_TYPE, 0, input0->impl, input1->impl,
1832                                               input0->impl->GetType(), CcToCc(cc), graph->impl->GetMethod());
1833     return CreateInstFromImpl(graph, instImpl);
1834 }
1835 
IcreateIfDynamicStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,AbckitIsaApiDynamicConditionCode cc)1836 AbckitInst *IcreateIfDynamicStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
1837                                    AbckitIsaApiDynamicConditionCode cc)
1838 {
1839     LIBABCKIT_LOG_FUNC;
1840     auto instImpl = graph->impl->CreateInstIf(compiler::DataType::NO_TYPE, 0, input0->impl, input1->impl,
1841                                               input0->impl->GetType(), CcToCc(cc), graph->impl->GetMethod());
1842     return CreateInstFromImpl(graph, instImpl);
1843 }
1844 
IcreateTryStatic(AbckitGraph * graph)1845 AbckitInst *IcreateTryStatic(AbckitGraph *graph)
1846 {
1847     LIBABCKIT_LOG_FUNC;
1848     auto instImpl = graph->impl->CreateInstTry();
1849     return CreateInstFromImpl(graph, instImpl);
1850 }
1851 
IcreateLoadArrayStatic(AbckitGraph * graph,AbckitInst * arrayRef,AbckitInst * idx,AbckitTypeId returnTypeId)1852 AbckitInst *IcreateLoadArrayStatic(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx, AbckitTypeId returnTypeId)
1853 {
1854     LIBABCKIT_LOG_FUNC;
1855     LIBABCKIT_LOG(DEBUG) << "IcreateLoadArrayStatic" << '\n';
1856 
1857     if (returnTypeId == ABCKIT_TYPE_ID_INVALID || IsDynamic(graph->function->owningModule->target) ||
1858         arrayRef->impl->GetType() != compiler::DataType::REFERENCE ||
1859         (idx->impl->GetType() != compiler::DataType::INT32 && idx->impl->GetType() != compiler::DataType::INT64)) {
1860         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1861         return nullptr;
1862     }
1863     // ARRAY VERIFICATION!!!
1864 
1865     auto intrinsicId = compiler::RuntimeInterface::IntrinsicId::INTRINSIC_ABCKIT_LOAD_ARRAY;
1866     auto dataType = TypeIdToType(returnTypeId);
1867     auto loadArrayImpl = graph->impl->CreateInstIntrinsic(dataType, 0, intrinsicId);
1868     size_t argsCount {2U};
1869 
1870     loadArrayImpl->ReserveInputs(argsCount);
1871     loadArrayImpl->AllocateInputTypes(graph->impl->GetAllocator(), argsCount);
1872     loadArrayImpl->AppendInput(idx->impl, compiler::DataType::INT64);
1873     loadArrayImpl->AppendInput(arrayRef->impl, compiler::DataType::REFERENCE);
1874 
1875     return CreateInstFromImpl(graph, loadArrayImpl);
1876 }
1877 
IcreateStoreArrayBody(AbckitInst * arrayRef,AbckitInst * idx,AbckitInst * value,AbckitTypeId valueTypeId,bool isWide)1878 static AbckitInst *IcreateStoreArrayBody(AbckitInst *arrayRef, AbckitInst *idx, AbckitInst *value,
1879                                          AbckitTypeId valueTypeId, bool isWide)
1880 {
1881     auto *graph = arrayRef->graph;
1882     if (valueTypeId == ABCKIT_TYPE_ID_INVALID || IsDynamic(graph->function->owningModule->target) ||
1883         arrayRef->impl->GetType() != compiler::DataType::REFERENCE) {
1884         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1885         return nullptr;
1886     }
1887 
1888     // ARRAY VERIFICATION!!! :()
1889     auto dataType = TypeIdToType(valueTypeId);
1890 
1891     auto intrinsicId = compiler::RuntimeInterface::IntrinsicId::INTRINSIC_ABCKIT_STORE_ARRAY;
1892     auto storeArrayImpl = graph->impl->CreateInstIntrinsic(dataType, 0, intrinsicId);
1893     size_t argsCount {3U};
1894 
1895     storeArrayImpl->ReserveInputs(argsCount);
1896     storeArrayImpl->AllocateInputTypes(graph->impl->GetAllocator(), argsCount);
1897     storeArrayImpl->AppendInput(value->impl, dataType);
1898     storeArrayImpl->AppendInput(arrayRef->impl, compiler::DataType::REFERENCE);
1899     if (isWide) {
1900         storeArrayImpl->AppendInput(idx->impl, compiler::DataType::INT64);
1901     } else {
1902         storeArrayImpl->AppendInput(idx->impl, compiler::DataType::INT32);
1903     }
1904 
1905     return CreateInstFromImpl(graph, storeArrayImpl);
1906 }
1907 
IcreateStoreArrayStatic(AbckitGraph * graph,AbckitInst * arrayRef,AbckitInst * idx,AbckitInst * value,AbckitTypeId valueTypeId)1908 AbckitInst *IcreateStoreArrayStatic([[maybe_unused]] AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx,
1909                                     AbckitInst *value, AbckitTypeId valueTypeId)
1910 {
1911     LIBABCKIT_LOG_FUNC;
1912     LIBABCKIT_LOG(DEBUG) << "IcreateStoreArrayStatic" << '\n';
1913 
1914     if (idx->impl->GetType() != compiler::DataType::INT32) {
1915         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1916         return nullptr;
1917     }
1918 
1919     return IcreateStoreArrayBody(arrayRef, idx, value, valueTypeId, false);
1920 }
1921 
IcreateStoreArrayWideStatic(AbckitGraph * graph,AbckitInst * arrayRef,AbckitInst * idx,AbckitInst * value,AbckitTypeId valueTypeId)1922 AbckitInst *IcreateStoreArrayWideStatic([[maybe_unused]] AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx,
1923                                         AbckitInst *value, AbckitTypeId valueTypeId)
1924 {
1925     LIBABCKIT_LOG_FUNC;
1926     LIBABCKIT_LOG(DEBUG) << "IcreateStoreArrayWideStatic" << '\n';
1927 
1928     if (idx->impl->GetType() != compiler::DataType::INT32 && idx->impl->GetType() != compiler::DataType::INT64) {
1929         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1930         return nullptr;
1931     }
1932 
1933     return IcreateStoreArrayBody(arrayRef, idx, value, valueTypeId, true);
1934 }
1935 
IcreateLenArrayStatic(AbckitGraph * graph,AbckitInst * arr)1936 AbckitInst *IcreateLenArrayStatic(AbckitGraph *graph, AbckitInst *arr)
1937 {
1938     LIBABCKIT_LOG_FUNC;
1939     LIBABCKIT_LOG(DEBUG) << "IcreateLenArrayStatic" << '\n';
1940 
1941     if (IsDynamic(graph->function->owningModule->target) || arr->impl->GetType() != compiler::DataType::REFERENCE) {
1942         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1943         return nullptr;
1944     }
1945 
1946     auto lenArrayImpl = graph->impl->CreateInstLenArray(compiler::DataType::INT32, 0, arr->impl);
1947     return CreateInstFromImpl(graph, lenArrayImpl);
1948 }
1949 
IcreateLoadConstArrayStatic(AbckitGraph * graph,AbckitLiteralArray * literalArray)1950 AbckitInst *IcreateLoadConstArrayStatic(AbckitGraph *graph, AbckitLiteralArray *literalArray)
1951 {
1952     LIBABCKIT_LOG_FUNC;
1953 
1954     return CreateDynInst(graph, GetLiteralArrayOffset(graph, literalArray), compiler::DataType::REFERENCE,
1955                          compiler::IntrinsicInst::IntrinsicId::INTRINSIC_ABCKIT_LOAD_CONST_ARRAY, false);
1956 }
1957 
IcreateCheckCastStatic(AbckitGraph * graph,AbckitInst * inputObj,AbckitType * targetType)1958 AbckitInst *IcreateCheckCastStatic(AbckitGraph *graph, AbckitInst *inputObj, AbckitType *targetType)
1959 {
1960     LIBABCKIT_LOG_FUNC;
1961 
1962     if (targetType->id != AbckitTypeId::ABCKIT_TYPE_ID_REFERENCE || targetType->klass == nullptr) {
1963         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1964         return nullptr;
1965     }
1966 
1967     auto intrImpl = graph->impl->CreateInstIntrinsic(compiler::DataType::REFERENCE, 0,
1968                                                      compiler::IntrinsicInst::IntrinsicId::INTRINSIC_ABCKIT_CHECK_CAST);
1969     size_t argsCount {1U};
1970     intrImpl->ReserveInputs(argsCount);
1971     intrImpl->AllocateInputTypes(graph->impl->GetAllocator(), argsCount);
1972     intrImpl->AppendInput(inputObj->impl, inputObj->impl->GetType());
1973     intrImpl->AddImm(graph->impl->GetAllocator(), GetClassOffset(graph, targetType->klass));
1974 
1975     return CreateInstFromImpl(graph, intrImpl);
1976 }
1977 
IcreateIsInstanceStatic(AbckitGraph * graph,AbckitInst * inputObj,AbckitType * targetType)1978 AbckitInst *IcreateIsInstanceStatic(AbckitGraph *graph, AbckitInst *inputObj, AbckitType *targetType)
1979 {
1980     LIBABCKIT_LOG_FUNC;
1981 
1982     if (targetType->id != AbckitTypeId::ABCKIT_TYPE_ID_REFERENCE || targetType->klass == nullptr) {
1983         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
1984         return nullptr;
1985     }
1986     auto intrImpl = graph->impl->CreateInstIntrinsic(
1987         compiler::DataType::INT32, 0, compiler::IntrinsicInst::IntrinsicId::INTRINSIC_ABCKIT_IS_INSTANCE);
1988     size_t argsCount {1U};
1989     intrImpl->ReserveInputs(argsCount);
1990     intrImpl->AllocateInputTypes(graph->impl->GetAllocator(), argsCount);
1991     intrImpl->AppendInput(inputObj->impl, inputObj->impl->GetType());
1992     intrImpl->AddImm(graph->impl->GetAllocator(), GetClassOffset(graph, targetType->klass));
1993     return CreateInstFromImpl(graph, intrImpl);
1994 }
1995 
IcreateLoadUndefinedStatic(AbckitGraph * graph)1996 AbckitInst *IcreateLoadUndefinedStatic(AbckitGraph *graph)
1997 {
1998     auto instImpl = graph->impl->CreateInstLoadUndefined(compiler::DataType::REFERENCE);
1999     return CreateInstFromImpl(graph, instImpl);
2000 }
2001 
IcreateCastStatic(AbckitGraph * graph,AbckitInst * input0,AbckitTypeId targetTypeId)2002 AbckitInst *IcreateCastStatic(AbckitGraph *graph, AbckitInst *input0, AbckitTypeId targetTypeId)
2003 {
2004     if (targetTypeId <= ABCKIT_TYPE_ID_INVALID || targetTypeId > ABCKIT_TYPE_ID_REFERENCE) {
2005         LIBABCKIT_LOG(DEBUG) << "Bad cast destination type\n";
2006         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
2007         return nullptr;
2008     }
2009 
2010     auto instImpl = graph->impl->CreateInstCast(TypeIdToType(targetTypeId), 0, input0->impl, input0->impl->GetType());
2011     return CreateInstFromImpl(graph, instImpl);
2012 }
2013 
IcreateIsUndefinedStatic(AbckitGraph * graph,AbckitInst * inputObj)2014 AbckitInst *IcreateIsUndefinedStatic(AbckitGraph *graph, AbckitInst *inputObj)
2015 {
2016     LIBABCKIT_LOG_FUNC;
2017     auto intrImpl = graph->impl->CreateInstIntrinsic(
2018         compiler::DataType::BOOL, 0, compiler::IntrinsicInst::IntrinsicId::INTRINSIC_ABCKIT_IS_UNDEFINED);
2019     size_t argsCount {1U};
2020     intrImpl->ReserveInputs(argsCount);
2021     intrImpl->AllocateInputTypes(graph->impl->GetAllocator(), argsCount);
2022     intrImpl->AppendInput(inputObj->impl, inputObj->impl->GetType());
2023     return CreateInstFromImpl(graph, intrImpl);
2024 }
2025 
IcreateReturnStatic(AbckitGraph * graph,AbckitInst * input0)2026 AbckitInst *IcreateReturnStatic(AbckitGraph *graph, AbckitInst *input0)
2027 {
2028     auto instImpl = graph->impl->CreateInstReturn(input0->impl->GetType(), compiler::INVALID_PC, input0->impl);
2029     return CreateInstFromImpl(graph, instImpl);
2030 }
2031 
IcreateReturnVoidStatic(AbckitGraph * graph)2032 AbckitInst *IcreateReturnVoidStatic(AbckitGraph *graph)
2033 {
2034     auto instImpl = graph->impl->CreateInstReturnVoid();
2035     return CreateInstFromImpl(graph, instImpl);
2036 }
2037 
IcreateThrowStatic(AbckitGraph * graph,AbckitInst * input0)2038 AbckitInst *IcreateThrowStatic(AbckitGraph *graph, AbckitInst *input0)
2039 {
2040     LIBABCKIT_LOG_FUNC;
2041     auto intrImpl = graph->impl->CreateInstIntrinsic(compiler::DataType::REFERENCE, 0,
2042                                                      compiler::IntrinsicInst::IntrinsicId::INTRINSIC_ABCKIT_THROW);
2043     size_t argsCount {1U};
2044     intrImpl->ReserveInputs(argsCount);
2045     intrImpl->AllocateInputTypes(graph->impl->GetAllocator(), argsCount);
2046     intrImpl->AppendInput(input0->impl, compiler::DataType::REFERENCE);
2047     intrImpl->AddImm(graph->impl->GetAllocator(), IC_SLOT_VALUE);
2048     return CreateInstFromImpl(graph, intrImpl);
2049 }
2050 
IcreateSubStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2051 AbckitInst *IcreateSubStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2052 {
2053     LIBABCKIT_LOG_FUNC;
2054 
2055     auto subImpl = graph->impl->CreateInstSub(input0->impl->GetType(), 0, input0->impl, input1->impl);
2056     return CreateInstFromImpl(graph, subImpl);
2057 }
2058 
IcreateMulStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2059 AbckitInst *IcreateMulStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2060 {
2061     LIBABCKIT_LOG_FUNC;
2062 
2063     auto mulImpl = graph->impl->CreateInstMul(input0->impl->GetType(), 0, input0->impl, input1->impl);
2064     return CreateInstFromImpl(graph, mulImpl);
2065 }
2066 
IcreateDivStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2067 AbckitInst *IcreateDivStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2068 {
2069     LIBABCKIT_LOG_FUNC;
2070 
2071     auto divImpl = graph->impl->CreateInstDiv(input0->impl->GetType(), 0, input0->impl, input1->impl);
2072     return CreateInstFromImpl(graph, divImpl);
2073 }
2074 
IcreateModStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2075 AbckitInst *IcreateModStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2076 {
2077     LIBABCKIT_LOG_FUNC;
2078 
2079     auto modImpl = graph->impl->CreateInstMod(input0->impl->GetType(), 0, input0->impl, input1->impl);
2080     return CreateInstFromImpl(graph, modImpl);
2081 }
2082 
IcreateEqualsStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2083 AbckitInst *IcreateEqualsStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2084 {
2085     LIBABCKIT_LOG_FUNC;
2086 
2087     auto intrImpl = graph->impl->CreateInstIntrinsic(compiler::DataType::BOOL, compiler::INVALID_PC,
2088                                                      compiler::IntrinsicInst::IntrinsicId::INTRINSIC_ABCKIT_EQUALS);
2089     size_t argsCount {2U};
2090     intrImpl->ReserveInputs(argsCount);
2091     intrImpl->AllocateInputTypes(graph->impl->GetAllocator(), argsCount);
2092     intrImpl->AppendInput(input0->impl, input0->impl->GetType());
2093     intrImpl->AppendInput(input1->impl, input1->impl->GetType());
2094 
2095     return CreateInstFromImpl(graph, intrImpl);
2096 }
2097 
IcreateAddIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2098 AbckitInst *IcreateAddIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2099 {
2100     LIBABCKIT_LOG_FUNC;
2101     auto addIImpl = graph->impl->CreateInstAddI(compiler::DataType::INT32, 0, input0->impl, imm);
2102     return CreateInstFromImpl(graph, addIImpl);
2103 }
2104 
IcreateSubIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2105 AbckitInst *IcreateSubIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2106 {
2107     LIBABCKIT_LOG_FUNC;
2108     auto subIImpl = graph->impl->CreateInstSubI(compiler::DataType::INT32, 0, input0->impl, imm);
2109     return CreateInstFromImpl(graph, subIImpl);
2110 }
2111 
IcreateMulIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2112 AbckitInst *IcreateMulIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2113 {
2114     LIBABCKIT_LOG_FUNC;
2115     auto mulIImpl = graph->impl->CreateInstMulI(compiler::DataType::INT32, 0, input0->impl, imm);
2116     return CreateInstFromImpl(graph, mulIImpl);
2117 }
2118 
IcreateDivIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2119 AbckitInst *IcreateDivIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2120 {
2121     LIBABCKIT_LOG_FUNC;
2122     auto divIImpl = graph->impl->CreateInstDivI(compiler::DataType::INT32, 0, input0->impl, imm);
2123     return CreateInstFromImpl(graph, divIImpl);
2124 }
2125 
IcreateModIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2126 AbckitInst *IcreateModIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2127 {
2128     LIBABCKIT_LOG_FUNC;
2129     auto modIImpl = graph->impl->CreateInstModI(compiler::DataType::INT32, 0, input0->impl, imm);
2130     return CreateInstFromImpl(graph, modIImpl);
2131 }
2132 
IcreateShlStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2133 AbckitInst *IcreateShlStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2134 {
2135     LIBABCKIT_LOG_FUNC;
2136     auto shlImpl = graph->impl->CreateInstShl(compiler::DataType::INT64, 0, input0->impl, input1->impl);
2137     return CreateInstFromImpl(graph, shlImpl);
2138 }
2139 
IcreateShrStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2140 AbckitInst *IcreateShrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2141 {
2142     LIBABCKIT_LOG_FUNC;
2143     auto shrImpl = graph->impl->CreateInstShr(compiler::DataType::INT64, 0, input0->impl, input1->impl);
2144     return CreateInstFromImpl(graph, shrImpl);
2145 }
2146 
IcreateAShrStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2147 AbckitInst *IcreateAShrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2148 {
2149     LIBABCKIT_LOG_FUNC;
2150     auto aShrImpl = graph->impl->CreateInstAShr(compiler::DataType::INT64, 0, input0->impl, input1->impl);
2151     return CreateInstFromImpl(graph, aShrImpl);
2152 }
2153 
IcreateShlIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2154 AbckitInst *IcreateShlIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2155 {
2156     LIBABCKIT_LOG_FUNC;
2157     auto shlIImpl = graph->impl->CreateInstShlI(compiler::DataType::INT32, 0, input0->impl, imm);
2158     return CreateInstFromImpl(graph, shlIImpl);
2159 }
2160 
IcreateShrIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2161 AbckitInst *IcreateShrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2162 {
2163     LIBABCKIT_LOG_FUNC;
2164     auto shrIImpl = graph->impl->CreateInstShrI(compiler::DataType::INT32, 0, input0->impl, imm);
2165     return CreateInstFromImpl(graph, shrIImpl);
2166 }
2167 
IcreateAShrIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2168 AbckitInst *IcreateAShrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2169 {
2170     LIBABCKIT_LOG_FUNC;
2171     auto aShrIImpl = graph->impl->CreateInstAShrI(compiler::DataType::INT32, 0, input0->impl, imm);
2172     return CreateInstFromImpl(graph, aShrIImpl);
2173 }
2174 
IcreateNotStatic(AbckitGraph * graph,AbckitInst * input0)2175 AbckitInst *IcreateNotStatic(AbckitGraph *graph, AbckitInst *input0)
2176 {
2177     LIBABCKIT_LOG_FUNC;
2178     auto notImpl = graph->impl->CreateInstNot(compiler::DataType::INT64, 0, input0->impl);
2179     return CreateInstFromImpl(graph, notImpl);
2180 }
2181 
IcreateOrStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2182 AbckitInst *IcreateOrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2183 {
2184     LIBABCKIT_LOG_FUNC;
2185     auto orImpl = graph->impl->CreateInstOr(compiler::DataType::INT64, 0, input0->impl, input1->impl);
2186     return CreateInstFromImpl(graph, orImpl);
2187 }
2188 
IcreateXorStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2189 AbckitInst *IcreateXorStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2190 {
2191     LIBABCKIT_LOG_FUNC;
2192     auto xorImpl = graph->impl->CreateInstXor(compiler::DataType::INT64, 0, input0->impl, input1->impl);
2193     return CreateInstFromImpl(graph, xorImpl);
2194 }
2195 
IcreateAndStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2196 AbckitInst *IcreateAndStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2197 {
2198     LIBABCKIT_LOG_FUNC;
2199     auto andImpl = graph->impl->CreateInstAnd(compiler::DataType::INT64, 0, input0->impl, input1->impl);
2200     return CreateInstFromImpl(graph, andImpl);
2201 }
2202 
IcreateOrIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2203 AbckitInst *IcreateOrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2204 {
2205     LIBABCKIT_LOG_FUNC;
2206     auto orIImpl = graph->impl->CreateInstOrI(compiler::DataType::INT32, 0, input0->impl, imm);
2207     return CreateInstFromImpl(graph, orIImpl);
2208 }
2209 
IcreateXorIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2210 AbckitInst *IcreateXorIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2211 {
2212     LIBABCKIT_LOG_FUNC;
2213     auto xorIImpl = graph->impl->CreateInstXorI(compiler::DataType::INT32, 0, input0->impl, imm);
2214     return CreateInstFromImpl(graph, xorIImpl);
2215 }
2216 
IcreateAndIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2217 AbckitInst *IcreateAndIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2218 {
2219     LIBABCKIT_LOG_FUNC;
2220     auto andIImpl = graph->impl->CreateInstAndI(compiler::DataType::INT32, 0, input0->impl, imm);
2221     return CreateInstFromImpl(graph, andIImpl);
2222 }
2223 
IcreateNegStatic(AbckitGraph * graph,AbckitInst * input0)2224 AbckitInst *IcreateNegStatic(AbckitGraph *graph, AbckitInst *input0)
2225 {
2226     LIBABCKIT_LOG_FUNC;
2227 
2228     auto negImpl = graph->impl->CreateInstNeg(input0->impl->GetType(), 0, input0->impl);
2229     return CreateInstFromImpl(graph, negImpl);
2230 }
2231 
IcreateAddStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2232 AbckitInst *IcreateAddStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2233 {
2234     LIBABCKIT_LOG_FUNC;
2235 
2236     auto addImpl = graph->impl->CreateInstAdd(input0->impl->GetType(), 0, input0->impl, input1->impl);
2237     return CreateInstFromImpl(graph, addImpl);
2238 }
2239 
IcreateCallStaticStatic(AbckitGraph * graph,AbckitCoreFunction * inputFunction,size_t argCount,va_list argp)2240 AbckitInst *IcreateCallStaticStatic(AbckitGraph *graph, AbckitCoreFunction *inputFunction, size_t argCount,
2241                                     va_list argp)
2242 {
2243     LIBABCKIT_LOG_FUNC;
2244     LIBABCKIT_LOG(DEBUG) << "argCount: " << argCount << "\n";
2245     auto *func = inputFunction->GetArkTSImpl()->GetStaticImpl();
2246     size_t paramCount = func->GetParamsNum();
2247     auto methodOffset = GetMethodOffset(graph, inputFunction);
2248     auto methodPtr = reinterpret_cast<compiler::RuntimeInterface::MethodPtr>(methodOffset);
2249 
2250     auto callImpl = graph->impl->CreateInstCallStatic(graph->impl->GetRuntime()->GetMethodReturnType(methodPtr), 0,
2251                                                       methodOffset, methodPtr);
2252     callImpl->ClearFlag(compiler::inst_flags::REQUIRE_STATE);
2253     callImpl->AllocateInputTypes(graph->impl->GetAllocator(), paramCount);
2254     for (size_t i = 0; i < argCount; i++) {
2255         LIBABCKIT_LOG(DEBUG) << "append arg " << i << '\n';
2256         // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
2257         auto *inst = va_arg(argp, AbckitInst *);
2258         callImpl->AppendInput(inst->impl, inst->impl->GetType());
2259     }
2260     va_end(argp);
2261 
2262     return CreateInstFromImpl(graph, callImpl);
2263 }
2264 
IcreateCallVirtualStatic(AbckitGraph * graph,AbckitInst * inputObj,AbckitCoreFunction * inputFunction,size_t argCount,va_list argp)2265 AbckitInst *IcreateCallVirtualStatic(AbckitGraph *graph, AbckitInst *inputObj, AbckitCoreFunction *inputFunction,
2266                                      size_t argCount, va_list argp)
2267 {
2268     LIBABCKIT_LOG_FUNC;
2269     LIBABCKIT_LOG(DEBUG) << "argCount: " << argCount << "\n";
2270     auto *func = inputFunction->GetArkTSImpl()->GetStaticImpl();
2271     size_t paramCount = func->GetParamsNum();
2272     auto methodOffset = GetMethodOffset(graph, inputFunction);
2273     auto methodPtr = reinterpret_cast<compiler::RuntimeInterface::MethodPtr>(methodOffset);
2274 
2275     auto callImpl = graph->impl->CreateInstCallVirtual(graph->impl->GetRuntime()->GetMethodReturnType(methodPtr), 0,
2276                                                        methodOffset, methodPtr);
2277     callImpl->ClearFlag(compiler::inst_flags::REQUIRE_STATE);
2278     callImpl->AllocateInputTypes(graph->impl->GetAllocator(), paramCount + 1);
2279     callImpl->AppendInput(inputObj->impl, compiler::DataType::REFERENCE);
2280     for (size_t i = 0; i < argCount; i++) {
2281         LIBABCKIT_LOG(DEBUG) << "append arg " << i << '\n';
2282         // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
2283         auto *inst = va_arg(argp, AbckitInst *);
2284         callImpl->AppendInput(inst->impl, inst->impl->GetType());
2285     }
2286     va_end(argp);
2287 
2288     return CreateInstFromImpl(graph, callImpl);
2289 }
2290 
IcreateLoadStringStatic(AbckitGraph * graph,AbckitString * str)2291 AbckitInst *IcreateLoadStringStatic(AbckitGraph *graph, AbckitString *str)
2292 {
2293     LIBABCKIT_LOG_FUNC;
2294     LIBABCKIT_LOG(DEBUG) << GetStringOffset(graph, str) << '\n';
2295     auto intrinsicId = compiler::RuntimeInterface::IntrinsicId::INTRINSIC_ABCKIT_LOAD_STRING;
2296     auto dataType =
2297         IsDynamic(graph->function->owningModule->target) ? compiler::DataType::ANY : compiler::DataType::REFERENCE;
2298     auto loadStringImpl = graph->impl->CreateInstIntrinsic(dataType, 0, intrinsicId);
2299     auto *loadString = CreateInstFromImpl(graph, loadStringImpl);
2300     loadStringImpl->AddImm(graph->impl->GetAllocator(), GetStringOffset(graph, str));
2301     return loadString;
2302 }
2303 
IcreateCmpStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2304 AbckitInst *IcreateCmpStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2305 {
2306     LIBABCKIT_LOG_FUNC;
2307 
2308     if (input0->impl->GetType() != input1->impl->GetType()) {
2309         SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
2310         return nullptr;
2311     }
2312 
2313     auto cmpImpl =
2314         graph->impl->CreateInstCmp(compiler::DataType::INT32, 0, input0->impl, input1->impl, input0->impl->GetType());
2315     return CreateInstFromImpl(graph, cmpImpl);
2316 }
2317 
2318 }  // namespace libabckit
2319