• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "libabckit/include/c/abckit.h"
17 #include "libabckit/include/c/ir_core.h"
18 #include "libabckit/include/c/isa/isa_static.h"
19 
20 #include "libabckit/include/c/metadata_core.h"
21 #include "libabckit/src/logger.h"
22 #include "libabckit/src/helpers_common.h"
23 #include "libabckit/src/metadata_inspect_impl.h"
24 #include "libabckit/src/ir_impl.h"
25 #include "libabckit/src/adapter_static/ir_static.h"
26 #include "scoped_timer.h"
27 
28 #include "libabckit/src/macros.h"
29 
30 #include <iostream>
31 
32 namespace libabckit {
33 
IcreateCmp(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)34 extern "C" AbckitInst *IcreateCmp(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
35 {
36     LIBABCKIT_CLEAR_LAST_ERROR;
37     LIBABCKIT_IMPLEMENTED;
38     LIBABCKIT_TIME_EXEC;
39 
40     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
41     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
42     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
43     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
44     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
45     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
46 
47     return IcreateCmpStatic(graph, input0, input1);
48 }
49 
IcreateLoadString(AbckitGraph * graph,AbckitString * str)50 extern "C" AbckitInst *IcreateLoadString(AbckitGraph *graph, AbckitString *str)
51 {
52     LIBABCKIT_CLEAR_LAST_ERROR;
53     LIBABCKIT_IMPLEMENTED;
54     LIBABCKIT_TIME_EXEC;
55 
56     LIBABCKIT_BAD_ARGUMENT(graph, nullptr)
57     LIBABCKIT_BAD_ARGUMENT(str, nullptr)
58     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
59 
60     return IcreateLoadStringStatic(graph, str);
61 }
62 
IcreateReturn(AbckitGraph * graph,AbckitInst * input0)63 extern "C" AbckitInst *IcreateReturn(AbckitGraph *graph, AbckitInst *input0)
64 {
65     LIBABCKIT_CLEAR_LAST_ERROR;
66     LIBABCKIT_IMPLEMENTED;
67     LIBABCKIT_TIME_EXEC;
68 
69     LIBABCKIT_BAD_ARGUMENT(graph, nullptr)
70     LIBABCKIT_BAD_ARGUMENT(input0, nullptr)
71 
72     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
73     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
74     return IcreateReturnStatic(graph, input0);
75 }
76 
IcreateIf(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1,AbckitIsaApiStaticConditionCode cc)77 extern "C" AbckitInst *IcreateIf(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1,
78                                  AbckitIsaApiStaticConditionCode cc)
79 {
80     LIBABCKIT_CLEAR_LAST_ERROR;
81     LIBABCKIT_IMPLEMENTED;
82     LIBABCKIT_TIME_EXEC;
83 
84     LIBABCKIT_BAD_ARGUMENT(graph, nullptr)
85     LIBABCKIT_BAD_ARGUMENT(input0, nullptr)
86     LIBABCKIT_BAD_ARGUMENT(input1, nullptr)
87 
88     if (cc == ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_NONE) {
89         statuses::SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
90         return nullptr;
91     }
92 
93     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
94     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
95     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
96 
97     return IcreateIfStaticStatic(graph, input0, input1, cc);
98 }
99 
IcreateNeg(AbckitGraph * graph,AbckitInst * input0)100 extern "C" AbckitInst *IcreateNeg(AbckitGraph *graph, AbckitInst *input0)
101 {
102     LIBABCKIT_CLEAR_LAST_ERROR;
103     LIBABCKIT_IMPLEMENTED;
104     LIBABCKIT_TIME_EXEC;
105 
106     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
107     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
108 
109     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
110     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
111     return IcreateNegStatic(graph, input0);
112 }
113 
IcreateNot(AbckitGraph * graph,AbckitInst * input0)114 extern "C" AbckitInst *IcreateNot(AbckitGraph *graph, AbckitInst *input0)
115 {
116     LIBABCKIT_CLEAR_LAST_ERROR;
117     LIBABCKIT_IMPLEMENTED;
118     LIBABCKIT_TIME_EXEC;
119 
120     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
121     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
122 
123     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
124     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
125     return IcreateNotStatic(graph, input0);
126 }
127 
IcreateAdd(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)128 extern "C" AbckitInst *IcreateAdd(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
129 {
130     LIBABCKIT_CLEAR_LAST_ERROR;
131     LIBABCKIT_IMPLEMENTED;
132     LIBABCKIT_TIME_EXEC;
133 
134     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
135     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
136     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
137     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
138     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
139     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
140     return IcreateAddStatic(graph, input0, input1);
141 }
142 
IcreateSub(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)143 extern "C" AbckitInst *IcreateSub(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
144 {
145     LIBABCKIT_CLEAR_LAST_ERROR;
146     LIBABCKIT_IMPLEMENTED;
147     LIBABCKIT_TIME_EXEC;
148 
149     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
150     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
151     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
152     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
153     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
154     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
155     return IcreateSubStatic(graph, input0, input1);
156 }
157 
IcreateMul(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)158 extern "C" AbckitInst *IcreateMul(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
159 {
160     LIBABCKIT_CLEAR_LAST_ERROR;
161     LIBABCKIT_IMPLEMENTED;
162     LIBABCKIT_TIME_EXEC;
163 
164     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
165     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
166     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
167 
168     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
169     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
170     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
171     return IcreateMulStatic(graph, input0, input1);
172 }
173 
IcreateDiv(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)174 extern "C" AbckitInst *IcreateDiv(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
175 {
176     LIBABCKIT_CLEAR_LAST_ERROR;
177     LIBABCKIT_IMPLEMENTED;
178     LIBABCKIT_TIME_EXEC;
179 
180     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
181     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
182     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
183 
184     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
185     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
186     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
187     return IcreateDivStatic(graph, input0, input1);
188 }
189 
IcreateMod(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)190 extern "C" AbckitInst *IcreateMod(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
191 {
192     LIBABCKIT_CLEAR_LAST_ERROR;
193     LIBABCKIT_IMPLEMENTED;
194     LIBABCKIT_TIME_EXEC;
195 
196     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
197     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
198     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
199 
200     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
201     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
202     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
203     return IcreateModStatic(graph, input0, input1);
204 }
205 
IcreateShl(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)206 extern "C" AbckitInst *IcreateShl(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
207 {
208     LIBABCKIT_CLEAR_LAST_ERROR;
209     LIBABCKIT_IMPLEMENTED;
210     LIBABCKIT_TIME_EXEC;
211 
212     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
213     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
214     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
215     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
216     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
217 
218     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
219     return IcreateShlStatic(graph, input0, input1);
220 }
221 
IcreateShr(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)222 extern "C" AbckitInst *IcreateShr(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
223 {
224     LIBABCKIT_CLEAR_LAST_ERROR;
225     LIBABCKIT_IMPLEMENTED;
226     LIBABCKIT_TIME_EXEC;
227 
228     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
229     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
230     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
231 
232     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
233     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
234     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
235     return IcreateShrStatic(graph, input0, input1);
236 }
237 
IcreateAShr(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)238 extern "C" AbckitInst *IcreateAShr(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
239 {
240     LIBABCKIT_CLEAR_LAST_ERROR;
241     LIBABCKIT_IMPLEMENTED;
242     LIBABCKIT_TIME_EXEC;
243 
244     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
245     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
246     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
247 
248     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
249     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
250     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
251     return IcreateAShrStatic(graph, input0, input1);
252 }
253 
IcreateAnd(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)254 extern "C" AbckitInst *IcreateAnd(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
255 {
256     LIBABCKIT_CLEAR_LAST_ERROR;
257     LIBABCKIT_IMPLEMENTED;
258     LIBABCKIT_TIME_EXEC;
259 
260     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
261     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
262     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
263 
264     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
265     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
266     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
267     return IcreateAndStatic(graph, input0, input1);
268 }
269 
IcreateOr(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)270 extern "C" AbckitInst *IcreateOr(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
271 {
272     LIBABCKIT_CLEAR_LAST_ERROR;
273     LIBABCKIT_IMPLEMENTED;
274     LIBABCKIT_TIME_EXEC;
275 
276     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
277     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
278     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
279 
280     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
281     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
282     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
283     return IcreateOrStatic(graph, input0, input1);
284 }
285 
IcreateXor(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)286 extern "C" AbckitInst *IcreateXor(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
287 {
288     LIBABCKIT_CLEAR_LAST_ERROR;
289     LIBABCKIT_IMPLEMENTED;
290     LIBABCKIT_TIME_EXEC;
291 
292     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
293     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
294     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
295 
296     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
297     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
298     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
299     return IcreateXorStatic(graph, input0, input1);
300 }
301 
IcreateCast(AbckitGraph * graph,AbckitInst * input0,AbckitTypeId targetType)302 extern "C" AbckitInst *IcreateCast(AbckitGraph *graph, AbckitInst *input0, AbckitTypeId targetType)
303 {
304     LIBABCKIT_CLEAR_LAST_ERROR;
305     LIBABCKIT_IMPLEMENTED;
306     LIBABCKIT_TIME_EXEC;
307 
308     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
309     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
310     if (targetType == ABCKIT_TYPE_ID_INVALID) {
311         statuses::SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
312         return nullptr;
313     }
314 
315     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
316     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
317     return IcreateCastStatic(graph, input0, targetType);
318 }
319 
GcreateNullPtr(AbckitGraph * graph)320 extern "C" AbckitInst *GcreateNullPtr(AbckitGraph *graph)
321 {
322     LIBABCKIT_CLEAR_LAST_ERROR;
323     LIBABCKIT_IMPLEMENTED;
324     LIBABCKIT_TIME_EXEC;
325 
326     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
327 
328     return GcreateNullPtrStatic(graph);
329 }
330 
IcreateNewArray(AbckitGraph * graph,AbckitCoreClass * inputClass,AbckitInst * inputSize)331 extern "C" AbckitInst *IcreateNewArray(AbckitGraph *graph, AbckitCoreClass *inputClass, AbckitInst *inputSize)
332 {
333     LIBABCKIT_CLEAR_LAST_ERROR;
334     LIBABCKIT_IMPLEMENTED;
335     LIBABCKIT_TIME_EXEC;
336 
337     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
338     LIBABCKIT_BAD_ARGUMENT(inputClass, nullptr);
339     LIBABCKIT_BAD_ARGUMENT(inputSize, nullptr);
340 
341     LIBABCKIT_WRONG_CTX(graph, inputSize->graph, nullptr);
342     LIBABCKIT_INTERNAL_ERROR(inputClass->owningModule, nullptr);
343     LIBABCKIT_WRONG_CTX(graph->file, inputClass->owningModule->file, nullptr);
344     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
345 
346     statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
347     return nullptr;
348 }
349 
IcreateNewObject(AbckitGraph * graph,AbckitCoreClass * inputClass)350 extern "C" AbckitInst *IcreateNewObject(AbckitGraph *graph, AbckitCoreClass *inputClass)
351 {
352     LIBABCKIT_CLEAR_LAST_ERROR;
353     LIBABCKIT_IMPLEMENTED;
354     LIBABCKIT_TIME_EXEC;
355 
356     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
357     LIBABCKIT_BAD_ARGUMENT(inputClass, nullptr);
358     LIBABCKIT_INTERNAL_ERROR(inputClass->owningModule, nullptr);
359     LIBABCKIT_WRONG_CTX(graph->file, inputClass->owningModule->file, nullptr);
360     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
361     return IcreateNewObjectStatic(graph, inputClass);
362 }
363 
IcreateInitObject(AbckitGraph * graph,AbckitCoreFunction * inputFunction,size_t argCount,...)364 extern "C" AbckitInst *IcreateInitObject(AbckitGraph *graph, AbckitCoreFunction *inputFunction, size_t argCount,
365                                          ... /* function params */)
366 {
367     LIBABCKIT_CLEAR_LAST_ERROR;
368     LIBABCKIT_IMPLEMENTED;
369     LIBABCKIT_TIME_EXEC;
370 
371     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
372     LIBABCKIT_BAD_ARGUMENT(inputFunction, nullptr);
373     LIBABCKIT_INTERNAL_ERROR(inputFunction->owningModule, nullptr);
374     LIBABCKIT_WRONG_CTX(graph->file, inputFunction->owningModule->file, nullptr);
375     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
376 
377     // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
378     va_list args;
379     va_start(args, argCount);
380 
381     auto *inst = IcreateInitObjectStatic(graph, inputFunction, argCount, args);
382 
383     va_end(args);
384 
385     return inst;
386 }
387 
IcreateLoadArray(AbckitGraph * graph,AbckitInst * arrayRef,AbckitInst * idx,AbckitTypeId returnTypeId)388 extern "C" AbckitInst *IcreateLoadArray(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx,
389                                         AbckitTypeId returnTypeId)
390 {
391     LIBABCKIT_CLEAR_LAST_ERROR;
392     LIBABCKIT_IMPLEMENTED;
393     LIBABCKIT_TIME_EXEC;
394 
395     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
396     LIBABCKIT_BAD_ARGUMENT(arrayRef, nullptr);
397     LIBABCKIT_BAD_ARGUMENT(idx, nullptr);
398     if (returnTypeId == ABCKIT_TYPE_ID_INVALID) {
399         statuses::SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
400         return nullptr;
401     }
402 
403     LIBABCKIT_WRONG_CTX(graph, arrayRef->graph, nullptr);
404     LIBABCKIT_WRONG_CTX(graph, idx->graph, nullptr);
405     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
406     return IcreateLoadArrayStatic(graph, arrayRef, idx, returnTypeId);
407 }
408 
IcreateStoreArray(AbckitGraph * graph,AbckitInst * arrayRef,AbckitInst * idx,AbckitInst * value,AbckitTypeId valueTypeId)409 extern "C" AbckitInst *IcreateStoreArray(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx, AbckitInst *value,
410                                          AbckitTypeId valueTypeId)
411 {
412     LIBABCKIT_CLEAR_LAST_ERROR;
413     LIBABCKIT_IMPLEMENTED;
414     LIBABCKIT_TIME_EXEC;
415 
416     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
417     LIBABCKIT_BAD_ARGUMENT(arrayRef, nullptr);
418     LIBABCKIT_BAD_ARGUMENT(idx, nullptr);
419     LIBABCKIT_BAD_ARGUMENT(value, nullptr);
420     if (valueTypeId == ABCKIT_TYPE_ID_INVALID) {
421         statuses::SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
422         return nullptr;
423     }
424 
425     LIBABCKIT_WRONG_CTX(graph, arrayRef->graph, nullptr);
426     LIBABCKIT_WRONG_CTX(graph, idx->graph, nullptr);
427     LIBABCKIT_WRONG_CTX(graph, value->graph, nullptr);
428     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
429     return IcreateStoreArrayStatic(graph, arrayRef, idx, value, valueTypeId);
430 }
431 
IcreateStoreArrayWide(AbckitGraph * graph,AbckitInst * arrayRef,AbckitInst * idx,AbckitInst * value,AbckitTypeId valueTypeId)432 extern "C" AbckitInst *IcreateStoreArrayWide(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx,
433                                              AbckitInst *value, AbckitTypeId valueTypeId)
434 {
435     LIBABCKIT_CLEAR_LAST_ERROR;
436     LIBABCKIT_IMPLEMENTED;
437     LIBABCKIT_TIME_EXEC;
438 
439     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
440     LIBABCKIT_BAD_ARGUMENT(arrayRef, nullptr);
441     LIBABCKIT_BAD_ARGUMENT(idx, nullptr);
442     LIBABCKIT_BAD_ARGUMENT(value, nullptr);
443     if (valueTypeId == ABCKIT_TYPE_ID_INVALID) {
444         statuses::SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
445         return nullptr;
446     }
447 
448     LIBABCKIT_WRONG_CTX(graph, arrayRef->graph, nullptr);
449     LIBABCKIT_WRONG_CTX(graph, idx->graph, nullptr);
450     LIBABCKIT_WRONG_CTX(graph, value->graph, nullptr);
451     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
452     return IcreateStoreArrayWideStatic(graph, arrayRef, idx, value, valueTypeId);
453 }
454 
IcreateLenArray(AbckitGraph * graph,AbckitInst * arr)455 extern "C" AbckitInst *IcreateLenArray(AbckitGraph *graph, AbckitInst *arr)
456 {
457     LIBABCKIT_CLEAR_LAST_ERROR;
458     LIBABCKIT_IMPLEMENTED;
459     LIBABCKIT_TIME_EXEC;
460 
461     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
462     LIBABCKIT_BAD_ARGUMENT(arr, nullptr);
463 
464     LIBABCKIT_WRONG_CTX(graph, arr->graph, nullptr);
465     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
466     return IcreateLenArrayStatic(graph, arr);
467 }
468 
IcreateLoadConstArray(AbckitGraph * graph,AbckitLiteralArray * literalArray)469 extern "C" AbckitInst *IcreateLoadConstArray(AbckitGraph *graph, AbckitLiteralArray *literalArray)
470 {
471     LIBABCKIT_CLEAR_LAST_ERROR;
472     LIBABCKIT_IMPLEMENTED;
473     LIBABCKIT_TIME_EXEC;
474 
475     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
476     LIBABCKIT_BAD_ARGUMENT(literalArray, nullptr);
477     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
478 
479     return IcreateLoadConstArrayStatic(graph, literalArray);
480 }
481 
IcreateCheckCast(AbckitGraph * graph,AbckitInst * inputObj,AbckitType * targetType)482 extern "C" AbckitInst *IcreateCheckCast(AbckitGraph *graph, AbckitInst *inputObj, AbckitType *targetType)
483 {
484     LIBABCKIT_CLEAR_LAST_ERROR;
485     LIBABCKIT_IMPLEMENTED;
486     LIBABCKIT_TIME_EXEC;
487 
488     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
489     LIBABCKIT_BAD_ARGUMENT(inputObj, nullptr);
490     LIBABCKIT_BAD_ARGUMENT(targetType, nullptr);
491     LIBABCKIT_WRONG_CTX(graph, inputObj->graph, nullptr);
492     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
493     return IcreateCheckCastStatic(graph, inputObj, targetType);
494 }
495 
IcreateIsInstance(AbckitGraph * graph,AbckitInst * inputObj,AbckitType * targetType)496 extern "C" AbckitInst *IcreateIsInstance(AbckitGraph *graph, AbckitInst *inputObj, AbckitType *targetType)
497 {
498     LIBABCKIT_CLEAR_LAST_ERROR;
499     LIBABCKIT_IMPLEMENTED;
500     LIBABCKIT_TIME_EXEC;
501 
502     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
503     LIBABCKIT_BAD_ARGUMENT(inputObj, nullptr);
504     LIBABCKIT_BAD_ARGUMENT(targetType, nullptr);
505 
506     LIBABCKIT_WRONG_CTX(graph, inputObj->graph, nullptr);
507     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
508     return IcreateIsInstanceStatic(graph, inputObj, targetType);
509 }
510 
IcreateLoadNullValue(AbckitGraph * graph)511 extern "C" AbckitInst *IcreateLoadNullValue(AbckitGraph *graph)
512 {
513     LIBABCKIT_CLEAR_LAST_ERROR;
514     LIBABCKIT_IMPLEMENTED;
515     LIBABCKIT_TIME_EXEC;
516 
517     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
518     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
519 
520     return IcreateLoadNullValueStatic(graph);
521 }
522 
IcreateReturnVoid(AbckitGraph * graph)523 extern "C" AbckitInst *IcreateReturnVoid(AbckitGraph *graph)
524 {
525     LIBABCKIT_CLEAR_LAST_ERROR;
526     LIBABCKIT_IMPLEMENTED;
527     LIBABCKIT_TIME_EXEC;
528 
529     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
530     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
531 
532     return IcreateReturnVoidStatic(graph);
533 }
534 
IcreateEquals(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)535 extern "C" AbckitInst *IcreateEquals(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
536 {
537     LIBABCKIT_CLEAR_LAST_ERROR;
538     LIBABCKIT_IMPLEMENTED;
539     LIBABCKIT_TIME_EXEC;
540 
541     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
542     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
543     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
544 
545     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
546     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
547     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
548     return IcreateEqualsStatic(graph, input0, input1);
549 }
550 
IcreateStrictEquals(AbckitGraph * graph,AbckitInst * input0,AbckitInst * input1)551 extern "C" AbckitInst *IcreateStrictEquals(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1)
552 {
553     LIBABCKIT_CLEAR_LAST_ERROR;
554     LIBABCKIT_IMPLEMENTED;
555 
556     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
557     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
558     LIBABCKIT_BAD_ARGUMENT(input1, nullptr);
559 
560     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
561     LIBABCKIT_WRONG_CTX(graph, input1->graph, nullptr);
562     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
563     return IcreateStrictEqualsStatic(graph, input0, input1);
564 }
565 
IcreateCallStatic(AbckitGraph * graph,AbckitCoreFunction * inputFunction,size_t argCount,...)566 extern "C" AbckitInst *IcreateCallStatic(AbckitGraph *graph, AbckitCoreFunction *inputFunction, size_t argCount,
567                                          ... /* inputFunction params */)
568 {
569     LIBABCKIT_CLEAR_LAST_ERROR;
570     LIBABCKIT_IMPLEMENTED;
571     LIBABCKIT_TIME_EXEC;
572 
573     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
574     LIBABCKIT_BAD_ARGUMENT(inputFunction, nullptr);
575     LIBABCKIT_INTERNAL_ERROR(inputFunction->owningModule, nullptr);
576     LIBABCKIT_WRONG_CTX(graph->file, inputFunction->owningModule->file, nullptr);
577     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
578 
579     // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
580     va_list args;
581     va_start(args, argCount);
582 
583     auto *inst = IcreateCallStaticStatic(graph, inputFunction, argCount, args);
584     va_end(args);
585     return inst;
586 }
587 
IcreateCallVirtual(AbckitGraph * graph,AbckitInst * inputObj,AbckitCoreFunction * inputFunction,size_t argCount,...)588 extern "C" AbckitInst *IcreateCallVirtual(AbckitGraph *graph, AbckitInst *inputObj, AbckitCoreFunction *inputFunction,
589                                           size_t argCount, ... /* inputFunction params */)
590 {
591     LIBABCKIT_CLEAR_LAST_ERROR;
592     LIBABCKIT_IMPLEMENTED;
593     LIBABCKIT_TIME_EXEC;
594 
595     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
596     LIBABCKIT_BAD_ARGUMENT(inputFunction, nullptr);
597     LIBABCKIT_BAD_ARGUMENT(inputObj, nullptr);
598     LIBABCKIT_WRONG_CTX(graph, inputObj->graph, nullptr);
599     LIBABCKIT_INTERNAL_ERROR(inputFunction->owningModule, nullptr);
600     LIBABCKIT_WRONG_CTX(graph->file, inputFunction->owningModule->file, nullptr);
601     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
602 
603     // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg)
604     va_list args;
605     va_start(args, argCount);
606 
607     auto *inst = IcreateCallVirtualStatic(graph, inputObj, inputFunction, argCount, args);
608     va_end(args);
609 
610     return inst;
611 }
612 
IcreateAddI(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)613 extern "C" AbckitInst *IcreateAddI(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
614 {
615     LIBABCKIT_CLEAR_LAST_ERROR;
616     LIBABCKIT_IMPLEMENTED;
617     LIBABCKIT_TIME_EXEC;
618 
619     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
620     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
621 
622     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
623     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
624     return IcreateAddIStatic(graph, input0, imm);
625 }
626 
IcreateSubI(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)627 extern "C" AbckitInst *IcreateSubI(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
628 {
629     LIBABCKIT_CLEAR_LAST_ERROR;
630     LIBABCKIT_IMPLEMENTED;
631     LIBABCKIT_TIME_EXEC;
632 
633     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
634     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
635 
636     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
637     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
638     return IcreateSubIStatic(graph, input0, imm);
639 }
640 
IcreateMulI(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)641 extern "C" AbckitInst *IcreateMulI(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
642 {
643     LIBABCKIT_CLEAR_LAST_ERROR;
644     LIBABCKIT_IMPLEMENTED;
645     LIBABCKIT_TIME_EXEC;
646 
647     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
648     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
649 
650     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
651     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
652     return IcreateMulIStatic(graph, input0, imm);
653 }
654 
IcreateDivI(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)655 extern "C" AbckitInst *IcreateDivI(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
656 {
657     LIBABCKIT_CLEAR_LAST_ERROR;
658     LIBABCKIT_IMPLEMENTED;
659     LIBABCKIT_TIME_EXEC;
660 
661     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
662     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
663 
664     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
665     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
666     return IcreateDivIStatic(graph, input0, imm);
667 }
668 
IcreateModI(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)669 extern "C" AbckitInst *IcreateModI(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
670 {
671     LIBABCKIT_CLEAR_LAST_ERROR;
672     LIBABCKIT_IMPLEMENTED;
673     LIBABCKIT_TIME_EXEC;
674 
675     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
676     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
677 
678     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
679     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
680     return IcreateModIStatic(graph, input0, imm);
681 }
682 
IcreateShlI(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)683 extern "C" AbckitInst *IcreateShlI(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
684 {
685     LIBABCKIT_CLEAR_LAST_ERROR;
686     LIBABCKIT_IMPLEMENTED;
687     LIBABCKIT_TIME_EXEC;
688 
689     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
690     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
691 
692     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
693     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
694     return IcreateShlIStatic(graph, input0, imm);
695 }
696 
IcreateShrI(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)697 extern "C" AbckitInst *IcreateShrI(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
698 {
699     LIBABCKIT_CLEAR_LAST_ERROR;
700     LIBABCKIT_IMPLEMENTED;
701     LIBABCKIT_TIME_EXEC;
702 
703     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
704     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
705 
706     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
707     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
708     return IcreateShrIStatic(graph, input0, imm);
709 }
710 
IcreateAShrI(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)711 extern "C" AbckitInst *IcreateAShrI(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
712 {
713     LIBABCKIT_CLEAR_LAST_ERROR;
714     LIBABCKIT_IMPLEMENTED;
715     LIBABCKIT_TIME_EXEC;
716 
717     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
718     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
719 
720     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
721     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
722     return IcreateAShrIStatic(graph, input0, imm);
723 }
724 
IcreateAndI(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)725 extern "C" AbckitInst *IcreateAndI(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
726 {
727     LIBABCKIT_CLEAR_LAST_ERROR;
728     LIBABCKIT_IMPLEMENTED;
729     LIBABCKIT_TIME_EXEC;
730 
731     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
732     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
733 
734     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
735     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
736     return IcreateAndIStatic(graph, input0, imm);
737 }
738 
IcreateOrI(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)739 extern "C" AbckitInst *IcreateOrI(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
740 {
741     LIBABCKIT_CLEAR_LAST_ERROR;
742     LIBABCKIT_IMPLEMENTED;
743     LIBABCKIT_TIME_EXEC;
744 
745     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
746     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
747 
748     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
749     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
750     return IcreateOrIStatic(graph, input0, imm);
751 }
752 
IcreateXorI(AbckitGraph * graph,AbckitInst * input0,uint64_t imm)753 extern "C" AbckitInst *IcreateXorI(AbckitGraph *graph, AbckitInst *input0, uint64_t imm)
754 {
755     LIBABCKIT_CLEAR_LAST_ERROR;
756     LIBABCKIT_IMPLEMENTED;
757     LIBABCKIT_TIME_EXEC;
758 
759     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
760     LIBABCKIT_BAD_ARGUMENT(input0, nullptr);
761 
762     LIBABCKIT_WRONG_CTX(graph, input0->graph, nullptr);
763     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
764     return IcreateXorIStatic(graph, input0, imm);
765 }
766 
IcreateThrow(AbckitGraph * graph,AbckitInst * acc)767 extern "C" AbckitInst *IcreateThrow(AbckitGraph *graph, AbckitInst *acc)
768 {
769     LIBABCKIT_CLEAR_LAST_ERROR;
770     LIBABCKIT_IMPLEMENTED;
771     LIBABCKIT_TIME_EXEC;
772 
773     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
774     LIBABCKIT_BAD_ARGUMENT(acc, nullptr);
775 
776     LIBABCKIT_WRONG_CTX(graph, acc->graph, nullptr);
777     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
778     return IcreateThrowStatic(graph, acc);
779 }
780 
IgetOpcode(AbckitInst * inst)781 extern "C" AbckitIsaApiStaticOpcode IgetOpcode(AbckitInst *inst)
782 {
783     LIBABCKIT_CLEAR_LAST_ERROR;
784     LIBABCKIT_IMPLEMENTED;
785     LIBABCKIT_TIME_EXEC;
786 
787     LIBABCKIT_BAD_ARGUMENT(inst, ABCKIT_ISA_API_STATIC_OPCODE_INVALID);
788 
789     return IgetOpcodeStaticStatic(inst);
790 }
791 
IgetClass(AbckitInst * inst)792 extern "C" AbckitCoreClass *IgetClass(AbckitInst *inst)
793 {
794     LIBABCKIT_CLEAR_LAST_ERROR;
795     LIBABCKIT_IMPLEMENTED;
796     LIBABCKIT_TIME_EXEC;
797 
798     LIBABCKIT_BAD_ARGUMENT(inst, nullptr);
799 
800     return IgetClassStatic(inst);
801 }
802 
IsetClass(AbckitInst * inst,AbckitCoreClass * klass)803 extern "C" void IsetClass(AbckitInst *inst, AbckitCoreClass *klass)
804 {
805     LIBABCKIT_CLEAR_LAST_ERROR;
806     LIBABCKIT_IMPLEMENTED;
807     LIBABCKIT_TIME_EXEC;
808 
809     LIBABCKIT_BAD_ARGUMENT_VOID(inst);
810     LIBABCKIT_BAD_ARGUMENT_VOID(klass);
811 
812     IsetClassStatic(inst, klass);
813 }
814 
IgetConditionCode(AbckitInst * inst)815 extern "C" AbckitIsaApiStaticConditionCode IgetConditionCode(AbckitInst *inst)
816 {
817     LIBABCKIT_CLEAR_LAST_ERROR;
818     LIBABCKIT_IMPLEMENTED;
819     LIBABCKIT_TIME_EXEC;
820 
821     LIBABCKIT_BAD_ARGUMENT(inst, ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_NONE);
822 
823     if (IgetOpcode(inst) != ABCKIT_ISA_API_STATIC_OPCODE_IF) {
824         statuses::SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
825         LIBABCKIT_LOG(DEBUG) << "Trying to get condition code not from 'If' instruction\n";
826         return ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_NONE;
827     }
828 
829     return IgetConditionCodeStaticStatic(inst);
830 }
831 
IsetConditionCode(AbckitInst * inst,AbckitIsaApiStaticConditionCode cc)832 extern "C" void IsetConditionCode(AbckitInst *inst, AbckitIsaApiStaticConditionCode cc)
833 {
834     LIBABCKIT_CLEAR_LAST_ERROR;
835     LIBABCKIT_IMPLEMENTED;
836     LIBABCKIT_TIME_EXEC;
837 
838     LIBABCKIT_BAD_ARGUMENT_VOID(inst);
839     if (cc == ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_NONE) {
840         statuses::SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
841         return;
842     }
843 
844     if (IgetOpcode(inst) != ABCKIT_ISA_API_STATIC_OPCODE_IF) {
845         statuses::SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
846         LIBABCKIT_LOG(DEBUG) << "Trying to get condition code not from 'If' instruction\n";
847         return;
848     }
849 
850     bool ccDynamicResitiction =
851         !((cc == ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_NE) || (cc == ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_EQ));
852     if (IsDynamic(inst->graph->function->owningModule->target) && ccDynamicResitiction) {
853         statuses::SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
854         LIBABCKIT_LOG(DEBUG) << "Wrong condition code set for dynamic if\n";
855         return;
856     }
857 
858     IsetConditionCodeStaticStatic(inst, cc);
859 }
860 
IsetTargetType(AbckitInst * inst,AbckitTypeId t)861 extern "C" void IsetTargetType(AbckitInst *inst, AbckitTypeId t)
862 {
863     LIBABCKIT_CLEAR_LAST_ERROR;
864     LIBABCKIT_IMPLEMENTED;
865     LIBABCKIT_TIME_EXEC;
866 
867     LIBABCKIT_BAD_ARGUMENT_VOID(inst);
868     if (t == ABCKIT_TYPE_ID_INVALID) {
869         statuses::SetLastError(ABCKIT_STATUS_BAD_ARGUMENT);
870         return;
871     }
872 
873     IsetTargetTypeStatic(inst, t);
874 }
875 
IgetTargetType(AbckitInst * inst)876 extern "C" AbckitTypeId IgetTargetType(AbckitInst *inst)
877 {
878     LIBABCKIT_CLEAR_LAST_ERROR;
879     LIBABCKIT_IMPLEMENTED;
880     LIBABCKIT_TIME_EXEC;
881 
882     LIBABCKIT_BAD_ARGUMENT(inst, AbckitTypeId::ABCKIT_TYPE_ID_INVALID);
883 
884     return IgetTargetTypeStatic(inst);
885 }
886 
IcreateIsUndefined(AbckitGraph * graph,AbckitInst * inputObj)887 extern "C" AbckitInst *IcreateIsUndefined(AbckitGraph *graph, AbckitInst *inputObj)
888 {
889     LIBABCKIT_CLEAR_LAST_ERROR;
890     LIBABCKIT_IMPLEMENTED;
891     LIBABCKIT_TIME_EXEC;
892 
893     LIBABCKIT_BAD_ARGUMENT(graph, nullptr);
894     LIBABCKIT_BAD_ARGUMENT(inputObj, nullptr);
895 
896     LIBABCKIT_WRONG_CTX(graph, inputObj->graph, nullptr);
897     LIBABCKIT_WRONG_MODE(graph, Mode::STATIC, nullptr);
898     return IcreateIsUndefinedStatic(graph, inputObj);
899 }
900 
901 AbckitIsaApiStatic g_isaApiStaticImpl = {
902 
903     IgetClass,
904     IsetClass,
905     IgetConditionCode,
906     IsetConditionCode,
907     IgetOpcode,
908     IsetTargetType,
909     IgetTargetType,
910 
911     IcreateCmp,
912     IcreateLoadString,
913     IcreateReturn,
914     IcreateIf,
915     IcreateNeg,
916     IcreateNot,
917     IcreateAdd,
918     IcreateSub,
919     IcreateMul,
920     IcreateDiv,
921     IcreateMod,
922     IcreateShl,
923     IcreateShr,
924     IcreateAShr,
925     IcreateAnd,
926     IcreateOr,
927     IcreateXor,
928     IcreateCast,
929     GcreateNullPtr,
930     IcreateNewArray,
931     IcreateNewObject,
932     IcreateInitObject,
933     IcreateLoadArray,
934     IcreateStoreArray,
935     IcreateStoreArrayWide,
936     IcreateLenArray,
937     IcreateLoadConstArray,
938     IcreateCheckCast,
939     IcreateIsInstance,
940     IcreateLoadNullValue,
941     IcreateReturnVoid,
942     IcreateEquals,
943     IcreateStrictEquals,
944     IcreateCallStatic,
945     IcreateCallVirtual,
946     IcreateAddI,
947     IcreateSubI,
948     IcreateMulI,
949     IcreateDivI,
950     IcreateModI,
951     IcreateShlI,
952     IcreateShrI,
953     IcreateAShrI,
954     IcreateAndI,
955     IcreateOrI,
956     IcreateXorI,
957     IcreateThrow,
958     IcreateIsUndefined,
959 };
960 
961 }  // namespace libabckit
962 
963 #ifdef ABCKIT_ENABLE_MOCK_IMPLEMENTATION
964 #include "./mock/abckit_mock.h"
965 #endif
966 
AbckitGetIsaApiStaticImpl(AbckitApiVersion version)967 extern "C" AbckitIsaApiStatic const *AbckitGetIsaApiStaticImpl(AbckitApiVersion version)
968 {
969 #ifdef ABCKIT_ENABLE_MOCK_IMPLEMENTATION
970     return AbckitGetMockIsaApiStaticImpl(version);
971 #endif
972     switch (version) {
973         case ABCKIT_VERSION_RELEASE_1_0_0:
974             return &libabckit::g_isaApiStaticImpl;
975         default:
976             libabckit::statuses::SetLastError(ABCKIT_STATUS_UNKNOWN_API_VERSION);
977             return nullptr;
978     }
979 }
980