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_SRC_ADAPTER_STATIC_IR_STATIC_H 17 #define LIBABCKIT_SRC_ADAPTER_STATIC_IR_STATIC_H 18 19 #include "libabckit/include/c/metadata_core.h" 20 #include "libabckit/include/c/ir_core.h" 21 #include "libabckit/include/c/isa/isa_dynamic.h" 22 #include "libabckit/include/c/isa/isa_static.h" 23 24 #include <cstdint> 25 #include <cstdarg> 26 27 namespace libabckit { 28 29 // ======================================== 30 // Api for Graph manipulation 31 // ======================================== 32 33 AbckitBasicBlock *GgetStartBasicBlockStatic(AbckitGraph *graph); 34 AbckitBasicBlock *GgetEndBasicBlockStatic(AbckitGraph *graph); 35 AbckitBasicBlock *GgetBasicBlockStatic(AbckitGraph *graph, uint32_t id); 36 uint32_t GgetNumberOfParametersStatic(AbckitGraph *graph); 37 AbckitInst *GgetParameterStatic(AbckitGraph *graph, uint32_t index); 38 void GinsertTryCatchStatic(AbckitBasicBlock *tryFirstBB, AbckitBasicBlock *tryLastBB, AbckitBasicBlock *catchBeginBB, 39 AbckitBasicBlock *catchEndBB); 40 uint32_t GgetNumberOfBasicBlocksStatic(AbckitGraph *graph); 41 void GdumpStatic(AbckitGraph *graph, int fd); 42 void GrunPassRemoveUnreachableBlocksStatic(AbckitGraph *graph); 43 void IdumpStatic(AbckitInst *inst, int fd); 44 bool GvisitBlocksRPOStatic(AbckitGraph *graph, void *data, bool (*cb)(AbckitBasicBlock *bb, void *data)); 45 46 // ======================================== 47 // Api for basic block manipulation 48 // ======================================== 49 50 bool BBvisitSuccBlocksStatic(AbckitBasicBlock *curBasicBlock, void *data, 51 bool (*cb)(AbckitBasicBlock *succBasicBlock, void *data)); 52 bool BBvisitPredBlocksStatic(AbckitBasicBlock *curBasicBlock, void *data, 53 bool (*cb)(AbckitBasicBlock *succBasicBlock, void *data)); 54 bool BBvisitDominatedBlocksStatic(AbckitBasicBlock *basicBlock, void *data, 55 bool (*cb)(AbckitBasicBlock *dominatedBasicBlock, void *data)); 56 AbckitInst *BBgetFirstInstStatic(AbckitBasicBlock *basicBlock); 57 AbckitInst *BBgetLastInstStatic(AbckitBasicBlock *basicBlock); 58 AbckitGraph *BBgetGraphStatic(AbckitBasicBlock *basicBlock); 59 AbckitBasicBlock *BBgetTrueBranchStatic(AbckitBasicBlock *bb); 60 AbckitBasicBlock *BBgetFalseBranchStatic(AbckitBasicBlock *bb); 61 AbckitBasicBlock *BBcreateEmptyStatic(AbckitGraph *graph); 62 AbckitBasicBlock *BBgetSuccBlockStatic(AbckitBasicBlock *basicBlock, uint32_t index); 63 AbckitBasicBlock *BBgetPredBlockStatic(AbckitBasicBlock *basicBlock, uint32_t index); 64 AbckitBasicBlock *BBgetImmediateDominatorStatic(AbckitBasicBlock *basicBlock); 65 uint64_t BBgetSuccBlockCountStatic(AbckitBasicBlock *basicBlock); 66 uint64_t BBgetPredBlockCountStatic(AbckitBasicBlock *basicBlock); 67 uint32_t BBgetIdStatic(AbckitBasicBlock *basicBlock); 68 uint32_t BBgetNumberOfInstructionsStatic(AbckitBasicBlock *basicBlock); 69 AbckitBasicBlock *BBsplitBlockAfterInstructionStatic(AbckitBasicBlock *basicBlock, AbckitInst *inst, bool makeEdge); 70 void BBremoveAllInstsStatic(AbckitBasicBlock *basicBlock); 71 void BBaddInstFrontStatic(AbckitBasicBlock *basicBlock, AbckitInst *inst); 72 void BBaddInstBackStatic(AbckitBasicBlock *basicBlock, AbckitInst *inst); 73 void BBdumpStatic(AbckitBasicBlock *basicBlock, int fd); 74 void BBinsertSuccBlockStatic(AbckitBasicBlock *basicBlock, AbckitBasicBlock *succBlock, uint32_t index); 75 void BBappendSuccBlockStatic(AbckitBasicBlock *basicBlock, AbckitBasicBlock *succBlock); 76 void BBdisconnectSuccBlockStatic(AbckitBasicBlock *bb, size_t index); 77 bool BBisStartStatic(AbckitBasicBlock *basicBlock); 78 bool BBisEndStatic(AbckitBasicBlock *basicBlock); 79 bool BBisLoopHeadStatic(AbckitBasicBlock *basicBlock); 80 bool BBisLoopPreheadStatic(AbckitBasicBlock *basicBlock); 81 bool BBisTryBeginStatic(AbckitBasicBlock *basicBlock); 82 bool BBisTryStatic(AbckitBasicBlock *basicBlock); 83 bool BBisTryEndStatic(AbckitBasicBlock *basicBlock); 84 bool BBisCatchBeginStatic(AbckitBasicBlock *basicBlock); 85 bool BBisCatchStatic(AbckitBasicBlock *basicBlock); 86 bool BBcheckDominanceStatic(AbckitBasicBlock *basicBlock, AbckitBasicBlock *dominator); 87 AbckitInst *BBcreatePhiStatic(AbckitBasicBlock *bb, size_t argCount, std::va_list args); 88 AbckitInst *BBcreateCatchPhiStatic(AbckitBasicBlock *catchBegin, size_t argCount, std::va_list args); 89 90 // ======================================== 91 // Api for instruction manipulation 92 // ======================================== 93 94 AbckitInst *IcreateCallStaticStatic(AbckitGraph *graph, AbckitCoreFunction *inputFunction, size_t argCount, 95 va_list argp); 96 AbckitInst *IcreateCallVirtualStatic(AbckitGraph *graph, AbckitInst *inputObj, AbckitCoreFunction *inputFunction, 97 size_t argCount, va_list argp); 98 AbckitInst *IcreateLoadStringStatic(AbckitGraph *graph, AbckitString *str); 99 AbckitInst *GfindOrCreateConstantI32Static(AbckitGraph *graph, int32_t value); 100 AbckitInst *GfindOrCreateConstantI64Static(AbckitGraph *graph, int64_t value); 101 AbckitInst *GfindOrCreateConstantU64Static(AbckitGraph *graph, uint64_t value); 102 AbckitInst *GfindOrCreateConstantF64Static(AbckitGraph *graph, double value); 103 104 AbckitInst *IcreateCmpStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 105 AbckitInst *IcreateNegStatic(AbckitGraph *graph, AbckitInst *input0); 106 107 AbckitInst *IcreateAddStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 108 AbckitInst *IcreateSubStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 109 AbckitInst *IcreateMulStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 110 AbckitInst *IcreateDivStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 111 AbckitInst *IcreateModStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 112 AbckitInst *IcreateEqualsStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 113 AbckitInst *IcreateStrictEqualsStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 114 115 AbckitInst *IcreateAddIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm); 116 AbckitInst *IcreateSubIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm); 117 AbckitInst *IcreateMulIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm); 118 AbckitInst *IcreateDivIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm); 119 AbckitInst *IcreateModIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm); 120 121 AbckitInst *IcreateShlStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 122 AbckitInst *IcreateShrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 123 AbckitInst *IcreateAShrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 124 125 AbckitInst *IcreateShlIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm); 126 AbckitInst *IcreateShrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm); 127 AbckitInst *IcreateAShrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm); 128 129 AbckitInst *IcreateNotStatic(AbckitGraph *graph, AbckitInst *input0); 130 AbckitInst *IcreateOrStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 131 AbckitInst *IcreateXorStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 132 AbckitInst *IcreateAndStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 133 134 AbckitInst *IcreateOrIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm); 135 AbckitInst *IcreateXorIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm); 136 AbckitInst *IcreateAndIStatic(AbckitGraph *graph, AbckitInst *input0, uint64_t imm); 137 138 AbckitInst *IcreateLoadArrayStatic(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx, 139 AbckitTypeId returnTypeId); 140 AbckitInst *IcreateStoreArrayStatic(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx, AbckitInst *value, 141 AbckitTypeId valueTypeId); 142 AbckitInst *IcreateStoreArrayWideStatic(AbckitGraph *graph, AbckitInst *arrayRef, AbckitInst *idx, AbckitInst *value, 143 AbckitTypeId valueTypeId); 144 AbckitInst *IcreateLenArrayStatic(AbckitGraph *graph, AbckitInst *arr); 145 AbckitInst *IcreateLoadConstArrayStatic(AbckitGraph *graph, AbckitLiteralArray *literalArray); 146 147 AbckitInst *IcreateCheckCastStatic(AbckitGraph *graph, AbckitInst *inputObj, AbckitType *targetType); 148 AbckitInst *IcreateIsInstanceStatic(AbckitGraph *graph, AbckitInst *inputObj, AbckitType *targetType); 149 AbckitInst *IcreateLoadNullValueStatic(AbckitGraph *graph); 150 AbckitInst *IcreateCastStatic(AbckitGraph *graph, AbckitInst *input0, AbckitTypeId targetTypeId); 151 AbckitInst *IcreateIsUndefinedStatic(AbckitGraph *graph, AbckitInst *inputObj); 152 153 AbckitInst *IcreateThrowStatic(AbckitGraph *graph, AbckitInst *input0); 154 155 AbckitInst *IcreateReturnStatic(AbckitGraph *graph, AbckitInst *input0); 156 AbckitInst *IcreateReturnVoidStatic(AbckitGraph *graph); 157 AbckitInst *GcreateNullPtrStatic(AbckitGraph *graph); 158 159 int32_t IgetConstantValueI32Static(AbckitInst *inst); 160 int64_t IgetConstantValueI64Static(AbckitInst *inst); 161 uint64_t IgetConstantValueU64Static(AbckitInst *inst); 162 double IgetConstantValueF64Static(AbckitInst *inst); 163 AbckitLiteralArray *IgetLiteralArrayStatic(AbckitInst *inst); 164 void IsetLiteralArrayStatic(AbckitInst *inst, AbckitLiteralArray *la); 165 AbckitString *IgetStringStatic(AbckitInst *inst); 166 void IsetStringStatic(AbckitInst *inst, AbckitString *str); 167 168 AbckitInst *IcreateDynCallthis0Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 169 AbckitInst *IcreateDynCallthis1Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1); 170 AbckitInst *IcreateDynCallarg0Static(AbckitGraph *graph, AbckitInst *acc); 171 AbckitInst *IcreateDynCallarg1Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 172 AbckitInst *IcreateDynTryldglobalbynameStatic(AbckitGraph *graph, AbckitString *string); 173 AbckitInst *IcreateDynLdobjbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string); 174 AbckitInst *IcreateDynNewobjrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args); 175 176 AbckitInst *IcreateDynDefinefuncStatic(AbckitGraph *graph, AbckitCoreFunction *function, uint64_t imm0); 177 178 AbckitInst *IcreateDynNegStatic(AbckitGraph *graph, AbckitInst *acc); 179 180 AbckitInst *IcreateDynAdd2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 181 AbckitInst *IcreateDynSub2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 182 AbckitInst *IcreateDynMul2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 183 AbckitInst *IcreateDynDiv2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 184 AbckitInst *IcreateDynMod2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 185 AbckitInst *IcreateDynExpStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 186 187 AbckitInst *IcreateDynShl2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 188 AbckitInst *IcreateDynShr2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 189 AbckitInst *IcreateDynAshr2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 190 191 AbckitInst *IcreateDynNotStatic(AbckitGraph *graph, AbckitInst *acc); 192 AbckitInst *IcreateDynOr2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 193 AbckitInst *IcreateDynXor2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 194 AbckitInst *IcreateDynAnd2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 195 196 AbckitInst *IcreateDynIncStatic(AbckitGraph *graph, AbckitInst *acc); 197 AbckitInst *IcreateDynDecStatic(AbckitGraph *graph, AbckitInst *acc); 198 199 AbckitInst *IcreateDynEqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 200 AbckitInst *IcreateDynNoteqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 201 AbckitInst *IcreateDynLessStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 202 AbckitInst *IcreateDynLesseqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 203 AbckitInst *IcreateDynGreaterStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 204 AbckitInst *IcreateDynGreatereqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 205 AbckitInst *IcreateDynStrictnoteqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 206 AbckitInst *IcreateDynStricteqStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 207 208 AbckitInst *IcreateDynIstrueStatic(AbckitGraph *graph, AbckitInst *acc); 209 AbckitInst *IcreateDynIsfalseStatic(AbckitGraph *graph, AbckitInst *acc); 210 AbckitInst *IcreateDynTonumberStatic(AbckitGraph *graph, AbckitInst *acc); 211 AbckitInst *IcreateDynTonumericStatic(AbckitGraph *graph, AbckitInst *acc); 212 213 AbckitInst *IcreateDynThrowStatic(AbckitGraph *graph, AbckitInst *acc); 214 AbckitInst *IcreateDynThrowNotexistsStatic(AbckitGraph *graph); 215 AbckitInst *IcreateDynThrowPatternnoncoercibleStatic(AbckitGraph *graph); 216 AbckitInst *IcreateDynThrowDeletesuperpropertyStatic(AbckitGraph *graph); 217 AbckitInst *IcreateDynThrowConstassignmentStatic(AbckitGraph *graph, AbckitInst *input0); 218 AbckitInst *IcreateDynThrowIfnotobjectStatic(AbckitGraph *graph, AbckitInst *input0); 219 AbckitInst *IcreateDynThrowUndefinedifholeStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 220 AbckitInst *IcreateDynThrowIfsupernotcorrectcallStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0); 221 AbckitInst *IcreateDynThrowUndefinedifholewithnameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string); 222 223 AbckitInst *IcreateDynLdnanStatic(AbckitGraph *graph); 224 AbckitInst *IcreateDynLdinfinityStatic(AbckitGraph *graph); 225 AbckitInst *IcreateDynLdundefinedStatic(AbckitGraph *graph); 226 AbckitInst *IcreateDynLdnullStatic(AbckitGraph *graph); 227 AbckitInst *IcreateDynLdsymbolStatic(AbckitGraph *graph); 228 AbckitInst *IcreateDynLdglobalStatic(AbckitGraph *graph); 229 AbckitInst *IcreateDynLdtrueStatic(AbckitGraph *graph); 230 AbckitInst *IcreateDynLdfalseStatic(AbckitGraph *graph); 231 AbckitInst *IcreateDynLdholeStatic(AbckitGraph *graph); 232 AbckitInst *IcreateDynLdfunctionStatic(AbckitGraph *graph); 233 AbckitInst *IcreateDynLdnewtargetStatic(AbckitGraph *graph); 234 AbckitInst *IcreateDynLdthisStatic(AbckitGraph *graph); 235 236 AbckitInst *IcreateDynTypeofStatic(AbckitGraph *graph, AbckitInst *acc); 237 AbckitInst *IcreateDynIsinStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 238 AbckitInst *IcreateDynInstanceofStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 239 AbckitInst *IcreateDynReturnStatic(AbckitGraph *graph, AbckitInst *acc); 240 AbckitInst *IcreateDynReturnundefinedStatic(AbckitGraph *graph); 241 242 AbckitInst *IcreateDynStownbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string, AbckitInst *input0); 243 AbckitInst *IcreateDynStownbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1); 244 AbckitInst *IcreateDynStownbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0); 245 AbckitInst *IcreateDynWideStownbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0); 246 AbckitInst *IcreateDynStownbynamewithnamesetStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string, 247 AbckitInst *input0); 248 AbckitInst *IcreateDynStownbyvaluewithnamesetStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, 249 AbckitInst *input1); 250 AbckitInst *IcreateDynStobjbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1); 251 AbckitInst *IcreateDynStobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0); 252 AbckitInst *IcreateDynWideStobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, uint64_t imm0); 253 AbckitInst *IcreateDynStobjbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string, AbckitInst *input0); 254 255 AbckitInst *IcreateDynCreateemptyobjectStatic(AbckitGraph *graph); 256 257 AbckitInst *IcreateDynPoplexenvStatic(AbckitGraph *graph); 258 AbckitInst *IcreateDynGetunmappedargsStatic(AbckitGraph *graph); 259 AbckitInst *IcreateDynAsyncfunctionenterStatic(AbckitGraph *graph); 260 AbckitInst *IcreateDynDebuggerStatic(AbckitGraph *graph); 261 AbckitInst *IcreateDynGetpropiteratorStatic(AbckitGraph *graph, AbckitInst *acc); 262 AbckitInst *IcreateDynGetiteratorStatic(AbckitGraph *graph, AbckitInst *acc); 263 AbckitInst *IcreateDynGetasynciteratorStatic(AbckitGraph *graph, AbckitInst *acc); 264 AbckitInst *IcreateDynLdprivatepropertyStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1); 265 AbckitInst *IcreateDynStprivatepropertyStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1, 266 AbckitInst *input0); 267 AbckitInst *IcreateDynTestinStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1); 268 AbckitInst *IcreateDynDefinefieldbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string, 269 AbckitInst *input0); 270 AbckitInst *IcreateDynDefinepropertybynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string, 271 AbckitInst *input0); 272 AbckitInst *IcreateDynCreateemptyarrayStatic(AbckitGraph *graph); 273 AbckitInst *IcreateDynCreategeneratorobjStatic(AbckitGraph *graph, AbckitInst *input0); 274 AbckitInst *IcreateDynCreateiterresultobjStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1); 275 AbckitInst *IcreateDynCreateobjectwithexcludedkeysStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1, 276 uint64_t imm0, std::va_list args); 277 AbckitInst *IcreateDynWideCreateobjectwithexcludedkeysStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1, 278 uint64_t imm0, std::va_list args); 279 280 AbckitInst *IcreateDynDefineclasswithbufferStatic(AbckitGraph *graph, AbckitCoreFunction *function, 281 AbckitLiteralArray *literalArray, uint64_t imm0, AbckitInst *input0); 282 AbckitInst *IcreateDynNewobjapplyStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 283 AbckitInst *IcreateDynWideNewobjrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args); 284 AbckitInst *IcreateDynNewlexenvStatic(AbckitGraph *graph, uint64_t imm0); 285 AbckitInst *IcreateDynWideNewlexenvStatic(AbckitGraph *graph, uint64_t imm0); 286 AbckitInst *IcreateDynNewlexenvwithnameStatic(AbckitGraph *graph, uint64_t imm0, AbckitLiteralArray *literalArray); 287 AbckitInst *IcreateDynWideNewlexenvwithnameStatic(AbckitGraph *graph, uint64_t imm0, AbckitLiteralArray *literalArray); 288 289 AbckitInst *IcreateDynCreateasyncgeneratorobjStatic(AbckitGraph *graph, AbckitInst *input0); 290 AbckitInst *IcreateDynAsyncgeneratorresolveStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1, 291 AbckitInst *input2); 292 AbckitInst *IcreateDynCallruntimeNotifyconcurrentresultStatic(AbckitGraph *graph, AbckitInst *acc); 293 AbckitInst *IcreateDynCallruntimeDefinefieldbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, 294 AbckitInst *input1); 295 AbckitInst *IcreateDynCallruntimeDefinefieldbyindexStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, 296 AbckitInst *input0); 297 AbckitInst *IcreateDynCallruntimeTopropertykeyStatic(AbckitGraph *graph, AbckitInst *acc); 298 299 AbckitInst *IcreateDynCallruntimeDefineprivatepropertyStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, 300 uint64_t imm1, AbckitInst *input0); 301 AbckitInst *IcreateDynCallruntimeCallinitStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 302 303 AbckitInst *IcreateDynCallruntimeDefinesendableclassStatic(AbckitGraph *graph, AbckitCoreFunction *function, 304 AbckitLiteralArray *literalArray, uint64_t imm0, 305 AbckitInst *input0); 306 AbckitInst *IcreateDynCallruntimeLdsendableclassStatic(AbckitGraph *graph, uint64_t imm0); 307 AbckitInst *IcreateDynCallruntimeLdsendableexternalmodulevarStatic(AbckitGraph *graph, uint64_t imm0); 308 AbckitInst *IcreateDynCallruntimeWideldsendableexternalmodulevarStatic(AbckitGraph *graph, uint64_t imm0); 309 AbckitInst *IcreateDynCallruntimeNewsendableenvStatic(AbckitGraph *graph, uint64_t imm0); 310 AbckitInst *IcreateDynCallruntimeWidenewsendableenvStatic(AbckitGraph *graph, uint64_t imm0); 311 AbckitInst *IcreateDynCallruntimeStsendablevarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1); 312 AbckitInst *IcreateDynCallruntimeWidestsendablevarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, 313 uint64_t imm1); 314 AbckitInst *IcreateDynCallruntimeLdsendablevarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1); 315 AbckitInst *IcreateDynCallruntimeWideldsendablevarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1); 316 AbckitInst *IcreateDynCallruntimeIstrueStatic(AbckitGraph *graph, AbckitInst *acc); 317 AbckitInst *IcreateDynCallruntimeIsfalseStatic(AbckitGraph *graph, AbckitInst *acc); 318 AbckitInst *IcreateDynCallruntimeCreateprivatepropertyStatic(AbckitGraph *graph, uint64_t imm0, 319 AbckitLiteralArray *literalArray); 320 AbckitInst *IcreateDynCallargs2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1); 321 AbckitInst *IcreateDynCallargs3Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1, 322 AbckitInst *input2); 323 AbckitInst *IcreateDynCallrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args); 324 AbckitInst *IcreateDynWideCallrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args); 325 AbckitInst *IcreateDynSupercallspreadStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 326 AbckitInst *IcreateDynApplyStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1); 327 AbckitInst *IcreateDynCallthis2Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1, 328 AbckitInst *input2); 329 // CC-OFFNXT(G.FUN.01) This is function from public API 330 AbckitInst *IcreateDynCallthis3Static(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1, 331 AbckitInst *input2, AbckitInst *input3); 332 AbckitInst *IcreateDynCallthisrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args); 333 AbckitInst *IcreateDynWideCallthisrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, std::va_list args); 334 AbckitInst *IcreateDynSupercallthisrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args); 335 AbckitInst *IcreateDynWideSupercallthisrangeStatic(AbckitGraph *graph, size_t argCount, std::va_list args); 336 AbckitInst *IcreateDynSupercallarrowrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, 337 std::va_list args); 338 AbckitInst *IcreateDynWideSupercallarrowrangeStatic(AbckitGraph *graph, AbckitInst *acc, size_t argCount, 339 std::va_list args); 340 // CC-OFFNXT(G.FUN.01) This is function from public API 341 AbckitInst *IcreateDynDefinegettersetterbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, 342 AbckitInst *input1, AbckitInst *input2, AbckitInst *input3); 343 344 AbckitInst *IcreateDynResumegeneratorStatic(AbckitGraph *graph, AbckitInst *acc); 345 AbckitInst *IcreateDynGetresumemodeStatic(AbckitGraph *graph, AbckitInst *acc); 346 AbckitInst *IcreateDynGettemplateobjectStatic(AbckitGraph *graph, AbckitInst *acc); 347 AbckitInst *IcreateDynGetnextpropnameStatic(AbckitGraph *graph, AbckitInst *input0); 348 AbckitInst *IcreateDynDelobjpropStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 349 AbckitInst *IcreateDynSuspendgeneratorStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 350 AbckitInst *IcreateDynAsyncfunctionawaituncaughtStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 351 AbckitInst *IcreateDynCopydatapropertiesStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 352 AbckitInst *IcreateDynStarrayspreadStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1); 353 AbckitInst *IcreateDynSetobjectwithprotoStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 354 AbckitInst *IcreateDynLdobjbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 355 AbckitInst *IcreateDynLdsuperbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 356 AbckitInst *IcreateDynStsuperbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0, AbckitInst *input1); 357 AbckitInst *IcreateDynLdobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0); 358 AbckitInst *IcreateDynWideLdobjbyindexStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0); 359 AbckitInst *IcreateDynAsyncfunctionresolveStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 360 AbckitInst *IcreateDynAsyncfunctionrejectStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 361 AbckitInst *IcreateDynCopyrestargsStatic(AbckitGraph *graph, uint64_t imm0); 362 AbckitInst *IcreateDynWideCopyrestargsStatic(AbckitGraph *graph, uint64_t imm0); 363 AbckitInst *IcreateDynLdlexvarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1); 364 AbckitInst *IcreateDynWideLdlexvarStatic(AbckitGraph *graph, uint64_t imm0, uint64_t imm1); 365 AbckitInst *IcreateDynStlexvarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1); 366 AbckitInst *IcreateDynWideStlexvarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0, uint64_t imm1); 367 368 AbckitInst *IcreateDynTrystglobalbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string); 369 AbckitInst *IcreateDynLdglobalvarStatic(AbckitGraph *graph, AbckitString *string); 370 AbckitInst *IcreateDynStglobalvarStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string); 371 AbckitInst *IcreateDynLdsuperbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string); 372 AbckitInst *IcreateDynStsuperbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string, 373 AbckitInst *input0); 374 375 AbckitInst *IcreateDynLdbigintStatic(AbckitGraph *graph, AbckitString *string); 376 AbckitInst *IcreateDynLdthisbynameStatic(AbckitGraph *graph, AbckitString *string); 377 AbckitInst *IcreateDynStthisbynameStatic(AbckitGraph *graph, AbckitInst *acc, AbckitString *string); 378 AbckitInst *IcreateDynLdthisbyvalueStatic(AbckitGraph *graph, AbckitInst *acc); 379 AbckitInst *IcreateDynStthisbyvalueStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 380 AbckitInst *IcreateDynWideLdpatchvarStatic(AbckitGraph *graph, uint64_t imm0); 381 AbckitInst *IcreateDynWideStpatchvarStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0); 382 AbckitInst *IcreateDynDynamicimportStatic(AbckitGraph *graph, AbckitInst *acc); 383 AbckitInst *IcreateDynAsyncgeneratorrejectStatic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 384 AbckitInst *IcreateDynSetgeneratorstateStatic(AbckitGraph *graph, AbckitInst *acc, uint64_t imm0); 385 386 AbckitInst *IcreateDynGetmodulenamespaceStatic(AbckitGraph *graph, AbckitCoreModule *md); 387 AbckitInst *IcreateDynWideGetmodulenamespaceStatic(AbckitGraph *graph, AbckitCoreModule *md); 388 AbckitInst *IcreateDynLdexternalmodulevarStatic(AbckitGraph *graph, AbckitCoreImportDescriptor *id); 389 AbckitInst *IcreateDynWideLdexternalmodulevarStatic(AbckitGraph *graph, AbckitCoreImportDescriptor *id); 390 AbckitInst *IcreateDynLdlocalmodulevarStatic(AbckitGraph *graph, AbckitCoreExportDescriptor *ed); 391 AbckitInst *IcreateDynWideLdlocalmodulevarStatic(AbckitGraph *graph, AbckitCoreExportDescriptor *ed); 392 AbckitInst *IcreateDynStmodulevarStatic(AbckitGraph *graph, AbckitInst *acc, AbckitCoreExportDescriptor *ed); 393 AbckitInst *IcreateDynWideStmodulevarStatic(AbckitGraph *graph, AbckitInst *acc, AbckitCoreExportDescriptor *ed); 394 AbckitInst *IcreateDynCreatearraywithbufferStatic(AbckitGraph *graph, AbckitLiteralArray *literalArray); 395 AbckitInst *IcreateDynCreateobjectwithbufferStatic(AbckitGraph *graph, AbckitLiteralArray *literalArray); 396 397 AbckitInst *IcreateDynDefinemethodStatic(AbckitGraph *graph, AbckitInst *acc, AbckitCoreFunction *function, 398 uint64_t imm0); 399 400 void IremoveStatic(AbckitInst *inst); 401 uint32_t IgetIdStatic(AbckitInst *inst); 402 AbckitIsaApiStaticOpcode IgetOpcodeStaticStatic(AbckitInst *inst); 403 AbckitIsaApiDynamicOpcode IgetOpcodeDynamicStatic(AbckitInst *inst); 404 405 AbckitInst *IgetNextStatic(AbckitInst *instnext); 406 AbckitInst *IgetPrevStatic(AbckitInst *instprev); 407 void IinsertAfterStatic(AbckitInst *inst, AbckitInst *next); 408 void IinsertBeforeStatic(AbckitInst *inst, AbckitInst *prev); 409 bool IcheckDominanceStatic(AbckitInst *inst, AbckitInst *dominator); 410 bool IvisitUsersStatic(AbckitInst *inst, void *data, bool (*cb)(AbckitInst *user, void *data)); 411 bool IvisitInputsStatic(AbckitInst *inst, void *data, bool (*cb)(AbckitInst *input, size_t inputIdx, void *data)); 412 uint32_t IgetUserCountStatic(AbckitInst *inst); 413 void IsetImmediateStatic(AbckitInst *inst, size_t idx, uint64_t imm); 414 AbckitBitImmSize IgetImmediateSizeStatic(AbckitInst *inst, size_t idx); 415 416 uint64_t IgetInputCountStatic(AbckitInst *inst); 417 AbckitInst *IgetInputStatic(AbckitInst *inst, size_t index); 418 void IsetInputStatic(AbckitInst *inst, AbckitInst *input, int32_t index); 419 void IsetInputsStatic(AbckitInst *inst, size_t argCount, std::va_list args); 420 void IappendInputStatic(AbckitInst *inst, AbckitInst *input); 421 AbckitType *IgetTypeStatic(AbckitInst *inst); 422 AbckitTypeId IgetTargetTypeStatic(AbckitInst *inst); 423 void IsetTargetTypeStatic(AbckitInst *inst, AbckitTypeId t); 424 AbckitCoreFunction *IgetFunctionStatic(AbckitInst *inst); 425 void IsetFunctionStatic(AbckitInst *inst, AbckitCoreFunction *function); 426 void IsetClassStatic(AbckitInst *inst, AbckitCoreClass *klass); 427 AbckitCoreClass *IgetClassStatic(AbckitInst *inst); 428 uint64_t IgetImmediateStatic(AbckitInst *inst, size_t idx); 429 uint64_t IgetImmediateCountStatic(AbckitInst *inst); 430 AbckitInst *IcreateIfStaticStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1, 431 AbckitIsaApiStaticConditionCode cc); 432 AbckitInst *IcreateIfDynamicStatic(AbckitGraph *graph, AbckitInst *input0, AbckitInst *input1, 433 AbckitIsaApiDynamicConditionCode cc); 434 AbckitInst *IcreateTryStatic(AbckitGraph *graph); 435 AbckitBasicBlock *IgetBasicBlockStatic(AbckitInst *inst); 436 AbckitGraph *IgetGraphStatic(AbckitInst *inst); 437 AbckitCoreModule *IgetModuleStatic(AbckitInst *inst); 438 uint32_t GetImportDescriptorIdxDynamic(AbckitGraph *graph, AbckitCoreImportDescriptor *id); 439 uint32_t GetExportDescriptorIdxDynamic(AbckitGraph *graph, AbckitCoreExportDescriptor *ed); 440 uint64_t GetModuleIndex(AbckitGraph *graph, AbckitCoreModule *md); 441 void IsetModuleStatic(AbckitInst *inst, AbckitCoreModule *md); 442 AbckitCoreImportDescriptor *IgetImportDescriptorStatic(AbckitInst *inst); 443 void IsetImportDescriptorStatic(AbckitInst *inst, AbckitCoreImportDescriptor *id); 444 AbckitCoreExportDescriptor *IgetExportDescriptorStatic(AbckitInst *inst); 445 void IsetExportDescriptorStatic(AbckitInst *inst, AbckitCoreExportDescriptor *ed); 446 AbckitIsaApiStaticConditionCode IgetConditionCodeStaticStatic(AbckitInst *inst); 447 AbckitIsaApiDynamicConditionCode IgetConditionCodeDynamicStatic(AbckitInst *inst); 448 void IsetConditionCodeStaticStatic(AbckitInst *inst, AbckitIsaApiStaticConditionCode cc); 449 void IsetConditionCodeDynamicStatic(AbckitInst *inst, AbckitIsaApiDynamicConditionCode cc); 450 451 AbckitInst *IcreateDynCallarg0Dynamic(AbckitGraph *graph, AbckitInst *acc); 452 AbckitInst *IcreateDynCallarg1Dynamic(AbckitGraph *graph, AbckitInst *acc, AbckitInst *input0); 453 AbckitInst *IcreateDynIfStatic(AbckitGraph *graph, AbckitInst *input, AbckitIsaApiDynamicConditionCode cc); 454 455 AbckitInst *IcreateNewArrayStatic(AbckitGraph *graph, AbckitCoreClass *inputClass, AbckitInst *inputSize); 456 457 AbckitInst *IcreateNewObjectStatic(AbckitGraph *graph, AbckitCoreClass *inputClass); 458 AbckitInst *IcreateInitObjectStatic(AbckitGraph *graph, AbckitCoreFunction *inputFunction, size_t argCount, 459 va_list argp); 460 461 bool IcheckIsCallStatic(AbckitInst *inst); 462 463 } // namespace libabckit 464 465 #endif 466