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