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