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