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 #ifndef LIBABCKIT_ISA_ISA_STATIC_H 17 #define LIBABCKIT_ISA_ISA_STATIC_H 18 19 #ifndef __cplusplus 20 #include <stdbool.h> 21 #include <stddef.h> 22 #include <stdint.h> 23 #else 24 #include <cstddef> 25 #include <cstdint> 26 #endif 27 28 #include "../metadata_core.h" 29 #include "../ir_core.h" 30 #include "../abckit.h" 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 enum AbckitIsaApiStaticOpcode { 37 ABCKIT_ISA_API_STATIC_OPCODE_INVALID, 38 ABCKIT_ISA_API_STATIC_OPCODE_CONSTANT, 39 ABCKIT_ISA_API_STATIC_OPCODE_PARAMETER, 40 ABCKIT_ISA_API_STATIC_OPCODE_LOADSTRING, 41 ABCKIT_ISA_API_STATIC_OPCODE_RETURN, 42 ABCKIT_ISA_API_STATIC_OPCODE_TRY, 43 ABCKIT_ISA_API_STATIC_OPCODE_CATCHPHI, 44 ABCKIT_ISA_API_STATIC_OPCODE_PHI, 45 46 /* Unary operations: */ 47 ABCKIT_ISA_API_STATIC_OPCODE_NEG, 48 ABCKIT_ISA_API_STATIC_OPCODE_NOT, 49 50 /* BinaryOperation: */ 51 ABCKIT_ISA_API_STATIC_OPCODE_CMP, 52 ABCKIT_ISA_API_STATIC_OPCODE_ADD, 53 ABCKIT_ISA_API_STATIC_OPCODE_SUB, 54 ABCKIT_ISA_API_STATIC_OPCODE_MUL, 55 ABCKIT_ISA_API_STATIC_OPCODE_DIV, 56 ABCKIT_ISA_API_STATIC_OPCODE_MOD, 57 ABCKIT_ISA_API_STATIC_OPCODE_SHL, 58 ABCKIT_ISA_API_STATIC_OPCODE_SHR, 59 ABCKIT_ISA_API_STATIC_OPCODE_ASHR, 60 ABCKIT_ISA_API_STATIC_OPCODE_AND, 61 ABCKIT_ISA_API_STATIC_OPCODE_OR, 62 ABCKIT_ISA_API_STATIC_OPCODE_XOR, 63 64 /* Cast: */ 65 ABCKIT_ISA_API_STATIC_OPCODE_CAST, 66 67 /* Object manipulation: */ 68 ABCKIT_ISA_API_STATIC_OPCODE_NULLPTR, 69 ABCKIT_ISA_API_STATIC_OPCODE_NEWARRAY, 70 ABCKIT_ISA_API_STATIC_OPCODE_NEWOBJECT, 71 ABCKIT_ISA_API_STATIC_OPCODE_INITOBJECT, 72 ABCKIT_ISA_API_STATIC_OPCODE_LOADARRAY, 73 ABCKIT_ISA_API_STATIC_OPCODE_STOREARRAY, 74 ABCKIT_ISA_API_STATIC_OPCODE_LOADOBJECT, 75 ABCKIT_ISA_API_STATIC_OPCODE_STOREOBJECT, 76 ABCKIT_ISA_API_STATIC_OPCODE_LOADSTATIC, 77 ABCKIT_ISA_API_STATIC_OPCODE_STORESTATIC, 78 ABCKIT_ISA_API_STATIC_OPCODE_LENARRAY, 79 ABCKIT_ISA_API_STATIC_OPCODE_LOADCONSTARRAY, 80 ABCKIT_ISA_API_STATIC_OPCODE_CHECKCAST, 81 ABCKIT_ISA_API_STATIC_OPCODE_ISINSTANCE, 82 ABCKIT_ISA_API_STATIC_OPCODE_ISNULLVALUE, 83 ABCKIT_ISA_API_STATIC_OPCODE_LOADNULLVALUE, 84 ABCKIT_ISA_API_STATIC_OPCODE_EQUALS, 85 ABCKIT_ISA_API_STATIC_OPCODE_STRICTEQUALS, 86 87 /* Return: */ 88 ABCKIT_ISA_API_STATIC_OPCODE_RETURN_VOID, 89 90 /* Calls: */ 91 ABCKIT_ISA_API_STATIC_OPCODE_CALL_STATIC, 92 ABCKIT_ISA_API_STATIC_OPCODE_CALL_VIRTUAL, 93 94 /* BinaryImmOperation: */ 95 ABCKIT_ISA_API_STATIC_OPCODE_ADDI, 96 ABCKIT_ISA_API_STATIC_OPCODE_SUBI, 97 ABCKIT_ISA_API_STATIC_OPCODE_MULI, 98 ABCKIT_ISA_API_STATIC_OPCODE_DIVI, 99 ABCKIT_ISA_API_STATIC_OPCODE_MODI, 100 ABCKIT_ISA_API_STATIC_OPCODE_SHLI, 101 ABCKIT_ISA_API_STATIC_OPCODE_SHRI, 102 ABCKIT_ISA_API_STATIC_OPCODE_ASHRI, 103 ABCKIT_ISA_API_STATIC_OPCODE_ANDI, 104 ABCKIT_ISA_API_STATIC_OPCODE_ORI, 105 ABCKIT_ISA_API_STATIC_OPCODE_XORI, 106 107 /* Exceptions */ 108 ABCKIT_ISA_API_STATIC_OPCODE_THROW, 109 110 /* Condition */ 111 ABCKIT_ISA_API_STATIC_OPCODE_IF, 112 }; 113 114 enum AbckitIsaApiStaticConditionCode { 115 ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_NONE = 0, 116 ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_EQ, /* == */ 117 ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_NE, /* != */ 118 ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_LT, /* < */ 119 ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_LE, /* <= */ 120 ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_GT, /* > */ 121 ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_GE, /* >= */ 122 // Unsigned integers. 123 ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_B, /* < */ 124 ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_BE, /* <= */ 125 ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_A, /* > */ 126 ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_AE, /* >= */ 127 // Compare result of bitwise AND with zero 128 ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_TST_EQ, /* (lhs AND rhs) == 0 */ 129 ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_TST_NE, /* (lhs AND rhs) != 0 */ 130 }; 131 132 /** 133 * @brief Struct that holds the pointers to the API used to work with static ISA. 134 * @note Valid targets: `ABCKIT_TARGET_ARK_TS_V2`. 135 */ 136 struct AbckitIsaApiStatic { 137 /** 138 * @brief Returns core class of `inst`. 139 * @return AbckitCoreClass *. 140 * @param [ in ] AbckitInst *inst . 141 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *inst is NULL. 142 */ 143 AbckitCoreClass *(*iGetClass)(AbckitInst *inst /* in */); 144 145 /** 146 * @brief Sets `inst`'s class. 147 * @return void . 148 * @param [ in ] AbckitInst *inst . 149 * @param [ in ] AbckitCoreClass *klass . 150 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *inst is NULL. 151 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitCoreClass *klass is NULL. 152 */ 153 void (*iSetClass)(AbckitInst *inst /* in */, AbckitCoreClass *klass /* in */); 154 155 /** 156 * @brief Returns condition code. 157 * @return enum AbckitIsaApiStaticConditionCode . 158 * @param [ in ] AbckitInst *inst . 159 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *inst is NULL. 160 */ 161 enum AbckitIsaApiStaticConditionCode (*iGetConditionCode)(AbckitInst *inst /* in */); 162 163 /** 164 * @brief Sets condition code. 165 * @return void . 166 * @param [ in ] AbckitInst *inst . 167 * @param [ in ] enum AbckitIsaApiStaticConditionCode cc . 168 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *inst is NULL. 169 */ 170 void (*iSetConditionCode)(AbckitInst *inst /* in */, enum AbckitIsaApiStaticConditionCode cc /* in */); 171 172 /** 173 * @brief Returns `inst`'s opcode. 174 * @return enum AbckitIsaApiStaticOpcode . 175 * @param [ in ] AbckitInst *inst . 176 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *inst is NULL. 177 */ 178 enum AbckitIsaApiStaticOpcode (*iGetOpcode)(AbckitInst *inst /* in */); 179 180 /* For Cast instructions */ 181 /** 182 * @brief Sets target type 't' for 'inst'. 183 * @return void . 184 * @param [ in ] AbckitInst *inst . 185 * @param [ in ] enum AbckitTypeId t . 186 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *inst is NULL. 187 */ 188 void (*iSetTargetType)(AbckitInst *inst /* in */, enum AbckitTypeId t /* in */); 189 190 /* For Cast instructions */ 191 /** 192 * @brief Returns `inst`'s target type. 193 * @return enum AbckitTypeId . 194 * @param [ in ] AbckitInst *inst . 195 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *inst is NULL. 196 */ 197 enum AbckitTypeId (*iGetTargetType)(AbckitInst *inst /* in */); 198 199 /** 200 * @brief Creates `cmp` inst. 201 * @return AbckitInst *. 202 * @param [ in ] AbckitGraph *graph . 203 * @param [ in ] AbckitInst *input0 . 204 * @param [ in ] AbckitInst *input1 . 205 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 206 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 207 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 208 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 209 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 210 */ 211 AbckitInst *(*iCreateCmp)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */); 212 213 /** 214 * @brief Creates `load string` inst. 215 * @return AbckitInst *. 216 * @param [ in ] AbckitGraph *graph . 217 * @param [ in ] AbckitString *str . 218 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 219 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitString *str is NULL. 220 */ 221 AbckitInst *(*iCreateLoadString)(AbckitGraph *graph /* in */, AbckitString *str /* in */); 222 223 /** 224 * @brief Creates `return` inst. 225 * @return AbckitInst *. 226 * @param [ in ] AbckitGraph *graph . 227 * @param [ in ] AbckitInst *input0 . 228 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 229 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 230 */ 231 AbckitInst *(*iCreateReturn)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */); 232 233 /** 234 * @brief Creates `If` inst. 235 * @return AbckitInst *. 236 * @param [ in ] AbckitGraph *graph . 237 * @param [ in ] AbckitInst *input0 . 238 * @param [ in ] AbckitInst *input1 . 239 * @param [ in ] enum AbckitIsaApiStaticConditionCode cc . 240 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 241 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 242 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 243 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 244 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 245 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if `cc` is ABCKIT_ISA_API_STATIC_CONDITION_CODE_CC_NONE 246 */ 247 AbckitInst *(*iCreateIf)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */, 248 enum AbckitIsaApiStaticConditionCode cc /* in */); 249 250 /** 251 * @brief Creates `Neg` inst. 252 * @return AbckitInst *. 253 * @param [ in ] AbckitGraph *graph . 254 * @param [ in ] AbckitInst *input0 . 255 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 256 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 257 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 258 */ 259 AbckitInst *(*iCreateNeg)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */); 260 261 /** 262 * @brief Creates `Not` inst. 263 * @return AbckitInst *. 264 * @param [ in ] AbckitGraph *graph . 265 * @param [ in ] AbckitInst *input0 . 266 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 267 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 268 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 269 */ 270 AbckitInst *(*iCreateNot)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */); 271 272 /** 273 * @brief Creates `Add` inst. 274 * @return AbckitInst *. 275 * @param [ in ] AbckitGraph *graph . 276 * @param [ in ] AbckitInst *input0 . 277 * @param [ in ] AbckitInst *input1 . 278 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 279 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 280 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 281 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 282 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 283 */ 284 AbckitInst *(*iCreateAdd)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */); 285 286 /** 287 * @brief Creates `Sub` inst. 288 * @return AbckitInst *. 289 * @param [ in ] AbckitGraph *graph . 290 * @param [ in ] AbckitInst *input0 . 291 * @param [ in ] AbckitInst *input1 . 292 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 293 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 294 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 295 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 296 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 297 */ 298 AbckitInst *(*iCreateSub)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */); 299 300 /** 301 * @brief Creates `Mul` inst. 302 * @return AbckitInst *. 303 * @param [ in ] AbckitGraph *graph . 304 * @param [ in ] AbckitInst *input0 . 305 * @param [ in ] AbckitInst *input1 . 306 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 307 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 308 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 309 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 310 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 311 */ 312 AbckitInst *(*iCreateMul)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */); 313 314 /** 315 * @brief Creates `Div` inst. 316 * @return AbckitInst *. 317 * @param [ in ] AbckitGraph *graph . 318 * @param [ in ] AbckitInst *input0 . 319 * @param [ in ] AbckitInst *input1 . 320 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 321 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 322 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 323 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 324 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 325 */ 326 AbckitInst *(*iCreateDiv)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */); 327 328 /** 329 * @brief Creates `Mod` inst. 330 * @return AbckitInst *. 331 * @param [ in ] AbckitGraph *graph . 332 * @param [ in ] AbckitInst *input0 . 333 * @param [ in ] AbckitInst *input1 . 334 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 335 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 336 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 337 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 338 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 339 */ 340 AbckitInst *(*iCreateMod)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */); 341 342 /** 343 * @brief Creates `Shl` inst. 344 * @return AbckitInst *. 345 * @param [ in ] AbckitGraph *graph . 346 * @param [ in ] AbckitInst *input0 . 347 * @param [ in ] AbckitInst *input1 . 348 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 349 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 350 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 351 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 352 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 353 */ 354 AbckitInst *(*iCreateShl)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */); 355 356 /** 357 * @brief Creates `Shr` inst. 358 * @return AbckitInst *. 359 * @param [ in ] AbckitGraph *graph . 360 * @param [ in ] AbckitInst *input0 . 361 * @param [ in ] AbckitInst *input1 . 362 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 363 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 364 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 365 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 366 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 367 */ 368 AbckitInst *(*iCreateShr)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */); 369 370 /** 371 * @brief Creates `AShr` inst. 372 * @return AbckitInst *. 373 * @param [ in ] AbckitGraph *graph . 374 * @param [ in ] AbckitInst *input0 . 375 * @param [ in ] AbckitInst *input1 . 376 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 377 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 378 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 379 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 380 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 381 */ 382 AbckitInst *(*iCreateAShr)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */); 383 384 /** 385 * @brief Creates `And` inst. 386 * @return AbckitInst *. 387 * @param [ in ] AbckitGraph *graph . 388 * @param [ in ] AbckitInst *input0 . 389 * @param [ in ] AbckitInst *input1 . 390 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 391 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 392 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 393 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 394 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 395 */ 396 AbckitInst *(*iCreateAnd)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */); 397 398 /** 399 * @brief Creates `Or` inst. 400 * @return AbckitInst *. 401 * @param [ in ] AbckitGraph *graph . 402 * @param [ in ] AbckitInst *input0 . 403 * @param [ in ] AbckitInst *input1 . 404 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 405 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 406 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 407 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 408 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 409 */ 410 AbckitInst *(*iCreateOr)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */); 411 412 /** 413 * @brief Creates `Xor` inst. 414 * @return AbckitInst *. 415 * @param [ in ] AbckitGraph *graph . 416 * @param [ in ] AbckitInst *input0 . 417 * @param [ in ] AbckitInst *input1 . 418 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 419 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 420 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 421 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 422 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 423 */ 424 AbckitInst *(*iCreateXor)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */); 425 426 /** 427 * @brief Creates `Cast` inst. 428 * @return AbckitInst *. 429 * @param [ in ] AbckitGraph *graph . 430 * @param [ in ] AbckitInst *input0 . 431 * @param [ in ] enum AbckitTypeId targetType . 432 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 433 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 434 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input0->graph is NULL. 435 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if input1->graph is NULL. 436 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if targetTypeId <= ABCKIT_TYPE_ID_INVALID 437 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if targetTypeId > ABCKIT_TYPE_ID_REFERENCE 438 */ 439 AbckitInst *(*iCreateCast)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, 440 enum AbckitTypeId targetType /* in */); 441 442 /** 443 * @brief Creates `NullPtr` inst. 444 * @return AbckitInst *. 445 * @param [ in ] AbckitGraph *graph . 446 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 447 */ 448 AbckitInst *(*gCreateNullPtr)(AbckitGraph *graph /* in */); 449 450 /** 451 * @brief Creates `NewArray` inst. 452 * @return AbckitInst *. 453 * @param [ in ] AbckitGraph *graph . 454 * @param [ in ] AbckitCoreClass *inputClass . 455 * @param [ in ] AbckitInst *inputSize . 456 * @note UNSUPPORTED 457 */ 458 AbckitInst *(*iCreateNewArray)(AbckitGraph *graph /* in */, AbckitCoreClass *inputClass /* in */, 459 AbckitInst *inputSize /* in */); 460 461 /** 462 * @brief Creates `NewObject` inst. 463 * @return AbckitInst *. 464 * @param [ in ] AbckitGraph *graph . 465 * @param [ in ] AbckitCoreClass *inputClass . 466 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 467 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitCoreClass *inputClass is NULL. 468 * @note Set `ABCKIT_STATUS_INTERNAL_ERROR` error if inputClass->owningModule is NULL. 469 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph->file` and `inputClass->owningModule->file` 470 * @note are not the same. 471 */ 472 AbckitInst *(*iCreateNewObject)(AbckitGraph *graph /* in */, AbckitCoreClass *inputClass /* in */); 473 474 /** 475 * @brief Creates `InitObject` inst. 476 * @return AbckitInst *. 477 * @param [ in ] AbckitGraph *graph . 478 * @param [ in ] AbckitCoreFunction *function . 479 * @param [ in ] size_t argCount . 480 * @param ... . 481 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 482 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitCoreFunction *function is NULL. 483 * @note Set `ABCKIT_STATUS_INTERNAL_ERROR` error if inputFunction->owningModule is NULL. 484 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph->file` and `inputFunction->owningModule->file` 485 * @note are not the same. 486 */ 487 AbckitInst *(*iCreateInitObject)(AbckitGraph *graph /* in */, AbckitCoreFunction *function /* in */, 488 size_t argCount /* in */, ... /* function params */); 489 490 /** 491 * @brief Creates `LoadArray` inst. 492 * @return AbckitInst *. 493 * @param [ in ] AbckitGraph *graph . 494 * @param [ in ] AbckitInst *arrayRef . 495 * @param [ in ] AbckitInst *idx . 496 * @param [ in ] enum AbckitTypeId returnTypeId . 497 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 498 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *arrayRef is NULL. 499 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *idx is NULL. 500 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `arrayRef->graph` 501 * @note and `idx->graph`are not the same. 502 */ 503 AbckitInst *(*iCreateLoadArray)(AbckitGraph *graph /* in */, AbckitInst *arrayRef /* in */, 504 AbckitInst *idx /* in */, enum AbckitTypeId returnTypeId /* in */); 505 506 /** 507 * @brief Creates `StoreArray` inst. 508 * @return AbckitInst *. 509 * @param [ in ] AbckitGraph *graph . 510 * @param [ in ] AbckitInst *arrayRef . 511 * @param [ in ] AbckitInst *idx . 512 * @param [ in ] AbckitInst *value . 513 * @param [ in ] enum AbckitTypeId valueTypeId . 514 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 515 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *arrayRef is NULL. 516 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *idx is NULL. 517 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *value is NULL. 518 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `arrayRef->graph`, 519 * @note `idx->graph` and `value->graph` are not the same. 520 */ 521 AbckitInst *(*iCreateStoreArray)(AbckitGraph *graph /* in */, AbckitInst *arrayRef /* in */, 522 AbckitInst *idx /* in */, AbckitInst *value /* in */, 523 enum AbckitTypeId valueTypeId /* in */); 524 525 /** 526 * @brief Creates `StoreArrayWide` inst. 527 * @return AbckitInst *. 528 * @param [ in ] AbckitGraph *graph . 529 * @param [ in ] AbckitInst *arrayRef . 530 * @param [ in ] AbckitInst *idx . 531 * @param [ in ] AbckitInst *value . 532 * @param [ in ] enum AbckitTypeId valueTypeId . 533 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 534 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *arrayRef is NULL. 535 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *idx is NULL. 536 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *value is NULL. 537 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `arrayRef->graph`, 538 * @note `idx->graph` and `value->graph` are not the same. 539 */ 540 AbckitInst *(*iCreateStoreArrayWide)(AbckitGraph *graph /* in */, AbckitInst *arrayRef /* in */, 541 AbckitInst *idx /* in */, AbckitInst *value /* in */, 542 enum AbckitTypeId valueTypeId /* in */); 543 544 /** 545 * @brief Creates `LenArray` inst. 546 * @return AbckitInst *. 547 * @param [ in ] AbckitGraph *graph . 548 * @param [ in ] AbckitInst *arr . 549 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 550 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *arr is NULL. 551 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph` and `arr->graph` 552 * @note are not the same. 553 */ 554 AbckitInst *(*iCreateLenArray)(AbckitGraph *graph /* in */, AbckitInst *arr /* in */); 555 556 /** 557 * @brief Creates `LoadConstArray` inst. 558 * @return AbckitInst *. 559 * @param [ in ] AbckitGraph *graph . 560 * @param [ in ] AbckitLiteralArray *literalArray . 561 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 562 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitLiteralArray *literalArray is NULL. 563 */ 564 AbckitInst *(*iCreateLoadConstArray)(AbckitGraph *graph /* in */, AbckitLiteralArray *literalArray /* in */); 565 566 /** 567 * @brief Creates `CheckCast` inst. 568 * @return AbckitInst *. 569 * @param [ in ] AbckitGraph *graph . 570 * @param [ in ] AbckitInst *inputObj . 571 * @param [ in ] AbckitType *targetType . 572 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 573 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *inputObj is NULL. 574 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitType *targetType is NULL. 575 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph` and `inputObj->graph` 576 * @note are not the same. 577 */ 578 AbckitInst *(*iCreateCheckCast)(AbckitGraph *graph /* in */, AbckitInst *inputObj /* in */, 579 AbckitType *targetType /* in */); 580 581 /** 582 * @brief Creates `IsInstance` inst. 583 * @return AbckitInst *. 584 * @param [ in ] AbckitGraph *graph . 585 * @param [ in ] AbckitInst *inputObj . 586 * @param [ in ] AbckitType *targetType . 587 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 588 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *inputObj is NULL. 589 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitType *targetType is NULL. 590 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph` and `inputObj->graph` 591 * @note are not the same. 592 */ 593 AbckitInst *(*iCreateIsInstance)(AbckitGraph *graph /* in */, AbckitInst *inputObj /* in */, 594 AbckitType *targetType /* in */); 595 596 /** 597 * @brief iCreateLoadNullValue. 598 * @return AbckitInst *. 599 * @param [ in ] AbckitGraph *graph . 600 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 601 */ 602 AbckitInst *(*iCreateLoadNullValue)(AbckitGraph *graph /* in */); 603 604 /** 605 * @brief Creates `ReturnVoid` inst. 606 * @return AbckitInst *. 607 * @param [ in ] AbckitGraph *graph . 608 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 609 */ 610 AbckitInst *(*iCreateReturnVoid)(AbckitGraph *graph /* in */); 611 612 /** 613 * @brief Creates `Equals` inst. 614 * @return AbckitInst *. 615 * @param [ in ] AbckitGraph *graph . 616 * @param [ in ] AbckitInst *input0 . 617 * @param [ in ] AbckitInst *input1 . 618 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 619 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 620 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 621 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `input0->graph` 622 * @note and `input1->graph` are not the same. 623 */ 624 AbckitInst *(*iCreateEquals)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, AbckitInst *input1 /* in */); 625 626 /** 627 * @brief iCreateStrictEquals. 628 * @return AbckitInst *. 629 * @param [ in ] AbckitGraph *graph . 630 * @param [ in ] AbckitInst *input0 . 631 * @param [ in ] AbckitInst *input1 . 632 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 633 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 634 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input1 is NULL. 635 */ 636 AbckitInst *(*iCreateStrictEquals)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, 637 AbckitInst *input1 /* in */); 638 639 /** 640 * @brief Creates `CallStatic` inst. 641 * @return AbckitInst *. 642 * @param [ in ] AbckitGraph *graph . 643 * @param [ in ] AbckitCoreFunction *function . 644 * @param [ in ] size_t argCount . 645 * @param ... . 646 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 647 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitCoreFunction *function is NULL. 648 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `function->graph` 649 * @note are not the same. 650 * @note Set `ABCKIT_STATUS_INTERNAL_ERROR` error if `inputFunction->owningModule` is NULL 651 */ 652 AbckitInst *(*iCreateCallStatic)(AbckitGraph *graph /* in */, AbckitCoreFunction *function /* in */, 653 size_t argCount /* in */, ... /* function params */); 654 655 /** 656 * @brief Creates `CallVirtual` inst. 657 * @return AbckitInst *. 658 * @param [ in ] AbckitGraph *graph . 659 * @param [ in ] AbckitInst *inputObj . 660 * @param [ in ] AbckitCoreFunction *function . 661 * @param [ in ] size_t argCount . 662 * @param ... . 663 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 664 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *inputObj is NULL. 665 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitCoreFunction *function is NULL. 666 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `inputObj->graph` 667 * @note are not the same. 668 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph->file`, `inputFunction->owningModule->file` 669 * @note are not the same. 670 * @note Set `ABCKIT_STATUS_INTERNAL_ERROR` error if `inputFunction->owningModule` is NULL 671 */ 672 AbckitInst *(*iCreateCallVirtual)(AbckitGraph *graph /* in */, AbckitInst *inputObj /* in */, 673 AbckitCoreFunction *function /* in */, size_t argCount /* in */, 674 ... /* function params */); 675 676 /** 677 * @brief Creates `AddI` inst. 678 * @return AbckitInst *. 679 * @param [ in ] AbckitGraph *graph . 680 * @param [ in ] AbckitInst *input0 . 681 * @param [ in ] uint64_t imm . 682 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 683 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 684 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `input0->graph` 685 * @note are not the same. 686 */ 687 AbckitInst *(*iCreateAddI)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, uint64_t imm /* in */); 688 689 /** 690 * @brief Creates `SubI` inst. 691 * @return AbckitInst *. 692 * @param [ in ] AbckitGraph *graph . 693 * @param [ in ] AbckitInst *input0 . 694 * @param [ in ] uint64_t imm . 695 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 696 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 697 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `input0->graph` 698 * @note are not the same. 699 */ 700 AbckitInst *(*iCreateSubI)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, uint64_t imm /* in */); 701 702 /** 703 * @brief Creates `MulI` inst. 704 * @return AbckitInst *. 705 * @param [ in ] AbckitGraph *graph . 706 * @param [ in ] AbckitInst *input0 . 707 * @param [ in ] uint64_t imm . 708 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 709 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 710 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `input0->graph` 711 * @note are not the same. 712 */ 713 AbckitInst *(*iCreateMulI)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, uint64_t imm /* in */); 714 715 /** 716 * @brief Creates `DivI` inst. 717 * @return AbckitInst *. 718 * @param [ in ] AbckitGraph *graph . 719 * @param [ in ] AbckitInst *input0 . 720 * @param [ in ] uint64_t imm . 721 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 722 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 723 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `input0->graph` 724 * @note are not the same. 725 */ 726 AbckitInst *(*iCreateDivI)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, uint64_t imm /* in */); 727 728 /** 729 * @brief Creates `ModI` inst. 730 * @return AbckitInst *. 731 * @param [ in ] AbckitGraph *graph . 732 * @param [ in ] AbckitInst *input0 . 733 * @param [ in ] uint64_t imm . 734 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 735 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 736 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `input0->graph` 737 * @note are not the same. 738 */ 739 AbckitInst *(*iCreateModI)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, uint64_t imm /* in */); 740 741 /** 742 * @brief Creates `ShlI` inst. 743 * @return AbckitInst *. 744 * @param [ in ] AbckitGraph *graph . 745 * @param [ in ] AbckitInst *input0 . 746 * @param [ in ] uint64_t imm . 747 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 748 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 749 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `input0->graph` 750 * @note are not the same. 751 */ 752 AbckitInst *(*iCreateShlI)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, uint64_t imm /* in */); 753 754 /** 755 * @brief Creates `ShrI` inst. 756 * @return AbckitInst *. 757 * @param [ in ] AbckitGraph *graph . 758 * @param [ in ] AbckitInst *input0 . 759 * @param [ in ] uint64_t imm . 760 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 761 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 762 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `input0->graph` 763 * @note are not the same. 764 */ 765 AbckitInst *(*iCreateShrI)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, uint64_t imm /* in */); 766 767 /** 768 * @brief Creates `AShrI` inst. 769 * @return AbckitInst *. 770 * @param [ in ] AbckitGraph *graph . 771 * @param [ in ] AbckitInst *input0 . 772 * @param [ in ] uint64_t imm . 773 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 774 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 775 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `input0->graph` 776 * @note are not the same. 777 */ 778 AbckitInst *(*iCreateAShrI)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, uint64_t imm /* in */); 779 780 /** 781 * @brief Creates `AndI` inst. 782 * @return AbckitInst *. 783 * @param [ in ] AbckitGraph *graph . 784 * @param [ in ] AbckitInst *input0 . 785 * @param [ in ] uint64_t imm . 786 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 787 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 788 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `input0->graph` 789 * @note are not the same. 790 */ 791 AbckitInst *(*iCreateAndI)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, uint64_t imm /* in */); 792 793 /** 794 * @brief Creates `OrI` inst. 795 * @return AbckitInst *. 796 * @param [ in ] AbckitGraph *graph . 797 * @param [ in ] AbckitInst *input0 . 798 * @param [ in ] uint64_t imm . 799 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 800 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 801 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `input0->graph` 802 * @note are not the same. 803 */ 804 AbckitInst *(*iCreateOrI)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, uint64_t imm /* in */); 805 806 /** 807 * @brief Creates `XorI` inst. 808 * @return AbckitInst *. 809 * @param [ in ] AbckitGraph *graph . 810 * @param [ in ] AbckitInst *input0 . 811 * @param [ in ] uint64_t imm . 812 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 813 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *input0 is NULL. 814 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `input0->graph` 815 * @note are not the same. 816 */ 817 AbckitInst *(*iCreateXorI)(AbckitGraph *graph /* in */, AbckitInst *input0 /* in */, uint64_t imm /* in */); 818 819 /** 820 * @brief Creates `Throw` inst. 821 * @return AbckitInst *. 822 * @param [ in ] AbckitGraph *graph . 823 * @param [ in ] AbckitInst *acc . 824 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 825 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *acc is NULL. 826 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `acc->graph` 827 * @note are not the same. 828 */ 829 AbckitInst *(*iCreateThrow)(AbckitGraph *graph /* in */, AbckitInst *acc /* in */); 830 831 /** 832 * @brief Creates `IsUndefined` inst. 833 * @return AbckitInst *. 834 * @param [ in ] AbckitGraph *graph . 835 * @param [ in ] AbckitInst *inputObj . 836 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitGraph *graph is NULL. 837 * @note Set `ABCKIT_STATUS_BAD_ARGUMENT` error if AbckitInst *inputObj is NULL. 838 * @note Set `ABCKIT_STATUS_WRONG_CTX` error if `graph`, `inputObj->graph` 839 * @note are not the same. 840 */ 841 AbckitInst *(*iCreateIsUndefined)(AbckitGraph *graph /* in */, AbckitInst *inputObj /* in */); 842 }; 843 844 /** 845 * @brief Instantiates API for for working with static ISA. 846 * @return Instance of the `AbckitIsaApiStatic` struct with valid function pointers. 847 * @param [ in ] version - Version of the API to instantiate. 848 * @note Set `ABCKIT_STATUS_UNKNOWN_API_VERSION` error if `version` value is not in the `AbckitApiVersion` enum. 849 */ 850 struct AbckitIsaApiStatic const *AbckitGetIsaApiStaticImpl(enum AbckitApiVersion version); 851 852 #ifdef __cplusplus 853 } 854 #endif 855 856 #endif // LIBABCKIT_ISA_ISA_STATIC_H 857