1 /**
2 * Copyright (c) 2024-2025 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
IcreateLoadNullValueStatic(AbckitGraph * graph)1996 AbckitInst *IcreateLoadNullValueStatic(AbckitGraph *graph)
1997 {
1998 auto instImpl = graph->impl->CreateInstLoadUniqueObject(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_NULL_VALUE);
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
IcreateStrictEqualsStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2098 AbckitInst *IcreateStrictEqualsStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2099 {
2100 LIBABCKIT_LOG_FUNC;
2101
2102 auto intrImpl = graph->impl->CreateInstIntrinsic(compiler::DataType::BOOL, compiler::INVALID_PC,
2103 compiler::IntrinsicInst::IntrinsicId::INTRINSIC_ABCKIT_EQUALS);
2104 size_t argsCount {2U};
2105 intrImpl->ReserveInputs(argsCount);
2106 intrImpl->AllocateInputTypes(graph->impl->GetAllocator(), argsCount);
2107 intrImpl->AppendInput(input0->impl, input0->impl->GetType());
2108 intrImpl->AppendInput(input1->impl, input1->impl->GetType());
2109
2110 return CreateInstFromImpl(graph, intrImpl);
2111 }
2112
IcreateAddIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2113 AbckitInst *IcreateAddIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2114 {
2115 LIBABCKIT_LOG_FUNC;
2116 auto addIImpl = graph->impl->CreateInstAddI(compiler::DataType::INT32, 0, input0->impl, imm);
2117 return CreateInstFromImpl(graph, addIImpl);
2118 }
2119
IcreateSubIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2120 AbckitInst *IcreateSubIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2121 {
2122 LIBABCKIT_LOG_FUNC;
2123 auto subIImpl = graph->impl->CreateInstSubI(compiler::DataType::INT32, 0, input0->impl, imm);
2124 return CreateInstFromImpl(graph, subIImpl);
2125 }
2126
IcreateMulIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2127 AbckitInst *IcreateMulIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2128 {
2129 LIBABCKIT_LOG_FUNC;
2130 auto mulIImpl = graph->impl->CreateInstMulI(compiler::DataType::INT32, 0, input0->impl, imm);
2131 return CreateInstFromImpl(graph, mulIImpl);
2132 }
2133
IcreateDivIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2134 AbckitInst *IcreateDivIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2135 {
2136 LIBABCKIT_LOG_FUNC;
2137 auto divIImpl = graph->impl->CreateInstDivI(compiler::DataType::INT32, 0, input0->impl, imm);
2138 return CreateInstFromImpl(graph, divIImpl);
2139 }
2140
IcreateModIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2141 AbckitInst *IcreateModIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2142 {
2143 LIBABCKIT_LOG_FUNC;
2144 auto modIImpl = graph->impl->CreateInstModI(compiler::DataType::INT32, 0, input0->impl, imm);
2145 return CreateInstFromImpl(graph, modIImpl);
2146 }
2147
IcreateShlStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2148 AbckitInst *IcreateShlStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2149 {
2150 LIBABCKIT_LOG_FUNC;
2151 auto shlImpl = graph->impl->CreateInstShl(compiler::DataType::INT64, 0, input0->impl, input1->impl);
2152 return CreateInstFromImpl(graph, shlImpl);
2153 }
2154
IcreateShrStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2155 AbckitInst *IcreateShrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2156 {
2157 LIBABCKIT_LOG_FUNC;
2158 auto shrImpl = graph->impl->CreateInstShr(compiler::DataType::INT64, 0, input0->impl, input1->impl);
2159 return CreateInstFromImpl(graph, shrImpl);
2160 }
2161
IcreateAShrStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2162 AbckitInst *IcreateAShrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2163 {
2164 LIBABCKIT_LOG_FUNC;
2165 auto aShrImpl = graph->impl->CreateInstAShr(compiler::DataType::INT64, 0, input0->impl, input1->impl);
2166 return CreateInstFromImpl(graph, aShrImpl);
2167 }
2168
IcreateShlIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2169 AbckitInst *IcreateShlIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2170 {
2171 LIBABCKIT_LOG_FUNC;
2172 auto shlIImpl = graph->impl->CreateInstShlI(compiler::DataType::INT32, 0, input0->impl, imm);
2173 return CreateInstFromImpl(graph, shlIImpl);
2174 }
2175
IcreateShrIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2176 AbckitInst *IcreateShrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2177 {
2178 LIBABCKIT_LOG_FUNC;
2179 auto shrIImpl = graph->impl->CreateInstShrI(compiler::DataType::INT32, 0, input0->impl, imm);
2180 return CreateInstFromImpl(graph, shrIImpl);
2181 }
2182
IcreateAShrIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2183 AbckitInst *IcreateAShrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2184 {
2185 LIBABCKIT_LOG_FUNC;
2186 auto aShrIImpl = graph->impl->CreateInstAShrI(compiler::DataType::INT32, 0, input0->impl, imm);
2187 return CreateInstFromImpl(graph, aShrIImpl);
2188 }
2189
IcreateNotStatic(AbckitGraph * graph,AbckitInst * input0)2190 AbckitInst *IcreateNotStatic(AbckitGraph *graph, AbckitInst *input0)
2191 {
2192 LIBABCKIT_LOG_FUNC;
2193 auto notImpl = graph->impl->CreateInstNot(compiler::DataType::INT64, 0, input0->impl);
2194 return CreateInstFromImpl(graph, notImpl);
2195 }
2196
IcreateOrStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2197 AbckitInst *IcreateOrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2198 {
2199 LIBABCKIT_LOG_FUNC;
2200 auto orImpl = graph->impl->CreateInstOr(compiler::DataType::INT64, 0, input0->impl, input1->impl);
2201 return CreateInstFromImpl(graph, orImpl);
2202 }
2203
IcreateXorStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2204 AbckitInst *IcreateXorStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2205 {
2206 LIBABCKIT_LOG_FUNC;
2207 auto xorImpl = graph->impl->CreateInstXor(compiler::DataType::INT64, 0, input0->impl, input1->impl);
2208 return CreateInstFromImpl(graph, xorImpl);
2209 }
2210
IcreateAndStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2211 AbckitInst *IcreateAndStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2212 {
2213 LIBABCKIT_LOG_FUNC;
2214 auto andImpl = graph->impl->CreateInstAnd(compiler::DataType::INT64, 0, input0->impl, input1->impl);
2215 return CreateInstFromImpl(graph, andImpl);
2216 }
2217
IcreateOrIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2218 AbckitInst *IcreateOrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2219 {
2220 LIBABCKIT_LOG_FUNC;
2221 auto orIImpl = graph->impl->CreateInstOrI(compiler::DataType::INT32, 0, input0->impl, imm);
2222 return CreateInstFromImpl(graph, orIImpl);
2223 }
2224
IcreateXorIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2225 AbckitInst *IcreateXorIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2226 {
2227 LIBABCKIT_LOG_FUNC;
2228 auto xorIImpl = graph->impl->CreateInstXorI(compiler::DataType::INT32, 0, input0->impl, imm);
2229 return CreateInstFromImpl(graph, xorIImpl);
2230 }
2231
IcreateAndIStatic(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)2232 AbckitInst *IcreateAndIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
2233 {
2234 LIBABCKIT_LOG_FUNC;
2235 auto andIImpl = graph->impl->CreateInstAndI(compiler::DataType::INT32, 0, input0->impl, imm);
2236 return CreateInstFromImpl(graph, andIImpl);
2237 }
2238
IcreateNegStatic(AbckitGraph * graph,AbckitInst * input0)2239 AbckitInst *IcreateNegStatic(AbckitGraph *graph, AbckitInst *input0)
2240 {
2241 LIBABCKIT_LOG_FUNC;
2242
2243 auto negImpl = graph->impl->CreateInstNeg(input0->impl->GetType(), 0, input0->impl);
2244 return CreateInstFromImpl(graph, negImpl);
2245 }
2246
IcreateAddStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2247 AbckitInst *IcreateAddStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2248 {
2249 LIBABCKIT_LOG_FUNC;
2250
2251 auto addImpl = graph->impl->CreateInstAdd(input0->impl->GetType(), 0, input0->impl, input1->impl);
2252 return CreateInstFromImpl(graph, addImpl);
2253 }
2254
IcreateCallStaticStatic(AbckitGraph * graph,AbckitCoreFunction * inputFunction,size_t argCount,va_list argp)2255 AbckitInst *IcreateCallStaticStatic(AbckitGraph *graph, AbckitCoreFunction *inputFunction, size_t argCount,
2256 va_list argp)
2257 {
2258 LIBABCKIT_LOG_FUNC;
2259 LIBABCKIT_LOG(DEBUG) << "argCount: " << argCount << "\n";
2260 auto *func = inputFunction->GetArkTSImpl()->GetStaticImpl();
2261 size_t paramCount = func->GetParamsNum();
2262 auto methodOffset = GetMethodOffset(graph, inputFunction);
2263 auto methodPtr = reinterpret_cast<compiler::RuntimeInterface::MethodPtr>(methodOffset);
2264
2265 auto callImpl = graph->impl->CreateInstCallStatic(graph->impl->GetRuntime()->GetMethodReturnType(methodPtr), 0,
2266 methodOffset, methodPtr);
2267 callImpl->ClearFlag(compiler::inst_flags::REQUIRE_STATE);
2268 callImpl->AllocateInputTypes(graph->impl->GetAllocator(), paramCount);
2269 for (size_t i = 0; i < argCount; i++) {
2270 LIBABCKIT_LOG(DEBUG) << "append arg " << i << '\n';
2271 // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
2272 auto *inst = va_arg(argp, AbckitInst *);
2273 callImpl->AppendInput(inst->impl, inst->impl->GetType());
2274 }
2275 va_end(argp);
2276
2277 return CreateInstFromImpl(graph, callImpl);
2278 }
2279
IcreateCallVirtualStatic(AbckitGraph * graph,AbckitInst * inputObj,AbckitCoreFunction * inputFunction,size_t argCount,va_list argp)2280 AbckitInst *IcreateCallVirtualStatic(AbckitGraph *graph, AbckitInst *inputObj, AbckitCoreFunction *inputFunction,
2281 size_t argCount, va_list argp)
2282 {
2283 LIBABCKIT_LOG_FUNC;
2284 LIBABCKIT_LOG(DEBUG) << "argCount: " << argCount << "\n";
2285 auto *func = inputFunction->GetArkTSImpl()->GetStaticImpl();
2286 size_t paramCount = func->GetParamsNum();
2287 auto methodOffset = GetMethodOffset(graph, inputFunction);
2288 auto methodPtr = reinterpret_cast<compiler::RuntimeInterface::MethodPtr>(methodOffset);
2289
2290 auto callImpl = graph->impl->CreateInstCallVirtual(graph->impl->GetRuntime()->GetMethodReturnType(methodPtr), 0,
2291 methodOffset, methodPtr);
2292 callImpl->ClearFlag(compiler::inst_flags::REQUIRE_STATE);
2293 callImpl->AllocateInputTypes(graph->impl->GetAllocator(), paramCount + 1);
2294 callImpl->AppendInput(inputObj->impl, compiler::DataType::REFERENCE);
2295 for (size_t i = 0; i < argCount; i++) {
2296 LIBABCKIT_LOG(DEBUG) << "append arg " << i << '\n';
2297 // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
2298 auto *inst = va_arg(argp, AbckitInst *);
2299 callImpl->AppendInput(inst->impl, inst->impl->GetType());
2300 }
2301 va_end(argp);
2302
2303 return CreateInstFromImpl(graph, callImpl);
2304 }
2305
IcreateLoadStringStatic(AbckitGraph * graph,AbckitString * str)2306 AbckitInst *IcreateLoadStringStatic(AbckitGraph *graph, AbckitString *str)
2307 {
2308 LIBABCKIT_LOG_FUNC;
2309 LIBABCKIT_LOG(DEBUG) << GetStringOffset(graph, str) << '\n';
2310 auto intrinsicId = compiler::RuntimeInterface::IntrinsicId::INTRINSIC_ABCKIT_LOAD_STRING;
2311 auto dataType =
2312 IsDynamic(graph->function->owningModule->target) ? compiler::DataType::ANY : compiler::DataType::REFERENCE;
2313 auto loadStringImpl = graph->impl->CreateInstIntrinsic(dataType, 0, intrinsicId);
2314 auto *loadString = CreateInstFromImpl(graph, loadStringImpl);
2315 loadStringImpl->AddImm(graph->impl->GetAllocator(), GetStringOffset(graph, str));
2316 return loadString;
2317 }
2318
IcreateCmpStatic(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)2319 AbckitInst *IcreateCmpStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
2320 {
2321 LIBABCKIT_LOG_FUNC;
2322
2323 if (input0->impl->GetType() != input1->impl->GetType()) {
2324 SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
2325 return nullptr;
2326 }
2327
2328 auto cmpImpl =
2329 graph->impl->CreateInstCmp(compiler::DataType::INT32, 0, input0->impl, input1->impl, input0->impl->GetType());
2330 return CreateInstFromImpl(graph, cmpImpl);
2331 }
2332
2333 } // namespace libabckit
2334