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